Browse Source

* Fixed skill_calc_heal applying heal bonuses only to AL_HEAL.
* Still working on updating the status window to display properly.
* Refine bonuses on armor now apply properly. (+1 additional bonus for every 4 refines.) Refining in general now goes up to 20.
* Criticals will now no longer ignore defense, but will still always hit.
* Converted m/def2 to a short, for testing status window update, will eventually need to surpass 32k. Good like this for now while we work on it.
* Cleaned up some minor things relating tot he arch bishop skill update.
* Applied some of the 30/08/2011 kRO updates to arch bishop skills.
* Added more SI_ Constants from newer clients to status.h.

* Added constants to the database for future updates.
* Updated Runestones and creation items.
* Added Runestone delays to item_delay.
* Added Runestones receipies to produce_db.
* Added dummy rates to refine_db.
* Added Rune Knight skills to skill_cast_db
* Updated Rune Knight skills, and Arch Bishop skills.
* Updated SP requirements in skill_require_db.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/renewal@14964 54d463be-8e91-2dee-dedb-b68131a5f0ec

L0ne_W0lf 13 years ago
parent
commit
961cb1ba1b

+ 10 - 0
Changelog-Renewal.txt

@@ -1,5 +1,15 @@
 Date	Added
 
+2011/09/30
+	* Rev. 14963 Just a slew of back-logged source updates. [L0ne_W0lf]
+	* Fixed skill_calc_heal applying heal bonuses only to AL_HEAL.
+	* Still working on updating the status window to display properly.
+	* Refine bonuses on armor now apply properly. (+1 additional bonus for every 4 refines.) Refining in general now goes up to 20.
+	* Criticals will now no longer ignore defense, but will still always hit.
+	* Converted m/def2 to a short, for testing status window update, will eventually need to surpass 32k. Good like this for now while we work on it.
+	* Cleaned up some minor things relating tot he arch bishop skill update.
+	* Applied some of the 30/08/2011 kRO updates to arch bishop skills.
+	* Added more SI_ Constants from newer clients to status.h.
 2011/08/28
 	* Rev. 14948 Fixed Blessing crashing the server when used on monsters, monster weapon attack mechanics are currently unknown. [L0ne_W0lf]
 	* Updated conditions for UNT_EPICLESIS and AB_ADORAMUS (two cases of || to &&.)

+ 1 - 1
conf/battle/player.conf

@@ -101,7 +101,7 @@ max_baby_third_parameter: 108
 // NOTE: does not affects skills and status effects like Mental Strength
 // If weapon_defense_type is non-zero, it won't apply to max def.
 // If magic_defense_type is non-zero, it won't apply to max mdef.
-max_def: 9999
+max_def: 32767
 
 // Def to Def2 conversion bonus. If the armor def/mdef exceeds max_def,
 // the remaining is converted to vit def/int mdef using this multiplier

+ 1 - 1
conf/char_athena.conf

@@ -10,7 +10,7 @@ passwd: p1
 
 // Server name, use alternative character such as ASCII 160 for spaces.
 // NOTE: Do not use spaces in the name, or guild emblems won't work client-side!
-server_name: eAthena
+server_name: eAthenaRE
 
 // Wisp name for server: used to send wisp from server to players (between 4 to 23 characters)
 wisp_server_name: Server

+ 10 - 0
db/Changelog.txt

@@ -9,6 +9,16 @@
 	13005 Angelic Wing Dagger:	NEED INFO.
 =======================
 
+2011/09/30
+	* Rev. 14963 Minor changes from kRO's 30/08/2011 maintainence, and general updates. [L0ne_W0lf]
+	* Added constants to the database for future updates.
+	* Updated Runestones and creation items.
+	* Added Runestone delays to item_delay.
+	* Added Runestones receipies to produce_db.
+	* Added dummy rates to refine_db.
+	* Added Rune Knight skills to skill_cast_db
+	* Updated Rune Knight skills, and Arch Bishop skills.
+	* Updated SP requirements in skill_require_db.
 2011/08/26
 	* Rev. 14941 Several updates in relation to 3rd jobs. [L0ne_W0lf]
 2011/08/10

+ 30 - 1
db/const.txt

@@ -252,6 +252,21 @@ EAJ_BABY_SOUL_LINKER	0x2207
 Option_Wedding	0x1000
 Option_Xmas	0x10000
 Option_Summer	0x40000
+Option_Dragon1	0x80000
+Option_Wug	0x100000
+Option_Wugrider	0x200000
+Option_Madogear	0x400000
+Option_Dragon2	0x800000
+Option_Dragon3	0x1000000
+Option_Dragon4	0x2000000
+Option_Dragon5	0x4000000
+Option_Riding2	0x8000000
+
+DRAGON_GREEN	0
+DRAGON_BLACK	1
+DRAGON_WHITE	2
+DRAGON_BLUE	3
+DRAGON_RED	4
 
 bc_all	0
 bc_map	1
@@ -671,6 +686,8 @@ SC_CONFUSION	7
 SC_BLIND	8
 SC_BLEEDING	9
 SC_DPOISON	10
+//SC_FEAR	11
+//SC_BURNING	12
 SC_PROVOKE	20
 SC_ENDURE	21
 SC_TWOHANDQUICKEN	22
@@ -959,7 +976,7 @@ SC_PARTYFLEE	310
 //SC_ENDURE_MDEF	311
 //SC_ENCHANTBLADE	312
 //SC_DEATHBOUND	313
-//SC_REFRESH	314
+//SC_REUSE_REFRESH	314
 //SC_GIANTGROWTH	315
 //SC_STONEHARDSKIN	316
 //SC_VITALITYACTIVATION	317
@@ -2127,3 +2144,15 @@ IT_PETARMOR	8
 IT_AMMO	10
 IT_DELAYCONSUME	11
 IT_CASH	18
+
+Runestone_Ordinary	12737
+Runestone_Quality	12734
+Runestone_Rare	12738
+Runestone_Ancient	12735
+Runestone_Mystic	12736
+
+Produce_Weaponlvl1	1
+Produce_Weaponlvl2	2
+Produce_Weaponlvl3	3
+Produce_Materials	21
+Produce_Runestone	24

+ 19 - 19
db/item_db.txt

@@ -115,10 +115,10 @@
 609,Amulet,Amulet,2,100,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 610,Leaf_Of_Yggdrasil,Yggdrasil Leaf,11,4000,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "ALL_RESURRECTION",1; },{},{}
 611,Spectacles,Magnifier,11,40,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "MC_IDENTIFY",1; },{},{}
-612,Portable_Furnace,Mini Furnace,2,150,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 21; },{},{}
-613,Iron_Hammer,Iron Hammer,2,1000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 1; },{},{}
-614,Golden_Hammer,Golden Hammer,2,3000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 2; },{},{}
-615,Oridecon_Hammer,Oridecon Hammer,2,5000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 3; },{},{}
+612,Portable_Furnace,Mini Furnace,2,150,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Materials; },{},{}
+613,Iron_Hammer,Iron Hammer,2,1000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl1; },{},{}
+614,Golden_Hammer,Golden Hammer,2,3000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl2; },{},{}
+615,Oridecon_Hammer,Oridecon Hammer,2,5000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl3; },{},{}
 616,Old_Card_Album,Old Card Album,2,10000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_CardAlbum),1; },{},{}
 617,Old_Violet_Box,Old Purple Box,2,10000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_VioletBox),1; },{},{}
 618,Worn_Out_Scroll,Worn Out Scroll,2,50,,20,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_ScrollBox),1; },{},{}
@@ -2809,7 +2809,7 @@
 //5477,Bro_Flag,Brazilian Flag Hat,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,30,1,474,{ skill "SM_BASH",1; },{},{}
 //5478,Classic_Hat,Classic Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,475,{ bonus bStr,2; bonus bMaxHP,300; },{},{}
 5479,Shaman's_Hair_Ornament,Shaman's Hair Decoration,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,30,1,476,{ bonus bMdef,3; bonus bMaxHP,50; bonus2 bSubEle,Ele_Neutral,5; if(isequipped(2777,2778)) { bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; } },{},{}
-5480,Bizofnil_Wing_Deco,Bijofnil Wings,5,20,,1000,,3,,0,0xFFFFFFFF,7,2,256,,30,1,477,{  bonus bAllStats,2; bonus3 bAutoSpell,"PR_IMPOSITIO",3,3; },{},{}
+5480,Bizofnil_Wing_Deco,Bijofnil Wings,5,20,,1000,,3,,0,0xFFFFFFFF,7,2,256,,30,1,477,{ bonus bAllStats,2; bonus3 bAutoSpell,"PR_IMPOSITIO",3,3; },{},{}
 5481,Hermose_Cap,Hermode Cap,5,20,,1000,,1,,1,0xFFFFFFFF,7,2,256,,1,1,478,{ bonus bAspdRate,10; bonus bBaseAtk,-20; bonus bMatkRate,-10; },{},{}
 5482,Dark_Knight_Mask,Dark Knight Mask,5,,,3000,,5,,0,0xFFFFFFFF,7,2,769,,80,1,479,{ bonus bStr,3; if(isequipped(2779,2780)) { bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; } },{},{}
 5483,Odin_Mask,Odin Mask,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,50,0,480,{ bonus bHit,-10; bonus2 bAddRace,RC_Demihuman,6; },{},{}
@@ -5309,20 +5309,20 @@
 12722,Poison_Fever,Pyrexia,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12723,Poison_Laughing,Magic Mushroom,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12724,Poison_Fatigue,Venom Bleed,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12725,Runstone_Nosiege,Nosiege Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12726,Runstone_Rhydo,Rhydo Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12727,Runstone_Verkana,Verkana Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12728,Runstone_Isia,Isia Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12729,Runstone_Asir,Asir Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12730,Runstone_Urj,Urj Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12731,Runstone_Turisus,Turisus Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12732,Runstone_Pertz,Pertz Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12733,Runstone_Hagalas,Hagalas Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12734,Runstone_Quality,Quality Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12735,Runstone_Ancient,Ancient Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12736,Runstone_Mystic,Mystic Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12737,Runstone_Ordinary,General Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12738,Runstone_Rare,Rare Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12725,Runstone_Nosiege,Nosiege Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_REFRESH",1; },{},{}
