Merge pull request #117 from mrshigure/esprite
Matched ShapeExec, esprite, and jmp
This commit is contained in:
commit
64bbeb6e79
18 changed files with 350 additions and 40 deletions
|
|
@ -6237,7 +6237,7 @@ SeqSpeed = .sbss:0x801D3D92; // type:object size:0x2 scope:local data:2byte
|
||||||
lbl_801D3D94 = .sbss:0x801D3D94; // type:object size:0x1 data:byte
|
lbl_801D3D94 = .sbss:0x801D3D94; // type:object size:0x1 data:byte
|
||||||
SeqDone = .sbss:0x801D3D95; // type:object size:0x1 scope:local data:byte
|
SeqDone = .sbss:0x801D3D95; // type:object size:0x1 scope:local data:byte
|
||||||
SeqTimer = .sbss:0x801D3D96; // type:object size:0x2 scope:local data:2byte
|
SeqTimer = .sbss:0x801D3D96; // type:object size:0x2 scope:local data:2byte
|
||||||
gid = .sbss:0x801D3D98; // type:object size:0x8 scope:local data:2byte
|
gid = .sbss:0x801D3D98; // type:object size:0x2 scope:local data:2byte
|
||||||
lbl_801D3DA0 = .sbss:0x801D3DA0; // type:object size:0x8
|
lbl_801D3DA0 = .sbss:0x801D3DA0; // type:object size:0x8
|
||||||
wipeFadeInF = .sbss:0x801D3DA8; // type:object size:0x8 data:4byte
|
wipeFadeInF = .sbss:0x801D3DA8; // type:object size:0x8 data:4byte
|
||||||
fontAnim = .sbss:0x801D3DB0; // type:object size:0x4 data:4byte
|
fontAnim = .sbss:0x801D3DB0; // type:object size:0x4 data:4byte
|
||||||
|
|
|
||||||
|
|
@ -317,7 +317,7 @@ config.libs = [
|
||||||
Object(Matching, "game/decode.c"),
|
Object(Matching, "game/decode.c"),
|
||||||
Object(Matching, "game/font.c"),
|
Object(Matching, "game/font.c"),
|
||||||
Object(Matching, "game/init.c"),
|
Object(Matching, "game/init.c"),
|
||||||
Object(NonMatching, "game/jmp.c"),
|
Object(Matching, "game/jmp.c"),
|
||||||
Object(Matching, "game/malloc.c"),
|
Object(Matching, "game/malloc.c"),
|
||||||
Object(Matching, "game/memory.c"),
|
Object(Matching, "game/memory.c"),
|
||||||
Object(Matching, "game/printfunc.c"),
|
Object(Matching, "game/printfunc.c"),
|
||||||
|
|
@ -341,10 +341,10 @@ config.libs = [
|
||||||
Object(Matching, "game/EnvelopeExec.c"),
|
Object(Matching, "game/EnvelopeExec.c"),
|
||||||
Object(NonMatching, "game/minigame_seq.c"),
|
Object(NonMatching, "game/minigame_seq.c"),
|
||||||
Object(Matching, "game/ovllist.c"),
|
Object(Matching, "game/ovllist.c"),
|
||||||
Object(NonMatching, "game/esprite.c"),
|
Object(Matching, "game/esprite.c"),
|
||||||
Object(NonMatching, "game/code_8003FF68.c"),
|
Object(NonMatching, "game/code_8003FF68.c"),
|
||||||
Object(Matching, "game/ClusterExec.c"),
|
Object(Matching, "game/ClusterExec.c"),
|
||||||
Object(NonMatching, "game/ShapeExec.c"),
|
Object(Matching, "game/ShapeExec.c"),
|
||||||
Object(Matching, "game/wipe.c"),
|
Object(Matching, "game/wipe.c"),
|
||||||
Object(Matching, "game/window.c"),
|
Object(Matching, "game/window.c"),
|
||||||
Object(Matching, "game/messdata.c"),
|
Object(Matching, "game/messdata.c"),
|
||||||
|
|
|
||||||
8
include/game/ShapeExec.h
Executable file
8
include/game/ShapeExec.h
Executable file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef _GAME_SHAPE_EXEC_H
|
||||||
|
#define _GAME_SHAPE_EXEC_H
|
||||||
|
|
||||||
|
#include "game/hsfformat.h"
|
||||||
|
|
||||||
|
void ShapeProc(HsfData *arg0);
|
||||||
|
|
||||||
|
#endif
|
||||||
24
include/game/esprite.h
Executable file
24
include/game/esprite.h
Executable file
|
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef _GAME_ESPRITE_H
|
||||||
|
#define _GAME_ESPRITE_H
|
||||||
|
|
||||||
|
#include "dolphin.h"
|
||||||
|
|
||||||
|
void espInit(void);
|
||||||
|
s16 espEntry(s32 arg0, s16 arg1, s16 arg2);
|
||||||
|
void espKill(s16 arg0);
|
||||||
|
s16 espGrpIDGet(void);
|
||||||
|
void espDispOn(s16 arg0);
|
||||||
|
void espDispOff(s16 arg0);
|
||||||
|
void espAttrSet(s16 arg0, u16 arg1);
|
||||||
|
void espAttrReset(s16 arg0, u16 arg1);
|
||||||
|
void espPosSet(s16 arg0, float arg1, float arg2);
|
||||||
|
void espScaleSet(s16 arg0, float arg1, float arg2);
|
||||||
|
void espZRotSet(s16 arg0, float arg1);
|
||||||
|
void espTPLvlSet(s16 arg0, float arg1);
|
||||||
|
void espColorSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3);
|
||||||
|
void espSpeedSet(s16 arg0, float arg1);
|
||||||
|
void espBankSet(s16 arg0, s16 arg1);
|
||||||
|
void espDrawNoSet(s16 arg0, s16 arg1);
|
||||||
|
void espPriSet(s16 arg0, s16 arg1);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -118,7 +118,6 @@ typedef struct light_data {
|
||||||
} LightData;
|
} LightData;
|
||||||
|
|
||||||
extern void GXWaitDrawDone(); /* extern */
|
extern void GXWaitDrawDone(); /* extern */
|
||||||
extern void ShapeProc(HsfData*); /* extern */
|
|
||||||
extern void GXInitSpecularDir(GXLightObj*, f32, f32, f32);
|
extern void GXInitSpecularDir(GXLightObj*, f32, f32, f32);
|
||||||
|
|
||||||
void Hu3DInit(void);
|
void Hu3DInit(void);
|
||||||
|
|
|
||||||
19
include/game/jmp.h
Executable file
19
include/game/jmp.h
Executable file
|
|
@ -0,0 +1,19 @@
|
||||||
|
#ifndef _GAME_JMP_H
|
||||||
|
#define _GAME_JMP_H
|
||||||
|
|
||||||
|
#include "dolphin.h"
|
||||||
|
|
||||||
|
typedef struct jump_buf {
|
||||||
|
u32 lr;
|
||||||
|
u32 cr;
|
||||||
|
u32 sp;
|
||||||
|
u32 r2;
|
||||||
|
u32 pad;
|
||||||
|
u32 regs[19];
|
||||||
|
double flt_regs[19];
|
||||||
|
} jmp_buf;
|
||||||
|
|
||||||
|
int gcsetjmp(jmp_buf *jump);
|
||||||
|
int gclongjmp(jmp_buf *jump, int status);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef _GAME_PROCESS_H
|
#ifndef _GAME_PROCESS_H
|
||||||
#define _GAME_PROCESS_H
|
#define _GAME_PROCESS_H
|
||||||
|
|
||||||
|
#include "game/jmp.h"
|
||||||
#include "dolphin/types.h"
|
#include "dolphin/types.h"
|
||||||
|
|
||||||
#define PROCESS_STAT_PAUSE 0x1
|
#define PROCESS_STAT_PAUSE 0x1
|
||||||
|
|
@ -8,16 +9,6 @@
|
||||||
#define PROCESS_STAT_PAUSE_EN 0x4
|
#define PROCESS_STAT_PAUSE_EN 0x4
|
||||||
#define PROCESS_STAT_UPAUSE_EN 0x8
|
#define PROCESS_STAT_UPAUSE_EN 0x8
|
||||||
|
|
||||||
typedef struct jump_buf {
|
|
||||||
u32 lr;
|
|
||||||
u32 cr;
|
|
||||||
u32 sp;
|
|
||||||
u32 r2;
|
|
||||||
u32 pad;
|
|
||||||
u32 regs[19];
|
|
||||||
double flt_regs[19];
|
|
||||||
} jmp_buf;
|
|
||||||
|
|
||||||
typedef struct process {
|
typedef struct process {
|
||||||
struct process *next;
|
struct process *next;
|
||||||
struct process *prev;
|
struct process *prev;
|
||||||
|
|
|
||||||
|
|
@ -3,25 +3,6 @@
|
||||||
|
|
||||||
#include "dolphin.h"
|
#include "dolphin.h"
|
||||||
|
|
||||||
void Hu3D2Dto3D(Vec*, s16, Vec*);
|
|
||||||
void HuAudFadeOut(s32 arg0);
|
|
||||||
|
|
||||||
void Hu3DModelPosSet(s16 index, float x, float y, float z);
|
|
||||||
void Hu3DModelRotSet(s16 index, float x, float y, float z);
|
|
||||||
void Hu3DModelScaleSet(s16 index, float x, float y, float z);
|
|
||||||
|
|
||||||
void espInit(void);
|
|
||||||
void espScaleSet(s16, f32, f32);
|
|
||||||
s16 espEntry(s32, s32, s32);
|
|
||||||
void espDispOff(s16);
|
|
||||||
void espKill(s16);
|
|
||||||
void espDispOn(s16);
|
|
||||||
void espPosSet(s16, f32, f32);
|
|
||||||
|
|
||||||
void HuAudFXListnerKill(void);
|
|
||||||
void HuAudDllSndGrpSet(u16 ovl);
|
|
||||||
void HuAudVoiceInit(s16 ovl);
|
|
||||||
|
|
||||||
void MGSeqKillAll(void);
|
void MGSeqKillAll(void);
|
||||||
|
|
||||||
void MGSeqPracticeStart(void);
|
void MGSeqPracticeStart(void);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "game/audio.h"
|
||||||
#include "game/object.h"
|
#include "game/object.h"
|
||||||
#include "game/printfunc.h"
|
#include "game/printfunc.h"
|
||||||
#include "game/pad.h"
|
#include "game/pad.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "REL/w10Dll.h"
|
#include "REL/w10Dll.h"
|
||||||
|
#include "game/esprite.h"
|
||||||
#include "game/pad.h"
|
#include "game/pad.h"
|
||||||
#include "game/data.h"
|
#include "game/data.h"
|
||||||
#include "game/wipe.h"
|
#include "game/wipe.h"
|
||||||
|
|
|
||||||
69
src/game/ShapeExec.c
Executable file
69
src/game/ShapeExec.c
Executable file
|
|
@ -0,0 +1,69 @@
|
||||||
|
#include "game/ShapeExec.h"
|
||||||
|
#include "game/EnvelopeExec.h"
|
||||||
|
|
||||||
|
static void SetShapeMain(HsfObject *arg0) {
|
||||||
|
HsfBuffer *temp_r28;
|
||||||
|
HsfBuffer *temp_r30;
|
||||||
|
float var_f30;
|
||||||
|
float var_f31;
|
||||||
|
s32 temp_r27;
|
||||||
|
s32 var_r29;
|
||||||
|
s32 var_r26;
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
if (arg0->data.shapeType == 2) {
|
||||||
|
var_f30 = 0.0f;
|
||||||
|
for (i = 0; i < arg0->data.vertexShapeCnt; i++) {
|
||||||
|
var_f30 += arg0->data.mesh.morphWeight[i];
|
||||||
|
}
|
||||||
|
temp_r30 = *arg0->data.vertexShape;
|
||||||
|
for (i = 0; i < temp_r30->count; i++) {
|
||||||
|
Vertextop[i].x = ((Vec*) temp_r30->data)[i].x;
|
||||||
|
Vertextop[i].y = ((Vec*) temp_r30->data)[i].y;
|
||||||
|
Vertextop[i].z = ((Vec*) temp_r30->data)[i].z;
|
||||||
|
}
|
||||||
|
for (i = 0; i < arg0->data.vertexShapeCnt; i++) {
|
||||||
|
temp_r30 = arg0->data.vertexShape[i];
|
||||||
|
var_f31 = arg0->data.mesh.morphWeight[i];
|
||||||
|
if (var_f31 < 0.0f) {
|
||||||
|
var_f31 = 0.0f;
|
||||||
|
} else if (var_f30 > 1.0f) {
|
||||||
|
var_f31 /= var_f30;
|
||||||
|
}
|
||||||
|
for (var_r29 = 0; var_r29 < temp_r30->count; var_r29++) {
|
||||||
|
Vertextop[var_r29].x += var_f31 * (((Vec*) temp_r30->data)[var_r29].x - Vertextop[var_r29].x);
|
||||||
|
Vertextop[var_r29].y += var_f31 * (((Vec*) temp_r30->data)[var_r29].y - Vertextop[var_r29].y);
|
||||||
|
Vertextop[var_r29].z += var_f31 * (((Vec*) temp_r30->data)[var_r29].z - Vertextop[var_r29].z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
temp_r27 = arg0->data.mesh.baseMorph;
|
||||||
|
var_r26 = temp_r27 + 1;
|
||||||
|
if (var_r26 >= arg0->data.vertexShapeCnt) {
|
||||||
|
var_r26 = temp_r27;
|
||||||
|
}
|
||||||
|
var_f31 = arg0->data.mesh.baseMorph - temp_r27;
|
||||||
|
temp_r30 = arg0->data.vertexShape[temp_r27];
|
||||||
|
temp_r28 = arg0->data.vertexShape[var_r26];
|
||||||
|
for (i = 0; i < temp_r30->count; i++) {
|
||||||
|
Vertextop[i].x = ((Vec*) temp_r30->data)[i].x + var_f31 * (((Vec*) temp_r28->data)[i].x - ((Vec*) temp_r30->data)[i].x);
|
||||||
|
Vertextop[i].y = ((Vec*) temp_r30->data)[i].y + var_f31 * (((Vec*) temp_r28->data)[i].y - ((Vec*) temp_r30->data)[i].y);
|
||||||
|
Vertextop[i].z = ((Vec*) temp_r30->data)[i].z + var_f31 * (((Vec*) temp_r28->data)[i].z - ((Vec*) temp_r30->data)[i].z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShapeProc(HsfData *arg0) {
|
||||||
|
HsfObject *var_r31;
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
var_r31 = arg0->object;
|
||||||
|
for (i = 0; i < arg0->objectCnt; i++, var_r31++) {
|
||||||
|
if (var_r31->type == 2 && var_r31->data.vertexShapeCnt != 0) {
|
||||||
|
Vertextop = var_r31->data.vertex->data;
|
||||||
|
SetShapeMain(var_r31);
|
||||||
|
DCStoreRange(Vertextop, var_r31->data.vertex->count * sizeof(Vec));
|
||||||
|
var_r31->data.unk120[0]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
#include "game/board/player.h"
|
#include "game/board/player.h"
|
||||||
#include "game/wipe.h"
|
#include "game/wipe.h"
|
||||||
#include "game/gamework_data.h"
|
#include "game/gamework_data.h"
|
||||||
|
#include "game/hsfex.h"
|
||||||
#include "board_unsplit.h"
|
#include "board_unsplit.h"
|
||||||
#include "unsplit.h"
|
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
|
|
||||||
static void WarpInit(s32);
|
static void WarpInit(s32);
|
||||||
|
|
|
||||||
145
src/game/esprite.c
Executable file
145
src/game/esprite.c
Executable file
|
|
@ -0,0 +1,145 @@
|
||||||
|
#include "game/esprite.h"
|
||||||
|
#include "game/data.h"
|
||||||
|
#include "game/sprite.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0x00 */ u32 unk00;
|
||||||
|
/* 0x04 */ u16 unk04;
|
||||||
|
/* 0x06 */ char unk06[2];
|
||||||
|
/* 0x08 */ AnimData *unk08;
|
||||||
|
} UnkEspriteStruct01; // Size 0xC
|
||||||
|
|
||||||
|
s16 esprite[0x180][2];
|
||||||
|
UnkEspriteStruct01 espanim[0x180];
|
||||||
|
|
||||||
|
static s16 gid;
|
||||||
|
|
||||||
|
void espInit(void) {
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
gid = HuSprGrpCreate(0x180);
|
||||||
|
for (i = 0; i < 0x180; i++) {
|
||||||
|
esprite[i][0] = i;
|
||||||
|
esprite[i][1] = -1;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 0x180; i++) {
|
||||||
|
espanim[i].unk04 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s16 espEntry(s32 arg0, s16 arg1, s16 arg2) {
|
||||||
|
UnkEspriteStruct01 *var_r30;
|
||||||
|
UnkEspriteStruct01 *var_r31;
|
||||||
|
s16 (*var_r29)[2];
|
||||||
|
void *temp_r26;
|
||||||
|
s16 temp_r25;
|
||||||
|
s16 var_r28;
|
||||||
|
s32 var_r27;
|
||||||
|
|
||||||
|
var_r29 = esprite;
|
||||||
|
for (var_r28 = 0; var_r28 < 0x180; var_r29++, var_r28++) {
|
||||||
|
if (var_r29[0][1] == -1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (var_r28 == 0x180) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
var_r31 = espanim;
|
||||||
|
var_r30 = NULL;
|
||||||
|
for (var_r27 = 0; var_r27 < 0x180; var_r31++, var_r27++) {
|
||||||
|
if (var_r31->unk04 != 0) {
|
||||||
|
if (var_r31->unk00 == arg0) {
|
||||||
|
var_r30 = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (var_r30 == NULL) {
|
||||||
|
var_r30 = var_r31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (var_r27 == 0x180) {
|
||||||
|
if (var_r30 == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
temp_r26 = HuDataSelHeapReadNum(arg0, MEMORY_DEFAULT_NUM, HEAP_DATA);
|
||||||
|
if (temp_r26 == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
var_r30->unk00 = arg0;
|
||||||
|
var_r30->unk08 = HuSprAnimRead(temp_r26);
|
||||||
|
var_r31 = var_r30;
|
||||||
|
}
|
||||||
|
temp_r25 = HuSprCreate(var_r31->unk08, arg1, arg2);
|
||||||
|
if (temp_r25 == -1) {
|
||||||
|
if (var_r30 != NULL) {
|
||||||
|
HuSprAnimKill(var_r31->unk08);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
var_r31->unk04++;
|
||||||
|
var_r29[0][1] = var_r31 - espanim;
|
||||||
|
HuSprGrpMemberSet(gid, var_r29[0][0], temp_r25);
|
||||||
|
return var_r28;
|
||||||
|
}
|
||||||
|
|
||||||
|
void espKill(s16 arg0) {
|
||||||
|
HuSprGrpMemberKill(gid, esprite[arg0][0]);
|
||||||
|
espanim[esprite[arg0][1]].unk04--;
|
||||||
|
esprite[arg0][1] = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
s16 espGrpIDGet(void) {
|
||||||
|
return gid;
|
||||||
|
}
|
||||||
|
|
||||||
|
void espDispOn(s16 arg0) {
|
||||||
|
HuSprAttrReset(gid, esprite[arg0][0], 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espDispOff(s16 arg0) {
|
||||||
|
HuSprAttrSet(gid, esprite[arg0][0], 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espAttrSet(s16 arg0, u16 arg1) {
|
||||||
|
HuSprAttrSet(gid, esprite[arg0][0], arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espAttrReset(s16 arg0, u16 arg1) {
|
||||||
|
HuSprAttrReset(gid, esprite[arg0][0], arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espPosSet(s16 arg0, float arg1, float arg2) {
|
||||||
|
HuSprPosSet(gid, esprite[arg0][0], arg1, arg2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espScaleSet(s16 arg0, float arg1, float arg2) {
|
||||||
|
HuSprScaleSet(gid, esprite[arg0][0], arg1, arg2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espZRotSet(s16 arg0, float arg1) {
|
||||||
|
HuSprZRotSet(gid, esprite[arg0][0], arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espTPLvlSet(s16 arg0, float arg1) {
|
||||||
|
HuSprTPLvlSet(gid, esprite[arg0][0], arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espColorSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3) {
|
||||||
|
HuSprColorSet(gid, esprite[arg0][0], arg1, arg2, arg3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espSpeedSet(s16 arg0, float arg1) {
|
||||||
|
HuSprSpeedSet(gid, esprite[arg0][0], arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espBankSet(s16 arg0, s16 arg1) {
|
||||||
|
HuSprBankSet(gid, esprite[arg0][0], arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espDrawNoSet(s16 arg0, s16 arg1) {
|
||||||
|
HuSprDrawNoSet(gid, esprite[arg0][0], arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void espPriSet(s16 arg0, s16 arg1) {
|
||||||
|
HuSprPriSet(gid, esprite[arg0][0], arg1);
|
||||||
|
}
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
#include "game/init.h"
|
#include "game/init.h"
|
||||||
#include "game/memory.h"
|
#include "game/memory.h"
|
||||||
#include "game/perf.h"
|
#include "game/perf.h"
|
||||||
|
#include "game/ShapeExec.h"
|
||||||
#include "game/sprite.h"
|
#include "game/sprite.h"
|
||||||
#include "dolphin/gx/GXVert.h"
|
#include "dolphin/gx/GXVert.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include "game/hsfload.h"
|
#include "game/hsfload.h"
|
||||||
#include "game/hsfman.h"
|
#include "game/hsfman.h"
|
||||||
#include "game/init.h"
|
#include "game/init.h"
|
||||||
|
#include "game/ShapeExec.h"
|
||||||
|
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
@ -12,8 +13,6 @@
|
||||||
static s32 SearchObjectIndex(HsfData *arg0, u32 arg1);
|
static s32 SearchObjectIndex(HsfData *arg0, u32 arg1);
|
||||||
static s32 SearchAttributeIndex(HsfData *arg0, u32 arg1);
|
static s32 SearchAttributeIndex(HsfData *arg0, u32 arg1);
|
||||||
|
|
||||||
void ShapeProc(HsfData*);
|
|
||||||
|
|
||||||
MotionData Hu3DMotion[256];
|
MotionData Hu3DMotion[256];
|
||||||
|
|
||||||
static HsfBitmap *bitMapPtr;
|
static HsfBitmap *bitMapPtr;
|
||||||
|
|
|
||||||
74
src/game/jmp.c
Executable file
74
src/game/jmp.c
Executable file
|
|
@ -0,0 +1,74 @@
|
||||||
|
#include "game/jmp.h"
|
||||||
|
|
||||||
|
int gcsetjmp(register jmp_buf *jump) {
|
||||||
|
// clang-format off
|
||||||
|
asm {
|
||||||
|
mflr r5
|
||||||
|
mfcr r6
|
||||||
|
stw r5, jump->lr
|
||||||
|
stw r6, jump->cr
|
||||||
|
stw r1, jump->sp
|
||||||
|
stw r2, jump->r2
|
||||||
|
stmw r13, jump->regs[0]
|
||||||
|
mffs f0
|
||||||
|
stfd f14, jump->flt_regs[0]
|
||||||
|
stfd f15, jump->flt_regs[1]
|
||||||
|
stfd f16, jump->flt_regs[2]
|
||||||
|
stfd f17, jump->flt_regs[3]
|
||||||
|
stfd f18, jump->flt_regs[4]
|
||||||
|
stfd f19, jump->flt_regs[5]
|
||||||
|
stfd f20, jump->flt_regs[6]
|
||||||
|
stfd f21, jump->flt_regs[7]
|
||||||
|
stfd f22, jump->flt_regs[8]
|
||||||
|
stfd f23, jump->flt_regs[9]
|
||||||
|
stfd f24, jump->flt_regs[10]
|
||||||
|
stfd f25, jump->flt_regs[11]
|
||||||
|
stfd f26, jump->flt_regs[12]
|
||||||
|
stfd f27, jump->flt_regs[13]
|
||||||
|
stfd f28, jump->flt_regs[14]
|
||||||
|
stfd f29, jump->flt_regs[15]
|
||||||
|
stfd f30, jump->flt_regs[16]
|
||||||
|
stfd f31, jump->flt_regs[17]
|
||||||
|
stfd f0, jump->flt_regs[18]
|
||||||
|
}
|
||||||
|
// clang-format on
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
asm int gclongjmp(register jmp_buf *jump, register int status) {
|
||||||
|
nofralloc
|
||||||
|
lwz r5, jump->lr
|
||||||
|
lwz r6, jump->cr
|
||||||
|
mtlr r5
|
||||||
|
mtcrf 255, r6
|
||||||
|
lwz r1, jump->sp
|
||||||
|
lwz r2, jump->r2
|
||||||
|
lmw r13, jump->regs[0]
|
||||||
|
lfd f14, jump->flt_regs[0]
|
||||||
|
lfd f15, jump->flt_regs[1]
|
||||||
|
lfd f16, jump->flt_regs[2]
|
||||||
|
lfd f17, jump->flt_regs[3]
|
||||||
|
lfd f18, jump->flt_regs[4]
|
||||||
|
lfd f19, jump->flt_regs[5]
|
||||||
|
lfd f20, jump->flt_regs[6]
|
||||||
|
lfd f21, jump->flt_regs[7]
|
||||||
|
lfd f22, jump->flt_regs[8]
|
||||||
|
lfd f23, jump->flt_regs[9]
|
||||||
|
lfd f24, jump->flt_regs[10]
|
||||||
|
lfd f25, jump->flt_regs[11]
|
||||||
|
lfd f26, jump->flt_regs[12]
|
||||||
|
lfd f27, jump->flt_regs[13]
|
||||||
|
lfd f28, jump->flt_regs[14]
|
||||||
|
lfd f29, jump->flt_regs[15]
|
||||||
|
lfd f30, jump->flt_regs[16]
|
||||||
|
lfd f0, jump->flt_regs[18]
|
||||||
|
lfd f31, jump->flt_regs[17]
|
||||||
|
cmpwi status, 0
|
||||||
|
mr r3, status
|
||||||
|
mtfsf 255, f0
|
||||||
|
bnelr
|
||||||
|
li r3, 1
|
||||||
|
blr
|
||||||
|
}
|
||||||
|
// clang-format on
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "game/audio.h"
|
#include "game/audio.h"
|
||||||
|
#include "game/esprite.h"
|
||||||
#include "game/hsfdraw.h"
|
#include "game/hsfdraw.h"
|
||||||
#include "game/hsfman.h"
|
#include "game/hsfman.h"
|
||||||
#include "game/printfunc.h"
|
#include "game/printfunc.h"
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,6 @@
|
||||||
|
|
||||||
#define PROCESS_MEMORY_RETADDR 0xA5A5A5A5
|
#define PROCESS_MEMORY_RETADDR 0xA5A5A5A5
|
||||||
|
|
||||||
extern int gcsetjmp(jmp_buf *jump);
|
|
||||||
extern void gclongjmp(jmp_buf *jump, int status);
|
|
||||||
|
|
||||||
#define EXEC_NORMAL 0
|
#define EXEC_NORMAL 0
|
||||||
#define EXEC_SLEEP 1
|
#define EXEC_SLEEP 1
|
||||||
#define EXEC_CHILDWATCH 2
|
#define EXEC_CHILDWATCH 2
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue