Skip to content

Commit 6aa5da9

Browse files
committed
extra functions
1 parent 4540517 commit 6aa5da9

11 files changed

Lines changed: 238 additions & 41 deletions

GolDP/include/gdbcommonvertexarray0x1c.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class GdbCommonVertexArray0x1c : public GdbVertexArray0xc {
1919

2020
protected:
2121
GolVec2* m_unk0x0c; // 0x0c
22-
undefined4* m_unk0x10; // 0x10
22+
LegoU32* m_unk0x10; // 0x10
2323
undefined4 m_unk0x14; // 0x14
2424
undefined4* m_unk0x18; // 0x18
2525
};

GolDP/include/gdbmodel0x48.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ class GdbModel0x48 : public IGdbModel0x40 {
2121
~GdbModel0x48() override; // vtable+0x20
2222

2323
void VTable0x0c(GolFileParser& p_parser) override; // vtable+0x0c
24-
void VTable0x10(undefined4*) override; // vtable+0x10
25-
void VTable0x14(undefined4*) override; // vtable+0x14
24+
void VTable0x10(GolFileParser& p_parser) override; // vtable+0x10
25+
void VTable0x14(GolFileParser& p_parser) override; // vtable+0x14
2626
void VTable0x18(undefined4, undefined2, undefined4, undefined4, undefined4, undefined4) override; // vtable+0x18
2727
void VTable0x1c(undefined4 p_arg1, const LegoChar* p_name, LegoBool32 p_binary) override; // vtable+0x1c
2828
void VTable0x24() override; // vtable+0x24

GolDP/include/igdbmodel0x40.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ class IGdbModel0x40 {
2121
virtual void VTable0x04(undefined4*); // vtable+0x04
2222
virtual void VTable0x08(undefined4*); // vtable+0x08
2323
virtual void VTable0x0c(GolFileParser& p_parser) = 0; // vtable+0x0c
24-
virtual void VTable0x10(undefined4*) = 0; // vtable+0x10
25-
virtual void VTable0x14(undefined4*); // vtable+0x14
24+
virtual void VTable0x10(GolFileParser& p_parser) = 0; // vtable+0x10
25+
virtual void VTable0x14(GolFileParser& p_parser); // vtable+0x14
2626
virtual void VTable0x18(undefined4, undefined2, undefined4, undefined4, undefined4, undefined4) = 0; // vtable+0x18
2727
virtual void VTable0x1c(undefined4 p_arg1, const LegoChar* p_name, LegoBool32 p_binary); // vtable+0x1c
2828
virtual ~IGdbModel0x40(); // vtable+0x20

GolDP/src/gdbmodel0x48.cpp

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,30 @@ void GdbModel0x48::VTable0x0c(GolFileParser& p_parser)
9898
m_unk0x40->VTable0x08(p_parser);
9999
}
100100

101-
// STUB: GOLDP 0x10006b30
102-
void GdbModel0x48::VTable0x10(undefined4*)
101+
// FUNCTION: GOLDP 0x10006b30
102+
void GdbModel0x48::VTable0x10(GolFileParser& p_parser)
103103
{
104-
// TODO
105-
STUB(0x10006b30);
104+
if (m_unk0x40 != NULL) {
105+
p_parser.HandleUnexpectedToken(GolFileParser::e_unsuportedKeyword);
106+
}
107+
m_unk0x40 = new GdbVertexArrayTypeOne0x1c;
108+
m_unk0x10 = m_unk0x40;
109+
if (m_unk0x10 == NULL) {
110+
GOL_FATALERROR(c_golErrorOutOfMemory);
111+
}
112+
m_unk0x40->VTable0x08(p_parser);
106113
}
107114

108-
// STUB: GOLDP 0x10006bc0
109-
void GdbModel0x48::VTable0x14(undefined4*)
115+
// FUNCTION: GOLDP 0x10006bc0
116+
void GdbModel0x48::VTable0x14(GolFileParser& p_parser)
110117
{
111-
// TODO
112-
STUB(0x10006bc0);
118+
if (m_unk0x40 != NULL) {
119+
p_parser.HandleUnexpectedToken(GolFileParser::e_unsuportedKeyword);
120+
}
121+
m_unk0x40 = new GdbVertexArrayTypeTwo0x20;
122+
m_unk0x10 = m_unk0x40;
123+
if (m_unk0x10 == NULL) {
124+
GOL_FATALERROR(c_golErrorOutOfMemory);
125+
}
126+
m_unk0x40->VTable0x08(p_parser);
113127
}

GolDP/src/gdbvertexarraymistery0x1c.cpp

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "gdbvertexarraymistery0x1c.h"
22

33
#include "color.h"
4+
#include "golerror.h"
5+
#include "golfileparser.h"
46
#include "golmath.h"
57

68
// FUNCTION: GOLDP 0x100156d0
@@ -9,18 +11,70 @@ GdbVertexArrayMistery0x1c::GdbVertexArrayMistery0x1c()
911
m_unk0x06 = 1;
1012
}
1113

