diff --git a/Source/Contents/Effects/RagEffectInitialization.cpp b/Source/Contents/Effects/RagEffectInitialization.cpp index 43582d272..5795e7104 100644 --- a/Source/Contents/Effects/RagEffectInitialization.cpp +++ b/Source/Contents/Effects/RagEffectInitialization.cpp @@ -14,42 +14,26 @@ // INLINED __forceinline static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& options, char* name) { name[0] = '\0'; - + std::sprintf(name, ""); switch (effect.type) { + case EF_WINDHIT: + std::sprintf(name, "WindHit%d.str", std::rand() % 3 + 1); + break; case EF_COIN: std::sprintf(name, options.Get(229) != 0 ? "memor_min.str" : "Maemor.str"); break; - case EF_GLASSWALL: - case EF_GLASSWALL2: - std::sprintf(name, "SafetyWall.str"); - break; - case EF_STONECURSE: - case EF_PETRIFYATTACK: - std::sprintf(name, "StoneCurse.str"); - break; case EF_FIREWALL: std::sprintf(name, "Firewall%d.str", std::rand() % 2 + 1); break; - case EF_LIGHTBOLT: - std::sprintf(name, "Lightning.str"); - break; case EF_THUNDERSTORM: std::sprintf(name, "ThunderStorm.str"); break; + case EF_LIGHTBOLT: + std::sprintf(name, "Lightning.str"); + break; case EF_SIGNUM: std::sprintf(name, "Cross.str"); break; - case EF_ANGELUS: - case EF_WEWISH: - std::sprintf(name, options.Get(229) != 0 ? "jong_mini.str" : "Angelus.str"); - break; - case EF_FIREHIT: - case EF_FIREHIT2: - std::sprintf(name, "FireHit%d.str", std::rand() % 3 + 1); - break; - case EF_WINDHIT: - std::sprintf(name, "WindHit%d.str", std::rand() % 3 + 1); - break; case EF_ARROWSHOT: std::sprintf(name, "ArrowShot.str"); break; @@ -68,9 +52,6 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_SKIDTRAP: std::sprintf(name, "SkidTrap.str"); break; - case EF_BRANDISHSPEAR: - std::sprintf(name, "Brandish.str"); - break; case EF_GLORIA: std::sprintf(name, options.Get(229) != 0 ? "gloria_min.str" : "Gloria.str"); break; @@ -143,15 +124,15 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_FREEZING: std::sprintf(name, "Freezing.str"); break; + case EF_SPRINGTRAP: + std::sprintf(name, "Spring.str"); + break; case EF_BUBBLE: std::sprintf(name, "Bubble%d.str", std::rand() % 4 + 1); break; case EF_GASPUSH: std::sprintf(name, "GasPush.str"); break; - case EF_SPRINGTRAP: - std::sprintf(name, "Spring.str"); - break; case EF_KYRIE: std::sprintf(name, options.Get(229) != 0 ? "kyrie_min.str" : "Kyrie.str"); break; @@ -167,17 +148,12 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_POISONREACT2: std::sprintf(name, "PoisonReact.str"); break; - case EF_SPLASHER: - std::sprintf(name, "VenomSplasher.str"); - break; - case EF_TWOHANDQUICKEN: - case EF_SPEARQUICKEN: - case EF_LKCONCENTRATION: - std::sprintf(name, "TwoHand.str"); - break; case EF_AUTOCOUNTER: std::sprintf(name, "AutoCounter.str"); break; + case EF_SPLASHER: + std::sprintf(name, "VenomSplasher.str"); + break; case EF_FREEZE: std::sprintf(name, "Freeze.str"); break; @@ -187,9 +163,6 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_ICECRASH: std::sprintf(name, "IceCrash.str"); break; - case EF_SLOWPOISON: - std::sprintf(name, "slowp.str"); - break; case EF_SANDMAN: std::sprintf(name, "SandMan.str"); break; @@ -199,6 +172,9 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_SONICBLOW2: std::sprintf(name, "SonicBlow.str"); break; + case EF_BRANDISHSPEAR: + std::sprintf(name, "Brandish.str"); + break; case EF_BRANDISH2: std::sprintf(name, "Brandish2.str"); break; @@ -226,25 +202,27 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_HOLYHIT: std::sprintf(name, "HolyHit.str"); break; - case EF_CONCENTRATION: - case EF_CONCENTRATION2: - std::sprintf(name, "Concentration.str"); - break; case EF_REFINEOK: std::sprintf(name, "bs_RefineSuccess.str"); break; case EF_REFINEFAIL: std::sprintf(name, "bs_RefineFailed.str"); break; + case EF_PHARMACY_OK: + std::sprintf(name, "p_success.str"); + break; + case EF_PHARMACY_FAIL: + std::sprintf(name, "p_failed.str"); + break; case EF_JOBCHANGE: std::sprintf(name, "JobChange.str"); break; case EF_LVUP: std::sprintf(name, "LevelUP.str"); break; - case EF_JOBLVUP: - case EF_JOBLVUP50: - std::sprintf(name, "JobLvUP.str"); + case EF_GLASSWALL: + case EF_GLASSWALL2: + std::sprintf(name, "SafetyWall.str"); break; case EF_TAMINGSUCCESS: std::sprintf(name, "TamingSuccess.str"); @@ -258,15 +236,15 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_CARTREVOLUTION: std::sprintf(name, "CartRevolution.str"); break; + case EF_SUI_EXPLOSION: + std::sprintf(name, "sui_explosion.str"); + break; case EF_MENTALBREAK: std::sprintf(name, "MentalBreak.str"); break; case EF_MAGICALATTHIT: std::sprintf(name, "magical.str"); break; - case EF_SUI_EXPLOSION: - std::sprintf(name, "sui_explosion.str"); - break; case EF_SUICIDE: std::sprintf(name, "suicide.str"); break; @@ -300,6 +278,10 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_SLEEPATTACK: std::sprintf(name, "sleep.str"); break; + case EF_STONECURSE: + case EF_PETRIFYATTACK: + std::sprintf(name, "StoneCurse.str"); + break; case EF_PONG: std::sprintf(name, "Pong%d.str", std::rand() % 3 + 1); break; @@ -339,10 +321,6 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_POTION_: std::sprintf(name, "각성.str"); break; - case EF_POTION_BERSERK: - case EF_POTION_BERSERK2: - std::sprintf(name, "버서크.str"); - break; case EF_SPELLBREAKER: std::sprintf(name, "spell.str"); break; @@ -355,26 +333,8 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_HOLYCROSS: std::sprintf(name, "holy_cross.str"); break; - case EF_SHIELDCHARGE: - std::sprintf(name, "shield_charge.str"); - break; - case EF_PROVIDENCE: - std::sprintf(name, "providence.str"); - break; - case EF_DEVOTION: - std::sprintf(name, "devotion.str"); - break; - case EF_FLAMELAUNCHER: - std::sprintf(name, "enc_fire.str"); - break; - case EF_FROSTWEAPON: - std::sprintf(name, "enc_ice.str"); - break; - case EF_LIGHTNINGLOADER: - std::sprintf(name, "enc_wind.str"); - break; - case EF_SEISMICWEAPON: - std::sprintf(name, "enc_earth.str"); + case EF_CHAINCOMBO: + std::sprintf(name, "연환.str"); break; case EF_STEALCOIN: std::sprintf(name, "steal_coin.str"); @@ -391,28 +351,68 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_STRIPHELM: std::sprintf(name, "strip_helm.str"); break; - case EF_CHAINCOMBO: - std::sprintf(name, "연환.str"); + case EF_SHIELDCHARGE: + std::sprintf(name, "shield_charge.str"); break; - case EF_PHARMACY_OK: - std::sprintf(name, "p_success.str"); + case EF_DEVOTION: + std::sprintf(name, "devotion.str"); break; - case EF_PHARMACY_FAIL: - std::sprintf(name, "p_failed.str"); + case EF_PROVIDENCE: + std::sprintf(name, "providence.str"); + break; + case EF_FLAMELAUNCHER: + std::sprintf(name, "enc_fire.str"); + break; + case EF_FROSTWEAPON: + std::sprintf(name, "enc_ice.str"); + break; + case EF_LIGHTNINGLOADER: + std::sprintf(name, "enc_wind.str"); + break; + case EF_SEISMICWEAPON: + std::sprintf(name, "enc_earth.str"); break; case EF_LOUD: std::sprintf(name, "loud.str"); break; + case EF_SLOWPOISON: + std::sprintf(name, "slowp.str"); + break; + case EF_JOBLVUP: + case EF_JOBLVUP50: + std::sprintf(name, "JobLvUP.str"); + break; case EF_ANGEL: std::sprintf(name, "angel.str"); break; - case EF_DEVIL: - case EF_DEATHSUMMON: - std::sprintf(name, "devil.str"); + case EF_MAPAE: + std::sprintf(name, "mapae.str"); + break; + case EF_FIREHIT: + case EF_FIREHIT2: + std::sprintf(name, "FireHit%d.str", std::rand() % 3 + 1); + break; + case EF_HFLIMOON1: + std::sprintf(name, "moonlight_1.str"); + break; + case EF_HFLIMOON2: + std::sprintf(name, "moonlight_2.str"); + break; + case EF_HFLIMOON3: + std::sprintf(name, "moonlight_3.str"); + break; + case EF_HO_UP: + std::sprintf(name, "h_levelup.str"); + break; + case EF_ASSUMPTIO2: + std::sprintf(name, "asum.str"); break; case EF_MELTDOWN: std::sprintf(name, "melt.str"); break; + case EF_MOCHI: + std::sprintf(name, "찹쌀떡.str"); + break; case EF_CARTBOOST: std::sprintf(name, "cart.str"); break; @@ -425,34 +425,14 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_SOULCHANGE: std::sprintf(name, "사람효과.str"); break; - case EF_ASSUMPTIO2: - std::sprintf(name, "asum.str"); - break; - case EF_MOCHI: - std::sprintf(name, "찹쌀떡.str"); + case EF_TWOHANDQUICKEN: + case EF_SPEARQUICKEN: + case EF_LKCONCENTRATION: + std::sprintf(name, "TwoHand.str"); break; case EF_LAMADAN: std::sprintf(name, "ramadan.str"); break; - case EF_MAPAE: - std::sprintf(name, "mapae.str"); - break; - case EF_ITEMPOKJUK: - case EF_HAPGYEOK: - std::sprintf(name, "itempokjuk.str"); - break; - case EF_HFLIMOON1: - std::sprintf(name, "moonlight_1.str"); - break; - case EF_HFLIMOON2: - std::sprintf(name, "moonlight_2.str"); - break; - case EF_HFLIMOON3: - std::sprintf(name, "moonlight_3.str"); - break; - case EF_HO_UP: - std::sprintf(name, "h_levelup.str"); - break; case EF_HAMIDEFENCE: std::sprintf(name, "defense.str"); break; @@ -480,11 +460,27 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_COOKING_FAIL: std::sprintf(name, "cook_fail.str"); break; + case EF_ITEMPOKJUK: + case EF_HAPGYEOK: + std::sprintf(name, "itempokjuk.str"); + break; case EF_BAKU: std::sprintf(name, "fire dragon.str"); break; - case EF_HYOUSYOURAKU: - std::sprintf(name, "icy.str"); + case EF_ANGELUS: + case EF_WEWISH: + std::sprintf(name, options.Get(229) != 0 ? "jong_mini.str" : "Angelus.str"); + break; + case EF_CRASHAXE: + std::sprintf(name, "powerswing.str"); + break; + case EF_CONCENTRATION: + case EF_CONCENTRATION2: + std::sprintf(name, "Concentration.str"); + break; + case EF_POTION_BERSERK: + case EF_POTION_BERSERK2: + std::sprintf(name, "버서크.str"); break; case EF_TRACKCASTING: std::sprintf(name, "트랙킹.str"); @@ -492,13 +488,16 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_BULLSEYE: std::sprintf(name, "불스아이.str"); break; - case EF_DRAGONFEAR: - case EF_WIDECONFUSE: - std::sprintf(name, "dfear.str"); + case EF_HYOUSYOURAKU: + std::sprintf(name, "icy.str"); break; case EF_BLEEDING: std::sprintf(name, "wideb.str"); break; + case EF_DRAGONFEAR: + case EF_WIDECONFUSE: + std::sprintf(name, "dfear.str"); + break; case EF_CRITICALWOUND: std::sprintf(name, "cwound.str"); break; @@ -553,9 +552,6 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_MILSHIELD_STR: std::sprintf(name, "mil_shield.str"); break; - case EF_CRASHAXE: - std::sprintf(name, "powerswing.str"); - break; case EF_ENERVATION: std::sprintf(name, "enervation.str"); break; @@ -577,18 +573,6 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_FIREWALL2: std::sprintf(name, "Firewall_per.str"); break; - case EF_SHOCKWAVE2: - std::sprintf(name, "hunter_shockwave_blue.str"); - break; - case EF_POISON_MIST: - std::sprintf(name, "poison_mist.str"); - break; - case EF_ERASER_CUTTER: - std::sprintf(name, "eraser_cutter.str"); - break; - case EF_LAVA_SLIDE: - std::sprintf(name, "lava_slide.str"); - break; case EF_SONIC_CLAW: std::sprintf(name, "sonic_claw.str"); break; @@ -598,6 +582,18 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_MIDNIGHT_FRENZY: std::sprintf(name, "mid_frenzy.str"); break; + case EF_ERASER_CUTTER: + std::sprintf(name, "eraser_cutter.str"); + break; + case EF_LAVA_SLIDE: + std::sprintf(name, "lava_slide.str"); + break; + case EF_POISON_MIST: + std::sprintf(name, "poison_mist.str"); + break; + case EF_SHOCKWAVE2: + std::sprintf(name, "hunter_shockwave_blue.str"); + break; case EF_VOLCANIC_ASH: std::sprintf(name, "vash00.str"); break; @@ -638,6 +634,10 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_INVINCIBLEOFF2: std::sprintf(name, "INVINCIBLEOFF2.str"); break; + case EF_DEVIL: + case EF_DEATHSUMMON: + std::sprintf(name, "devil.str"); + break; case EF_GC_DARKCROW: std::sprintf(name, "gc_darkcrow.str"); effect.loopLimit = 9999; @@ -657,6 +657,10 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic case EF_AB_OFFERTORIUM: std::sprintf(name, "AB_OFFERTORIUM.str"); break; + case EF_AB_OFFERTORIUM_RING: + std::sprintf(name, "AB_OFFERTORIUM_ring.str"); + effect.loopLimit = 9999; + break; case EF_WL_TELEKINESIS_INTENSE: std::sprintf(name, "WL_TELEKINESIS_INTENSE.str"); effect.loopLimit = 9999; @@ -672,10 +676,6 @@ __forceinline static void SelectRagEffectResource(RagEffectState& effect, Servic std::sprintf(name, "chill.str"); effect.loopLimit = 9999; break; - case EF_AB_OFFERTORIUM_RING: - std::sprintf(name, "AB_OFFERTORIUM_ring.str"); - effect.loopLimit = 9999; - break; default: break; } @@ -698,20 +698,18 @@ void CRagEffect::Init(EffectActor* parent, int id, vector3d deltaPos) { SelectRagEffectResource(this->state, g_serviceOptions, name); if (std::strlen(name) != 0) { - auto* resource = static_cast(ResourceMgr::Instance().Load(name)); - this->state.resource = resource; + this->state.resource = ResourceMgr::Instance().Load(name); - if (resource) { - ++resource->references; + if (this->state.resource) { + this->state.resource->Lock(); + auto* resource = static_cast(this->state.resource); this->state.resourceData = &resource->maximumFrame; - int count = resource->clipCount; + this->state.endLayer = resource->clipCount; if (resource->clips[0].frameCount == 0) { - --count; + --this->state.endLayer; } - - this->state.endLayer = count; } } }