From 30e5a62cabe0ed30cfb6699aa3197b47a4c92401 Mon Sep 17 00:00:00 2001 From: XProger Date: Tue, 18 Jan 2022 04:12:15 +0300 Subject: [PATCH] #370 fix 3DO build --- src/fixed/common.cpp | 4 ++ src/platform/3do/boxIsVisible.s | 2 +- src/platform/3do/common_asm.inc | 4 +- src/platform/3do/main.cpp | 56 +++++++++++++++------------- src/platform/3do/matrixLerp.s | 2 +- src/platform/3do/matrixPush.s | 2 +- src/platform/3do/matrixRotate.s | 12 +++--- src/platform/3do/matrixSetIdentity.s | 2 +- src/platform/3do/matrixTranslate.s | 8 ++-- src/platform/3do/projectVertices.s | 2 +- src/platform/3do/render_cel.cpp | 30 +++++++++++++-- src/platform/3do/sphereIsVisible.s | 2 +- src/platform/gba/packer/main.cpp | 8 ++-- 13 files changed, 83 insertions(+), 51 deletions(-) diff --git a/src/fixed/common.cpp b/src/fixed/common.cpp index 8d765d4..488deaa 100644 --- a/src/fixed/common.cpp +++ b/src/fixed/common.cpp @@ -42,7 +42,11 @@ EWRAM_DATA ExtraInfoLara playersExtra[MAX_PLAYERS]; #define LEVEL_INFO(name, title, track, secrets) { #name, NULL, title, track, secrets } #endif +#ifdef __3DO__ // TODO fix the title scren on 3DO +EWRAM_DATA LevelID gLevelID = LVL_TR1_1; +#else EWRAM_DATA LevelID gLevelID = LVL_TR1_TITLE; +#endif const LevelInfo gLevelInfo[LVL_MAX] = { // TR1 diff --git a/src/platform/3do/boxIsVisible.s b/src/platform/3do/boxIsVisible.s index dbcfa68..cfd9eaf 100644 --- a/src/platform/3do/boxIsVisible.s +++ b/src/platform/3do/boxIsVisible.s @@ -89,7 +89,7 @@ $index.skip MEND boxIsVisible_asm - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] ldr bz, [m, #(11 * 4)] add bz, bz, #VIEW_OFF_F diff --git a/src/platform/3do/common_asm.inc b/src/platform/3do/common_asm.inc index bcfc0a7..42b5614 100644 --- a/src/platform/3do/common_asm.inc +++ b/src/platform/3do/common_asm.inc @@ -1,11 +1,11 @@ - IMPORT matrixPtr + IMPORT gMatrixPtr IMPORT viewportRel IMPORT gVertices IMPORT gFacesBase IMPORT gOT IMPORT gPalette IMPORT gShadowQuads - IMPORT cameraViewPos + IMPORT gCameraViewPos IMPORT shadeTable IMPORT divTable IMPORT gSinCosTable diff --git a/src/platform/3do/main.cpp b/src/platform/3do/main.cpp index 4f9e3aa..f49e84a 100644 --- a/src/platform/3do/main.cpp +++ b/src/platform/3do/main.cpp @@ -1,4 +1,5 @@ const void* TRACKS_IMA; +const void* TITLE_SCR; // TODO void* RAM_LVL; void* RAM_TEX; @@ -7,8 +8,6 @@ void* RAM_SND; #include "game.h" -Game game; - Item irqVBL; Item irqVRAM; Item irqTimer; @@ -124,16 +123,36 @@ void osSetPalette(const uint16* palette) // } -void osSetGamma(int32 value) -{ - // -} - int32 osGetSystemTimeMS() { return GetMSecTime(irqTimer); } +bool osSaveSettings() +{ + return false; +} + +bool osLoadSettings() +{ + return false; +} + +bool osCheckSave() +{ + return false; +} + +bool osSaveGame() +{ + return false; +} + +bool osLoadGame() +{ + return false; +} + void osJoyVibrate(int32 index, int32 L, int32 R) { // @@ -289,7 +308,7 @@ int main(int argc, char *argv[]) sndInit(); - game.init(gLevelInfo[gLevelID].name); + gameInit(gLevelInfo[gLevelID].name); AvailMem(&memInfoVRAM, MEMTYPE_DRAM); printf("DRAM: %d\n", memInfoVRAM.minfo_SysFree); @@ -305,8 +324,6 @@ int main(int argc, char *argv[]) WaitVBL(irqVBL, 1); clearFast(screenPage); - uint32 oldKeys = keys; - updateInput(); //GetVBLTime(irqVBL, NULL, &frame); // slower @@ -325,18 +342,8 @@ int main(int argc, char *argv[]) frame /= 2; // 30 Hz - if ((keys & IK_SELECT) && !(oldKeys & IK_SELECT)) - { - nextLevel(); - } - - if ((keys & IK_A) && (keys & IK_C)) // respawn - { - players[0]->restore(); - } - int32 updateTime = osGetSystemTimeMS(); - game.update(frame - lastFrame); + gameUpdate(frame - lastFrame); updateTime = osGetSystemTimeMS() - updateTime; lastFrame = frame; @@ -344,12 +351,11 @@ updateTime = osGetSystemTimeMS() - updateTime; screenItem = screen.sc_ScreenItems[screenPage]; int32 renderTime = osGetSystemTimeMS(); - game.render(); + gameRender(); renderTime = osGetSystemTimeMS() - renderTime; - drawInt(FRAME_WIDTH - 8, 4, fps); - drawInt(FRAME_WIDTH - 8, 4 + 8, updateTime); - drawInt(FRAME_WIDTH - 8, 4 + 16, renderTime); + drawInt(FRAME_WIDTH - 8, 4 + 16, updateTime); + drawInt(FRAME_WIDTH - 8, 4 + 24, renderTime); DisplayScreen(screen.sc_Screens[screenPage], NULL); screenPage ^= 1; diff --git a/src/platform/3do/matrixLerp.s b/src/platform/3do/matrixLerp.s index b404b50..26fd094 100644 --- a/src/platform/3do/matrixLerp.s +++ b/src/platform/3do/matrixLerp.s @@ -89,7 +89,7 @@ divLUT RN m0 matrixLerp_asm stmfd sp!, {r4-r7, lr} - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] check_2 cmp pdiv, #2 diff --git a/src/platform/3do/matrixPush.s b/src/platform/3do/matrixPush.s index 4ef993a..286b727 100644 --- a/src/platform/3do/matrixPush.s +++ b/src/platform/3do/matrixPush.s @@ -15,7 +15,7 @@ dst RN lr matrixPush_asm stmfd sp!, {lr} - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr src, [m] add dst, src, #(12 * 4) str dst, [m] diff --git a/src/platform/3do/matrixRotate.s b/src/platform/3do/matrixRotate.s index 0571c4b..b8251f8 100644 --- a/src/platform/3do/matrixRotate.s +++ b/src/platform/3do/matrixRotate.s @@ -51,7 +51,7 @@ matrixRotateX_asm sincos angle, s, c - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] add m, m, #(3 * 4) @@ -74,7 +74,7 @@ matrixRotateY_asm sincos angle, s, c - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] ldmia m!, {ex0, ex1, ex2} @@ -100,7 +100,7 @@ matrixRotateZ_asm sincos angle, s, c - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] ldmia m, {ex0, ex1, ex2, ey0, ey1, ey2} @@ -150,7 +150,7 @@ matrixRotateYXZ_asm stmfd sp!, {r4-r11, lr} - ldr mm, =matrixPtr + ldr mm, =gMatrixPtr ldr mm, [mm] ldmia mm, {e00, e10, e20, e01, e11, e21, e02, e12, e22} @@ -181,7 +181,7 @@ _rotZ cmp angleZ, #0 rotxy e11, e10, sinZ, cosZ, tmp rotxy e21, e20, sinZ, cosZ, tmp -_done ldr mm, =matrixPtr +_done ldr mm, =gMatrixPtr ldr mm, [mm] stmia mm, {e00, e10, e20, e01, e11, e21, e02, e12, e22} ldmfd sp!, {r4-r11, pc} @@ -204,7 +204,7 @@ matrixRotateYQ_asm stmfd sp!, {r4-r5, lr} - ldr mx, =matrixPtr + ldr mx, =gMatrixPtr ldr mx, [mx] add my, mx, #(6 * 4) diff --git a/src/platform/3do/matrixSetIdentity.s b/src/platform/3do/matrixSetIdentity.s index 2f2f130..58e789d 100644 --- a/src/platform/3do/matrixSetIdentity.s +++ b/src/platform/3do/matrixSetIdentity.s @@ -12,7 +12,7 @@ e3 RN r3 m RN r12 matrixSetIdentity_asm - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] mov e0, #0x4000 mov e1, #0 diff --git a/src/platform/3do/matrixTranslate.s b/src/platform/3do/matrixTranslate.s index faf01ad..da25ed3 100644 --- a/src/platform/3do/matrixTranslate.s +++ b/src/platform/3do/matrixTranslate.s @@ -21,7 +21,7 @@ dz RN lr matrixTranslateRel_asm stmfd sp!, {r4-r7, lr} - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] add m, m, #(12 * 4) @@ -51,13 +51,13 @@ matrixTranslateRel_asm matrixTranslateAbs_asm stmfd sp!, {r4-r7, lr} - ldr m, =cameraViewPos + ldr m, =gCameraViewPos ldmia m, {e0, e1, e2} sub x, x, e0 sub y, y, e1 sub z, z, e2 - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] ldmia m!, {e0, e1, e2} @@ -83,7 +83,7 @@ matrixTranslateAbs_asm matrixTranslateSet_asm stmfd sp!, {r4-r7, lr} - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] ldmia m!, {e0, e1, e2} diff --git a/src/platform/3do/projectVertices.s b/src/platform/3do/projectVertices.s index f0f745c..48f5957 100644 --- a/src/platform/3do/projectVertices.s +++ b/src/platform/3do/projectVertices.s @@ -26,7 +26,7 @@ divLUT RN lr projectVertices_asm stmfd sp!, {r4-r11, lr} - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] ldr vertex, =gVertices mov r3, vCount diff --git a/src/platform/3do/render_cel.cpp b/src/platform/3do/render_cel.cpp index 68dff10..bc63d51 100644 --- a/src/platform/3do/render_cel.cpp +++ b/src/platform/3do/render_cel.cpp @@ -722,7 +722,7 @@ int32 boxIsVisible_c(const AABBs* box) y = mm[dx][1] + mm[dy][1] + mm[dz][1];\ z = mm[dx][2] + mm[dy][2] + mm[dz][2];\ if (z >= VIEW_MIN_F && z <= VIEW_MAX_F) {\ - z = divTable[z >> (FIXED_SHIFT + PROJ_SHIFT)];\ + z = gDivTable[z >> (FIXED_SHIFT + PROJ_SHIFT)];\ x = x * z;\ y = y * z;\ if (x < rMinX) rMinX = x;\ @@ -927,9 +927,9 @@ void renderSprite(int32 vx, int32 vy, int32 vz, int32 vg, int32 index) const Matrix &m = matrixGet(); - vx -= cameraViewPos.x; - vy -= cameraViewPos.y; - vz -= cameraViewPos.z; + vx -= gCameraViewPos.x; + vy -= gCameraViewPos.y; + vz -= gCameraViewPos.z; int32 z = DP33(m.e20, m.e21, m.e22, vx, vy, vz); @@ -1168,3 +1168,25 @@ void renderMesh(const Mesh* mesh) transformMesh(vertices, vCount); faceAddMesh(rFaces, crFaces, tFaces, ctFaces, mesh->rCount, mesh->crCount, mesh->tCount, mesh->ctCount, mesh->intensity); } + +void renderBorder(int32 x, int32 y, int32 width, int32 height, int32 shade, int32 color1, int32 color2, int32 z) +{ + // TODO +} + +#define BAR_HEIGHT 5 + +void renderBar(int32 x, int32 y, int32 width, int32 value, BarType type) +{ + // TODO +} + +void renderBackground(const void* background) +{ + // TODO +} + +void* copyBackground() +{ + return NULL; // TODO +} diff --git a/src/platform/3do/sphereIsVisible.s b/src/platform/3do/sphereIsVisible.s index 15291ce..9245e7e 100644 --- a/src/platform/3do/sphereIsVisible.s +++ b/src/platform/3do/sphereIsVisible.s @@ -30,7 +30,7 @@ rMaxY RN y sphereIsVisible_asm stmfd sp!, {r4-r8, lr} - ldr m, =matrixPtr + ldr m, =gMatrixPtr ldr m, [m] ldmia m!, {mx, my, mz} diff --git a/src/platform/gba/packer/main.cpp b/src/platform/gba/packer/main.cpp index 655c227..09b61a4 100644 --- a/src/platform/gba/packer/main.cpp +++ b/src/platform/gba/packer/main.cpp @@ -4656,7 +4656,7 @@ struct LevelPC #define COLOR_THRESHOLD_SQ (8 * 8) const char* levelNames[] = { -#if 0 +#if 1 "TITLE", "GYM", "LEVEL1", @@ -5708,9 +5708,9 @@ int main() sprintf(path, "levels/%s.PHD", levelNames[i]); levels[i] = new LevelPC(path); - if (strcmp(levelNames[i], "TITLE") == 0) { - convertScreen("TITLE", levels[i]->palette); - } + //if (strcmp(levelNames[i], "TITLE") == 0) { + // convertScreen("TITLE", levels[i]->palette); + //} for (int32 j = 0; j < 256; j++) {