Ver código fonte

Fixed boss monster skills being completely random (fixes #951)
- Boss monster skills no longer will have a random element
- Fixed boss monster skills being significantly weaker than they should be
- Prepared layout defines for upcoming MVP skill fixes
- Increased MAX_SKILLTIMERSKILL to 50 as this is maximum number of meteors you can have "in store" officially

Playtester 9 anos atrás
pai
commit
e3667f4a07
2 arquivos alterados com 10 adições e 9 exclusões
  1. 5 4
      src/map/skill.c
  2. 5 5
      src/map/skill.h

+ 5 - 4
src/map/skill.c

@@ -232,10 +232,11 @@ static void skill_chk2(int *idx) {
 	if (!(id))\
 		return 0;\
 	idx = min((lv), MAX_SKILL_LEVEL) - 1;\
-	if ((lv) > MAX_SKILL_LEVEL && (arrvar)[idx] > 1) {\
-		int lv__ = (lv);\
-		(lv) = skill_db[(id)]->max-1;\
-		return ((arrvar)[(lv)] + ((lv__-(lv))/2));\
+	if ((lv) > MAX_SKILL_LEVEL && (arrvar)[idx] > 1 && idx > 1) {\
+		int a__ = (arrvar)[idx-2];\
+		int b__ = (arrvar)[idx-1];\
+		int c__ = (arrvar)[idx];\
+		return (c__ + (((lv)-MAX_SKILL_LEVEL+1)*(b__-a__)/2) + (((lv)-MAX_SKILL_LEVEL)*(c__-b__)/2));\
 	}\
 	return ((arrvar)[idx]);\
 } while(0)

+ 5 - 5
src/map/skill.h

@@ -20,7 +20,7 @@ struct status_change_entry;
 #define MAX_ARROW_RESULT		5 /// Max Arrow results/created
 #define MAX_SKILL_ABRA_DB		160 /// Max Skill list of Abracadabra DB
 #define MAX_SKILL_IMPROVISE_DB 30 /// Max Skill for Improvise
-#define MAX_SKILL_LEVEL 10 /// Max Skill Level (for skill_db storage)
+#define MAX_SKILL_LEVEL 13 /// Max Skill Level (for skill_db storage)
 #define MAX_MOBSKILL_LEVEL 100	/// Max monster skill level (on skill usage)
 #define MAX_SKILL_CRIMSON_MARKER 3 /// Max Crimson Marker targets (RL_C_MARKER)
 #define SKILL_NAME_LENGTH 31 /// Max Skill Name length
@@ -226,10 +226,10 @@ struct s_skill_db {
 };
 extern struct s_skill_db **skill_db;
 
-#define MAX_SKILL_UNIT_LAYOUT	52
+#define MAX_SQUARE_LAYOUT		7	// 15*15 unit placement maximum
+#define MAX_SKILL_UNIT_LAYOUT	(47+MAX_SQUARE_LAYOUT)	// 47 special ones + the square ones
 #define MAX_SKILL_UNIT_LAYOUT2	17
-#define MAX_SQUARE_LAYOUT		5	// 11*11 Placement of a maximum unit
-#define MAX_SKILL_UNIT_COUNT ((MAX_SQUARE_LAYOUT*2+1)*(MAX_SQUARE_LAYOUT*2+1))
+#define MAX_SKILL_UNIT_COUNT	((MAX_SQUARE_LAYOUT*2+1)*(MAX_SQUARE_LAYOUT*2+1))
 struct s_skill_unit_layout {
 	int count;
 	int dx[MAX_SKILL_UNIT_COUNT];
@@ -242,7 +242,7 @@ struct s_skill_nounit_layout {
 	int dy[MAX_SKILL_UNIT_COUNT];
 };
 
-#define MAX_SKILLTIMERSKILL 40
+#define MAX_SKILLTIMERSKILL 50
 struct skill_timerskill {
 	int timer;
 	int src_id;