Skip to content

Commit 22fb96b

Browse files
committed
More cleanup of town code
1 parent 10e269a commit 22fb96b

File tree

12 files changed

+489
-702
lines changed

12 files changed

+489
-702
lines changed

AzelLib/3dEngine.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,3 +520,40 @@ void dragonFieldTaskDrawSub1Sub1(fixedPoint r4, fixedPoint r5, fixedPoint r6)
520520
PDS_unimplemented("dragonFieldTaskDrawSub1Sub1");
521521
}
522522

523+
fixedPoint transformByMatrixRow0(const sVec3_FP& r4)
524+
{
525+
s64 mac = 0;
526+
mac += (s64)pCurrentMatrix->matrix[0] * (s64)r4[0].asS32();
527+
mac += (s64)pCurrentMatrix->matrix[1] * (s64)r4[1].asS32();
528+
mac += (s64)pCurrentMatrix->matrix[2] * (s64)r4[2].asS32();
529+
return (mac >> 16) + pCurrentMatrix->matrix[3];
530+
}
531+
532+
fixedPoint transformByMatrixRow1(const sVec3_FP& r4)
533+
{
534+
s64 mac = 0;
535+
mac += (s64)pCurrentMatrix->matrix[4] * (s64)r4[0].asS32();
536+
mac += (s64)pCurrentMatrix->matrix[5] * (s64)r4[1].asS32();
537+
mac += (s64)pCurrentMatrix->matrix[6] * (s64)r4[2].asS32();
538+
return (mac >> 16) + pCurrentMatrix->matrix[7];
539+
}
540+
541+
fixedPoint transformByMatrixRow2(const sVec3_FP& r4)
542+
{
543+
s64 mac = 0;
544+
mac += (s64)pCurrentMatrix->matrix[8] * (s64)r4[0].asS32();
545+
mac += (s64)pCurrentMatrix->matrix[9] * (s64)r4[1].asS32();
546+
mac += (s64)pCurrentMatrix->matrix[10] * (s64)r4[2].asS32();
547+
return (mac >> 16) + pCurrentMatrix->matrix[11];
548+
}
549+
550+
fixedPoint MulVec2(const sVec2_FP& r4, const sVec2_FP& r5)
551+
{
552+
s64 mac = 0;
553+
mac += (s64)r4.m_value[0] * (s64)r5.m_value[0];
554+
mac += (s64)r4.m_value[1] * (s64)r5.m_value[1];
555+
556+
return fixedPoint(mac >> 16);
557+
}
558+
559+

AzelLib/3dEngine.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,8 @@ void transformAndAddVec(const sVec3_FP& r4, sVec3_FP& r5, const sMatrix4x3& r6);
113113
void transformAndAddVecByCurrentMatrix(const sVec3_FP* r4, sVec3_FP* r5);
114114
void transformVecByCurrentMatrix(const sVec3_FP& r4, sVec3_FP& r5);
115115

116+
fixedPoint transformByMatrixRow0(const sVec3_FP& r4);
117+
fixedPoint transformByMatrixRow1(const sVec3_FP& r4);
118+
fixedPoint transformByMatrixRow2(const sVec3_FP& r4);
119+
120+
fixedPoint MulVec2(const sVec2_FP& r4, const sVec2_FP& r5);

AzelLib/town/e006/twn_e006.cpp

Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "kernel/fileBundle.h"
1010
#include "audio/soundDriver.h"
1111
#include "audio/systemSounds.h"
12+
#include "town/townCamera.h"
1213

1314
struct TWN_E006_data* gTWN_E006 = nullptr;
1415
struct TWN_E006_data : public sTownOverlay
@@ -27,60 +28,6 @@ struct TWN_E006_data : public sTownOverlay
2728
sTownObject* createObjectTaskFromEA_subTaskWithEAArg(npcFileDeleter* parent, sSaturnPtr definitionEA, s32 size, sSaturnPtr arg) override;
2829
};
2930

