Decompile 4 functions in Source/Contents/SpriteFrameSynchronization.cpp, Source/Contents/NpcLocationRadius.cpp, ...

Batch #1694 by eAthena: 0 byte-identical, 4 confirmed by peer review.

- fn_23819 CSession::GetSyncedFrame: logic confirmed by peer review
- fn_23467 CSession::GetNpcLocationRadius: logic confirmed by peer review
- fn_23823 CSession::GetRidingJob: logic confirmed by peer review
- fn_24152 CSession::GetSpriteJob: logic confirmed by peer review

Reviewed-by: ragnarok-clanker
Adds to the build: Source/Contents/SpriteFrameSynchronization.cpp, Source/Contents/NpcLocationRadius.cpp, Source/Contents/SpriteJob.cpp
This commit is contained in:
ragnarok-clanker 2026-10-28 20:24:26 +00:00
commit 0bc20896db
5 changed files with 657 additions and 1 deletions

View file

@ -16,7 +16,9 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
class CActRes;
class LuaScript; class LuaScript;
struct ActionFrame;
struct SessionRecord6144 { struct SessionRecord6144 {
/* 0000 */ std::uint16_t unknown_0000 = 0; /* 0000 */ std::uint16_t unknown_0000 = 0;
@ -103,7 +105,9 @@ public:
/* 3500 */ ItemInfo unknown_3500[10]; /* 3500 */ ItemInfo unknown_3500[10];
/* 3EB0 */ unsigned char unknown_3EB0[0x9B0]; /* 3EB0 */ unsigned char unknown_3EB0[0x9B0];
/* 4860 */ ItemInfo m_itemSlots[10]; /* 4860 */ ItemInfo m_itemSlots[10];
/* 5210 */ unsigned char unknown_5210[0xA8]; /* 5210 */ unsigned char unknown_5210[0x44];
/* 5254 */ std::map<int, float> m_npcLocationRadius;
/* 525C */ unsigned char unknown_525C[0x5C];
/* 52B8 */ std::vector<const char*> m_accessoryNames; /* 52B8 */ std::vector<const char*> m_accessoryNames;
/* 52C4 */ unsigned char unknown_52C4[0x294]; /* 52C4 */ unsigned char unknown_52C4[0x294];
/* 5558 */ int unknown_5558; /* 5558 */ int unknown_5558;
@ -227,6 +231,10 @@ public:
bool IsTopLayerRobe(int robe); bool IsTopLayerRobe(int robe);
int IsSkillIdInRange6018(unsigned id) const; int IsSkillIdInRange6018(unsigned id) const;
int IsSkillIdInRange6001(unsigned id) const; int IsSkillIdInRange6001(unsigned id) const;
const ActionFrame* GetSyncedFrame(CActRes* baseAct, CActRes* act, unsigned action, int baseFrame, std::uint32_t startTime, int* frame);
float GetNpcLocationRadius(int job, bool riding);
int GetRidingJob(int job);
int GetSpriteJob(int job, int costumeJob, bool spriteIndex);
}; };
extern CSession g_session; extern CSession g_session;

View file