+12726,Runstone_Rhydo,Rydo Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_CRUSHSTRIKE",1; },{},{}
+12727,Runstone_Verkana,Verkana Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_MILLENNIUMSHIELD",1; },{},{}
+12728,Runstone_Isia,Isia Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_VITALITYACTIVATION",1; },{},{}
+12729,Runstone_Asir,Asir Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_FIGHTINGSPIRIT",1; },{},{}
+12730,Runstone_Urj,Urj Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_ABUNDANCE",1; },{},{}
+12731,Runstone_Turisus,Tursius Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_GIANTGROWTH",1; },{},{}
+12732,Runstone_Pertz,Pertz Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_STORMBLAST",1; },{},{}
+12733,Runstone_Hagalas,Hagalas Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_STONEHARDSKIN",1; },{},{}
+12734,Runstone_Quality,Quality Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Quality; */ },{},{}
+12735,Runstone_Ancient,Ancient Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Ancient; */ },{},{}
+12736,Runstone_Mystic,Mystic Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Mystic; */ },{},{}
+12737,Runstone_Ordinary,General Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Ordinary; */ },{},{}
+12738,Runstone_Rare,Rare Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Rare; */ },{},{}
 12739,Snow_Flower,Snow Flowers,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12740,Inc_Str_Scroll,Amplification Scroll,2,1,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12741,Inc_Int_Scroll,Intellect Amplification Scroll,2,1,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}

+ 10 - 0
db/item_delay.txt

@@ -14,3 +14,13 @@
 12210,60000	//Bubble_Gum
 14538,300000	//Glass_Of_Illusion
 14586,180000	//Spark_Candy
+// Third Jobs
+// Rune Knight Runestones. 
+12725,21600000	//Runstone_Nosiege
+12727,21600000	//Runstone_Verkana
+12728,18000000	//Runstone_Isia
+12729,18000000	//Runstone_Asir
+12730,18000000	//Runstone_Urj
+12731,18000000	//Runstone_Turisus
+12732,18000000	//Runstone_Pertz
+12733,18000000	//Runstone_Hagalas

+ 26 - 3
db/produce_db.txt

@@ -396,9 +396,32 @@
 
 //==============================================
 
-//===== Third Class === ItemLV=24 ==================
+//===== Third Class === ItemLV=?? ==============
+
+//---- Rune Kight ------------------------------
+//--- Tursius Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Cobold_Hair 1, Claw_Of_Desert_Wolf 1
+12731,24,2010,1,7939,1,1034,1,7030,1
+//--- Isia Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Burning_Heart 1
+12728,24,2010,2,7939,1,7097,1
+//--- Pertz Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Tangled_Chain 1, Dragon_Canine 1
+12732,24,2010,3,7939,1,7938,1,7221,1,1035,1
+//--- Hagalas Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Round_Shell 1, Dragon's_Skin 1
+12733,24,2010,4,7939,1,1096,1,7123,1
+//--- Asir Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Ogre_Tooth 1
+12729,24,2010,5,7939,1,7938,1,7002,1
+//--- Urj Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Slender_Snake 1, Honey 1
+12730,24,2010,6,7939,1,1048,1,518,1
+//--- Rhydo Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Red_Gemstone 1
+12726,24,2010,7,7939,1,7938,1,716,1
+//--- Noseige Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Broken_Armor_Piece 1, Old_Magic_Circle 1
+12725,24,2010,8,7939,2,7938,2,7069,1,618,1
+//--- Verkana Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Dullahan_Armor 1
+12727,24,2010,9,7939,1,7210,1
+//----------------------------------------------
 
-//----------------------------------------------------------------------------------------------------------------------------
+//---- Arch Bishop -----------------------------
 //-- Ancilla <-- AB_ANCILLA & 1 Blue Gemstone
 12333,22,2039,1,717,1
-//----------------------------------------------------------------------------------------------------------------------------
+//----------------------------------------------
+
+//==============================================

+ 5 - 5
db/refine_db.txt

@@ -3,8 +3,8 @@
 // Armor defense is done in percentage (ie 70 = .7 def)
 // Weapons are whole numbers (ie 3 = 3 atk)
 
- 100, 200, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10,	// Armor
-   2,   3, 7, 100,100,100,100,100,100,100, 60, 40, 20,	// Lv.1 Weapons
-   3,   5, 6, 100,100,100,100,100,100, 60, 40, 20, 20,	// Lv.2 Weapons
-   5,   8, 5, 100,100,100,100,100, 60, 50, 20, 20, 20,	// Lv.3 Weapons
-   7,  13, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10,	// Lv.4 Weapons
+ 100, 200, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,	// Armor
+   2,   3, 7, 100,100,100,100,100,100,100, 60, 40, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,	// Lv.1 Weapons
+   3,   5, 6, 100,100,100,100,100,100, 60, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,	// Lv.2 Weapons
+   5,   8, 5, 100,100,100,100,100, 60, 50, 20, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,	// Lv.3 Weapons
+   7,  13, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,	// Lv.4 Weapons

+ 37 - 0
db/skill_cast_db.txt

@@ -1051,6 +1051,43 @@
 1019,2000,2000,1000,0,0,1800000,0
 //==========================================
 
+//===== Rune Knight ========================
+//-- RK_ENCHANTBLADE
+2001,1000,0,0,0,0,300000,0
+//-- RK_SONICWAVE
+2002,0,0,1000,2000,0,0,0
+//-- RK_DEATHBOUND
+2003,0,0,2000,3000,0,2000,0
+//-- RK_HUNDREDSPEAR
+2004,1000,0,500,0,0,0,0
+//-- RK_WINDCUTTER - Duration1: Fear status duration
+2005,0,0,0,2000,0,15000,0
+//-- RK_IGNITIONBREAK
+2006,1000,0,0,2000,0,0,0
+
+//-- RK_DRAGONBREATH - Duration1: Burning status duration
+2008,0:0:0:1000:1000:1000:1500:1500:2000:2000,500,2000,0,0,10000,0
+//-- RK_DRAGONHOWLING - Duration1: FIT/FLEE Reduction duration; Duration2: Fear status duration
+2009,0,0,0,60000,0,15000,2000
+
+//-- RK_MILLENNIUMSHIELD
+2011,0,0,1000,0,0,30000,0
+//-- RK_CRUSHSTRIKE
+2012,0,1000,0,60000,0,120000,0
+//-- RK_REFRESH
+2013,0,1000,0,0,0,30000,0
+//-- RK_GIANTGROWTH
+2014,0,1000,0,0,0,300000,0
+//-- RK_STONEHARDSKIN
+2015,0,2000,0,0,0,300000,0
+//-- RK_VITALITYACTIVATION
+2016,0,0,0,0,0,300000,0
+//-- RK_STORMBLAST
+2017,2000,1000,0,0,0,0,0
+//-- RK_FIGHTINGSPIRIT
+2018,0,0,0,0,0,300000,0
+//-- RK_ABUNDANCE
+2019,0,0,0,0,0,300000,0
 
 //===== Archbishop =========================
 //-- AB_JUDEX

+ 13 - 13
db/skill_db.txt

@@ -664,26 +664,26 @@
 1019,9,6,1,4,0x1,0,1,1,yes,0,0x1,0,magic,0,	SA_ELEMENTWIND,Elemental Change Wind
 
 // Third Job Skills
-2001,-1,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,	RK_ENCHANTBLADE,RK_ENCHANTBLADE
-2002,7:8:9:10:11,6,1,0,0x04,0,5,1,yes,0,0,0,weapon,0,	RK_SONICWAVE,RK_SONICWAVE
-2003,0,6,4,0,0x1,0,10,1,yes,0,0,0,weapon,0,	RK_DEATHBOUND,RK_DEATHBOUND
-2004,-1,8,1,0,0,0,10,5,yes,0,0,0,weapon,0,	RK_HUNDREDSPEAR,RK_HUNDREDSPEAR
-2005,-1,6,2,4,0x6,0,5,1,yes,0,0,0,weapon,3,	RK_WINDCUTTER,RK_WINDCUTTER
-2006,0,6,4,0,0x6,0,5,1,no,0,0,0,weapon,0,	RK_IGNITIONBREAK,RK_IGNITIONBREAK
+2001,-1,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,	RK_ENCHANTBLADE,RK_ENCHANTBLADE
+2002,7:8:9:10:11,6,1,-1,0,0,5,1,yes,0,0,0,weapon,0,	RK_SONICWAVE,RK_SONICWAVE
+2003,0,0,4,0,0x1,0,10,1,no,0,0,0,weapon,3,	RK_DEATHBOUND,RK_DEATHBOUND
+2004,-1,8,1,-1,0,0,10,5,no,0,0,0,weapon,0,	RK_HUNDREDSPEAR,RK_HUNDREDSPEAR
+2005,-1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3,	RK_WINDCUTTER,RK_WINDCUTTER
+2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0,	RK_IGNITIONBREAK,RK_IGNITIONBREAK
 2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0,		RK_DRAGONTRAINING,RK_DRAGONTRAINING
-2008,9,6,2,3,0x6,0,10,1,no,0,0,0,weapon,0,	RK_DRAGONBREATH,RK_DRAGONBREATH
+2008,9,6,2,3,0xC0,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0,	RK_DRAGONBREATH,RK_DRAGONBREATH
 2009,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0,	RK_DRAGONHOWLING,RK_DRAGONHOWLING
 2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0,		RK_RUNEMASTERY,RK_RUNEMASTERY
 2011,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,		RK_MILLENNIUMSHIELD,RK_MILLENNIUMSHIELD
