Merge branch 'Rainchus:main' into main

This commit is contained in:
CreateSource 2024-03-06 19:00:13 -05:00 committed by GitHub
commit 2ca22f508c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 3936 additions and 727 deletions

4
.flake8 Normal file
View file

@ -0,0 +1,4 @@
[flake8]
# E203: whitespace before ':'
# E501: line too long
extend-ignore = E203,E501

View file

@ -1,13 +1,15 @@
fn_1_0 = .text:0x00000000; // type:function size:0x4 fn_1_0 = .text:0x00000000; // type:function size:0x4
fn_1_4 = .text:0x00000004; // type:function size:0x284 safMarioEyeDim = .text:0x00000004; // type:function size:0x284
fn_1_288 = .text:0x00000288; // type:function size:0x124 safSaveTest = .text:0x00000288; // type:function size:0x124
_ctors = .ctors:0x00000000; // type:label scope:global _ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global
lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float
lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:double
lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float
lbl_1_data_4 = .data:0x00000004; // type:object size:0xE data:string lbl_1_data_0 = .data:0x00000000; // type:object size:0x4
lbl_1_data_12 = .data:0x00000012; // type:object size:0xB data:string lbl_1_data_4 = .data:0x00000004; // type:object size:0xE scope:local data:string
lbl_1_data_1D = .data:0x0000001D; // type:object size:0xE data:string lbl_1_data_12 = .data:0x00000012; // type:object size:0xB scope:local data:string
lbl_1_data_2B = .data:0x0000002B; // type:object size:0xE data:string lbl_1_data_1D = .data:0x0000001D; // type:object size:0xE scope:local data:string
lbl_1_data_2B = .data:0x0000002B; // type:object size:0xE scope:local data:string
lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x300

View file

@ -1143,7 +1143,7 @@ BoardPlayerMotionSpeedSet = .text:0x80063AFC; // type:function size:0x80
BoardPlayerMotionTimeSet = .text:0x80063B7C; // type:function size:0x80 BoardPlayerMotionTimeSet = .text:0x80063B7C; // type:function size:0x80
BoardPlayerMotionTimeGet = .text:0x80063BFC; // type:function size:0x78 BoardPlayerMotionTimeGet = .text:0x80063BFC; // type:function size:0x78
BoardPlayerMotionMaxTimeGet = .text:0x80063C74; // type:function size:0x78 BoardPlayerMotionMaxTimeGet = .text:0x80063C74; // type:function size:0x78
BoardPlayerMotionTimeRangeSet = .text:0x80063CEC; // type:function size:0xA0 BoardPlayerMotionStartEndSet = .text:0x80063CEC; // type:function size:0xA0
BoardPlayerModelAttrSet = .text:0x80063D8C; // type:function size:0x80 BoardPlayerModelAttrSet = .text:0x80063D8C; // type:function size:0x80
BoardPlayerModelAttrReset = .text:0x80063E0C; // type:function size:0x80 BoardPlayerModelAttrReset = .text:0x80063E0C; // type:function size:0x80
BoardPlayerCoinsSet = .text:0x80063E8C; // type:function size:0x34 BoardPlayerCoinsSet = .text:0x80063E8C; // type:function size:0x34
@ -1798,8 +1798,8 @@ ExecComFortuneWin = .text:0x8009DA78; // type:function size:0x18C scope:local
ConfigComFortune = .text:0x8009DC04; // type:function size:0x20C scope:local ConfigComFortune = .text:0x8009DC04; // type:function size:0x20C scope:local
ComFortuneAddStar = .text:0x8009DE10; // type:function size:0x78 scope:local ComFortuneAddStar = .text:0x8009DE10; // type:function size:0x78 scope:local
ComFortuneAddCoin = .text:0x8009DE88; // type:function size:0x78 scope:local ComFortuneAddCoin = .text:0x8009DE88; // type:function size:0x78 scope:local
ComFortuneSwapCoin = .text:0x8009DF00; // type:function size:0x68 ComFortuneSwapCoin = .text:0x8009DF00; // type:function size:0x68 scope:local
ComFortuneSwapStar = .text:0x8009DF68; // type:function size:0x68 ComFortuneSwapStar = .text:0x8009DF68; // type:function size:0x68 scope:local
BoardBooCreate = .text:0x8009DFD0; // type:function size:0x11C BoardBooCreate = .text:0x8009DFD0; // type:function size:0x11C
BoardBooKill = .text:0x8009E0EC; // type:function size:0x2C BoardBooKill = .text:0x8009E0EC; // type:function size:0x2C
BoardBooStealTypeSet = .text:0x8009E118; // type:function size:0x2A8 BoardBooStealTypeSet = .text:0x8009E118; // type:function size:0x2A8
@ -5212,9 +5212,9 @@ lbl_80139DA8 = .data:0x80139DA8; // type:object size:0xA data:string
itemPrioTbl = .data:0x80139DB2; // type:object size:0x8C scope:local itemPrioTbl = .data:0x80139DB2; // type:object size:0x8C scope:local
rankItemGroupTbl = .data:0x80139E3E; // type:object size:0x18 scope:local rankItemGroupTbl = .data:0x80139E3E; // type:object size:0x18 scope:local
cursorPosTbl = .data:0x80139E58; // type:object size:0x30 scope:local data:float cursorPosTbl = .data:0x80139E58; // type:object size:0x30 scope:local data:float
comInputDraw1 = .data:0x80139E88; // type:object size:0xEE scope:local comInputDraw1 = .data:0x80139E88; // type:object size:0xEE scope:local data:2byte
comInputDraw2 = .data:0x80139F76; // type:object size:0xBA scope:local comInputDraw2 = .data:0x80139F76; // type:object size:0xBA scope:local data:2byte
comInputBall = .data:0x8013A030; // type:object size:0xCE scope:local comInputBall = .data:0x8013A030; // type:object size:0xCE scope:local data:2byte
lbl_8013A0FE = .data:0x8013A0FE; // type:object size:0xC data:string lbl_8013A0FE = .data:0x8013A0FE; // type:object size:0xC data:string
lbl_8013A10A = .data:0x8013A10A; // type:object size:0xA data:string lbl_8013A10A = .data:0x8013A10A; // type:object size:0xA data:string
lbl_8013A114 = .data:0x8013A114; // type:object size:0x9 data:string lbl_8013A114 = .data:0x8013A114; // type:object size:0x9 data:string
@ -5903,7 +5903,7 @@ lotterySpr = .sdata:0x801D3732; // type:object size:0x2 scope:local data:2byte
lotteryInstWin = .sdata:0x801D3734; // type:object size:0x2 scope:local data:2byte lotteryInstWin = .sdata:0x801D3734; // type:object size:0x2 scope:local data:2byte
gripMdl = .sdata:0x801D3736; // type:object size:0x4 scope:local data:2byte gripMdl = .sdata:0x801D3736; // type:object size:0x4 scope:local data:2byte
turnMot = .sdata:0x801D373A; // type:object size:0x2 scope:local data:2byte turnMot = .sdata:0x801D373A; // type:object size:0x2 scope:local data:2byte
ballMdl = .sdata:0x801D373C; // type:object size:0x8 scope:local ballMdl = .sdata:0x801D373C; // type:object size:0x8 scope:local data:2byte
loseMot = .sdata:0x801D3744; // type:object size:0x2 scope:local data:2byte loseMot = .sdata:0x801D3744; // type:object size:0x2 scope:local data:2byte
ticketSprGrp = .sdata:0x801D3746; // type:object size:0x2 scope:local data:2byte ticketSprGrp = .sdata:0x801D3746; // type:object size:0x2 scope:local data:2byte
warpSpringMdl = .sdata:0x801D3748; // type:object size:0x2 scope:local data:2byte warpSpringMdl = .sdata:0x801D3748; // type:object size:0x2 scope:local data:2byte

View file

@ -117,14 +117,22 @@ if not is_windows():
config.wrapper = args.wrapper config.wrapper = args.wrapper
# Tool versions # Tool versions
config.binutils_tag = "2.42-1"
config.compilers_tag = "20231018" config.compilers_tag = "20231018"
config.dtk_tag = "v0.6.3" config.dtk_tag = "v0.7.4"
config.sjiswrap_tag = "v1.1.1" config.sjiswrap_tag = "v1.1.1"
config.wibo_tag = "0.6.3" config.wibo_tag = "0.6.11"
# Project # Project
config.config_path = Path("config") / config.version / "config.yml" config.config_path = Path("config") / config.version / "config.yml"
config.check_sha_path = Path("config") / config.version / "build.sha1" config.check_sha_path = Path("config") / config.version / "build.sha1"
config.asflags = [
"-mgekko",
"--strip-local-absolute",
"-I include",
f"-I build/{config.version}/include",
f"--defsym version={version_num}",
]
config.ldflags = [ config.ldflags = [
"-fp hardware", "-fp hardware",
"-nodefaults", "-nodefaults",
@ -366,9 +374,9 @@ config.libs = [
Object(Matching, "game/board/audio.c"), Object(Matching, "game/board/audio.c"),
Object(Matching, "game/board/com.c"), Object(Matching, "game/board/com.c"),
Object(Matching, "game/board/view.c"), Object(Matching, "game/board/view.c"),
Object(NonMatching, "game/board/space.c"), Object(Matching, "game/board/space.c"),
Object(NonMatching, "game/board/shop.c"), Object(NonMatching, "game/board/shop.c"),
Object(NonMatching, "game/board/lottery.c"), Object(Matching, "game/board/lottery.c"),
Object(Matching, "game/board/basic_space.c"), Object(Matching, "game/board/basic_space.c"),
Object(Matching, "game/board/warp.c"), Object(Matching, "game/board/warp.c"),
Object(NonMatching, "game/board/char_wheel.c"), Object(NonMatching, "game/board/char_wheel.c"),
@ -377,7 +385,7 @@ config.libs = [
Object(Matching, "game/board/roll.c"), Object(Matching, "game/board/roll.c"),
Object(Matching, "game/board/ui.c"), Object(Matching, "game/board/ui.c"),
Object(Matching, "game/board/block.c"), Object(Matching, "game/board/block.c"),
Object(NonMatching, "game/board/item.c"), Object(Matching, "game/board/item.c"),
Object(NonMatching, "game/board/bowser.c"), Object(NonMatching, "game/board/bowser.c"),
Object(NonMatching, "game/board/battle.c"), Object(NonMatching, "game/board/battle.c"),
Object(NonMatching, "game/board/fortune.c"), Object(NonMatching, "game/board/fortune.c"),
@ -992,7 +1000,7 @@ config.libs = [
), ),
Rel('safDll', Rel('safDll',
objects = { objects = {
Object(NonMatching, "REL/safDll/main.c"), Object(Matching, "REL/safDll/main.c"),
} }
), ),
Rel('selmenuDll', Rel('selmenuDll',

View file

@ -14,26 +14,12 @@ typedef void (*BoardLightHook)(void);
s32 BoardSpacePosGet(s32, s32, Vec*); s32 BoardSpacePosGet(s32, s32, Vec*);
void BoardShopTutorialExec(s32); void BoardShopTutorialExec(s32);
void BoardLotteryTutorialExec(void);
void BoardMGSetupTutorialExec(void); void BoardMGSetupTutorialExec(void);
void BoardBooHouseTutorialExec(void); void BoardBooHouseTutorialExec(void);
void BoardCharWheelSetTarget(s32); void BoardCharWheelSetTarget(s32);
void BoardSpaceStarSetIndex(s32); void BoardSpaceStarSetIndex(s32);
s32 BoardModelRotYSet(s16, f32);
f32 BoardModelRotYGet(s16);
s32 BoardModelLayerSet(s16, u8);
s16 BoardModelIDGet(s16);
s32 BoardModelScaleSetV(s16, Vec*);
void BoardLightHookSet(BoardLightHook set, BoardLightHook reset); void BoardLightHookSet(BoardLightHook set, BoardLightHook reset);
s16 BoardModelCreate(s32, s32*, s32);
void BoardModelKill(s16);
s32 fn_8006DDE8(s16, f32); s32 fn_8006DDE8(s16, f32);
s32 BoardModelMotionStart(s16, s32, u32);
s32 BoardModelMotionSpeedSet(s16, f32);
s32 BoardModelPosSetV(s16, Vec*);
s32 BoardModelPosSet(s16, f32, f32, f32);
s32 BoardModelRotSetV(s16 arg0, Vec* arg1);
s32 BoardModelVisibilitySet(s16, s32);
void BoardSpaceWalkEventFuncSet(BoardSpaceEventFunc func); void BoardSpaceWalkEventFuncSet(BoardSpaceEventFunc func);
void BoardSpaceWalkMiniEventFuncSet(BoardSpaceEventFunc func); void BoardSpaceWalkMiniEventFuncSet(BoardSpaceEventFunc func);
void BoardSpaceLandEventFuncSet(BoardSpaceEventFunc func); void BoardSpaceLandEventFuncSet(BoardSpaceEventFunc func);
@ -41,13 +27,9 @@ s32 BoardSpaceFlagSearch(s32, u32);
void BoardSpaceInit(s32); void BoardSpaceInit(s32);
void BoardSpaceDestroy(void); void BoardSpaceDestroy(void);
void BoardShopHostSet(s16); void BoardShopHostSet(s16);
void BoardLotteryHostSet(s16);
void BoardBooHouseHostSet(s16); void BoardBooHouseHostSet(s16);
s32 BoardCameraRotGet(Vec*); s32 BoardCameraRotGet(Vec*);
s32 BoardModelScaleSet(s16, f32, f32, f32);
s32 BoardIsKill(void); s32 BoardIsKill(void);
void BoardModelMtxSet(s16, Mtx*);
s32 BoardModelRotSet(s16, f32, f32, f32);
void BoardBowserExec(s32 player, s32 space); void BoardBowserExec(s32 player, s32 space);
void BoardBattleExec(s32 player, s32 space); void BoardBattleExec(s32 player, s32 space);

View file

@ -20,7 +20,7 @@ void HuAudFXFadeOut(s32 arg0, s32 arg1);
void HuAudFXPanning(s32 arg0, s16 arg1); void HuAudFXPanning(s32 arg0, s16 arg1);
void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3); void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3);
void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6); void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6);
void HuAudFXListnerUpdate(s32 arg0, s32 arg1); void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1);
s32 HuAudFXEmiterPlay(s32 arg0, Vec *arg1); s32 HuAudFXEmiterPlay(s32 arg0, Vec *arg1);
void HuAudFXEmiterUpDate(s32 arg0, Vec *arg1); void HuAudFXEmiterUpDate(s32 arg0, Vec *arg1);
void HuAudFXListnerKill(void); void HuAudFXListnerKill(void);