30-
void e006_cameraUpdate(sCameraTask* pThis)
31-
{
32-
if ((npcData0.mFC & 1) == 0)
33-
{
34-
pThis->m4++;
35-
if (pThis->m4 > 5400)
36-
{
37-
pThis->m4 = 5400;
38-
}
39-
}
40-
}
41-
42-
void e006_cameraDraw(sCameraTask* pThis)
43-
{
44-
sVec3_FP stack16;
45-
transformVecByCurrentMatrix(pThis->m14, stack16);
46-
setupLight(stack16[0], stack16[1], stack16[2], pThis->m10.toU32());
47-
}
48-
49-
s32 scriptFunction_605bb24(s32 r4, s32 r5)
50-
{
51-
sVec3_FP r4Value = readSaturnVec3(sSaturnPtr::createFromRaw(r4, gTWN_E006)); //todo: that could be a vec2
52-
sSaturnPtr r5Ptr = sSaturnPtr::createFromRaw(r5, gTWN_E006);
53-
cameraTaskPtr->m8 = r5Ptr;
54-
55-
sMatrix4x3 var4;
56-
initMatrixToIdentity(&var4);
57-
rotateMatrixShiftedY(r4Value[1], &var4);
58-
rotateMatrixShiftedX(r4Value[0], &var4);
59-
60-
cameraTaskPtr->m14[0] = var4.matrix[3];
61-
cameraTaskPtr->m14[1] = var4.matrix[7];
62-
cameraTaskPtr->m14[2] = var4.matrix[11];
63-
64-
cameraTaskPtr->m10 = readSaturnRGB8(r5Ptr);
65-
cameraTaskPtr->m30 = 0x8000;
66-
67-
generateLightFalloffMap(readSaturnRGB8(r5Ptr + 3).toU32(), readSaturnRGB8(r5Ptr + 6).toU32(), readSaturnRGB8(r5Ptr + 9).toU32());
68-
69-
cameraTaskPtr->m_UpdateMethod = e006_cameraUpdate;
70-
cameraTaskPtr->m_DrawMethod = e006_cameraDraw;
71-
72-
if (g_fadeControls.m_4C <= g_fadeControls.m_4D)
73-
{
74-
vdp2Controls.m20_registers[0].m112_CLOFSL = 0x10;
75-
vdp2Controls.m20_registers[1].m112_CLOFSL = 0x10;
76-
}
77-
78-
resetProjectVector();
79-
cameraTaskPtr->m2 = 0;
80-
cameraTaskPtr->m0 = 0;
81-
return 0;
82-
}
83-
8431
struct sStreamingParams
8532
{
8633
sStreamingFile* m0_streamingFile;
@@ -1307,17 +1254,6 @@ s32 setupDragonEntityForCutscene(s32 r4)
13071254
return 0;
13081255
}
13091256

1310-
s32 scriptFunction_605838C(s32 r4)
1311-
{
1312-
if (g_fadeControls.m_4D >= g_fadeControls.m_4C)
1313-
{
1314-
vdp2Controls.m20_registers[0].m112_CLOFSL = r4;
1315-
vdp2Controls.m20_registers[1].m112_CLOFSL = r4;
1316-
}
1317-
1318-
return 0;
1319-
}
1320-
13211257
// TODO: kernel
13221258
void scriptFunction_60573d8Sub0(sStreamingFile* r4)
13231259
{
@@ -1409,11 +1345,11 @@ TWN_E006_data::TWN_E006_data() : sTownOverlay("TWN_E006.PRG")
14091345

14101346
overlayScriptFunctions.m_oneArg[0x60573b0] = &createEPKPlayer;
14111347
overlayScriptFunctions.m_oneArg[0x605861e] = &setupDragonEntityForCutscene;
1412-
overlayScriptFunctions.m_oneArg[0x605838C] = &scriptFunction_605838C;
1348+
overlayScriptFunctions.m_oneArg[0x605838C] = &SetupColorOffset;
14131349
overlayScriptFunctions.m_oneArg[0x605be04] = &TwnFadeOut;
14141350
overlayScriptFunctions.m_oneArg[0x605bd8c] = &TwnFadeIn;
14151351

1416-
overlayScriptFunctions.m_twoArg[0x605bb24] = &scriptFunction_605bb24;
1352+
overlayScriptFunctions.m_twoArg[0x605bb24] = &townCamera_setup;
14171353

14181354
mTownSetups.push_back(readTownSetup(getSaturnPtr(0x605e1c0), 1));
14191355
}

AzelLib/town/e011/twn_e011.cpp