-2012,-1,6,1,0,0,0,1,1,no,0,0,0,weapon,0,	RK_CRUSHSTRIKE,RK_CRUSHSTRIKE
+2012,-1,6,4	,-1,0,0,1,1,no,0,0,0,weapon,0,	RK_CRUSHSTRIKE,RK_CRUSHSTRIKE
 2013,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,		RK_REFRESH,RK_REFRESH
 2014,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,		RK_GIANTGROWTH,RK_GIANTGROWTH
 2015,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,		RK_STONEHARDSKIN,RK_STONEHARDSKIN
 2016,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,		RK_VITALITYACTIVATION,RK_VITALITYACTIVATION
-2017,0,6,4,0,0,0,1,1,no,0,0,0,weapon,0,		RK_STORMBLAST,RK_STORMBLAST
-2018,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,		RK_FIGHTINGSPIRIT,RK_FIGHTINGSPIRIT
+2017,0,6,4,3,0x2,3,1,1,no,0,0,0,weapon,7,	RK_STORMBLAST,RK_STORMBLAST
+2018,0,0,4,0,0x1,0,1,1,no,0,0,0,none,0,		RK_FIGHTINGSPIRIT,RK_FIGHTINGSPIRIT
 2019,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,		RK_ABUNDANCE,RK_ABUNDANCE
-2020,5:6:7:8:9,6,16,0,0x6,0,5,1,yes,0,0,0,weapon,0,	RK_PHANTOMTHRUST,RK_PHANTOMTHRUST
+2020,5:6:7:8:9,6,16,-1,0,0,5,1,no,0,0,0,misc,0,	RK_PHANTOMTHRUST,RK_PHANTOMTHRUST
 2021,9,6,1,0,0x1,0,5,1,yes,0,0,0,none,0,	GC_VENOMIMPRESS,GC_VENOMIMPRESS
 2022,3,8,1,0,0,0,5,7,no,0,0,0,weapon,0,		GC_CROSSIMPACT,GC_CROSSIMPACT
 2023,3:4:5:6:7,6,1,0,0,0,5,1,no,0,0,0,weapon,0,	GC_DARKILLUSION,GC_DARKILLUSION
@@ -701,7 +701,7 @@
 2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,		GC_HALLUCINATIONWALK,GC_HALLUCINATIONWALK
 2036,0,6,4,0,0,0,5,1,no,0,0,0,weapon,0,		GC_ROLLINGCUTTER,GC_ROLLINGCUTTER
 2037,7,8,1,0,0,0,5,1,no,0,0,0,weapon,0,		GC_CROSSRIPPERSLASHER,GC_CROSSRIPPERSLASHER
-2038,11,8,1,6,0x2,3,5,-3,yes,0,0,0,magic,0,	AB_JUDEX,Judex
+2038,11,8,1,6,0x2,2,5,-3,yes,0,0,0,magic,0,	AB_JUDEX,Judex
 2039,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0,	AB_ANCILLA,Ancilla
 2040,11,8,1,6,0,0,10,-10,yes,0,0,0,magic,0,	AB_ADORAMUS,Adoramus
 2041,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0,	AB_CLEMENTIA,Clementia
@@ -716,7 +716,7 @@
 2050,11,6,16,6,0x1,0,1,1,yes,0,0,0,magic,0,	AB_RENOVATIO,Renovatio
 2051,11,6,16,6,0x1,0,5,1,yes,0,0,0,magic,0,	AB_HIGHNESSHEAL,High Heal
 2052,11,6,1,0,0x1,0,5,1,yes,0,0x600,0,magic,0,	AB_CLEARANCE,Clearance
-2053,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,	AB_EXPIATIO,Exipatio
+2053,11,6,16,0,0x1,0,5,0,yes,0,0x1000,0,none,0,	AB_EXPIATIO,Exipatio
 2054,11,6,4,0,0x1,0,10,1,yes,0,0,0,none,0,	AB_DUPLELIGHT,Duple Light
 2055,11,6,1,0,0,0,10,1,yes,0,0,0,weapon,0,	AB_DUPLELIGHT_MELEE,Duple Light (Melee)
 2056,11,6,1,0,0,0,10,1,yes,0,0,0,magic,0,	AB_DUPLELIGHT_MAGIC,Duple Light (Magic)

+ 31 - 27
db/skill_require_db.txt

@@ -19,6 +19,9 @@
 //  explosionspirits = Requires Fury skill activated
 //  cartboost = Requires a Pushcart and Cart Boost skill activated
 //  shield = Requires a 0,shield equipped
+//  dragon = requires Rune Knight dragon mount.
+//  warg = requires Sniper Warg.
+//  madogear = requires Mechanic Mado Gear.
 
 5,0,0,8:8:8:8:8:15:15:15:15:15,0,0,0,0:1:2:3:4:5:6:7:8:9:10:12:13:14:15:16:17:18:19:20:21:22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SM_BASH#ƒoƒbƒVƒ…#
 6,0,0,4:5:6:7:8:9:10:11:12:13,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SM_PROVOKE#ƒvƒ�ƒ{ƒbƒN#
@@ -462,6 +465,7 @@
 2006,0,0,35:40:45:50:55,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RK_IGNITIONBREAK
 2008,0,0,5:10:15:20:25:30:35:40:45:50,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RK_DRAGONBREATH
 2009,0,0,5:10:15:20:25:30:35:40:45:50,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RK_DRAGONHOWLING
+2012,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RK_CRUSHSTRIKE
 2020,0,0,15:18:21:24:27,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RK_PHANTOMTHRUST
 
 2021,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GC_VENOMIMPRESS
@@ -484,11 +488,11 @@
 2038,0,0,30:33:36:39:42,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_JUDEX
 2039,0,0,30,0,30,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_ANCILLA
 2040,0,0,22:28:34:40:46:52:58:64:70:76,0,0,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_ADORAMUS
-2041,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_CLEMENTIA
-2042,0,0,145:160:175,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_CANTO
-2043,0,0,130:145:160,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_CHEAL
+2041,0,0,280:320:360,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_CLEMENTIA
+2042,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_CANTO
+2043,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_CHEAL
 2044,0,0,300,0,0,0,99,0,0,none,0,12333,1,523,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_EPICLESIS
-2045,0,0,60:70:80:90:100:110:120:130:140:150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_PRAEFATIO
+2045,0,0,90:100:110:120:130:140:150:160:170:180,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_PRAEFATIO
 2046,0,0,35:38:41:44:47:50:53:56:59:62,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_ORATIO
 2047,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_LAUDAAGNUS
 2048,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AB_LAUDARAMUS
@@ -528,10 +532,10 @@
 2238,0,0,35,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_ELECTRICSHOCKER
 2239,0,0,20,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_CLUSTERBOMB
 2240,0,0,5,0,0,0,99,0,0,none,0,6124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGMASTERY
-2241,0,0,20,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGRIDER
-2242,0,0,40,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGDASH
-2243,0,0,30:32:34:36:38,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGSTRIKE
-2244,0,0,40:44:46:48:50,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGBITE
+2241,0,0,20,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGRIDER
+2242,0,0,40,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGDASH
+2243,0,0,30:32:34:36:38,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGSTRIKE
+2244,0,0,40:44:46:48:50,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_WUGBITE
 2246,0,0,10,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_SENSITIVEKEEN
 2247,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_CAMOUFLAGE
 2249,0,0,10,0,0,0,99,0,0,none,0,7940,1,990,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_MAGENTATRAP
@@ -541,25 +545,25 @@
 2253,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_FIRINGTRAP
 2254,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RA_ICEBOUNDTRAP
 
-2256,0,0,3:6:9:12:15,0,0,0,99,0,0,gear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_BOOSTKNUCKLE
-2257,0,0,50,0,0,0,99,0,0,gear,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_PILEBUNKER
-2258,0,0,2,0,0,0,99,0,0,gear,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_VULCANARM
-2259,0,0,20,0,0,0,99,0,0,gear,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_FLAMELAUNCHER
-2260,0,0,20,0,0,0,99,0,0,gear,0,6147,1,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_COLDSLOWER
-2261,0,0,30:45:60,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_ARMSCANNON
-2262,0,0,20:40:60,0,0,0,99,0,0,gear,0,2800,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_ACCELERATION
-2263,0,0,25,0,0,0,99,0,0,gear,0,2801,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_HOVERING
-2264,0,0,20,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_F_SIDESLIDE
-2265,0,0,20,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_B_SIDESLIDE
-2267,0,0,200,0,0,0,99,0,0,gear,0,2802,0,6146,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_SELFDESTRUCTION
-2268,0,0,100,0,0,0,99,0,0,gear,0,2803,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_SHAPESHIFT
-2269,0,0,20,0,0,0,99,0,0,gear,0,2804,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_EMERGENCYCOOL
-2270,0,0,45,0,0,0,99,0,0,gear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_INFRAREDSCAN
-2271,0,0,30,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_ANALYZE
-2272,0,0,90,0,0,0,99,0,0,gear,0,2805,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_MAGNETICFIELD
-2273,0,0,90,0,0,0,99,0,0,gear,0,2806,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_NEUTRALBARRIER
-2274,0,0,100:150:200,0,0,0,99,0,0,gear,0,2808,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_STEALTHFIELD
-2275,0,0,25:30:35:40:45,0,0,0,99,0,0,gear,0,2807,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_REPAIR
+2256,0,0,3:6:9:12:15,0,0,0,99,0,0,madogear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_BOOSTKNUCKLE
+2257,0,0,50,0,0,0,99,0,0,madogear,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_PILEBUNKER
+2258,0,0,2,0,0,0,99,0,0,madogear,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_VULCANARM
+2259,0,0,20,0,0,0,99,0,0,madogear,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_FLAMELAUNCHER
+2260,0,0,20,0,0,0,99,0,0,madogear,0,6147,1,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_COLDSLOWER
+2261,0,0,30:45:60,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_ARMSCANNON
+2262,0,0,20:40:60,0,0,0,99,0,0,madogear,0,2800,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_ACCELERATION
+2263,0,0,25,0,0,0,99,0,0,madogear,0,2801,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_HOVERING
+2264,0,0,20,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_F_SIDESLIDE
+2265,0,0,20,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_B_SIDESLIDE
+2267,0,0,200,0,0,0,99,0,0,madogear,0,2802,0,6146,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_SELFDESTRUCTION
+2268,0,0,100,0,0,0,99,0,0,madogear,0,2803,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_SHAPESHIFT
+2269,0,0,20,0,0,0,99,0,0,madogear,0,2804,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_EMERGENCYCOOL
+2270,0,0,45,0,0,0,99,0,0,madogear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_INFRAREDSCAN
+2271,0,0,30,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_ANALYZE
+2272,0,0,90,0,0,0,99,0,0,madogear,0,2805,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_MAGNETICFIELD
+2273,0,0,90,0,0,0,99,0,0,madogear,0,2806,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_NEUTRALBARRIER
+2274,0,0,100:150:200,0,0,0,99,0,0,madogear,0,2808,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_STEALTHFIELD
+2275,0,0,25:30:35:40:45,0,0,0,99,0,0,madogear,0,2807,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_REPAIR
 2278,0,0,20:22:24:26:28,0,0,0,6:7:,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_AXEBOOMERANG
 2279,0,0,10:12:14:16:18,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_POWERSWING
 2280,20:40:60:80:100,0,18:20:22:24:26,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NC_AXETORNADO