@ -0,0 +1,438 @@
#include "Client/Session.h"
#include "Contents/Jobs/JobId.h"
#include "Script/LuaScript.h"
// OFFSET: 0x00DE0A70
// FUNCTION: fn_23467
float CSession::GetNpcLocationRadius(int job, bool riding) {
if (riding == true) {
job = this->GetRidingJob(job);
}
int radius = 0;
g_session.m_hotkeyScript->Call("GetNpcLocationRadius", "d>d", job, &radius);
if (radius != 0) {
return static_cast<float>(radius * 2 + 1);
}
if (this->m_npcLocationRadius.find(job) == this->m_npcLocationRadius.end()) {
return 1.0f;
}
return this->m_npcLocationRadius[job];
}
// OFFSET: 0x00E130A0
// FUNCTION: fn_23823
int CSession::GetRidingJob(int job) {
if (job == JT_NINJA) {
return JT_FROG_NINJA;
}
if (job == JT_LINKER) {
return JT_FROG_LINKER;
}
if (job == JT_GUNSLINGER) {
return JT_PECO_GUNNER;
}
if (job == JT_SWORDMAN) {
return JT_PECO_SWORD;
}
if (job == JT_BLACKSMITH_H) {
return JT_PIG_WHITESMITH;
}
if (job == JT_MERCHANT) {
return JT_PIG_MERCHANT;
}
if (job == JT_GENETIC || job == JT_GENETIC_H) {
return JT_PIG_GENETIC;
}
if (job == JT_ALCHEMIST_H) {
return JT_PIG_CREATOR;
}
if (job == JT_ARCHER) {
return JT_OSTRICH_ARCHER;
}
if (job == JT_STAR || job == JT_STAR2) {
return JT_PORING_STAR;
}
if (job == JT_NOVICE) {
return JT_PORING_NOVICE;
}
if (job == JT_MONK) {
return JT_SHEEP_MONK;
}
if (job == JT_ACOLYTE) {
return JT_SHEEP_ACO;
}
if (job == JT_SURA || job == JT_SURA_H) {
return JT_SHEEP_SURA;
}
if (job == JT_SUPERNOVICE) {
return JT_PORING_SNOVICE;
}
if (job == JT_ARCHBISHOP || job == JT_ARCHBISHOP_H) {
return JT_SHEEP_ARCB;
}
if (job == JT_MAGICIAN) {
return JT_FOX_MAGICIAN;
}
if (job == JT_SAGE) {
return JT_FOX_SAGE;
}
if (job == JT_SORCERER || job == JT_SORCERER_H) {
return JT_FOX_SORCERER;
}
if (job == JT_WARLOCK || job == JT_WARLOCK_H) {
return JT_FOX_WARLOCK;
}
if (job == JT_WIZARD) {
return JT_FOX_WIZ;
}
if (job == JT_SAGE_H) {
return JT_FOX_PROF;
}
if (job == JT_WIZARD_H) {
return JT_FOX_HWIZ;
}
if (job == JT_ALCHEMIST) {
return JT_PIG_ALCHE;
}
if (job == JT_BLACKSMITH) {
return JT_PIG_BLACKSMITH;
}
if (job == JT_MONK_H) {
return JT_SHEEP_CHAMP;
}
if (job == JT_GUILLOTINE_CROSS || job == JT_GUILLOTINE_CROSS_H) {
return JT_DOG_G_CROSS;
}
if (job == JT_THIEF) {
return JT_DOG_THIEF;
}
if (job == JT_ROGUE) {
return JT_DOG_ROGUE;
}
if (job == JT_SHADOW_CHASER || job == JT_SHADOW_CHASER_H) {
return JT_DOG_CHASER;
}
if (job == JT_ROGUE_H) {
return JT_DOG_STALKER;
}
if (job == JT_ASSASSIN) {
return JT_DOG_ASSASSIN;
}
if (job == JT_ASSASSIN_H) {
return JT_DOG_ASSA_X;
}
if (job == JT_DANCER) {
return JT_OSTRICH_DANCER;
}
if (job == JT_MINSTREL || job == JT_MINSTREL_H) {
return JT_OSTRICH_MINSTREL;
}
if (job == JT_BARD) {
return JT_OSTRICH_BARD;
}
if (job == JT_HUNTER_H) {
return JT_OSTRICH_SNIPER;
}
if (job == JT_WANDERER || job == JT_WANDERER_H) {
return JT_OSTRICH_WANDER;
}
if (job == JT_DANCER_H) {
return JT_OSTRICH_ZIPSI;
}
if (job == JT_BARD_H) {
return JT_OSTRICH_CROWN;
}
if (job == JT_HUNTER) {
return JT_OSTRICH_HUNTER;
}
if (job == JT_TAEKWON) {
return JT_PORING_TAEKWON;
}
if (job == JT_PRIEST) {
return JT_SHEEP_PRIEST;
}
if (job == JT_PRIEST_H) {
return JT_SHEEP_HPRIEST;
}
if (job == JT_NOVICE_B) {
return JT_PORING_NOVICE_B;
}
if (job == JT_SWORDMAN_B) {
return JT_PECO_SWORD_B;
}
if (job == JT_MAGICIAN_B) {
return JT_FOX_MAGICIAN_B;
}
if (job == JT_ARCHER_B) {
return JT_OSTRICH_ARCHER_B;
}
if (job == JT_ACOLYTE_B) {
return JT_SHEEP_ACO_B;
}
if (job == JT_MERCHANT_B) {
return JT_PIG_MERCHANT_B;
}
if (job == JT_HUNTER_B) {
return JT_OSTRICH_HUNTER_B;
}
if (job == JT_ASSASSIN_B) {
return JT_DOG_ASSASSIN_B;
}
if (job == JT_MONK_B) {
return JT_SHEEP_MONK_B;
}
if (job == JT_SAGE_B) {
return JT_FOX_SAGE_B;
}
if (job == JT_ROGUE_B) {
return JT_DOG_ROGUE_B;
}
if (job == JT_ALCHEMIST_B) {
return JT_PIG_ALCHE_B;
}
if (job == JT_BARD_B) {
return JT_OSTRICH_BARD_B;
}
if (job == JT_DANCER_B) {
return JT_OSTRICH_DANCER_B;
}
if (job == JT_SUPERNOVICE_B) {
return JT_PORING_SNOVICE_B;
}
if (job == JT_WARLOCK_B) {
return JT_FOX_WARLOCK_B;
}
if (job == JT_ARCHBISHOP_B) {
return JT_SHEEP_ARCB_B;
}
if (job == JT_GUILLOTINE_CROSS_B) {
return JT_DOG_G_CROSS_B;
}
if (job == JT_SORCERER_B) {
return JT_FOX_SORCERER_B;
}
if (job == JT_MINSTREL_B) {
return JT_OSTRICH_MINSTREL_B;
}
if (job == JT_WANDERER_B) {
return JT_OSTRICH_WANDER_B;
}
if (job == JT_SURA_B) {
return JT_SHEEP_SURA_B;
}
if (job == JT_GENETIC_B) {
return JT_PIG_GENETIC_B;
}
if (job == JT_SHADOW_CHASER_B) {
return JT_DOG_CHASER_B;
}
if (job == JT_NOVICE_H) {
return JT_PORING_NOVICE_H;
}
if (job == JT_SWORDMAN_H) {
return JT_PECO_SWORD_H;
}
if (job == JT_MAGICIAN_H) {
return JT_FOX_MAGICIAN_H;
}
if (job == JT_ARCHER_H) {
return JT_OSTRICH_ARCHER_H;
}
if (job == JT_ACOLYTE_H) {
return JT_SHEEP_ACO_H;
}
if (job == JT_MERCHANT_H) {
return JT_PIG_MERCHANT_H;
}
if (job == JT_THIEF_H) {
return JT_DOG_THIEF_H;
}
if (job == JT_THIEF_B) {
return JT_DOG_THIEF_B;
}
if (job == JT_SUPERNOVICE2) {
return JT_PORING_SNOVICE2;
}
if (job == JT_SUPERNOVICE2_B) {
return JT_PORING_SNOVICE2_B;
}
if (job == JT_PRIEST_B) {
return JT_SHEEP_PRIEST_B;
}
if (job == JT_WIZARD_B) {
return JT_FOX_WIZ_B;
}
if (job == JT_BLACKSMITH_B) {
return JT_PIG_BLACKSMITH_B;
}
if (job == JT_MECHANIC || job == JT_MECHANIC_H) {
return JT_PIG_MECHANIC;
}
if (job == JT_MECHANIC_B) {
return JT_PIG_MECHANIC_B;
}
if (job == JT_RANGER || job == JT_RANGER_H) {
return JT_OSTRICH_RANGER;
}
if (job == JT_RANGER_B) {
return JT_OSTRICH_RANGER_B;
}
if (job == JT_KNIGHT) {
return JT_LION_KNIGHT;
}
if (job == JT_KNIGHT_H) {
return JT_LION_KNIGHT_H;
}
if (job == JT_KNIGHT_B) {
return JT_LION_KNIGHT_B;
}
if (job == JT_ROYAL_GUARD || job == JT_ROYAL_GUARD_H) {
return JT_LION_ROYAL_GUARD;
}
if (job == JT_ROYAL_GUARD_B) {
return JT_LION_ROYAL_GUARD_B;
}
if (job == JT_RUNE_KNIGHT || job == JT_RUNE_KNIGHT_H) {
return JT_LION_RUNE_KNIGHT;
}
if (job == JT_RUNE_KNIGHT_B) {
return JT_LION_RUNE_KNIGHT_B;
}
if (job == JT_CRUSADER) {
return JT_LION_CRUSADER;
}
if (job == JT_CRUSADER_H) {
return JT_LION_CRUSADER_H;
}
if (job == JT_CRUSADER_B) {
return JT_LION_CRUSADER_B;
}
if (job == JT_KAGEROU) {
return JT_FROG_KAGEROU;
}
if (job == JT_OBORO) {
return JT_FROG_OBORO;
}
if (job == JT_REBELLION) {
return JT_PECO_REBELLION;
}
if (job == JT_DO_SUMMONER) {
return JT_DO_CART_SUMMONER;
}
if (job == JT_DO_SUMMONER_B) {
return JT_DO_CART_SUMMONER_B;
}
if (job == JT_NINJA_B) {
return JT_FROG_NINJA_B;
}
if (job == JT_KAGEROU_B) {
return JT_FROG_KAGEROU_B;
}
if (job == JT_OBORO_B) {
return JT_FROG_OBORO_B;
}
if (job == JT_TAEKWON_B) {
return JT_PORING_TAEKWON_B;
}
if (job == JT_STAR_B || job == JT_STAR2_B) {
return JT_PORING_STAR_B;
}
if (job == JT_LINKER_B) {
return JT_FROG_LINKER_B;
}
if (job == JT_GUNSLINGER_B) {
return JT_PECO_GUNNER_B;
}
if (job == JT_REBELLION_B) {
return JT_PECO_REBELLION_B;
}
if (job == JT_STAR_EMPEROR || job == JT_STAR2_EMPEROR) {
return JT_HAETAE_STAR_EMPEROR;
}
if (job == JT_STAR_EMPEROR_B || job == JT_STAR2_EMPEROR_B) {
return JT_HAETAE_STAR_EMPEROR_B;
}
if (job == JT_SOUL_REAPER) {
return JT_HAETAE_SOUL_REAPER;
}
if (job == JT_SOUL_REAPER_B) {
return JT_HAETAE_SOUL_REAPER_B;
}
if (job == JT_SHADOW_CROSS) {
return JT_SHADOW_CROSS_RIDING;
}
if (job == JT_ABYSS_CHASER) {
return JT_ABYSS_CHASER_RIDING;
}
if (job == JT_DRAGON_KNIGHT) {
return JT_DRAGON_KNIGHT_RIDING;
}
if (job == JT_IMPERIAL_GUARD) {
return JT_IMPERIAL_GUARD_RIDING;
}
if (job == JT_BIOLO) {
return JT_BIOLO_RIDING;
}
if (job == JT_MEISTER) {
return JT_MEISTER_RIDING;
}
if (job == JT_WINDHAWK) {
return JT_WINDHAWK_RIDING;
}
if (job == JT_TROUBADOUR) {
return JT_TROUBADOUR_RIDING;
}
if (job == JT_TROUVERE) {
return JT_TROUVERE_RIDING;
}
if (job == JT_ARCH_MAGE) {
return JT_ARCH_MAGE_RIDING;
}
if (job == JT_ELEMENTAL_MASTER) {
return JT_ELEMENTAL_MASTER_RIDING;
}
if (job == JT_CARDINAL) {
return JT_CARDINAL_RIDING;
}
if (job == JT_INQUISITOR) {
return JT_INQUISITOR_RIDING;
}
if (job == JT_SKY_EMPEROR || job == JT_SKY_EMPEROR2) {
return JT_SKY_EMPEROR_RIDING;
}
if (job == JT_SOUL_ASCETIC) {
return JT_SOUL_ASCETIC_RIDING;
}
if (job == JT_SHINKIRO) {
return JT_SHINKIRO_RIDING;
}
if (job == JT_SHIRANUI) {
return JT_SHIRANUI_RIDING;
}
if (job == JT_NIGHT_WATCH) {
return JT_NIGHT_WATCH_RIDING;
}
if (job == JT_HYPER_NOVICE) {
return JT_HYPER_NOVICE_RIDING;
}
if (job == JT_SPIRIT_HANDLER) {
return JT_SPIRIT_HANDLER_RIDING;
}
if (job == JT_DRUID || job == JT_DRUID_B) {
return JT_DRUID_RIDING;
}
if (job == JT_KARNOS || job == JT_KARNOS_B) {
return JT_KARNOS_RIDING;
}
if (job == JT_ALITEA) {
return JT_ALITEA_RIDING;
}
if (job == JT_WEREWOLF || job == JT_WERERAPTOR) {
return JT_DRUID_RIDING;
}
return job;
}