Lines changed: 5 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
#include "kernel/fileBundle.h"
1111
#include "mainMenuDebugTasks.h"
1212
#include "audio/soundDriver.h"
13+
#include "town/townCamera.h"
14+
15+
// https://youtu.be/Txks9hG21qs?t=2980
1316

1417
void setupVdp1Proj(fixedPoint fov); // TODO: cleanup
1518

@@ -31,27 +34,6 @@ struct TWN_E011_data : public sTownOverlay
3134
sTownObject* createObjectTaskFromEA_subTaskWithEAArg(npcFileDeleter* parent, sSaturnPtr definitionEA, s32 size, sSaturnPtr arg) override;
3235
};
3336

34-
// TODO: shared in EPKs
35-
void e011_cameraUpdate(sCameraTask* pThis)
36-
{
37-
if ((npcData0.mFC & 1) == 0)
38-
{
39-
pThis->m4++;
40-
if (pThis->m4 > 5400)
41-
{
42-
pThis->m4 = 5400;
43-
}
44-
}
45-
}
46-
47-
// TODO: shared in EPKs
48-
void e011_cameraDraw(sCameraTask* pThis)
49-
{
50-
sVec3_FP stack16;
51-
transformVecByCurrentMatrix(pThis->m14, stack16);
52-
setupLight(stack16[0], stack16[1], stack16[2], pThis->m10.toU32());
53-
}
54-
5537
u32 modulateColor(sSaturnPtr r4, u32 r5)
5638
{
5739
FunctionUnimplemented();
@@ -64,67 +46,6 @@ u32 modulateColorByEvent(sCameraTask* cameraTaskPtr, s32 r5)
6446
return 0;
6547
}
6648

