The imaginatively named Mahjong (or Hyper Value 2800: Mahjong, to give its full name) is a budget mahjong game where you can use your winnings to buy women's clothing, which you can then make your female opponents wear when you defeat them.
So when you think about it, it's the exact opposite of the strip mahjong games that were so popular in Japan at the time.
Mahjong not your thing? Don't worry, the same devs released a hanafuda 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#
The game's main file repository, CD_DATA.BIN, contains some source code fragments:
0x4E5E00
ong *scratch);
PACKET *GsTMDfastTG3M(TMD_P_TG3 *op, VERT *vp, VERT *np, PACKET *pk,
int n, int shift, GsOT *ot, u_long *scratch);
PACKET *GsTMDfastTG3MFG(TMD_P_TG3 *op, VERT *vp, VERT *np, PACKET *pk,
int n, int shift, GsOT *ot, u_long *scratch);
PACKET *GsTMDfastF4GL(TMD_P_F4G *op, VERT *vp, VERT *np, PACKET *pk,
int n, int shift, GsOT *ot, u_long *scratch);
PACKET *GsTMDfastF4GLFG(TMD_P_F4G *op, VERT *vp, VERT *np, PACKET *pk,
int n, int shift, GsOT *ot, u_long *scrat
0x4E8E00
ght);
extern void SpuGetCommonMasterVolumeAttr (short *mvol_left, short *mvol_right,
short *mvolmode_left,
short *mvolmode_right);
extern void SpuGetCommonCDMix (long *cd_mix);
extern void SpuGetCommonCDVolume (short *cd_left, short *cd_right);
extern void SpuGetCommonCDReverb (long *cd_reverb);
extern long SpuSetReverbModeType (long mode);
extern void SpuSetReverbModeDepth (short depth_left, short depth_right);
extern void SpuSetReverbModeDelayTime (long delay);
extern void SpuSet
0x4F4A00
7 *2) /2) + 12 +80 +18 +8+j-1 ].disp_off=0 ;
} else {
obj_w[ 0 * ((380+ 7 *2) /2) + 12 +80 +18 +8+j-2 ].disp_off=1 ;
obj_w[ 0 * ((380+ 7 *2) /2) + 12 +80 +18 +8+j-1 ].disp_off=1 ;
}
}
obj_set_2d2_new(12 +80 +18 +32,
0, 137, 81, &t_km_r_tbl[0],
&t_km_entry[5 ], &t_km_anim[3 ]);
obj_set_2d2_new(12 +80 +18 +33,
0, 137+ 3 , 81+ 2 , &t_km_r_tbl[0],
&t_km_entry[37 ], &t_km_anim[3 ]);
}
if (flg == 1){
j=0;
if (t_flg[t_ocsr] == 0){
obj_set_2d2_new_fade(12 +80 +18 +8+(t_ocsr*2), 0, 64, &t_km_entry[21 +t_ocsr]);
} else {
obj_set_2d2_new_fade(12 +80 +18 +8+(t_ocsr*2), 0, 32, &t_km_entry[21 +t_ocsr]);
}
if (t_flg[t_csr] == 0){
obj_set_2d2_new_fade(12 +80 +18 +8+(t_csr*2), 0, 128, &t_km_entry[21 +t_csr]);
} else {
obj_set_2d2_new_fade(12 +80 +18 +8+(t_csr*2), 0, 64, &t_km_entry[21 +t_csr]);
}
for (i=0; i<12; i++){
t_cdx[i]+=x;
if ((t_cdx[i] >= -7) && (t_cdx[i] < 305)){
obj_w[ 0 * ((380+ 7 *2) /2) + 12 +80 +18 +8+j ].disp_off=0 ;
obj_pos_set(12 +80 +18 +8+j, 0, t_cdx[i]+16, t_cdy+16, 0);
j++;
obj_w[ 0 * ((380+ 7 *2) /2) + 12 +80 +18 +8+j ].disp_off=0 ;
obj_pos_set(12 +80 +18 +8+j, 0, t_cdx[i]+ 3 +16, t_cdy+ 2 +16, 0);
j++;
} else {
obj_w[ 0 * ((380+ 7 *2) /2) + 12 +80 +18 +8+j ].disp_off=1 ;
j++;
obj_w[ 0 * ((380+ 7 *2) /2) + 12 +80 +18 +8+j ].disp_off=1 ;
j++;
}
if (t_cdx[i] >= 480) t_cdx[i]-=480;
}
}
if (flg == 2){
j=0;
if (t_flg[t_ocsr] == 0){
obj_
0x50F600
scl 8; .type 0x3; .endef
.def anime_t_dt; .val 44; .scl 8; .tag _ANIME_T_DT; .size 4; .type 0x18; .endef
.def anime_timer; .val 48; .scl 8; .type 0x3; .endef
.def anime_no; .val 50; .scl 8; .type 0x3; .endef
.def ext_timer; .val 52; .scl 8; .type 0x3; .endef
.def anime_dt; .val 56; .scl 8; .tag _ANIME_DT; .size 4; .type 0x18; .endef
.def obj_dt; .val 60; .scl 8; .type 0x1c; .endef
.def object; .val 64; .scl 8; .tag .60fake; .size 16; .type 0x18; .endef
.def rotate3d; .val 68; .scl 8; .tag .2
0x512400
.def offset; .val 8; .scl 8; .type 0xf; .endef
.def color; .val 12; .scl 8; .type 0x1f; .endef
.def .eos; .val 16; .scl 102; .tag _SPRITE_W; .size 16; .endef
.def SPRITE_W; .scl 13; .tag _SPRITE_W; .size 16; .type 0x8; .endef
.def _TEX_UVWH_W; .scl 10; .type 0x8; .size 6; .endef
.def u0; .val 0; .scl 8; .type 0xc; .endef
.def v0; .val 1; .scl 8; .type 0xc; .endef
.def w; .val 2; .scl 8; .type 0x3; .endef
.def h; .val 4; .scl 8; .type 0x3; .endef
.def .eos; .val 6; .scl 102; .tag _TEX_UVWH_W; .size 6; .endef
.def TEX_UVWH_W; .scl 13; .tag _TEX_UVWH_W; .size 6; .type 0x8; .endef
.def _TEX_UVWHT_W; .scl 10; .type 0x8; .size 8; .endef
.def u0; .val 0; .scl 8; .type 0xc; .endef
.def v0; .val 1; .scl 8; .type 0xc; .endef
.def w; .val 2; .scl 8; .type 0x3; .endef
.def h; .val 4; .scl 8; .type 0x3; .endef
.def tpage; .val 6; .scl 8; .type 0xd; .endef
.def .eos; .val 8; .scl 102; .tag _TEX_UVWHT_W; .size 8; .endef
.def TEX_UVWHT_W; .scl 13; .tag _TEX_UVWHT_W; .size 8; .type 0x8; .
0x6B7410
p4(SVECTOR *v0,SVECTOR *v1,SVECTOR *v2,SVECTOR *v3,
long *sxy0,long *sxy1,long *sxy2,long *sxy3,
long *p,long *otz,long *flag);
extern long RotColorDpq(SVECTOR *v0,SVECTOR *v1,CVECTOR *v2,
long *sxy,CVECTOR *v3,long *flag);
extern long RotColorDpq3(SVECTOR *v0,SVECTOR *v1,SVECTOR *v2,
SVECTOR *v3,SVECTOR *v4,SVECTOR *v5,CVECTOR *v6,
long *sxy0,long *sxy1,long *sxy2,
CVECTOR *v7,CVECTOR *v8,CVECTOR *v9,long *flag);
extern long RotAverageNclipColorDpq3(SVECTOR *v0,SV
0x6D7C84
ラーメッセージ=表示
エラー音=鳴らす
入力文字数=100
スペースキー=11100
先読み変換=する
解析スレッド使用=する
カナ入力時次候補選択=選択
確定語保存=メモリ
[辞書・学習]
基本辞書セットNo=1
辞書共有=しない
[辞書セット1]
辞書セット名称="標準辞書"
システム辞書=C:\JUST\ATOK11\ATOK11.DIC
ユーザー辞書=C:\JUST\ATOK11\ATOK11U1.DIC
補助辞書1=
補助辞書2=
補助辞書3=
0x6E175E
FT4;
typedef struct {
u_long tag;
u_char r0, g0, b0, code;
short x0, y0;
u_char r1, g1, b1, pad1;
short x1, y1;
u_char r2, g2, b2, pad2;
sh
0x816A80
return(d0);
}
/*------ 対対和チェック ------------------------------------------------*/
int toichk(u_short *a0)
{
int d0=0,d1=1,d2=0,d3=0,d4=0;
u_short d5=0;
while (d1<7)
{
d5=a0[d1];
if ((d5>>8)>2) d2++;
if (((d5>>8)==3)||((d5>>8)==5)) d3++;
if ((d5>>8)>4) d4++;
d1++;
}
if (d2==4)
{
d0=TOITOI;
yakuct=yakuct+2;
}
if (d3==3)
{
d0=d0|ANKO3;
yak
0x835180
トレーが空けられた後CDを抜いて */
break; /* トレーを閉めるとこうなる(はず) */
}
}
/*-----------------
0x858640
= 0;
static char I_wno2 = 0;
static char sute_check = 0;
if (I_wcheck != w_no || at_ch(IC_JSCORE) || (plnum != 3 && window & 0x0039))
{
I_wcheck = w_no;
for (l = 0; l < 22; l++)
{
if (p2hou[l])
{
/* 段毎にリーチ時の座標修正 */
if (l == 0 || l == 11) control = 0;
o_pat = set_haitype(p2hou[l], IO_SU_T); /* 牌種類チェック */
/* 喰われた牌の色替え */
if (p2hou[l]&0x40) o_pat+=4;
0x8D2E80
==========================*/
/* Local Define */
/*===================================================================*/
Ushort v_cnt;
Ushort v_cnt_wrk, v_cnt_wrk2;
Ushort init_count;
Vlong DCnt;
static VUshort process_end = 0;
int time_over = 0,stbar_wrk2;
int value = 0; /* 測定実験用 */
/*=========================================================
0x977300
ト生をする */
extern int SndStopCdXaBGM(void); /* BGM扱いのCD-XAの再生をやめる */
/*
#####################################################################
# #
# ローカル関数プロトタイプ宣言 #
# #
(Source: tikal.)