Batch #5207 by youko: 0 byte-identical, 1 confirmed by peer review. - fn_04808 SpriteLayerRenderer::QueueQuad: logic confirmed by peer review Peer-reviewed-by: Yommy, alisonrag, OvoKore Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
109 lines
3.1 KiB
C++
109 lines
3.1 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
|
|
// FUNCTION: fn_04808
|
|
void SpriteLayerRenderer::QueueQuad(int layer, const SpriteQuad* quad, const std::uint32_t* palette, int blend) {
|
|
const int direction = this->pc->render.previousAnimation - this->pc->render.animation;
|
|
if (this->layerViews[layer] > 0) {
|
|
int priority = -1;
|
|
g_luaScript->Call("GetLayerPriority", "ddd>d", direction, layer, this->layerViews[layer], &priority);
|
|
if (priority == -1) {
|
|
return;
|
|
}
|
|
|
|
SpriteLayerQuad entry;
|
|
memcpy_s(&entry.quad, sizeof(entry.quad), quad, sizeof(SpriteQuad));
|
|
entry.palette = palette;
|
|
entry.blend = blend;
|
|
this->quads.insert(std::make_pair(priority, entry));
|
|
} else {
|
|
SpriteLayerQuad entry;
|
|
memcpy_s(&entry.quad, sizeof(entry.quad), quad, sizeof(SpriteQuad));
|
|
entry.palette = palette;
|
|
entry.blend = blend;
|
|
this->quads.emplace(static_cast<int>(this->quads.size()) + 1, entry);
|
|
}
|
|
}
|
|
|
|
// 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
|