+ 19 - 8
doc/3rd_job_notes.txt

@@ -42,7 +42,6 @@ GC_CROSSRIPPERSLASHER
 == Archbishop =====================================================================================
 AB_JUDEX
 		Working
-		Damage is unnaturally high-- issue with pre-RE MATK formulae?
 AB_ANCILLA
 		Working
 AB_ADORAMUS
@@ -51,37 +50,46 @@ AB_ADORAMUS
 		Ugly hack to cancel out using gemstone in skill_get_requirement().
 		Should SC_BLIND/SC_ADORAMUS be removed by speed bosting effects?
 		Should effects cancel simultaneously?
-		Damage is unnaturally high-- issue with pre-RE MATK formulae?
 AB_CLEMENTIA
 		Working
+		Applied kRO update (30/08/2011) 
+			SP cost has changed (280/320/360).
+			Based on your job level, it can add an additional 1 ~ 5 Str/Int/Dex.
 		Bug: Skill name and casting sprite animation should display only on caster
 AB_CANTO
 		Working
+		Applied kRO update (30/08/2011) 
+			SP cost is changed (200/220/240).
+			Based on your job level, it can add an additional 1 ~ 5 Agi.
 		Bug: Skill name and casting sprite animation should display only on caster
 AB_CHEAL
 		Working
 		Bug: Skill name and casting sprite animation should display only on caster
 AB_EPICLESIS
 		Working
-		Need to fix SC effect on moving out of unit.
-		What skills should have an inate immuity to this skill?
+		Need to fix SC effect on moving in/out of unit.
+		What status effects should cause immunity to this skill?
 		has skill_check_condition_castbegin case, check to see if it can be improved.
 AB_PRAEFATIO
 		Working
+		Applied kRO update (30/08/2011) 
+			SP cost is changed (80 + SkillLv * 10).
 		Bug: Skill name and casting sprite animation should display only on caster
 AB_ORATIO
 		Working
-		Ugly hack to display/remove SI_ on mobs.
+		Ugly hack to display/remove SI_ORATIO on mobs.
 AB_LAUDAAGNUS
 		Working
 		Should +4+Skilllv luk apply to only those not cured from a status effect?
 		Check: Skill name and casting sprite animation should display only on caster?
-		Should this skill fail if you are the only person in/online in a party?
+		Applied kRO update (21/09/2011) 
+			* Now works when casting player is not in a party.
 AB_LAUDARAMUS
 		Working 
 		Should +4+Skilllv luk apply to only those not cured from a status effect?
 		Check: Skill name and casting sprite animation should display only on caster?
-		Should this skill fail if you are the only person in/online in a party?
+		Applied kRO update (21/09/2011) 
+			* Now works when casting player is not in a party.
 AB_EUCHARISTICA
 		Working 
 AB_RENOVATIO
@@ -92,11 +100,14 @@ AB_CLEARANCE
 		Working
 		Check: Should Soul Linkers be inately immune?
 		Check list a second time to see what was missed.
+		Applied kRO update (30/08/2011) 
+			* Now also removes the Critical Wounds status effect.
 AB_EXPIATIO
 		Working
+		Applied kRO update (30/08/2011) 
+			* Changed from self targeted to self and other players.
 AB_DUPLELIGHT
 		Working
-		Check success rate, 
 		Is skill_addtimerskill the best way to implement the additional attacks?
 AB_DUPLELIGHT_MELEE
 		Working

+ 19 - 2
npc/jobs/3-1/archbishop.txt