67-
// TODO: that's generic right?
68-
s32 e011_scriptFunction_0605ce38(int iParm1)
69-
70-
{
71-
u32 unaff_r12;
72-
73-
switch (cameraTaskPtr->m0)
74-
{
75-
case 0:
76-
case 2:
77-
unaff_r12 = modulateColor(cameraTaskPtr->m8, cameraTaskPtr->m30);
78-
break;
79-
case 1:
80-
unaff_r12 = modulateColorByEvent(cameraTaskPtr, cameraTaskPtr->m4 + iParm1);
81-
break;
82-
default:
83-
assert(0);
84-
break;
85-
}
86-
87-
fadePalette(&g_fadeControls.m0_fade0, convertColorToU32ForFade(g_fadeControls.m0_fade0.m0_color), 0xc210, iParm1);
88-
fadePalette(&g_fadeControls.m24_fade1, convertColorToU32ForFade(g_fadeControls.m24_fade1.m0_color), unaff_r12, iParm1);
89-
cameraTaskPtr->m1 = 1;
90-
return 1;
91-
}
92-
93-
s32 scriptFunction_605cbd0(s32 r4, s32 r5)
94-
{
95-
sVec3_FP r4Value = readSaturnVec3(sSaturnPtr::createFromRaw(r4, gTWN_E011)); //todo: that could be a vec2
96-
sSaturnPtr r5Ptr = sSaturnPtr::createFromRaw(r5, gTWN_E011);
97-
cameraTaskPtr->m8 = r5Ptr;
98-
99-
sMatrix4x3 var4;
100-
initMatrixToIdentity(&var4);
101-
rotateMatrixShiftedY(r4Value[1], &var4);
102-
rotateMatrixShiftedX(r4Value[0], &var4);
103-
104-
cameraTaskPtr->m14[0] = var4.matrix[3];
105-
cameraTaskPtr->m14[1] = var4.matrix[7];
106-
cameraTaskPtr->m14[2] = var4.matrix[11];
107-
108-
cameraTaskPtr->m10 = readSaturnRGB8(r5Ptr);
109-
cameraTaskPtr->m30 = 0x8000;
110-
111-
generateLightFalloffMap(readSaturnRGB8(r5Ptr + 3).toU32(), readSaturnRGB8(r5Ptr + 6).toU32(), readSaturnRGB8(r5Ptr + 9).toU32());
112-
113-
cameraTaskPtr->m_UpdateMethod = e011_cameraUpdate;
114-
cameraTaskPtr->m_DrawMethod = e011_cameraDraw;
115-
116-
if (g_fadeControls.m_4C <= g_fadeControls.m_4D)
117-
{
118-
vdp2Controls.m20_registers[0].m112_CLOFSL = 0x10;
119-
vdp2Controls.m20_registers[1].m112_CLOFSL = 0x10;
120-
}
121-
122-
resetProjectVector();
123-
cameraTaskPtr->m2 = 0;
124-
cameraTaskPtr->m0 = 0;
125-
return 0;
126-
}
127-
12849
struct sE011Task1 : public s_workAreaTemplate<sE011Task1>
12950
{
13051
static TypedTaskDefinition* getTypedTaskDefinition()
@@ -201,13 +122,13 @@ TWN_E011_data::TWN_E011_data() : sTownOverlay("TWN_E011.PRG")
201122
overlayScriptFunctions.m_zeroArg[0x60584a6] = &e006_scriptFunction_605861eSub0;
202123

203124
overlayScriptFunctions.m_oneArg[0x605ceb0] = &TwnFadeOut;
125+
overlayScriptFunctions.m_oneArg[0x605ce38] = &TwnFadeIn;
204126
overlayScriptFunctions.m_oneArg[0x605845c] = &createEPKPlayer;
205127
overlayScriptFunctions.m_oneArg[0x6059af0] = &e011_scriptFunction_6059af0;
206128
overlayScriptFunctions.m_oneArg[0x60596ca] = &setupDragonEntityForCutscene;
207-
overlayScriptFunctions.m_oneArg[0x605ce38] = &e011_scriptFunction_0605ce38;
208129
overlayScriptFunctions.m_oneArg[0x6059b7a] = &e011_scriptFunction_06059b7a;
209130

210-
overlayScriptFunctions.m_twoArg[0x605cbd0] = &scriptFunction_605cbd0;
131+
overlayScriptFunctions.m_twoArg[0x605cbd0] = &townCamera_setup;
211132

212133
mTownSetups.push_back(readTownSetup(getSaturnPtr(0x0605ef14), 1));
213134
mTownSetups.push_back(readTownSetup(getSaturnPtr(0x0605ef20), 1));

AzelLib/town/e014/twn_e014.cpp

Lines changed: 4 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "audio/soundDriver.h"
55
#include "kernel/vdp1Allocator.h"
66
#include "town/townMainLogic.h"
7+
#include "town/townCamera.h"
78

89
#include "town/e006/twn_e006.h" // TODO cleanup
910
void setupVdp1Proj(fixedPoint fov); // TODO: cleanup
@@ -44,64 +45,6 @@ void startE014BackgroundTask(p_workArea)
4445
reinitVdp2();
4546
}
4647