13
include/game/board/lottery.h Executable file
View file

@ -0,0 +1,13 @@
#ifndef _BOARD_LOTTERY_H
#define _BOARD_LOTTERY_H
#include "dolphin/types.h"
void BoardLotteryHostSet(s16 arg0);
s16 BoardLotteryHostGet(void);
void BoardLotteryExec(void);
void BoardLotteryInit(void);
void BoardLotteryKill(void);
void BoardLotteryTutorialExec(void);
#endif

View file

@ -1,5 +1,5 @@
#ifndef _BOARD_WARP_H #ifndef _BOARD_MODEL_H
#define _BOARD_WARP_H #define _BOARD_MODEL_H
#include "game/hsfman.h" #include "game/hsfman.h"
#include "game/data.h" #include "game/data.h"
@ -37,16 +37,21 @@ s32 fn_8006DDE8(s16 model, float arg1);
s32 BoardModelMotionCreate(s16 model, s32 data_num); s32 BoardModelMotionCreate(s16 model, s32 data_num);
s32 BoardModelMotionKill(s16 model, s32 motion); s32 BoardModelMotionKill(s16 model, s32 motion);
s32 BoardModelMotionStartEndSet(s16 model, s16 start, s16 end); s32 BoardModelMotionStartEndSet(s16 model, s16 start, s16 end);
s32 BoardModelMotionUpdateSet(s16 model, s32 flag);
s32 BoardModelVoiceEnableSet(s16 model, s32 motion, s32 flag);
s32 BoardModelMotionStart(s16 model, s32 slot, u32 attr); s32 BoardModelMotionStart(s16 model, s32 slot, u32 attr);
s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr); s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr);
s32 BoardModelAttrSet(s16 model, u32 attr); s32 BoardModelAttrSet(s16 model, u32 attr);
s32 BoardModelAttrReset(s16 model, u32 attr);
s32 BoardModelMotionTimeSet(s16 model, float time); s32 BoardModelMotionTimeSet(s16 model, float time);
float BoardModelMotionTimeGet(s16 model); float BoardModelMotionTimeGet(s16 model);
float BoardModelMotionMaxTimeGet(s16 model); float BoardModelMotionMaxTimeGet(s16 model);
s32 BoardModelMotionSpeedSet(s16 model, float speed); s32 BoardModelMotionSpeedSet(s16 model, float speed);
s32 BoardModelMotionEndCheck(s16 model); s32 BoardModelMotionEndCheck(s16 model);
s32 BoardModelAlphaSet(s16 model, u8 alpha); s32 BoardModelAlphaSet(s16 model, u8 alpha);
s32 BoardModelMtxSet(s16 model, Mtx *src);
s32 BoardModelRotYSet(s16 model, float rot); s32 BoardModelRotYSet(s16 model, float rot);
float BoardModelRotYGet(s16 model);
s32 BoardModelPosSet(s16 model, float x, float y, float z); s32 BoardModelPosSet(s16 model, float x, float y, float z);
s32 BoardModelPosSetV(s16 model, Vec *pos); s32 BoardModelPosSetV(s16 model, Vec *pos);
s32 BoardModelRotSet(s16 model, float x, float y, float z); s32 BoardModelRotSet(s16 model, float x, float y, float z);

View file

@ -82,7 +82,7 @@ void BoardPlayerScaleSetV(s32, Vec*);
void BoardPlayerScaleSet(s32, f32, f32, f32); void BoardPlayerScaleSet(s32, f32, f32, f32);
s16 BoardPlayerCurrMotionGet(s32); s16 BoardPlayerCurrMotionGet(s32);
s32 BoardPlayerMotionCreate(s32, s32); s32 BoardPlayerMotionCreate(s32, s32);
void BoardPlayerMotionKill(s32, s32); s32 BoardPlayerMotionKill(s32, s32);
s32 BoardPlayerMotionEndCheck(s32); s32 BoardPlayerMotionEndCheck(s32);
void BoardPlayerMotionEndWait(s32); void BoardPlayerMotionEndWait(s32);
void BoardPlayerMotionStart(s32, s32, s32); void BoardPlayerMotionStart(s32, s32, s32);
@ -114,6 +114,7 @@ void BoardPlayerZoomRestore(s32);
void BoardJunctionMaskSet(s32); void BoardJunctionMaskSet(s32);
void BoardJunctionMaskReset(s32); void BoardJunctionMaskReset(s32);
void BoardJunctionMaskZero(void); void BoardJunctionMaskZero(void);
void BoardPlayerVoiceEnableSet(s32, s32, s32);
void InitJunction(s32, s32, f32); void InitJunction(s32, s32, f32);
static void UpdateJunctionGfx(omObjData*); static void UpdateJunctionGfx(omObjData*);
static void StopJunctionPlayer(s32); static void StopJunctionPlayer(s32);

View file

@ -7,8 +7,10 @@
void BoardStarHostSet(s16 arg0); void BoardStarHostSet(s16 arg0);
s16 BoardStarHostMdlGet(void); s16 BoardStarHostMdlGet(void);
void BoardStarExec(s32 arg0, BoardSpace *arg1); void BoardStarExec(s32 arg0, s32 arg1);
void BoardStarGive(s32 arg0, Vec *arg1); void BoardStarGive(s32 arg0, Vec *arg1);
void BoardStarShowNext(s32 arg0); void BoardStarShowNext(s32 arg0);
extern s32 boardStarSndTbl[];
#endif #endif

View file

