1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-11 23:54:09 +02:00

#370 fix 3DO build

This commit is contained in:
XProger
2022-01-18 04:12:15 +03:00
parent 32ca26c934
commit 30e5a62cab
13 changed files with 83 additions and 51 deletions

View File

@@ -42,7 +42,11 @@ EWRAM_DATA ExtraInfoLara playersExtra[MAX_PLAYERS];
#define LEVEL_INFO(name, title, track, secrets) { #name, NULL, title, track, secrets } #define LEVEL_INFO(name, title, track, secrets) { #name, NULL, title, track, secrets }
#endif #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; EWRAM_DATA LevelID gLevelID = LVL_TR1_TITLE;
#endif
const LevelInfo gLevelInfo[LVL_MAX] = { const LevelInfo gLevelInfo[LVL_MAX] = {
// TR1 // TR1

View File

@@ -89,7 +89,7 @@ $index.skip
MEND MEND
boxIsVisible_asm boxIsVisible_asm
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
ldr bz, [m, #(11 * 4)] ldr bz, [m, #(11 * 4)]
add bz, bz, #VIEW_OFF_F add bz, bz, #VIEW_OFF_F

View File

@@ -1,11 +1,11 @@
IMPORT matrixPtr IMPORT gMatrixPtr
IMPORT viewportRel IMPORT viewportRel
IMPORT gVertices IMPORT gVertices
IMPORT gFacesBase IMPORT gFacesBase
IMPORT gOT IMPORT gOT
IMPORT gPalette IMPORT gPalette
IMPORT gShadowQuads IMPORT gShadowQuads
IMPORT cameraViewPos IMPORT gCameraViewPos
IMPORT shadeTable IMPORT shadeTable
IMPORT divTable IMPORT divTable
IMPORT gSinCosTable IMPORT gSinCosTable

View File

@@ -1,4 +1,5 @@
const void* TRACKS_IMA; const void* TRACKS_IMA;
const void* TITLE_SCR; // TODO
void* RAM_LVL; void* RAM_LVL;
void* RAM_TEX; void* RAM_TEX;
@@ -7,8 +8,6 @@ void* RAM_SND;
#include "game.h" #include "game.h"
Game game;
Item irqVBL; Item irqVBL;
Item irqVRAM; Item irqVRAM;
Item irqTimer; Item irqTimer;
@@ -124,16 +123,36 @@ void osSetPalette(const uint16* palette)
// //
} }
void osSetGamma(int32 value)
{
//
}
int32 osGetSystemTimeMS() int32 osGetSystemTimeMS()
{ {
return GetMSecTime(irqTimer); 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) void osJoyVibrate(int32 index, int32 L, int32 R)
{ {
// //
@@ -289,7 +308,7 @@ int main(int argc, char *argv[])
sndInit(); sndInit();
game.init(gLevelInfo[gLevelID].name); gameInit(gLevelInfo[gLevelID].name);
AvailMem(&memInfoVRAM, MEMTYPE_DRAM); AvailMem(&memInfoVRAM, MEMTYPE_DRAM);
printf("DRAM: %d\n", memInfoVRAM.minfo_SysFree); printf("DRAM: %d\n", memInfoVRAM.minfo_SysFree);
@@ -305,8 +324,6 @@ int main(int argc, char *argv[])
WaitVBL(irqVBL, 1); WaitVBL(irqVBL, 1);
clearFast(screenPage); clearFast(screenPage);
uint32 oldKeys = keys;
updateInput(); updateInput();
//GetVBLTime(irqVBL, NULL, &frame); // slower //GetVBLTime(irqVBL, NULL, &frame); // slower
@@ -325,18 +342,8 @@ int main(int argc, char *argv[])
frame /= 2; // 30 Hz 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(); int32 updateTime = osGetSystemTimeMS();
game.update(frame - lastFrame); gameUpdate(frame - lastFrame);
updateTime = osGetSystemTimeMS() - updateTime; updateTime = osGetSystemTimeMS() - updateTime;
lastFrame = frame; lastFrame = frame;
@@ -344,12 +351,11 @@ updateTime = osGetSystemTimeMS() - updateTime;
screenItem = screen.sc_ScreenItems[screenPage]; screenItem = screen.sc_ScreenItems[screenPage];
int32 renderTime = osGetSystemTimeMS(); int32 renderTime = osGetSystemTimeMS();
game.render(); gameRender();
renderTime = osGetSystemTimeMS() - renderTime; renderTime = osGetSystemTimeMS() - renderTime;
drawInt(FRAME_WIDTH - 8, 4, fps); drawInt(FRAME_WIDTH - 8, 4 + 16, updateTime);
drawInt(FRAME_WIDTH - 8, 4 + 8, updateTime); drawInt(FRAME_WIDTH - 8, 4 + 24, renderTime);
drawInt(FRAME_WIDTH - 8, 4 + 16, renderTime);
DisplayScreen(screen.sc_Screens[screenPage], NULL); DisplayScreen(screen.sc_Screens[screenPage], NULL);
screenPage ^= 1; screenPage ^= 1;

View File

@@ -89,7 +89,7 @@ divLUT RN m0
matrixLerp_asm matrixLerp_asm
stmfd sp!, {r4-r7, lr} stmfd sp!, {r4-r7, lr}
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
check_2 check_2
cmp pdiv, #2 cmp pdiv, #2

View File

@@ -15,7 +15,7 @@ dst RN lr
matrixPush_asm matrixPush_asm
stmfd sp!, {lr} stmfd sp!, {lr}
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr src, [m] ldr src, [m]
add dst, src, #(12 * 4) add dst, src, #(12 * 4)
str dst, [m] str dst, [m]

View File

@@ -51,7 +51,7 @@ matrixRotateX_asm
sincos angle, s, c sincos angle, s, c
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
add m, m, #(3 * 4) add m, m, #(3 * 4)
@@ -74,7 +74,7 @@ matrixRotateY_asm
sincos angle, s, c sincos angle, s, c
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
ldmia m!, {ex0, ex1, ex2} ldmia m!, {ex0, ex1, ex2}
@@ -100,7 +100,7 @@ matrixRotateZ_asm
sincos angle, s, c sincos angle, s, c
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
ldmia m, {ex0, ex1, ex2, ey0, ey1, ey2} ldmia m, {ex0, ex1, ex2, ey0, ey1, ey2}
@@ -150,7 +150,7 @@ matrixRotateYXZ_asm
stmfd sp!, {r4-r11, lr} stmfd sp!, {r4-r11, lr}
ldr mm, =matrixPtr ldr mm, =gMatrixPtr
ldr mm, [mm] ldr mm, [mm]
ldmia mm, {e00, e10, e20, e01, e11, e21, e02, e12, e22} 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 e11, e10, sinZ, cosZ, tmp
rotxy e21, e20, sinZ, cosZ, tmp rotxy e21, e20, sinZ, cosZ, tmp
_done ldr mm, =matrixPtr _done ldr mm, =gMatrixPtr
ldr mm, [mm] ldr mm, [mm]
stmia mm, {e00, e10, e20, e01, e11, e21, e02, e12, e22} stmia mm, {e00, e10, e20, e01, e11, e21, e02, e12, e22}
ldmfd sp!, {r4-r11, pc} ldmfd sp!, {r4-r11, pc}
@@ -204,7 +204,7 @@ matrixRotateYQ_asm
stmfd sp!, {r4-r5, lr} stmfd sp!, {r4-r5, lr}
ldr mx, =matrixPtr ldr mx, =gMatrixPtr
ldr mx, [mx] ldr mx, [mx]
add my, mx, #(6 * 4) add my, mx, #(6 * 4)

View File

@@ -12,7 +12,7 @@ e3 RN r3
m RN r12 m RN r12
matrixSetIdentity_asm matrixSetIdentity_asm
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
mov e0, #0x4000 mov e0, #0x4000
mov e1, #0 mov e1, #0

View File

@@ -21,7 +21,7 @@ dz RN lr
matrixTranslateRel_asm matrixTranslateRel_asm
stmfd sp!, {r4-r7, lr} stmfd sp!, {r4-r7, lr}
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
add m, m, #(12 * 4) add m, m, #(12 * 4)
@@ -51,13 +51,13 @@ matrixTranslateRel_asm
matrixTranslateAbs_asm matrixTranslateAbs_asm
stmfd sp!, {r4-r7, lr} stmfd sp!, {r4-r7, lr}
ldr m, =cameraViewPos ldr m, =gCameraViewPos
ldmia m, {e0, e1, e2} ldmia m, {e0, e1, e2}
sub x, x, e0 sub x, x, e0
sub y, y, e1 sub y, y, e1
sub z, z, e2 sub z, z, e2
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
ldmia m!, {e0, e1, e2} ldmia m!, {e0, e1, e2}
@@ -83,7 +83,7 @@ matrixTranslateAbs_asm
matrixTranslateSet_asm matrixTranslateSet_asm
stmfd sp!, {r4-r7, lr} stmfd sp!, {r4-r7, lr}
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
ldmia m!, {e0, e1, e2} ldmia m!, {e0, e1, e2}

View File

@@ -26,7 +26,7 @@ divLUT RN lr
projectVertices_asm projectVertices_asm
stmfd sp!, {r4-r11, lr} stmfd sp!, {r4-r11, lr}
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
ldr vertex, =gVertices ldr vertex, =gVertices
mov r3, vCount mov r3, vCount

View File

@@ -722,7 +722,7 @@ int32 boxIsVisible_c(const AABBs* box)
y = mm[dx][1] + mm[dy][1] + mm[dz][1];\ y = mm[dx][1] + mm[dy][1] + mm[dz][1];\
z = mm[dx][2] + mm[dy][2] + mm[dz][2];\ z = mm[dx][2] + mm[dy][2] + mm[dz][2];\
if (z >= VIEW_MIN_F && z <= VIEW_MAX_F) {\ 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;\ x = x * z;\
y = y * z;\ y = y * z;\
if (x < rMinX) rMinX = x;\ 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(); const Matrix &m = matrixGet();
vx -= cameraViewPos.x; vx -= gCameraViewPos.x;
vy -= cameraViewPos.y; vy -= gCameraViewPos.y;
vz -= cameraViewPos.z; vz -= gCameraViewPos.z;
int32 z = DP33(m.e20, m.e21, m.e22, vx, vy, vz); int32 z = DP33(m.e20, m.e21, m.e22, vx, vy, vz);
@@ -1168,3 +1168,25 @@ void renderMesh(const Mesh* mesh)
transformMesh(vertices, vCount); transformMesh(vertices, vCount);
faceAddMesh(rFaces, crFaces, tFaces, ctFaces, mesh->rCount, mesh->crCount, mesh->tCount, mesh->ctCount, mesh->intensity); 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
}

View File

@@ -30,7 +30,7 @@ rMaxY RN y
sphereIsVisible_asm sphereIsVisible_asm
stmfd sp!, {r4-r8, lr} stmfd sp!, {r4-r8, lr}
ldr m, =matrixPtr ldr m, =gMatrixPtr
ldr m, [m] ldr m, [m]
ldmia m!, {mx, my, mz} ldmia m!, {mx, my, mz}

View File

@@ -4656,7 +4656,7 @@ struct LevelPC
#define COLOR_THRESHOLD_SQ (8 * 8) #define COLOR_THRESHOLD_SQ (8 * 8)
const char* levelNames[] = { const char* levelNames[] = {
#if 0 #if 1
"TITLE", "TITLE",
"GYM", "GYM",
"LEVEL1", "LEVEL1",
@@ -5708,9 +5708,9 @@ int main()
sprintf(path, "levels/%s.PHD", levelNames[i]); sprintf(path, "levels/%s.PHD", levelNames[i]);
levels[i] = new LevelPC(path); levels[i] = new LevelPC(path);
if (strcmp(levelNames[i], "TITLE") == 0) { //if (strcmp(levelNames[i], "TITLE") == 0) {
convertScreen("TITLE", levels[i]->palette); // convertScreen("TITLE", levels[i]->palette);
} //}
for (int32 j = 0; j < 256; j++) for (int32 j = 0; j < 256; j++)
{ {