summaryrefslogtreecommitdiff
path: root/include/pso/TPlyDispData.h
blob: daca8d97826fb66e50755e9aa7772fed3b9e0ca9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef TPLYDISPDATA_H
#define TPLYDISPDATA_H

#include <global_types.h>
#include <pso/macros.h>
#include <pso/protocol.h>
#include <pso/TMath.h>
#include <pso/TPlyGuildCardTag.h>

#define bswap16(var) bswap_16(as(u16 *, var))
#define bswap32(var) bswap_32(as(u32 *, var))

#define bswap16_ref(var) bswap16(&var)
#define bswap32_ref(var) bswap32(&var)

struct stats {
	void bswap();

	short atp;
	short mst;
	short evp;
	short hp;
	short dfp;
	short ata;
	short lck;
};

struct player_stats {
	void bswap() {
		bswap16(&stats.atp);
		bswap16(&stats.mst);
		bswap16(&stats.evp);
		bswap16(&stats.hp);
		bswap16(&stats.dfp);
		bswap16(&stats.ata);
		bswap16(&stats.lck);
		bswap16(&mbr_0xe);
		bswap32(&proportions);
		bswap32(&mbr_0x14);
		bswap32(&level);
		bswap32(&exp);
		bswap32(&meseta);
	};

	struct stats stats;
	short mbr_0xe;
	float proportions;
	float mbr_0x14;
	int level;
	int exp;
	int meseta;
};

struct disp_data_part2 {
	void bswap() {
		bswap_32(&name_colour);
		bswap_32(&name_colour_checksum);
		bswap_32(&v1_flags);
		for (int i = 0; i < 8; ++i) {
			bswap_16(&appearance_data[i]);
		}

		bswap32(&proportions.x);
		bswap32(&proportions.y);
	};
	bool is_valid() {
		// TODO: Actually decompile it.
		return false;
	};

	char name[16];
	u32 smth[2];
	u32 name_colour;
	u8 extra_model;
	u8 padding[15];
	u32 name_colour_checksum;
	u8 section_id;
	u8 char_class;
	u8 v2_flags;
	u8 version;
	u32 v1_flags;
	union {
		struct {
			u16 costume;
			u16 skin;
			u16 face;
			u16 head;
			u16 hair;
			u16 hair_r;
			u16 hair_g;
			u16 hair_b;
		} appearance;
		u16 appearance_data[8];
	};
	vec2f proportions;
};

class TPlyDispConfigSmth {
public:
	TPlyDispConfigSmth() { m_mbr_0x0 = 0; };
	void bswap() {
		bswap_32(&m_mbr_0x0);
		for (int i = 0; i < 4; ++i) {
			m_tags[i].bswap();
			m_tags1[i].bswap();
		}
	};
public:
	u32 m_mbr_0x0;
	gc_tag m_tags[4];
	gc_tag m_tags1[4];
};

class TPlyDispConfig {
public:
	void bswap() {
		m_smth.bswap();
		m_smth1.bswap();
	};
public:
	TPlyDispConfigSmth m_smth;
	TPlyDispConfigSmth m_smth1;
};

class TPlyDispData {
public:
	void bswap();
public:
	player_stats m_stats;
	disp_data_part2 m_disp_part2;
	TPlyDispConfig m_config;
	u8 m_tech_levels[20];
};

#endif