@ -58,6 +58,7 @@ typedef struct player_state {
u16 character : 4; u16 character : 4;
u16 auto_size : 2; u16 auto_size : 2;
u16 field00_bit9 : 1; u16 field00_bit9 : 1;
u16 field00_bitA : 6;
}; };
/* 0x02 */ struct { /* 0x02 */ struct {
u8 team : 1; u8 team : 1;

View file

@ -69,7 +69,7 @@ void msmMusStopAll(s32 arg0, s32 arg1);
void msmMusStop(s32 arg0, s32 arg1); void msmMusStop(s32 arg0, s32 arg1);
s32 msmMusPlay(s32 arg0, UnkMsmStruct_03 *arg1); s32 msmMusPlay(s32 arg0, UnkMsmStruct_03 *arg1);
void msmSeDelListener(void); void msmSeDelListener(void);
void msmSeUpdataListener(s32 arg0, s32 arg1); void msmSeUpdataListener(Vec *arg0, Vec *arg1);
void msmSeSetListener(Vec* arg0, Vec* arg1, float arg2, float arg3, UnkMsmStruct_02 *arg4); void msmSeSetListener(Vec* arg0, Vec* arg1, float arg2, float arg3, UnkMsmStruct_02 *arg4);
s32 msmSeGetEntryID(s32 arg0, void *arg1); s32 msmSeGetEntryID(s32 arg0, void *arg1);
s32 msmSeGetNumPlay(s32 arg0); s32 msmSeGetNumPlay(s32 arg0);

View file

@ -46,8 +46,6 @@ static BOOL TitleProc(void);
void *logoReadNintendo(void); void *logoReadNintendo(void);
#define M_PI 3.141592653589793
void ModuleProlog(void) void ModuleProlog(void)
{ {
omOvlHisData *history; omOvlHisData *history;

View file

@ -1,12 +1,63 @@
#include "common.h" #include "dolphin.h"
#include "REL/executor.h" #include "game/hsfman.h"
#include "game/gamework_data.h"
#include "game/printfunc.h"
#include "game/pad.h"
#include "rel_sqrt_consts.h"
void fn_1_0(void) { s32 lbl_1_data_0 = 100;
s32 lbl_1_bss_0[192];
void fn_1_0(void)
{
} }
//fn_1_4 void safMarioEyeDim(s16 id)
// https://decomp.me/scratch/Ii0sV {
ModelData *model = &Hu3DData[id];
HsfData *hsf = model->hsfData;
HsfMaterial *material = hsf->material;
s16 i, j;
for(i=0; i<hsf->materialCnt; i++, material++) {
for(j=0; j<material->numAttrs; j++) {
HsfAttribute *attr = &hsf->attribute[material->attrs[j]];
if(strcmp(attr->bitmap->name, "s3c000m1_eyes") == 0 || strcmp(attr->bitmap->name, "mario_eyes") == 0) {
break;
}
}
if(j == material->numAttrs) {
material->color[0] *= 0.6f;
material->color[1] *= 0.3f;
material->color[2] *= 0.3f;
material->litColor[0] *= 0.6f;
material->litColor[1] *= 0.3f;
material->litColor[2] *= 0.3f;
}
}
}
// fn_1_288 void safSaveTest(void)
// https://decomp.me/scratch/VQ3CT {
OSTick time_write;
OSTick time_read;
s16 character = GWPlayerCfg[0].character;
SLLoad();
time_write = time_read = 0;
while(1) {
print8(16, 420, 1.5f, "READ TIME %d", OSTicksToMilliseconds(time_read));
print8(16, 430, 1.5f, "WRITE TIME %d", OSTicksToMilliseconds(time_write));
HuPrcVSleep();
if(HuPadBtnDown[0] & PAD_BUTTON_Y) {
HuAudCharVoicePlayEntry(character, 282);
time_write = OSGetTick();
SLSave();
time_write = OSGetTick()-time_write;
}
if(HuPadBtnDown[0] & PAD_BUTTON_X) {
time_read = OSGetTick();
SLLoad();
time_read = OSGetTick()-time_read;
}
}
}

View file

@ -1,9 +1,13 @@
#include "dolphin.h" #include "dolphin.h"
#include "REL/executor.h" #include "REL/executor.h"
#include "game/process.h" #include "game/audio.h"
#include "game/data.h" #include "game/data.h"
#include "game/gamework_data.h" #include "game/gamework_data.h"
#include "game/process.h"
#include "game/wipe.h"
#include "REL/w03Dll.h" #include "REL/w03Dll.h"
#include "game/board/lottery.h"
#include "game/board/model.h"
#include "game/board/space.h" #include "game/board/space.h"
#include "game/board/star.h" #include "game/board/star.h"
#include "game/object.h" #include "game/object.h"
@ -12,9 +16,6 @@
#include "board_unsplit.h" #include "board_unsplit.h"
#include "game/hsfman.h" #include "game/hsfman.h"
s32 BoardModelPosSet(s16, f32, f32, f32);
s32 BoardModelMotionStart(s16, s32, u32);
void fn_8005B150(void*, void*); void fn_8005B150(void*, void*);
void fn_1_740(void); void fn_1_740(void);
void fn_1_E0(void); void fn_1_E0(void);
@ -35,14 +36,6 @@ extern const VoidFunc _ctors[];
extern const VoidFunc _dtors[]; extern const VoidFunc _dtors[];
f32 BoardModelMotionTimeGet(s16);
s16 BoardModelCreate(s32, s32*, s32);
void BoardModelKill(s16);
void BoardModelMotionStartEndSet(s16, s32, s32);
void Hu3DFogSet(f32, f32, u8, u8, u8);
void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6);
u8 WipeStatGet(void);
//DATA //DATA
w03StructUnk0 lbl_1_data_0[] = { w03StructUnk0 lbl_1_data_0[] = {
{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0004)}, {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0004)},
@ -328,7 +321,7 @@ void fn_1_B5C(s32 arg0) {
} }
BoardModelAttrSet(lbl_1_bss_C[0], 0x40000001); BoardModelAttrSet(lbl_1_bss_C[0], 0x40000001);
BoardModelMotionTimeSet(lbl_1_bss_C[0], var_f31); BoardModelMotionTimeSet(lbl_1_bss_C[0], var_f31);
BoardModelMotionStartEndSet(lbl_1_bss_C[0], (s32) var_f31, (s32) var_f28); BoardModelMotionStartEndSet(lbl_1_bss_C[0], var_f31, var_f28);
} }
void fn_1_CF4(void) { void fn_1_CF4(void) {

View file

@ -4,6 +4,7 @@
#include "REL/w03Dll.h" #include "REL/w03Dll.h"
#include "board_unsplit.h" #include "board_unsplit.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/player.h" #include "game/board/player.h"
extern u16 HuPadBtnDown[4]; extern u16 HuPadBtnDown[4];
@ -67,9 +68,6 @@ double cos(double x);
double atan2(double y, double x); double atan2(double y, double x);
extern s16 MGSeqCreate(s32, ...); extern s16 MGSeqCreate(s32, ...);
u8 MGSeqStatGet(s16); u8 MGSeqStatGet(s16);
float BoardModelMotionTimeGet(s16 model);
float BoardModelMotionMaxTimeGet(s16 model);
s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr);
void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2);
//DATA //DATA
@ -206,7 +204,7 @@ s32 fn_1_7D18(s32 arg0) {
BoardSpacePosGet(0, temp_r28, &sp38); BoardSpacePosGet(0, temp_r28, &sp38);
PSVECSubtract(&sp38, &sp2C, &sp20); PSVECSubtract(&sp38, &sp2C, &sp20);
PSVECNormalize(&sp20, &sp20); PSVECNormalize(&sp20, &sp20);
BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / 3.141592653589793)); BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI));
HuPrcSleep(0x1E); HuPrcSleep(0x1E);
model = BoardModelIDGet(lbl_1_bss_C[7]); model = BoardModelIDGet(lbl_1_bss_C[7]);
Hu3DModelObjPosGet(model, phei_str, &sp38); Hu3DModelObjPosGet(model, phei_str, &sp38);
@ -215,15 +213,15 @@ s32 fn_1_7D18(s32 arg0) {
} else { } else {
var_f31 = 39.0f; var_f31 = 39.0f;
} }
sp38.x = sp38.x + (var_f31 * sin((3.141592653589793 * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); sp38.x = sp38.x + (var_f31 * sin((M_PI * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0));
sp38.z = sp38.z + (var_f31 * cos((3.141592653589793 * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); sp38.z = sp38.z + (var_f31 * cos((M_PI * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0));
BoardPlayerPosGet(arg0, &sp2C); BoardPlayerPosGet(arg0, &sp2C);
BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14); BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14);
while (GWPlayer[arg0].moving != 0) { while (GWPlayer[arg0].moving != 0) {
BoardModelPosGet(lbl_1_bss_C[10], &sp2C); BoardModelPosGet(lbl_1_bss_C[10], &sp2C);
BoardPlayerPosGet(arg0, &sp38); BoardPlayerPosGet(arg0, &sp38);
PSVECSubtract(&sp38, &sp2C, &sp20); PSVECSubtract(&sp38, &sp2C, &sp20);
arctan = atan2(sp20.x, sp20.z) / 3.141592653589793 * 180.0; arctan = atan2(sp20.x, sp20.z) / M_PI * 180.0;
BoardModelRotYSet(lbl_1_bss_C[10], arctan); BoardModelRotYSet(lbl_1_bss_C[10], arctan);
HuPrcVSleep(); HuPrcVSleep();
} }
@ -482,7 +480,7 @@ void fn_1_8C08(omObjData* arg0, someBits3* arg1) {
BoardPlayerMotionSpeedSet(arg1->unk00_bit5, 0.0f); BoardPlayerMotionSpeedSet(arg1->unk00_bit5, 0.0f);
BoardModelAttrSet(lbl_1_bss_C[7], 0x40000002); BoardModelAttrSet(lbl_1_bss_C[7], 0x40000002);
BoardModelAttrSet(lbl_1_data_456, 0x40000002); BoardModelAttrSet(lbl_1_data_456, 0x40000002);
arg1->unk00_bit1 = 2; arg1->unk00_bit1 = 2;
arg1->unk1 = 0x3C; arg1->unk1 = 0x3C;
arg1->unk2 = 0; arg1->unk2 = 0;
} }
@ -549,7 +547,7 @@ void fn_1_9044(omObjData* arg0, someBits3* arg1) {
} }
} }
} }
sp8.z = arg0->trans.x * sin((3.141592653589793 * arg0->trans.y) / 180.0); sp8.z = arg0->trans.x * sin((M_PI * arg0->trans.y) / 180.0);
BoardModelRotSetV(lbl_1_data_456, &sp8); BoardModelRotSetV(lbl_1_data_456, &sp8);
} }
@ -580,7 +578,7 @@ void fn_1_9230(s32 arg0) {
BoardModelPosGet(lbl_1_bss_C[10], &sp20); BoardModelPosGet(lbl_1_bss_C[10], &sp20);
BoardPlayerPosGet(arg0, &sp14); BoardPlayerPosGet(arg0, &sp14);
PSVECSubtract(&sp14, &sp20, &sp8); PSVECSubtract(&sp14, &sp20, &sp8);
rotY = atan2(sp8.x, sp8.z) / 3.141592653589793 * 180.0; rotY = atan2(sp8.x, sp8.z) / M_PI * 180.0;
BoardModelRotYSet(lbl_1_bss_C[10], rotY); BoardModelRotYSet(lbl_1_bss_C[10], rotY);
HuPrcVSleep(); HuPrcVSleep();
} }
@ -712,8 +710,8 @@ void fn_1_97F8(s32 arg0) {
} }
temp_r31 = &temp_r30->unk_0C[i]; temp_r31 = &temp_r30->unk_0C[i];
temp_r31->unk0 = 1; temp_r31->unk0 = 1;
temp_r31->unk8.x = sp8.x + (50.0f * sin((3.141592653589793 * var_f31) / 180.0)); temp_r31->unk8.x = sp8.x + (50.0f * sin((M_PI * var_f31) / 180.0));
temp_r31->unk8.z = sp8.z + (50.0f * cos((3.141592653589793 * var_f31) / 180.0)); temp_r31->unk8.z = sp8.z + (50.0f * cos((M_PI * var_f31) / 180.0));
temp_r31->unk8.y = 600.0f + sp8.y + (500.0f * BoardRandFloat()); temp_r31->unk8.y = 600.0f + sp8.y + (500.0f * BoardRandFloat());
temp_r31->unk1 = 0; temp_r31->unk1 = 0;
temp_r31->unk4 = BoardRandFloat() * 360.0f; temp_r31->unk4 = BoardRandFloat() * 360.0f;

View file

