Push work on m_card

This commit is contained in:
Cuyler36
2025-03-21 02:15:16 -04:00
parent e9a67b3f16
commit eb242526ad
5 changed files with 1248 additions and 31 deletions
+25
View File
@@ -11,6 +11,31 @@
extern "C" {
#endif
typedef struct CResTIMG {
u8 mTextureFormat; // _00
u8 mTransparency; // _01
u16 mSizeX; // _02
u16 mSizeY; // _04
u8 mWrapS; // _06
u8 mWrapT; // _07
u8 mPaletteFormat; // _08
u8 mColorFormat; // _09
u16 mPaletteEntryCount; // _0A
u32 mPaletteOffset; // _0C
GXBool mIsMIPmapEnabled; // _10
GXBool mDoEdgeLOD; // _11
GXBool mIsBiasClamp; // _12
GXBool mIsMaxAnisotropy; // _13
u8 mMinFilterType; // _14
u8 mMagFilterType; // _15
s8 mMinLOD; // _16
s8 mMaxLOD; // _17
u8 mTotalImageCount; // _18
u8 _19; // _19, unknown
s16 mLODBias; // _1A
u32 mImageDataOffset; // _1C
} CResTIMG;
enum resource_index {
RESOURCE_FGDATA,
RESOURCE_MAIL,
+43 -15
View File
@@ -127,6 +127,12 @@ enum {
#define mCD_MEMCARD_SECTORSIZE 0x2000
#define mCD_ALIGN_SECTORSIZE(s) ALIGN_NEXT(s, mCD_MEMCARD_SECTORSIZE)
typedef struct memcard_header_s {
char comment[CARD_COMMENT_SIZE];
u8 banner[0xE00];
u8 icon[0x600];
} MemcardHeader_c;
typedef struct {
mLd_land_info_c land;
PersonalID_c pid[PLAYER_NUM];
@@ -136,7 +142,8 @@ typedef struct {
#define mCD_KEEP_ORIGINAL_COUNT 12
typedef struct {
int count;
u16 checksum;
u16 landid;
u8 _0004[mCD_KEEP_ORIGINAL_PAGE_COUNT][12];
mNW_original_design_c original[mCD_KEEP_ORIGINAL_PAGE_COUNT][mCD_KEEP_ORIGINAL_COUNT];
int _CC80; // force size to 0xCCA0
@@ -146,7 +153,8 @@ typedef struct {
#define mCD_KEEP_MAIL_COUNT 20
typedef struct {
int count;
u16 checksum;
u16 landid;
u8 _0004[mCD_KEEP_MAIL_PAGE_COUNT][12];
Mail_c mail[mCD_KEEP_MAIL_PAGE_COUNT][mCD_KEEP_MAIL_COUNT];
} mCD_keep_mail_c ATTRIBUTE_ALIGN(32);
@@ -159,6 +167,14 @@ typedef struct {
mDi_entry_c entries[mCD_KEEP_DIARY_COUNT][mCD_KEEP_DIARY_ENTRY_COUNT];
} mCD_keep_diary_c ATTRIBUTE_ALIGN(32);
typedef struct {
MemcardHeader_c header;
u8 pad[32];
mCD_keep_original_c original ATTRIBUTE_ALIGN(32);
mCD_keep_mail_c mail ATTRIBUTE_ALIGN(32);
mCD_keep_diary_c diary ATTRIBUTE_ALIGN(32);
} mCD_others_c;
typedef struct {
CARDStat stat;
s32 fileNo;
@@ -180,14 +196,29 @@ typedef struct {
int _1C;
} mCD_memMgr_fileInfo_c;
typedef struct private_item_keep_s {
mActor_name_t items[mPr_POCKETS_SLOT_COUNT];
u8 ticket_expiry_month;
u8 ticket_storage;
u32 item_cond;
u32 wallet;
mQst_delivery_c delivery[mPr_DELIVERY_QUEST_NUM];
mQst_errand_c errand[mPr_ERRAND_QUEST_NUM];
Mail_c mail[mPr_INVENTORY_MAIL_COUNT];
mPr_catalog_order_c catalog_order[mPr_CATALOG_ORDER_NUM];
u8 _0FF0;
Anmremail_c remail;
mPr_animal_memory_c animal_memory;
} mCD_PrivateItem_c;
typedef struct {
s32 chan;
int chan;
int loaded_file_type;
u32 workArea_size;
void* workArea;
u8 _0010;
int load_proc;
u8 _0018[0x0054 - 0x0018];
mCD_memMgr_fileInfo_c save_home_info;
mCD_memMgr_fileInfo_c init_game_start_info;
mCD_memMgr_card_info_c cards[CARD_NUM_CHANS];
u32 _017C;
int land_saved;
@@ -200,19 +231,13 @@ typedef struct {
int _019C;
int _01A0;
int broken_file_idx;
u8 _01A8[0x11BC - 0x01A8];
mCD_PrivateItem_c private_item;
char filename[32];
} mCD_memMgr_c;
/* Bonus letter */
#define mCD_PRESENT_MAX 9
typedef struct memcard_header_s {
char comment[CARD_COMMENT_SIZE];
u8 banner[0xE00];
u8 icon[0x600];
} MemcardHeader_c;
typedef struct present_save_s {
u16 checksum;
u16 present_count;
@@ -234,9 +259,11 @@ enum {
mCD_PRESENT_TYPE_NUM
};
#define OTHERS_SIZE ALIGN_NEXT(sizeof(mCD_others_c), mCD_MEMCARD_SECTORSIZE)
extern s32 mCD_GetThisLandSlotNo_code(int* player_no, s32* slot_card_results);
extern int mCD_GetThisLandSlotNo(void);
extern void mCD_save_data_aram_malloc();
extern void mCD_save_data_aram_malloc(void);
extern void mCD_set_aram_save_data();
extern void mCD_init_card();
extern s32 mCD_InitGameStart_bg(int player_no, int card_private_idx, int start_cond, s32* mounted_chan);
@@ -252,15 +279,16 @@ extern int mCD_SaveStation_Passport_bg(s32* chan);
extern void mCD_PrintErrInfo(gfxprint_t* gfxprint);
extern void mCD_InitAll();
extern void mCD_LoadLand();
extern void mCD_LoadLand(void);
extern void mCD_toNextLand();
extern int mCD_EraseBrokenLand_bg(void*);
extern int mCD_EraseBrokenLand_bg(int* slot);
extern int mCD_EraseLand_bg(int* slot);
extern int mCD_ErasePassportFile_bg(int slot);
extern int mCD_SaveErasePlayer_bg(int* slot);
extern int mCD_card_format_bg(s32 chan);
extern void mCD_ReCheckLoadLand(GAME_PLAY* play);
extern int mCD_SaveHome_bg(int param_1, int* chan);
extern int mCD_save_data_aram_to_main(void* dst, u32 size, u32 idx);
extern int mCD_save_data_main_to_aram(void* src, u32 size, u32 idx);
+1137 -15
View File
File diff suppressed because it is too large Load Diff
+38
View File
@@ -0,0 +1,38 @@
static u8* mCD_set_bti_data(u8* data, int res_fileNo, int tlut_size, int count, int pal_size) {
u32 addr = JW_GetAramAddress(res_fileNo);
u32 size = ALIGN_NEXT(JW_GetResSizeFileNo(res_fileNo), 32);
CResTIMG* buf = (CResTIMG*)mCD_malloc_32(size);
int idx;
if (buf != NULL) {
u8* tex_p;
u16* pal_p;
_JW_GetResourceAram(addr, (u8*)buf, size);
DCStoreRangeNoSync(buf, size);
tex_p = (u8*)(buf) + buf->mImageDataOffset;
idx = count > 1 ? RANDOM(count) : count;
while (TRUE) {
u8* dst = tex_p;
count--;
if (count == idx) {
dst = tex_p + tlut_size;
}
bcopy(dst, data, tlut_size);
data += tlut_size;
if (count == 0) {
break;
}
}
pal_p = (u16*)((u8*)(buf) + buf->mPaletteOffset);
bcopy(pal_p, data, pal_size);
data += pal_size;
zelda_free(buf);
}
return data;
}
+5 -1
View File
@@ -11,6 +11,7 @@
#include "jsyswrap.h"
#include "dolphin/PPCArch.h"
#pragma inline_depth(smart)
#pragma inline_max_size(1000)
#include "../src/static/libforest/emu64/emu64_utility.cc"
@@ -5292,7 +5293,7 @@ u32 emu64::emu64_taskstart_r(Gfx* dl_p) {
EMU64_PRINT_LEVEL4_FLAG
void emu64::emu64_taskstart(Gfx* dl_p) {
static u8 flag = 0;
static int flag = 0;
PPCSync();
if ((int)aflags[AFLAGS_RUN_MODE] != EMU64_RUN_MODE_SKIP) {
@@ -5415,9 +5416,12 @@ extern void emu64_cleanup(void) {
emu64_class.emu64_cleanup();
}
// hack - inlines in emu64_taskstart C wrapper otherwise
#pragma dont_inline on
extern void emu64_taskstart(Gfx* gfx) {
emu64_class.emu64_taskstart(gfx);
}
#pragma dont_inline reset
extern void emu64_set_ucode_info(int len, ucode_info* info) {
emu64_class.emu64_set_ucode_info(len, info);