Merge pull request #257 from abnormalhare/main

w05Dll/hotel + header
This commit is contained in:
gamemasterplc 2024-04-06 13:27:07 -05:00 committed by GitHub
commit c55b33a62b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 493 additions and 28 deletions

60
include/REL/w05Dll.h Normal file
View file

@ -0,0 +1,60 @@
#include "dolphin/types.h"
#include "game/board/main.h"
#include "game/board/map_object.h"
// functions
void BoardCreate(void);
void BoardDestroy(void);
void fn_1_744(void);
void fn_1_788(void);
s32 fn_1_78C(void);
s32 fn_1_82C(void);
void fn_1_92C(void);
void fn_1_950(void);
void fn_1_954(void);
void fn_1_D4C(void);
void fn_1_D84(void);
void fn_1_E04(void);
void fn_1_E40(void);
s32 fn_1_1114(void);
s32 fn_1_1208(s16, f32, f32);
void fn_1_13D4(void);
void fn_1_14D0(void);
s16 fn_1_14FC(void);
void fn_1_155C(void);
void fn_1_1E44(void);
// structs
typedef struct bitcopy {
u32 unk_00;
s8 unk_04;
} bitcopy;
// data
extern BoardMapObject lbl_1_data_0[7];
extern s16 lbl_1_data_118;
extern s16 lbl_1_data_11A;
extern s16 lbl_1_data_11C;
extern s16 lbl_1_data_11E;
extern s16 lbl_1_data_120;
extern s32 lbl_1_data_124[8];
extern s32 lbl_1_data_144[2];
extern s32 lbl_1_data_14C;
extern s32 lbl_1_data_150[5];
extern s16 lbl_1_data_164;
extern u32 lbl_1_data_170[4];
extern s32 lbl_1_data_180;
extern s16 lbl_1_data_184;
extern s32 lbl_1_data_188[4];
extern s32 lbl_1_data_198[2];
// bss
extern s16 lbl_1_bss_28;
extern s16 lbl_1_bss_14[7];
extern s32* lbl_1_bss_10;
extern s16 lbl_1_bss_8[4];
extern Process* lbl_1_bss_4;
extern bitcopy* lbl_1_bss_0;

View file

@ -9,7 +9,6 @@
#include "game/object.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/gamework_data.h"
#include "game/board/main.h"
#include "game/board/space.h"
#include "game/board/ui.h"

430
src/REL/w05Dll/hotel.c Normal file
View file