12-
// STUB: GOLDP 0x10006150 FOLDED
14+
// FUNCTION: GOLDP 0x10006150 FOLDED
1315
void GdbVertexArrayMistery0x1c::VTable0x04(LegoU16 p_count)
1416
{
15-
// TODO
16-
STUB(0x10006150);
17+
LegoU32 i;
18+
if (m_unk0x04 != 0) {
19+
VTable0x0c();
20+
}
21+
m_unk0x04 = p_count;
22+
m_unk0x08 = new GolVec3[m_unk0x04];
23+
if (m_unk0x08 == NULL) {
24+
GOL_FATALERROR(c_golErrorOutOfMemory);
25+
}
26+
m_unk0x0c = new GolVec2[m_unk0x04];
27+
if (m_unk0x0c == NULL) {
28+
GOL_FATALERROR(c_golErrorOutOfMemory);
29+
}
30+
m_unk0x10 = new LegoU32[m_unk0x04];
31+
if (m_unk0x10 == NULL) {
32+
GOL_FATALERROR(c_golErrorOutOfMemory);
33+
}
34+
for (i = 0; i < m_unk0x04; i++) {
35+
m_unk0x0c[i].m_x = 0.0f;
36+
m_unk0x0c[i].m_y = 0.0f;
37+
m_unk0x10[i] = ARGBU32(0xff, 0xff, 0xff, 0xff);
38+
}
1739
}
1840

19-
// STUB: GOLDP 0x100156f0
41+
// FUNCTION: GOLDP 0x100156f0
2042
void GdbVertexArrayMistery0x1c::VTable0x08(GolFileParser& p_parser)
2143
{
22-
// TODO
23-
STUB(0x100156f0);
44+
LegoU32 i;
45+
if (m_unk0x04 != 0) {
46+
VTable0x0c();
47+
}
48+
p_parser.ReadLeftBracket();
49+
m_unk0x04 = p_parser.ReadInteger();
50+
if (m_unk0x04 == 0) {
51+
p_parser.HandleUnexpectedToken(GolFileParser::e_int);
52+
}
53+
p_parser.ReadRightBracket();
54+
p_parser.ReadLeftCurly();
55+
m_unk0x08 = new GolVec3[m_unk0x04];
56+
if (m_unk0x08 == NULL) {
57+
GOL_FATALERROR(c_golErrorOutOfMemory);
58+
}
59+
m_unk0x0c = new GolVec2[m_unk0x04];
60+
if (m_unk0x0c == NULL) {
61+
GOL_FATALERROR(c_golErrorOutOfMemory);
62+
}
63+
m_unk0x10 = new LegoU32[m_unk0x04];
64+
if (m_unk0x10 == NULL) {
65+
GOL_FATALERROR(c_golErrorOutOfMemory);
66+
}
67+
::memset(m_unk0x08, 0, sizeof(GolVec3) * m_unk0x04);
68+
::memset(m_unk0x0c, 0, sizeof(GolVec2) * m_unk0x04);
69+
for (i = 0; i < m_unk0x04; i++) {
70+
m_unk0x08[i].m_x = p_parser.ReadFloat();
71+
m_unk0x08[i].m_y = p_parser.ReadFloat();
72+
m_unk0x08[i].m_z = p_parser.ReadFloat();
73+
m_unk0x0c[i].m_x = p_parser.ReadFloat();
74+
m_unk0x0c[i].m_y = p_parser.ReadFloat();
75+
m_unk0x10[i] = ARGBU32(0xff, 0xff, 0xff, 0xff);
76+
}
77+
p_parser.ReadRightCurly();
2478
}
2579

