From 69e59653ed3cce276e53cf12f9774dec2d444979 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Wed, 28 Oct 2026 20:21:01 +0000 Subject: [PATCH] Decompile fn_22575 (GetSpriteLayerOrder) Batch #1688 by eAthena: 0 byte-identical, 1 confirmed by peer review. - fn_22575 GetSpriteLayerOrder: logic confirmed by peer review Reviewed-by: ragnarok-clanker Adds to the build: Source/Contents/SpriteLayerOrder.cpp --- Source/Contents/SpriteLayerOrder.cpp | 61 ++++++++++++++++++++++++++++ Source/Contents/SpriteLayerOrder.h | 8 ++++ data/compile.json | 1 + 3 files changed, 70 insertions(+) create mode 100644 Source/Contents/SpriteLayerOrder.cpp create mode 100644 Source/Contents/SpriteLayerOrder.h diff --git a/Source/Contents/SpriteLayerOrder.cpp b/Source/Contents/SpriteLayerOrder.cpp new file mode 100644 index 0000000..76208f7 --- /dev/null +++ b/Source/Contents/SpriteLayerOrder.cpp @@ -0,0 +1,61 @@ +#include "Contents/SpriteLayerOrder.h" +#include "Resource/ImfResource.h" + +// OFFSET: 0x00DAAB00 +// FUNCTION: fn_22575 +int GetSpriteLayerOrder(CImfRes* imfRes, int layer, int baseAction, int action, int motion) { + switch (action - baseAction) { + case 0: + case 1: + case 6: + case 7: + switch (8 - layer) { + case 0: + return imfRes->GetLayer(1, action, motion); + case 1: + return imfRes->GetLayer(0, action, motion); + case 2: + return 2; + case 3: + return 3; + case 4: + return 4; + case 5: + return 8; + case 6: + return 5; + case 7: + return 6; + case 8: + return 7; + } + break; + case 2: + case 3: + case 4: + case 5: + switch (8 - layer) { + case 0: + return 7; + case 1: + return imfRes->GetLayer(1, action, motion); + case 2: + return imfRes->GetLayer(0, action, motion); + case 3: + return 2; + case 4: + return 3; + case 5: + return 4; + case 6: + return 8; + case 7: + return 5; + case 8: + return 6; + } + break; + } + + return 9; +} diff --git a/Source/Contents/SpriteLayerOrder.h b/Source/Contents/SpriteLayerOrder.h new file mode 100644 index 0000000..c3e780c --- /dev/null +++ b/Source/Contents/SpriteLayerOrder.h @@ -0,0 +1,8 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_SPRITELAYERORDER_H +#define RAGNAROK_SOURCE_CONTENTS_SPRITELAYERORDER_H + +class CImfRes; + +int GetSpriteLayerOrder(CImfRes* imfRes, int layer, int baseAction, int action, int motion); + +#endif diff --git a/data/compile.json b/data/compile.json index c4093d9..ff3b3fe 100644 --- a/data/compile.json +++ b/data/compile.json @@ -422,6 +422,7 @@ "Source/Contents/Sound/SoundConfiguration.cpp": 4, "Source/Contents/Sound/SoundMaker.cpp": 4, "Source/Contents/Sound/SoundMgr.cpp": 4, + "Source/Contents/SpriteLayerOrder.cpp": 4, "Source/Contents/SpriteRidingPolicy.cpp": 4, "Source/Contents/Store/MCStoreInfoBackup.cpp": 4, "Source/Contents/Store/MCStoreInfoBackupAsyncWork.cpp": 4,