View file

@ -0,0 +1,29 @@
#include "Client/Session.h"
#include "Resource/Sprites/ActionResource.h"
#include <windows.h>
#include <timeapi.h>
// OFFSET: 0x00E12D70
// FUNCTION: fn_23819
const ActionFrame* CSession::GetSyncedFrame(CActRes* baseAct, CActRes* act, unsigned action, int baseFrame, std::uint32_t startTime, int* frame) {
if (!baseAct || !act) {
return nullptr;
}
int baseCount = baseAct->FrameCount(action);
int count = act->FrameCount(action);
if (baseCount <= 0 || count <= 0 || baseCount >= count || count % baseCount != 0) {
return nullptr;
}
int ratio = count / baseCount;
int speed = static_cast<int>(act->Speed(action));
float elapsed = (timeGetTime() - startTime) / 24.0;
if (speed == 0) {
speed = 4;
}
*frame = static_cast<int>(elapsed / speed) % ratio + ratio * baseFrame;
return &act->Frame(action, *frame);
}

View file

@ -0,0 +1,178 @@
#include "Client/Session.h"
#include "Contents/Jobs/JobId.h"
#include "Contents/Jobs/JobNames.h"
// OFFSET: 0x00E2EE70
// FUNCTION: fn_24152
int CSession::GetSpriteJob(int job, int costumeJob, bool spriteIndex) {
switch (job) {
case JT_MARRIED:
case JT_SANTA:
case JT_SUMMER:
case JT_HANBOK:
case JT_OKTOBERFEST:
case JT_SUMMER2:
return job;
}
int mount;
if (g_session.GetRidingJob(JobNames::BaseJob(job)) == job) {
mount = 1;
} else {
switch (job) {
case JT_CHICKEN:
case JT_CHICKEN2:
case JT_CHICKEN_H:
case JT_CHICKEN2_H:
case JT_CHICKEN_B:
case JT_CHICKEN2_B:
case JT_RUNE_CHICKEN:
case JT_RUNE_CHICKEN_H:
case JT_RUNE_CHICKEN_B:
case JT_ROYAL_CHICKEN:
case JT_ROYAL_CHICKEN_H:
case JT_ROYAL_CHICKEN_B:
case JT_WOLF_RANGER:
case JT_WOLF_RANGER_H:
case JT_WOLF_RANGER_B:
case JT_WOLF_WINDHAWK:
case JT_DRAGON_KNIGHT_CHICKEN:
case JT_IMPERIAL_GUARD_CHICKEN:
mount = 2;
break;
default:
mount = 0;
break;
}
}
switch (costumeJob) {
case JT_RUNE_KNIGHT_2ND:
costumeJob = JT_RUNE_KNIGHT_H;
break;
case JT_MECHANIC_2ND:
costumeJob = JT_MECHANIC_H;
break;
case JT_GUILLOTINE_CROSS_2ND:
costumeJob = JT_GUILLOTINE_CROSS_H;
break;
case JT_WARLOCK_2ND:
costumeJob = JT_WARLOCK_H;
break;
case JT_ARCHBISHOP_2ND:
costumeJob = JT_ARCHBISHOP_H;
break;
case JT_RANGER_2ND:
costumeJob = JT_RANGER_H;
break;
case JT_ROYAL_GUARD_2ND:
costumeJob = JT_ROYAL_GUARD_H;
break;
case JT_GENETIC_2ND:
costumeJob = JT_GENETIC_H;
break;
case JT_SHADOW_CHASER_2ND:
costumeJob = JT_SHADOW_CHASER_H;
break;
case JT_SORCERER_2ND:
costumeJob = JT_SORCERER_H;
break;
case JT_SURA_2ND:
costumeJob = JT_SURA_H;
break;
case JT_MINSTREL_2ND:
costumeJob = JT_MINSTREL_H;
break;
case JT_WANDERER_2ND:
costumeJob = JT_WANDERER_H;
break;
}
if (mount == 1) {
costumeJob = g_session.GetRidingJob(costumeJob);
} else if (mount == 2) {
switch (costumeJob) {
case JT_KNIGHT:
costumeJob = JT_CHICKEN;
break;
case JT_CRUSADER:
costumeJob = JT_CHICKEN2;
break;
case JT_KNIGHT_H:
costumeJob = JT_CHICKEN_H;
break;
case JT_CRUSADER_H:
costumeJob = JT_CHICKEN2_H;
break;
case JT_KNIGHT_B:
costumeJob = JT_CHICKEN_B;
break;
case JT_CRUSADER_B:
costumeJob = JT_CHICKEN2_B;
break;
case JT_RUNE_KNIGHT:
costumeJob = JT_RUNE_CHICKEN;
break;
case JT_RUNE_KNIGHT_H:
costumeJob = JT_RUNE_CHICKEN_H;
break;
case JT_RUNE_KNIGHT_B:
costumeJob = JT_RUNE_CHICKEN_B;
break;
case JT_DRAGON_KNIGHT:
costumeJob = JT_DRAGON_KNIGHT_CHICKEN;
break;
case JT_ROYAL_GUARD:
costumeJob = JT_ROYAL_CHICKEN;
break;
case JT_ROYAL_GUARD_H:
costumeJob = JT_ROYAL_CHICKEN_H;
break;
case JT_ROYAL_GUARD_B:
costumeJob = JT_ROYAL_CHICKEN_B;
break;
case JT_IMPERIAL_GUARD:
costumeJob = JT_IMPERIAL_GUARD_CHICKEN;
break;
case JT_RANGER:
costumeJob = JT_WOLF_RANGER;
break;
case JT_RANGER_H:
costumeJob = JT_WOLF_RANGER_H;
break;
case JT_RANGER_B:
costumeJob = JT_WOLF_RANGER_B;
break;
case JT_WINDHAWK:
costumeJob = JT_WOLF_WINDHAWK;
break;
}
} else {
if (job == JT_MADOGEAR || job == JT_MADOGEAR_H || job == JT_MADOGEAR_B || job == JT_MEISTER_MADOGEAR) {
switch (costumeJob) {
case JT_MECHANIC:
costumeJob = JT_MADOGEAR;
break;
case JT_MECHANIC_H:
costumeJob = JT_MADOGEAR_H;
break;
case JT_MECHANIC_B:
costumeJob = JT_MADOGEAR_B;
break;
case JT_MEISTER:
costumeJob = JT_MEISTER_MADOGEAR;
break;
}
}
if (job == JT_WEREWOLF || job == JT_WERERAPTOR) {
costumeJob = job;
}
}
if (spriteIndex == true && costumeJob > 3950) {
return costumeJob - 3950;
}
return costumeJob;
}

