Merge branch 'Rainchus:main' into main
This commit is contained in:
commit
8f1d6b9680
35 changed files with 4400 additions and 994 deletions
|
|
@ -17,6 +17,10 @@ modules:
|
|||
symbols: config/GMPE01_00/rels/bootDll/symbols.txt
|
||||
splits: config/GMPE01_00/rels/bootDll/splits.txt
|
||||
links: []
|
||||
extract:
|
||||
- symbol: logoNintendoData
|
||||
binary: logoNintendoData.bin
|
||||
header: logoNintendoData.inc
|
||||
- object: orig/GMPE01_00/files/dll/instDll.rel
|
||||
hash: f09399fee83c63abfe2adb25341152adad959a93
|
||||
symbols: config/GMPE01_00/rels/instDll/symbols.txt
|
||||
|
|
@ -502,3 +506,44 @@ modules:
|
|||
symbols: config/GMPE01_00/rels/m401Dll/symbols.txt
|
||||
splits: config/GMPE01_00/rels/m401Dll/splits.txt
|
||||
links: [_minigameDll]
|
||||
|
||||
extract:
|
||||
- symbol: ank8x8_4b
|
||||
binary: ank8x8_4b.bin
|
||||
header: ank8x8_4b.inc
|
||||
- symbol: refMapData0
|
||||
binary: refMapData0.anm
|
||||
header: refMapData0.inc
|
||||
- symbol: refMapData1
|
||||
binary: refMapData1.anm
|
||||
header: refMapData1.inc
|
||||
- symbol: refMapData2
|
||||
binary: refMapData2.anm
|
||||
header: refMapData2.inc
|
||||
- symbol: refMapData3
|
||||
binary: refMapData3.anm
|
||||
header: refMapData3.inc
|
||||
- symbol: refMapData4
|
||||
binary: refMapData4.anm
|
||||
header: refMapData4.inc
|
||||
- symbol: toonMapData
|
||||
binary: toonMapData.anm
|
||||
header: toonMapData.inc
|
||||
- symbol: toonMapData2
|
||||
binary: toonMapData2.anm
|
||||
header: toonMapData2.inc
|
||||
- symbol: hiliteData
|
||||
binary: hiliteData.anm
|
||||
header: hiliteData.inc
|
||||
- symbol: hiliteData2
|
||||
binary: hiliteData2.anm
|
||||
header: hiliteData2.inc
|
||||
- symbol: hiliteData3
|
||||
binary: hiliteData3.anm
|
||||
header: hiliteData3.inc
|
||||
- symbol: hiliteData4
|
||||
binary: hiliteData4.anm
|
||||
header: hiliteData4.inc
|
||||
- symbol: Ascii8x8_1bpp
|
||||
binary: Ascii8x8_1bpp.bin
|
||||
header: Ascii8x8_1bpp.inc
|
||||
|
|
|
|||
|
|
@ -5,3 +5,16 @@ Sections:
|
|||
.rodata type:rodata align:8
|
||||
.data type:data align:32
|
||||
.bss type:bss align:8
|
||||
|
||||
REL/executor.c:
|
||||
.text start:0x00000000 end:0x000000A0
|
||||
|
||||
REL/bootDll/bootDll.c:
|
||||
.text start:0x000000A0 end:0x00002944
|
||||
.rodata start:0x00000000 end:0x000000DC
|
||||
.data start:0x00000000 end:0x000000A0
|
||||
.bss start:0x00000000 end:0x0000005C
|
||||
|
||||
REL/bootDll/nintendo_data.c:
|
||||
.text start:0x00002944 end:0x000029C8
|
||||
.data start:0x000000A0 end:0x0000311D
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
_prolog = .text:0x00000000; // type:function size:0x54 scope:global
|
||||
_epilog = .text:0x00000054; // type:function size:0x4C scope:global
|
||||
fn_1_A0 = .text:0x000000A0; // type:function size:0x1CC
|
||||
ModuleProlog = .text:0x000000A0; // type:function size:0x1CC
|
||||
fn_1_26C = .text:0x0000026C; // type:function size:0x78C
|
||||
fn_1_9F8 = .text:0x000009F8; // type:function size:0xC8
|
||||
fn_1_AC0 = .text:0x00000AC0; // type:function size:0x6B8
|
||||
|
|
@ -8,7 +8,7 @@ fn_1_1178 = .text:0x00001178; // type:function size:0x3B4
|
|||
fn_1_152C = .text:0x0000152C; // type:function size:0xBD4
|
||||
fn_1_2100 = .text:0x00002100; // type:function size:0x374
|
||||
fn_1_2474 = .text:0x00002474; // type:function size:0x4D0
|
||||
fn_1_2944 = .text:0x00002944; // type:function size:0x84
|
||||
logoReadNintendo = .text:0x00002944; // type:function size:0x84
|
||||
_ctors = .ctors:0x00000000; // type:label scope:global data:4byte
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global data:4byte
|
||||
lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float
|
||||
|
|
@ -56,7 +56,7 @@ lbl_1_data_58 = .data:0x00000058; // type:object size:0x4
|
|||
lbl_1_data_5C = .data:0x0000005C; // type:object size:0x1A data:string
|
||||
lbl_1_data_76 = .data:0x00000076; // type:object size:0x13 data:string
|
||||
lbl_1_data_89 = .data:0x00000089; // type:object size:0x17
|
||||
lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x307D
|
||||
logoNintendoData = .data:0x000000A0; // type:object size:0x307D align:32
|
||||
lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x6
|
||||
lbl_1_bss_6 = .bss:0x00000006; // type:object size:0x2 data:2byte
|
||||
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x6 data:2byte
|
||||
|
|
|
|||
|
|
@ -47,6 +47,14 @@ game/decode.c:
|
|||
game/font.c:
|
||||
.data start:0x8011FE00 end:0x80121E00
|
||||
|
||||
game/init.c:
|
||||
.text start:0x80009AFC end:0x8000A464
|
||||
.data start:0x80121E00 end:0x80121F50
|
||||
.bss start:0x80145A40 end:0x80145A80
|
||||
.sdata start:0x801D3448 end:0x801D3460
|
||||
.sbss start:0x801D3AF8 end:0x801D3B28
|
||||
.sdata2 start:0x801D4968 end:0x801D4978
|
||||
|
||||
game/jmp.c:
|
||||
.text start:0x8000A464 end:0x8000A558
|
||||
|
||||
|
|
@ -89,6 +97,74 @@ game/sprput.c:
|
|||
.sbss start:0x801D3B50 end:0x801D3B58
|
||||
.sdata2 start:0x801D49F0 end:0x801D4A28
|
||||
|
||||
game/hsfload.c:
|
||||
.text start:0x80010B30 end:0x80014018
|
||||
.data start:0x80122320 end:0x80122390
|
||||
.bss start:0x8015C6C0 end:0x8015CC80
|
||||
.sbss start:0x801D3B58 end:0x801D3B90
|
||||
|
||||
game/hsfdraw.c:
|
||||
.text start:0x80014018 end:0x8001F9AC
|
||||
.rodata start:0x8011DD20 end:0x8011DD30
|
||||
.data start:0x80122390 end:0x801225A0
|
||||
.bss start:0x8015CC80 end:0x801677C0
|
||||
.sdata start:0x801D3470 end:0x801D3488
|
||||
.sbss start:0x801D3B90 end:0x801D3C30
|
||||
.sdata2 start:0x801D4A28 end:0x801D4AB0
|
||||
|
||||
game/hsfman.c:
|
||||
.text start:0x8001F9AC end:0x800250E8
|
||||
.data start:0x801225A0 end:0x8012D658
|
||||
.bss start:0x801677C0 end:0x8018D3D0
|
||||
.sbss start:0x801D3C30 end:0x801D3C60
|
||||
.sdata2 start:0x801D4AB0 end:0x801D4B10
|
||||
.sbss2 start:0x801D6BE0 end:0x801D6BE8
|
||||
|
||||
game/objmain.c:
|
||||
.text start:0x8002EBD8 end:0x8002FF4C
|
||||
.data start:0x8012D918 end:0x8012DCC8
|
||||
.bss start:0x8018FB38 end:0x8018FBF8
|
||||
.sdata start:0x801D3498 end:0x801D34A0
|
||||
.sbss start:0x801D3CC0 end:0x801D3CF0
|
||||
.sdata2 start:0x801D4C78 end:0x801D4CA0
|
||||
|
||||
game/fault.c:
|
||||
.text start:0x8002FF4C end:0x800308B8
|
||||
.data start:0x8012DCC8 end:0x8012E4F0
|
||||
.bss start:0x8018FBF8 end:0x8018FC10
|
||||
.sdata start:0x801D34A0 end:0x801D34B0
|
||||
.sbss start:0x801D3CF0 end:0x801D3D00
|
||||
|
||||
game/ovllist.c:
|
||||
.data start:0x8012F790 end:0x80130100
|
||||
|
||||
game/frand.c:
|
||||
.text start:0x800325F4 end:0x80032830
|
||||
.sbss start:0x801D3D10 end:0x801D3D18
|
||||
.sdata2 start:0x801D4CB0 end:0x801D4CC0
|
||||
|
||||
game/window.c:
|
||||
.text start:0x8004207C end:0x800483A0
|
||||
.data start:0x80130140 end:0x80130688
|
||||
.bss start:0x801923C0 end:0x801967E0
|
||||
.sdata start:0x801D35E8 end:0x801D35F0
|
||||
.sbss start:0x801D3DB0 end:0x801D3DF8
|
||||
.sdata2 start:0x801D4F08 end:0x801D4F98
|
||||
|
||||
game/messdata.c:
|
||||
.text start:0x800483A0 end:0x80048488
|
||||
|
||||
game/card.c:
|
||||
.text start:0x80048488 end:0x80048A84
|
||||
.data start:0x80130688 end:0x801306D8
|
||||
.sbss start:0x801D3DF8 end:0x801D3E00
|
||||
|
||||
game/armem.c:
|
||||
.text start:0x80048A84 end:0x800498F0
|
||||
.data start:0x801306D8 end:0x801307C8
|
||||
.bss start:0x801967E0 end:0x80196EC0
|
||||
.sbss start:0x801D3E00 end:0x801D3E10
|
||||
|
||||
Runtime.PPCEABI.H/global_destructor_chain.c:
|
||||
.text start:0x800E2008 end:0x800E2068
|
||||
.dtors start:0x8011DCE8 end:0x8011DCEC
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
38
configure.py
38
configure.py
|
|
@ -118,7 +118,7 @@ if not is_windows():
|
|||
|
||||
# Tool versions
|
||||
config.compilers_tag = "20231018"
|
||||
config.dtk_tag = "v0.6.0"
|
||||
config.dtk_tag = "v0.6.3"
|
||||
config.sjiswrap_tag = "v1.1.1"
|
||||
config.wibo_tag = "0.6.3"
|
||||
|
||||
|
|
@ -150,6 +150,7 @@ cflags_base = [
|
|||
"-fp_contract on",
|
||||
"-str reuse",
|
||||
"-i include",
|
||||
f"-i build/{config.version}/include",
|
||||
"-multibyte",
|
||||
f"-DVERSION={version_num}",
|
||||
]
|
||||
|
|
@ -172,8 +173,10 @@ cflags_runtime = [
|
|||
# REL flags
|
||||
cflags_rel = [
|
||||
*cflags_base,
|
||||
"-O0,s",
|
||||
"-O0,p",
|
||||
"-enum int",
|
||||
"-char unsigned",
|
||||
"-fp_contract off",
|
||||
"-sdata 0",
|
||||
"-sdata2 0",
|
||||
"-pool off",
|
||||
|
|
@ -183,7 +186,9 @@ cflags_rel = [
|
|||
cflags_game = [
|
||||
*cflags_base,
|
||||
"-O0,p",
|
||||
"-enum int",
|
||||
"-char unsigned",
|
||||
"-fp_contract off",
|
||||
]
|
||||
|
||||
config.linker_version = "GC/2.6"
|
||||
|
|
@ -227,17 +232,29 @@ config.libs = [
|
|||
"objects": [
|
||||
Object(NonMatching, "game/main.c"),
|
||||
Object(NonMatching, "game/pad.c"),
|
||||
Object(NonMatching, "game/dvd.c"),
|
||||
Object(Matching, "game/dvd.c"),
|
||||
Object(NonMatching, "game/data.c"),
|
||||
Object(Matching, "game/decode.c"),
|
||||
Object(NonMatching, "game/font.c"),
|
||||
Object(Matching, "game/font.c"),
|
||||
Object(Matching, "game/init.c"),
|
||||
Object(NonMatching, "game/jmp.c"),
|
||||
Object(Matching, "game/malloc.c"),
|
||||
Object(Matching, "game/memory.c"),
|
||||
Object(NonMatching, "game/printfunc.c"),
|
||||
Object(Matching, "game/printfunc.c"),
|
||||
Object(Matching, "game/process.c"),
|
||||
Object(NonMatching, "game/sprman.c"),
|
||||
Object(NonMatching, "game/sprput.c"),
|
||||
Object(NonMatching, "game/hsfload.c"),
|
||||
Object(NonMatching, "game/hsfdraw.c"),
|
||||
Object(NonMatching, "game/hsfman.c"),
|
||||
Object(Matching, "game/objmain.c"),
|
||||
Object(NonMatching, "game/fault.c"),
|
||||
Object(NonMatching, "game/frand.c"),
|
||||
Object(Matching, "game/ovllist.c"),
|
||||
Object(NonMatching, "game/window.c"),
|
||||
Object(NonMatching, "game/messdata.c"),
|
||||
Object(NonMatching, "game/card.c"),
|
||||
Object(NonMatching, "game/armem.c"),
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -270,6 +287,17 @@ config.libs = [
|
|||
Object(Matching, "REL/_minigameDLL/_minigameDLL.c"),
|
||||
],
|
||||
},
|
||||
{
|
||||
"lib": "bootDll",
|
||||
"mw_version": config.linker_version,
|
||||
"cflags": cflags_rel,
|
||||
"host": False,
|
||||
"objects": [
|
||||
Object(Matching, "REL/executor.c"),
|
||||
Object(NonMatching, "REL/bootDll/bootDll.c"),
|
||||
Object(Matching, "REL/bootDll/nintendo_data.c"),
|
||||
],
|
||||
},
|
||||
{
|
||||
"lib": "subchrselDll",
|
||||
"mw_version": config.linker_version,
|
||||
|
|
|
|||
25
get_rel_function_names.py
Executable file
25
get_rel_function_names.py
Executable file
|
|
@ -0,0 +1,25 @@
|
|||
import os
|
||||
import sys
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python script.py <file_path>")
|
||||
sys.exit(1)
|
||||
|
||||
file_path = sys.argv[1]
|
||||
lines_starting_with_fn = ""
|
||||
|
||||
with open(file_path, 'r') as file:
|
||||
for line in file:
|
||||
# Remove leading and trailing whitespaces
|
||||
line = line.strip()
|
||||
|
||||
if line.startswith(".fn fn_"):
|
||||
# Remove ".fn " from the beginning of the line
|
||||
line = line[len(".fn "):]
|
||||
|
||||
# Remove ", global" from the end of the line
|
||||
line = line.rstrip(', global')
|
||||
|
||||
lines_starting_with_fn += "// " + line + '\n\n'
|
||||
|
||||
print(lines_starting_with_fn)
|
||||
|
|
@ -3,7 +3,9 @@
|
|||
|
||||
#include "types.h"
|
||||
#include "common_structs.h"
|
||||
#include "common_enums.h"
|
||||
#include "functions.h"
|
||||
#include "variables.h"
|
||||
#include "dolphin/mtx/GeoTypes.h"
|
||||
|
||||
#endif
|
||||
35
include/common_enums.h
Normal file
35
include/common_enums.h
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#ifndef _COMMON_ENUMS_H
|
||||
#define _COMMON_ENUMS_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#define OVL_DEFINE(name, path) name,
|
||||
|
||||
typedef enum {
|
||||
OVL_INVALID = -1,
|
||||
#include "ovl_table.h"
|
||||
OVL_COUNT
|
||||
} OverlayID;
|
||||
|
||||
#undef OVL_DEFINE
|
||||
|
||||
#define DATADIR_DEFINE(name, path) name,
|
||||
|
||||
typedef enum {
|
||||
#include "datadir_table.h"
|
||||
DATADIR_COUNT
|
||||
} DataDirID;
|
||||
|
||||
#undef DATADIR_DEFINE
|
||||
|
||||
|
||||
typedef enum {
|
||||
HEAP_SYSTEM,
|
||||
HEAP_MUSIC,
|
||||
HEAP_DATA,
|
||||
HEAP_DVD,
|
||||
HEAP_MISC,
|
||||
HEAP_MAX
|
||||
} HeapID;
|
||||
|
||||
#endif
|
||||
|
|
@ -2,12 +2,14 @@
|
|||
#define _COMMON_STRUCTS_H
|
||||
|
||||
#include "types.h"
|
||||
#include "common_enums.h"
|
||||
#include "dolphin/dvd.h"
|
||||
|
||||
typedef struct UnkOvl {
|
||||
s32 unk0;
|
||||
char unk4[4];
|
||||
s32 unk8;
|
||||
} UnkOvl;
|
||||
typedef struct om_ovl_his_data {
|
||||
OverlayID overlay;
|
||||
int event;
|
||||
int stat;
|
||||
} omOvlHisData;
|
||||
|
||||
typedef struct Vec3f {
|
||||
f32 x;
|
||||
|
|
@ -57,4 +59,97 @@ typedef struct wipe_state {
|
|||
u8 unk2[20];
|
||||
} WipeState;
|
||||
|
||||
typedef struct file_list_entry {
|
||||
char *name;
|
||||
s32 file_id;
|
||||
} FileListEntry;
|
||||
|
||||
typedef struct data_read_stat {
|
||||
s32 dir_id;
|
||||
void *dir;
|
||||
void *file;
|
||||
u32 raw_len;
|
||||
u32 comp_type;
|
||||
BOOL used;
|
||||
s32 num;
|
||||
u32 status;
|
||||
DVDFileInfo file_info;
|
||||
} DataReadStat;
|
||||
|
||||
typedef struct BoardStateSubStruct {
|
||||
/* 0x00 */ s32 unk0;
|
||||
/* 0x04 */ s16 unk4;
|
||||
/* 0x06 */ s16 unk6;
|
||||
/* 0x08 */ s16 unk8;
|
||||
} BoardStateSubStruct;
|
||||
|
||||
typedef struct BoardState {
|
||||
/* 0x00 */ char unk00[0x04];
|
||||
/* 0x04 */ s8 curTurnCount;
|
||||
/* 0x05 */ s8 maxTurnCount;
|
||||
/* 0x06 */ char unk06[0x02];
|
||||
/* 0x08 */ u8 unk08;
|
||||
/* 0x09 */ s8 doubleCoinsOnSpaceBool;
|
||||
/* 0x0A */ s8 curPlayerIndex;
|
||||
/* 0x0C */ char unk0C[4];
|
||||
/* 0x10 */ BoardStateSubStruct unk10;
|
||||
/* 0x1A */ char unk1A[0xC6];
|
||||
} BoardState; //8018fcf8, sizeof 0xE0
|
||||
|
||||
typedef struct {
|
||||
u8 unk0 : 2;
|
||||
} PlayerFlags;
|
||||
|
||||
typedef struct Player {
|
||||
/* 0x00 */ s8 characterID;
|
||||
/* 0x01 */ s8 unk01;
|
||||
/* 0x02 */ s8 unk02;
|
||||
/* 0x03 */ s8 unk03;
|
||||
/* 0x04 */ s8 controllerPort;
|
||||
/* 0x05 */ s8 items[3];
|
||||
/* 0x08 */ PlayerFlags flags; //0x02 mini mushroom, 0x04 mega mushroom
|
||||
/* 0x09 */ s8 placement; //0x80 1st, 0x20 2nd, 0x40 3rd, 0x60 4th
|
||||
/* 0x0A */ u8 spacesLeftToMove;
|
||||
/* 0x0B */ char unk_0B[5];
|
||||
/* 0x10 */ s16 nextABSSpaceIndex;
|
||||
/* 0x12 */ char unk_12[2];
|
||||
/* 0x14 */ s8 blueSpacesLanded;
|
||||
/* 0x15 */ s8 redSpacesLanded;
|
||||
/* 0x16 */ s8 happeningSpacesLanded;
|
||||
/* 0x17 */ s8 chanceSpacesLanded;
|
||||
/* 0x18 */ char unk_18;
|
||||
/* 0x19 */ s8 battleSpacesLanded;
|
||||
/* 0x1A */ s8 itemSpacesLanded;
|
||||
/* 0x1B */ s8 springSpacesLanded;
|
||||
/* 0x1C */ s16 coins;
|
||||
/* 0x1E */ char unk_1E[2];
|
||||
/* 0x20 */ s16 totalCoinsCollected;
|
||||
/* 0x22 */ s16 coinPeak;
|
||||
/* 0x24 */ char unk_24[6];
|
||||
/* 0x2A */ s16 stars;
|
||||
/* 0x2C */ char unk_2C[4];
|
||||
} Player; //size of 0x30
|
||||
|
||||
typedef struct om_obj_data {
|
||||
u16 stat;
|
||||
s16 next_idx_alloc;
|
||||
s16 prio;
|
||||
s16 prev;
|
||||
s16 next;
|
||||
s16 next_idx;
|
||||
s16 group;
|
||||
u16 group_idx;
|
||||
int unk10;
|
||||
void (*func)(struct om_obj_data *);
|
||||
Vec3f trans;
|
||||
Vec3f rot;
|
||||
Vec3f scale;
|
||||
u16 mdlcnt;
|
||||
s16 *model;
|
||||
u16 mtncnt;
|
||||
s16 *motion;
|
||||
int work[4];
|
||||
void *data;
|
||||
} omObjData;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
140
include/datadir_table.h
Normal file
140
include/datadir_table.h
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
DATADIR_DEFINE(DATADIR_E3SETUP, "data/E3setup.bin")
|
||||
DATADIR_DEFINE(DATADIR_BBATTLE, "data/bbattle.bin")
|
||||
DATADIR_DEFINE(DATADIR_BGUEST, "data/bguest.bin")
|
||||
DATADIR_DEFINE(DATADIR_BKOOPA, "data/bkoopa.bin")
|
||||
DATADIR_DEFINE(DATADIR_BKOOPASUIT, "data/bkoopasuit.bin")
|
||||
DATADIR_DEFINE(DATADIR_BKUJIYA, "data/bkujiya.bin")
|
||||
DATADIR_DEFINE(DATADIR_BLAST5, "data/blast5.bin")
|
||||
DATADIR_DEFINE(DATADIR_BOARD, "data/board.bin")
|
||||
DATADIR_DEFINE(DATADIR_BPAUSE, "data/bpause.bin")
|
||||
DATADIR_DEFINE(DATADIR_BYOKODORI, "data/byokodori.bin")
|
||||
DATADIR_DEFINE(DATADIR_DAISY, "data/daisy.bin")
|
||||
DATADIR_DEFINE(DATADIR_DAISYMDL0, "data/daisymdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_DAISYMDL1, "data/daisymdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_DAISYMOT, "data/daisymot.bin")
|
||||
DATADIR_DEFINE(DATADIR_DONKEY, "data/donkey.bin")
|
||||
DATADIR_DEFINE(DATADIR_DONKEYMDL0, "data/donkeymdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_DONKEYMDL1, "data/donkeymdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_DONKEYMOT, "data/donkeymot.bin")
|
||||
DATADIR_DEFINE(DATADIR_EFFECT, "data/effect.bin")
|
||||
DATADIR_DEFINE(DATADIR_GAMEMES, "data/gamemes.bin")
|
||||
DATADIR_DEFINE(DATADIR_INST, "data/inst.bin")
|
||||
DATADIR_DEFINE(DATADIR_INSTFONT, "data/instfont.bin")
|
||||
DATADIR_DEFINE(DATADIR_INSTPIC, "data/instpic.bin")
|
||||
DATADIR_DEFINE(DATADIR_LUIGI, "data/luigi.bin")
|
||||
DATADIR_DEFINE(DATADIR_LUIGIMDL0, "data/luigimdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_LUIGIMDL1, "data/luigimdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_LUIGIMOT, "data/luigimot.bin")
|
||||
DATADIR_DEFINE(DATADIR_M300, "data/m300.bin")
|
||||
DATADIR_DEFINE(DATADIR_M302, "data/m302.bin")
|
||||
DATADIR_DEFINE(DATADIR_M303, "data/m303.bin")
|
||||
DATADIR_DEFINE(DATADIR_M330, "data/m330.bin")
|
||||
DATADIR_DEFINE(DATADIR_M333, "data/m333.bin")
|
||||
DATADIR_DEFINE(DATADIR_M401, "data/m401.bin")
|
||||
DATADIR_DEFINE(DATADIR_M402, "data/m402.bin")
|
||||
DATADIR_DEFINE(DATADIR_M403, "data/m403.bin")
|
||||
DATADIR_DEFINE(DATADIR_M404, "data/m404.bin")
|
||||
DATADIR_DEFINE(DATADIR_M405, "data/m405.bin")
|
||||
DATADIR_DEFINE(DATADIR_M406, "data/m406.bin")
|
||||
DATADIR_DEFINE(DATADIR_M407, "data/m407.bin")
|
||||
DATADIR_DEFINE(DATADIR_M408, "data/m408.bin")
|
||||
DATADIR_DEFINE(DATADIR_M409, "data/m409.bin")
|
||||
DATADIR_DEFINE(DATADIR_M410, "data/m410.bin")
|
||||
DATADIR_DEFINE(DATADIR_M411, "data/m411.bin")
|
||||
DATADIR_DEFINE(DATADIR_M412, "data/m412.bin")
|
||||
DATADIR_DEFINE(DATADIR_M413, "data/m413.bin")
|
||||
DATADIR_DEFINE(DATADIR_M414, "data/m414.bin")
|
||||
DATADIR_DEFINE(DATADIR_M415, "data/m415.bin")
|
||||
DATADIR_DEFINE(DATADIR_M416, "data/m416.bin")
|
||||
DATADIR_DEFINE(DATADIR_M417, "data/m417.bin")
|
||||
DATADIR_DEFINE(DATADIR_M418, "data/m418.bin")
|
||||
DATADIR_DEFINE(DATADIR_M419, "data/m419.bin")
|
||||
DATADIR_DEFINE(DATADIR_M420, "data/m420.bin")
|
||||
DATADIR_DEFINE(DATADIR_M421, "data/m421.bin")
|
||||
DATADIR_DEFINE(DATADIR_M422, "data/m422.bin")
|
||||
DATADIR_DEFINE(DATADIR_M423, "data/m423.bin")
|
||||
DATADIR_DEFINE(DATADIR_M424, "data/m424.bin")
|
||||
DATADIR_DEFINE(DATADIR_M425, "data/m425.bin")
|
||||
DATADIR_DEFINE(DATADIR_M426, "data/m426.bin")
|
||||
DATADIR_DEFINE(DATADIR_M427, "data/m427.bin")
|
||||
DATADIR_DEFINE(DATADIR_M428, "data/m428.bin")
|
||||
DATADIR_DEFINE(DATADIR_M429, "data/m429.bin")
|
||||
DATADIR_DEFINE(DATADIR_M430, "data/m430.bin")
|
||||
DATADIR_DEFINE(DATADIR_M431, "data/m431.bin")
|
||||
DATADIR_DEFINE(DATADIR_M432, "data/m432.bin")
|
||||
DATADIR_DEFINE(DATADIR_M433, "data/m433.bin")
|
||||
DATADIR_DEFINE(DATADIR_M434, "data/m434.bin")
|
||||
DATADIR_DEFINE(DATADIR_M435, "data/m435.bin")
|
||||
DATADIR_DEFINE(DATADIR_M436, "data/m436.bin")
|
||||
DATADIR_DEFINE(DATADIR_M437, "data/m437.bin")
|
||||
DATADIR_DEFINE(DATADIR_M438, "data/m438.bin")
|
||||
DATADIR_DEFINE(DATADIR_M439, "data/m439.bin")
|
||||
DATADIR_DEFINE(DATADIR_M440, "data/m440.bin")
|
||||
DATADIR_DEFINE(DATADIR_M441, "data/m441.bin")
|
||||
DATADIR_DEFINE(DATADIR_M442, "data/m442.bin")
|
||||
DATADIR_DEFINE(DATADIR_M443, "data/m443.bin")
|
||||
DATADIR_DEFINE(DATADIR_M444, "data/m444.bin")
|
||||
DATADIR_DEFINE(DATADIR_M445, "data/m445.bin")
|
||||
DATADIR_DEFINE(DATADIR_M446, "data/m446.bin")
|
||||
DATADIR_DEFINE(DATADIR_M447, "data/m447.bin")
|
||||
DATADIR_DEFINE(DATADIR_M448, "data/m448.bin")
|
||||
DATADIR_DEFINE(DATADIR_M449, "data/m449.bin")
|
||||
DATADIR_DEFINE(DATADIR_M450, "data/m450.bin")
|
||||
DATADIR_DEFINE(DATADIR_M451, "data/m451.bin")
|
||||
DATADIR_DEFINE(DATADIR_M453, "data/m453.bin")
|
||||
DATADIR_DEFINE(DATADIR_M455, "data/m455.bin")
|
||||
DATADIR_DEFINE(DATADIR_M456, "data/m456.bin")
|
||||
DATADIR_DEFINE(DATADIR_M457, "data/m457.bin")
|
||||
DATADIR_DEFINE(DATADIR_M458, "data/m458.bin")
|
||||
DATADIR_DEFINE(DATADIR_M459, "data/m459.bin")
|
||||
DATADIR_DEFINE(DATADIR_M460, "data/m460.bin")
|
||||
DATADIR_DEFINE(DATADIR_M461, "data/m461.bin")
|
||||
DATADIR_DEFINE(DATADIR_M462, "data/m462.bin")
|
||||
DATADIR_DEFINE(DATADIR_MARIO, "data/mario.bin")
|
||||
DATADIR_DEFINE(DATADIR_MARIOMDL0, "data/mariomdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_MARIOMDL1, "data/mariomdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_MARIOMOT, "data/mariomot.bin")
|
||||
DATADIR_DEFINE(DATADIR_MENT, "data/ment.bin")
|
||||
DATADIR_DEFINE(DATADIR_MGCONST, "data/mgconst.bin")
|
||||
DATADIR_DEFINE(DATADIR_MGMODE, "data/mgmode.bin")
|
||||
DATADIR_DEFINE(DATADIR_MODESEL, "data/modesel.bin")
|
||||
DATADIR_DEFINE(DATADIR_MPEX, "data/mpex.bin")
|
||||
DATADIR_DEFINE(DATADIR_MSTORY, "data/mstory.bin")
|
||||
DATADIR_DEFINE(DATADIR_MSTORY2, "data/mstory2.bin")
|
||||
DATADIR_DEFINE(DATADIR_MSTORY3, "data/mstory3.bin")
|
||||
DATADIR_DEFINE(DATADIR_MSTORY4, "data/mstory4.bin")
|
||||
DATADIR_DEFINE(DATADIR_OPTION, "data/option.bin")
|
||||
DATADIR_DEFINE(DATADIR_PEACH, "data/peach.bin")
|
||||
DATADIR_DEFINE(DATADIR_PEACHMDL0, "data/peachmdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_PEACHMDL1, "data/peachmdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_PEACHMOT, "data/peachmot.bin")
|
||||
DATADIR_DEFINE(DATADIR_PRESENT, "data/present.bin")
|
||||
DATADIR_DEFINE(DATADIR_RESULT, "data/result.bin")
|
||||
DATADIR_DEFINE(DATADIR_SAF, "data/saf.bin")
|
||||
DATADIR_DEFINE(DATADIR_SELMENU, "data/selmenu.bin")
|
||||
DATADIR_DEFINE(DATADIR_SETUP, "data/setup.bin")
|
||||
DATADIR_DEFINE(DATADIR_STAFF, "data/staff.bin")
|
||||
DATADIR_DEFINE(DATADIR_TITLE, "data/title.bin")
|
||||
DATADIR_DEFINE(DATADIR_W01, "data/w01.bin")
|
||||
DATADIR_DEFINE(DATADIR_W02, "data/w02.bin")
|
||||
DATADIR_DEFINE(DATADIR_W03, "data/w03.bin")
|
||||
DATADIR_DEFINE(DATADIR_W04, "data/w04.bin")
|
||||
DATADIR_DEFINE(DATADIR_W05, "data/w05.bin")
|
||||
DATADIR_DEFINE(DATADIR_W06, "data/w06.bin")
|
||||
DATADIR_DEFINE(DATADIR_W10, "data/w10.bin")
|
||||
DATADIR_DEFINE(DATADIR_W20, "data/w20.bin")
|
||||
DATADIR_DEFINE(DATADIR_W21, "data/w21.bin")
|
||||
DATADIR_DEFINE(DATADIR_WALUIGI, "data/waluigi.bin")
|
||||
DATADIR_DEFINE(DATADIR_WALUIGIMDL0, "data/waluigimdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_WALUIGIMDL1, "data/waluigimdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_WALUIGIMOT, "data/waluigimot.bin")
|
||||
DATADIR_DEFINE(DATADIR_WARIO, "data/wario.bin")
|
||||
DATADIR_DEFINE(DATADIR_WARIOMDL0, "data/wariomdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_WARIOMDL1, "data/wariomdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_WARIOMOT, "data/wariomot.bin")
|
||||
DATADIR_DEFINE(DATADIR_WIN, "data/win.bin")
|
||||
DATADIR_DEFINE(DATADIR_YOSHI, "data/yoshi.bin")
|
||||
DATADIR_DEFINE(DATADIR_YOSHIMDL0, "data/yoshimdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_YOSHIMDL1, "data/yoshimdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_YOSHIMOT, "data/yoshimot.bin")
|
||||
DATADIR_DEFINE(DATADIR_ZTAR, "data/ztar.bin")
|
||||
|
|
@ -121,6 +121,9 @@ BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset,
|
|||
|
||||
#define DVDReadAsync(fileInfo, addr, length, offset, callback) \
|
||||
DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
|
||||
#define DVDRead(fileInfo, addr, length, offset) \
|
||||
DVDReadPrio((fileInfo), (addr), (length), (offset), 2)
|
||||
|
||||
#define DVDSeekAsync(fileInfo, offset, callback) \
|
||||
DVDSeekAsyncPrio((fileInfo), (offset), (callback), 2)
|
||||
|
||||
|
|
|
|||
|
|
@ -8,37 +8,36 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
// extern GXRenderModeObj GXNtsc240Ds;
|
||||
// extern GXRenderModeObj GXNtsc240DsAa;
|
||||
// extern GXRenderModeObj GXNtsc240Int;
|
||||
// extern GXRenderModeObj GXNtsc240IntAa;
|
||||
extern GXRenderModeObj GXNtsc240Ds;
|
||||
extern GXRenderModeObj GXNtsc240DsAa;
|
||||
extern GXRenderModeObj GXNtsc240Int;
|
||||
extern GXRenderModeObj GXNtsc240IntAa;
|
||||
extern GXRenderModeObj GXNtsc480IntDf;
|
||||
// extern GXRenderModeObj GXNtsc480Int;
|
||||
// extern GXRenderModeObj GXNtsc480IntAa;
|
||||
// extern GXRenderModeObj GXNtsc480Prog;
|
||||
// extern GXRenderModeObj GXNtsc480ProgSoft;
|
||||
// extern GXRenderModeObj GXNtsc480ProgAa;
|
||||
// extern GXRenderModeObj GXMpal240Ds;
|
||||
// extern GXRenderModeObj GXMpal240DsAa;
|
||||
// extern GXRenderModeObj GXMpal240Int;
|
||||
// extern GXRenderModeObj GXMpal240IntAa;
|
||||
extern GXRenderModeObj GXNtsc480Int;
|
||||
extern GXRenderModeObj GXNtsc480IntAa;
|
||||
extern GXRenderModeObj GXNtsc480Prog;
|
||||
extern GXRenderModeObj GXNtsc480ProgAa;
|
||||
extern GXRenderModeObj GXMpal240Ds;
|
||||
extern GXRenderModeObj GXMpal240DsAa;
|
||||
extern GXRenderModeObj GXMpal240Int;
|
||||
extern GXRenderModeObj GXMpal240IntAa;
|
||||
extern GXRenderModeObj GXMpal480IntDf;
|
||||
// extern GXRenderModeObj GXMpal480Int;
|
||||
// extern GXRenderModeObj GXMpal480IntAa;
|
||||
// extern GXRenderModeObj GXPal264Ds;
|
||||
// extern GXRenderModeObj GXPal264DsAa;
|
||||
// extern GXRenderModeObj GXPal264Int;
|
||||
// extern GXRenderModeObj GXPal264IntAa;
|
||||
extern GXRenderModeObj GXMpal480Int;
|
||||
extern GXRenderModeObj GXMpal480IntAa;
|
||||
extern GXRenderModeObj GXPal264Ds;
|
||||
extern GXRenderModeObj GXPal264DsAa;
|
||||
extern GXRenderModeObj GXPal264Int;
|
||||
extern GXRenderModeObj GXPal264IntAa;
|
||||
extern GXRenderModeObj GXPal528IntDf;
|
||||
// extern GXRenderModeObj GXPal528Int;
|
||||
// extern GXRenderModeObj GXPal524IntAa;
|
||||
// extern GXRenderModeObj GXEurgb60Hz240Ds;
|
||||
// extern GXRenderModeObj GXEurgb60Hz240DsAa;
|
||||
// extern GXRenderModeObj GXEurgb60Hz240Int;
|
||||
// extern GXRenderModeObj GXEurgb60Hz240IntAa;
|
||||
extern GXRenderModeObj GXPal528Int;
|
||||
extern GXRenderModeObj GXPal524IntAa;
|
||||
extern GXRenderModeObj GXEurgb60Hz240Ds;
|
||||
extern GXRenderModeObj GXEurgb60Hz240DsAa;
|
||||
extern GXRenderModeObj GXEurgb60Hz240Int;
|
||||
extern GXRenderModeObj GXEurgb60Hz240IntAa;
|
||||
extern GXRenderModeObj GXEurgb60Hz480IntDf;
|
||||
// extern GXRenderModeObj GXEurgb60Hz480Int;
|
||||
// extern GXRenderModeObj GXEurgb60Hz480IntAa;
|
||||
extern GXRenderModeObj GXEurgb60Hz480Int;
|
||||
extern GXRenderModeObj GXEurgb60Hz480IntAa;
|
||||
|
||||
#define GX_MAX_Z24 0x00FFFFFF
|
||||
|
||||
|
|
|
|||
|
|
@ -86,6 +86,11 @@ static inline void GXPosition2f32(const f32 x, const f32 y) {
|
|||
GXWGFifo.f32 = y;
|
||||
}
|
||||
|
||||
static inline void GXPosition2s16(const s16 x, const s16 y) {
|
||||
GXWGFifo.s16 = x;
|
||||
GXWGFifo.s16 = y;
|
||||
}
|
||||
|
||||
static inline void GXPosition3s16(const s16 x, const s16 y, const s16 z) {
|
||||
GXWGFifo.s16 = x;
|
||||
GXWGFifo.s16 = y;
|
||||
|
|
@ -108,6 +113,12 @@ static inline void GXColor1u32(const u32 v) {
|
|||
GXWGFifo.u32 = v;
|
||||
}
|
||||
|
||||
static inline void GXColor3u8(const u8 r, const u8 g, const u8 b) {
|
||||
GXWGFifo.u8 = r;
|
||||
GXWGFifo.u8 = g;
|
||||
GXWGFifo.u8 = b;
|
||||
}
|
||||
|
||||
static inline void GXColor4u8(const u8 r, const u8 g, const u8 b, const u8 a) {
|
||||
GXWGFifo.u8 = r;
|
||||
GXWGFifo.u8 = g;
|
||||
|
|
@ -125,11 +136,14 @@ static inline void GXTexCoord2f32(const f32 u, const f32 v) {
|
|||
GXWGFifo.f32 = v;
|
||||
}
|
||||
|
||||
|
||||
static inline void GXPosition1x8(u8 index) {
|
||||
GXWGFifo.u8 = index;
|
||||
}
|
||||
|
||||
static inline void GXColor1x8(u8 index) {
|
||||
GXWGFifo.u8 = index;
|
||||
}
|
||||
|
||||
static inline void GXEnd(void) {}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ u32 OSUncachedToCached(void* ucaddr);
|
|||
#define OSDiffTick(tick1, tick0) ((s32)(tick1) - (s32)(tick0))
|
||||
|
||||
#define OSRoundUp32B(v) (((u32)(v + 31) & ~31))
|
||||
#define OSRoundDown32B(x) (((u32)(x)) & ~31)
|
||||
|
||||
void* OSGetArenaHi(void);
|
||||
void* OSGetArenaLo(void);
|
||||
|
|
@ -218,6 +219,9 @@ void OSReport(const char* msg, ...);
|
|||
void OSPanic(const char* file, int line, const char* msg, ...);
|
||||
void OSFatal(GXColor fg, GXColor bg, const char* msg);
|
||||
|
||||
u32 OSGetPhysicalMemSize(void);
|
||||
u32 OSGetConsoleSimulatedMemSize(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ void* OSAllocFixed(void** rstart, void** rend);
|
|||
void OSFreeToHeap(OSHeapHandle heap, void* ptr);
|
||||
long OSCheckHeap(OSHeapHandle heap);
|
||||
void OSDumpHeap(OSHeapHandle heap);
|
||||
void *OSAllocFixed(void **rstart, void **rend);
|
||||
u32 OSReferentSize(void* ptr);
|
||||
void OSVisitAllocated(OSAllocVisitor visitor);
|
||||
extern volatile OSHeapHandle __OSCurrHeap;
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@
|
|||
|
||||
#include "types.h"
|
||||
#include "common_structs.h"
|
||||
#include "common_enums.h"
|
||||
|
||||
#include "dolphin/gx/GXStruct.h"
|
||||
|
||||
void Hu3DBGColorSet(u8, u8, u8);
|
||||
void Hu3DCameraCreate(s16);
|
||||
void Hu3DCameraPerspectiveSet(s16, f32, f32, f32, f32);
|
||||
void Hu3DCameraViewportSet(s16, f32, f32, f32, f32, f32, f32);
|
||||
void omOvlHisChg(s32, s32, s32, s32);
|
||||
UnkOvl* omOvlHisGet(s32);
|
||||
void* omInitObjMan(s32, s32);
|
||||
void fn_80044920(s16);
|
||||
void fn_80045F74(s16, s32);
|
||||
s32 fn_800578E4(void);
|
||||
|
|
@ -18,18 +18,19 @@ void fn_80032A58(int arg0);
|
|||
void fn_80035A0C(void);
|
||||
|
||||
void HuDecodeData(void *src, void *dst, u32 size, int decode_type);
|
||||
|
||||
void HuMemInitAll(void);
|
||||
void *HuMemInit(void *ptr, s32 size);
|
||||
void HuMemDCFlushAll();
|
||||
void HuMemDCFlush(int heap);
|
||||
void *HuMemDirectMalloc(int heap, s32 size);
|
||||
void *HuMemDirectMallocNum(int heap, s32 size, u32 num);
|
||||
void HuMemDCFlush(HeapID heap);
|
||||
void *HuMemDirectMalloc(HeapID heap, s32 size);
|
||||
void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num);
|
||||
void HuMemDirectFree(void *ptr);
|
||||
void HuMemDirectFreeNum(int heap, u32 num);
|
||||
s32 HuMemUsedMallocSizeGet(int heap);
|
||||
s32 HuMemUsedMallocBlockGet(int heap);
|
||||
u32 HuMemHeapSizeGet(int heap);
|
||||
void *HuMemHeapPtrGet(int heap);
|
||||
void HuMemDirectFreeNum(HeapID heap, u32 num);
|
||||
s32 HuMemUsedMallocSizeGet(HeapID heap);
|
||||
s32 HuMemUsedMallocBlockGet(HeapID heap);
|
||||
u32 HuMemHeapSizeGet(HeapID heap);
|
||||
void *HuMemHeapPtrGet(HeapID heap);
|
||||
|
||||
void *HuMemHeapInit(void *ptr, s32 size);
|
||||
void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr);
|
||||
|
|
@ -42,6 +43,7 @@ s32 HuMemMemoryAllocSizeGet(s32 size);
|
|||
void HuMemHeapDump(void *heap_ptr, s16 status);
|
||||
|
||||
void HuPrcInit(void);
|
||||
void HuPrcEnd(void);
|
||||
Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_size);
|
||||
void HuPrcChildLink(Process *parent, Process *child);
|
||||
void HuPrcChildUnlink(Process *process);
|
||||
|
|
@ -63,10 +65,110 @@ void HuPrcResetStat(Process *process, u16 value);
|
|||
void HuPrcAllPause(int flag);
|
||||
void HuPrcAllUPause(int flag);
|
||||
|
||||
void omOvlGotoEx(int id, s16 end_mode, int stat, int event);
|
||||
void omOvlReturnEx(int level, s16 end_mode);
|
||||
void omMasterInit(int prio, FileListEntry *ovl_list, int ovl_count, OverlayID start_ovl);
|
||||
void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat);
|
||||
void omOvlGotoEx(OverlayID overlay, s16 arg2, int event, int stat);
|
||||
void omOvlReturnEx(s16 level, s16 arg2);
|
||||
void omOvlKill(s16 arg);
|
||||
void omOvlHisChg(s32 level, OverlayID overlay, int event, int stat);
|
||||
omOvlHisData *omOvlHisGet(s32 level);
|
||||
Process *omInitObjMan(s16 max_objs, int prio);
|
||||
void omDestroyObjMan(void);
|
||||
omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt, s16 group, void (*func)(omObjData *));
|
||||
void omAddMember(Process *objman_process, u16 group, omObjData *object);
|
||||
void omDelObjEx(Process *objman_process, omObjData *object);
|
||||
void omDelMember(Process *objman_process, omObjData *object);
|
||||
void omMakeGroupEx(Process *objman_process, u16 group, u16 max_objs);
|
||||
omObjData **omGetGroupMemberListEx(Process *objman_process, s16 group);
|
||||
void omSetStatBit(omObjData *obj, u16 stat);
|
||||
void omResetStatBit(omObjData *obj, u16 stat);
|
||||
void omSetTra(omObjData *obj, float x, float y, float z);
|
||||
void omSetRot(omObjData *obj, float x, float y, float z);
|
||||
void omSetSca(omObjData *obj, float x, float y, float z);
|
||||
void omMain(void);
|
||||
void omAllPause(BOOL pause);
|
||||
char omPauseChk(void);
|
||||
OverlayID omCurrentOvlGet(void);
|
||||
|
||||
|
||||
void omDLLDBGOut(void);
|
||||
void omDLLInit(FileListEntry *ovl_list);
|
||||
int omDLLStart(s16 ovl, s16 dll);
|
||||
void omDLLNumEnd(s16 ovl, s16 arg2);
|
||||
|
||||
void omSysPauseEnable(BOOL flag);
|
||||
|
||||
|
||||
void WipeCreate(char dir, char type, short duration);
|
||||
|
||||
u16 print8(s16 x, s16 y, float scale, char *str, ...);
|
||||
void pfInit(void);
|
||||
void pfClsScr(void);
|
||||
s16 print8(s16 x, s16 y, float scale, char *str, ...);
|
||||
s16 printWin(s16 x, s16 y, s16 w, s16 h, GXColor *color);
|
||||
void pfDrawFonts(void);
|
||||
|
||||
void *HuDvdDataRead(char *path);
|
||||
void **HuDvdDataReadMulti(char **paths);
|
||||
void *HuDvdDataReadDirect(char *path, HeapID heap);
|
||||
void *HuDvdDataFastRead(s32 entrynum);
|
||||
void *HuDvdDataFastReadNum(s32 entrynum, s32 num);
|
||||
void *HuDvdDataFastReadAsync(s32 entrynum, DataReadStat *stat);
|
||||
void HuDvdDataClose(void *ptr);
|
||||
void HuDvdErrorWatch();
|
||||
|
||||
void HuDataInit(void);
|
||||
int HuDataReadChk(s32 data_num);
|
||||
DataReadStat *HuDataGetStatus(void *dir_ptr);
|
||||
void *HuDataGetDirPtr(s32 data_num);
|
||||
DataReadStat *HuDataDirRead(s32 data_num);
|
||||
DataReadStat *HuDataDirReadNum(s32 data_num, s32 num);
|
||||
DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num);
|
||||
void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo);
|
||||
s32 HuDataDirReadAsync(s32 data_num);
|
||||
s32 HuDataDirReadNumAsync(s32 data_num, s32 num);
|
||||
BOOL HuDataGetAsyncStat(s32 status);
|
||||
void *HuDataRead(s32 data_num);
|
||||
void *HuDataReadNum(s32 data_num, s32 num);
|
||||
void *HuDataSelHeapRead(s32 data_num, HeapID heap);
|
||||
void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap);
|
||||
void **HuDataReadMulti(s32 *data_ids);
|
||||
s32 HuDataGetSize(s32 data_num);
|
||||
void HuDataClose(void *ptr);
|
||||
void HuDataCloseMulti(void **ptrs);
|
||||
void HuDataDirClose(s32 data_id);
|
||||
void HuDataDirCloseNum(s32 num);
|
||||
void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap);
|
||||
|
||||
void *HuARDirCheck(s32 dir);
|
||||
void HuAR_ARAMtoMRAM(void *dst);
|
||||
void HuAR_ARAMtoMRAMNum(void *dst, s32 num);
|
||||
BOOL HuARDMACheck();
|
||||
|
||||
void Hu3DModelPosSet(s16 index, float x, float y, float z);
|
||||
void Hu3DModelRotSet(s16 index, float x, float y, float z);
|
||||
void Hu3DModelScaleSet(s16 index, float x, float y, float z);
|
||||
|
||||
void espInit(void);
|
||||
|
||||
void HuSprClose(void);
|
||||
|
||||
void HuWinAllKill(void);
|
||||
|
||||
void HuPadRumbleAllStop(void);
|
||||
|
||||
void HuAudFXListnerKill(void);
|
||||
void HuAudDllSndGrpSet(u16 ovl);
|
||||
void fn_800338EC(s16 ovl);
|
||||
|
||||
void fn_80035A0C(void);
|
||||
|
||||
void fn_8003F3AC(void);
|
||||
void fn_8004D6F4(s16 arg);
|
||||
|
||||
s32 _CheckFlag(u32 flag);
|
||||
|
||||
void BoardMessCreate(s16, s32, s32);
|
||||
void BoardMessKill(void);
|
||||
void BoardMessWait(void);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
99
include/ovl_table.h
Normal file
99
include/ovl_table.h
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
OVL_DEFINE(OVL__MINI, "dll/_minigameDLL.rel")
|
||||
OVL_DEFINE(OVL_BOOT, "dll/bootdll.rel")
|
||||
OVL_DEFINE(OVL_E3SETUP, "dll/e3setupDLL.rel")
|
||||
OVL_DEFINE(OVL_INST, "dll/instdll.rel")
|
||||
OVL_DEFINE(OVL_M300, "dll/m300dll.rel")
|
||||
OVL_DEFINE(OVL_M302, "dll/m302dll.rel")
|
||||
OVL_DEFINE(OVL_M303, "dll/m303dll.rel")
|
||||
OVL_DEFINE(OVL_M330, "dll/m330dll.rel")
|
||||
OVL_DEFINE(OVL_M333, "dll/m333dll.rel")
|
||||
OVL_DEFINE(OVL_M401, "dll/m401dll.rel")
|
||||
OVL_DEFINE(OVL_M402, "dll/m402dll.rel")
|
||||
OVL_DEFINE(OVL_M403, "dll/m403dll.rel")
|
||||
OVL_DEFINE(OVL_M404, "dll/m404dll.rel")
|
||||
OVL_DEFINE(OVL_M405, "dll/m405dll.rel")
|
||||
OVL_DEFINE(OVL_M406, "dll/m406dll.rel")
|
||||
OVL_DEFINE(OVL_M407, "dll/m407dll.rel")
|
||||
OVL_DEFINE(OVL_M408, "dll/m408dll.rel")
|
||||
OVL_DEFINE(OVL_M409, "dll/m409dll.rel")
|
||||
OVL_DEFINE(OVL_M410, "dll/m410dll.rel")
|
||||
OVL_DEFINE(OVL_M411, "dll/m411dll.rel")
|
||||
OVL_DEFINE(OVL_M412, "dll/m412dll.rel")
|
||||
OVL_DEFINE(OVL_M413, "dll/m413dll.rel")
|
||||
OVL_DEFINE(OVL_M414, "dll/m414dll.rel")
|
||||
OVL_DEFINE(OVL_M415, "dll/m415dll.rel")
|
||||
OVL_DEFINE(OVL_M416, "dll/m416dll.rel")
|
||||
OVL_DEFINE(OVL_M417, "dll/m417dll.rel")
|
||||
OVL_DEFINE(OVL_M418, "dll/m418dll.rel")
|
||||
OVL_DEFINE(OVL_M419, "dll/m419dll.rel")
|
||||
OVL_DEFINE(OVL_M420, "dll/m420dll.rel")
|
||||
OVL_DEFINE(OVL_M421, "dll/m421dll.rel")
|
||||
OVL_DEFINE(OVL_M422, "dll/m422dll.rel")
|
||||
OVL_DEFINE(OVL_M423, "dll/m423dll.rel")
|
||||
OVL_DEFINE(OVL_M424, "dll/m424dll.rel")
|
||||
OVL_DEFINE(OVL_M425, "dll/m425dll.rel")
|
||||
OVL_DEFINE(OVL_M426, "dll/m426dll.rel")
|
||||
OVL_DEFINE(OVL_M427, "dll/m427dll.rel")
|
||||
OVL_DEFINE(OVL_M428, "dll/m428dll.rel")
|
||||
OVL_DEFINE(OVL_M429, "dll/m429dll.rel")
|
||||
OVL_DEFINE(OVL_M430, "dll/m430dll.rel")
|
||||
OVL_DEFINE(OVL_M431, "dll/m431dll.rel")
|
||||
OVL_DEFINE(OVL_M432, "dll/m432dll.rel")
|
||||
OVL_DEFINE(OVL_M433, "dll/m433dll.rel")
|
||||
OVL_DEFINE(OVL_M434, "dll/m434dll.rel")
|
||||
OVL_DEFINE(OVL_M435, "dll/m435dll.rel")
|
||||
OVL_DEFINE(OVL_M436, "dll/m436dll.rel")
|
||||
OVL_DEFINE(OVL_M437, "dll/m437dll.rel")
|
||||
OVL_DEFINE(OVL_M438, "dll/m438dll.rel")
|
||||
OVL_DEFINE(OVL_M439, "dll/m439dll.rel")
|
||||
OVL_DEFINE(OVL_M440, "dll/m440dll.rel")
|
||||
OVL_DEFINE(OVL_M441, "dll/m441dll.rel")
|
||||
OVL_DEFINE(OVL_M442, "dll/m442dll.rel")
|
||||
OVL_DEFINE(OVL_M443, "dll/m443dll.rel")
|
||||
OVL_DEFINE(OVL_M444, "dll/m444dll.rel")
|
||||
OVL_DEFINE(OVL_M445, "dll/m445dll.rel")
|
||||
OVL_DEFINE(OVL_M446, "dll/m446dll.rel")
|
||||
OVL_DEFINE(OVL_M447, "dll/m447dll.rel")
|
||||
OVL_DEFINE(OVL_M448, "dll/m448dll.rel")
|
||||
OVL_DEFINE(OVL_M449, "dll/m449dll.rel")
|
||||
OVL_DEFINE(OVL_M450, "dll/m450dll.rel")
|
||||
OVL_DEFINE(OVL_M451, "dll/m451dll.rel")
|
||||
OVL_DEFINE(OVL_M453, "dll/m453dll.rel")
|
||||
OVL_DEFINE(OVL_M455, "dll/m455dll.rel")
|
||||
OVL_DEFINE(OVL_M456, "dll/m456dll.rel")
|
||||
OVL_DEFINE(OVL_M457, "dll/m457dll.rel")
|
||||
OVL_DEFINE(OVL_M458, "dll/m458dll.rel")
|
||||
OVL_DEFINE(OVL_M459, "dll/m459dll.rel")
|
||||
OVL_DEFINE(OVL_M460, "dll/m460dll.rel")
|
||||
OVL_DEFINE(OVL_M461, "dll/m461dll.rel")
|
||||
OVL_DEFINE(OVL_M462, "dll/m462dll.rel")
|
||||
OVL_DEFINE(OVL_M463, "dll/m463dll.rel")
|
||||
OVL_DEFINE(OVL_MENT, "dll/mentdll.rel")
|
||||
OVL_DEFINE(OVL_MESS, "dll/messdll.rel")
|
||||
OVL_DEFINE(OVL_MGMODE, "dll/mgmodedll.rel")
|
||||
OVL_DEFINE(OVL_MODELTEST, "dll/modeltestdll.rel")
|
||||
OVL_DEFINE(OVL_MODESEL, "dll/modeseldll.rel")
|
||||
OVL_DEFINE(OVL_MPEX, "dll/mpexdll.rel")
|
||||
OVL_DEFINE(OVL_MSETUP, "dll/msetupdll.rel")
|
||||
OVL_DEFINE(OVL_MSTORY2, "dll/mstory2dll.rel")
|
||||
OVL_DEFINE(OVL_MSTORY3, "dll/mstory3dll.rel")
|
||||
OVL_DEFINE(OVL_MSTORY4, "dll/mstory4dll.rel")
|
||||
OVL_DEFINE(OVL_MSTORY, "dll/mstorydll.rel")
|
||||
OVL_DEFINE(OVL_NIS, "dll/nisdll.rel")
|
||||
OVL_DEFINE(OVL_OPTION, "dll/option.rel")
|
||||
OVL_DEFINE(OVL_PRESENT, "dll/present.rel")
|
||||
OVL_DEFINE(OVL_RESULT, "dll/resultdll.rel")
|
||||
OVL_DEFINE(OVL_SAF, "dll/safdll.rel")
|
||||
OVL_DEFINE(OVL_SELMENU, "dll/selmenuDLL.rel")
|
||||
OVL_DEFINE(OVL_STAFF, "dll/staffdll.rel")
|
||||
OVL_DEFINE(OVL_SUBCHRSEL, "dll/subchrseldll.rel")
|
||||
OVL_DEFINE(OVL_W01, "dll/w01dll.rel")
|
||||
OVL_DEFINE(OVL_W02, "dll/w02dll.rel")
|
||||
OVL_DEFINE(OVL_W03, "dll/w03dll.rel")
|
||||
OVL_DEFINE(OVL_W04, "dll/w04dll.rel")
|
||||
OVL_DEFINE(OVL_W05, "dll/w05dll.rel")
|
||||
OVL_DEFINE(OVL_W06, "dll/w06dll.rel")
|
||||
OVL_DEFINE(OVL_W10, "dll/w10dll.rel")
|
||||
OVL_DEFINE(OVL_W20, "dll/w20dll.rel")
|
||||
OVL_DEFINE(OVL_W21, "dll/w21dll.rel")
|
||||
OVL_DEFINE(OVL_ZTAR, "dll/ztardll.rel")
|
||||
19
include/stdarg.h
Normal file
19
include/stdarg.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef STDARG_H
|
||||
#define STDARG_H
|
||||
|
||||
typedef struct {
|
||||
char gpr;
|
||||
char fpr;
|
||||
char reserved[2];
|
||||
char* input_arg_area;
|
||||
char* reg_save_area;
|
||||
} __va_list[1];
|
||||
typedef __va_list va_list;
|
||||
|
||||
void* __va_arg(va_list v_list, unsigned char type);
|
||||
|
||||
#define va_start(ap, fmt) ((void) fmt, __builtin_va_info(&ap))
|
||||
#define va_arg(ap, t) (*((t*) __va_arg(ap, _var_arg_typeof(t))))
|
||||
#define va_end(ap) (void) 0
|
||||
|
||||
#endif
|
||||
12
include/stdio.h
Normal file
12
include/stdio.h
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#ifndef _STDIO_H_
|
||||
#define _STDIO_H_
|
||||
|
||||
#include "stdarg.h"
|
||||
|
||||
int puts(const char* s);
|
||||
int printf(const char*, ...);
|
||||
int sprintf(char* s, const char* format, ...);
|
||||
int vprintf(const char* format, va_list arg);
|
||||
int vsprintf(char* s, const char* format, va_list arg);
|
||||
|
||||
#endif
|
||||
|
|
@ -4,11 +4,13 @@
|
|||
#include "types.h"
|
||||
#include "common_structs.h"
|
||||
#include "dolphin/os.h"
|
||||
#include "dolphin/gx/GXStruct.h"
|
||||
|
||||
extern u16 HuPadBtnDown[4];
|
||||
extern u8 HuPadDStk[4];
|
||||
|
||||
extern OSHeapHandle currentHeapHandle;
|
||||
extern GXRenderModeObj *RenderMode;
|
||||
|
||||
extern BOOL saftyFrameF;
|
||||
extern u16 strlinecnt;
|
||||
|
|
@ -20,4 +22,26 @@ extern WipeState wipeData;
|
|||
|
||||
extern PlayerConfig gPlayerConfig[4];
|
||||
|
||||
extern FileListEntry _ovltbl[];
|
||||
|
||||
extern u32 DirDataSize;
|
||||
|
||||
extern u32 totalPolyCnted;
|
||||
extern char fadeStat;
|
||||
|
||||
extern omObjData *omDBGSysKeyObj;
|
||||
extern Process *omwatchproc;
|
||||
extern OverlayID omnextovl;
|
||||
extern OverlayID omcurovl;
|
||||
extern int omcurdll;
|
||||
extern int omovlhisidx;
|
||||
extern int omovlevtno;
|
||||
extern int omnextovlevtno;
|
||||
extern int omovlstat;
|
||||
extern char omUPauseFlag;
|
||||
extern s16 omSysExitReq;
|
||||
extern s16 omdispinfo;
|
||||
extern char omSysPauseEnableFlag;
|
||||
extern OverlayID omprevovl;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
15
src/REL/bootDll/nintendo_data.c
Normal file
15
src/REL/bootDll/nintendo_data.c
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#include "common.h"
|
||||
|
||||
#include "logoNintendoData.inc"
|
||||
|
||||
void *logoReadNintendo(void)
|
||||
{
|
||||
u32 *src = (u32 *)logoNintendoData;
|
||||
u32 size = *src++;
|
||||
void *dst = HuMemDirectMalloc(HEAP_DATA, size);
|
||||
int decode_type = *src++;
|
||||
if(dst) {
|
||||
HuDecodeData(src, dst, size, decode_type);
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
12
src/REL/safDll/safDll.c
Normal file
12
src/REL/safDll/safDll.c
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#include "common.h"
|
||||
#include "REL/executor.h"
|
||||
|
||||
void fn_1_0(void) {
|
||||
|
||||
}
|
||||
|
||||
//fn_1_4
|
||||
// https://decomp.me/scratch/Ii0sV
|
||||
|
||||
// fn_1_288
|
||||
// https://decomp.me/scratch/VQ3CT
|
||||
|
|
@ -97,7 +97,7 @@ static void SubchrMain()
|
|||
WipeCreate(2, 0, -1);
|
||||
HuPrcSleep(wipeData.duration+1.0f);
|
||||
fn_80035A0C();
|
||||
omOvlGotoEx(41, 1, 0, 0);
|
||||
omOvlGotoEx(OVL_M433, 1, 0, 0);
|
||||
do {
|
||||
HuPrcVSleep();
|
||||
} while(1);
|
||||
|
|
|
|||
746
src/REL/w10Dll/w10Dll.c
Normal file
746
src/REL/w10Dll/w10Dll.c
Normal file
|
|
@ -0,0 +1,746 @@
|
|||
#include "common.h"
|
||||
#include "REL/executor.h"
|
||||
|
||||
s16 HuWinCreate(float x, float y, s16 w, s16 h, s16 frame);
|
||||
|
||||
typedef struct unkw10Dll {
|
||||
char unk0[0x0C];
|
||||
Vec3f unk0C;
|
||||
Vec3f unk18;
|
||||
s32 unk24;
|
||||
} unkw10Dll; //sizeof 0x28
|
||||
|
||||
typedef struct w10DllUnk01 {
|
||||
u8 unk0;
|
||||
f32 unk4;
|
||||
f32 unk8;
|
||||
f32 unkC;
|
||||
f32 unk10;
|
||||
} w10DllUnk01; //sizeof ?
|
||||
|
||||
typedef struct w10DllUnk02 {
|
||||
char unk00[0x5C];
|
||||
w10DllUnk01* unk5C;
|
||||
} w10DllUnk02; //sizeof ?
|
||||
|
||||
//this belongs to m456Dll
|
||||
w10DllUnk02** fn_8002FAC0(Process*, s32);
|
||||
void fn_8003FD10(s16, f32, f32);
|
||||
extern s16 lbl_1_bss_20;
|
||||
extern f32 lbl_1_rodata_5C;
|
||||
extern f32 lbl_1_rodata_60;
|
||||
s16 fn_8003F958(s32, s32, s32);
|
||||
void fn_8003FBEC(s16);
|
||||
void fn_8008853C(s32);
|
||||
extern s32 lbl_801A52E8;
|
||||
void fn_800B42B4(s32);
|
||||
void fn_80082AAC(s32);
|
||||
void fn_800B4264(s32, s32, s32);
|
||||
void fn_1_1FB0(void);
|
||||
void fn_1_1E3C(s32, s32, s32);
|
||||
void fn_8007500C(s32);
|
||||
void fn_1_BA0(s32);
|
||||
void fn_8006F0D4(s32, f32);
|
||||
f32 fn_8006F128(s32);
|
||||
f64 fmod(f32, f64);
|
||||
void fn_1_C20(void);
|
||||
void fn_8006F61C(s16, s32);
|
||||
void fn_800B42BC(s16);
|
||||
void fn_80023828(s32, s32);
|
||||
s32 fn_8006DBD4(s16);
|
||||
void fn_8005B150(void*, void*);
|
||||
void fn_1_6D8(void);
|
||||
void fn_1_E0(void);
|
||||
void fn_8006F2E8(s32, Vec3f*);
|
||||
void HuWinMesSet(s16, s32);
|
||||
void fn_1_1D68(void);
|
||||
void fn_1_1DEC(void);
|
||||
void fn_1_AEC(void);
|
||||
void fn_80042848(s16);
|
||||
void fn_80045BF4(s16, s32);
|
||||
void fn_80045D7C(s16, s32, s32, s32, s32);
|
||||
void fn_80045E84(s16, s32);
|
||||
void fn_80046F04(s32, f32*, ...);
|
||||
void fn_8005D10C(void*, void*);
|
||||
s16 fn_8006D9A4(s32, void*, s32);
|
||||
void fn_8006DB90(s16);
|
||||
void fn_8006DDE8(s16, f32);
|
||||
void fn_8006E2B8(s16, s32, s32);
|
||||
void fn_8006E878(s16, f32);
|
||||
void fn_8006F158(s16, void*);
|
||||
void fn_8006F1A8(s16, f32, f32, f32);
|
||||
s32 fn_8006F220(s16 arg0, Vec3f* arg1);
|
||||
void fn_8006F50C(s16, s32);
|
||||
void fn_80073FF4(void*);
|
||||
void fn_80073FFC(void*);
|
||||
void fn_80074004(void*);
|
||||
s32 fn_800745F0(s32, s32);
|
||||
void fn_800772EC(s32);
|
||||
void fn_80077A3C(void);
|
||||
void fn_80077AAC(s16);
|
||||
void fn_8007A83C(s16);
|
||||
void fn_80083EDC(s16);
|
||||
void fn_800A4F6C(s16);
|
||||
void fn_800B3FD8(void*);
|
||||
void fn_800B4274(s32, s32);
|
||||
void fn_1_1AAC(void);
|
||||
void fn_1_8C0(void);
|
||||
void fn_1_904(void);
|
||||
void fn_1_908(void);
|
||||
s32 fn_1_90C(void);
|
||||
void fn_1_91C(void);
|
||||
void Hu3D2Dto3D(Vec3f*, s32, Vec3f*);
|
||||
void fn_8005D5C0(Vec3f*);
|
||||
void fn_8006F338(s16, f32, f32, f32);
|
||||
s32 fn_8005B6A8(void);
|
||||
void fn_8006EFBC(s16, Mtx);
|
||||
void fn_8006F270(s16, f32, f32, f32);
|
||||
void fn_8003FB08(s16);
|
||||
extern Vec3f lbl_1_data_80[];
|
||||
extern f32 lbl_1_rodata_38;
|
||||
extern f32 lbl_1_rodata_3C;
|
||||
extern f32 lbl_1_rodata_40;
|
||||
extern Process* lbl_1_bss_18;
|
||||
extern s16 lbl_1_bss_1C;
|
||||
extern s16 lbl_1_bss_1E;
|
||||
extern s32 lbl_1_data_78; //no idea on the type of this
|
||||
extern f64 lbl_1_rodata_28;
|
||||
extern f32 lbl_1_rodata_30;
|
||||
extern f32 lbl_1_rodata_34;
|
||||
extern BoardStateSubStruct* lbl_1_bss_0;
|
||||
extern s16 lbl_1_bss_10[12]; //could be incorrect size
|
||||
extern void* lbl_1_bss_8; //unknown type
|
||||
extern s16 lbl_1_bss_C;
|
||||
extern s16 lbl_1_bss_E;
|
||||
extern unkw10Dll lbl_1_data_0[1];
|
||||
extern s16 lbl_1_bss_22[11];
|
||||
extern s32 lbl_1_data_2A8[11];
|
||||
extern s16 lbl_1_data_28;
|
||||
extern s16 lbl_1_data_2A;
|
||||
extern s16 lbl_1_data_2C;
|
||||
extern s16 lbl_1_data_2E;
|
||||
extern s16 lbl_1_data_30;
|
||||
extern s16 lbl_1_data_32;
|
||||
extern s32 lbl_1_data_54; //unknown type
|
||||
extern s32 lbl_1_data_5C; //unknown type
|
||||
extern s32 lbl_1_data_64; //unknown type
|
||||
extern s32 lbl_1_data_6C; //unknown type
|
||||
extern f32 lbl_1_rodata_10;
|
||||
extern f32 lbl_1_rodata_14;
|
||||
extern f32 lbl_1_rodata_18;
|
||||
extern f32 lbl_1_rodata_1C;
|
||||
extern BoardState lbl_8018FCF8;
|
||||
|
||||
/*
|
||||
void fn_1_0(void) {
|
||||
fn_8005B150(&fn_1_E0, &fn_1_6D8);
|
||||
}
|
||||
*/
|
||||
|
||||
// function is probably global. only inlined in rels?
|
||||
/*
|
||||
inline s32 get_current_board(void) {
|
||||
return lbl_8018FCF8.unk08 & 0x1F;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_E0(void) {
|
||||
f32 sp10;
|
||||
f32 spC;
|
||||
s32 sp8;
|
||||
|
||||
s32 i;
|
||||
unkw10Dll* temp_r30;
|
||||
s32 temp;
|
||||
s32 temp2;
|
||||
|
||||
temp2 = get_current_board();
|
||||
lbl_1_bss_0 = &lbl_8018FCF8.unk10;
|
||||
lbl_1_bss_0->unk0 = 0;
|
||||
lbl_1_bss_0->unk4 = 0;
|
||||
lbl_1_bss_0->unk6 = 0;
|
||||
fn_800B3FD8(&fn_1_1AAC);
|
||||
fn_1_AEC();
|
||||
fn_1_1D68();
|
||||
lbl_1_bss_C = 0;
|
||||
fn_800772EC(0x7B0000);
|
||||
temp = fn_800745F0(0, 1);
|
||||
fn_800B4274(temp, 1);
|
||||
lbl_1_data_28 = fn_8006D9A4(0x7B0001, NULL, 0);
|
||||
fn_8006DDE8(lbl_1_data_28, lbl_1_rodata_10);
|
||||
fn_8006F1A8(lbl_1_data_28, lbl_1_rodata_14, lbl_1_rodata_14, lbl_1_rodata_14);
|
||||
fn_8006E2B8(lbl_1_data_28, 0, 0x40000001);
|
||||
fn_8006E878(lbl_1_data_28, lbl_1_rodata_18);
|
||||
lbl_1_data_2A = fn_8006D9A4(0x7B0002, NULL, 0);
|
||||
fn_8006DDE8(lbl_1_data_2A, lbl_1_rodata_10);
|
||||
fn_8006F1A8(lbl_1_data_2A, lbl_1_rodata_14, lbl_1_rodata_14, lbl_1_rodata_14);
|
||||
fn_8006E2B8(lbl_1_data_2A, 0, 0x40000001);
|
||||
lbl_1_data_2C = fn_8006D9A4(0x7B0011, &lbl_1_data_54, 0);
|
||||
fn_8006F1A8(lbl_1_data_2C, lbl_1_rodata_14, lbl_1_rodata_14, lbl_1_rodata_14);
|
||||
fn_8006E2B8(lbl_1_data_2C, 1, 0x40000001);
|
||||
lbl_1_data_2E = fn_8006D9A4(0x20005, &lbl_1_data_5C, 0);
|
||||
fn_8006E2B8(lbl_1_data_2E, 1, 0x40000001);
|
||||
lbl_1_data_32 = fn_8006D9A4(0x20012, &lbl_1_data_64, 0);
|
||||
fn_8006E2B8(lbl_1_data_32, 1, 0x40000001);
|
||||
lbl_1_data_30 = fn_8006D9A4(0x2000D, &lbl_1_data_6C, 0);
|
||||
fn_8006E2B8(lbl_1_data_30, 1, 0x40000001);
|
||||
fn_8005D10C(&fn_1_8C0, &fn_1_904);
|
||||
for (i = 0; i < 1; i++) {
|
||||
temp_r30 = &lbl_1_data_0[i];
|
||||
if (temp_r30->unk24 != -1) {
|
||||
lbl_1_bss_8 = NULL;
|
||||
lbl_1_bss_10[i] = fn_8006D9A4(temp_r30->unk24, lbl_1_bss_8, 0);
|
||||
fn_8006F158(lbl_1_bss_10[i], temp_r30);
|
||||
fn_8006F220(lbl_1_bss_10[i], &temp_r30->unk0C);
|
||||
fn_8006F2E8(lbl_1_bss_10[i], &temp_r30->unk18);
|
||||
fn_8006F50C(lbl_1_bss_10[i], 1);
|
||||
if (lbl_1_bss_8 != NULL) {
|
||||
fn_8006E2B8(lbl_1_bss_10[i], 0, 0x40000001);
|
||||
}
|
||||
}
|
||||
}
|
||||
fn_8006F50C(lbl_1_bss_10[0], 0);
|
||||
lbl_1_bss_0->unk8 = fn_8006D9A4(0x7000A, NULL, 0);
|
||||
fn_8006F50C(lbl_1_bss_0->unk8, 0);
|
||||
fn_80073FF4(&fn_1_90C);
|
||||
fn_80073FFC(&fn_1_91C);
|
||||
fn_80074004(&fn_1_908);
|
||||
fn_80083EDC(lbl_1_data_2C);
|
||||
fn_800A4F6C(lbl_1_data_32);
|
||||
fn_80077AAC(lbl_1_data_2E);
|
||||
fn_8007A83C(lbl_1_data_30);
|
||||
fn_80046F04(1, &spC, 0x2E003A);
|
||||
lbl_1_bss_E = HuWinCreate(lbl_1_rodata_1C, lbl_1_rodata_20, spC, sp10, 1);
|
||||
HuWinMesSet(lbl_1_bss_E, 0x2E003A);
|
||||
fn_80045E84(lbl_1_bss_E, 0);
|
||||
fn_80045BF4(lbl_1_bss_E, 1);
|
||||
fn_80045D7C(lbl_1_bss_E, 7, 0, 0, 0);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_6D8(void) {
|
||||
s32 i;
|
||||
for (i = 0; i < 1; i++) {
|
||||
if (lbl_1_bss_10[i] != 0) {
|
||||
fn_8006DB90(lbl_1_bss_10[i]);
|
||||
lbl_1_bss_10[i] = 0;
|
||||
}
|
||||
}
|
||||
if (lbl_1_data_32 != -1) {
|
||||
fn_8006DB90(lbl_1_data_32);
|
||||
lbl_1_data_32 = -1;
|
||||
}
|
||||
if (lbl_1_data_2E != -1) {
|
||||
fn_8006DB90(lbl_1_data_2E);
|
||||
lbl_1_data_2E = -1;
|
||||
}
|
||||
if (lbl_1_data_30 != -1) {
|
||||
fn_8006DB90(lbl_1_data_30);
|
||||
lbl_1_data_30 = -1;
|
||||
}
|
||||
if (lbl_1_data_2C != -1) {
|
||||
fn_8006DB90(lbl_1_data_2C);
|
||||
lbl_1_data_2C = -1;
|
||||
}
|
||||
if (lbl_1_data_28 != -1) {
|
||||
fn_8006DB90(lbl_1_data_28);
|
||||
lbl_1_data_28 = -1;
|
||||
}
|
||||
if (lbl_1_data_2A != -1) {
|
||||
fn_8006DB90(lbl_1_data_2A);
|
||||
lbl_1_data_2A = -1;
|
||||
}
|
||||
fn_8006DB90(lbl_1_bss_0->unk8);
|
||||
fn_1_1DEC();
|
||||
fn_80042848(lbl_1_bss_E);
|
||||
fn_80077A3C();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_8C0(void) {
|
||||
s32 temp = fn_8006DBD4(lbl_1_data_28);
|
||||
fn_80023828(temp, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_904(void) {
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_908(void) {
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
s32 fn_1_90C(void) {
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_914(void) {
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_918(void) {
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_91C(void) {
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
s32 fn_1_920(s32 arg0, f32 arg8, f32 arg9) {
|
||||
s32 var_r31;
|
||||
f32 var_f29;
|
||||
f32 var_f31;
|
||||
|
||||
var_r31 = 0;
|
||||
var_f31 = fn_8006F128(arg0);
|
||||
arg8 = fmod(arg8, lbl_1_rodata_28);
|
||||
if (var_f31 < lbl_1_rodata_14) {
|
||||
var_f31 += lbl_1_rodata_30;
|
||||
}
|
||||
if (arg8 < lbl_1_rodata_14) {
|
||||
arg8 += lbl_1_rodata_30;
|
||||
}
|
||||
if (var_f31 != arg8) {
|
||||
var_f29 = arg8 - var_f31;
|
||||
if (var_f29 < lbl_1_rodata_14) {
|
||||
var_f29 += lbl_1_rodata_30;
|
||||
}
|
||||
if (var_f29 < lbl_1_rodata_34) {
|
||||
if (var_f29 > arg9) {
|
||||
var_f31 = var_f31 + arg9;
|
||||
} else {
|
||||
var_f31 = arg8;
|
||||
}
|
||||
} else if ((lbl_1_rodata_30 - var_f29) > arg9) {
|
||||
var_f31 = var_f31 - arg9;
|
||||
} else {
|
||||
var_f31 = arg8;
|
||||
}
|
||||
if (var_f31 < lbl_1_rodata_14) {
|
||||
var_f31 += lbl_1_rodata_30;
|
||||
}
|
||||
if (var_f31 >= lbl_1_rodata_30) {
|
||||
var_f31 -= lbl_1_rodata_30;
|
||||
}
|
||||
fn_8006F0D4(arg0, var_f31);
|
||||
} else {
|
||||
var_r31 = 1;
|
||||
}
|
||||
return var_r31;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_AEC(void) {
|
||||
lbl_1_bss_1C = 0;
|
||||
lbl_1_bss_1E = fn_8006D9A4(0x7B000F, &lbl_1_data_78, 0);
|
||||
fn_8006E2B8(lbl_1_bss_1E, 1, 0x40000001);
|
||||
fn_800B42BC(lbl_1_bss_1E);
|
||||
fn_8006F61C(lbl_1_bss_1E, 6);
|
||||
lbl_1_bss_18 = HuPrcCreate(fn_1_C20, 0x1FFF, 0x1800, 0);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_BA0(s32 arg0) {
|
||||
s32 var_r31;
|
||||
|
||||
switch (lbl_1_bss_1C) {
|
||||
case 0:
|
||||
var_r31 = 5;
|
||||
break;
|
||||
case 1:
|
||||
var_r31 = 6;
|
||||
break;
|
||||
}
|
||||
BoardMessCreate(var_r31, arg0, -1);
|
||||
BoardMessWait();
|
||||
BoardMessKill();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_C10(void) {
|
||||
HuPrcEnd();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_C20(void) {
|
||||
Mtx sp20;
|
||||
Vec3f sp14;
|
||||
Vec3f sp8;
|
||||
|
||||
while (1) {
|
||||
if (fn_8005B6A8() != 0) {
|
||||
fn_8006DB90(lbl_1_bss_1E);
|
||||
fn_800B42BC(-1);
|
||||
HuPrcEnd();
|
||||
}
|
||||
Hu3D2Dto3D(&lbl_1_data_80[lbl_1_bss_1C], 1, &sp14);
|
||||
fn_8006F158(lbl_1_bss_1E, &sp14);
|
||||
fn_8005D5C0(&sp8);
|
||||
PSMTXRotRad(sp20, 'y', lbl_1_rodata_38);
|
||||
fn_8006EFBC(lbl_1_bss_1E, sp20);
|
||||
fn_8006F270(lbl_1_bss_1E, sp8.x, lbl_1_rodata_3C, lbl_1_rodata_3C);
|
||||
fn_8006F338(lbl_1_bss_1E, lbl_1_rodata_40, lbl_1_rodata_40, lbl_1_rodata_40);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_D2C(void) {
|
||||
fn_1_BA0(0x2E0001);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_D54(void) {
|
||||
fn_1_BA0(0x2E0002);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_D7C(void) {
|
||||
fn_1_BA0(0x2E0003);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_DA4(void) {
|
||||
fn_1_BA0(0x2E0004);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_DCC(void) {
|
||||
fn_1_BA0(0x2E0005);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_DF4(void) {
|
||||
fn_1_BA0(0x2E0006);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_E1C(void) {
|
||||
fn_1_BA0(0x2E0007);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_E44(void) {
|
||||
fn_1_BA0(0x2E0008);
|
||||
fn_1_BA0(0x2E0009);
|
||||
fn_8007500C(0);
|
||||
fn_8006F50C(lbl_1_data_2C, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_E94(void) {
|
||||
fn_1_BA0(0x2E000A);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_EBC(void) {
|
||||
fn_1_BA0(0x2E000B);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_EE4(void) {
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_EE8(void) {
|
||||
fn_1_1E3C(0, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E000C);
|
||||
fn_1_BA0(0x2E000D);
|
||||
fn_1_1FB0();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_F30(void) {
|
||||
fn_1_1E3C(1, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E000E);
|
||||
fn_1_1FB0();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_F6C(void) {
|
||||
fn_1_1E3C(2, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E000F);
|
||||
fn_1_1FB0();
|
||||
fn_800B4264(0, 0x50, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_FB8(void) {
|
||||
fn_1_1E3C(3, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E0010);
|
||||
fn_1_1FB0();
|
||||
fn_1_BA0(0x2E0011);
|
||||
fn_800B4264(-0x50, 0, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1010(void) {
|
||||
fn_1_1E3C(4, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E0012);
|
||||
fn_1_1FB0();
|
||||
fn_800B4264(0, 0x50, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_105C(void) {
|
||||
fn_1_1E3C(5, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E0013);
|
||||
fn_1_1FB0();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1098(void) {
|
||||
fn_1_BA0(0x2E0014);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_10C0(void) {
|
||||
fn_1_BA0(0x2E0015);
|
||||
fn_800B4264(-0x50, 0, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_10F8(void) {
|
||||
fn_1_1E3C(6, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E0016);
|
||||
fn_1_1FB0();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1134(void) {
|
||||
fn_1_1E3C(7, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E0017);
|
||||
fn_1_1FB0();
|
||||
fn_80082AAC(1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1178(void) {
|
||||
fn_1_BA0(0x2E0018);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_11A0(void) {
|
||||
s32 temp;
|
||||
|
||||
fn_1_BA0(0x2E0019);
|
||||
temp = fn_800745F0(0, 1);
|
||||
fn_800B4274(temp, 0);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_11EC(void) {
|
||||
s32 temp;
|
||||
|
||||
fn_1_BA0(0x2E001A);
|
||||
temp = fn_800745F0(0, 1);
|
||||
fn_800B4274(temp, 0);
|
||||
fn_800B42B4(0);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1240(void) {
|
||||
fn_1_BA0(0x2E001B);
|
||||
fn_800B4264(0x50, 0, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1278(void) {
|
||||
fn_1_BA0(0x2E001C);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_12A0(void) {
|
||||
fn_1_BA0(0x2E001D);
|
||||
fn_80062B74(2, 1);
|
||||
fn_800B42B4(1);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_12DC(void) {
|
||||
fn_1_BA0(0x2E001E);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1304(void) {
|
||||
fn_1_BA0(0x2E001F);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_132C(void) {
|
||||
fn_1_BA0(0x2E0020);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1354(void) {
|
||||
fn_1_BA0(0x2E0021);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_137C(void) {
|
||||
fn_1_BA0(0x2E0022);
|
||||
}
|
||||
*/
|
||||
|
||||
// fn_1_13A4
|
||||
|
||||
/*
|
||||
void fn_1_176C(void) {
|
||||
fn_1_C10(1);
|
||||
fn_1_BA0(0x2E0024);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_179C(void) {
|
||||
fn_1_BA0(0x2E0025);
|
||||
gPlayerData[1].flags.unk0 = 2;
|
||||
gPlayerData[3].flags.unk0 = 2;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_17F4(void) {
|
||||
fn_1_BA0(0x2E0026);
|
||||
gPlayerData[0].flags.unk0 = 2;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1834(void) {
|
||||
fn_1_BA0(0x2E0027);
|
||||
gPlayerData[0].flags.unk0 = 1;
|
||||
gPlayerData[1].flags.unk0 = 1;
|
||||
gPlayerData[2].flags.unk0 = 1;
|
||||
gPlayerData[3].flags.unk0 = 2;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_18BC(void) {
|
||||
fn_1_BA0(0x2E0028);
|
||||
fn_1_BA0(0x2E0029);
|
||||
lbl_801A52E8 = 0;
|
||||
fn_8008853C(0);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1908(void) {
|
||||
fn_1_BA0(0x2E002D);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1930(void) {
|
||||
fn_1_BA0(0x2E002F);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1958(void) {
|
||||
fn_1_BA0(0x2E0031);
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1980(void) {
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
// fn_1_1984
|
||||
|
||||
// fn_1_1AAC
|
||||
|
||||
/*
|
||||
void fn_1_1D68(void) {
|
||||
s32 temp_r4;
|
||||
s32 temp_r5;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 11; i++) {
|
||||
lbl_1_bss_22[i] = fn_8003F958(lbl_1_data_2A8[i], 0, 0);
|
||||
fn_8003FBEC(lbl_1_bss_22[i]);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
void fn_1_1DEC(void) {
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 11; i++) {
|
||||
fn_8003FB08(lbl_1_bss_22[i]);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// fn_1_1E3C
|
||||
|
||||
/*
|
||||
void fn_1_1FB0(void) {
|
||||
f32 var_f31;
|
||||
f32 var_f30;
|
||||
u32 i;
|
||||
|
||||
var_f31 = lbl_1_rodata_60;
|
||||
var_f30 = lbl_1_rodata_60;
|
||||
for (i = 0; i < 15; i++) {
|
||||
var_f31 -= lbl_1_rodata_5C;
|
||||
var_f30 -= lbl_1_rodata_5C;
|
||||
fn_8003FD10(lbl_1_bss_20, var_f31, var_f30);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
fn_8003FBEC(lbl_1_bss_20);
|
||||
}
|
||||
*/
|
||||
552
src/game/data.c
Normal file
552
src/game/data.c
Normal file
|
|
@ -0,0 +1,552 @@
|
|||
#include "common.h"
|
||||
#include "dolphin/dvd.h"
|
||||
|
||||
#define PTR_OFFSET(ptr, offset) (void *)(((u8 *)(ptr)+(u32)(offset)))
|
||||
#define DATA_EFF_SIZE(size) (((size)+1) & ~0x1)
|
||||
|
||||
static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num);
|
||||
|
||||
#define DATA_MAX_READSTAT 128
|
||||
|
||||
#define DATADIR_DEFINE(name, path) { path, -1 },
|
||||
|
||||
static FileListEntry DataDirStat[DATADIR_COUNT+1] = {
|
||||
#include "datadir_table.h"
|
||||
{ NULL, -1 }
|
||||
};
|
||||
|
||||
#undef DATADIR_DEFINE
|
||||
|
||||
u32 DirDataSize;
|
||||
static u32 DataDirMax;
|
||||
static s32 shortAccessSleep;
|
||||
static DataReadStat ReadDataStat[DATA_MAX_READSTAT];
|
||||
|
||||
void HuDataInit(void)
|
||||
{
|
||||
int i = 0;
|
||||
FileListEntry *dir_stat = DataDirStat;
|
||||
DataReadStat *read_stat;
|
||||
while(dir_stat->name) {
|
||||
if((dir_stat->file_id = DVDConvertPathToEntrynum(dir_stat->name)) == -1) {
|
||||
OSReport("data.c: Data File Error(%s)\n", dir_stat->name);
|
||||
OSPanic("data.c", 65, "\n");
|
||||
}
|
||||
i++;
|
||||
dir_stat++;
|
||||
}
|
||||
DataDirMax = i;
|
||||
for(i=0, read_stat = ReadDataStat; i<DATA_MAX_READSTAT; i++, read_stat++) {
|
||||
read_stat->dir_id = -1;
|
||||
read_stat->used = FALSE;
|
||||
read_stat->status = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int HuDataReadStatusGet(void)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].dir_id == -1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i >= DATA_MAX_READSTAT) {
|
||||
i = -1;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
int HuDataReadChk(s32 data_num)
|
||||
{
|
||||
int i;
|
||||
data_num >>= 16;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].dir_id == data_num && ReadDataStat[i].status != 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i >= DATA_MAX_READSTAT) {
|
||||
i = -1;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
DataReadStat *HuDataGetStatus(void *dir_ptr)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].dir == dir_ptr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i > DATA_MAX_READSTAT) {
|
||||
return NULL;
|
||||
}
|
||||
return &ReadDataStat[i];
|
||||
}
|
||||
|
||||
void *HuDataGetDirPtr(s32 data_num)
|
||||
{
|
||||
int status = HuDataReadChk(data_num);
|
||||
if(status < 0) {
|
||||
return NULL;
|
||||
}
|
||||
return ReadDataStat[status].dir;
|
||||
}
|
||||
|
||||
DataReadStat *HuDataDirRead(s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
s32 dir_id;
|
||||
dir_id = data_num >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_num);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if((status = HuDataReadChk(data_num)) < 0) {
|
||||
void *dir_aram;
|
||||
if(dir_aram = HuARDirCheck(data_num)) {
|
||||
HuAR_ARAMtoMRAM(dir_aram);
|
||||
while(HuARDMACheck());
|
||||
status = HuDataReadChk(data_num);
|
||||
read_stat = &ReadDataStat[status];
|
||||
} else {
|
||||
status = HuDataReadStatusGet();
|
||||
if(status == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->dir = HuDvdDataFastRead(DataDirStat[dir_id].file_id);
|
||||
if(read_stat->dir) {
|
||||
read_stat->dir_id = dir_id;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
read_stat = &ReadDataStat[status];
|
||||
}
|
||||
return read_stat;
|
||||
}
|
||||
|
||||
DataReadStat *HuDataDirReadNum(s32 data_num, s32 num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
s32 dir_id;
|
||||
dir_id = data_num >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_num);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if((status = HuDataReadChk(data_num)) < 0) {
|
||||
void *dir_aram;
|
||||
if((dir_aram = HuARDirCheck(data_num))) {
|
||||
OSReport("ARAM data num %x\n", data_num);
|
||||
HuAR_ARAMtoMRAMNum(dir_aram, num);
|
||||
while(HuARDMACheck());
|
||||
status = HuDataReadChk(data_num);
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->used = TRUE;
|
||||
read_stat->num = num;
|
||||
} else {
|
||||
OSReport("data num %x\n", data_num);
|
||||
status = HuDataReadStatusGet();
|
||||
if(status == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->dir = HuDvdDataFastReadNum(DataDirStat[dir_id].file_id, num);
|
||||
if(read_stat->dir) {
|
||||
read_stat->dir_id = dir_id;
|
||||
read_stat->used = TRUE;
|
||||
read_stat->num = num;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
read_stat = &ReadDataStat[status];
|
||||
}
|
||||
return read_stat;
|
||||
}
|
||||
|
||||
DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat = HuDataGetStatus(dir_ptr);
|
||||
int status;
|
||||
if((status = HuDataReadChk(read_stat->dir_id << 16)) >= 0) {
|
||||
HuDataDirClose(data_num);
|
||||
}
|
||||
if((status = HuDataReadStatusGet()) == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return NULL;
|
||||
} else {
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->dir = dir_ptr;
|
||||
read_stat->dir_id = data_num >>16;
|
||||
return read_stat;
|
||||
}
|
||||
}
|
||||
|
||||
void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int i;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].status == 1 && ReadDataStat[i].file_info.startAddr == fileInfo->startAddr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i >= DATA_MAX_READSTAT) {
|
||||
OSPanic("data.c", 358, "dvd.c AsyncCallBack Error");
|
||||
}
|
||||
read_stat = &ReadDataStat[i];
|
||||
read_stat->status = 0;
|
||||
DVDClose(&read_stat->file_info);
|
||||
}
|
||||
|
||||
s32 HuDataDirReadAsync(s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
s32 dir_id;
|
||||
dir_id = data_num >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_num);
|
||||
return -1;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) < 0) {
|
||||
void *dir_aram;
|
||||
if(dir_aram = HuARDirCheck(data_num)) {
|
||||
OSReport("ARAM data num %x\n", data_num);
|
||||
HuAR_ARAMtoMRAM(dir_aram);
|
||||
status = 0x10000;
|
||||
} else {
|
||||
status = HuDataReadStatusGet();
|
||||
if(status == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return -1;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->status = 1;
|
||||
read_stat->dir_id = dir_id;
|
||||
read_stat->dir = HuDvdDataFastReadAsync(DataDirStat[dir_id].file_id, read_stat);
|
||||
}
|
||||
} else {
|
||||
status = -1;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
s32 HuDataDirReadNumAsync(s32 data_num, s32 num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
s32 dir_id;
|
||||
dir_id = data_num >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_num);
|
||||
return -1;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) < 0) {
|
||||
if((status = HuDataReadStatusGet()) == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return -1;
|
||||
}
|
||||
ReadDataStat[status].status = TRUE;
|
||||
ReadDataStat[status].dir_id = dir_id;
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->used = TRUE;
|
||||
read_stat->num = num;
|
||||
read_stat->dir = HuDvdDataFastReadAsync(DataDirStat[dir_id].file_id, read_stat);
|
||||
} else {
|
||||
status = -1;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
BOOL HuDataGetAsyncStat(s32 status)
|
||||
{
|
||||
if(status == 0x10000) {
|
||||
return HuARDMACheck() == 0;
|
||||
} else {
|
||||
return ReadDataStat[status].status == 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetFileInfo(DataReadStat *read_stat, s32 file_num)
|
||||
{
|
||||
u32 *temp_ptr;
|
||||
temp_ptr = (u32 *)PTR_OFFSET(read_stat->dir, (file_num * 4))+1;
|
||||
read_stat->file = PTR_OFFSET(read_stat->dir, *temp_ptr);
|
||||
temp_ptr = read_stat->file;
|
||||
read_stat->raw_len = *temp_ptr++;
|
||||
read_stat->comp_type = *temp_ptr++;
|
||||
read_stat->file = temp_ptr;
|
||||
}
|
||||
|
||||
void *HuDataRead(s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
void *buf;
|
||||
if(!HuDataDirRead(data_num)) {
|
||||
(void)data_num;
|
||||
return NULL;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
buf = HuMemDirectMalloc(0, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
if(buf) {
|
||||
HuDecodeData(read_stat->file, buf, read_stat->raw_len, read_stat->comp_type);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *HuDataReadNum(s32 data_num, s32 num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
void *buf;
|
||||
if(!HuDataDirReadNum(data_num, num)) {
|
||||
return NULL;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
buf = HuMemDirectMallocNum(0, DATA_EFF_SIZE(read_stat->raw_len), num);
|
||||
if(buf) {
|
||||
HuDecodeData(read_stat->file, buf, read_stat->raw_len, read_stat->comp_type);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *HuDataSelHeapRead(s32 data_num, HeapID heap)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
void *buf;
|
||||
if(!HuDataDirRead(data_num)) {
|
||||
return NULL;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
switch(heap) {
|
||||
case HEAP_MUSIC:
|
||||
buf = HuMemDirectMalloc(HEAP_MUSIC, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
|
||||
case HEAP_DATA:
|
||||
buf = HuMemDirectMalloc(HEAP_DATA, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
|
||||
case HEAP_DVD:
|
||||
buf = HuMemDirectMalloc(HEAP_DVD, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
|
||||
default:
|
||||
buf = HuMemDirectMalloc(HEAP_SYSTEM, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
}
|
||||
if(buf) {
|
||||
HuDecodeData(read_stat->file, buf, read_stat->raw_len, read_stat->comp_type);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
void *buf;
|
||||
if(!HuDataDirReadNum(data_num, num)) {
|
||||
return NULL;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
switch(heap) {
|
||||
case HEAP_MUSIC:
|
||||
buf = HuMemDirectMalloc(HEAP_MUSIC, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
|
||||
case HEAP_DATA:
|
||||
buf = HuMemDirectMallocNum(HEAP_DATA, DATA_EFF_SIZE(read_stat->raw_len), num);
|
||||
break;
|
||||
|
||||
case HEAP_DVD:
|
||||
buf = HuMemDirectMallocNum(HEAP_DVD, DATA_EFF_SIZE(read_stat->raw_len), num);
|
||||
break;
|
||||
|
||||
default:
|
||||
buf = HuMemDirectMallocNum(HEAP_SYSTEM, DATA_EFF_SIZE(read_stat->raw_len), num);
|
||||
break;
|
||||
}
|
||||
if(buf) {
|
||||
HuDecodeData(read_stat->file, buf, read_stat->raw_len, read_stat->comp_type);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void **HuDataReadMulti(s32 *data_ids)
|
||||
{
|
||||
return HuDataReadMultiSub(data_ids, FALSE, 0);
|
||||
}
|
||||
|
||||
static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num)
|
||||
{
|
||||
s32 *dir_ids;
|
||||
char **paths;
|
||||
void **dir_ptrs;
|
||||
void **out_ptrs;
|
||||
int i, count, total_files;
|
||||
u32 dir_id;
|
||||
for(i=0, count=0; data_ids[i] != -1; i++) {
|
||||
dir_id = data_ids[i] >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_ids[i]);
|
||||
return NULL;
|
||||
}
|
||||
if(HuDataReadChk(data_ids[i]) < 0) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
total_files = i;
|
||||
dir_ids = HuMemDirectMalloc(HEAP_SYSTEM, (count+1)*sizeof(s32));
|
||||
for(i=0; i<count+1; i++) {
|
||||
dir_ids[i] = -1;
|
||||
}
|
||||
paths = HuMemDirectMalloc(HEAP_SYSTEM, (count+1)*sizeof(char *));
|
||||
for(i=0, count=0; data_ids[i] != -1; i++) {
|
||||
dir_id = data_ids[i] >> 16;
|
||||
if(HuDataReadChk(data_ids[i]) < 0) {
|
||||
int j;
|
||||
for(j=0; dir_ids[j] != -1; j++) {
|
||||
if(dir_ids[j] == dir_id){
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(dir_ids[j] == -1) {
|
||||
dir_ids[j] = dir_id;
|
||||
paths[count++] = DataDirStat[dir_id].name;
|
||||
}
|
||||
}
|
||||
}
|
||||
dir_ptrs = HuDvdDataReadMulti(paths);
|
||||
for(i=0; dir_ids[i] != -1; i++) {
|
||||
s32 status;
|
||||
if((status = HuDataReadStatusGet()) == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
(void)count; //HACK to match HuDataReadMultiSub
|
||||
HuMemDirectFree(dir_ids);
|
||||
HuMemDirectFree(paths);
|
||||
return NULL;
|
||||
} else {
|
||||
ReadDataStat[status].dir = dir_ptrs[i];
|
||||
ReadDataStat[status].dir_id = dir_ids[i];
|
||||
}
|
||||
}
|
||||
HuMemDirectFree(dir_ids);
|
||||
HuMemDirectFree(paths);
|
||||
HuMemDirectFree(dir_ptrs);
|
||||
if(use_num) {
|
||||
out_ptrs = HuMemDirectMallocNum(HEAP_SYSTEM, (total_files+1)*sizeof(void *), num);
|
||||
} else {
|
||||
out_ptrs = HuMemDirectMalloc(HEAP_SYSTEM, (total_files+1)*sizeof(void *));
|
||||
}
|
||||
for(i=0; data_ids[i] != -1; i++) {
|
||||
if(use_num) {
|
||||
out_ptrs[i] = HuDataReadNum(data_ids[i], num);
|
||||
} else {
|
||||
out_ptrs[i] = HuDataRead(data_ids[i]);
|
||||
}
|
||||
}
|
||||
out_ptrs[i] = NULL;
|
||||
return out_ptrs;
|
||||
}
|
||||
|
||||
s32 HuDataGetSize(s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return -1;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
return DATA_EFF_SIZE(read_stat->raw_len);
|
||||
}
|
||||
|
||||
void HuDataClose(void *ptr)
|
||||
{
|
||||
if(ptr) {
|
||||
HuMemDirectFree(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
void HuDataCloseMulti(void **ptrs)
|
||||
{
|
||||
int i;
|
||||
for(i=0; ptrs[i]; i++) {
|
||||
void *ptr = ptrs[i];
|
||||
if(ptr) {
|
||||
HuMemDirectFree(ptr);
|
||||
}
|
||||
}
|
||||
if(ptrs) {
|
||||
HuMemDirectFree(ptrs);
|
||||
}
|
||||
}
|
||||
|
||||
void HuDataDirClose(s32 data_id)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int i;
|
||||
s32 dir_id = data_id >> 16;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].dir_id == dir_id) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i >= DATA_MAX_READSTAT) {
|
||||
return;
|
||||
}
|
||||
read_stat = &ReadDataStat[i];
|
||||
if(read_stat->status == 1) {
|
||||
OSPanic("data.c", 812, "data.c: Async Close Error\n");
|
||||
}
|
||||
read_stat->dir_id = -1;
|
||||
HuDvdDataClose(read_stat->dir);
|
||||
read_stat->dir = NULL;
|
||||
read_stat->used = FALSE;
|
||||
read_stat->status = 0;
|
||||
}
|
||||
|
||||
void HuDataDirCloseNum(s32 num)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].used == TRUE && ReadDataStat[i].num == num) {
|
||||
HuDataDirClose(ReadDataStat[i].dir_id << 16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Still to be decompiled
|
||||
void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
188
src/game/dvd.c
Normal file
188
src/game/dvd.c
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
#include "common.h"
|
||||
#include "dolphin/dvd.h"
|
||||
#include "dolphin/os.h"
|
||||
|
||||
|
||||
static DVDDiskID correctDiskID = {
|
||||
{ 'M', 'P', 'G', 'C' }, //gameName
|
||||
{ 'H', 'U' }, //company
|
||||
1, //diskNumber
|
||||
1, //gameVersion
|
||||
1, //streaming
|
||||
0, //streamingBufSize
|
||||
};
|
||||
|
||||
|
||||
static int CallBackStatus;
|
||||
static s32 beforeDvdStatus;
|
||||
|
||||
static void HuDVDReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo)
|
||||
{
|
||||
CallBackStatus = 1;
|
||||
}
|
||||
|
||||
static void *HuDvdDataReadWait(DVDFileInfo *file, int heap, int mode, int num, DVDCallback cb, BOOL skip_wait)
|
||||
{
|
||||
u32 len;
|
||||
void *buf;
|
||||
if(mode != 0 && mode != 1 && mode != 2) {
|
||||
OSReport("dvd.c: HuDvdDataReadWait Mode Error");
|
||||
buf = NULL;
|
||||
len = 0;
|
||||
}
|
||||
len = file->length;
|
||||
DirDataSize = len;
|
||||
if(mode == 1) {
|
||||
buf = HuMemDirectMallocNum(heap, OSRoundUp32B(len), num);
|
||||
} else {
|
||||
buf = HuMemDirectMalloc(heap, OSRoundUp32B(len));
|
||||
}
|
||||
if(!buf) {
|
||||
OSReport("dvd.c: Memory Allocation Error (Length %x) (mode %d)\n", len, mode);
|
||||
OSReport("Rest Memory %x\n", HuMemHeapSizeGet(3)-HuMemUsedMallocSizeGet(3));
|
||||
OSPanic("dvd.c", 75, "\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DCInvalidateRange(buf, OSRoundUp32B(len));
|
||||
OSReport("Rest Memory %x\n", HuMemHeapSizeGet(3)-HuMemUsedMallocSizeGet(3));
|
||||
CallBackStatus = 0;
|
||||
DVDReadAsync(file, buf, OSRoundUp32B(len), 0, cb);
|
||||
if(!skip_wait) {
|
||||
while(!CallBackStatus) {
|
||||
HuDvdErrorWatch();
|
||||
}
|
||||
HuDvdErrorWatch();
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *HuDvdDataRead(char *path)
|
||||
{
|
||||
DVDFileInfo file;
|
||||
void *data = NULL;
|
||||
if(!DVDOpen(path, &file)) {
|
||||
OSPanic("dvd.c", 146, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&file, HEAP_DVD, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
void **HuDvdDataReadMulti(char **paths)
|
||||
{
|
||||
DVDFileInfo file;
|
||||
int i;
|
||||
u32 count;
|
||||
void **file_ptrs;
|
||||
count = 0;
|
||||
while(paths[count]) {
|
||||
count++;
|
||||
}
|
||||
file_ptrs = HuMemDirectMalloc(0, count*sizeof(void *));
|
||||
for(i=0; i<count; i++) {
|
||||
if(!DVDOpen(paths[i], &file)) {
|
||||
OSPanic("dvd.c", 183, "dvd.c: File Open Error");
|
||||
return NULL;
|
||||
} else {
|
||||
file_ptrs[i] = HuDvdDataReadWait(&file, HEAP_DVD, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
}
|
||||
return file_ptrs;
|
||||
}
|
||||
|
||||
void *HuDvdDataReadDirect(char *path, HeapID heap)
|
||||
{
|
||||
DVDFileInfo file;
|
||||
void *data = NULL;
|
||||
if(!DVDOpen(path, &file)) {
|
||||
OSPanic("dvd.c", 202, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&file, heap, 2, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
void *HuDvdDataFastRead(s32 entrynum)
|
||||
{
|
||||
DVDFileInfo file;
|
||||
void *data = NULL;
|
||||
if(!DVDFastOpen(entrynum, &file)) {
|
||||
OSPanic("dvd.c", 243, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&file, HEAP_DVD, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
void *HuDvdDataFastReadNum(s32 entrynum, s32 num)
|
||||
{
|
||||
DVDFileInfo file;
|
||||
void *data = NULL;
|
||||
if(!DVDFastOpen(entrynum, &file)) {
|
||||
(void)num;
|
||||
OSPanic("dvd.c", 258, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&file, HEAP_DVD, 1, num, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
void *HuDvdDataFastReadAsync(s32 entrynum, DataReadStat *stat)
|
||||
{
|
||||
DVDFileInfo file;
|
||||
void *data = NULL;
|
||||
if(!DVDFastOpen(entrynum, &stat->file_info)) {
|
||||
OSPanic("dvd.c", 274, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&stat->file_info, HEAP_DVD, 0, 0, HuDataDirReadAsyncCallBack, TRUE);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
void HuDvdDataClose(void *ptr)
|
||||
{
|
||||
if(ptr) {
|
||||
HuMemDirectFree(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
void HuDvdErrorWatch()
|
||||
{
|
||||
int status = DVDGetDriveStatus();
|
||||
if(status == beforeDvdStatus) {
|
||||
return;
|
||||
}
|
||||
beforeDvdStatus = status;
|
||||
switch(status+1) {
|
||||
case 0:
|
||||
OSReport("DVD ERROR:Fatal error occurred\n***HALT***");
|
||||
while(1);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
OSReport("DVD ERROR:No disk\n");
|
||||
break;
|
||||
|
||||
case 6:
|
||||
OSReport("DVD ERROR:Cover open\n");
|
||||
break;
|
||||
|
||||
case 7:
|
||||
OSReport("DVD ERROR:Wrong disk\n");
|
||||
break;
|
||||
|
||||
case 12:
|
||||
OSReport("DVD ERROR:Please retry\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
1
src/game/font.c
Normal file
1
src/game/font.c
Normal file
|
|
@ -0,0 +1 @@
|
|||
#include "ank8x8_4b.inc"
|
||||
274
src/game/init.c
Normal file
274
src/game/init.c
Normal file
|
|
@ -0,0 +1,274 @@
|
|||
#include "common.h"
|
||||
#include "dolphin/os.h"
|
||||
#include "dolphin/gx.h"
|
||||
#include "dolphin/dvd.h"
|
||||
#include "dolphin/vi.h"
|
||||
#include "dolphin/pad.h"
|
||||
|
||||
struct memory_info {
|
||||
void *start;
|
||||
void *end;
|
||||
};
|
||||
|
||||
extern void HuAudInit();
|
||||
extern void HuCardInit();
|
||||
extern void HuARInit();
|
||||
extern u32 frand();
|
||||
extern void HuFaultInitXfbDirectDraw(GXRenderModeObj *mode);
|
||||
extern void HuFaultSetXfbAddress(int fb, void *addr);
|
||||
|
||||
static GXRenderModeObj rmodeobj;
|
||||
|
||||
static BOOL FirstFrame = TRUE;
|
||||
GXRenderModeObj *RenderMode;
|
||||
OSHeapHandle currentHeapHandle;
|
||||
static void *DefaultFifo;
|
||||
static GXFifoObj *DefaultFifoObj;
|
||||
void *DemoFrameBuffer1;
|
||||
void *DemoFrameBuffer2;
|
||||
void *DemoCurrentBuffer;
|
||||
u32 minimumVcount;
|
||||
float minimumVcountf;
|
||||
u32 worstVcount;
|
||||
static BOOL DemoStatEnable;
|
||||
|
||||
|
||||
static void InitRenderMode(GXRenderModeObj *mode);
|
||||
static void InitMem();
|
||||
static void InitGX();
|
||||
static void InitVI();
|
||||
static void SwapBuffers();
|
||||
static void LoadMemInfo();
|
||||
|
||||
void HuSysInit(GXRenderModeObj *mode)
|
||||
{
|
||||
u32 rnd_temp;
|
||||
OSInit();
|
||||
DVDInit();
|
||||
VIInit();
|
||||
PADInit();
|
||||
if(OSGetProgressiveMode() == 1 && VIGetDTVStatus() == 1) {
|
||||
mode = &GXNtsc480Prog;
|
||||
}
|
||||
InitRenderMode(mode);
|
||||
InitMem();
|
||||
VIConfigure(RenderMode);
|
||||
VIConfigurePan(0, 0, 640, 480);
|
||||
DefaultFifo = OSAlloc(0x100000);
|
||||
DefaultFifoObj = GXInit(DefaultFifo, 0x100000);
|
||||
InitGX();
|
||||
InitVI();
|
||||
HuFaultInitXfbDirectDraw(RenderMode);
|
||||
HuFaultSetXfbAddress(0, DemoFrameBuffer1);
|
||||
HuFaultSetXfbAddress(1, DemoFrameBuffer2);
|
||||
HuDvdErrDispInit(RenderMode, DemoFrameBuffer1, DemoFrameBuffer2);
|
||||
rnd_temp = frand();
|
||||
HuMemInitAll();
|
||||
HuAudInit();
|
||||
HuARInit();
|
||||
minimumVcount = minimumVcountf = 1.0f;
|
||||
worstVcount = 0;
|
||||
OSInitFastCast();
|
||||
HuCardInit();
|
||||
}
|
||||
|
||||
static void InitRenderMode(GXRenderModeObj *mode)
|
||||
{
|
||||
if(mode != NULL) {
|
||||
RenderMode = mode;
|
||||
return;
|
||||
}
|
||||
switch(VIGetTvFormat()) {
|
||||
case 0:
|
||||
RenderMode = &GXNtsc480IntDf;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
RenderMode = &GXPal528IntDf;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
RenderMode = &GXMpal480IntDf;
|
||||
break;
|
||||
|
||||
default:
|
||||
OSPanic("init.c", 169, "DEMOInit: invalid TV format\n");
|
||||
break;
|
||||
}
|
||||
GXAdjustForOverscan(RenderMode, &rmodeobj, 0, 16);
|
||||
RenderMode = &rmodeobj;
|
||||
}
|
||||
|
||||
static void InitGX()
|
||||
{
|
||||
GXSetViewport(0, 0, RenderMode->fbWidth, RenderMode->xfbHeight, 0, 1);
|
||||
GXSetScissor(0, 0, RenderMode->fbWidth, RenderMode->efbHeight);
|
||||
GXSetDispCopySrc(0, 0, RenderMode->fbWidth, RenderMode->efbHeight);
|
||||
GXSetDispCopyDst(RenderMode->fbWidth, RenderMode->xfbHeight);
|
||||
GXSetDispCopyYScale((float)RenderMode->xfbHeight/(float)RenderMode->efbHeight);
|
||||
GXSetCopyFilter(RenderMode->aa, RenderMode->sample_pattern, GX_TRUE, RenderMode->vfilter);
|
||||
if(RenderMode->aa) {
|
||||
GXSetPixelFmt(GX_PF_RGB565_Z16, GX_ZC_LINEAR);
|
||||
} else {
|
||||
GXSetPixelFmt(GX_PF_RGB8_Z24, GX_ZC_LINEAR);
|
||||
}
|
||||
GXCopyDisp(DemoCurrentBuffer, GX_TRUE);
|
||||
GXSetDispCopyGamma(GX_GM_1_0);
|
||||
}
|
||||
|
||||
static void InitMem()
|
||||
{
|
||||
void *arena_lo = OSGetArenaLo();
|
||||
void *arena_hi = OSGetArenaHi();
|
||||
u32 fb_size = (u16)(((u16)RenderMode->fbWidth+15) & ~15)*RenderMode->xfbHeight*2;
|
||||
DemoFrameBuffer1 = (void *)OSRoundUp32B((u32)arena_lo);
|
||||
DemoFrameBuffer2 = (void *)OSRoundUp32B((u32)DemoFrameBuffer1+fb_size);
|
||||
DemoCurrentBuffer = DemoFrameBuffer2;
|
||||
arena_lo = (void *)OSRoundUp32B((u32)DemoFrameBuffer2+fb_size);
|
||||
OSSetArenaLo(arena_lo);
|
||||
if(OSGetConsoleType() == OS_CONSOLE_DEVHW1 && OSGetPhysicalMemSize() != 0x400000 && OSGetConsoleSimulatedMemSize() < 0x1800000) {
|
||||
LoadMemInfo();
|
||||
} else {
|
||||
arena_lo = OSGetArenaLo();
|
||||
arena_hi = OSGetArenaHi();
|
||||
arena_lo = OSInitAlloc(arena_lo, arena_hi, 1);
|
||||
OSSetArenaLo(arena_lo);
|
||||
arena_lo = (void *)OSRoundUp32B((u32)arena_lo);
|
||||
arena_hi = (void *)OSRoundDown32B((u32)arena_hi);
|
||||
OSSetCurrentHeap(currentHeapHandle = OSCreateHeap(arena_lo, arena_hi));
|
||||
arena_lo = arena_hi;
|
||||
OSSetArenaLo(arena_lo);
|
||||
}
|
||||
}
|
||||
|
||||
static void InitVI()
|
||||
{
|
||||
u32 interlace;
|
||||
VISetNextFrameBuffer(DemoFrameBuffer1);
|
||||
DemoCurrentBuffer = DemoFrameBuffer2;
|
||||
VIFlush();
|
||||
VIWaitForRetrace();
|
||||
interlace = RenderMode->viTVmode & 0x1;
|
||||
if(interlace) {
|
||||
VIWaitForRetrace();
|
||||
}
|
||||
}
|
||||
|
||||
void HuSysBeforeRender()
|
||||
{
|
||||
if(RenderMode->field_rendering) {
|
||||
GXSetViewportJitter(0, 0, RenderMode->fbWidth, RenderMode->xfbHeight, 0, 1, VIGetNextField());
|
||||
} else {
|
||||
GXSetViewport(0, 0, RenderMode->fbWidth, RenderMode->xfbHeight, 0, 1);
|
||||
}
|
||||
GXInvalidateVtxCache();
|
||||
GXInvalidateTexAll();
|
||||
}
|
||||
|
||||
void HuSysDoneRender(s32 retrace_count)
|
||||
{
|
||||
int retrace_dist;
|
||||
if(DemoStatEnable) {
|
||||
GXDrawDone();
|
||||
DEMOUpdateStats(1);
|
||||
DEMOPrintStats();
|
||||
GXDrawDone();
|
||||
DEMOUpdateStats(0);
|
||||
}
|
||||
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
||||
GXSetColorUpdate(GX_TRUE);
|
||||
GXDrawDone();
|
||||
GXCopyDisp(DemoCurrentBuffer, GX_TRUE);
|
||||
if(minimumVcount != 0) {
|
||||
retrace_dist = VIGetRetraceCount()-retrace_count;
|
||||
if(worstVcount < retrace_dist) {
|
||||
worstVcount = retrace_dist;
|
||||
}
|
||||
while(VIGetRetraceCount()-retrace_count < minimumVcount-1) {
|
||||
VIWaitForRetrace();
|
||||
}
|
||||
}
|
||||
SwapBuffers();
|
||||
}
|
||||
|
||||
static void SwapBuffers()
|
||||
{
|
||||
VISetNextFrameBuffer(DemoCurrentBuffer);
|
||||
if(FirstFrame) {
|
||||
VISetBlack(GX_FALSE);
|
||||
FirstFrame = FALSE;
|
||||
}
|
||||
VIFlush();
|
||||
VIWaitForRetrace();
|
||||
if(DemoCurrentBuffer == DemoFrameBuffer1) {
|
||||
DemoCurrentBuffer = DemoFrameBuffer2;
|
||||
} else {
|
||||
DemoCurrentBuffer = DemoFrameBuffer1;
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadMemInfo()
|
||||
{
|
||||
u32 size;
|
||||
u32 copy_size;
|
||||
u32 offset;
|
||||
u32 entries;
|
||||
u32 i;
|
||||
void *arena_lo;
|
||||
void *arena_hi;
|
||||
void *alloc_max;
|
||||
void *alloc_min;
|
||||
|
||||
struct memory_info *buf_ptr;
|
||||
DVDFileInfo file;
|
||||
char buf[240];
|
||||
|
||||
OSReport("\nNow, try to find memory info file...\n\n");
|
||||
if(!DVDOpen("/meminfo.bin", &file)) {
|
||||
OSReport("\nCan't find memory info file. Use /XXX toolname/ to maximize available\n");
|
||||
OSReport("memory space. For now, we only use the first %dMB.\n", (OSGetConsoleSimulatedMemSize()/1024)/1024);
|
||||
arena_lo = OSGetArenaLo();
|
||||
arena_hi = OSGetArenaHi();
|
||||
arena_lo = OSInitAlloc(arena_lo, arena_hi, 1);
|
||||
OSSetArenaLo(arena_lo);
|
||||
arena_lo = (void *)OSRoundUp32B((u32)arena_lo);
|
||||
arena_hi = (void *)OSRoundDown32B((u32)arena_hi);
|
||||
OSSetCurrentHeap(OSCreateHeap(arena_lo, arena_hi));
|
||||
arena_lo = arena_hi;
|
||||
OSSetArenaLo(arena_lo);
|
||||
} else {
|
||||
buf_ptr = (struct memory_info *)OSRoundUp32B((u32)buf);
|
||||
alloc_max = OSGetArenaHi();
|
||||
alloc_min = (void *)(OSGetConsoleSimulatedMemSize()+0x80000000);
|
||||
OSSetArenaHi((void *)(OSGetPhysicalMemSize()+0x80000000));
|
||||
arena_lo = OSGetArenaLo();
|
||||
arena_hi = OSGetArenaHi();
|
||||
arena_lo = OSInitAlloc(arena_lo, arena_hi, 1);
|
||||
OSSetArenaLo(arena_lo);
|
||||
arena_lo = (void *)OSRoundUp32B((u32)arena_lo);
|
||||
arena_hi = (void *)OSRoundDown32B((u32)arena_hi);
|
||||
OSSetCurrentHeap(OSCreateHeap(arena_lo, arena_hi));
|
||||
arena_lo = arena_hi;
|
||||
OSSetArenaLo(arena_lo);
|
||||
OSAllocFixed(&alloc_max, &alloc_min);
|
||||
size = file.length;
|
||||
offset = 0;
|
||||
while(size) {
|
||||
OSReport("loop\n");
|
||||
copy_size = (size < 32) ? size : 32;
|
||||
if(DVDRead(&file, buf_ptr, OSRoundUp32B(copy_size), offset) < 0) {
|
||||
OSPanic("init.c", 576, "An error occurred when issuing read to /meminfo.bin\n");
|
||||
}
|
||||
entries = copy_size/sizeof(struct memory_info);
|
||||
for(i=0; i<entries; i++) {
|
||||
OSReport("start: 0x%08x, end: 0x%08x\n", buf_ptr[i].start, buf_ptr[i].end);
|
||||
OSAllocFixed(&buf_ptr[i].start, &buf_ptr[i].end);
|
||||
OSReport("Removed 0x%08x - 0x%08x from the current heap\n", buf_ptr[i].start, (u32)buf_ptr[i].end-1);
|
||||
}
|
||||
size -= copy_size;
|
||||
offset += copy_size;
|
||||
}
|
||||
DVDClose(&file);
|
||||
OSDumpHeap(__OSCurrHeap);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
#include "common.h"
|
||||
#include "dolphin/os.h"
|
||||
|
||||
static u32 HeapSizeTbl[5] = { 0x240000, 0x140000, 0xA80000, 0x580000, 0 };
|
||||
static void *HeapTbl[5];
|
||||
static u32 HeapSizeTbl[HEAP_MAX] = { 0x240000, 0x140000, 0xA80000, 0x580000, 0 };
|
||||
static void *HeapTbl[HEAP_MAX];
|
||||
|
||||
void HuMemInitAll(void)
|
||||
{
|
||||
|
|
@ -10,7 +10,7 @@ void HuMemInitAll(void)
|
|||
void *ptr;
|
||||
u32 free_size;
|
||||
for(i=0; i<4; i++) {
|
||||
ptr = OSAllocFromHeap(__OSCurrHeap, HeapSizeTbl[i]);
|
||||
ptr = OSAlloc(HeapSizeTbl[i]);
|
||||
if(ptr == NULL) {
|
||||
OSReport("HuMem> Failed OSAlloc Size:%d\n", HeapSizeTbl[i]);
|
||||
return;
|
||||
|
|
@ -19,7 +19,7 @@ void HuMemInitAll(void)
|
|||
}
|
||||
free_size = OSCheckHeap(currentHeapHandle);
|
||||
OSReport("HuMem> left memory space %dKB(%d)\n", free_size/1024, free_size);
|
||||
ptr = OSAllocFromHeap(__OSCurrHeap, free_size);
|
||||
ptr = OSAlloc(free_size);
|
||||
if(ptr == NULL) {
|
||||
OSReport("HuMem> Failed OSAlloc left space\n");
|
||||
return;
|
||||
|
|
@ -39,12 +39,12 @@ void HuMemDCFlushAll()
|
|||
HuMemDCFlush(0);
|
||||
}
|
||||
|
||||
void HuMemDCFlush(int heap)
|
||||
void HuMemDCFlush(HeapID heap)
|
||||
{
|
||||
DCFlushRangeNoSync(HeapTbl[heap], HeapSizeTbl[heap]);
|
||||
}
|
||||
|
||||
void *HuMemDirectMalloc(int heap, s32 size)
|
||||
void *HuMemDirectMalloc(HeapID heap, s32 size)
|
||||
{
|
||||
register u32 retaddr;
|
||||
asm {
|
||||
|
|
@ -54,7 +54,7 @@ void *HuMemDirectMalloc(int heap, s32 size)
|
|||
return HuMemMemoryAlloc(HeapTbl[heap], size, retaddr);
|
||||
}
|
||||
|
||||
void *HuMemDirectMallocNum(int heap, s32 size, u32 num)
|
||||
void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num)
|
||||
{
|
||||
register u32 retaddr;
|
||||
asm {
|
||||
|
|
@ -73,7 +73,7 @@ void HuMemDirectFree(void *ptr)
|
|||
HuMemMemoryFree(ptr, retaddr);
|
||||
}
|
||||
|
||||
void HuMemDirectFreeNum(int heap, u32 num)
|
||||
void HuMemDirectFreeNum(HeapID heap, u32 num)
|
||||
{
|
||||
register u32 retaddr;
|
||||
asm {
|
||||
|
|
@ -82,22 +82,22 @@ void HuMemDirectFreeNum(int heap, u32 num)
|
|||
HuMemMemoryFreeNum(HeapTbl[heap], num, retaddr);
|
||||
}
|
||||
|
||||
s32 HuMemUsedMallocSizeGet(int heap)
|
||||
s32 HuMemUsedMallocSizeGet(HeapID heap)
|
||||
{
|
||||
return HuMemUsedMemorySizeGet(HeapTbl[heap]);
|
||||
}
|
||||
|
||||
s32 HuMemUsedMallocBlockGet(int heap)
|
||||
s32 HuMemUsedMallocBlockGet(HeapID heap)
|
||||
{
|
||||
return HuMemUsedMemoryBlockGet(HeapTbl[heap]);
|
||||
}
|
||||
|
||||
u32 HuMemHeapSizeGet(int heap)
|
||||
u32 HuMemHeapSizeGet(HeapID heap)
|
||||
{
|
||||
return HeapSizeTbl[heap];
|
||||
}
|
||||
|
||||
void *HuMemHeapPtrGet(int heap)
|
||||
void *HuMemHeapPtrGet(HeapID heap)
|
||||
{
|
||||
return HeapTbl[heap];
|
||||
}
|
||||
563
src/game/objmain.c
Normal file
563
src/game/objmain.c
Normal file
|
|
@ -0,0 +1,563 @@
|
|||
#include "common.h"
|
||||
|
||||
#define OM_OVL_HIS_MAX 16
|
||||
#define OM_MAX_GROUPS 10
|
||||
|
||||
typedef struct om_obj_group {
|
||||
u16 next_idx;
|
||||
u16 max_objs;
|
||||
u16 num_objs;
|
||||
u16 *next;
|
||||
omObjData **obj;
|
||||
} omObjGroup;
|
||||
|
||||
typedef struct om_obj_man {
|
||||
s16 max_objs;
|
||||
s16 num_objs;
|
||||
s16 next_idx;
|
||||
s16 obj_last;
|
||||
s16 obj_first;
|
||||
s16 unkA;
|
||||
omObjData *obj;
|
||||
omObjGroup *group;
|
||||
} omObjMan;
|
||||
|
||||
omObjData *omDBGSysKeyObj;
|
||||
Process *omwatchproc;
|
||||
OverlayID omnextovl;
|
||||
OverlayID omcurovl;
|
||||
int omcurdll;
|
||||
int omovlhisidx;
|
||||
int omovlevtno;
|
||||
int omnextovlevtno;
|
||||
int omovlstat;
|
||||
static int omnextovlstat;
|
||||
char omUPauseFlag;
|
||||
s16 omSysExitReq;
|
||||
s16 omdispinfo;
|
||||
|
||||
static omOvlHisData omovlhis[OM_OVL_HIS_MAX];
|
||||
|
||||
char omSysPauseEnableFlag = TRUE;
|
||||
OverlayID omprevovl = OVL_INVALID;
|
||||
|
||||
static void omWatchOverlayProc(void);
|
||||
static void omInsertObj(Process *objman_process, omObjData *object);
|
||||
|
||||
void omMasterInit(int prio, FileListEntry *ovl_list, int ovl_count, OverlayID start_ovl)
|
||||
{
|
||||
omDLLInit(ovl_list);
|
||||
omwatchproc = HuPrcCreate(omWatchOverlayProc, prio, 8192, 0);
|
||||
HuPrcSetStat(omwatchproc, 12);
|
||||
omcurovl = OVL_INVALID;
|
||||
omovlhisidx = -1;
|
||||
omOvlCallEx(start_ovl, 1, 0, 0);
|
||||
omDBGSysKeyObj = NULL;
|
||||
omSysPauseEnable(TRUE);
|
||||
}
|
||||
|
||||
static void omWatchOverlayProc(void)
|
||||
{
|
||||
while(1) {
|
||||
if(omcurovl == OVL_INVALID) {
|
||||
if(omnextovl >= 0 && fadeStat == 0) {
|
||||
HuPrcSleep(0);
|
||||
OSReport("++++++++++++++++++++ Start New OVL %d (EVT:%d STAT:0x%08x) ++++++++++++++++++\n", omnextovl, omnextovlevtno, omnextovlstat);
|
||||
HuMemHeapDump(HuMemHeapPtrGet(HEAP_SYSTEM), -1);
|
||||
HuMemHeapDump(HuMemHeapPtrGet(HEAP_DATA), -1);
|
||||
HuMemHeapDump(HuMemHeapPtrGet(HEAP_DVD), -1);
|
||||
OSReport("objman>Used Memory Size:%08x\n", HuMemUsedMallocSizeGet(HEAP_SYSTEM));
|
||||
OSReport("objman>Used Memory Cnt:%d\n", HuMemUsedMallocBlockGet(HEAP_SYSTEM));
|
||||
OSReport("objman>Init esp\n");
|
||||
espInit();
|
||||
OSReport("objman>Call objectsetup\n");
|
||||
fn_800338EC(omnextovl);
|
||||
HuAudDllSndGrpSet(omnextovl);
|
||||
omcurovl = omnextovl;
|
||||
omovlevtno = omnextovlevtno;
|
||||
omovlstat = omnextovlstat;
|
||||
omnextovl = OVL_INVALID;
|
||||
if(_CheckFlag(0x1000C)) {
|
||||
fn_8003F3AC();
|
||||
}
|
||||
omSysPauseEnable(TRUE);
|
||||
omcurdll = omDLLStart(omcurovl, 0);
|
||||
OSReport("objman>ObjectSetup end\n");
|
||||
if(omcurovl != OVL_INVALID) {
|
||||
goto watch_child;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
} else {
|
||||
watch_child:
|
||||
HuPrcChildWatch();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat)
|
||||
{
|
||||
OSReport("objman>Call New Ovl %d(%d)\n", overlay, arg2);
|
||||
if(omovlhisidx >= OM_OVL_HIS_MAX) {
|
||||
OSReport("objman>OVL Call over error\n");
|
||||
return;
|
||||
}
|
||||
omovlhis[++omovlhisidx].overlay = overlay;
|
||||
omovlhis[omovlhisidx].event = event;
|
||||
omovlhis[omovlhisidx].stat = stat;
|
||||
omOvlGotoEx(overlay, arg2, event, stat);
|
||||
}
|
||||
|
||||
void omOvlGotoEx(OverlayID overlay, s16 arg2, int event, int stat)
|
||||
{
|
||||
omprevovl = omcurovl;
|
||||
if(omcurovl >= 0) {
|
||||
omOvlKill(arg2);
|
||||
}
|
||||
omnextovl = overlay;
|
||||
omnextovlevtno = event;
|
||||
omnextovlstat = stat;
|
||||
}
|
||||
|
||||
void omOvlReturnEx(s16 level, s16 arg2)
|
||||
{
|
||||
omovlhisidx -= level;
|
||||
OSReport("objman>Ovl Return %d=%d(%d)\n", level, omovlhisidx, arg2);
|
||||
if(omovlhisidx < 0) {
|
||||
OSReport("objman>OVL under error\n");
|
||||
omovlhisidx = 0;
|
||||
}
|
||||
omOvlGotoEx(omovlhis[omovlhisidx].overlay, arg2, omovlhis[omovlhisidx].event, omovlhis[omovlhisidx].stat);
|
||||
}
|
||||
|
||||
void omOvlKill(s16 arg)
|
||||
{
|
||||
fn_8004D6F4(-1);
|
||||
fn_80035A0C();
|
||||
Hu3DAllKill();
|
||||
HuWinAllKill();
|
||||
HuSprClose();
|
||||
HuPrcChildKill(omwatchproc);
|
||||
HuMemDirectFreeNum(HEAP_SYSTEM, 0x10000000);
|
||||
HuDataDirCloseNum(0x10000000);
|
||||
HuMemDirectFreeNum(HEAP_DVD, 0x10000000);
|
||||
HuMemDirectFreeNum(HEAP_DATA, 0x10000000);
|
||||
HuPadRumbleAllStop();
|
||||
HuAudFXListnerKill();
|
||||
OSReport("OvlKill %d\n", arg);
|
||||
omSysExitReq = FALSE;
|
||||
omDLLNumEnd(omcurovl, arg);
|
||||
omcurovl = OVL_INVALID;
|
||||
omDBGSysKeyObj = NULL;
|
||||
}
|
||||
|
||||
void omOvlHisChg(s32 level, OverlayID overlay, int event, int stat)
|
||||
{
|
||||
omOvlHisData *history;
|
||||
if(omovlhisidx-level < 0 || omovlhisidx-level >= OM_OVL_HIS_MAX) {
|
||||
OSReport("objman> omOvlHisChg: overlay 実行履歴の範囲外を変更しようとしました\n");
|
||||
return;
|
||||
}
|
||||
history = &omovlhis[omovlhisidx-level];
|
||||
history->overlay = overlay;
|
||||
history->event = event;
|
||||
history->stat = stat;
|
||||
}
|
||||
|
||||
omOvlHisData *omOvlHisGet(s32 level)
|
||||
{
|
||||
if(omovlhisidx-level < 0 || omovlhisidx-level >= OM_OVL_HIS_MAX) {
|
||||
OSReport("objman> omOvlHisGet: overlay 実行履歴の範囲外を参照しようとしました\n");
|
||||
return NULL;
|
||||
}
|
||||
return &omovlhis[omovlhisidx-level];
|
||||
}
|
||||
|
||||
Process *omInitObjMan(s16 max_objs, int prio)
|
||||
{
|
||||
omObjGroup *group_all;
|
||||
omObjData *obj_all;
|
||||
omObjData *obj;
|
||||
int i;
|
||||
omObjMan *objman;
|
||||
Process *process;
|
||||
OSReport("objman>InitObjMan start\n");
|
||||
max_objs += 2;
|
||||
omSysExitReq = FALSE;
|
||||
process = HuPrcChildCreate(omMain, prio, 16384, 0, omwatchproc);
|
||||
HuPrcSetStat(process, 12);
|
||||
objman = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(omObjMan), 0x10000000);
|
||||
objman->max_objs = max_objs;
|
||||
process->user_data = objman;
|
||||
process->dtor = omDestroyObjMan;
|
||||
objman->num_objs = 0;
|
||||
objman->next_idx = 0;
|
||||
objman->obj_last = -1;
|
||||
objman->obj_first = -1;
|
||||
obj_all = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(omObjData), 0x10000000);
|
||||
objman->obj = obj_all;
|
||||
group_all = HuMemDirectMallocNum(HEAP_SYSTEM, OM_MAX_GROUPS*sizeof(omObjGroup), 0x10000000);
|
||||
objman->group = group_all;
|
||||
for(i=0; i<max_objs;i++) {
|
||||
obj = &obj_all[i];
|
||||
obj->stat = 1;
|
||||
obj->prio = obj->prev =obj->next = -1;
|
||||
obj->unk10 = 0;
|
||||
obj->trans.x = obj->trans.y = obj->trans.z = obj->rot.x = obj->rot.y = obj->rot.z = 0.0f;
|
||||
obj->scale.x = obj->scale.y = obj->scale.z = 1.0f;
|
||||
obj->model = obj->motion = NULL;
|
||||
obj->func = obj->data = NULL;
|
||||
obj->next_idx = i+1;
|
||||
obj->mtncnt = 0;
|
||||
obj->motion = NULL;
|
||||
}
|
||||
for(i=0; i<OM_MAX_GROUPS;i++) {
|
||||
group_all[i].max_objs = 0;
|
||||
group_all[i].num_objs = 0;
|
||||
group_all[i].next_idx = 0;
|
||||
group_all[i].obj = NULL;
|
||||
group_all[i].next = NULL;
|
||||
}
|
||||
OSReport("objman>InitObjMan end\n");
|
||||
omUPauseFlag = FALSE;
|
||||
HuPrcAllUPause(0);
|
||||
return process;
|
||||
}
|
||||
|
||||
void omDestroyObjMan(void)
|
||||
{
|
||||
Process *process = HuPrcCurrentGet();
|
||||
omObjMan *objman = process->user_data;
|
||||
objman->obj_last = -1;
|
||||
OSReport("objman>Destory ObjMan\n");
|
||||
}
|
||||
|
||||
omObjData *omAddObjEx(Process *objman_process, s16 prio, u16 mdlcnt, u16 mtncnt, s16 group, void (*func)(omObjData *))
|
||||
{
|
||||
int i;
|
||||
omObjData *object;
|
||||
s16 next_idx;
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjData *obj_base = objman->obj;
|
||||
if(objman->num_objs == objman->max_objs) {
|
||||
return NULL;
|
||||
}
|
||||
next_idx = objman->next_idx;
|
||||
object = &obj_base[next_idx];
|
||||
object->next_idx_alloc = next_idx;
|
||||
object->prio = prio;
|
||||
omInsertObj(objman_process, object);
|
||||
if(mdlcnt) {
|
||||
object->model = HuMemDirectMallocNum(HEAP_SYSTEM, mdlcnt*sizeof(s16), 0x10000000);
|
||||
object->mdlcnt = mdlcnt;
|
||||
for(i=0; i<mdlcnt; i++) {
|
||||
object->model[i] = -1;
|
||||
}
|
||||
} else {
|
||||
object->model = NULL;
|
||||
object->mdlcnt = 0;
|
||||
}
|
||||
if(mtncnt) {
|
||||
object->motion = HuMemDirectMallocNum(HEAP_SYSTEM, mtncnt*sizeof(s16), 0x10000000);
|
||||
object->mtncnt = mtncnt;
|
||||
} else {
|
||||
object->motion = NULL;
|
||||
object->mtncnt = 0;
|
||||
}
|
||||
if(group >= 0) {
|
||||
omAddMember(objman_process, group, object);
|
||||
} else {
|
||||
object->group = group;
|
||||
object->group_idx = 0;
|
||||
}
|
||||
object->stat = 4;
|
||||
object->unk10 = 0;
|
||||
object->func = func;
|
||||
object->work[0] = object->work[1] = object->work[2] = object->work[3] = 0;
|
||||
objman->next_idx = object->next_idx;
|
||||
objman->num_objs++;
|
||||
omSetTra(object, 0.0f, 0.0f, 0.0f);
|
||||
omSetRot(object, 0.0f, 0.0f, 0.0f);
|
||||
omSetSca(object, 1.0f, 1.0f, 1.0f);
|
||||
return object;
|
||||
}
|
||||
|
||||
static void omInsertObj(Process *objman_process, omObjData *object)
|
||||
{
|
||||
omObjData *obj_new;
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjData *obj_all = objman->obj;
|
||||
s16 next_idx_alloc = object->next_idx_alloc;
|
||||
s16 prio = object->prio;
|
||||
s16 obj_idx;
|
||||
s16 prev_idx;
|
||||
if(objman->obj_first == -1) {
|
||||
object->prev = -1;
|
||||
object->next = -1;
|
||||
objman->obj_first = next_idx_alloc;
|
||||
objman->obj_last = next_idx_alloc;
|
||||
(void)objman; //HACK for matching
|
||||
return;
|
||||
}
|
||||
for(obj_idx = objman->obj_first; obj_idx != -1; obj_idx = obj_new->next) {
|
||||
obj_new = &obj_all[obj_idx];
|
||||
if(obj_new->prio <= prio) {
|
||||
break;
|
||||
}
|
||||
prev_idx = obj_idx;
|
||||
}
|
||||
if(obj_idx != -1) {
|
||||
object->prev = obj_new->prev;
|
||||
object->next = obj_idx;
|
||||
if(obj_new->prev != -1) {
|
||||
obj_all[obj_new->prev].next = next_idx_alloc;
|
||||
} else {
|
||||
objman->obj_first = next_idx_alloc;
|
||||
}
|
||||
obj_new->prev = next_idx_alloc;
|
||||
} else {
|
||||
object->next = -1;
|
||||
object->prev = prev_idx;
|
||||
obj_new->next = next_idx_alloc;
|
||||
objman->obj_last = next_idx_alloc;
|
||||
}
|
||||
}
|
||||
|
||||
void omAddMember(Process *objman_process, u16 group, omObjData *object)
|
||||
{
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjGroup *group_ptr = &objman->group[group];
|
||||
if(group_ptr->num_objs != group_ptr->max_objs) {
|
||||
object->group = group;
|
||||
object->group_idx = group_ptr->next_idx;
|
||||
group_ptr->obj[group_ptr->next_idx] = object;
|
||||
group_ptr->next_idx = group_ptr->next[group_ptr->next_idx];
|
||||
group_ptr->num_objs++;
|
||||
}
|
||||
}
|
||||
|
||||
void omDelObjEx(Process *objman_process, omObjData *object)
|
||||
{
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjData *obj_all = objman->obj;
|
||||
s16 next_idx_alloc = object->next_idx_alloc;
|
||||
if(objman->num_objs == 0 || object->stat == 1) {
|
||||
return;
|
||||
}
|
||||
objman->num_objs--;
|
||||
if(object->group >= 0) {
|
||||
omDelMember(objman_process, object);
|
||||
}
|
||||
if(object->motion != NULL) {
|
||||
HuMemDirectFree(object->motion);
|
||||
object->motion = NULL;
|
||||
}
|
||||
if(object->model != NULL) {
|
||||
HuMemDirectFree(object->model);
|
||||
object->model = NULL;
|
||||
}
|
||||
if(object->data != NULL) {
|
||||
HuMemDirectFree(object->data);
|
||||
object->data = NULL;
|
||||
}
|
||||
object->stat = 1;
|
||||
if(object->next >= 0) {
|
||||
obj_all[object->next].prev = object->prev;
|
||||
}
|
||||
if(object->prev >= 0) {
|
||||
obj_all[object->prev].next = object->next;
|
||||
}
|
||||
if(objman->num_objs != 0) {
|
||||
if(object->prev < 0) {
|
||||
objman->obj_first = obj_all[object->next].next_idx_alloc;
|
||||
}
|
||||
if(object->next < 0) {
|
||||
objman->obj_last = obj_all[object->prev].next_idx_alloc;
|
||||
}
|
||||
} else {
|
||||
objman->obj_first = objman->obj_last = -1;
|
||||
}
|
||||
object->next_idx = objman->next_idx;
|
||||
objman->next_idx = next_idx_alloc;
|
||||
}
|
||||
|
||||
void omDelMember(Process *objman_process, omObjData *object)
|
||||
{
|
||||
if(object->group != -1) {
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjData *obj_all = objman->obj;
|
||||
omObjGroup *group = &objman->group[object->group];
|
||||
group->obj[object->group_idx] = NULL;
|
||||
group->next[object->group_idx] = group->next_idx;
|
||||
group->next_idx = object->group_idx;
|
||||
object->group = -1;
|
||||
group->num_objs--;
|
||||
}
|
||||
}
|
||||
|
||||
void omMakeGroupEx(Process *objman_process, u16 group, u16 max_objs)
|
||||
{
|
||||
int i;
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjGroup *group_ptr = &objman->group[group];
|
||||
if(group_ptr->obj != NULL) {
|
||||
HuMemDirectFree(group_ptr->obj);
|
||||
}
|
||||
if(group_ptr->next != NULL) {
|
||||
HuMemDirectFree(group_ptr->next);
|
||||
}
|
||||
group_ptr->next_idx = 0;
|
||||
group_ptr->max_objs = max_objs;
|
||||
group_ptr->num_objs = 0;
|
||||
group_ptr->obj = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(omObjData *), 0x10000000);
|
||||
group_ptr->next = HuMemDirectMallocNum(HEAP_SYSTEM, max_objs*sizeof(u16), 0x10000000);
|
||||
for(i=0; i<max_objs; i++) {
|
||||
group_ptr->obj[i] = NULL;
|
||||
group_ptr->next[i] = i+1;
|
||||
}
|
||||
}
|
||||
|
||||
omObjData **omGetGroupMemberListEx(Process *objman_process, s16 group)
|
||||
{
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
return objman->group[group].obj;
|
||||
}
|
||||
|
||||
void omSetStatBit(omObjData *obj, u16 stat)
|
||||
{
|
||||
obj->stat |= stat;
|
||||
}
|
||||
|
||||
void omResetStatBit(omObjData *obj, u16 stat)
|
||||
{
|
||||
obj->stat &= ~stat;
|
||||
}
|
||||
|
||||
void omSetTra(omObjData *obj, float x, float y, float z)
|
||||
{
|
||||
obj->trans.x = x;
|
||||
obj->trans.y = y;
|
||||
obj->trans.z = z;
|
||||
}
|
||||
|
||||
void omSetRot(omObjData *obj, float x, float y, float z)
|
||||
{
|
||||
obj->rot.x = x;
|
||||
obj->rot.y = y;
|
||||
obj->rot.z = z;
|
||||
}
|
||||
|
||||
void omSetSca(omObjData *obj, float x, float y, float z)
|
||||
{
|
||||
obj->scale.x = x;
|
||||
obj->scale.y = y;
|
||||
obj->scale.z = z;
|
||||
}
|
||||
|
||||
void omMain(void)
|
||||
{
|
||||
Process *process = HuPrcCurrentGet();
|
||||
omObjMan *objman = process->user_data;
|
||||
omObjData *obj_all = objman->obj;
|
||||
omObjData *object;
|
||||
s16 obj_index;
|
||||
omDLLDBGOut();
|
||||
while(1) {
|
||||
if(omdispinfo) {
|
||||
float scale = 1.5f;
|
||||
GXColor color;
|
||||
color.a = 96;
|
||||
color.r = 0;
|
||||
color.g = 0;
|
||||
color.b = 255;
|
||||
printWin(7, 23, 128*scale, 40*scale, &color);
|
||||
fontcolor = 14;
|
||||
print8(8, 24, scale, "\xFD\x01H:%08lX(%ld)", HuMemUsedMallocSizeGet(HEAP_SYSTEM), HuMemUsedMallocBlockGet(HEAP_SYSTEM));
|
||||
print8(8, 24+(8*scale), scale, "\xFD\x01M:%08lX(%ld)", HuMemUsedMallocSizeGet(HEAP_DATA), HuMemUsedMallocBlockGet(HEAP_DATA));
|
||||
print8(8, 24+(16*scale), scale, "\xFD\x01OBJ:%d/%d", objman->num_objs, objman->max_objs);
|
||||
print8(8, 24+(24*scale), scale, "\xFD\x01OVL:%ld(%ld<%ld)", omovlhisidx, omcurovl, omprevovl);
|
||||
print8(8, 24+(32*scale), scale, "\xFD\x01POL:%ld", totalPolyCnted);
|
||||
}
|
||||
obj_index = objman->obj_last;
|
||||
while(obj_index != -1) {
|
||||
object = &obj_all[obj_index];
|
||||
obj_index = object->prev;
|
||||
if((object->stat & 0x3) == 0) {
|
||||
if(object->func != NULL && (object->stat & 0x58) == 0) {
|
||||
object->func(object);
|
||||
}
|
||||
if(omcurovl == -1 || objman->obj_last == -1) {
|
||||
break;
|
||||
}
|
||||
if((object->stat & 0x3) == 0) {
|
||||
if((obj_all[obj_index].stat & 0x3) != 0) {
|
||||
obj_index = object->prev;
|
||||
}
|
||||
if(object->model != NULL && object->model[0] != -1 && !(object->stat & 0x100)) {
|
||||
Hu3DModelPosSet(object->model[0], object->trans.x, object->trans.y, object->trans.z);
|
||||
Hu3DModelRotSet(object->model[0], object->rot.x, object->rot.y, object->rot.z);
|
||||
Hu3DModelScaleSet(object->model[0], object->scale.x, object->scale.y, object->scale.z);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
//Dummy function to force string literals in binary
|
||||
static void omDumpObj(Process *objman_process)
|
||||
{
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
omObjData *obj_all = objman->obj;
|
||||
int i;
|
||||
OSReport("=================== 現在登録されている OBJECT ==================\n");
|
||||
OSReport("STAT PRI GRPN MEMN PROG (TRA) (ROT) (SCA) mdlcnt mtncnt work[0] work[1] work[2] work[3] *data\n");
|
||||
for(i=0; i<objman->max_objs; i++) {
|
||||
omObjData *object = &obj_all[i];
|
||||
OSReport("%04d:%04X %04X %d %d %08X (%.2f %.2f %.2f) (%.2f %.2f %.2f) (%.2f %.2f %.2f) %d %d %08X %08X %08X %08X %08X\n",
|
||||
object->stat, object->stat, object->prio, object->group, object->unk10, object->func,
|
||||
object->trans.x, object->trans.y, object->trans.z,
|
||||
object->rot.x, object->rot.y, object->rot.z,
|
||||
object->scale.x, object->scale.y, object->scale.z,
|
||||
object->mdlcnt, object->mtncnt, object->work[0], object->work[1], object->work[2], object->work[3], object->data);
|
||||
}
|
||||
OSReport("================================================================\n");
|
||||
}
|
||||
|
||||
void omAllPause(BOOL pause)
|
||||
{
|
||||
Process *objman_process = HuPrcCurrentGet();
|
||||
omObjMan *objman = objman_process->user_data;
|
||||
int i;
|
||||
if(pause) {
|
||||
for(i=0; i<objman->max_objs; i++) {
|
||||
if((objman->obj[i].stat & 0x21) == 0) {
|
||||
omSetStatBit(&objman->obj[i], 0x10);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for(i=0; i<objman->max_objs; i++) {
|
||||
if((objman->obj[i].stat & 0x21) == 0) {
|
||||
omResetStatBit(&objman->obj[i], 0x10);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char omPauseChk(void)
|
||||
{
|
||||
if(omDBGSysKeyObj == NULL) {
|
||||
return 0;
|
||||
} else {
|
||||
return omDBGSysKeyObj->work[0] & 0x1;
|
||||
}
|
||||
}
|
||||
|
||||
OverlayID omCurrentOvlGet(void)
|
||||
{
|
||||
return omcurovl;
|
||||
}
|
||||
11
src/game/ovllist.c
Normal file
11
src/game/ovllist.c
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#include "common.h"
|
||||
|
||||
|
||||
#define OVL_DEFINE(name, path) { path, 0 },
|
||||
|
||||
FileListEntry _ovltbl[OVL_COUNT+1] = {
|
||||
#include "ovl_table.h"
|
||||
{ NULL, -1 }
|
||||
};
|
||||
|
||||
#undef OVL_DEFINE
|
||||
|
|
@ -1,28 +1,53 @@
|
|||
#include "common.h"
|
||||
#include "dolphin/mtx.h"
|
||||
#include "dolphin/gx.h"
|
||||
#include "dolphin/vi.h"
|
||||
#include "stdio.h"
|
||||
#include "stdarg.h"
|
||||
|
||||
extern u8 ank8x8_4b[];
|
||||
|
||||
struct strline_data {
|
||||
u16 type;
|
||||
u16 last_idx;
|
||||
u16 color;
|
||||
s16 x;
|
||||
s16 y;
|
||||
s16 w;
|
||||
s16 h;
|
||||
s16 empty_line;
|
||||
s16 empstrline_next;
|
||||
float scale;
|
||||
char str[80];
|
||||
GXColor color;
|
||||
GXColor win_color;
|
||||
};
|
||||
|
||||
static struct strline_data strline[256];
|
||||
static char pfStrBuf[256];
|
||||
|
||||
BOOL saftyFrameF;
|
||||
u16 strlinecnt;
|
||||
u16 empstrline;
|
||||
int fontcolor;
|
||||
u16 empstrline;
|
||||
u16 strlinecnt;
|
||||
BOOL saftyFrameF;
|
||||
|
||||
void pfClsScr(void);
|
||||
static void WireDraw(void);
|
||||
|
||||
static GXColor ATTRIBUTE_ALIGN(32) fcoltbl[16] = {
|
||||
{ 0, 0, 0, 255 },
|
||||
{ 0, 0, 128, 255 },
|
||||
{ 128, 0, 0, 255 },
|
||||
{ 128, 0, 128, 255 },
|
||||
{ 0, 128, 0, 255 },
|
||||
{ 0, 128, 128, 255 },
|
||||
{ 128, 128, 0, 255 },
|
||||
{ 128, 128, 128, 255 },
|
||||
{ 128, 128, 128, 128 },
|
||||
{ 0, 0, 255, 255 },
|
||||
{ 255, 0, 0, 255 },
|
||||
{ 255, 0, 255, 255 },
|
||||
{ 0, 255, 0, 255 },
|
||||
{ 0, 255, 255, 255 },
|
||||
{ 255, 255, 0, 255 },
|
||||
{ 255, 255, 255, 255 }
|
||||
};
|
||||
|
||||
void pfInit(void)
|
||||
{
|
||||
|
|
@ -42,10 +67,286 @@ void pfClsScr(void)
|
|||
empstrline = 0;
|
||||
strlinecnt = 0;
|
||||
for (i = 0; i < 256; i++) {
|
||||
strline[i].empty_line = i+1;
|
||||
strline[i].empstrline_next = i+1;
|
||||
strline[i].type = 0;
|
||||
if (strline[i].str[0] != 0) {
|
||||
strline[i].str[0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s16 print8(s16 x, s16 y, float scale, char *str, ...)
|
||||
{
|
||||
struct strline_data *strline_curr;
|
||||
char *src = pfStrBuf;
|
||||
char *dst;
|
||||
s16 ret;
|
||||
va_list list;
|
||||
strline_curr = &strline[empstrline];
|
||||
if(strlinecnt >= 256) {
|
||||
return -1;
|
||||
}
|
||||
va_start(list, str);
|
||||
vsprintf(pfStrBuf, str, list);
|
||||
strlinecnt++;
|
||||
ret = empstrline;
|
||||
empstrline = strline_curr->empstrline_next;
|
||||
strline_curr->type = 0;
|
||||
strline_curr->color = fontcolor;
|
||||
strline_curr->x = x;
|
||||
strline_curr->y = y;
|
||||
strline_curr->scale = scale;
|
||||
dst = strline_curr->str;
|
||||
while(*src) {
|
||||
*dst++ = *src++;
|
||||
}
|
||||
*dst = 0;
|
||||
va_end(list);
|
||||
return ret;
|
||||
}
|
||||
|
||||
s16 printWin(s16 x, s16 y, s16 w, s16 h, GXColor *color)
|
||||
{
|
||||
struct strline_data *strline_curr;
|
||||
s16 ret;
|
||||
char *src = pfStrBuf;
|
||||
strline_curr = &strline[empstrline];
|
||||
if(strlinecnt >= 256) {
|
||||
return -1;
|
||||
}
|
||||
strlinecnt++;
|
||||
ret = empstrline;
|
||||
empstrline = strline_curr->empstrline_next;
|
||||
strline_curr->type = 1;
|
||||
strline_curr->win_color.r = color->r;
|
||||
strline_curr->win_color.g = color->g;
|
||||
strline_curr->win_color.b = color->b;
|
||||
strline_curr->win_color.a = color->a;
|
||||
strline_curr->x = x;
|
||||
strline_curr->y = y;
|
||||
strline_curr->w = w;
|
||||
strline_curr->h = h;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void pfDrawFonts(void)
|
||||
{
|
||||
GXTexObj font_tex;
|
||||
Mtx44 proj;
|
||||
Mtx modelview;
|
||||
int i;
|
||||
s16 x, y, w, h;
|
||||
|
||||
u16 strline_count = strlinecnt;
|
||||
if(saftyFrameF) {
|
||||
WireDraw();
|
||||
}
|
||||
MTXOrtho(proj, 0, 480, 0, 640, 0, 10);
|
||||
GXSetProjection(proj, GX_ORTHOGRAPHIC);
|
||||
MTXIdentity(modelview);
|
||||
GXLoadPosMtxImm(modelview, GX_PNMTX0);
|
||||
GXSetCurrentMtx(GX_PNMTX0);
|
||||
GXSetViewport(0, 0, RenderMode->fbWidth, RenderMode->efbHeight, 0, 1);
|
||||
GXSetScissor(0, 0, RenderMode->fbWidth, RenderMode->efbHeight);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX8);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
||||
GXSetArray(GX_VA_CLR0, fcoltbl, sizeof(GXColor));
|
||||
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
|
||||
GXInvalidateTexAll();
|
||||
GXInitTexObj(&font_tex, ank8x8_4b, 128, 128, GX_TF_I4, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||
GXInitTexObjLOD(&font_tex, GX_NEAR, GX_NEAR, 0, 0, 0, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
GXLoadTexObj(&font_tex, GX_TEXMAP0);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
||||
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
|
||||
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);
|
||||
GXSetNumChans(1);
|
||||
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_VTX, GX_SRC_VTX, GX_LIGHT0, GX_DF_CLAMP, GX_AF_SPOT);
|
||||
GXSetZCompLoc(GX_FALSE);
|
||||
GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
||||
GXSetAlphaUpdate(GX_TRUE);
|
||||
for(i=0; i<256; i++) {
|
||||
x = strline[i].x;
|
||||
y = strline[i].y;
|
||||
if(strline[i].type == 1) {
|
||||
w = strline[i].w;
|
||||
h = strline[i].h;
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_S16, 0);
|
||||
GXSetTevColor(GX_TEVREG0, strline[i].win_color);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetNumTexGens(0);
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
GXPosition2s16(x, y);
|
||||
GXPosition2s16(x+w, y);
|
||||
GXPosition2s16(x+w, y+h);
|
||||
GXPosition2s16(x, y+h);
|
||||
GXEnd();
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX8);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
||||
GXSetArray(GX_VA_CLR0, fcoltbl, sizeof(GXColor));
|
||||
GXSetNumTevStages(1);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
||||
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
|
||||
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);
|
||||
} else {
|
||||
if(strline[i].str[0] != '\0') {
|
||||
float shadow_ofs_x, shadow_ofs_y;
|
||||
float char_w;
|
||||
float char_h;
|
||||
float texcoord_x, texcoord_y;
|
||||
char *str;
|
||||
u16 color;
|
||||
s16 shadow_color;
|
||||
float scale;
|
||||
char_w = char_h = 8.0f*strline[i].scale;
|
||||
str = strline[i].str;
|
||||
color = strline[i].color;
|
||||
shadow_color = -1;
|
||||
scale = 1.0f;
|
||||
while(*str) {
|
||||
char c = *str++;
|
||||
switch(c) {
|
||||
case 255:
|
||||
c = *str++;
|
||||
scale = c/16.0f;
|
||||
char_w = 8.0f*strline[i].scale*scale;
|
||||
char_h = 8.0f*strline[i].scale*scale;
|
||||
break;
|
||||
|
||||
case 254:
|
||||
color = (*str++)-1;
|
||||
break;
|
||||
|
||||
case 253:
|
||||
shadow_color = (*str++)-1;
|
||||
shadow_ofs_x = 1.3333333f*strline[i].scale*scale;
|
||||
shadow_ofs_y = 1.3333333f*strline[i].scale*scale;
|
||||
break;
|
||||
|
||||
default:
|
||||
texcoord_x = (c%16)/16.0f;
|
||||
texcoord_y = ((c/16)/16.0f)+(1/128.0f);
|
||||
if(shadow_color < 0) {
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
GXPosition3s16(x, y, 0);
|
||||
GXColor1x8(color);
|
||||
GXTexCoord2f32(texcoord_x, texcoord_y);
|
||||
GXPosition3s16(x+char_w, y, 0);
|
||||
GXColor1x8(color);
|
||||
GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y);
|
||||
GXPosition3s16(x+char_w, y+char_h, 0);
|
||||
GXColor1x8(color);
|
||||
GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y+(1/16.0f));
|
||||
GXPosition3s16(x, y+char_h, 0);
|
||||
GXColor1x8(color);
|
||||
GXTexCoord2f32(texcoord_x, texcoord_y+(1/16.0f));
|
||||
GXEnd();
|
||||
} else {
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 8);
|
||||
GXPosition3s16(x+shadow_ofs_x, y+shadow_ofs_y, 0);
|
||||
GXColor1x8(shadow_color);
|
||||
GXTexCoord2f32(texcoord_x, texcoord_y);
|
||||
GXPosition3s16(x+char_w+shadow_ofs_x, y+shadow_ofs_y, 0);
|
||||
GXColor1x8(shadow_color);
|
||||
GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y);
|
||||
GXPosition3s16(x+char_w+shadow_ofs_x, y+char_h+shadow_ofs_y, 0);
|
||||
GXColor1x8(shadow_color);
|
||||
GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y+(1/16.0f));
|
||||
GXPosition3s16(x+shadow_ofs_x, y+char_h+shadow_ofs_y, 0);
|
||||
GXColor1x8(shadow_color);
|
||||
GXTexCoord2f32(texcoord_x, texcoord_y+(1/16.0f));
|
||||
GXPosition3s16(x, y, 0);
|
||||
GXColor1x8(color);
|
||||
GXTexCoord2f32(texcoord_x, texcoord_y);
|
||||
GXPosition3s16(x+char_w, y, 0);
|
||||
GXColor1x8(color);
|
||||
GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y);
|
||||
GXPosition3s16(x+char_w, y+char_h, 0);
|
||||
GXColor1x8(color);
|
||||
GXTexCoord2f32(texcoord_x+(1/16.0f), texcoord_y+(1/16.0f));
|
||||
GXPosition3s16(x, y+char_h, 0);
|
||||
GXColor1x8(color);
|
||||
GXTexCoord2f32(texcoord_x, texcoord_y+(1/16.0f));
|
||||
GXEnd();
|
||||
}
|
||||
x += char_w;
|
||||
if(x > 640) {
|
||||
x = 0;
|
||||
y += char_h;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void WireDraw(void)
|
||||
{
|
||||
Mtx44 proj;
|
||||
Mtx modelview;
|
||||
MTXOrtho(proj, 0, 480, 0, 576, 0, 10);
|
||||
GXSetProjection(proj, GX_ORTHOGRAPHIC);
|
||||
if(RenderMode->field_rendering) {
|
||||
GXSetViewportJitter(0, 0, 640, 480, 0, 1, VIGetNextField());
|
||||
} else {
|
||||
GXSetViewport(0, 0, 640, 480, 0, 1);
|
||||
}
|
||||
GXSetScissor(0, 0, 640, 480);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0);
|
||||
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGB, GX_RGB8, 0);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetNumTexGens(0);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
|
||||
GXSetNumChans(1);
|
||||
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
|
||||
MTXIdentity(modelview);
|
||||
GXLoadPosMtxImm(modelview, GX_PNMTX0);
|
||||
GXBegin(GX_LINES, 0, 8);
|
||||
GXPosition2f32(16, 40);
|
||||
GXColor3u8(255, 0, 0);
|
||||
GXPosition2f32(16, 440);
|
||||
GXColor3u8(255, 0, 0);
|
||||
GXPosition2f32(16, 40);
|
||||
GXColor3u8(255, 0, 0);
|
||||
GXPosition2f32(560, 40);
|
||||
GXColor3u8(255, 0, 0);
|
||||
GXPosition2f32(560, 440);
|
||||
GXColor3u8(255, 0, 0);
|
||||
GXPosition2f32(560, 40);
|
||||
GXColor3u8(255, 0, 0);
|
||||
GXPosition2f32(560, 440);
|
||||
GXColor3u8(255, 0, 0);
|
||||
GXPosition2f32(16, 440);
|
||||
GXColor3u8(255, 0, 0);
|
||||
GXEnd();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_siz
|
|||
alloc_size = HuMemMemoryAllocSizeGet(sizeof(Process))
|
||||
+HuMemMemoryAllocSizeGet(stack_size)
|
||||
+HuMemMemoryAllocSizeGet(extra_size);
|
||||
if(!(heap = HuMemDirectMalloc(0, alloc_size))) {
|
||||
if(!(heap = HuMemDirectMalloc(HEAP_SYSTEM, alloc_size))) {
|
||||
OSReport("process> malloc error size %d\n", alloc_size);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
0
tools/m2ctx.py
Normal file → Executable file
0
tools/m2ctx.py
Normal file → Executable file
Loading…
Add table
Add a link
Reference in a new issue