@ -5,6 +5,7 @@
#include "game/gamework_data.h" #include "game/gamework_data.h"
#include "REL/w03Dll.h" #include "REL/w03Dll.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/space.h" #include "game/board/space.h"
#include "game/object.h" #include "game/object.h"
#include "game/objsub.h" #include "game/objsub.h"
@ -54,7 +55,7 @@ typedef struct w03UnkMG {
/* 0x10 */ s16 unk_10; /* 0x10 */ s16 unk_10;
/* 0x12 */ s16 unk_12; /* 0x12 */ s16 unk_12;
/* 0x14 */ s16 unk_14; /* 0x14 */ s16 unk_14;
/* 0x16 */ s16 unk_16; /* 0x16 */ s16 unk_16;
} w03UnkMG; } w03UnkMG;
//external symbols //external symbols
@ -64,23 +65,13 @@ extern Process *boardObjMan;
extern u16 HuPadBtnDown[4]; extern u16 HuPadBtnDown[4];
//function signatures //function signatures
s32 BoardModelMotionShiftSet(s16, s32, f32, f32, u32);
s32 BoardVecDAngleCalcRange(float *value, float min, float range); s32 BoardVecDAngleCalcRange(float *value, float min, float range);
void BoardCameraQuakeSet(s32 duration, float strength); void BoardCameraQuakeSet(s32 duration, float strength);
s16 MGSeqCreate(s32, ...); s16 MGSeqCreate(s32, ...);
u8 MGSeqStatGet(s16); u8 MGSeqStatGet(s16);
f32 BoardPlayerRotYGet(s32);
f32 BoardModelMotionTimeGet(s16);
s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist); s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist);
s32 BoardModelScaleGet(s16 model, Vec *dst);
s32 BoardModelMotionTimeSet(s16 model, float time);
s32 BoardDAngleCalcRange(float *value, float min, float range);
u32 BoardRandMod(u32 value);
void BoardModelMotionStartEndSet(s16, s32, s32);
void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2);
s32 BoardModelPosGet(s16 model, Vec *dst);
s16 Hu3DMotionShiftIDGet(s16 arg0); s16 Hu3DMotionShiftIDGet(s16 arg0);
f32 BoardPlayerMotionTimeGet(s32);
s32 frand(void); s32 frand(void);
void fn_1_BE30(s32 arg0, ParticleData* arg1); void fn_1_BE30(s32 arg0, ParticleData* arg1);
@ -654,7 +645,7 @@ void fn_1_B0A4(s32 arg0) {
temp_r30->unk00_bit4 = arg0; temp_r30->unk00_bit4 = arg0;
for (i = 0; i < 3;) { for (i = 0; i < 3;) {
spC[i] = BoardRandMod(14); spC[i] = BoardRandMod(14);
if ((spC[i] != 10) && (spC[i] != 13)) { if ((spC[i] != 10) && (spC[i] != 13)) {
for (j = 0; j < i; j++) { for (j = 0; j < i; j++) {
if (spC[i] == spC[j]) { if (spC[i] == spC[j]) {

View file

@ -3,6 +3,7 @@
#include "REL/w03Dll.h" #include "REL/w03Dll.h"
#include "board_unsplit.h" #include "board_unsplit.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/player.h" #include "game/board/player.h"
double sin(double x); double sin(double x);
@ -10,14 +11,8 @@ double cos(double x);
double atan2(double y, double x); double atan2(double y, double x);
s16 BoardModelIDGet(s16 model); s16 BoardModelIDGet(s16 model);
void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2);
float BoardModelMotionTimeGet(s16 model);
s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr);
void BoardPlayerPosSet(s32, f32, f32, f32);
s32 BoardModelHookSet(s16 model, char *name, s16 hook);
#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0])))
extern s16 lbl_1_bss_C[14]; extern s16 lbl_1_bss_C[14];
extern s16 boardPlayerMdl[4]; extern s16 boardPlayerMdl[4];
@ -244,9 +239,7 @@ s32 fn_1_6898(s32 arg0) {
return 1; return 1;
} }
float BoardModelRotYGet(s16 model);
s32 BoardDAngleCalcRange(float *value, float min, float range); s32 BoardDAngleCalcRange(float *value, float min, float range);
float BoardModelRotYGet(s16 model);
void fn_1_6B98(s32 arg0) { void fn_1_6B98(s32 arg0) {
Vec sp30; Vec sp30;

View file

@ -3,6 +3,7 @@
#include "REL/w03Dll.h" #include "REL/w03Dll.h"
#include "board_unsplit.h" #include "board_unsplit.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
typedef struct w03UnkWorkStruct { typedef struct w03UnkWorkStruct {
s16 unk_00[5]; s16 unk_00[5];
@ -16,7 +17,6 @@ extern Process *boardObjMan;
extern s16 lbl_1_data_1E0; extern s16 lbl_1_data_1E0;
void fn_1_79E0(omObjData* arg0); void fn_1_79E0(omObjData* arg0);
f32 BoardModelMotionMaxTimeGet(s16);
char kemuri1[] = "kemuri1"; char kemuri1[] = "kemuri1";
char kemuri2[] = "kemuri2"; char kemuri2[] = "kemuri2";

View file

@ -5,8 +5,9 @@
#include "game/gamework_data.h" #include "game/gamework_data.h"
#include "REL/w03Dll.h" #include "REL/w03Dll.h"
#include "game/audio.h" #include "game/audio.h"
#include "game/board/space.h" #include "game/board/model.h"
#include "game/board/player.h" #include "game/board/player.h"
#include "game/board/space.h"
#include "game/board/ui.h" #include "game/board/ui.h"
#include "board_unsplit.h" #include "board_unsplit.h"
#include "game/hsfman.h" #include "game/hsfman.h"
@ -26,12 +27,7 @@ void fn_1_2AC0(void);
void fn_1_2818(void); void fn_1_2818(void);
void fn_1_2A40(void); void fn_1_2A40(void);
void fn_1_2B44(void); void fn_1_2B44(void);
s32 BoardDAngleCalcRange(f32*, f32, f32);
s32 BoardPlayerMotBlendCheck(s32);
f32 BoardPlayerRotYGet(s32);
void BoardConfettiCreate(Point3d*, s16, f32);
double atan2(double y, double x); double atan2(double y, double x);
f32 BoardModelMotionTimeGet(s16);
//DATA //DATA
s16 lbl_1_data_280 = -1; s16 lbl_1_data_280 = -1;

View file

@ -1,5 +1,6 @@
#include "REL/w10Dll.h" #include "REL/w10Dll.h"
#include "game/data.h" #include "game/data.h"
#include "game/board/model.h"
#include "game/board/tutorial.h" #include "game/board/tutorial.h"
#include "game/board/window.h" #include "game/board/window.h"

View file

@ -1,6 +1,8 @@
#include "include/REL/w10Dll.h" #include "include/REL/w10Dll.h"
#include "game/data.h" #include "game/data.h"
#include "game/hsfman.h" #include "game/hsfman.h"
#include "game/board/lottery.h"
#include "game/board/model.h"
#include "game/board/star.h" #include "game/board/star.h"
#include "game/board/tutorial.h" #include "game/board/tutorial.h"

View file

@ -1,5 +1,7 @@
#include "include/REL/w10Dll.h" #include "include/REL/w10Dll.h"
#include "game/board/lottery.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/star.h" #include "game/board/star.h"
#include "game/board/tutorial.h" #include "game/board/tutorial.h"
#include "game/board/ui.h" #include "game/board/ui.h"
@ -185,7 +187,7 @@ void fn_1_13A4(void) {
fn_1_C10(0); fn_1_C10(0);
fn_1_BA0(0x2E002B); fn_1_BA0(0x2E002B);
sp8.x = -33.0f; sp8.x = -33.0f;
sp8.y = sp8.z = 0.0f; sp8.y = sp8.z = 0.0f;
temp_r3_2 = BoardSpaceFlagSearch(0, 0x80000); temp_r3_2 = BoardSpaceFlagSearch(0, 0x80000);
BoardSpacePosGet(0, temp_r3_2, &sp14); BoardSpacePosGet(0, temp_r3_2, &sp14);
BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14); BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14);

View file

@ -190,7 +190,7 @@ void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, fl
} }
} }
void HuAudFXListnerUpdate(s32 arg0, s32 arg1) { void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1) {
if (omSysExitReq == 0) { if (omSysExitReq == 0) {
msmSeUpdataListener(arg0, arg1); msmSeUpdataListener(arg0, arg1);
} }

View file

@ -1,5 +1,6 @@
#include "game/board/basic_space.h" #include "game/board/basic_space.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/player.h" #include "game/board/player.h"
#include "game/board/tutorial.h" #include "game/board/tutorial.h"
#include "game/data.h" #include "game/data.h"
@ -37,7 +38,6 @@ static void CoinChgDisappear(omObjData*, coinChg*);
extern void BoardCameraViewSet(s32); extern void BoardCameraViewSet(s32);
extern void BoardPlayerPosGet(s32, Vec*); extern void BoardPlayerPosGet(s32, Vec*);
extern void BoardModelPosGet(s16, Vec*);
extern void BoardPlayerMotionEndWait(s32); extern void BoardPlayerMotionEndWait(s32);
extern void BoardPlayerCoinsAdd(s32, s32); extern void BoardPlayerCoinsAdd(s32, s32);
extern void BoardRotateDiceNumbers(s32); extern void BoardRotateDiceNumbers(s32);

File diff suppressed because it is too large Load diff

2013
src/game/board/lottery.c Executable file

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,9 @@
#include "string.h" #include "string.h"
#include "game/hsfman.h" #include "game/hsfman.h"
#include "game/hsfdraw.h" #include "game/hsfdraw.h"
#include "game/board/lottery.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/pause.h" #include "game/board/pause.h"
#include "game/board/player.h" #include "game/board/player.h"
#include "game/board/tutorial.h" #include "game/board/tutorial.h"
@ -58,7 +60,6 @@ static CameraView camViewTbl[] = {
}; };
extern void BoardModelPosGet(s16 model, Vec *pos);
extern s32 BoardSpacePosGet(s32 layer, s32 space, Vec *pos); extern s32 BoardSpacePosGet(s32 layer, s32 space, Vec *pos);
extern void BoardMGSetupPlayClear(void); extern void BoardMGSetupPlayClear(void);

View file

@ -7,37 +7,10 @@
#include "game/board/tutorial.h" #include "game/board/tutorial.h"
#include "game/board/ui.h" #include "game/board/ui.h"
#include "game/board/view.h" #include "game/board/view.h"
#include "game/board/model.h"
#include "game/pad.h"
//// #include "game/board/model.h" //TODO: Give better name
extern s16 BoardModelCreateCharacter(s32, s32, s32*, s32);
extern void BoardModelExistCheck(s16, s32);
extern void BoardModelExistDupe(s16, s32);
extern void BoardModelCameraSet(s16, u16);
extern void BoardItemStatusKill(s32);
extern void BoardModelAmbSet(s16, f32, f32, f32);
extern s32 BoardModelPosGet(s16, Vec*);
extern s32 BoardModelRotGet(s16, Vec*);
extern f32 BoardModelRotYGet(s16);
extern void BoardModelScaleGet(s16, s32*);
extern void BoardModelVoiceEnableSet(s16, s32, s32);
extern s32 BoardModelMotionCreate(s16, s32);
extern void BoardModelMotionKill(s16, s32);
extern s32 BoardModelMotionEndCheck(s16);
extern s32 BoardModelMotionShiftSet(s16, s32, f32, f32, u32);
extern void BoardModelMotionTimeSet(s16, f32);
extern f32 BoardModelMotionTimeGet(s16);
extern f32 BoardModelMotionMaxTimeGet(s16);
extern void BoardModelMotionTimeRangeSet(s16, s32, s32);
extern void BoardModelAttrSet(s16, s32);
extern void BoardModelAttrReset(s16, s32);
//// #include "game/board/overhead.h"
//// #include "game/board/pad.h"
extern s8 HuPadStkX[4];
extern s8 HuPadStkY[4];
extern u16 HuPadBtnDown[4];
extern u8 HuPadDStk[4];
////
typedef struct bitcopy { typedef struct bitcopy {
struct { struct {
u8 field00_bit0 : 1; u8 field00_bit0 : 1;
@ -394,7 +367,7 @@ void BoardPlayerCornerPosSet(s32 arg0) {
BoardPlayerPosSetV(arg0, &sp8); BoardPlayerPosSetV(arg0, &sp8);
} }
void BoardPlayerCornerPosGet(s32 arg0, Point3d* arg1) { void BoardPlayerCornerPosGet(s32 arg0, Vec* arg1) {
s32 var_r31; s32 var_r31;
s32 var_r30; s32 var_r30;
s32 var_r29; s32 var_r29;
@ -496,7 +469,7 @@ void BoardPlayerScaleSet(s32 arg0, f32 arg8, f32 arg9, f32 argA) {
BoardModelScaleSet(BoardPlayerModelGet(arg0), arg8, arg9, argA); BoardModelScaleSet(BoardPlayerModelGet(arg0), arg8, arg9, argA);
} }
void BoardPlayerScaleGet(s32 arg0, s32 *arg1) { void BoardPlayerScaleGet(s32 arg0, Vec *arg1) {
BoardModelScaleGet(BoardPlayerModelGet(arg0), arg1); BoardModelScaleGet(BoardPlayerModelGet(arg0), arg1);
} }
@ -514,8 +487,8 @@ s32 BoardPlayerMotionCreate(s32 arg0, s32 arg1) {
return BoardModelMotionCreate(BoardPlayerModelGet(arg0), arg1); return BoardModelMotionCreate(BoardPlayerModelGet(arg0), arg1);
} }
void BoardPlayerMotionKill(s32 arg0, s32 arg1) { s32 BoardPlayerMotionKill(s32 arg0, s32 arg1) {
BoardModelMotionKill(BoardPlayerModelGet(arg0), arg1); return BoardModelMotionKill(BoardPlayerModelGet(arg0), arg1);
} }
s32 BoardPlayerMotionEndCheck(s32 arg0) { s32 BoardPlayerMotionEndCheck(s32 arg0) {
@ -574,8 +547,8 @@ f32 BoardPlayerMotionMaxTimeGet(s32 arg0) {
return BoardModelMotionMaxTimeGet(BoardPlayerModelGet(arg0)); return BoardModelMotionMaxTimeGet(BoardPlayerModelGet(arg0));
} }
void BoardPlayerMotionTimeRangeSet(s32 arg0, f32 arg8, f32 arg9) { void BoardPlayerMotionStartEndSet(s32 arg0, f32 arg8, f32 arg9) {
BoardModelMotionTimeRangeSet(BoardPlayerModelGet(arg0), arg8, arg9); BoardModelMotionStartEndSet(BoardPlayerModelGet(arg0), arg8, arg9);
} }
void BoardPlayerModelAttrSet(s32 arg0, s32 arg1) { void BoardPlayerModelAttrSet(s32 arg0, s32 arg1) {
@ -878,21 +851,8 @@ void BoardPlayerPostTurnHookExec(s32 arg0) {
} }
void BoardPlayerSizeRestore(s32 arg0) { void BoardPlayerSizeRestore(s32 arg0) {
PlayerState* temp_r24; if (BoardPlayerSizeGet(arg0) != 0) {
PlayerState* temp_r23; if (BoardPlayerSizeGet(arg0) == 1) {
s32 var_r28;
s32 var_r27;
temp_r24 = BoardPlayerGet(arg0);
if (temp_r24 != 0) {
var_r28 = temp_r24->size;
}
if (var_r28 != 0) {
temp_r23 = BoardPlayerGet(arg0);
if (temp_r23 != 0) {
var_r27 = temp_r23->size;
}
if (var_r27 == 1) {
HuAudFXPlay(0x313); HuAudFXPlay(0x313);
} else { } else {
HuAudFXPlay(0x311); HuAudFXPlay(0x311);
@ -916,19 +876,18 @@ void BoardPlayerZoomRestore(s32 arg0) {
Vec spC; Vec spC;
sp8 = BoardPlayerGet(arg0); sp8 = BoardPlayerGet(arg0);
BoardModelPosGet(BoardPlayerModelGet(arg0), &spC); BoardPlayerPosGet(arg0, &spC);
temp_r27 = GWPlayer[arg0].space_curr; temp_r27 = GWPlayer[arg0].space_curr;
var_r31 = GWSystem.player_curr; var_r31 = GWSystem.player_curr;
if (var_r31 == -1) { if (var_r31 == -1) {
var_r31 = 0; var_r31 = 0;
} }
for (var_r28 = 0, var_r29 = var_r28; var_r28 < 4; var_r28++) { for (var_r29 = var_r28 = 0; var_r28 < 4; var_r28++) {
if (var_r31 == arg0) break; if (var_r31 == arg0) break;
if (temp_r27 == GWPlayer[var_r31].space_curr) { if (temp_r27 == GWPlayer[var_r31].space_curr) {
var_r29++; var_r29++;
} }
var_r31 = (var_r31 + 1) & 3; var_r31 = (var_r31 + 1) & 3;
(void)var_r29; // hack
} }
BoardSpaceCornerPosGet(temp_r27, var_r29, &sp18); BoardSpaceCornerPosGet(temp_r27, var_r29, &sp18);
BoardPlayerMotBlendSet(arg0, 0, 0xF); BoardPlayerMotBlendSet(arg0, 0, 0xF);
@ -978,17 +937,17 @@ static inline GetLinkCount(s32 playerIdx, s32 boardIdx) {
|| ((boardSpaceFlag->flag & 0x04000000) != 0) || ((boardSpaceFlag->flag & 0x04000000) != 0)
|| ((boardSpaceFlag->flag & BoardJunctionMaskGet()) != 0)) { || ((boardSpaceFlag->flag & BoardJunctionMaskGet()) != 0)) {
linkCount -= 1; linkCount--;
} }
} }
return linkCount; return linkCount;
} }
static void InitJunction(s32 arg0, s32 arg1, f32 arg8) { static void InitJunction(s32 arg0, s32 arg1, f32 arg8) {
Point3d sp68; Vec sp68;
Point3d sp5C; Vec sp5C;
Point3d sp50; Vec sp50;
Point3d sp44; Vec sp44;
f32 sp40; f32 sp40;
f32 sp3C; f32 sp3C;
s32 sp38; s32 sp38;
@ -1015,7 +974,7 @@ static void InitJunction(s32 arg0, s32 arg1, f32 arg8) {
if (sp38 > 1) { if (sp38 > 1) {
var_r28 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, UpdateJunctionGfx); var_r28 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, UpdateJunctionGfx);
junctionObj = var_r28; junctionObj = var_r28;
temp_r29 = (bitcopy*) var_r28->work; temp_r29 = OM_GET_WORK_PTR(var_r28, bitcopy);
temp_r29->field00_bit0 = 0; temp_r29->field00_bit0 = 0;
temp_r29->field00_bit7 = 0; temp_r29->field00_bit7 = 0;
temp_r29->field00_bit1 = arg0; temp_r29->field00_bit1 = arg0;
@ -1089,7 +1048,7 @@ static void UpdateJunctionGfx(omObjData* arg0) {
s32 var_r28; s32 var_r28;
bitcopy* temp_r30; bitcopy* temp_r30;
temp_r30 = (bitcopy*)arg0->work; temp_r30 = OM_GET_WORK_PTR(arg0, bitcopy);
if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) {
for (var_r28 = 0; var_r28 < temp_r30->field00_bit3; var_r28++) { for (var_r28 = 0; var_r28 < temp_r30->field00_bit3; var_r28++) {
BoardModelKill(temp_r30->unk_06[var_r28]); BoardModelKill(temp_r30->unk_06[var_r28]);
@ -1119,7 +1078,7 @@ static void StopJunctionPlayer(s32 arg0) {
bitcopy* temp_r31; bitcopy* temp_r31;
if (junctionObj != 0) { if (junctionObj != 0) {
temp_r31 = (bitcopy*)junctionObj->work; temp_r31 = OM_GET_WORK_PTR(junctionObj, bitcopy);
temp_r31->field00_bit7 = 1; temp_r31->field00_bit7 = 1;
temp_r31->unk_01 = 0; temp_r31->unk_01 = 0;
if (arg0 != 0) { if (arg0 != 0) {
@ -1130,14 +1089,14 @@ static void StopJunctionPlayer(s32 arg0) {
} }
static void RestoreJunction(f32 arg8, s32 arg0) { static void RestoreJunction(f32 arg8, s32 arg0) {
Point3d sp1C; Vec sp1C;
f32 spC[4]; f32 spC[4];
s16 var_r30; s16 var_r30;
s16 temp_r29; s16 temp_r29;
bitcopy* temp_r31; bitcopy* temp_r31;
if (junctionObj != 0) { if (junctionObj != 0) {
temp_r31 = (bitcopy*) junctionObj->work; temp_r31 = OM_GET_WORK_PTR(junctionObj, bitcopy);
if (temp_r31->unk_01 == 0) { if (temp_r31->unk_01 == 0) {
arg8 = 90.0f * (((90.0f + arg8) - 1.0f) / 90.0f); arg8 = 90.0f * (((90.0f + arg8) - 1.0f) / 90.0f);
@ -1331,7 +1290,7 @@ static inline f32 JunctionArrowRotGetCurr(void) {
if (!junctionObj) { if (!junctionObj) {
return 0.0f; return 0.0f;
} else { } else {
juncObj = (bitcopy*) junctionObj->work; juncObj = OM_GET_WORK_PTR(junctionObj, bitcopy);
OSs16tof32(&(junctionArrowRot[juncObj->field00_bit5]), &ret); OSs16tof32(&(junctionArrowRot[juncObj->field00_bit5]), &ret);
return ret; return ret;
} }
@ -1345,7 +1304,7 @@ static inline s32 CheckArrowRot(float value)
if (!junctionObj) { if (!junctionObj) {
return 0; return 0;
} else { } else {
sp5C = (bitcopy*) junctionObj->work; sp5C = OM_GET_WORK_PTR(junctionObj, bitcopy);
OSf32tos16(&value, &spE); OSf32tos16(&value, &spE);
if (spE > 0x15E) { if (spE > 0x15E) {
spE = 0; spE = 0;
@ -1614,6 +1573,7 @@ void BoardPlayerPosLerpStart(s32 arg0, Vec* arg1, Vec* arg2, s16 arg3) {
if (GWPlayer[arg0].bowser_suit != 0) { if (GWPlayer[arg0].bowser_suit != 0) {
BoardModelPosSetV(suitMdl, arg1); BoardModelPosSetV(suitMdl, arg1);
} }
//TODO: Make work struct for this
temp_r3->work[0] = arg0; temp_r3->work[0] = arg0;
*(f32 *)(&temp_r3->work[1]) = var_f27; *(f32 *)(&temp_r3->work[1]) = var_f27;
temp_r3->work[2] = arg3; temp_r3->work[2] = arg3;
@ -1651,6 +1611,7 @@ static void PlayerPosLerpFunc(omObjData* arg0) {
BoardPlayerPosSet(temp_r30, temp_f31, temp_f30, temp_f29); BoardPlayerPosSet(temp_r30, temp_f31, temp_f30, temp_f29);
} }
//TODO: Make this 2 structs and give better names
typedef struct bitcopy2 { typedef struct bitcopy2 {
struct { struct {
u8 field00_bit0 : 1; u8 field00_bit0 : 1;
@ -1680,7 +1641,7 @@ typedef struct bitcopy2 {
} bitcopy2; } bitcopy2;
void BoardPlayerDiceJumpStart(s32 arg0) { void BoardPlayerDiceJumpStart(s32 arg0) {
Point3d sp8; Vec sp8;
PlayerState* temp_r25; PlayerState* temp_r25;
bitcopy2* temp_r31; bitcopy2* temp_r31;
s32 var_r28; s32 var_r28;
@ -1697,7 +1658,7 @@ void BoardPlayerDiceJumpStart(s32 arg0) {
} }
diceJumpObj[arg0] = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, DiceJumpFunc); diceJumpObj[arg0] = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, DiceJumpFunc);
BoardModelPosGet(BoardPlayerModelGet(arg0), &sp8); BoardModelPosGet(BoardPlayerModelGet(arg0), &sp8);
temp_r31 = (bitcopy2*) diceJumpObj[arg0]->work; temp_r31 = OM_GET_WORK_PTR(diceJumpObj[arg0], bitcopy2);
temp_r31->field00_bit0 = 0; temp_r31->field00_bit0 = 0;
temp_r31->field00_bit1 = arg0; temp_r31->field00_bit1 = arg0;
temp_r31->unk_04 = 0; temp_r31->unk_04 = 0;
@ -1711,7 +1672,7 @@ s32 BoardPlayerDiceJumpCheck(s32 arg0) {
if (!diceJumpObj[arg0]) { if (!diceJumpObj[arg0]) {
return 0; return 0;
} }
if (diceJumpObj[arg0]->work[1] == 0) { if (OM_GET_WORK_PTR(diceJumpObj[arg0], bitcopy2)->unk_04 == 0) {
return 0; return 0;
} }
return 1; return 1;
@ -1726,7 +1687,7 @@ static void DiceJumpFunc(omObjData* arg0) {
s32 var_r23; s32 var_r23;
s32 var_r17; s32 var_r17;
temp_r31 = (bitcopy2*) arg0->work; temp_r31 = OM_GET_WORK_PTR(arg0, bitcopy2);
if ((temp_r31->field00_bit0 != 0) || (BoardIsKill() != 0)) { if ((temp_r31->field00_bit0 != 0) || (BoardIsKill() != 0)) {
GWPlayer[temp_r31->field00_bit1].field08_bit3 = 0; GWPlayer[temp_r31->field00_bit1].field08_bit3 = 0;
BoardRotateDiceNumbers(temp_r31->field00_bit1); BoardRotateDiceNumbers(temp_r31->field00_bit1);
@ -1806,7 +1767,7 @@ void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) {
var_r20 = 0; var_r20 = 0;
if (motDoneF[arg0] != 0) { if (motDoneF[arg0] != 0) {
temp_r3 = motDoneF[arg0]; temp_r3 = motDoneF[arg0];
temp_r26 = (bitcopy2*) temp_r3->work; temp_r26 = OM_GET_WORK_PTR(temp_r3, bitcopy2);
temp_r26->field00_bit0 = 1; temp_r26->field00_bit0 = 1;
for (var_r19 = 0; var_r19 < 0xB4U; var_r19++) { for (var_r19 = 0; var_r19 < 0xB4U; var_r19++) {
@ -1818,7 +1779,7 @@ void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) {
if (arg2 > 0) { if (arg2 > 0) {
var_r18 = GWPlayer[arg0].character; var_r18 = GWPlayer[arg0].character;
temp_r3 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, &BoardPlayerMotBlendExec); temp_r3 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, &BoardPlayerMotBlendExec);
temp_r26 = (bitcopy2*) temp_r3->work; temp_r26 = OM_GET_WORK_PTR(temp_r3, bitcopy2);
temp_r26->field00_bit0 = 0; temp_r26->field00_bit0 = 0;
temp_r26->unk_02 = arg2; temp_r26->unk_02 = arg2;
temp_r26->unk_01 = arg0; temp_r26->unk_01 = arg0;
@ -1873,7 +1834,7 @@ void BoardPlayerMotBlendExec(omObjData* arg0) {
f32 var_f27; f32 var_f27;
bitcopy2* temp_r30; bitcopy2* temp_r30;
temp_r30 = (bitcopy2*) arg0->work; temp_r30 = OM_GET_WORK_PTR(arg0, bitcopy2);
if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) {
if (temp_r30->unk_04h > 0) { if (temp_r30->unk_04h > 0) {
BoardPlayerMotionKill(temp_r30->unk_01, temp_r30->unk_04h); BoardPlayerMotionKill(temp_r30->unk_01, temp_r30->unk_04h);
@ -1907,6 +1868,8 @@ s32 BoardPlayerMotBlendCheck(s32 arg0) {
return 1; return 1;
} }
//TODO: Make this 3 structs and give better names
typedef struct bitcopy3 { typedef struct bitcopy3 {
struct { struct {
u8 field00_bit0 : 1; u8 field00_bit0 : 1;
@ -1929,7 +1892,7 @@ void BoardDiceDigit2DInit(s32 arg0, s32 arg1) {
bitcopy3* temp_r31; bitcopy3* temp_r31;
temp_r3 = omAddObjEx(boardObjMan, 0x105, 0, 0, -1, &UpdateDiceDigit2D); temp_r3 = omAddObjEx(boardObjMan, 0x105, 0, 0, -1, &UpdateDiceDigit2D);
temp_r31 = (bitcopy3*) temp_r3->work; temp_r31 = OM_GET_WORK_PTR(temp_r3, bitcopy3);;
temp_r31->field00_bit0 = 0; temp_r31->field00_bit0 = 0;
temp_r31->field00_bit1 = 1; temp_r31->field00_bit1 = 1;
temp_r31->unk_01 = 0; temp_r31->unk_01 = 0;
@ -1954,7 +1917,7 @@ void BoardDiceDigit2DUpdateEnable(s32 arg0) {
bitcopy3* temp_r31; bitcopy3* temp_r31;
if (diceDigit2DObj != 0) { if (diceDigit2DObj != 0) {
temp_r31 = (bitcopy3*) diceDigit2DObj->work; temp_r31 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3);
temp_r31->field00_bit0 = 1; temp_r31->field00_bit0 = 1;
} }
} }
@ -1964,7 +1927,7 @@ void BoardDiceDigit2DShowSet(s32 arg0) {
bitcopy3* temp_r31; bitcopy3* temp_r31;
if (diceDigit2DObj != 0) { if (diceDigit2DObj != 0) {
temp_r31 = (bitcopy3*) diceDigit2DObj->work; temp_r31 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3);
for (var_r30 = 0; var_r30 < 2; var_r30++) { for (var_r30 = 0; var_r30 < 2; var_r30++) {
if (arg0 != 0) { if (arg0 != 0) {
@ -1984,14 +1947,14 @@ void BoardDiceDigit2DShowSet(s32 arg0) {
} }
static void UpdateDiceDigitSprite(omObjData* arg0) { static void UpdateDiceDigitSprite(omObjData* arg0) {
f32 sp1C[2]; Vec sp1C;
s32 sp14[2]; s32 sp14[2];
f32 spC[2] = { 320.0f, 256.0f }; f32 spC[2] = { 320.0f, 256.0f };
s32 var_r30; s32 var_r30;
s32 temp_r29; s32 temp_r29;
bitcopy3* temp_r31; bitcopy3* temp_r31;
temp_r31 = (bitcopy3*) arg0->work; temp_r31 = OM_GET_WORK_PTR(arg0, bitcopy3);
temp_r29 = GWPlayer[temp_r31->unk_02].roll; temp_r29 = GWPlayer[temp_r31->unk_02].roll;
if (temp_r29 != 0) { if (temp_r29 != 0) {
sp14[0] = temp_r29 % 10; sp14[0] = temp_r29 % 10;
@ -2005,14 +1968,14 @@ static void UpdateDiceDigitSprite(omObjData* arg0) {
HuSprAttrSet(temp_r31->unk_04, var_r30, 4); HuSprAttrSet(temp_r31->unk_04, var_r30, 4);
} else { } else {
if ((sp14[1] == 0) && (var_r30 == 0)) { if ((sp14[1] == 0) && (var_r30 == 0)) {
sp1C[0] = 288.0f; sp1C.x = 288.0f;
} else { } else {
sp1C[0] = spC[var_r30]; sp1C.x = spC[var_r30];
} }
sp1C[1] = 176.0f; sp1C.y = 176.0f;
HuSprAttrReset(temp_r31->unk_04, var_r30, 4); HuSprAttrReset(temp_r31->unk_04, var_r30, 4);
HuSprBankSet(temp_r31->unk_04, var_r30, sp14[var_r30]); HuSprBankSet(temp_r31->unk_04, var_r30, sp14[var_r30]);
HuSprPosSet(temp_r31->unk_04, var_r30, sp1C[0], sp1C[1]); HuSprPosSet(temp_r31->unk_04, var_r30, sp1C.x, sp1C.y);
} }
} }
} }
@ -2021,7 +1984,7 @@ static void UpdateDiceDigit2D(omObjData* arg0) {
f32 var_f30; f32 var_f30;
bitcopy3* temp_r30; bitcopy3* temp_r30;
temp_r30 = (bitcopy3*) diceDigit2DObj->work; temp_r30 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3);
if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) {
if (temp_r30->unk_04 != -1) { if (temp_r30->unk_04 != -1) {
HuSprGrpKill(temp_r30->unk_04); HuSprGrpKill(temp_r30->unk_04);
@ -2043,40 +2006,7 @@ static void UpdateDiceDigit2D(omObjData* arg0) {
var_f30 -= 90.0f; var_f30 -= 90.0f;
} }
} }
UpdateDiceDigitSprite(arg0);
{ // hack until the compiler does what we want
f32 sp1C[2];
f32 spC[2] = { 320.0f, 256.0f };
s32 sp14[2];
s32 var_r30;
s32 temp_r29;
bitcopy3* temp_r31;
temp_r31 = (bitcopy3*) arg0->work;
temp_r29 = GWPlayer[temp_r31->unk_02].roll;
if (temp_r29 != 0) {
sp14[0] = temp_r29 % 10;
sp14[1] = temp_r29 / 10;
} else {
temp_r31->field00_bit0 = 1;
}
for (var_r30 = 0; var_r30 < 2; var_r30++) {
if (((var_r30 == 1) && (sp14[1] == 0)) || (temp_r31->field00_bit1 == 0)) {
HuSprAttrSet(temp_r31->unk_04, var_r30, 4);
} else {
if ((sp14[1] == 0) && (var_r30 == 0)) {
sp1C[0] = 288.0f;
} else {
sp1C[0] = spC[var_r30];
}
sp1C[1] = 176.0f;
HuSprAttrReset(temp_r31->unk_04, var_r30, 4);
HuSprBankSet(temp_r31->unk_04, var_r30, sp14[var_r30]);
HuSprPosSet(temp_r31->unk_04, var_r30, sp1C[0], sp1C[1]);
}
}
}
} }
void BoardPlayerBtnDownWait(s32 arg0, u32 arg1) { void BoardPlayerBtnDownWait(s32 arg0, u32 arg1) {
@ -2122,9 +2052,9 @@ u32 BoardPlayerMoveAwayIsDone(void) {
void BoardPlayerMoveAwayStart(s32 arg0, s32 arg1, s32 arg2) { void BoardPlayerMoveAwayStart(s32 arg0, s32 arg1, s32 arg2) {
bitcopy3* temp_r25; bitcopy3* temp_r25;
Point3d sp28; Vec sp28;
Point3d sp1C; Vec sp1C;
Point3d sp10; Vec sp10;
s32 temp_r29; s32 temp_r29;
s32 var_r30; s32 var_r30;
s32 var_r31; s32 var_r31;
@ -2160,7 +2090,7 @@ void BoardPlayerMoveAwayStart(s32 arg0, s32 arg1, s32 arg2) {
} }
if (arg2 == 0) { if (arg2 == 0) {
moveAwayObj = omAddObjEx(boardObjMan, 0x100, 0U, 0U, -1, &MoveAwayObjFunc); moveAwayObj = omAddObjEx(boardObjMan, 0x100, 0U, 0U, -1, &MoveAwayObjFunc);
temp_r25 = (bitcopy3*) moveAwayObj->work; temp_r25 = OM_GET_WORK_PTR(moveAwayObj, bitcopy3);
temp_r25->field00_bit0 = 0; temp_r25->field00_bit0 = 0;
} }
} }
@ -2173,9 +2103,9 @@ static void MoveAwayObjFunc(omObjData* arg0) {
s32 var_r31; s32 var_r31;
bitcopy3* temp_r30; bitcopy3* temp_r30;
temp_r30 = (bitcopy3*) arg0->work; temp_r30 = OM_GET_WORK_PTR(arg0, bitcopy3);
if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) {
moveAwayObj = 0; moveAwayObj = NULL;
omDelObjEx(HuPrcCurrentGet(), arg0); omDelObjEx(HuPrcCurrentGet(), arg0);
return; return;
} }
@ -2209,19 +2139,19 @@ void BoardBowserSuitInit(s32 arg0) {
GWPlayer[arg0].bowser_suit = 1; GWPlayer[arg0].bowser_suit = 1;
temp_r3 = omAddObjEx(boardObjMan, 0x100, 0U, 0U, -1, &UpdateBowserSuit); temp_r3 = omAddObjEx(boardObjMan, 0x100, 0U, 0U, -1, &UpdateBowserSuit);
bowserSuitObj = temp_r3; bowserSuitObj = temp_r3;
temp_r31 = (bitcopy3 *) temp_r3->work; temp_r31 = OM_GET_WORK_PTR(temp_r3, bitcopy3);
temp_r31->field00_bit0 = 0; temp_r31->field00_bit0 = 0;
temp_r31->unk_01 = arg0; temp_r31->unk_01 = arg0;
temp_r31->unk_02 = 0; temp_r31->unk_02 = 0;
BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 3, 0); BoardPlayerVoiceEnableSet(arg0, 3, 0);
BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 4, 0); BoardPlayerVoiceEnableSet(arg0, 4, 0);
} }
void BoardBowserSuitKill(s32 arg0) { void BoardBowserSuitKill(s32 arg0) {
bitcopy3* temp; bitcopy3* temp;
if (bowserSuitObj != 0) { if (bowserSuitObj != 0) {
((bitcopy3*) bowserSuitObj->work)->field00_bit0 = 1; OM_GET_WORK_PTR(bowserSuitObj, bitcopy3)->field00_bit0 = 1;
} }
GWPlayer[arg0].bowser_suit = 0; GWPlayer[arg0].bowser_suit = 0;
BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 3, 1); BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 3, 1);
@ -2290,7 +2220,7 @@ void UpdateBowserSuit(omObjData* arg0) {
s16 temp_r30; s16 temp_r30;
bitcopy3* temp_r31; bitcopy3* temp_r31;
temp_r31 = (bitcopy3*) arg0->work; temp_r31 = OM_GET_WORK_PTR(arg0, bitcopy3);
if ((temp_r31->field00_bit0 != 0) || (BoardIsKill() != 0)) { if ((temp_r31->field00_bit0 != 0) || (BoardIsKill() != 0)) {
bowserSuitObj = NULL; bowserSuitObj = NULL;
omDelObjEx(HuPrcCurrentGet(), arg0); omDelObjEx(HuPrcCurrentGet(), arg0);

View file

@ -1,6 +1,8 @@
#include "game/gamework_data.h" #include "game/gamework_data.h"
#include "game/flag.h" #include "game/flag.h"
#include "game/board/lottery.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/player.h" #include "game/board/player.h"
#include "game/board/space.h" #include "game/board/space.h"
#include "game/board/star.h" #include "game/board/star.h"
@ -14,9 +16,6 @@
#include "string.h" #include "string.h"
extern s16 BoardModelCreate(s32 file, s32 *data, s32 arg3);
extern s16 BoardModelIDGet(s16 model);
static BoardSpace spaceData[2][256]; static BoardSpace spaceData[2][256];
s16 boardSpaceStarTbl[8]; s16 boardSpaceStarTbl[8];
static GXTexObj spaceHiliteTex; static GXTexObj spaceHiliteTex;
@ -637,7 +636,7 @@ s32 BoardSpaceWalkExec(s32 player, s32 space)
return 1; return 1;
} }
if(space_ptr->flag & 0x600000) { if(space_ptr->flag & 0x600000) {
u16 mg_param = GWSystem.unk_38; s32 mg_param = GWSystem.unk_38;
if(BoardPlayerSizeGet(player) == 1) { if(BoardPlayerSizeGet(player) == 1) {
BoardRotateDiceNumbers(player); BoardRotateDiceNumbers(player);
BoardMGCreate(mg_param); BoardMGCreate(mg_param);
@ -756,6 +755,32 @@ void BoardSpaceHide(s32 value)
} }
} }
static inline void InitGXSpace()
{
GXColor color = {0xFF, 0xFF, 0xFF, 0xFF};
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXInvalidateTexAll();
GXLoadTexObj(&spaceTex, GX_TEXMAP0);
GXSetNumTexGens(1);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, color);
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);
GXSetNumChans(1);
GXSetChanAmbColor(GX_COLOR0A0, color);
GXSetChanMatColor(GX_COLOR0A0, color);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_SPOT);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1);
GXSetCullMode(GX_CULL_BACK);
}
//Some stack allocation issues. code around BoardPlayerGetCurr is incorrect too //Some stack allocation issues. code around BoardPlayerGetCurr is incorrect too
static void DrawSpaces(ModelData *model, Mtx matrix) static void DrawSpaces(ModelData *model, Mtx matrix)
{ {
@ -781,41 +806,19 @@ static void DrawSpaces(ModelData *model, Mtx matrix)
GXSetViewport(camera->viewport_x, camera->viewport_y, camera->viewport_w, camera->viewport_h, camera->viewport_near, camera->viewport_far); GXSetViewport(camera->viewport_x, camera->viewport_y, camera->viewport_w, camera->viewport_h, camera->viewport_near, camera->viewport_far);
GXSetScissor(camera->viewport_x, camera->viewport_y, camera->viewport_w, camera->viewport_h); GXSetScissor(camera->viewport_x, camera->viewport_y, camera->viewport_w, camera->viewport_h);
{ {
GXColor color = { 0xFF, 0xFF, 0xFF, 0xFF };
BoardSpace *space_curr; BoardSpace *space_curr;
BoardSpace *space_hilite; BoardSpace *space_hilite;
PlayerState *player; PlayerState *player;
PlayerState *player_temp;
s16 player_mdl; s16 player_mdl;
float y_dist; float y_dist;
s32 space_img; s32 space_img;
u16 space_type; u16 space_type;
float uv_x, uv_y, uv_size; float uv_x, uv_y, uv_size;
InitGXSpace();
GXClearVtxDesc(); player = BoardPlayerGet(GWSystem.player_curr);
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXInvalidateTexAll();
GXLoadTexObj(&spaceTex, GX_TEXMAP0);
GXSetNumTexGens(1);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, color);
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);
GXSetNumChans(1);
GXSetChanAmbColor(GX_COLOR0A0, color);
GXSetChanMatColor(GX_COLOR0A0, color);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_SPOT);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1);
GXSetCullMode(GX_CULL_BACK);
player = player_temp = BoardPlayerGetCurr();
BoardPlayerPosGet(GWSystem.player_curr, &player_pos); BoardPlayerPosGet(GWSystem.player_curr, &player_pos);
player_mdl = BoardModelIDGet(BoardPlayerModelGetCurr()); player_mdl = BoardModelIDGet(BoardPlayerModelGet(GWSystem.player_curr));
space_curr = &spaceData[0][0]; space_curr = &spaceData[0][0];
space_hilite = NULL; space_hilite = NULL;
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
@ -834,7 +837,7 @@ static void DrawSpaces(ModelData *model, Mtx matrix)
if(player_pos.y-space_curr->pos.y < 0.0f) { if(player_pos.y-space_curr->pos.y < 0.0f) {
y_dist = -(player_pos.y-space_curr->pos.y); y_dist = -(player_pos.y-space_curr->pos.y);
} else { } else {
y_dist = player_pos.y-space_curr->pos.y; y_dist = player_pos.y-space_curr->pos.y;
} }
if(y_dist < 10.0f) { if(y_dist < 10.0f) {
space_hilite = space_curr; space_hilite = space_curr;

View file

@ -157,7 +157,7 @@ s16 BoardStarHostMdlGet(void) {
return hostMdl; return hostMdl;
} }
void BoardStarExec(s32 arg0, BoardSpace *arg1) { void BoardStarExec(s32 arg0, s32 arg1) {
if (GWBoardGet() == 7 || GWBoardGet() == 8) { if (GWBoardGet() == 7 || GWBoardGet() == 8) {
return; return;
} }
@ -717,8 +717,8 @@ void BoardStarShowNext(s32 arg0) {
Hu3D2Dto3D(&sp44, 1, &sp44); Hu3D2Dto3D(&sp44, 1, &sp44);
BoardModelPosSetV(BoardStarHostMdlGet(), &sp44); BoardModelPosSetV(BoardStarHostMdlGet(), &sp44);
BoardCameraRotGet(&sp2C); BoardCameraRotGet(&sp2C);
PSMTXRotRad(sp5C, 'y', 0.17453292f); PSMTXRotRad(sp5C, 'y', MTXDegToRad(10.0f));
PSMTXRotRad(sp8C, 'x', 0.017453292f * sp2C.x); PSMTXRotRad(sp8C, 'x', MTXDegToRad(sp2C.x));
PSMTXConcat(sp8C, sp5C, spBC); PSMTXConcat(sp8C, sp5C, spBC);
BoardModelMtxSet(BoardStarHostMdlGet(), &spBC); BoardModelMtxSet(BoardStarHostMdlGet(), &spBC);
BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f); BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f);

View file

@ -578,8 +578,8 @@ static void UpdateOverheadView(omObjData *arg0) {
sp20.y = var_r29[1]; sp20.y = var_r29[1];
sp20.z = 1000.0f; sp20.z = 1000.0f;
BoardCameraRotGet(&sp8); BoardCameraRotGet(&sp8);
PSMTXRotRad(sp5C, 0x78, sp8.x * 0.017453292f); PSMTXRotRad(sp5C, 'x', MTXDegToRad(sp8.x));
PSMTXRotRad(sp2C, 0x79, sp8.y * 0.017453292f); PSMTXRotRad(sp2C, 'y', MTXDegToRad(sp8.y));
PSMTXConcat(sp2C, sp5C, sp2C); PSMTXConcat(sp2C, sp5C, sp2C);
BoardModelMtxSet(temp_r31->unk04, &sp2C); BoardModelMtxSet(temp_r31->unk04, &sp2C);
Hu3D2Dto3D(&sp20, 1, &sp20); Hu3D2Dto3D(&sp20, 1, &sp20);

View file

@ -1,5 +1,6 @@
#include "game/board/warp.h" #include "game/board/warp.h"
#include "game/board/main.h" #include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/player.h" #include "game/board/player.h"
#include "game/board/tutorial.h" #include "game/board/tutorial.h"
#include "game/wipe.h" #include "game/wipe.h"
@ -21,10 +22,6 @@ extern void BoardCharWheelInit(s32, s32);
extern void BoardCharWheelSpeedSet(f32); extern void BoardCharWheelSpeedSet(f32);
extern void BoardCharWheelWait(void); extern void BoardCharWheelWait(void);
extern s32 BoardCharWheelResultGet(void); extern s32 BoardCharWheelResultGet(void);
extern f32 BoardModelMotionTimeGet(s16);
extern void BoardModelHookReset(s16);
extern s32 BoardModelHookSet(s16, char*, s16);
extern s32 BoardModelMotionEndCheck(s16);
static Vec warpPos; static Vec warpPos;

View file

@ -13,60 +13,74 @@
import argparse import argparse
import os import os
import re import re
from typing import List
script_dir = os.path.dirname(os.path.realpath(__file__)) script_dir = os.path.dirname(os.path.realpath(__file__))
root_dir = os.path.abspath(os.path.join(script_dir, "..")) root_dir = os.path.abspath(os.path.join(script_dir, ".."))
src_dir = os.path.join(root_dir, "src") src_dir = os.path.join(root_dir, "src")
include_dir = os.path.join(root_dir, "include") include_dirs = [
os.path.join(root_dir, "include"),
# Add additional include directories here
]
include_pattern = re.compile(r'^#include\s*[<"](.+?)[>"]$') include_pattern = re.compile(r'^#include\s*[<"](.+?)[>"]$')
guard_pattern = re.compile(r'^#ifndef\s+(.*)$') guard_pattern = re.compile(r"^#ifndef\s+(.*)$")
defines = set() defines = set()
def import_h_file(in_file: str, r_path: str) -> str:
rel_path = os.path.join(root_dir, r_path, in_file)
inc_path = os.path.join(include_dir, in_file)
if os.path.exists(rel_path):
return import_c_file(rel_path)
elif os.path.exists(inc_path):
return import_c_file(inc_path)
else:
print("Failed to locate", in_file)
exit(1)
def import_c_file(in_file) -> str: def import_h_file(in_file: str, r_path: str, deps: List[str]) -> str:
rel_path = os.path.join(root_dir, r_path, in_file)
if os.path.exists(rel_path):
return import_c_file(rel_path, deps)
for include_dir in include_dirs:
inc_path = os.path.join(include_dir, in_file)
if os.path.exists(inc_path):
return import_c_file(inc_path, deps)
else:
print("Failed to locate", in_file)
return ""
def import_c_file(in_file: str, deps: List[str]) -> str:
in_file = os.path.relpath(in_file, root_dir) in_file = os.path.relpath(in_file, root_dir)
out_text = '' deps.append(in_file)
out_text = ""
try: try:
with open(in_file, encoding="utf-8") as file: with open(in_file, encoding="utf-8") as file:
out_text += process_file(in_file, list(file)) out_text += process_file(in_file, list(file), deps)
except Exception: except Exception:
with open(in_file) as file: with open(in_file) as file:
out_text += process_file(in_file, list(file)) out_text += process_file(in_file, list(file), deps)
return out_text return out_text
def process_file(in_file: str, lines) -> str:
out_text = '' def process_file(in_file: str, lines: List[str], deps: List[str]) -> str:
out_text = ""
for idx, line in enumerate(lines): for idx, line in enumerate(lines):
guard_match = guard_pattern.match(line.strip()) guard_match = guard_pattern.match(line.strip())
if idx == 0: if idx == 0:
if guard_match: if guard_match:
if guard_match[1] in defines: if guard_match[1] in defines:
break break
defines.add(guard_match[1]) defines.add(guard_match[1])
print("Processing file", in_file) print("Processing file", in_file)
include_match = include_pattern.match(line.strip()) include_match = include_pattern.match(line.strip())
if include_match and not include_match[1].endswith(".s"): if include_match and not include_match[1].endswith(".s"):
out_text += f"/* \"{in_file}\" line {idx} \"{include_match[1]}\" */\n" out_text += f'/* "{in_file}" line {idx} "{include_match[1]}" */\n'
out_text += import_h_file(include_match[1], os.path.dirname(in_file)) out_text += import_h_file(include_match[1], os.path.dirname(in_file), deps)
out_text += f"/* end \"{include_match[1]}\" */\n" out_text += f'/* end "{include_match[1]}" */\n'
else: else:
out_text += line out_text += line
return out_text return out_text
def sanitize_path(path: str) -> str:
return path.replace("\\", "/").replace(" ", "\\ ")
def main(): def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="""Create a context file which can be used for decomp.me""" description="""Create a context file which can be used for decomp.me"""
@ -75,13 +89,32 @@ def main():
"c_file", "c_file",
help="""File from which to create context""", help="""File from which to create context""",
) )
parser.add_argument(
"-o",
"--output",
help="""Output file""",
default="ctx.c",
)
parser.add_argument(
"-d",
"--depfile",
help="""Dependency file""",
)
args = parser.parse_args() args = parser.parse_args()
output = import_c_file(args.c_file) deps = []
output = import_c_file(args.c_file, deps)
with open(os.path.join(root_dir, "ctx.c"), "w", encoding="utf-8") as f: with open(os.path.join(root_dir, args.output), "w", encoding="utf-8") as f:
f.write(output) f.write(output)
if args.depfile:
with open(os.path.join(root_dir, args.depfile), "w", encoding="utf-8") as f:
f.write(sanitize_path(args.output) + ":")
for dep in deps:
path = sanitize_path(dep)
f.write(f" \\\n\t{path}")
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View file

@ -16,14 +16,31 @@ import os
import platform import platform
import shutil import shutil
import stat import stat
import sys
import urllib.request import urllib.request
import zipfile import zipfile
from typing import Callable, Dict
from pathlib import Path from pathlib import Path
def dtk_url(tag): def binutils_url(tag):
uname = platform.uname()
system = uname.system.lower()
arch = uname.machine.lower()
if system == "darwin":
system = "macos"
arch = "universal"
elif arch == "amd64":
arch = "x86_64"
repo = "https://github.com/encounter/gc-wii-binutils"
return f"{repo}/releases/download/{tag}/{system}-{arch}.zip"
def compilers_url(tag: str) -> str:
return f"https://files.decomp.dev/compilers_{tag}.zip"
def dtk_url(tag: str) -> str:
uname = platform.uname() uname = platform.uname()
suffix = "" suffix = ""
system = uname.system.lower() system = uname.system.lower()
@ -39,28 +56,26 @@ def dtk_url(tag):
return f"{repo}/releases/download/{tag}/dtk-{system}-{arch}{suffix}" return f"{repo}/releases/download/{tag}/dtk-{system}-{arch}{suffix}"
def sjiswrap_url(tag): def sjiswrap_url(tag: str) -> str:
repo = "https://github.com/encounter/sjiswrap" repo = "https://github.com/encounter/sjiswrap"
return f"{repo}/releases/download/{tag}/sjiswrap-windows-x86.exe" return f"{repo}/releases/download/{tag}/sjiswrap-windows-x86.exe"
def wibo_url(tag): def wibo_url(tag: str) -> str:
repo = "https://github.com/decompals/wibo" repo = "https://github.com/decompals/wibo"
return f"{repo}/releases/download/{tag}/wibo" return f"{repo}/releases/download/{tag}/wibo"
def compilers_url(tag): TOOLS: Dict[str, Callable[[str], str]] = {
return f"https://files.decomp.dev/compilers_{tag}.zip" "binutils": binutils_url,
"compilers": compilers_url,
TOOLS = {
"dtk": dtk_url, "dtk": dtk_url,
"sjiswrap": sjiswrap_url, "sjiswrap": sjiswrap_url,
"wibo": wibo_url, "wibo": wibo_url,
"compilers": compilers_url,
} }
def main(): def main() -> None:
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("tool", help="Tool name") parser.add_argument("tool", help="Tool name")
parser.add_argument("output", type=Path, help="output file path") parser.add_argument("output", type=Path, help="output file path")
@ -77,7 +92,11 @@ def main():
data = io.BytesIO(response.read()) data = io.BytesIO(response.read())
with zipfile.ZipFile(data) as f: with zipfile.ZipFile(data) as f:
f.extractall(output) f.extractall(output)
output.touch(mode=0o755) # Make all files executable
for root, _, files in os.walk(output):
for name in files:
os.chmod(os.path.join(root, name), 0o755)
output.touch(mode=0o755) # Update dir modtime
else: else:
with open(output, "wb") as f: with open(output, "wb") as f:
shutil.copyfileobj(response, f) shutil.copyfileobj(response, f)
@ -86,4 +105,4 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View file

@ -21,50 +21,67 @@ use Python.
import re import re
import textwrap import textwrap
import os
from io import StringIO
from pathlib import Path
from typing import Dict, List, Match, Optional, Tuple, Union
NinjaPath = Union[str, Path]
NinjaPaths = Union[
List[str],
List[Path],
List[NinjaPath],
List[Optional[str]],
List[Optional[Path]],
List[Optional[NinjaPath]],
]
NinjaPathOrPaths = Union[NinjaPath, NinjaPaths]
def escape_path(word): def escape_path(word: str) -> str:
return word.replace("$ ", "$$ ").replace(" ", "$ ").replace(":", "$:") return word.replace("$ ", "$$ ").replace(" ", "$ ").replace(":", "$:")
class Writer(object): class Writer(object):
def __init__(self, output, width=78): def __init__(self, output: StringIO, width: int = 78) -> None:
self.output = output self.output = output
self.width = width self.width = width
def newline(self): def newline(self) -> None:
self.output.write("\n") self.output.write("\n")
def comment(self, text): def comment(self, text: str) -> None:
for line in textwrap.wrap( for line in textwrap.wrap(
text, self.width - 2, break_long_words=False, break_on_hyphens=False text, self.width - 2, break_long_words=False, break_on_hyphens=False
): ):
self.output.write("# " + line + "\n") self.output.write("# " + line + "\n")
def variable(self, key, value, indent=0): def variable(
if value is None: self,
return key: str,
if isinstance(value, list): value: Optional[NinjaPathOrPaths],
value = " ".join(filter(None, value)) # Filter out empty strings. indent: int = 0,
) -> None:
value = " ".join(serialize_paths(value))
self._line("%s = %s" % (key, value), indent) self._line("%s = %s" % (key, value), indent)
def pool(self, name, depth): def pool(self, name: str, depth: int) -> None:
self._line("pool %s" % name) self._line("pool %s" % name)
self.variable("depth", depth, indent=1) self.variable("depth", str(depth), indent=1)
def rule( def rule(
self, self,
name, name: str,
command, command: str,
description=None, description: Optional[str] = None,
depfile=None, depfile: Optional[NinjaPath] = None,
generator=False, generator: bool = False,
pool=None, pool: Optional[str] = None,
restat=False, restat: bool = False,
rspfile=None, rspfile: Optional[NinjaPath] = None,
rspfile_content=None, rspfile_content: Optional[NinjaPath] = None,
deps=None, deps: Optional[NinjaPathOrPaths] = None,
): ) -> None:
self._line("rule %s" % name) self._line("rule %s" % name)
self.variable("command", command, indent=1) self.variable("command", command, indent=1)
if description: if description:
@ -86,32 +103,39 @@ class Writer(object):
def build( def build(
self, self,
outputs, outputs: NinjaPathOrPaths,
rule, rule: str,
inputs=None, inputs: Optional[NinjaPathOrPaths] = None,
implicit=None, implicit: Optional[NinjaPathOrPaths] = None,
order_only=None, order_only: Optional[NinjaPathOrPaths] = None,
variables=None, variables: Optional[
implicit_outputs=None, Union[
pool=None, List[Tuple[str, Optional[NinjaPathOrPaths]]],
dyndep=None, Dict[str, Optional[NinjaPathOrPaths]],
): ]
outputs = as_list(outputs) ] = None,
implicit_outputs: Optional[NinjaPathOrPaths] = None,
pool: Optional[str] = None,
dyndep: Optional[NinjaPath] = None,
) -> List[str]:
outputs = serialize_paths(outputs)
out_outputs = [escape_path(x) for x in outputs] out_outputs = [escape_path(x) for x in outputs]
all_inputs = [escape_path(x) for x in as_list(inputs)] all_inputs = [escape_path(x) for x in serialize_paths(inputs)]
if implicit: if implicit:
implicit = [escape_path(x) for x in as_list(implicit)] implicit = [escape_path(x) for x in serialize_paths(implicit)]
all_inputs.append("|") all_inputs.append("|")
all_inputs.extend(implicit) all_inputs.extend(map(str, implicit))
if order_only: if order_only:
order_only = [escape_path(x) for x in as_list(order_only)] order_only = [escape_path(x) for x in serialize_paths(order_only)]
all_inputs.append("||") all_inputs.append("||")
all_inputs.extend(order_only) all_inputs.extend(map(str, order_only))
if implicit_outputs: if implicit_outputs:
implicit_outputs = [escape_path(x) for x in as_list(implicit_outputs)] implicit_outputs = [
escape_path(x) for x in serialize_paths(implicit_outputs)
]
out_outputs.append("|") out_outputs.append("|")
out_outputs.extend(implicit_outputs) out_outputs.extend(map(str, implicit_outputs))
self._line( self._line(
"build %s: %s" % (" ".join(out_outputs), " ".join([rule] + all_inputs)) "build %s: %s" % (" ".join(out_outputs), " ".join([rule] + all_inputs))
@ -119,7 +143,7 @@ class Writer(object):
if pool is not None: if pool is not None:
self._line(" pool = %s" % pool) self._line(" pool = %s" % pool)
if dyndep is not None: if dyndep is not None:
self._line(" dyndep = %s" % dyndep) self._line(" dyndep = %s" % serialize_path(dyndep))
if variables: if variables:
if isinstance(variables, dict): if isinstance(variables, dict):
@ -132,16 +156,16 @@ class Writer(object):
return outputs return outputs
def include(self, path): def include(self, path: str) -> None:
self._line("include %s" % path) self._line("include %s" % path)
def subninja(self, path): def subninja(self, path: str) -> None:
self._line("subninja %s" % path) self._line("subninja %s" % path)
def default(self, paths): def default(self, paths: NinjaPathOrPaths) -> None:
self._line("default %s" % " ".join(as_list(paths))) self._line("default %s" % " ".join(serialize_paths(paths)))
def _count_dollars_before_index(self, s, i): def _count_dollars_before_index(self, s: str, i: int) -> int:
"""Returns the number of '$' characters right in front of s[i].""" """Returns the number of '$' characters right in front of s[i]."""
dollar_count = 0 dollar_count = 0
dollar_index = i - 1 dollar_index = i - 1
@ -150,7 +174,7 @@ class Writer(object):
dollar_index -= 1 dollar_index -= 1
return dollar_count return dollar_count
def _line(self, text, indent=0): def _line(self, text: str, indent: int = 0) -> None:
"""Write 'text' word-wrapped at self.width characters.""" """Write 'text' word-wrapped at self.width characters."""
leading_space = " " * indent leading_space = " " * indent
while len(leading_space) + len(text) > self.width: while len(leading_space) + len(text) > self.width:
@ -187,19 +211,26 @@ class Writer(object):
self.output.write(leading_space + text + "\n") self.output.write(leading_space + text + "\n")
def close(self): def close(self) -> None:
self.output.close() self.output.close()
def as_list(input): def serialize_path(input: Optional[NinjaPath]) -> str:
if input is None: if not input:
return [] return ""
if isinstance(input, Path):
return str(input).replace("/", os.sep)
else:
return str(input)
def serialize_paths(input: Optional[NinjaPathOrPaths]) -> List[str]:
if isinstance(input, list): if isinstance(input, list):
return input return [serialize_path(path) for path in input if path]
return [input] return [serialize_path(input)] if input else []
def escape(string): def escape(string: str) -> str:
"""Escape a string such that it can be embedded into a Ninja file without """Escape a string such that it can be embedded into a Ninja file without
further interpretation.""" further interpretation."""
assert "\n" not in string, "Ninja syntax does not allow newlines" assert "\n" not in string, "Ninja syntax does not allow newlines"
@ -207,17 +238,17 @@ def escape(string):
return string.replace("$", "$$") return string.replace("$", "$$")
def expand(string, vars, local_vars={}): def expand(string: str, vars: Dict[str, str], local_vars: Dict[str, str] = {}) -> str:
"""Expand a string containing $vars as Ninja would. """Expand a string containing $vars as Ninja would.
Note: doesn't handle the full Ninja variable syntax, but it's enough Note: doesn't handle the full Ninja variable syntax, but it's enough
to make configure.py's use of it work. to make configure.py's use of it work.
""" """
def exp(m): def exp(m: Match[str]) -> str:
var = m.group(1) var = m.group(1)
if var == "$": if var == "$":
return "$" return "$"
return local_vars.get(var, vars.get(var, "")) return local_vars.get(var, vars.get(var, ""))
return re.sub(r"\$(\$|\w*)", exp, string) return re.sub(r"\$(\$|\w*)", exp, string)

File diff suppressed because it is too large Load diff

View file

@ -25,7 +25,7 @@ def in_wsl() -> bool:
return "microsoft-standard" in uname().release return "microsoft-standard" in uname().release
def import_d_file(in_file) -> str: def import_d_file(in_file: str) -> str:
out_text = "" out_text = ""
with open(in_file) as file: with open(in_file) as file:
@ -60,7 +60,7 @@ def import_d_file(in_file) -> str:
return out_text return out_text
def main(): def main() -> None:
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="""Transform a .d file from Wine paths to normal paths""" description="""Transform a .d file from Wine paths to normal paths"""
) )
@ -81,4 +81,4 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View file

@ -51,7 +51,7 @@ if __name__ == "__main__":
args = parser.parse_args() args = parser.parse_args()
api_key = args.api_key or os.environ.get("PROGRESS_API_KEY") api_key = args.api_key or os.environ.get("PROGRESS_API_KEY")
if not api_key: if not api_key:
raise "API key required" raise KeyError("API key required")
url = generate_url(args) url = generate_url(args)
entries = [] entries = []
@ -68,9 +68,12 @@ if __name__ == "__main__":
print("Publishing entry to", url) print("Publishing entry to", url)
json.dump(entries[0], sys.stdout, indent=4) json.dump(entries[0], sys.stdout, indent=4)
print() print()
r = requests.post(url, json={ r = requests.post(
"api_key": api_key, url,
"entries": entries, json={
}) "api_key": api_key,
"entries": entries,
},
)
r.raise_for_status() r.raise_for_status()
print("Done!") print("Done!")