@@ -1,6 +1,23 @@
+//===== eAthena Script =======================================
+//= Arch Bishop Job Quest
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: =====================================
+//= eAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Job change script fr Third class (Arch Bishop)
+//= Does not entirely support changing to Baby Third Class.
+//===== Additional Comments: =================================
+//= 1.0 First version.
+//= 1.1 Fixed class checks for arch bishops.
+//============================================================
+
 prt_church,103,88,3	script	Praying Minister#arch	60,{
 	if (BaseJob != Job_Priest) {
-		if (BaseJob == job_Archbishop) {
+		if (Class == Job_Archbishop || Class == Job_Archbishop_H || Class == Job_Baby_Bishop) {
 			mes "[Praying Minister]";
 			mes "Ah! An Archbishop.";
 			mes "You have reached the state of light.";
@@ -819,7 +836,7 @@ job3_arch01,29,34,3	script	Valkyrie#arch	403,{
 		end;
 	}
 	else {
-		if (BaseJob != Job_Archbishop) {
+		if (Class != Job_Archbishop || Class != Job_Archbishop_H || Class != Job_Baby_Bishop) {
 			if (job_arch < 5) {
 				warp "odin_tem02",282,263;
 				end;

+ 12 - 16
src/map/battle.c

@@ -664,11 +664,6 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama
 	case NJ_ZENYNAGE:
 		break;
 	default:
-		/* Uncomment if you want god-mode Emperiums at 100 defense. [Kisuka]
-		if (md && md->guardian_data) {
-			damage -= damage * (md->guardian_data->castle->defense/100) * battle_config.castle_defense_rate/100;
-		}
-		*/
 		if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex]
 			if (flag&BF_WEAPON)
 				damage = damage * battle_config.gvg_weapon_damage_rate/100;
@@ -1194,7 +1189,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 	if (flag.cri)
 	{
 		wd.type = 0x0a;
-		flag.idef = flag.idef2 = flag.hit = 1;
+		flag.hit = 1;
 	} else {	//Check for Perfect Hit
 		if(sd && sd->perfect_hit > 0 && rand()%100 < sd->perfect_hit)
 			flag.hit = 1;
@@ -1775,7 +1770,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 			  	skill_num != ASC_BREAKER &&
 				skill_num != ASC_METEORASSAULT &&
 				skill_num != AS_SPLASHER &&
-				skill_num != AS_VENOMKNIFE)
+				skill_num != AS_VENOMKNIFE &&
+				skill_num != AS_GRIMTOOTH) // RE disabled Grimtooth carrying EDP.
 				ATK_ADDRATE(sc->data[SC_EDP]->val3);
 		}
 
@@ -1845,7 +1841,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 		if (!flag.idef || !flag.idef2)
 		{	//Defense reduction
 			short vit_def;
-			signed char def1 = status_get_def(target); //Don't use tstatus->def1 due to skill timer reductions.
+			signed short def1 = status_get_def(target); //Don't use tstatus->def1 due to skill timer reductions.
 			short def2 = (short)tstatus->def2;
 
 			if( sc && sc->data[SC_EXPIATIO] )
@@ -2535,7 +2531,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 							skillratio = skillratio * status_get_lv(src) / 100;
 						break;
 					case AB_ADORAMUS:
-						skillratio += 400 + 100 * skill_lv; //Possible RE-Formula
+						skillratio += 100 * (skill_lv + 5);
 						if( status_get_lv(src) >= 100 )
 							skillratio = skillratio * status_get_lv(src) / 100;
 						break;
@@ -2567,7 +2563,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 		}
 
 		if(!flag.imdef){
-			char mdef = tstatus->mdef;
+			short mdef = tstatus->mdef;
 			int mdef2= tstatus->mdef2;
 			if(sd) {
 				i = sd->ignore_mdef[is_boss(target)?RC_BOSS:RC_NONBOSS];
@@ -3194,11 +3190,11 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
 	damage = wd.damage + wd.damage2;
 	if( damage > 0 && src != target )
 	{
-		if(sc && sc->data[SC_DUPLELIGHT]) {
+		if( sc && sc->data[SC_DUPLELIGHT] ) {
 			int skilllv = sc->data[SC_DUPLELIGHT]->val1;
-			if(rand()%100 < sc->data[SC_DUPLELIGHT]->val2)
+			if( rand()%100 < sc->data[SC_DUPLELIGHT]->val2 )
 				skill_addtimerskill(src,tick+status_get_adelay(src) / 2,target->id,0,0,AB_DUPLELIGHT_MELEE,skilllv,BF_WEAPON,flag);
-			else if(rand()%100 < sc->data[SC_DUPLELIGHT]->val3)
+			else if( rand()%100 < sc->data[SC_DUPLELIGHT]->val3 )
 				skill_addtimerskill(src,tick+status_get_adelay(src) / 2,target->id,0,0,AB_DUPLELIGHT_MAGIC,skilllv,BF_MAGIC,flag);
 		}
 
@@ -3808,7 +3804,7 @@ static const struct _battle_data {
 	{ "max_baby_parameter",                 &battle_config.max_baby_parameter,              80,     10,     10000,          },
 	{ "max_third_parameter",                &battle_config.max_third_parameter,             120,    10,     10000,          },
 	{ "max_baby_third_parameter",           &battle_config.max_baby_third_parameter,        108,    10,     10000,          },
-	{ "max_def",                            &battle_config.max_def,                         9999,   0,      INT_MAX,        },
+	{ "max_def",                            &battle_config.max_def,                         SHRT_MAX, 0,      INT_MAX,        },
 	{ "over_def_bonus",                     &battle_config.over_def_bonus,                  0,      0,      1000,           },
 	{ "skill_log",                          &battle_config.skill_log,                       BL_NUL, BL_NUL, BL_ALL,         },
 	{ "battle_log",                         &battle_config.battle_log,                      0,      0,      1,              },
@@ -4108,8 +4104,8 @@ void battle_adjust_conf()
 	battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed;	
 	battle_config.max_cart_weight *= 10;
 	
-	if(battle_config.max_def > 9999 && !battle_config.weapon_defense_type)	 // added by [Skotlex]
-		battle_config.max_def = 9999;
+	if(battle_config.max_def > SHRT_MAX && !battle_config.weapon_defense_type)	 // added by [Skotlex]
+		battle_config.max_def = SHRT_MAX;
 
 	if(battle_config.min_hitrate > battle_config.max_hitrate)
 		battle_config.min_hitrate = battle_config.max_hitrate;

+ 18 - 19
src/map/clif.c

@@ -2487,26 +2487,22 @@ int clif_updatestatus(struct map_session_data *sd,int type)
 		WFIFOL(fd,4)=sd->battle_status.amotion;
 		break;
 	case SP_ATK1:
-		WFIFOL(fd,4)=sd->battle_status.batk +sd->battle_status.rhw.atk +sd->battle_status.lhw.atk;
+		WFIFOL(fd,4)=sd->battle_status.batk;
 		break;
 	case SP_DEF1:
-		WFIFOL(fd,4)=sd->battle_status.def;
+		WFIFOL(fd,4)=sd->battle_status.def2;
 		break;
 	case SP_MDEF1:
-		WFIFOL(fd,4)=sd->battle_status.mdef;
+		WFIFOL(fd,4)= sd->battle_status.mdef2;
 		break;
 	case SP_ATK2:
-		WFIFOL(fd,4)=sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2;
+		WFIFOL(fd,4)=sd->battle_status.rhw.atk + sd->battle_status.rhw.atk2 + sd->battle_status.equipment_atk;
 		break;
 	case SP_DEF2:
-		WFIFOL(fd,4)=sd->battle_status.def2;
+		WFIFOL(fd,4)=sd->battle_status.def;
 		break;
 	case SP_MDEF2:
-		//negative check (in case you have something like Berserk active)
-		len = sd->battle_status.mdef2 - (sd->battle_status.vit>>1);
-		if (len < 0) len = 0;
-		WFIFOL(fd,4)= len;
-		len = 8;
+		WFIFOL(fd,4)=sd->battle_status.mdef;
 		break;
 	case SP_CRITICAL:
 		WFIFOL(fd,4)=sd->battle_status.cri/10;
@@ -2843,16 +2839,13 @@ int clif_initialstatus(struct map_session_data *sd)
 	WBUFB(buf,15)=pc_need_status_point(sd,SP_LUK,1);
 
 	WBUFW(buf,16) = sd->battle_status.batk;
-	WBUFW(buf,18) = sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2; //atk bonus
+	WBUFW(buf,18) = sd->battle_status.rhw.atk + sd->battle_status.lhw.atk2 + sd->battle_status.equipment_atk; //atk bonus
 	WBUFW(buf,20) = sd->weapon_matk + sd->battle_status.rhw.atk2 + sd->equipment_matk;
-	WBUFW(buf,22) = sd->battle_status.matk_min;
-	WBUFW(buf,24) = sd->battle_status.def; // def
-	WBUFW(buf,26) = sd->battle_status.def2;
-	WBUFW(buf,28) = sd->battle_status.mdef; // mdef
-	fd = sd->battle_status.mdef2 - (sd->battle_status.vit>>1);
-	if (fd < 0) fd = 0; //Negative check for Frenzy'ed characters.
-	WBUFW(buf,30) = fd;
-	fd = sd->fd;
+	WBUFW(buf,22) = sd->battle_status.status_matk;
+	WBUFW(buf,24) = sd->battle_status.def2;
+	WBUFW(buf,26) = sd->battle_status.def; // def
+	WBUFW(buf,28) = sd->battle_status.mdef2;
+	WBUFW(buf,30) = sd->battle_status.mdef; // mdef
 	WBUFW(buf,32) = sd->battle_status.hit;
 	WBUFW(buf,34) = sd->battle_status.flee;
 	WBUFW(buf,36) = sd->battle_status.flee2/10;
@@ -2872,8 +2865,14 @@ int clif_initialstatus(struct map_session_data *sd)
 	clif_updatestatus(sd,SP_ATTACKRANGE);
 	clif_updatestatus(sd,SP_ASPD);
 
+	clif_updatestatus(sd,SP_ATK1);
+	clif_updatestatus(sd,SP_ATK2);
 	clif_updatestatus(sd,SP_MATK1);
 	clif_updatestatus(sd,SP_MATK2);
+	clif_updatestatus(sd,SP_DEF1);
+	clif_updatestatus(sd,SP_DEF2);
+	clif_updatestatus(sd,SP_MDEF1);
+	clif_updatestatus(sd,SP_MDEF2);
 
 	return 0;
 }

+ 5 - 4
src/map/pc.c

@@ -1851,14 +1851,14 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
 		break;
 	case SP_BASE_ATK:
 		if(sd->state.lr_flag != 2) {
-			bonus = status->batk + val;
-			status->batk = cap_value(bonus, 0, USHRT_MAX);
+			bonus = status->equipment_atk + val;
+			status->equipment_atk = cap_value(bonus, 0, USHRT_MAX);
 		}
 		break;
 	case SP_DEF1:
 		if(sd->state.lr_flag != 2) {
 			bonus = status->def + val;
-			status->def = cap_value(bonus, CHAR_MIN, CHAR_MAX);
+			status->def = cap_value(bonus, SHRT_MIN, SHRT_MAX);
 		}
 		break;
 	case SP_DEF2:
@@ -1870,7 +1870,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
 	case SP_MDEF1:
 		if(sd->state.lr_flag != 2) {
 			bonus = status->mdef + val;
-			status->mdef = cap_value(bonus, CHAR_MIN, CHAR_MAX);
+			status->mdef = cap_value(bonus, SHRT_MIN, SHRT_MAX);
 		}
 		break;
 	case SP_MDEF2:
@@ -3652,6 +3652,7 @@ int pc_isUseitem(struct map_session_data *sd,int n)
 	//Not consumable item
 	if( item->type != IT_HEALING && item->type != IT_USABLE && item->type != IT_CASH )
 		return 0;
+	// This contradicts official behavior. Items with no scripts should be consumed regardless. [L0ne_W0lf]
 	if( !item->script ) //if it has no script, you can't really consume it!
 		return 0;
 

+ 81 - 58
src/map/skill.c

@@ -274,6 +274,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
 	struct map_session_data *tsd = map_id2sd(target->id);
 	struct status_change* sc;
 	struct status_data *status;
+	bool FullCalc = false;
 
 	status = status_get_status_data(src);
 
@@ -291,13 +292,14 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
 		hp = (skill_lv>6)?666:skill_lv*100;
 		break;
 	default:
+		FullCalc = true; // Enables full calculation, which adds heal variance.
 		if (skill_lv >= battle_config.max_heal_lv)
 			return battle_config.max_heal;
-	
+
 		// iRO Wiki states as of 2011/08/22:
 		// heal = ( [(Base Level + INT) / 5] ?30 ) ?(Heal Level / 10) ?(1 + (Modifiers / 100)) + MATK 
 		// fixme: Does not match up with iRO's heal, level 1 or level 10
-		// with 219 mak + HP_MEDITATO, level 1 = 361; level 10 = 1839
+		// with 219 matk + HP_MEDITATO (10) (no gear), level 1 = 361; level 10 = 1839
 		if( skill_id == AB_HIGHNESSHEAL ) {
 			skill = pc_checkskill(sd,AL_HEAL);
 			if( skill < 0 )
@@ -314,47 +316,50 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
 			mod += skill * 2;
 		else if( src->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
 			mod += skill * 2;
-		if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) )
-			mod += skill;	
-		if( tsd && (skill = pc_skillheal2_bonus(tsd, skill_id)) )
-			mod += skill;
+		break;
+	}	
 
-		sc = status_get_sc(target);
-		if( sc && sc->count )
-		{
-			if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish]
-				mod -= sc->data[SC_CRITICALWOUND]->val2;
-			if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN )
-				mod += sc->data[SC_INCHEALRATE]->val1; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
-		}
+	// Increment skill and status based modifiers
+	if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) )
+		mod += skill;	
+	if( tsd && (skill = pc_skillheal2_bonus(tsd, skill_id)) )
+		mod += skill;
+
+	sc = status_get_sc(target);
+	if( sc && sc->count )
+	{
+		if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish]
+			mod -= sc->data[SC_CRITICALWOUND]->val2;
+		if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN )
+			mod += sc->data[SC_INCHEALRATE]->val1; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
+//		if( sc->data[SC_VITALITYACTIVATION] && heal && skill_id != BA_APPLEIDUN ) 
+//			mod += sc->data[SC_VITALITYACTIVATION]->val2;
+	}
 		
