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
90 lines
2.7 KiB
C++
90 lines
2.7 KiB
C++
#ifndef RAGNAROK_SOURCE_CONTENTS_SPRITELAYERDRAWING_H
|
|
#define RAGNAROK_SOURCE_CONTENTS_SPRITELAYERDRAWING_H
|
|
|
|
#include "Contents/Actors/RenderObject.h"
|
|
#include "Render/SpriteQuad.h"
|
|
#include "Utility/Math/Vector3d.h"
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <map>
|
|
#include <string>
|
|
#include <utility>
|
|
|
|
class CActRes;
|
|
class CImfRes;
|
|
class CPc;
|
|
class CSprRes;
|
|
struct ActionFrame;
|
|
struct SpriteFrameCell;
|
|
struct SpriteRleImage;
|
|
|
|
struct SpriteLayerResources {
|
|
/* 0000 */ CSprRes* sprite;
|
|
/* 0004 */ CActRes* action;
|
|
};
|
|
|
|
struct SpriteLayerCell {
|
|
/* 0000 */ const SpriteRleImage* image;
|
|
/* 0004 */ const SpriteFrameCell* cell;
|
|
/* 0008 */ int offsetY;
|
|
/* 000C */ int offsetX;
|
|
};
|
|
|
|
struct SpriteLayerQuad {
|
|
/* 0000 */ SpriteQuad quad;
|
|
/* 0030 */ const std::uint32_t* palette;
|
|
/* 0034 */ int blend;
|
|
};
|
|
|
|
class SpriteLayerRenderer {
|
|
public:
|
|
void QueueQuad(int layer, const SpriteQuad* quad, const std::uint32_t* palette, int blend);
|
|
void DrawLayerOutlines(std::uint32_t color);
|
|
int DrawBodyOutline(int layer);
|
|
SpriteLayerCell ResolveCell(
|
|
int layer, const SpriteFrameCell* cell, int cellIndex, CSprRes* sprite, CActRes* action, const ActionFrame* frame,
|
|
const SpriteRleImage* image, int animation, int frameIndex, bool replaced
|
|
);
|
|
__declspec(noinline) std::pair<int, int> GetItemOffset(int layer);
|
|
__declspec(noinline) const std::uint32_t* GetPalette(int layer, CSprRes* sprite, CActRes* action);
|
|
std::pair<bool, SpriteLayerResources> FindLayer(int layer);
|
|
std::pair<bool, std::string> GetLayerSound(int layer, CActRes* action, int sound);
|
|
void LoadLayers();
|
|
|
|
/* 0000 */ float matrix[12];
|
|
/* 0030 */ float unknown_0030;
|
|
/* 0034 */ bool unknown_0034;
|
|
/* 0038 */ CPc* pc;
|
|
/* 003C */ vector3d position;
|
|
/* 0048 */ float x;
|
|
/* 004C */ float y;
|
|
/* 0050 */ float rhw;
|
|
/* 0054 */ float distanceScale;
|
|
/* 0058 */ float scale;
|
|
/* 005C */ CImfRes* imf;
|
|
/* 0060 */ int unknown_0060;
|
|
/* 0064 */ int swingX;
|
|
/* 0068 */ int swingY;
|
|
/* 006C */ bool unknown_006C;
|
|
/* 006D */ bool unknown_006D;
|
|
/* 0070 */ std::map<int, SpriteLayerResources> layers;
|
|
/* 0078 */ std::map<int, int> layerViews;
|
|
/* 0080 */ RenderBounds bounds;
|
|
/* 0094 */ bool unknown_0094;
|
|
/* 0098 */ std::map<int, SpriteLayerQuad> quads;
|
|
/* 00A0 */ float depthScale;
|
|
/* 00A4 */ float depthBias;
|
|
};
|
|
|
|
#if defined(_WIN32) && !defined(_WIN64)
|
|
static_assert(sizeof(SpriteLayerQuad) == 0x38);
|
|
static_assert(offsetof(SpriteLayerRenderer, pc) == 0x38);
|
|
static_assert(offsetof(SpriteLayerRenderer, layers) == 0x70);
|
|
static_assert(offsetof(SpriteLayerRenderer, layerViews) == 0x78);
|
|
static_assert(offsetof(SpriteLayerRenderer, bounds) == 0x80);
|
|
static_assert(offsetof(SpriteLayerRenderer, quads) == 0x98);
|
|
static_assert(sizeof(SpriteLayerRenderer) == 0xA8);
|
|
#endif
|
|
|
|
#endif
|