2680
// FUNCTION: GOLDP 0x10006210 FOLDED

GolDP/src/gdbvertexarraytypeone0x1c.cpp

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "gdbvertexarraytypeone0x1c.h"
22

33
#include "color.h"
4+
#include "golerror.h"
5+
#include "golfileparser.h"
46
#include "golmath.h"
57

68
// FUNCTION: GOLDP 0x10005f90
@@ -9,18 +11,72 @@ GdbVertexArrayTypeOne0x1c::GdbVertexArrayTypeOne0x1c()
911
m_unk0x06 = 1;
1012
}
1113

12-
// STUB: GOLDP 0x10005fc0
14+
// FUNCTION: GOLDP 0x10005fc0
1315
void GdbVertexArrayTypeOne0x1c::VTable0x08(GolFileParser& p_parser)
1416
{
15-
// TODO
16-
STUB(0x10005fc0);
17+
LegoU32 i;
18+
if (m_unk0x04 != 0) {
19+
VTable0x0c();
20+
}
21+
p_parser.ReadLeftBracket();
22+
m_unk0x04 = p_parser.ReadInteger();
23+
if (m_unk0x04 == 0) {
24+
p_parser.HandleUnexpectedToken(GolFileParser::e_int);
25+
}
26+
p_parser.ReadRightBracket();
27+
p_parser.ReadLeftCurly();
28+
m_unk0x08 = new GolVec3[m_unk0x04];
29+
if (m_unk0x08 == NULL) {
30+
GOL_FATALERROR(c_golErrorOutOfMemory);
31+
}
32+
m_unk0x0c = new GolVec2[m_unk0x04];
33+
if (m_unk0x0c == NULL) {
34+
GOL_FATALERROR(c_golErrorOutOfMemory);
35+
}
36+
m_unk0x10 = new LegoU32[m_unk0x04];
37+
if (m_unk0x10 == NULL) {
38+
GOL_FATALERROR(c_golErrorOutOfMemory);
39+
}
40+
for (i = 0; i < m_unk0x04; i++) {
41+
m_unk0x08[i].m_x = p_parser.ReadFloat();
42+
m_unk0x08[i].m_y = p_parser.ReadFloat();
43+
m_unk0x08[i].m_z = p_parser.ReadFloat();
44+
m_unk0x0c[i].m_x = p_parser.ReadFloat();
45+
m_unk0x0c[i].m_y = p_parser.ReadFloat();
46+
LegoU32 red = p_parser.ReadInteger() & 0xff;
47+
LegoU32 grn = p_parser.ReadInteger() & 0xff;
48+
LegoU32 blu = p_parser.ReadInteger() & 0xff;
49+
LegoU32 alp = p_parser.ReadInteger() & 0xff;
50+
m_unk0x10[i] = (alp << 24) | (red << 16) | (grn << 8) | (blu << 0);
51+
}
52+
p_parser.ReadRightCurly();
1753
}
1854