-		// Adjust the HP recovered rate by adding all of the modifiers together.
-		hp = hp * mod / 100;
+	// Adjust the HP recovered rate by adding all of the modifiers together.
+	hp = hp * mod / 100;
 	
-		// Get weapon level and weapon matk for variance calculations if it's a player.
-		//  Mobs have their own variance, we've assumed:
-		//		Weapon Level = 1
-		//		Weapom_Matk  = ?
-		// Need more information before that can be implemented.
-		if( sd )
-		{
-			int matk = 0;
-			int smatk = sd->battle_status.status_matk;
-			int ematk = sd->equipment_matk;
-			int wmatk = 0;
-			int wlv = 1;
-			int index = sd->equip_index[EQI_HAND_R];
-
-			if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
-				wlv = sd->inventory_data[index]->wlv;
+	// Get weapon level and weapon matk for variance calculations if it's a player.
+	//  Mobs have their own variance, we've assumed:
+	//		Weapon Level = 1
+	//		Weapom_Matk  = ?
+	// Need more information before that can be implemented.
+	if( sd && FullCalc)
+	{
+		int matk = 0;
+		int smatk = sd->battle_status.status_matk;
+		int ematk = sd->equipment_matk;
+		int wmatk = 0;
+		int wlv = 1;
+		int index = sd->equip_index[EQI_HAND_R];
 
-			wmatk = (int)( sd->weapon_matk + ( (float)( ( rand() % 20 ) - 10 ) / 100 * wlv * sd->weapon_matk ) + ( sd->battle_status.rhw.atk2 ) );
-			matk  = ( smatk + wmatk + ematk );
+		if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
+			wlv = sd->inventory_data[index]->wlv;
 
-			hp += matk;
-		}
+		wmatk = (int)( sd->weapon_matk + ( (float)( ( rand() % 20 ) - 10 ) / 100 * wlv * sd->weapon_matk ) + ( sd->battle_status.rhw.atk2 ) );
+		matk  = ( smatk + wmatk + ematk );
 
-		break;
+		hp += matk;
 	}
 
 	// mercenaries only take half-effectiveness from heals.
@@ -5758,7 +5763,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 				case AB_CLEMENTIA:	if( sd ) lv = pc_checkskill(sd,AL_BLESSING);	break;
 				case AB_CANTO:		if( sd ) lv = pc_checkskill(sd,AL_INCAGI);		break;
 			}
-			clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start(bl,type,100,lv,skill_get_time(skillid,skilllv)));
+			clif_skill_nodamage(bl, bl, skillid, skilllv, 
+				sc_start4(bl,type,100,lv,0,sd?sd->status.job_level:0,0,skill_get_time(skillid,skilllv)));
 		}
 		else if( sd )
 			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
@@ -5784,8 +5790,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		{
 			if( dstsd && dstsd->special_state.no_magic_damage )
 				break;
-			clif_skill_nodamage(bl,bl,skillid,skilllv,1);
-			clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start4(bl, type, 100, skilllv, 0, 0, 1, skill_get_time(skillid, skilllv)));
+			clif_skill_nodamage(bl, bl, skillid, skilllv,
+				sc_start4(bl, type, 100, skilllv, 0, 0, 1, skill_get_time(skillid, skilllv)));
 		} 
 		else
 			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
@@ -5793,7 +5799,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	case AB_ORATIO:
 		if (flag&1) 
 			sc_start(bl, type, 40+skilllv*5, skilllv, skill_get_time(skillid, skilllv));
