rodecomp/Source/Contents/SpriteLayerDrawing.cpp
ragnarok-clanker 5fb1815800 Decompile 3 functions in Source/Contents/SpriteLayerDrawing.cpp, Source/Contents/SpriteLayerDrawing.h, ...
Batch #5168 by youko: 0 byte-identical, 3 confirmed by peer review.

- fn_04813 SpriteLayerRenderer::GetItemOffset: logic confirmed by peer review
- fn_04814 SpriteLayerRenderer::GetPalette: logic confirmed by peer review
- fn_04815 SpriteLayerRenderer::FindLayer: logic confirmed by peer review

Peer-reviewed-by: eAthena, Yommy, alisonrag
Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
Adds to the build: Source/Contents/SpriteLayerDrawing.cpp
2026-10-30 09:10:48 +00:00

86 lines
2.2 KiB
C++

#include "Contents/SpriteLayerDrawing.h"
#include "Client/Session.h"
#include "Contents/Actors/ActorStateFlags.h"
#include "Contents/Actors/Pc.h"
#include "Contents/Configuration/ServiceOptions.h"
#include "Contents/SpriteRidingOffset.h"
#include "Contents/SpriteRidingPolicy.h"
#include "Resource/PaletteResource.h"
#include "Resource/ResourceMgr.h"
#include "Resource/Sprites/ActionResource.h"
#include "Resource/Sprites/SpriteResource.h"
#include "Script/LuaScript.h"
#include <cstring>
// OFFSET: 0x0063FC90
// OFFSET: 0x00640050
// OFFSET: 0x00640AD0
// OFFSET: 0x00640ED0
// OFFSET: 0x00641130
// FUNCTION: fn_04813
std::pair<int, int> SpriteLayerRenderer::GetItemOffset(int layer) {
if (g_session.IsDoramJob(this->pc->unknown_025C) == true) {
CPc* pc = this->pc;
int turn = 0;
if (pc->unknown_043C == 2) {
turn = -1;
} else if (pc->unknown_043C == 1) {
turn = 1;
}
int direction = pc->render.previousAnimation - pc->render.animation + turn;
if (direction < 0) {
direction = 7;
}
if (direction > 7) {
direction = 0;
}
int x = 0;
int y = 0;
g_luaScript->Call("OffsetItemPos_GetOffsetForDoram", "ddd>dd", this->layerViews[layer], direction, pc->unknown_0260, &x, &y);
return std::make_pair(x, y);
}
return std::make_pair(0, 0);
}
// OFFSET: 0x006412B0
// FUNCTION: fn_04814
const std::uint32_t* SpriteLayerRenderer::GetPalette(int layer, CSprRes* sprite, CActRes*) {
switch (layer) {
case 0:
if (static_cast<int>(this->pc->render.unknown_0048) > 0) {
return static_cast<CPaletteRes*>(ResourceMgr::Instance().Load(this->pc->render.name))->palette;
}
break;
case 1:
if (this->pc->unknown_0444 > 0) {
return static_cast<CPaletteRes*>(ResourceMgr::Instance().Load(this->pc->unknown_0478))->palette;
}
break;
}
return sprite->palette;
}
// OFFSET: 0x00641420
// FUNCTION: fn_04815
std::pair<bool, SpriteLayerResources> SpriteLayerRenderer::FindLayer(int layer) {
const auto found = this->layers.find(layer);
if (found == this->layers.end()) {
return std::make_pair(false, SpriteLayerResources{});
}
return std::make_pair(true, found->second);
}
// OFFSET: 0x00641620
// OFFSET: 0x00641E40