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 }
#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

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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]

View File

@@ -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)

View File

@@ -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

View File

@@ -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}

View File

@@ -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

View File

@@ -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
}

View File

@@ -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}

View File

@@ -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++)
{