View file

@ -385,6 +385,7 @@
"Source/Contents/NavigationRequest.cpp": 4, "Source/Contents/NavigationRequest.cpp": 4,
"Source/Contents/NavigationRoute.cpp": 4, "Source/Contents/NavigationRoute.cpp": 4,
"Source/Contents/NavigationSource.cpp": 4, "Source/Contents/NavigationSource.cpp": 4,
"Source/Contents/NpcLocationRadius.cpp": 4,
"Source/Contents/Party/AdvenPartyInfo.cpp": 4, "Source/Contents/Party/AdvenPartyInfo.cpp": 4,
"Source/Contents/Party/AdventurerAgencyMgr.cpp": 4, "Source/Contents/Party/AdventurerAgencyMgr.cpp": 4,
"Source/Contents/Party/AgencyRequests.cpp": 4, "Source/Contents/Party/AgencyRequests.cpp": 4,
@ -423,6 +424,8 @@
"Source/Contents/Sound/SoundConfiguration.cpp": 4, "Source/Contents/Sound/SoundConfiguration.cpp": 4,
"Source/Contents/Sound/SoundMaker.cpp": 4, "Source/Contents/Sound/SoundMaker.cpp": 4,
"Source/Contents/Sound/SoundMgr.cpp": 4, "Source/Contents/Sound/SoundMgr.cpp": 4,
"Source/Contents/SpriteFrameSynchronization.cpp": 4,
"Source/Contents/SpriteJob.cpp": 4,
"Source/Contents/SpriteLayerOrder.cpp": 4, "Source/Contents/SpriteLayerOrder.cpp": 4,
"Source/Contents/SpriteRidingPolicy.cpp": 4, "Source/Contents/SpriteRidingPolicy.cpp": 4,
"Source/Contents/Store/MCStoreInfoBackup.cpp": 4, "Source/Contents/Store/MCStoreInfoBackup.cpp": 4,