Batch #14947 by ragnarok-clanker: no function's compiled code changes; checked with 596 compiled unit(s), including every includer of Source/Client/Input/Language.h, Source/Client/Input/LanguageTC.h, Source/Client/Mode/CGameMode.h, Source/Client/Mode/CLoginMode.h, Source/Client/Mode/EquipWindowLook.h, Source/Client/Session.h, Source/Contents/Actors/GameActor.h, Source/Contents/Actors/GraffiSkill.h, Source/Contents/Actors/GrannyGameActor.h, Source/Contents/Actors/Pc.h, Source/Contents/Camera/Camera.h, Source/Contents/Effects/EffectEmitter.h, Source/Contents/Effects/EffectPrimitiveState.h, Source/Contents/FlyingShipRouteInfo.h, Source/Contents/Ground/GroundGeometry.h, Source/Contents/Ground/GroundSpatial.h, Source/Contents/Items/ItemInfo.h, Source/Render/SpriteQuad.h, Source/Resource/EZeffectResource.h, Source/Resource/Models/AnimatedModelResource.h, Source/Resource/Models/GrannyModelResource.h, Source/Resource/Models/ModelMesh.h, Source/Resource/World/WorldResource.h, Source/UI/Dialogs/UIChooseWnd.h, Source/UI/Items/UISpellListWnd.h, Source/UI/Lists/UIListBoxTemplate.h, Source/UI/MiniPartyGrid.h, Source/UI/Quest/UIOngoingQuestInfo.h, Source/UI/Text/UIAchWnd.h, Source/UI/Window/UIMonsterInfoWnd.h, Source/UI/Window/UINavigationWnd.h, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UITalkboxTrapInputWnd.h, Source/UI/Window/UIWindowMgr.h.
397 lines
15 KiB
C++
397 lines
15 KiB
C++
#ifndef RAGNAROK_SOURCE_CONTENTS_ACTORS_PC_H
|
|
#define RAGNAROK_SOURCE_CONTENTS_ACTORS_PC_H
|
|
|
|
#include "Contents/Actors/GameActor.h"
|
|
#include "Resource/Models/GrannyModelResource.h"
|
|
#include "Utility/Math/AffineMatrix.h"
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <map>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
class C3dGrannyModelRes;
|
|
class CActRes;
|
|
class CRes;
|
|
class CTexture;
|
|
struct ActionFrame;
|
|
struct RenderCommand;
|
|
struct RenderVertex;
|
|
struct granny_control;
|
|
struct granny_model_instance;
|
|
struct CRagEffect;
|
|
class CMsgEffect;
|
|
class UIWindow;
|
|
|
|
int GetSlotLayer(int slot);
|
|
bool IsReadyOrAttackAction(int action);
|
|
std::string GetBodyImfName(int job, int sex, int head, int costumeJob);
|
|
|
|
class CPc : public CGameActor {
|
|
public:
|
|
CPc();
|
|
~CPc() override;
|
|
bool OnProcess() override;
|
|
void SendMsg(
|
|
CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m
|
|
) override;
|
|
void Render(int argument) override;
|
|
|
|
bool ProcessState() override;
|
|
void SetState(int state, int resetPosition) override;
|
|
void SetSprRobe(int first, int second) override;
|
|
void SetSprActFull(
|
|
int first, int second, int third, int fourth, int fifth, int sixth, int seventh, int eighth, int ninth, int tenth, int eleventh
|
|
) override;
|
|
void SetSprAct2(
|
|
int first, int second, int third, int fourth, int fifth, int sixth, int seventh, int eighth, int ninth, int tenth, int eleventh
|
|
) override;
|
|
void SetSprJob(int job) override;
|
|
void SetSprHead(int value) override;
|
|
void SetSprWeapon(int first, int second) override;
|
|
void SetSprWeapon2(int first, int second) override;
|
|
void SetSprAccessory(int value) override;
|
|
void SetSprAccessory2(int value) override;
|
|
void SetSprAccessory3(int value) override;
|
|
void SetSprShield(int value) override;
|
|
void SetSprShoe(int value) override;
|
|
void SetImfFileName() override;
|
|
void SetHeadPaletteName() override;
|
|
void SetBodyPaletteName() override;
|
|
void SetBodyPalette(int value) override;
|
|
void SetHeadPalette(int value) override;
|
|
std::int64_t GetWeapon() override;
|
|
void SetModifyFactorOfmotionSpeed(int value) override;
|
|
void SetHonor(int value) override;
|
|
void SetPropensityInfo(int first, int second) override;
|
|
int GetPkState() override;
|
|
void SetBodyCostume(int first, int second) override;
|
|
int GetBodyCostume() override;
|
|
void SetRiding(unsigned char value) override;
|
|
int GetMonsterTransformJob() override;
|
|
int GetMadogearType() override;
|
|
void SetMadogearType(int value) override;
|
|
bool IsArrowEffectSuppressed() override;
|
|
void SetArrowEffectSuppressed(bool value) override;
|
|
void RefreshAccessory3() override;
|
|
void SetSex(int value) override;
|
|
|
|
void AddMsgEffect(CGameObject* effect);
|
|
void RenderBodyOutline(int layer, const float* position, float x, float y, float distanceScale, float scale, float depth, std::uint32_t color);
|
|
bool IsDrawOnTop();
|
|
const ActionFrame& SelectStanceFrame(int layer, CActRes* actRes, int* animation, int* frame, bool* replaced);
|
|
void ApplyLayerEffects(
|
|
SpriteQuad* quad, const SpriteFrameCell* cell, int layer, const int* box, float shiftX, float distance, float bottomRhw,
|
|
float topRhw, float screenX, float screenY, const std::uint32_t* palette, const SpriteRleImage* image, int* blend, int offsetX,
|
|
int offsetY
|
|
);
|
|
void LoadEquipAction(int slot, const char* name);
|
|
void LoadEquipSprite(int slot, const char* name);
|
|
void LoadEquipActions(const std::vector<std::string>& names);
|
|
void LoadEquipSprites(const std::vector<std::string>& names);
|
|
int MapMotion(int motion);
|
|
std::vector<std::string> GetEquipActionNames() const;
|
|
std::vector<std::string> GetEquipSpriteNames() const;
|
|
CRes* GetEquipAction(unsigned slot) const;
|
|
CRes* GetEquipSprite(int slot) const;
|
|
int JobActionBase(int state);
|
|
bool IsCostumeOutfit() const;
|
|
int GetDualWieldWeaponType(int first, int second);
|
|
bool HasAppearanceOverride();
|
|
void DrawBody(int argument, int layer, const float* position, float x, float y, float distanceScale, float scale, float depth);
|
|
void RenderOverlaySprite(const float* matrix, int);
|
|
void UpdateGaugeWindow();
|
|
void DrawLayers(const float* matrix, int unknown0030, char unknown0034);
|
|
|
|
float* GetExtent(float* extent) const override;
|
|
|
|
/* 0410 */ unsigned char unknown_0410[4];
|
|
/* 0414 */ CMsgEffect* msgEffect;
|
|
/* 0418 */ std::string imfName;
|
|
/* 0430 */ int honor;
|
|
/* 0434 */ int virtue;
|
|
/* 0438 */ int appearanceFlags;
|
|
/* 043C */ int headDir;
|
|
/* 0440 */ int head;
|
|
/* 0444 */ int headPalette;
|
|
/* 0448 */ int weapon;
|
|
/* 044C */ int secondaryWeapon;
|
|
/* 0450 */ int accessory;
|
|
/* 0454 */ int accessory2;
|
|
/* 0458 */ int accessory3;
|
|
/* 045C */ int shield;
|
|
/* 0460 */ int shoe[1];
|
|
/* 0464 */ int footprintCounter;
|
|
/* 0468 */ vector3d footprintPosition;
|
|
/* 0474 */ int renderWithoutLayer;
|
|
/* 0478 */ std::string headPaletteName;
|
|
/* 0490 */ UIWindow* gaugeWindow;
|
|
/* 0494 */ int pkRank;
|
|
/* 0498 */ int pkTotal;
|
|
/* 049C */ int robe;
|
|
/* 04A0 */ int blend;
|
|
/* 04A4 */ int layerCellX;
|
|
/* 04A8 */ int layerCellY;
|
|
/* 04AC */ std::map<int, std::pair<int, int>> unknown_04AC;
|
|
/* 04B4 */ std::vector<CRes*> equipSprites;
|
|
/* 04C0 */ std::vector<CRes*> equipActions;
|
|
/* 04CC */ int pkState;
|
|
/* 04D0 */ int bodyStyle;
|
|
/* 04D4 */ int appearanceJob;
|
|
/* 04D8 */ unsigned char alternateDoramAppearance[1];
|
|
/* 04D9 */ bool isHelmRobe;
|
|
/* 04DA */ unsigned char unknown_04DA[2];
|
|
/* 04DC */ int madogearType;
|
|
/* 04E0 */ bool arrowEffectSuppressed;
|
|
/* 04E1 */ unsigned char unknown_04E1[0x03];
|
|
/* 04E4 */ float extentLeft;
|
|
/* 04E8 */ float extentTop;
|
|
/* 04EC */ float extentRight;
|
|
/* 04F0 */ float extentBottom;
|
|
/* 04F4 */ int outlineColor;
|
|
/* 04F8 */ float destCellX;
|
|
/* 04FC */ int destCellZ;
|
|
/* 0500 */ int attackReqTime;
|
|
/* 0504 */ std::uint32_t preMoveStartTick;
|
|
/* 0508 */ int proceedType;
|
|
union { /* 050C */ int preMoveOn; CPc* blurSource; };
|
|
};
|
|
|
|
class CBlurPC : public CPc {
|
|
public:
|
|
CBlurPC(CPc* source);
|
|
~CBlurPC() override;
|
|
bool OnProcess() override;
|
|
void SendMsg(
|
|
CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m
|
|
) override;
|
|
void Render(int argument) override;
|
|
};
|
|
|
|
class CHalluPC : public CPc {
|
|
public:
|
|
CHalluPC(CPc* source);
|
|
~CHalluPC() override;
|
|
bool OnProcess() override;
|
|
void SendMsg(
|
|
CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m
|
|
) override;
|
|
void Render(int argument) override;
|
|
|
|
/* 0510 */ CPc* sourcePc;
|
|
/* 0514 */ int unknown_0514;
|
|
};
|
|
|
|
class CHalluPC2 : public CPc {
|
|
public:
|
|
CHalluPC2(CPc* source);
|
|
~CHalluPC2() override;
|
|
bool OnProcess() override;
|
|
void SendMsg(
|
|
CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m
|
|
) override;
|
|
void Render(int argument) override;
|
|
|
|
/* 0510 */ CPc* sourcePc;
|
|
/* 0514 */ int unknown_0514;
|
|
};
|
|
|
|
class CPlayer : public CPc {
|
|
public:
|
|
CPlayer();
|
|
bool OnProcess() override;
|
|
void SendMsg(
|
|
CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m
|
|
) override;
|
|
static int AngleToDirection(float angle);
|
|
|
|
bool IsSpecialState(int state) const;
|
|
void ReapplySkillEffects();
|
|
void RegisterPos() override;
|
|
void UnRegisterPos() override;
|
|
void RefreshEffect164();
|
|
void UpdateFootprints(int kind);
|
|
void UpdateMsgEffect(bool show);
|
|
void ApplyFollowOffset(CGameActor* target, float x, float z, int* row, int* column);
|
|
float AdjustFollowDistance(CGameActor* target, float distance);
|
|
void UpdatePendingAction();
|
|
void Initialize();
|
|
void SetState(int state, int resetPosition) override;
|
|
|
|
/* 0510 */ int attackMode;
|
|
/* 0514 */ int isAttackRequest;
|
|
/* 0518 */ int isPreengageStateOfMove;
|
|
/* 051C */ int proceedTargetGid;
|
|
/* 0520 */ int totalAttackReqCnt;
|
|
/* 0524 */ std::uint32_t tickOfMoveForAttack;
|
|
/* 0528 */ std::uint32_t standTick;
|
|
/* 052C */ int skillId;
|
|
/* 0530 */ int skillUseLevel;
|
|
/* 0534 */ int gSkillDx;
|
|
/* 0538 */ int gSkillDy;
|
|
/* 053C */ int preengageXOfMove;
|
|
/* 0540 */ int preengageYOfMove;
|
|
/* 0544 */ CRagEffect* skillEffect;
|
|
};
|
|
|
|
#if defined(_WIN32) && !defined(_WIN64)
|
|
static_assert(sizeof(CPlayer) == 0x548);
|
|
static_assert(offsetof(CPlayer, proceedTargetGid) == 0x51C);
|
|
static_assert(offsetof(CPlayer, skillEffect) == 0x544);
|
|
#endif
|
|
|
|
extern bool g_refreshWindow289;
|
|
|
|
struct GrannyPcLight {
|
|
/* 0000 */ vector3d direction;
|
|
/* 000C */ int intensity;
|
|
/* 0010 */ int red;
|
|
/* 0014 */ int green;
|
|
/* 0018 */ int blue;
|
|
};
|
|
|
|
class CGrannyPc : public CGameActor {
|
|
public:
|
|
bool OnProcess() override;
|
|
void SendMsg(
|
|
CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m
|
|
) override;
|
|
void Render(int argument) override;
|
|
void SetAction(unsigned animation, int motion, int repeat) override;
|
|
void ProcessMotion() override;
|
|
bool ProcessState() override;
|
|
void SetState(int first, int second) override;
|
|
void SetSprActFull(int first, int second, int third, int fourth, int fifth, int sixth, int seventh, int eighth, int ninth, int tenth, int eleventh) override;
|
|
void SetSprAct2(int first, int second, int third, int fourth, int fifth, int sixth, int seventh, int eighth, int ninth, int tenth, int eleventh) override;
|
|
void SetSprJob(int value) override;
|
|
void SetSprHead(int value) override;
|
|
void SetSprWeapon(int first, int second) override;
|
|
void SetSprWeapon2(int first, int second) override;
|
|
void SetSprAccessory(int value) override;
|
|
void SetSprAccessory2(int value) override;
|
|
void SetSprAccessory3(int value) override;
|
|
void SetSprShield(int value) override;
|
|
void SetImfFileName() override;
|
|
void SetHeadPaletteName() override;
|
|
std::int64_t GetWeapon() override;
|
|
void SetModifyFactorOfmotionSpeed(int value) override;
|
|
void SetHonor(int value) override;
|
|
void SetPropensityInfo(int first, int second) override;
|
|
|
|
void PlayMotion(int repeat);
|
|
void ReleaseMeshes();
|
|
void UpdateGaugeWindow();
|
|
void UpdateAnimation(C3dGrannyModelRes* model);
|
|
void RenderModel(const matrix& view, const GrannyPcLight& light, C3dGrannyModelRes* model, int layer, C3dGrannyModelRes* animation);
|
|
void RenderCached(const matrix& view, int layer, C3dGrannyModelRes* model);
|
|
void RenderShadow(int argument, vector3d lightDirection, bool cached);
|
|
|
|
/* 0410 */ std::string imfName;
|
|
/* 0428 */ int honor;
|
|
/* 042C */ int virtue;
|
|
/* 0430 */ int headDir;
|
|
/* 0434 */ int head;
|
|
/* 0438 */ int headPalette;
|
|
/* 043C */ unsigned char unknown_043C[4];
|
|
/* 0440 */ int weapon;
|
|
/* 0444 */ int secondaryWeapon;
|
|
/* 0448 */ int accessory;
|
|
/* 044C */ int accessory2;
|
|
/* 0450 */ int accessory3;
|
|
/* 0454 */ int shield;
|
|
/* 0458 */ unsigned char unknown_0458[8];
|
|
/* 0460 */ std::string headPaletteName;
|
|
/* 0478 */ UIWindow* gaugeWindow;
|
|
/* 047C */ int pkRank;
|
|
/* 0480 */ int pkTotal;
|
|
/* 0484 */ C3dGrannyModelRes* model;
|
|
/* 0488 */ C3dGrannyModelRes* layerModels[10];
|
|
/* 04B0 */ granny_model_instance* instance;
|
|
/* 04B4 */ RenderCommand* commands[30];
|
|
/* 052C */ RenderCommand* layerCommands[10][30];
|
|
/* 09DC */ RenderVertex* vertices[30];
|
|
/* 0A54 */ RenderVertex* layerVertices[10][30];
|
|
/* 0F04 */ granny_system_clock clock;
|
|
/* 0F14 */ granny_system_clock lastClock;
|
|
/* 0F24 */ float animationTime;
|
|
/* 0F28 */ int directionalAnimation;
|
|
/* 0F2C */ int baseAnimation;
|
|
/* 0F30 */ float angle;
|
|
/* 0F34 */ unsigned char alpha;
|
|
/* 0F35 */ unsigned char unknown_0F35[0x03];
|
|
/* 0F38 */ unsigned brightness;
|
|
/* 0F3C */ int motion;
|
|
/* 0F40 */ unsigned char currentFrame[4];
|
|
/* 0F44 */ char modelName[0x104];
|
|
/* 1048 */ unsigned char unknown_1048[8];
|
|
/* 1050 */ granny_control* controls[20];
|
|
/* 10A0 */ unsigned char snapFacing;
|
|
/* 10A1 */ unsigned char unknown_10A1[3];
|
|
/* 10A4 */ int renderFrame;
|
|
/* 10A8 */ CTexture* meshTextures[10][30];
|
|
/* 1558 */ std::uint16_t* meshIndices[10][30];
|
|
/* 1A08 */ int meshTriangleCounts[10][30];
|
|
/* 1EB8 */ matrix meshTransforms[30];
|
|
/* 2458 */ unsigned char unknown_2458[0xF8];
|
|
/* 2550 */ granny_world_pose* worldPose;
|
|
/* 2554 */ CTexture* shadowTexture;
|
|
/* 2558 */ std::vector<vector3d> attachmentPositions;
|
|
/* 2564 */ int attachLayer;
|
|
/* 2568 */ int unknown_2568;
|
|
/* 256C */ matrix attachTransform;
|
|
};
|
|
|
|
#if defined(_WIN32) && !defined(_WIN64)
|
|
static_assert(offsetof(CPc, honor) == 0x430);
|
|
static_assert(offsetof(CPc, headPalette) == 0x444);
|
|
static_assert(offsetof(CPc, accessory3) == 0x458);
|
|
static_assert(offsetof(CGrannyPc, honor) == 0x428);
|
|
static_assert(offsetof(CGrannyPc, weapon) == 0x440);
|
|
static_assert(offsetof(CGrannyPc, headPaletteName) == 0x460);
|
|
static_assert(offsetof(CGrannyPc, model) == 0x484);
|
|
static_assert(offsetof(CGrannyPc, instance) == 0x4B0);
|
|
static_assert(offsetof(CGrannyPc, clock) == 0xF04);
|
|
static_assert(offsetof(CGrannyPc, lastClock) == 0xF14);
|
|
static_assert(offsetof(CGrannyPc, animationTime) == 0xF24);
|
|
static_assert(offsetof(CGrannyPc, motion) == 0xF3C);
|
|
static_assert(offsetof(CGrannyPc, controls) == 0x1050);
|
|
static_assert(offsetof(CGrannyPc, modelName) == 0xF44);
|
|
static_assert(offsetof(CGrannyPc, layerModels) == 0x488);
|
|
static_assert(offsetof(CGrannyPc, commands) == 0x4B4);
|
|
static_assert(offsetof(CGrannyPc, layerCommands) == 0x52C);
|
|
static_assert(offsetof(CGrannyPc, vertices) == 0x9DC);
|
|
static_assert(offsetof(CGrannyPc, layerVertices) == 0xA54);
|
|
static_assert(offsetof(CGrannyPc, worldPose) == 0x2550);
|
|
static_assert(offsetof(CGrannyPc, angle) == 0xF30);
|
|
static_assert(offsetof(CGrannyPc, brightness) == 0xF38);
|
|
static_assert(offsetof(CGrannyPc, meshTextures) == 0x10A8);
|
|
static_assert(offsetof(CGrannyPc, meshIndices) == 0x1558);
|
|
static_assert(offsetof(CGrannyPc, meshTriangleCounts) == 0x1A08);
|
|
static_assert(offsetof(CGrannyPc, meshTransforms) == 0x1EB8);
|
|
static_assert(offsetof(CGrannyPc, attachLayer) == 0x2564);
|
|
static_assert(offsetof(CGrannyPc, attachTransform) == 0x256C);
|
|
static_assert(sizeof(CBlurPC) == 0x510);
|
|
static_assert(sizeof(CHalluPC) == 0x518);
|
|
static_assert(sizeof(CHalluPC2) == 0x518);
|
|
static_assert(offsetof(CPc, msgEffect) == 0x414);
|
|
static_assert(offsetof(CPc, imfName) == 0x418);
|
|
static_assert(offsetof(CPc, extentLeft) == 0x4E4);
|
|
static_assert(offsetof(CPc, extentBottom) == 0x4F0);
|
|
static_assert(offsetof(CPc, destCellX) == 0x4F8);
|
|
static_assert(offsetof(CPc, destCellZ) == 0x4FC);
|
|
static_assert(offsetof(CPc, preMoveOn) == 0x50C);
|
|
static_assert(offsetof(CHalluPC, sourcePc) == 0x510);
|
|
static_assert(offsetof(CHalluPC2, sourcePc) == 0x510);
|
|
static_assert(offsetof(CPc, weapon) == 0x448);
|
|
static_assert(offsetof(CPc, secondaryWeapon) == 0x44C);
|
|
static_assert(offsetof(CPc, pkState) == 0x4CC);
|
|
static_assert(offsetof(CPc, madogearType) == 0x4DC);
|
|
static_assert(offsetof(CPc, arrowEffectSuppressed) == 0x4E0);
|
|
#endif
|
|
|
|
extern unsigned char g_statusRefreshSuppressed;
|
|
extern bool g_unknown173AD3F;
|
|
|
|
#endif
|