-		else {
+		else
+		{
 			clif_skill_nodamage(src, bl, skillid, skilllv, 1);
 			map_foreachinrange(skill_area_sub, bl,
 				skill_get_splash(skillid, skilllv), BL_CHAR,
@@ -5803,7 +5810,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		break;
 	case AB_LAUDAAGNUS:
 	case AB_LAUDARAMUS:
-		if( flag&1 || sd == NULL )
+		if( (flag&1) || sd == NULL || sd->status.party_id == 0 ) 
 		{
 			if( tsc && (rand()%100 < 30+5*skilllv) ) 
 			{
@@ -5849,7 +5856,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		{
 			if (!tsc->data[i])
 				continue;
-			//Initial list of status effects cancelled by Clearance. Does not contain third job status.
+			//Initial list of status effects NOT cancelled by Clearance.
 			switch (i) {
 			case SC_WEIGHT50:			case SC_WEIGHT90:				case SC_TWOHANDQUICKEN:
 			case SC_QUAGMIRE:			case SC_SLOWPOISON:				case SC_BENEDICTIO:
@@ -5882,7 +5889,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 			case SC_FOOD_VIT_CASH:		case SC_FOOD_DEX_CASH:			case SC_FOOD_INT_CASH:
 			case SC_FOOD_LUK_CASH:		case SC_MERC_FLEEUP:			case SC_MERC_ATKUP:
 			case SC_MERC_HPUP:			case SC_MERC_SPUP:				case SC_MERC_HITUP:
-			case SC_SLOWCAST:			case SC_CRITICALWOUND:			case SC_SPEEDUP0:
+			case SC_SLOWCAST:			/*case SC_CRITICALWOUND:*/		case SC_SPEEDUP0:
 			case SC_DEF_RATE:			case SC_MDEF_RATE:				case SC_INCHEALRATE:
 			case SC_S_LIFEPOTION:		case SC_L_LIFEPOTION:			case SC_INCCRI:
 			case SC_SPCOST_RATE:		case SC_COMMONSC_RESIST:		case SC_ELEMENTALCHANGE:
@@ -5899,9 +5906,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 			case SC_INTOABYSS:			case SC_SIEGFRIED:				case SC_WHISTLE:
 			case SC_ASSNCROS:			case SC_POEMBRAGI:				case SC_APPLEIDUN:
 			case SC_HUMMING:			case SC_DONTFORGETME:			case SC_FORTUNE:
-			case SC_SERVICE4U:			case SC_EPICLESIS:				case SC_PARTYFLEE:
+			case SC_SERVICE4U:			case SC_PARTYFLEE:				/*case SC_ANGEL_PROTECT:*/
+			case SC_EPICLESIS:
 			// not implemented
-			//case SC_ANGEL_PROTECT:	case SC_BUCHEDENOEL:			case SC_POPECOOKIE:
+			//case SC_BUCHEDENOEL:		case SC_POPECOOKIE:
 			//case SC_SAVAGE_STEAK:		case SC_COCKTAIL_WARG_BLOOD:	case SC_MINOR_BBQ:
 			//case SC_SIROMA_ICE_TEA:	case SC_DROCERA_HERB_STEAMED:	case SC_PUTTI_TAILS_NOODLES:
 			//case SC_CRIFOOD:			case SC_STR_SCROLL:				case SC_INT_SCROLL:
@@ -6800,9 +6808,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
 	case AB_EPICLESIS:
 		if( skill_unitsetting(src, skillid, skilllv, x, y, 0) )
 		{
-			int range = skill_get_splash(skillid,skilllv); // Use Splash Range.
+			i = skill_get_splash(skillid,skilllv); // Use Splash Range.
 			map_foreachinarea(skill_area_sub,
-				src->m, x-range, y-range, x+range, y+range, BL_CHAR, 
+				src->m, x-i, y-i, x+i, y+i, BL_CHAR, 
 				src, ALL_RESURRECTION, 1, tick, flag|BCT_NOENEMY|1,
 				skill_castend_nodamage_id);
 		}
@@ -8024,7 +8032,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 				//if( tsc->data[SC_BERSERK] )
 				//	break;
 
-				//Apply status effect if standing in unit, should cancel upon stepping out of skill_get_splash() area. [FIXME]
+				//FIXME: Apply status effect if standing in unit, should cancel upon stepping out of skill_get_splash() area.
 				if( tsc && !tsc->data[SC_EPICLESIS] )
 					sc_start(bl, type, 100, sg->skill_lv, skill_get_time(sg->skill_id,sg->skill_lv));
 				
@@ -8955,6 +8963,26 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
 			break;
 		clif_skill_fail(sd,skill,0,0);
 		return 0;
+		break;
+/*
+	case ST_DRAGON:
+		if(!pc_isdragon(sd)) {
+			clif_skill_fail(sd,skill,25,0);
+			return 0;
+		}
+		break;
+	case ST_WARG:
+		if(!pc_iswarg(sd)) {
+			clif_skill_fail(sd,skill,0,0);
+			return 0;
+		}
+		break;
+	case ST_MADOGEAR:
+		if(!pc_ismadogear(sd)) {
+			clif_skill_fail(sd,skill,33,0);
+			return 0;
+		}
+*/
 	}
 
 	if(require.mhp > 0 && get_percentage(status->hp, status->max_hp) > require.mhp) {
@@ -9057,14 +9085,6 @@ int skill_check_condition_castend(struct map_session_data* sd, short skill, shor
 		}
 		break;
 	}
-	case AB_LAUDAAGNUS:
-	case AB_LAUDARAMUS:
-		if( !sd->status.party_id )
-		{
-			clif_skill_fail(sd,skill,0,0);
-			return 0;
-		}
-		break;
 	}
 
 	status = &sd->battle_status;
@@ -9405,7 +9425,7 @@ int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
 		}
 	}
 
-	//TODO: apply fixed cast rate modifiers via status effects.
+	// apply fixed cast rate modifiers via status effects.
 	if( !(skill_get_castnodex(skill_id, skill_lv)&2) && sc && sc->count )
 	{
 		if( sc->data[SC_AB_SECRAMENT] && sc->data[SC_AB_SECRAMENT]->val2 > max_fixedReduction )
@@ -12113,6 +12133,9 @@ static bool skill_parse_row_requiredb(char* split[], int columns, int current)
 	else if( strcmpi(split[10],"recover_weight_rate")==0 ) skill_db[i].state = ST_RECOV_WEIGHT_RATE;
 	else if( strcmpi(split[10],"move_enable")==0 ) skill_db[i].state = ST_MOVE_ENABLE;
 	else if( strcmpi(split[10],"water")==0 ) skill_db[i].state = ST_WATER;
+	else if( strcmpi(split[10],"dragon")==0 ) skill_db[i].state = ST_DRAGON;
+	else if( strcmpi(split[10],"warg")==0 ) skill_db[i].state = ST_WARG;
+	else if( strcmpi(split[10],"madogear")==0 ) skill_db[i].state = ST_MADOGEAR;
 	else skill_db[i].state = ST_NONE;
 
 	skill_split_atoi(split[11],skill_db[i].spiritball);

+ 4 - 1
src/map/skill.h

@@ -13,7 +13,7 @@ struct skill_unit_group;
 struct status_change_entry;
 
 #define MAX_SKILL_DB			MAX_SKILL
-#define MAX_SKILL_PRODUCE_DB	150
+#define MAX_SKILL_PRODUCE_DB	170
 #define MAX_PRODUCE_RESOURCE	12
 #define MAX_SKILL_ARROW_DB		150
 #define MAX_ARROW_RESOURCE		5
@@ -369,6 +369,9 @@ enum {
 	ST_RECOV_WEIGHT_RATE,
 	ST_MOVE_ENABLE,
 	ST_WATER,
+	ST_DRAGON,
+	ST_WARG,
+	ST_MADOGEAR
 };
 
 enum e_skill {

+ 68 - 36
src/map/status.c

@@ -1304,7 +1304,7 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat
 
 static unsigned short status_base_atk(const struct block_list *bl, const struct status_data *status)
 {
-	int flag = 0, str, dex, dstr;
+	int flag = 0, str, dex, dstr, base;
 
 	if(!(bl->type&battle_config.enable_baseatk))
 		return 0;
@@ -1322,10 +1322,10 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct
 			flag = 1;
 	}
 	if (flag) {
-		str = status->dex;
+		base =str = status->dex;
 		dex = status->str;
 	} else {
-		str = status->str;
+		base = str = status->str;
 		dex = status->dex;
 	}
 	//Normally only players have base-atk, but homunc have a different batk
@@ -1334,7 +1334,7 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct
 	dstr = str/10;
 	str += dstr*dstr;
 	if (bl->type == BL_PC)
-		str+= dex/5 + status->luk/5;
+		str = (((TBL_PC*)bl)->status.base_level*10/4 + base*10 + dex*10/5 + status->luk*10/3)/10;
 	return cap_value(str, 0, USHRT_MAX);
 }
 
@@ -1354,10 +1354,17 @@ void status_calc_misc(struct block_list *bl, struct status_data *status, int lev
 	status->matk_min = status_base_matk_min(status);
 	status->matk_max = status_base_matk_max(status);
 
-	status->hit += 175 + status->dex + (unsigned short)floor((double)status->luk/3) + level; //Renewal calclation.
+	//Renewal calculation? HIT is currently coming up too high.
+	status->hit += 175 + status->dex + (unsigned short)floor((double)status->luk/3) + level;
 	status->flee += 100 + status->agi + level;
-	status->def2 += status->vit;
-	status->mdef2 += status->mdef;
+
+	// Values are still off by roughly 1~3 points. Getting there though.
+	status->def2 += (level*10/2 + status->vit*10/2 + status->agi*10/5)/10;
+	if( bl->type != BL_MOB )
+		status->mdef2 += (level*10/4 + status->int_*10 + status->vit*10/5 + status->dex*10/5)/10;
+	else
+		status->mdef2 = status->mdef; // Mobs use their mdef as their mdef2.
+
 	//Status MATK = floor(Base Level/4 + INT + INT/2 + DEX/5 + LUK/3) 
 	status->status_matk = (unsigned short)floor((double)level/4 + (double)status->int_ + (double)status->int_/2 + (double)status->dex/5 + (double)status->luk/3);
 
@@ -1539,8 +1546,6 @@ int status_calc_mob_(struct mob_data* md, bool first)
 					status->max_sp += 200 * gc->defense;
 					status->hp = status->max_hp;
 					status->sp = status->max_sp;
-					status->def += (gc->defense+2)/3;
-					status->mdef += (gc->defense+2)/3;
 				}
 			}else{
 				status->max_hp += 1000 * gc->defense;
@@ -1963,7 +1968,11 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
 			}
 		}
 		else if(sd->inventory_data[index]->type == IT_ARMOR) {
-			refinedef += sd->status.inventory[index].refine*refinebonus[0][0];
+			int r = sd->status.inventory[index].refine;
+    		int per = 0, refine=(r>0)?1:0;
+    		for(per=1; per<r; per++)
+     			refine += (per/4) + 1;
+			refinedef += refine;
 			if(sd->inventory_data[index]->script) {
 				run_script(sd->inventory_data[index]->script,0,sd->bl.id,0);
 				if (!calculating) //Abort, run_script retriggered this. [Skotlex]
@@ -2296,13 +2305,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
 		sd->def_rate = 0;
 	if(sd->def_rate != 100) {
 		i =  status->def * sd->def_rate/100;
-		status->def = cap_value(i, CHAR_MIN, CHAR_MAX);
+		status->def = cap_value(i, SHRT_MIN, SHRT_MAX);
 	}
 
 	if (!battle_config.weapon_defense_type && status->def > battle_config.max_def)
 	{
 		status->def2 += battle_config.over_def_bonus*(status->def -battle_config.max_def);
-		status->def = (unsigned char)battle_config.max_def;
+		status->def = (unsigned short)battle_config.max_def;
 	}
 
 // ----- EQUIPMENT-MDEF CALCULATION -----
@@ -2312,13 +2321,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
 		sd->mdef_rate = 0;
 	if(sd->mdef_rate != 100) {
 		i =  status->mdef * sd->mdef_rate/100;
-		status->mdef = cap_value(i, CHAR_MIN, CHAR_MAX);
+		status->mdef = cap_value(i, SHRT_MIN, SHRT_MAX);
 	}
 
 	if (!battle_config.magic_defense_type && status->mdef > battle_config.max_def)
 	{
 		status->mdef2 += battle_config.over_def_bonus*(status->mdef -battle_config.max_def);
-		status->mdef = (signed char)battle_config.max_def;
+		status->mdef = (signed short)battle_config.max_def;
 	}
 
 // ----- ASPD CALCULATION -----
@@ -2580,9 +2589,9 @@ static signed short status_calc_hit(struct block_list *,struct status_change *,i
 static signed short status_calc_critical(struct block_list *,struct status_change *,int);
 static signed short status_calc_flee(struct block_list *,struct status_change *,int);
 static signed short status_calc_flee2(struct block_list *,struct status_change *,int);
-static signed char status_calc_def(struct block_list *,struct status_change *,int);
+static signed short status_calc_def(struct block_list *,struct status_change *,int);
 static signed short status_calc_def2(struct block_list *,struct status_change *,int);
-static signed char status_calc_mdef(struct block_list *,struct status_change *,int);
+static signed short status_calc_mdef(struct block_list *,struct status_change *,int);
 static signed short status_calc_mdef2(struct block_list *,struct status_change *,int);
 static unsigned short status_calc_speed(struct block_list *,struct status_change *,int);
 static short status_calc_aspd_rate(struct block_list *,struct status_change *,int);
@@ -2823,7 +2832,7 @@ void status_calc_bl_main(struct block_list *bl, enum scb_flag flag)
 
 	if(flag&SCB_LUK) {
 		status->luk = status_calc_luk(bl, sc, b_status->luk);
-		flag|=SCB_BATK|SCB_CRI|SCB_FLEE2;
+		flag|=SCB_BATK|SCB_CRI|SCB_FLEE2|SCB_MATK;
 	}
 
 	if(flag&SCB_BATK && b_status->batk) {
@@ -3194,25 +3203,26 @@ void status_calc_bl_(struct block_list* bl, enum scb_flag flag, bool first)
 			clif_updatestatus(sd,SP_ASPD);
 		if(b_status.speed != status->speed)
 			clif_updatestatus(sd,SP_SPEED);
-		if(b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk || b_status.batk != status->batk)
+		if(b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk || b_status.batk != status->batk
+			|| b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2 || b_status.equipment_atk != status->equipment_atk)
 		{
 			clif_updatestatus(sd,SP_ATK1);
+			clif_updatestatus(sd,SP_ATK2);
 			clif_updatestatus(sd,SP_MATK1);
 		}
-		if(b_status.def != status->def)
+		if(b_status.def != status->def || b_status.def2 != status->def2)
+		{
 			clif_updatestatus(sd,SP_DEF1);
-		if(b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2)
-			clif_updatestatus(sd,SP_ATK2);
-		if(b_status.def2 != status->def2)
 			clif_updatestatus(sd,SP_DEF2);
+		}
 		if(b_status.flee2 != status->flee2)
 			clif_updatestatus(sd,SP_FLEE2);
 		if(b_status.cri != status->cri)
 			clif_updatestatus(sd,SP_CRITICAL);
 		if(b_status.matk_max != status->matk_max)
 		{
-				clif_updatestatus(sd,SP_MATK1);
-				clif_updatestatus(sd,SP_MATK2);
+			clif_updatestatus(sd,SP_MATK1);
+			clif_updatestatus(sd,SP_MATK2);
 		}
 		if(b_status.mdef != status->mdef || b_status.mdef2 != status->mdef2)
 		{
@@ -3708,10 +3718,10 @@ static signed short status_calc_flee2(struct block_list *bl, struct status_chang
 	return (short)cap_value(flee2,10,SHRT_MAX);
 }
 
-static signed char status_calc_def(struct block_list *bl, struct status_change *sc, int def)
+static signed short status_calc_def(struct block_list *bl, struct status_change *sc, int def)
 {
 	if(!sc || !sc->count)
-		return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX);
+		return (signed short)cap_value(def,SHRT_MIN,SHRT_MAX);
 
 	if(sc->data[SC_BERSERK])
 		return 0;
@@ -3748,7 +3758,7 @@ static signed char status_calc_def(struct block_list *bl, struct status_change *
 	if (sc->data[SC_FLING])
 		def -= def * (sc->data[SC_FLING]->val2)/100;
 
-	return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX);
+	return (signed short)cap_value(def,SHRT_MIN,SHRT_MAX);
 }
 
 static signed short status_calc_def2(struct block_list *bl, struct status_change *sc, int def2)
@@ -3783,10 +3793,10 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change
 	return (short)cap_value(def2,1,SHRT_MAX);
 }
 
-static signed char status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef)
+static signed short status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef)
 {
 	if(!sc || !sc->count)
-		return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX);
+		return (signed short)cap_value(mdef,SHRT_MIN,SHRT_MAX);
 
 	if(sc->data[SC_BERSERK])
 		return 0;
@@ -3807,7 +3817,7 @@ static signed char status_calc_mdef(struct block_list *bl, struct status_change
 	if(sc->data[SC_CONCENTRATION])
 		mdef += 1; //Skill info says it adds a fixed 1 Mdef point.
 
-	return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX);
+	return (signed short)cap_value(mdef,SHRT_MIN,SHRT_MAX);
 }
 
 static signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc, int mdef2)
@@ -4288,7 +4298,7 @@ struct status_data *status_get_base_status(struct block_list *bl)
 	}
 }
 