47-
// TODO: shared in EPKs
48-
void e014_cameraUpdate(sCameraTask* pThis)
49-
{
50-
if ((npcData0.mFC & 1) == 0)
51-
{
52-
pThis->m4++;
53-
if (pThis->m4 > 5400)
54-
{
55-
pThis->m4 = 5400;
56-
}
57-
}
58-
}
59-
60-
// TODO: shared in EPKs
61-
void e014_cameraDraw(sCameraTask* pThis)
62-
{
63-
sVec3_FP stack16;
64-
transformVecByCurrentMatrix(pThis->m14, stack16);
65-
setupLight(stack16[0], stack16[1], stack16[2], pThis->m10.toU32());
66-
}
67-
68-
s32 scriptFunction_605be70(s32 r4, s32 r5)
69-
{
70-
sVec3_FP r4Value = readSaturnVec3(sSaturnPtr::createFromRaw(r4, gTWN_E014)); //todo: that could be a vec2
71-
sSaturnPtr r5Ptr = sSaturnPtr::createFromRaw(r5, gTWN_E014);
72-
cameraTaskPtr->m8 = r5Ptr;
73-
74-
sMatrix4x3 var4;
75-
initMatrixToIdentity(&var4);
76-
rotateMatrixShiftedY(r4Value[1], &var4);
77-
rotateMatrixShiftedX(r4Value[0], &var4);
78-
79-
cameraTaskPtr->m14[0] = var4.matrix[3];
80-
cameraTaskPtr->m14[1] = var4.matrix[7];
81-
cameraTaskPtr->m14[2] = var4.matrix[11];
82-
83-
cameraTaskPtr->m10 = readSaturnRGB8(r5Ptr);
84-
cameraTaskPtr->m30 = 0x8000;
85-
86-
generateLightFalloffMap(readSaturnRGB8(r5Ptr + 3).toU32(), readSaturnRGB8(r5Ptr + 6).toU32(), readSaturnRGB8(r5Ptr + 9).toU32());
87-
88-
cameraTaskPtr->m_UpdateMethod = e014_cameraUpdate;
89-
cameraTaskPtr->m_DrawMethod = e014_cameraDraw;
90-
91-
if (g_fadeControls.m_4C <= g_fadeControls.m_4D)
92-
{
93-
vdp2Controls.m20_registers[0].m112_CLOFSL = 0x10;
94-
vdp2Controls.m20_registers[1].m112_CLOFSL = 0x10;
95-
}
96-
97-
resetProjectVector();
98-
cameraTaskPtr->m2 = 0;
99-
cameraTaskPtr->m0 = 0;
100-
return 0;
101-
}
102-
103-
s32 e011_scriptFunction_0605ce38(int iParm1); // TODO: clean
104-
10548
TWN_E014_data::TWN_E014_data() : sTownOverlay("TWN_E014.PRG")
10649
{
10750
mTownSetups.push_back(readTownSetup(getSaturnPtr(0x0605e114), 1));
@@ -111,12 +54,12 @@ TWN_E014_data::TWN_E014_data() : sTownOverlay("TWN_E014.PRG")
11154
overlayScriptFunctions.m_zeroArg[0x6057746] = &e006_scriptFunction_605861eSub0;
11255
overlayScriptFunctions.m_zeroArg[0x6057784] = &e006_scriptFunction_6057438;
11356

57+
overlayScriptFunctions.m_oneArg[0x605c0d8] = &TwnFadeIn;
11458
overlayScriptFunctions.m_oneArg[0x605C150] = &TwnFadeOut;
11559
overlayScriptFunctions.m_oneArg[0x60576FC] = &createEPKPlayer;
116-
117-
overlayScriptFunctions.m_twoArg[0x605be70] = &scriptFunction_605be70;
11860
overlayScriptFunctions.m_oneArg[0x605896a] = &setupDragonEntityForCutscene;
119-
overlayScriptFunctions.m_oneArg[0x605c0d8] = &e011_scriptFunction_0605ce38;
61+
62+
overlayScriptFunctions.m_twoArg[0x605be70] = &townCamera_setup;
12063
}
12164

12265
sTownObject* TWN_E014_data::createObjectTaskFromEA_siblingTaskWithEAArgWithCopy(npcFileDeleter* parent, sSaturnPtr definitionEA, s32 size, sSaturnPtr arg)

AzelLib/town/exca/twn_exca.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "kernel/fileBundle.h"
1010
#include "kernel/vdp1Allocator.h"
1111
#include "audio/soundDriver.h"
12+
#include "town/townCamera.h"
1213

1314
struct sTownDragon : public s_workAreaTemplateWithArg<sTownDragon, sSaturnPtr>, sTownObject
1415
{
@@ -186,7 +187,14 @@ struct TWN_EXCA_data : public sTownOverlay
186187

187188
TWN_EXCA_data() : sTownOverlay("TWN_EXCA.PRG")
188189
{
190+
overlayScriptFunctions.m_zeroArg[0x06057f7c] = &scriptFunction_6057058_sub0;
191+
overlayScriptFunctions.m_zeroArg[0x060584b4] = &hasLoadingCompleted;
192+
189193
overlayScriptFunctions.m_oneArg[0x605d780] = &TwnFadeOut;
194+
overlayScriptFunctions.m_oneArg[0x605d708] = &TwnFadeIn;
195+
overlayScriptFunctions.m_oneArg[0x6059d08] = &SetupColorOffset;
196+
197+
overlayScriptFunctions.m_twoArg[0x605d4a0] = &townCamera_setup;
190198

191199
overlayScriptFunctions.m_fourArg[0x605be24] = &setNpcLocation;
192200
overlayScriptFunctions.m_fourArg[0x605be52] = &setNpcOrientation;

0 commit comments

Comments
 (0)