19-
// STUB: GOLDP 0x10006150 FOLDED
55+
// FUNCTION: GOLDP 0x10006150 FOLDED
2056
void GdbVertexArrayTypeOne0x1c::VTable0x04(LegoU16 p_count)
2157
{
22-
// TODO
23-
STUB(0x10006150);
58+
LegoU32 i;
59+
if (m_unk0x04 != 0) {
60+
VTable0x0c();
61+
}
62+
m_unk0x04 = p_count;
63+
m_unk0x08 = new GolVec3[m_unk0x04];
64+
if (m_unk0x08 == NULL) {
65+
GOL_FATALERROR(c_golErrorOutOfMemory);
66+
}
67+
m_unk0x0c = new GolVec2[m_unk0x04];
68+
if (m_unk0x0c == NULL) {
69+
GOL_FATALERROR(c_golErrorOutOfMemory);
70+
}
71+
m_unk0x10 = new LegoU32[m_unk0x04];
72+
if (m_unk0x10 == NULL) {
73+
GOL_FATALERROR(c_golErrorOutOfMemory);
74+
}
75+
for (i = 0; i < m_unk0x04; i++) {
76+
m_unk0x0c[i].m_x = 0.0f;
77+
m_unk0x0c[i].m_y = 0.0f;
78+
m_unk0x10[i] = ARGBU32(0xff, 0xff, 0xff, 0xff);
79+
}
2480
}
2581

2682
// FUNCTION: GOLDP 0x10006210 FOLDED
Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
11
#include "gdbvertexarraytypethree0x20.h"
22

3+
#include "golmath.h"
4+
35
// FUNCTION: GOLDP 0x10016ad0
46
GdbVertexArrayTypeThree0x20::GdbVertexArrayTypeThree0x20()
57
{
68
m_unk0x06 = 1;
79
}
810

9-
// STUB: GOLDP 0x10016b10
11+
// FUNCTION: GOLDP 0x10016b10
1012
void GdbVertexArrayTypeThree0x20::VTable0x08(GolFileParser& p_parser)
1113
{
12-
// TODO
13-
STUB(0x10016b10);
14+
GdbVertexArrayTypeTwo0x20::VTable0x08(p_parser);
15+
m_unk0x06 = 3;
1416
}
1517

16-
// STUB: GOLDP 0x10016b30
18+
// FUNCTION: GOLDP 0x10016b30
1719
void GdbVertexArrayTypeThree0x20::VTable0x04(LegoU16 p_count)
1820
{
19-
// TODO
20-
STUB(0x10016b30);
21+
GdbVertexArrayTypeTwo0x20::VTable0x04(p_count);
22+
m_unk0x06 = 3;
2123
}
2224

23-
// STUB: GOLDP 0x10016b50
25+
// FUNCTION: GOLDP 0x10016b50
2426
void GdbVertexArrayTypeThree0x20::VTable0x10()
2527
{
26-
// TODO
27-
STUB(0x10016b50);
28+
if (m_unk0x1c != NULL) {
29+
delete[] m_unk0x1c;
30+
m_unk0x1c = NULL;
31+
}
32+
m_unk0x06 = 1;
2833
}

GolDP/src/gdbvertexarraytypetwo0x20.cpp

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "gdbvertexarraytypetwo0x20.h"
22

33
#include "color.h"
4+
#include "golerror.h"
5+
#include "golfileparser.h"
46
#include "golmath.h"
57

68
// FUNCTION: GOLDP 0x10016b80
@@ -10,18 +12,82 @@ GdbVertexArrayTypeTwo0x20::GdbVertexArrayTypeTwo0x20()
1012
m_unk0x06 = 2;
1113
}
1214