-signed char status_get_def(struct block_list *bl)
+signed short status_get_def(struct block_list *bl)
 {
 	struct unit_data *ud;
 	struct status_data *status = status_get_status_data(bl);
@@ -4296,7 +4306,7 @@ signed char status_get_def(struct block_list *bl)
 	ud = unit_bl2ud(bl);
 	if (ud && ud->skilltimer != INVALID_TIMER)
 		def -= def * skill_get_castdef(ud->skillid)/100;
-	return cap_value(def, CHAR_MIN, CHAR_MAX);
+	return cap_value(def, SHRT_MIN, SHRT_MAX);
 }
 
 unsigned short status_get_speed(struct block_list *bl)
@@ -4521,6 +4531,22 @@ void status_set_viewdata(struct block_list *bl, int class_)
 					class_ = JOB_BABY_CRUSADER2;
 					break;
 				}
+				/*
+				else
+				if (sd->sc.option&OPTION_DRAGON) // For completeness' sake. These aren't actually needed...except maybe in older clients.
+				switch (class_)
+				{
+				case JOB_RUNE_KNIGHT:
+					class_ = JOB_RUNE_KNIGHT2;
+					break;
+				case JOB_RUNE_KNIGHT_H:
+					class_ = JOB_RUNE_KNIGHT_H2;
+					break;
+				case JOB_BABY_RUNE:
+					class_ = JOB_BABY_RUNE2;
+					break;
+				}
+				*/
 				sd->vd.class_ = class_;
 				clif_get_weapon_view(sd, &sd->vd.weapon, &sd->vd.shield);
 				sd->vd.head_top = sd->status.head_top;
@@ -5316,6 +5342,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 		case SC_INCREASEAGI:
 		case SC_ADORAMUS:
 			val2 = 2 + val1; //Agi change
+			if (val3) //Canto Candidus: Add joblv/10 additional AGI (8/31/2011)
+				val2 += (val3/10);
 			break;
 		case SC_ENDURE:
 			val2 = 7; // Hit-count [Celest]
@@ -5365,14 +5393,14 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			break;
 		case SC_KYRIE:
 			val2 = status->max_hp * (val1 * 2 + 10) / 100; //%Max HP to absorb
-			// val1 determines if status is casued by Kyrie or Praefatio,
+			// val4 determines if status is casued by Kyrie or Praefatio,
 			// as Praefatio blocks more hits than Kyrie Elesion.
-			if( !val4 )
+			if( !val4 ) //== PR_KYRIE
 				val3 = (val1 / 2 + 5);
-			else
+			else //== AB_PRAEFATIO
 				val3 = 6 + val1;
 			if( sd ) 
-				val1 = min(val1,pc_checkskill(sd,PR_KYRIE)); // uses kill level to determine barrier health.
+				val1 = min(val1,pc_checkskill(sd,PR_KYRIE)); // use skill level to determine barrier health.
 			break;
 		case SC_MAGICPOWER:
 			//val1: Skill lv
@@ -5923,7 +5951,11 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			break;
 		case SC_BLESSING:
 			if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC)
+			{
 				val2 = val1;
+				if (val3) //Clementia: Add joblv/10 additional STR/INT/DEX (8/31/2011)
+					val2 += (val3/10);
+			}
 			else
 				val2 = 0; //0 -> Half stat.
 			break;

+ 61 - 7
src/map/status.h

@@ -11,7 +11,7 @@ struct homun_data;
 struct status_change;
 
 //Use this to refer the max refinery level [Skotlex]
-#define MAX_REFINE 10
+#define MAX_REFINE 20
 #define MAX_REFINE_BONUS 5
 
 extern unsigned long StatusChangeFlagTable[];
@@ -330,7 +330,7 @@ typedef enum sc_type {
 	SC_FOOD_INT_CASH,
 	SC_FOOD_LUK_CASH,
 	//SC_MOVHASTE_INFINITY,
-	SC_PARTYFLEE = 310 ,
+	SC_PARTYFLEE = 310,
 	//SC_ENDURE_MDEF, //311
 
 	// Third Jobs - Maintaining SI order for SCs.
@@ -933,6 +933,62 @@ enum si_type {
 	SI_WIND_INSIGNIA = 569,
 	SI_EARTH_INSIGNIA = 570,
 	SI_EQUIPED_FLOOR = 571,
+	SI_GUARDIAN_RECALL = 572,
+	SI_MORA_BUFF = 573,
+	SI_REUSE_LIMIT_G = 574,
+	SI_REUSE_LIMIT_H = 575,
+	SI_NEEDLE_OF_PARALYZE = 576,
+	SI_PAIN_KILLER = 577,
+	SI_G_LIFEPOTION = 578,
+	SI_VITALIZE_POTION = 579,
+	SI_LIGHT_OF_REGENE = 580,
+	SI_OVERED_BOOST = 581,
+	SI_SILENT_BREEZE = 582,
+	SI_ODINS_POWER = 583,
+	SI_STYLE_CHANGE = 584,
+	SI_SONIC_CLAW_POSTDELAY = 585,
+//--586-595 Unused
+	SI_SILVERVEIN_RUSH_POSTDELAY = 596,
+	SI_MIDNIGHT_FRENZY_POSTDELAY = 597,
+	SI_GOLDENE_FERSE = 598,
+	SI_ANGRIFFS_MODUS = 599,
+	SI_TINDER_BREAKER = 600,
+	SI_TINDER_BREAKER_POSTDELAY = 601,
+	SI_CBC = 602,
+	SI_CBC_POSTDELAY = 603,
+	SI_EQC = 604,
+	SI_MAGMA_FLOW = 605,
+	SI_GRANITIC_ARMOR = 606,
+	SI_PYROCLASTIC = 607,
+	SI_VOLCANIC_ASH = 608,
+	SI_SPIRITS_SAVEINFO1 = 609,
+	SI_SPIRITS_SAVEINFO2 = 610,
+	SI_MAGIC_CANDY = 611,
+//--612 skipped
+	SI_ALL_RIDING = 613,
+//--614 skipped
+	SI_MACRO = 615,
+	SI_MACRO_POSTDELAY = 616,
+	SI_BEER_BOTTLE_CAP = 617,
+	SI_OVERLAPEXPUP = 618,
+	SI_PC_IZ_DUN05 = 619,
+	SI_CRUSHSTRIKE = 620,
+	SI_MONSTER_TRANSFORM = 621,
+	SI_SIT = 622,
+	SI_ONAIR = 623,
+	SI_MTF_ASPD = 624,
+	SI_MTF_RANGEATK = 625,
+	SI_MTF_MATK = 626,
+	SI_MTF_MLEATKED = 627,
+	SI_MTF_CRIDAMAGE = 628,
+	SI_REUSE_LIMIT_MTF = 629,
+	SI_MACRO_PERMIT = 630,
+	SI_MACRO_PLAY = 631,
+	SI_SKF_CAST = 632,
+	SI_SKF_ASPD = 633,
+	SI_SKF_ATK = 634,
+	SI_SKF_MATK = 635,
+	SI_REWARD_PLUSONLYJOBEXP = 636,
 */
 };
 
@@ -1133,20 +1189,18 @@ struct status_data {
 		max_hp, max_sp;
 	unsigned short
 		str, agi, vit, int_, dex, luk,
-		batk,
+		batk, equipment_atk,
 		matk_min, matk_max, status_matk,
 		speed,
 		amotion, adelay, dmotion,
 		mode;
 	short 
 		hit, flee, cri, flee2,
-		def2, mdef2,
+		def, mdef, def2, mdef2,
 		aspd_rate;
 	unsigned char
 		def_ele, ele_lv,
 		size, race;
-	signed char
-		def, mdef;
 	struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon.
 };
 
@@ -1259,7 +1313,7 @@ int status_get_lv(struct block_list *bl);
 #define status_get_luk(bl) status_get_status_data(bl)->luk
 #define status_get_hit(bl) status_get_status_data(bl)->hit
 #define status_get_flee(bl) status_get_status_data(bl)->flee
-signed char status_get_def(struct block_list *bl);
+signed short status_get_def(struct block_list *bl);
 #define status_get_mdef(bl) status_get_status_data(bl)->mdef
 #define status_get_flee2(bl) status_get_status_data(bl)->flee2
 #define status_get_def2(bl) status_get_status_data(bl)->def2