@ -0,0 +1,430 @@
#include "REL/w05Dll.h"
#include "game/hsfdraw.h"
#include "game/audio.h"
#include "game/pad.h"
#include "game/objsub.h"
#include "game/wipe.h"
#include "game/board/model.h"
#include "game/board/player.h"
#include "game/board/window.h"
// data
s32 lbl_1_data_150[5] = {
0x790021, 0x790022, 0x790023, 0x790024, 0x790025,
};
s16 lbl_1_data_164 = 0xFFFF;
// bss
s16 lbl_1_bss_28;
void fn_1_13D4(void) {
Vec sp8;
ModelData* temp_r31;
lbl_1_data_164 = BoardModelCreate(lbl_1_data_150[lbl_1_bss_0->unk_04], NULL, 0);
BoardModelAttrSet(lbl_1_data_164, 0x40000001);
temp_r31 = &Hu3DData[BoardModelIDGet(lbl_1_data_118)];
Hu3DMotionExec(BoardModelIDGet(lbl_1_data_118), temp_r31->unk_08, 0.0f, 0);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp8);
BoardModelPosSetV(lbl_1_data_164, &sp8);
}
void fn_1_14D0(void) {
BoardModelKill(lbl_1_data_164);
}
u32 lbl_1_data_170[4] = { 0, 10, 25, 40 };
s32 lbl_1_data_180 = 0x79000C;
s16 fn_1_14FC(void) {
s16 var_r31;
for (var_r31 = 0; var_r31 < 4;var_r31++) {
if (lbl_1_bss_0->unk_00 <= lbl_1_data_170[var_r31]) {
break;
}
}
return var_r31;
}
void fn_1_155C(void) {
Vec sp64;
Vec sp58;
Vec sp4C;
Vec sp40;
Vec sp34;
Vec sp28;
char sp18[16];
Vec spC;
char sp8[4];
s32 var_r27;
ModelData* temp_r25;
f32 temp_f30;
f32 temp_f31;
s16 var_r26;
s16 temp_r28;
s16 var_r30;
u32 var_r31;
lbl_1_bss_28 = GWSystem.player_curr;
BoardDiceDigit2DShowSet(0);
temp_r28 = BoardModelMotionCreate(lbl_1_bss_14[4], lbl_1_data_180);
temp_f30 = BoardPlayerRotYGet(lbl_1_bss_28);
BoardPlayerPosGet(lbl_1_bss_28, &sp58);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp64);
temp_f31 = 180.0 * (atan2((sp64.x - sp58.x), (sp64.z - sp58.z)) / M_PI);
BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f31, 0xF);
BoardCameraViewSet(2);
while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) {
HuPrcVSleep();
}
BoardCameraMotionWait();
BoardModelPosGet(lbl_1_bss_14[4], &sp4C);
sp40 = sp28 = sp4C;
if (sp58.x > sp28.x) {
sp28.x += 650.0f;
BoardModelRotYSet(lbl_1_bss_14[4], 90.0f);
} else {
sp28.x -= 650.0f;
BoardModelRotYSet(lbl_1_bss_14[4], -90.0f);
}
BoardModelMotionStart(lbl_1_bss_14[4], temp_r28, 0x40000001);
PSVECSubtract(&sp28, &sp40, &sp34);
PSVECScale(&sp34, &sp34, 0.018518519f);
for (var_r31 = 0; var_r31 < 0x36; var_r31++) {
PSVECAdd(&sp40, &sp34, &sp40);
BoardModelPosSetV(lbl_1_bss_14[4], &sp40);
HuPrcVSleep();
}
BoardModelPosSetV(lbl_1_bss_14[4], &sp28);
temp_f31 = (180.0 * (atan2((sp58.x - sp28.x), (sp58.z - sp28.z)) / M_PI));
while (fn_1_1208(lbl_1_bss_14[4], temp_f31, 10.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001);
var_r30 = BoardPlayerCoinsGet(lbl_1_bss_28);
sprintf(sp18, "%d", lbl_1_bss_0->unk_00);
if (var_r30 > 0) {
if (var_r30 >= 5) {
var_r27 = 0x270001;
var_r30 = 5;
} else {
var_r27 = 0x270002;
}
sprintf(sp8, "%d", var_r30);
BoardWinCreate(2, var_r27, 7);
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp8), 1);
} else {
BoardWinCreate(2, 0x270003, 7);
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp18), 0);
}
BoardWinWait();
BoardWinKill();
if (var_r30 > 0) {
for (var_r31 = 0; (s32) var_r31 < var_r30; var_r31++) {
BoardPlayerCoinsAdd(lbl_1_bss_28, -1);
HuAudFXPlay(0xE);
HuPrcSleep(6);
}
HuAudFXPlay(0xF);
lbl_1_bss_0->unk_00 += var_r30;
sprintf(sp18, "%d", lbl_1_bss_0->unk_00);
BoardWinCreate(2, 0x270016, 7);
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp18), 0);
BoardWinWait();
BoardWinKill();
}
var_r26 = fn_1_14FC();
if (var_r26 != lbl_1_bss_0->unk_04) {
lbl_1_bss_0->unk_04 = var_r26;
BoardCameraTargetModelSet(lbl_1_data_164);
BoardCameraOffsetSet(0.0f, 200.0f, 0.0f);
BoardCameraMotionWait();
HuPrcSleep(0x3C);
WipeColorSet(0, 0, 0);
WipeCreate(2, 0, 0x30);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
fn_1_14D0();
fn_1_13D4();
WipeCreate(1, 0, 0x30);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
HuPrcSleep(0x3C);
BoardCameraTargetPlayerSet(lbl_1_bss_28);
BoardCameraMotionWait();
}
BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f30, 0xF);
BoardModelPosGet(lbl_1_bss_14[4], &sp40);
sp28 = sp4C;
if (sp58.x > sp28.x) {
BoardModelRotYSet(lbl_1_bss_14[4], -90.0f);
} else {
BoardModelRotYSet(lbl_1_bss_14[4], 90.0f);
}
BoardModelMotionStart(lbl_1_bss_14[4], temp_r28, 0x40000001);
PSVECSubtract(&sp28, &sp40, &sp34);
PSVECScale(&sp34, &sp34, 0.033333335f);
for (var_r31 = 0; var_r31 < 0x1E; var_r31++) {
PSVECAdd(&sp40, &sp34, &sp40);
BoardModelPosSetV(lbl_1_bss_14[4], &sp40);
HuPrcVSleep();
}
BoardModelPosSetV(lbl_1_bss_14[4], &sp28);
while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001);
BoardCameraViewSet(1);
while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) {
HuPrcVSleep();
}
BoardCameraMotionWait();
BoardModelMotionKill(lbl_1_bss_14[4], temp_r28);
BoardDiceDigit2DShowSet(1);
}
s16 lbl_1_data_184 = 0x2564;
s32 lbl_1_data_188[4] = { 0x79000C, 0x79000E, 0x79000F, 0x790010 };
s32 lbl_1_data_198[2] = { 28, 25 };
void fn_1_1E44(void) {
char sp84[0x10];
char sp74[0x10];
Vec sp68;
f32 sp64;
f32 sp60;
Vec sp5C;
Vec sp50;
Vec sp44;
Vec sp38;
f32 sp34;
f32 sp30;
Vec sp2C;
s16 sp1C[4][2];
Vec sp10;
s16 sp8[4];
ModelData* temp_r25;
f32 temp_f31;
f32 temp;
s16 temp_r3;
s16 var_r26;
s16 var_r27;
s32 var_r28;
s32 var_r31;
s32 temp_r24;
s32 var_r30;
lbl_1_bss_28 = GWSystem.player_curr;
BoardDiceDigit2DShowSet(0);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
sp8[var_r31] = BoardModelMotionCreate(lbl_1_bss_14[4], lbl_1_data_188[var_r31]);
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
for (var_r30 = 0; var_r30 < 2; var_r30++) {
sp1C[var_r31][var_r30] = BoardPlayerMotionCreate(var_r31, lbl_1_data_198[var_r30] | lbl_1_data_124[GWPlayer[var_r31].character]);
}
}
BoardCameraViewSet(2);
BoardCameraMotionWait();
BoardPlayerPosGet(lbl_1_bss_28, &sp50);
BoardModelPosGet(lbl_1_bss_14[4], &sp38);
sp5C = sp2C = sp38;
if (sp50.x > sp2C.x) {
sp2C.x += 520.0f;
BoardModelRotYSet(lbl_1_bss_14[4], 90.0f);
} else {
sp2C.x -= 520.0f;
BoardModelRotYSet(lbl_1_bss_14[4], -90.0f);
}
BoardModelMotionStart(lbl_1_bss_14[4], sp8[0], 0x40000001);
PSVECSubtract(&sp2C, &sp5C, &sp44);
PSVECScale(&sp44, &sp44, 0.018518519f);
for (var_r31 = 0; var_r31 < 0x36U; var_r31++) {
PSVECAdd(&sp5C, &sp44, &sp5C);
BoardModelPosSetV(lbl_1_bss_14[4], &sp5C);
HuPrcVSleep();
}
BoardModelPosSetV(lbl_1_bss_14[4], &sp2C);
temp_f31 = (180.0 * (atan2((sp50.x - sp2C.x), (sp50.z - sp2C.z)) / M_PI));
while (fn_1_1208(lbl_1_bss_14[4], temp_f31, 10.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001);
temp_f31 = 180.0 * (atan2((sp2C.x - sp50.x), (sp2C.z - sp50.z)) / M_PI);
BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f31, 0xF);
while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) {
HuPrcVSleep();
}
if (lbl_1_bss_0->unk_00 == 0) {
BoardWinCreate(2, 0x270005, 7);
BoardWinWait();
BoardWinKill();
} else {
temp_r3 = BoardModelCreate(0x790004, NULL, 0);
BoardModelVisibilitySet(temp_r3, 0);
BoardModelLayerSet(temp_r3, 2U);
if (lbl_1_bss_0->unk_00 > BoardPlayerCoinsGet(lbl_1_bss_28)) {
var_r28 = BoardPlayerCoinsGet(lbl_1_bss_28);
} else {
var_r28 = lbl_1_bss_0->unk_00;
}
if (var_r28 < 0x14) {
var_r26 = 6;
} else if (var_r28 < 0x32) {
var_r26 = 3;
} else if (var_r28 < 0x64) {
var_r26 = 2;
} else {
var_r26 = 0;
}
sprintf(&sp84, "%d", lbl_1_bss_0->unk_00);
sprintf(&sp74, "%d", var_r28);
if (var_r28 == lbl_1_bss_0->unk_00) {
BoardWinCreate(2, 0x270004, 7);
} else {
BoardWinCreate(2, 0x270017, 7);
}
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp84), 0);
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp74), 1);
BoardWinWait();
BoardWinKill();
for (var_r31 = 0; var_r31 < var_r28; var_r31++) {
BoardPlayerCoinsAdd(lbl_1_bss_28, -1);
HuAudFXPlay(0xE);
HuPrcSleep(var_r26);
}
HuAudFXPlay(0xF);
HuPrcSleep(0x1E);
BoardCameraViewSet(1);
BoardCameraTargetModelSet(lbl_1_data_164);
BoardCameraMotionWait();
HuPrcSleep(0x1E);
omVibrate(lbl_1_bss_28, 0x7FFF, 0xC, 0);
BoardCameraQuakeSet(0x8C, 250.0f);
temp_r24 = HuAudFXPlay(0x482);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerMotBlendSet(var_r31, 0, 0xF);
}
while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionStart(lbl_1_bss_14[4], sp8[1], 0U);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerVoiceEnableSet(var_r31, sp1C[var_r31][0], 0);
BoardPlayerMotionStart(var_r31, sp1C[var_r31][0], 0);
}
HuAudPlayerVoicePlay(lbl_1_bss_28, 0x12E);
HuPrcSleep(0x5A);
HuAudFXStop(temp_r24);
HuAudFXPlay(0x483);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "tunami1", &sp68);
BoardModelPosSetV(temp_r3, &sp68);
BoardModelVisibilitySet(temp_r3, 1);
BoardModelMotionTimeSet(temp_r3, 0.0f);
HuPrcSleep(0x1E);
lbl_1_bss_0->unk_00 = 0;
lbl_1_bss_0->unk_04 = fn_1_14FC();
BoardModelKill(lbl_1_data_164);
lbl_1_data_164 = BoardModelCreate(lbl_1_data_150[lbl_1_bss_0->unk_04], NULL, 0);
BoardModelAttrSet(lbl_1_data_164, 0x40000001);
temp_r25 = &Hu3DData[BoardModelIDGet(lbl_1_data_118)];
Hu3DMotionExec(BoardModelIDGet(lbl_1_data_118), temp_r25->unk_08, 0.0f, 0);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp10);
BoardModelPosSetV(lbl_1_data_164, &sp10);
BoardModelMotionStart(lbl_1_bss_14[4], sp8[2], 0x40000001U);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerVoiceEnableSet(var_r31, sp1C[var_r31][0], 1);
if (var_r31 != lbl_1_bss_28) {
BoardPlayerVoiceEnableSet(var_r31, 6, 0);
}
BoardPlayerMotionStart(var_r31, 6, 0x40000001);
}
while (BoardModelMotionTimeGet(temp_r3) < BoardModelMotionMaxTimeGet(temp_r3)) {
HuPrcVSleep();
}
BoardModelKill(temp_r3);
HuPadRumbleStop(GWPlayer[lbl_1_bss_28].port);
BoardWinCreate(0, 0x270006, -1);
BoardWinWait();
BoardWinKill();
HuPrcSleep(0x1E);
BoardModelMotionShiftSet(lbl_1_bss_14[4], sp8[3], 0.0f, 5.0f, 0U);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerMotionShiftSet(var_r31, sp1C[var_r31][1], 0.0f, 5.0f, 0);
BoardPlayerVoiceEnableSet(var_r31, 6, 1);
}
HuPrcSleep(0x23);
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerMotionShiftSet(var_r31, 1, 0.0f, 5.0f, 0x40000001);
}
}
BoardCameraViewSet(1);
BoardPlayerPosGet(lbl_1_bss_28, &sp50);
BoardModelPosGet(lbl_1_bss_14[4], &sp5C);
sp2C = sp38;
if (sp50.x > sp2C.x) {
BoardModelRotYSet(lbl_1_bss_14[4], -90.0f);
} else {
BoardModelRotYSet(lbl_1_bss_14[4], 90.0f);
}
BoardModelMotionStart(lbl_1_bss_14[4], sp8[0], 0x40000001U);
PSVECSubtract(&sp38, &sp5C, &sp44);
PSVECScale(&sp44, &sp44, 0.055555556);
for (var_r31 = 0; var_r31 < 0x12U; var_r31++) {
PSVECAdd(&sp5C, &sp44, &sp5C);
BoardModelPosSetV(lbl_1_bss_14[4], &sp5C);
HuPrcVSleep();
}
BoardModelPosSetV(lbl_1_bss_14[4], &sp38);
while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001U);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardModelMotionKill(lbl_1_bss_14[4], sp8[var_r31]);
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
for (var_r30 = 0; var_r30 < 2; var_r30++) {
BoardPlayerMotionKill(var_r31, sp1C[var_r31][var_r30]);
}
}
BoardCameraMotionWait();
BoardPlayerMotBlendSet(lbl_1_bss_28, 0, 0xF);
while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) {
HuPrcVSleep();
}
}