13-
// STUB: GOLDP 0x10016ba0
15+
// FUNCTION: GOLDP 0x10016ba0
1416
void GdbVertexArrayTypeTwo0x20::VTable0x08(GolFileParser& p_parser)
1517
{
16-
// TODO
17-
STUB(0x10016ba0);
18+
LegoU32 i;
19+
if (m_unk0x04 != 0) {
20+
VTable0x0c();
21+
}
22+
p_parser.ReadLeftBracket();
23+
m_unk0x04 = p_parser.ReadInteger();
24+
if (m_unk0x04 == 0) {
25+
p_parser.HandleUnexpectedToken(GolFileParser::e_int);
26+
}
27+
p_parser.ReadRightBracket();
28+
p_parser.ReadLeftCurly();
29+
m_unk0x08 = new GolVec3[m_unk0x04];
30+
if (m_unk0x08 == NULL) {
31+
GOL_FATALERROR(c_golErrorOutOfMemory);
32+
}
33+
m_unk0x0c = new GolVec2[m_unk0x04];
34+
if (m_unk0x0c == NULL) {
35+
GOL_FATALERROR(c_golErrorOutOfMemory);
36+
}
37+
m_unk0x10 = new LegoU32[m_unk0x04];
38+
if (m_unk0x10 == NULL) {
39+
GOL_FATALERROR(c_golErrorOutOfMemory);
40+
}
41+
m_unk0x1c = new GolVec3[m_unk0x04];
42+
if (m_unk0x1c == NULL) {
43+
GOL_FATALERROR(c_golErrorOutOfMemory);
44+
}
45+
for (i = 0; i < m_unk0x04; i++) {
46+
m_unk0x08[i].m_x = p_parser.ReadFloat();
47+
m_unk0x08[i].m_y = p_parser.ReadFloat();
48+
m_unk0x08[i].m_z = p_parser.ReadFloat();
49+
m_unk0x0c[i].m_x = p_parser.ReadFloat();
50+
m_unk0x0c[i].m_y = p_parser.ReadFloat();
51+
m_unk0x1c[i].m_x = p_parser.ReadFloat();
52+
m_unk0x1c[i].m_y = p_parser.ReadFloat();
53+
m_unk0x1c[i].m_z = p_parser.ReadFloat();
54+
m_unk0x10[i] = ARGBU32(0xff, 0xff, 0xff, 0xff);
55+
}
56+
p_parser.ReadRightCurly();
1857
}
1958

20-
// STUB: GOLDP 0x10016d30
59+
// FUNCTION: GOLDP 0x10016d30
2160
void GdbVertexArrayTypeTwo0x20::VTable0x04(LegoU16 p_count)
2261
{
23-
// TODO
24-
STUB(0x10016d30);
62+
LegoU32 i;
63+
if (m_unk0x04 != 0) {
64+
VTable0x0c();
65+
}
66+
m_unk0x04 = p_count;
67+
m_unk0x08 = new GolVec3[m_unk0x04];
68+
if (m_unk0x08 == NULL) {
69+
GOL_FATALERROR(c_golErrorOutOfMemory);
70+
}
71+
m_unk0x0c = new GolVec2[m_unk0x04];
72+
if (m_unk0x0c == NULL) {
73+
GOL_FATALERROR(c_golErrorOutOfMemory);
74+
}
75+
m_unk0x1c = new GolVec3[m_unk0x04];
76+
if (m_unk0x1c == NULL) {
77+
GOL_FATALERROR(c_golErrorOutOfMemory);
78+
}
79+
m_unk0x10 = new LegoU32[m_unk0x04];
80+
if (m_unk0x10 == NULL) {
81+
GOL_FATALERROR(c_golErrorOutOfMemory);
82+
}
83+
for (i = 0; i < m_unk0x04; i++) {
84+
m_unk0x1c[i].m_x = 0.0f;
85+
m_unk0x1c[i].m_y = 0.0f;
86+
m_unk0x1c[i].m_z = 1.0f;
87+
m_unk0x0c[i].m_x = 0.0f;
88+
m_unk0x0c[i].m_y = 0.0f;
89+
m_unk0x10[i] = ARGBU32(0xff, 0xff, 0xff, 0xff);
90+
}
2591
}
2692

2793
// FUNCTION: GOLDP 0x10016e40

GolDP/src/igdbmodel0x40.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ void IGdbModel0x40::VTable0x08(undefined4*)
9696
}
9797

9898
// FUNCTION: GOLDP 0x1002c020 FOLDED
99-
void IGdbModel0x40::VTable0x14(undefined4*)
99+
void IGdbModel0x40::VTable0x14(GolFileParser& p_parser)
100100
{
101101
// empty
102102
}

tools/check_folded.py

100644100755
File mode changed.

0 commit comments

Comments
 (0)