Browse Source

Fixed max HP/SP of extended classes in pre-re
- Fixed max HP/SP of extended classes being way too low in pre-renewal (related to #358)
* It's impossible to make it 100% accurate without tables, but I made it as accurate as possible for now
* More updates to max HP/SP will follow when I have time

Playtester 10 years ago
parent
commit
df2f850c74
2 changed files with 25 additions and 5 deletions
  1. 4 4
      db/pre-re/job_db1.txt
  2. 21 1
      src/map/pc.c

+ 4 - 4
db/pre-re/job_db1.txt

@@ -52,9 +52,9 @@
 // Super Novice
 // Super Novice
 23,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
 23,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
 // Gunslinger
 // Gunslinger
-24,	28000,75   ,  0  ,400  ,500  ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 750 , 700 ,1500 ,1500 ,2000 ,2000
+24,	28000,89   ,  0  ,462  ,500  ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 750 , 700 ,1500 ,1500 ,2000 ,2000
 // Ninja
 // Ninja
-25,	26000,80   ,  0  ,300  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000
+25,	26000,80   ,  0  ,530  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000
 // Novice High
 // Novice High
 4001,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
 4001,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
 // Swordman High
 // Swordman High
@@ -148,9 +148,9 @@
 // Taekwon
 // Taekwon
 4046, 28000,70   ,500  ,200  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 4046, 28000,70   ,500  ,200  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Star Gladiator
 // Star Gladiator
-4047, 28000,90   ,650  ,400  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+4047, 28000,90   ,650  ,470  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Star Gladiator (Union)
 // Star Gladiator (Union)
-4048, 28000,90   ,650  ,400  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+4048, 28000,90   ,650  ,470  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Soul Linker
 // Soul Linker
 4049, 24000,75   ,500  ,900  ,500  ,575  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625 
 4049, 24000,75   ,500  ,900  ,500  ,575  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625 
 //================================
 //================================

+ 21 - 1
src/map/pc.c

@@ -10478,11 +10478,31 @@ static unsigned int pc_calc_basehp(uint16 level, uint16 class_idx) {
 	uint16 i;
 	uint16 i;
 
 
 	base_hp = 35 + level * (job_info[class_idx].hp_multiplicator/100.);
 	base_hp = 35 + level * (job_info[class_idx].hp_multiplicator/100.);
+#ifndef RENEWAL
+	if(level >= 10 && (class_idx == JOB_NINJA || class_idx == JOB_GUNSLINGER)) base_hp += 90;
+#endif
 	for (i = 2; i <= level; i++)
 	for (i = 2; i <= level; i++)
 		base_hp += floor(((job_info[class_idx].hp_factor/100.) * i) + 0.5); //Don't have round()
 		base_hp += floor(((job_info[class_idx].hp_factor/100.) * i) + 0.5); //Don't have round()
 	return (unsigned int)base_hp;
 	return (unsigned int)base_hp;
 }
 }
 
 
+/** [Playter]
+* Calculates base sp of player.
+* @param level Base level of player
+* @param idx Index of class
+* @return base_sp
+*/
+static unsigned int pc_calc_basesp(uint16 level, uint16 class_idx) {
+	double base_sp;
+
+	base_sp = 10 + floor(level * (job_info[class_idx].sp_factor / 100.));
+#ifndef RENEWAL
+	if(level >= 10 && class_idx == JOB_NINJA) base_sp -= 20;
+	if(level >= 10 && class_idx == JOB_GUNSLINGER) base_sp -= 17;
+#endif
+	return (unsigned int)base_sp;
+}
+
 //Reading job_db1.txt line, (class,weight,HPFactor,HPMultiplicator,SPFactor,aspd/lvl...)
 //Reading job_db1.txt line, (class,weight,HPFactor,HPMultiplicator,SPFactor,aspd/lvl...)
 static bool pc_readdb_job1(char* fields[], int columns, int current){
 static bool pc_readdb_job1(char* fields[], int columns, int current){
 	int idx, class_;
 	int idx, class_;
@@ -10850,7 +10870,7 @@ void pc_readdb(void) {
 			if (job_info[idx].base_hp[j] == 0)
 			if (job_info[idx].base_hp[j] == 0)
 				job_info[idx].base_hp[j] = pc_calc_basehp(j+1,idx);
 				job_info[idx].base_hp[j] = pc_calc_basehp(j+1,idx);
 			if (job_info[idx].base_sp[j] == 0)
 			if (job_info[idx].base_sp[j] == 0)
-				job_info[idx].base_sp[j] = 10 + (unsigned int)floor((j+1) * (job_info[idx].sp_factor / 100.));
+				job_info[idx].base_sp[j] = pc_calc_basesp(j+1,idx);
 		}
 		}
 	}
 	}
 }
 }