View file

@ -1,4 +1,4 @@
#include "dolphin.h"
#include "REL/w05Dll.h"
#include "game/gamework_data.h"
#include "game/chrman.h"
@ -7,8 +7,6 @@
#include "game/board/boo_house.h"
#include "game/board/com.h"
#include "game/board/lottery.h"
#include "game/board/main.h"
#include "game/board/map_object.h"
#include "game/board/model.h"
#include "game/board/player.h"
#include "game/board/shop.h"
@ -18,10 +16,6 @@
// frand.h
extern u32 frandmod(u32);
// #include "REL/w05Dll/hotel.h"
extern void fn_1_13D4(void);
extern void fn_1_155C(void);
extern void fn_1_1E44(void);
// #include "REL/w05Dll/monkey.h"
extern void fn_1_2B40(void);
extern void fn_1_2C7C(s32);
@ -78,7 +72,6 @@ BoardMapObject lbl_1_data_0[7] = {
0x79000A
},
};
s16 lbl_1_data_118 = 0xFFFF;
s16 lbl_1_data_11A = 0xFFFF;
s16 lbl_1_data_11C = 0xFFFF;
@ -93,24 +86,7 @@ s16 lbl_1_bss_14[7];
s32* lbl_1_bss_10;
s16 lbl_1_bss_8[4];
Process* lbl_1_bss_4;
u8* lbl_1_bss_0;
// functions
void BoardCreate(void);
void BoardDestroy(void);
void fn_1_744(void);
void fn_1_788(void);
s32 fn_1_78C(void);
s32 fn_1_82C(void);
void fn_1_92C(void);
void fn_1_950(void);
void fn_1_954(void);
void fn_1_D4C(void);
void fn_1_D84(void);
void fn_1_E04(void);
void fn_1_E40(void);
s32 fn_1_1114(void);
s32 fn_1_1208(s16, f32, f32);
bitcopy* lbl_1_bss_0;
void BoardCreate(void) {
s32 sp8;
@ -118,7 +94,7 @@ void BoardCreate(void) {
BoardMapObject* temp_r30;
sp8 = GWBoardGet();
lbl_1_bss_0 = GWSystem.board_data;
lbl_1_bss_0 = (bitcopy*) GWSystem.board_data;
BoardSpaceInit(0x790000);
lbl_1_data_118 = BoardModelCreate(0x790001, NULL, 0);
lbl_1_data_120 = BoardModelCreate(0x790002, NULL, 0);