The imaginatively named Hanafuda (or Hyper Value 2800: Hanafuda, to give its full name) is a budget hanafuda game, and probably the only hanafuda game ever to allow you to purchase and assemble truck parts with your winnings.
Hanafuda not your cup of tea? Don't worry, the same devs released a mahjong game on the same day.
Dummy File#
The game contains a file titled DMY, which, when read as signed 16-bit PCM audio, reveals itself to be an audio track from Diver's Dream.
(Source: tikal.)
Uncompiled Source Code#
CD_DATA.BIN, which is the game's main file repository, contains several snippets of uncompiled source code:
0x290600
op, VERT *vp, VERT *np, PACKET *pk,
int n, int shift, GsOT *ot, u_long *scratch);
PACKET *GsTMDfastG3GLFG(TMD_P_G3G *op, VERT *vp, VERT *np, PACKET *pk,
int n, int shift, GsOT *ot, u_long *scratch);
PACKET *GsTMDfastG3GNL(TMD_P_G3G *op, VERT *vp, VERT *np, PACKET *pk,
int n, int shift, GsOT *ot, u_long *scratch);
PACKET *GsPrstF3GL(TMD_P_F3G *op, VERT *vp, VERT *np, PACKET *pk,
int n, int shift, GsOT *ot, u_long *scratch);
PACKET *GsPrstF3GLFG(TMD_P_F3G *op, VERT *vp, VER
0x292400
} SpuEnv;
extern void SpuInit (void);
extern void SpuInitHot (void);
extern void SpuStart (void);
extern void SpuQuit (void);
extern long SpuSetMute (long on_off);
extern long SpuGetMute (void);
extern void SpuSetEnv (SpuEnv *env);
extern long SpuSetNoiseClock (long n_clock);
extern long SpuGetNoiseClock (void);
extern unsigned long SpuSetNoiseVoice (long on_off, unsigned long voice_bit);
extern unsigned long SpuGetNoiseVoice (void);
extern long SpuSetReverb (long on_off);
extern long SpuGetReverb (void);
extern long SpuSetReverbModeParam (SpuReverbAttr *attr);
extern void SpuGetReverbModeParam (SpuReverbAttr *attr);
extern long SpuSetReverbDepth (SpuReverbAttr *attr);
extern long SpuReserveReverbWorkArea (long on_off);
extern long SpuIsReverbWorkAreaReserved (long on_off);
extern unsigned long SpuSetReverbVoice (long on_off, unsigned long voice_bit);
extern unsigned long SpuGetReverbVoice (void);
extern long SpuClearReverbWorkArea (long mode);
extern unsigne
0x296E00
Uchar now_p;
Uchar saisen;
Uchar kai_fg;
Uchar req;
Uchar r3_pt[2];
Uchar p_mem[3];
Uchar p_mem2[3];
Uchar pl_st[8];
Uchar b_ct;
Ushort medal_now[8];
Ushort medal[8];
Ushort pl_n_pt[8];
Ushort pl_al_pt[8];
Uchar pl_battle[7][8];
Uchar pl_next[3];
} MULTI_PL;
typedef struct {
Uchar pda_id[8];
U
0x297E00
winlim;
extern int curnum;
extern u_char dast[48];
extern u_char dastct[12];
extern u_char ent_flg[12];
extern u_char huda_flg[12];
extern u_char m_point[16];
extern u_char huda_ent[10];
extern u_char chk_huda[10];
extern u_char p1kaku[10];
extern u_char p2kaku[10];
extern u_char p3kaku[10];
extern u_char comload[4];
extern u_char *topclrc[17];
extern u_char topcnt[17];
extern u_char rule1;
extern u_char rule2;
extern u_char gamesele;
ex
0x29D600
ize 8; .type 0x18; .endef
.def u; .val 8; .scl 8; .tag .2fake; .size 8; .type 0x18; .endef
.def c; .val 12; .scl 8; .tag .3fake; .size 4; .type 0x18; .endef
.def lenv; .val 16; .scl 8; .type 0xf; .endef
.def lenh; .val 20; .scl 8; .type 0xf; .endef
.def .eos; .val 24; .scl 102; .tag .15fake; .size 24; .endef
.def QMESH; .scl 13; .tag .15fake; .size 24; .type 0x8; .endef
.file 1 "HANA/k_fkoi.c"
.file 1 "c:/psx/include\\libgpu.h"
.def .16fake; .scl 10; .type 0x8; .size 8; .endef
.def x; .v
0x29EC00
.val 18; .scl 8; .type 0x3; .endef
.def u1; .val 20; .scl 8; .type 0xc; .endef
.def v1; .val 21; .scl 8; .type 0xc; .endef
.def tpage; .val 22; .scl 8; .type 0xd; .endef
.def x2; .val 24; .scl 8; .type 0x3; .endef
.def y2; .val 26; .scl 8; .type 0x3; .endef
.def u2; .val 28; .scl 8; .type 0xc; .endef
.def v2; .val 29; .scl 8; .type 0xc; .endef
.def pad1; .val 30; .scl 8; .type 0xd; .endef
.def .eos; .val 32; .scl 102; .tag .25fake; .size 32; .endef
.def POLY_FT3; .scl 13; .tag .25fake; .size 32; .type 0x8; .endef
.def .26fake; .scl 10; .type 0x8; .size 40; .endef
.def tag; .val 0; .scl 8; .type 0xf; .endef
.def r0; .val 4; .scl 8; .type 0xc; .endef
.def g0; .val 5; .scl 8; .type 0xc; .endef
.def b0; .val 6; .scl 8; .type 0xc; .endef
.def code; .val 7; .scl 8; .type 0xc; .endef
.def x0; .val 8; .scl 8; .type 0x3; .endef
.def y0; .val 10; .scl 8; .type 0x3; .endef
.def u0; .val 12; .scl 8; .type 0xc; .endef
.def v0; .val 13; .scl 8; .type 0xc; .endef
.def clut; .val 14
0x305600
g,
short Xoffset,short Zoffset,short m,short n,
DVECTOR *base);
extern long RotAverage3(SVECTOR *v0,SVECTOR *v1,SVECTOR *v2,
long *sxy0,long *sxy1,long *sxy2,long *p,long *flag);
extern long RotAverage4(SVECTOR *v0,SVECTOR *v1,SVECTOR *v2,SVECTOR *v3,
long *sxy0,long *sxy1,long *sxy2,long *sxy3,
long *p,long *flag);
extern long RotNclip3(SVECTOR *v0,SVECTOR *v1,SVECTOR *v2,
long *sxy0,long *sxy1,long *sxy2,long *p,long *otz,
long *flag);
extern long RotNclip4(SVECTOR *v0,SVEC
0x30C400
;
typedef struct {
u_char out, in, dummy, cd;
u_char r0, g0, b0, code;
u_char r1, g1, b1, p1;
u_char r2, g2, b2, p2;
u_short v0, v1;
u_short v2, p;
} TMD_P_NG3;
typedef struct {
u_char out, in, dummy, cd;
u_char r0, g0, b0, code;
u_short n0, v0;
u_short v1, v2;
u_short v3, p;
} TMD_P_F4;
typedef struct {
u_char out, in, dummy, cd;
u_char r0, g0, b0, code;
u_short n0, v0;
u_short n1, v1;
u_short n2, v2;
u_short n3, v3;
} TMD_P_G4;
typedef struct {
u_char out, in, dummy, cd;
u_char r0, g0, b0, code;
u_char r1, g1, b1, dummy1;
u_char r2, g2, b2, dummy2;
u_char r3, g3, b3, dummy3;
u_short n0, v0;
u_short v1, v2;
u_short v3, dummy4;
} TMD_P_F4G;
typedef struct {
u_char out, in, dummy, cd;
u_char r0, g0, b0, code;
u_char r1, g1, b1, dummy1;
u_char r2, g2, b2, dummy2;
u_char r3, g3, b3, dummy3;
u_short n0, v0;
u_short n1, v1;
u_short n2, v2;
u_short n3, v3;
} TMD_P_G4G;
typedef struct {
0x311600
MATRIX_ORG;
extern long HWD0, VWD0;
extern MATRIX GsLIGHTWSMATRIX;
extern MATRIX GsIDMATRIX;
extern MATRIX GsIDMATRIX2;
extern PACKET *GsOUT_PACKET_P;
extern long GsADIVZ;
extern short GsADIVW, GsADIVH;
extern int GsLIGHT_MODE;
extern u_long GsMATE_C, GsLMODE, GsLIGNR, GsLIOFF, GsZOVER, GsBACKC, GsNDIV;
extern u_long GsTRATE, GsTON, GsDISPON;
# 1133 "c:/psx/include\\libgs.h" 3
# 1244 "c:/psx/include\\libgs.h" 3
# 1355 "c:/psx/include\\libgs.h" 3
# 1466 "c:/p
0x48D400
T
800463AC HUDA
8005BFA0 HUDA_ENT
80046414 HUDA_FLG
8008941C HWD0
8004640C HWINLIM
8001B500 H_BZERO
8001B520 H_BZERO2
80014090 H_CDLOADS
80014254 H_CDSEEK
8001B4E8 H_LABS
8001B540 H_MEMCPY
8001B568 H_MEMCPY2
8001B590 H_MEMSET
8001B5B0 H_MEMSET2
80013FD0 H_PCLOAD
8001AED0 H_SORTSPRITE
8001B664 H_STRCAT
8001B5D0 H_STRCPY
8001B638 H_STRLEN
8001B6BC H_STRNCAT
8001B600 H_STRNCPY
80046394 INDEX
80033D94 INITCARD
800342B4 INITCARD2
80012564 INITFILESYSTEM
80029494 INITGEOM
8002119C INITHEAP
80033F10 INITPAD
80034164 INITPAD2
8007D534 INIT_COUNT
800A1198 INIT_SIKO
8002158C INTERRUPTCALLBACK
8002A0F8 INTPL
8004AE86 IN_GAME
800179B8 IO_CHECK
80017320 IO_READ
800A07B8 I_ALBUM_MAIN
800A1DD0 I_ALBUM_PIC
800AFE84 I_ALL_COORD
800B0CF0 I_AL_PARTS
800AFDC0 I_BG_DATA
8001D4B8 I_CHANGE_WIN
800AFE64 I_CITY_COORD
800B00CC I_CITY_ROUTE
800B0CE8 I_COUNT
800B0CEC I_CUR_ST
800A347C I_DRAW_FONT
0x48EA00
800A8DD8 K_FGOLD_OFS
800A8DFC K_FGOLD_OFS_SET
800A93EC K_FGOLD_POS
800A8D58 K_FGOLD_SET_FACE
800A8D30 K_FGOLD_SET_MODE
800A8D80 K_FGOLD_SET_SCORE
800A8CF8 K_FGOLD_WORK
800A981C K_FKAO_CONTROL
800AA1F8 K_FKAO_DISP
800A9A4C K_FKAO_EXEC
800AA57C K_FKAO_FADE
800A984C K_FKAO_INIT
800A97F8 K_FKAO_STATUS
800A99C0 K_FKAO_SUB_SET
800AA5A0 K_FKAO_WINDOW
800A97EC K_FKAO_WORK
800AAD70 K_FKOI_BIG
800AA77C K_FKOI_DISP
800AAD4C K_FKOI_ERASE
800AA674 K_FKOI_EXEC
800AA62C K_FKOI_INIT
800AA620 K_FKOI_WORK
800AAF04 K_FMON_DISP
800AB088 K_FMON_ERASE
800AB35C K_FMON_FADE
800AAE98 K_FMON_INIT
800AB158 K_FMON_NUM
800AB0D4 K_FMON_POS
800AAEC4 K_FMON_SET_SCORE
800AAE8C K_FMON_WORK
800ABE60 K_FMOVE_BAFUDA_3CHECK
800ABDF8 K_FMOVE_BAFUDA_4CHECK
800ABB5C K_FMOVE_BAFUDA_ADD
800AC370 K_FMOVE_BAFUDA_COUNT
800AC314 K_FMOVE_BAFUDA_LOAD
800AC138 K_FMOVE_BAFUDA_LOOK
800AC1AC K_FMOVE_BAFUDA_LOOK_OPT
800ABDA8 K_FMOVE_BAFUDA_MATCH_COUNT
800ABDCC K_FMOVE_BAFUDA_MATCH_POS
800ABF34 K_FMOVE_BAFUDA_NULL_POS
800AC15C K_FMOVE_BAFUDA_PULL
800AC238 K_FMOVE_BAFUDA_PULL_OPT
800AC180 K_FMOVE_BAFUDA_PUSH
800AC2B8 K_FMOVE_BAFUDA_SAVE
800ABB04 K_FMOVE_BAFUDA_SET
800AC390 K_FMOVE_BAFUDA_VIEW
800AB38C K_FMOVE_COPY
800AB3BC K_FMOVE_COUNT
800AC438 K_FMOVE_FUDA_CODE_CHANGE
800AC470 K_FMOVE_FUDA_CODE_CHANGE_ALL
800AB7F4 K_FMOVE_INIT
800AB43C K_FMOVE_LOOK
800AB524 K_FMOVE_LOOK_TOP
800AB60C K_FMOVE_MATCH_COUNT
0x497400
DEMO_MAIN
80014D48 DEMO_INIT
80014FC0 DEMO_SD_CHECK
80014FD8 GO_GAME_MODE
800150C8 GO_MAP_MODE
800150F0 FADE_IN_SET
8001512C FADE_IN_CHECK
8001517C FADE_OUT_SET
80015190 FADE_OUT_CHECK
800151FC FADE_IN_SET_W
80015238 FADE_IN_CHECK_W
80015288 FADE_OUT_SET_W
8001529C FADE_OUT_CHECK_W
80015308 FADE_SET
80015398 FADE_SET_W
8001542C TILE_DISP
800155A8 LINE_DISP
800156A0 TEX_DISP_FS
80015818 TEX_DISP_S
80015974 TEX_DISP_SM
80015A7C TEX_DISP_F
80015BF0 TEX_DISP
80015D50 TEX_TPAGE_SET
80015DFC TEX_DISPS
80015E90 TEX_DISPS_S
80015F28 TEX_DISPS_F
80015FC0 TEX_DISPS_FS
80016488 POLY_DISP_FT4
80016668 POLY_DISP_FT4_S
80016848 LOADTIMF
800169EC FLASH_SET
80016BB0 DISP_BGS_MAIN
80016C38 DISP_W_CLEAR_ALL
80016C6C COLD_RESET_INIT
80016CC8 WARM_RESET_INIT
80016DA0 SYSTEM_INIT
80016DAC GRAPH_INIT
80017030 GRAPH_FB_INIT
80017058 GRAPH_INIT_16
8001717C GS_INIT
80017280 VRAM_STAY_SET
80017320 IO_READ
80017
0x498A00
8001F9B4 SOUNDCLEAR2
8001F9BC SNDCTRLALLOFF
8001F9E4 SNDCTRLSETMOVIEVOLUME
8001FA24 SNDCTRLCLEARMOVIEVOLUME
8001FA5C I_HANA_MAIN
8001FB90 I_MAP_MAIN
8001FCAC I_SHOP_MAIN
8001FD8C S_MEM_SAVE
8001FF9C S_MEM_LOAD
80020178 S_MEM_AUTOLOAD
80020394 S_MEM_PDA
800210D8 __MAIN
800210E0 __SN_ENTRY_POINT
800210E0 STUP2
80021104 STUP1
80021180 STUP0
8002119C INITHEAP
800211AC KROM2RAWADD
800211BC CHANGECLEARPAD
800211CC SETRCNT
80021268 GETRCNT
800212A0 STARTRCNT
800212D0 STOPRCNT
80021304 RESETRCNT
8002133C VSYNC
8002154C CHANGECLEARRCNT
8002155C RESETCALLBACK
8002158C INTERRUPTCALLBACK
800215BC DMACALLBACK
800215EC VSYNCCALLBACK
80021620 VSYNCCALLBACKS
80021650 STOPCALLBACK
80021680 RESTARTCALLBACK
800216B0 CHECKCALLBACK
800216C0 GETINTRMASK
800216D8 SETINTRMASK
80021C24 _96_REMOVE
80021C3C RETURNFROMEXCEPTION
80021C4C RESETENTRYINT
80021C5C HOOKENTRYINT
80021C6C ENTERCRITICALSECTION
80021C7C EXITCRITICALSECTION
80021C8C STARTINTRVSYNC
80021DAC STARTINTRDMA
8002204C SETGEOMOFFSET
8002206C RESETGRAPH
800221E0 SETGRAPHDEBUG
8002223C SETGRAPHQUEUE
800222E0 GETGRAPHDEBUG
800222F0 DRAWSYNCCALLBACK
80022350 SETDISPMASK
800223E8 DRAWSYNC
8002256C CLEARIMAGE
800225FC CLEARIMAGE2
80022694 LOADIMAGE
800226F4 STOREIMAGE
80022754 MOVEIMAGE
8002280C CLEAROTAG
800228D4 CLEAROTAGR
80022980 DRAWPRIM
800229DC DRAWOTAG
80022A4C PUTDRAWENV
80022B0C DRAWOTA
0x4A1600
019C _HANA_BSS_OBJEND
800B01A4 _HANA_ORGEND
800B01A4 _HANA_OBJEND
800B01A4 _HANA_DTORS_ORGEND
800B01A4 _HANA_DTORS_ORG
800B01A4 _HANA_DTORS_OBJEND
800B01A4 _HANA_DTORS_OBJ
800B01A4 _HANA_CTORS_ORGEND
800B01A4 _HANA_CTORS_ORG
800B01A4 _HANA_CTORS_OBJEND
800B01A4 _HANA_CTORS_OBJ
800B065C K_SDISP_LDTBL0
800B071C K_SDISP_LDTBL1
800B073C K_SDISP_BGDATA
800B07FC K_SDISP_WINDOW_ODATA
800B0A64 K_SDISP_NUM_ODATA
800B0B7C K_SDISP_ETC_ODATA
800B0BB4 K_SDISP_PARTS_ODA
(Source: tikal.)