Radiant Silvergun (Arcade)
Radiant Silvergun |
---|
Developer: Treasure This game has uncompiled source code. |
This article has just been started and needs the article basics added. Help us out and add them. |
A vertical shoot-'em-up game that's considered to be a predecessor to Ikaruga.
Regional Differences
The ST-V version, when using a non-Japanese BIOS, has quite different behavior than the Japanese version. These changes have never been present in any other version of the game.
- Practice stage removed
- Boss introductions removed
- Button 3 completely disabled
- Button 1+2 together uses the sword
- Button 2 shoots shot C
- Shot C additionally shoots directly behind the player
- Shot C bombs-on-screen limit is 8 instead of 5 (It actually literally compares to a double-precision floating point 7.5, but that just ends up being effectively 8)
Source Code
Large amounts of uncompiled source code can be found throughout the ST-V version's ROM. These addresses are assuming the ROM has been pre-concatenated.
0xC8800
This is part of the source code for the boss Golets.
eam[]={ 0x2000, 0x2400, 0x2800, 0x2c00, 0x3000, }; /*-----------------------------------------------------------------*/ static void rain_beam(ENM_WK *x){ /*-----------------------------------------------------------------*/ if(shot_kill_chk((COMM_OBJ *)x,1)){ ; }else{ if(x->sp==0){ x->s8w1--; x->mw.zoomx += 0x800; if(x->s8w1<=0){ x->sp++; x->s8w1 = 16; if(x->s8w0){ x->mw.angz = x->s16w0; }else{ x->mw.angz = get_ang(x, get_play0(&x->mw)); } x->dx = 0; x->dy = 0; // x->s32w0 = fixmuls(sin32(x->mw.angz),+0x2c00); // x->s32w1 = fixmuls(cos32(x->mw.angz),-0x2c00); x->s32w0 = fixmuls(sin32(x->mw.angz),+LV5_rain_beam[LV5]); x->s32w1 = fixmuls(cos32(x->mw.angz),-LV5_rain_beam[LV5]); } x->dx += x->s32w0; x->dy += x->s32w1; }else{ if(x->s8w1>0){ x->s8w1--; x->dx += x->s32w0; x->dy += x->s32w1; x->mw.zoomx -= 0x800; x->mw.zoomy -= 0x180; } } x->mw.x += x->dx; x->mw.y += x->dy; } x->mw.anm_no = rain_beam_anm[gtimer&3]; } /*-----------------------------------------------------------------*/ static void rain_beam_set(DELIVERY_WK *dw, BOS12_WK *ms){ /*-----------------------------------------------------------------*/ ENM_WK *x; x = obj_set(ENM_OBJ_AREA,obj_size(sizeof(ENM_WK)),shot); if(x == NULL) return; mw_init(&x->mw); aw_init(&x->aw); ENM_WK_init(x); x->mw.obj_no = ms->mw.obj_no; x->mw.dousa_func = rain_beam; x->mw.sys_fg = KILL_TAMA|SPR_NO_CUT_FG; x->mw.x = ms->rain_pos[X]; x->mw.y = ms->rain_pos[Y]; x->mw.z = 0; x->mw.pri_ofs = PRI_INU; x->mw.anm_no = A_MARU1; x->mw.char_no = CHAR_EFT; x->aw.atari_tbl_adr = at_rain_beam; x->aw.nakama = NAKAMA_ENM; x->aw.zoku = ZOKU_TAMA; x->s8w0 = dw->par; /* Shoot Type */ x->s8w1 = 16; /* Speed Down Flame */ x->mw.angz = dw->Ds16w0; /* 1st angZ */ x->s16w0 = dw->Ds16w1; /* 2nd angZ */ x->dx = fixmuls(sin32(x->mw.angz),x->s8w1*+dw->Ds16w2*DEC/0x10); x->dy = fixmuls(cos32(x->mw.angz),x->s8w1*-dw->Ds16w2*DEC/0x10); x->s32w0 = x->dx/-0x10; x->s32w1 = x->dy/-0x10; x->mw.zoomx = 0x1000; x->mw.zoomy = 0x8000; if(x->s8w0){ x->mw.color_b = char_tbl[CHAR_EFT].color + COL_YRED; }else{ x->mw.color_b = char_tbl[CHAR_EFT].color + COL_YELLOW; } x->mw.color_m = x->mw.color_b; } /*============================================*/ /* ------------------------------------------ */ /* Bakurai Touka */ /* ------------------------------------------ */ /*============================================*/ static ATARI_TBL at_baku[]={ { (ATFG_ATTACK | ATFG_TBL_END), AT_NML,+0x00,+0x00,0x10,0x10, }, }; extern void eft_moon(EFTC_OBJ *x); /*-----------------------------------------------------------------*/ static void moon2(EFTC_OBJ *x){ /*-----------------------------------------------------------------*/ eft_moon(x); x->mw.y -= SC_DY; } /*-----------------------------------------------------------------*/ static void baku(ENM_WK *x){ /*-----------------------------------------------------------------*/ EFTC_OBJ *p; DELIVERY_WK dw; if(x->sp==0){ x->dy += 0x0e00; x->s32w0 += 0x0b00; if(x->mw.z > 0){ x->sp++; x->mw.sys_fg = KILL_TAMA; x->dy = -SC_DY; x->s32w0 = 0; x->s32w1 = +0x1000; x->mw.zoomx = 0x2000; x->mw.anm_no = A_MARU0; x->mw.char_no = CHAR_EFT; x->mw.color_m = x->mw.color_b = char_tbl[CHAR_EFT].color + COL_YRED; dw.x = x->mw.x; dw.y = x->mw.y; dw.z = x->mw.z; dw.Ds32w0 = +0x14000; p = eft_moon_set(&dw); if(p){ p->mw.dousa_func = moon2; } se_set(SE02_BAKU2_2,x->mw.x); }else{ if(x->mw.z < -0x30*DEC){ x->mw.anm_no = A_SONI_BAKURAI01_A; } if(x->mw.z < -0x28*DEC){ x->mw.anm_no = A_SONI_BAKURAI02_A; } if(x->mw.z < -0x20*DEC){ x->mw.anm_no = A_SONI_BAKURAI03_A; } if(x->mw.z < -0x18*DEC){ x->mw.anm_no = A_SONI_BAKURAI04_A; }else{ x->mw.anm_no = A_SONI_BAKURAI05_A; } x->mw.anm_no += gtimer&1; } }else{ x->mw.anm_no = rain_beam_anm[gtimer&3]; x->mw.angz = RAND; x->s32w1 -= 0x080; x->mw.zoomx += x->s32w1; x->mw.zoomy = x->mw.zoomx; if(x->s32w0<0&&x->mw.zoomx<0x3000){ x->mw.sys_fg = (KILL_TAMA|ATARI_OFF_FG); } x->mw.sys_fg &= -(X_FLP|Y_FLP)-1; x->mw.sys_fg |= RAND&(X_FLP|Y_FLP); } x->mw.y += x->dy; x->mw.z += x->s32w0; if(x->sp && (range_chk(&x->mw)||x->mw.zoomx<0)){ x->mode = OBJ_M_KIE; } } /*-----------------------------------------------------------------*/ static void baku_set(DELIVERY_WK *dw){ /*-----------------------------------------------------------------*/ ENM_WK *x; x = obj_set(ENM_OBJ_AREA,obj_size(sizeof(ENM_WK)),shot); if(x == NULL) return; mw_init(&x->mw); aw_init(&x->aw); ENM_WK_init(x); x->mw.obj_no = dw->Dobj_no; x->mw.dousa_func = baku; x->mw.sys_fg = (KILL_TAMA|ATARI_OFF_FG); x->mw.x = dw->x; x->mw.y = dw->y; x->mw.z = dw->z; x->dy = -0x00000; x->mw.pri_ofs = PRI_SHOT; x->mw.anm_no = A_SONI_BAKURAI01_A; x->mw.char_no = CHAR_SONIC_E; x->mw.color_m = x->mw.color_b = char_tbl[CHAR_SONIC_E].color + COL_SONIC_EFT; x->aw.atari_tbl_adr = at_baku; x->aw.nakama = NAKAMA_ENM; x->aw.zoku = ZOKU_TAMA; return; } /*============================================*/ /* ------------------------------------------ */ /* SHUTTER VELM */ /* ------------------------------------------ */ /*============================================*/ extern void enm00_dead(COMM_OBJ *); extern ATARI_TBL at_enm00_0[]; #define ENM00_0_LIFE (SHOT_PW_VALCAN*2) /* VELM */ /*=================================================================*/ static void bos12_enm00(ENM_WK *x){ /*=================================================================*/ if(x->mw.y > +0x80*DEC){ x->mode = OBJ_M_KIE; return; } if(x->aw.life <= 0){ enm00_dead((COMM_OBJ *) x); x->mode = OBJ_M_KIE; }else{ x->mw.anm_no = (x->mw.anm_no+1)&0x1f; x->mw.y -= SC_DY; } } /*=================================================================*/ static void bos12_enm00_set(DELIVERY_WK *dw){ /*=================================================================*/ s8 i; ENM_WK *x; i = ENM_OBJ_get(); if(i == DUMMY_OBJ) return; x = obj_set(ENM_OBJ_AREA,obj_size(sizeof(ENM_WK)),enm); if(x == NULL) return; mw_init(&x->mw); aw_init(&x->aw); ENM_WK_init(x); x->mw.dousa_func = bos12_enm00; x->mw.sys_fg = KILL_TAMA|Y_FLP; x->mw.obj_no = i; obj_x[x->mw.obj_no] = x; x->mw.char_no = CHAR_VELM; x->mw.anm_no = 0; x->aw.atari_tbl_adr = at_enm00_0; x->aw.life = ENM00_0_LIFE; x->mw.color_m = char_tbl[CHAR_VELM].color + ZOKU_YELLOW*0x10; x->mw.color_b = x->mw.color_m; x->aw.nakama = NAKAMA_ENM; x->aw.zoku = ZOKU_YELLOW; x->mw.x = dw->x; x->mw.y = dw->y; x->mw.z = 0; } /*============================================*/ /* ------------------------------------------ */ /* SHUTTER */ /* ------------------------------------------ */ /*============================================*/ /*=================================================================*/ static ATARI_TBL at_shut0[]={ /*=================================================================*/ {(ATFG_ATTACK ), AT_BODY,+0x34,+0x00,0x22,0x03,}, {(ATFG_DAMAGE | ATFG_TBL_END), DM_NML, +0x34,+0x00,0x28,0x04,}, }; /*=================================================================*/ static ATARI_TBL at_shut1[]={ /*=================================================================*/ {(ATFG_ATTACK ), AT_BODY,-0x34,+0x00,0x22,0x03,}, {(ATFG_DAMAGE | ATFG_TBL_END), DM_NML, -0x34,+0x00,0x28,0x04,}, }; /*=================================================================*/ static void shutout(ENM_WK *x){ /*=================================================================*/ if(gtimer&1){ x->aw.atari_tbl_adr = at_shut0; }else{ x->aw.atari_tbl_adr = at_shut1; } x->mw.y -= SC_DY; if(x->mw.y>(+0x80*DEC+(+0x10*DEC/2))){ x->mode = OBJ_M_KIE; } } /*=================================================================*/ static void shutout_disp(MAIN_WK *mw){ /*=================================================================*/ ENM_WK *x; MAIN_WK m; x = (ENM_WK *)((u32)mw-0x10); mw_init(&m); m.char_no = CHAR_SONIC_E; m.anm_no = A_STAGE2_KABE; m.pri_ofs = PRI_ENM; m.color_m = 0x2000+char_tbl[CHAR_SONIC_E].color+COL_STAGE2_KABE; m.y = x->mw.y; m.z = 0; m.x = x->mw.x-0x34*DEC; spr_put(&m); m.x = x->mw.x+0x34*DEC; spr_put(&m); } /*=================================================================*/ static void shutout_set(s32 XP, s32 YP, BOS12_WK *ms, u8 FG){ /*=================================================================*/ s8 i; ENM_WK *p; DELIVERY_WK dw; /*--------------------------------------------------------*/ i = ENM_OBJ_get(); if(i == DUMMY_OBJ) return; p = obj_set(ENM_OBJ_AREA,obj_size(sizeof(ENM_WK)),enm); if(p == NULL) return; /*--------------------------------------------------------*/ mw_init(&p->mw); aw_init(&p->aw); ENM_WK_init(p); p->mw.dousa_func = shutout; p->mw.sys_fg = (MODEL_DISP_FG|MODEL_FUNC_CALL_FG |ATARI_MUTEKI_FG|ATARI_STEALTH_FG|KILL_TAMA); p->mw.poly_adr = shutout_disp; p->mw.obj_no = i; obj_x[p->mw.obj_no] = p; p->aw.atari_tbl_adr = at_shut0; p->aw.life = 10; p->aw.nakama = NAKAMA_KABE; p->aw.zoku = ZOKU_NORMAL; p->mw.x = XP+(ms->scr_shut*16*DEC); p->mw.y = YP; if(RAND&0x10){ if(ms->scr_shut>-2){ ms->scr_shut--; }else{ ms->scr_shut++; } }else{ if(ms->scr_shut<+2){ ms->scr_shut++; }else{ ms->scr_shut--; } } if(FG && ms->zibaku==0){ dw.x = p->mw.x; dw.y = p->mw.y; bos12_enm00_set(&dw); } } /*============================================================================*/ /* ------------------------------------------ */ /* Sub Routines */ /* ------------------------------------------ */ /*============================================================================*/ /*=================================================================*/ static BOS12_WK *get_letsGO(BOS12_WK *x){ /*=================================================================*/ return obj_x[x->LG_no]; } /*============================================================================*/ /* ------------------------------------------ */ /* Steps Init */ /* ------------------------------------------ */ /*============================================================================*/ /*=================================================================*/ static void IDEON_SWORD_init(BOS12_WK *x){ /*=================================================================*/ x->sp = s_IDEON_SWORD; x->runYpos = (+0x40+0x20)*DEC; x->s16w0 = 45; x->s32w0 = 0; x->s32w1 = 0; x->s32w2 = DEC; x->s32w3 = DEC; } /*============================================================================*/ /* ------------------------------------------ */ /* Steps Main (SONIC) */ /* ------------------------------------------ */ /*============================================================================*/ #if EDIT #include "ang_edt.c" #include "mot_edt.c" /*=================================================================*/ static void TEST(BOS12_WK *x){ /*=================================================================*/ // s16 *p; ang_edit(&x->mw); mot_edit(&x->sw,&x->ew); #if 0 /* Hit3D Posi Edit */ if(spad[PAD_1P].trig & PAD_L){ x->p0_posi_num--; if(x->p0_posi_num<0){ x->p0_posi_num = p0_suu-1; } } if(spad[PAD_1P].trig & PAD_R){ x->p0_posi_num++; if(x->p0_posi_num>p0_suu-1){ x->p0_posi_num = 0; } } if(spad[PAD_1P].trig & PAD_UP){ x->p0_menu--; if(x->p0_menu<0){ x->p0_menu = 0; } } if(spad[PAD_1P].trig & PAD_DOWN){ x->p0_menu++; if(x->p0_menu>3){ x->p0_menu = 3; } } p = &p0_posi_data[4 * x->p0_posi_num]; if(spad[PAD_1P].data & PAD_A){ if(spad[PAD_1P].data & PAD_LEFT){ *(p+x->p0_menu) -= 1; } if(spad[PAD_1P].data & PAD_RIGHT){ *(p+x->p0_menu) += 1; } }else{ if(spad[PAD_1P].trig & PAD_LEFT){ *(p+x->p0_menu) -= 1; } if(spad[PAD_1P].trig & PAD_RIGHT){ *(p+x->p0_menu) += 1; } } if(x->p0_menu == 3){ *(p+x->p0_menu) &= 3; } num_set16(+0x80*DEC,+0x30*DEC,0,x->p0_posi_num); if(!(x->p0_menu==0 && gtimer&1)){ num_set16(+0x80*DEC,+0x40*DEC,0,*(p+X)); } if(!(x->p0_menu==1 && gtimer&1)){ num_set16(+0x80*DEC,+0x48*DEC,0,*(p+Y)); } if(!(x->p0_menu==2 && gtimer&1)){ num_set16(+0x80*DEC,+0x50*DEC,0,*(p+Z)); } if(!(x->p0_menu==3 && gtimer&1)){ num_set16(+0x80*DEC,+0x60*DEC,0,*(p+3)); } #endif } #endif /*=================================================================*/ /*=================================================================*/ /*=================================================================*/ #if SCR_DBG static void test_hit_set(s32 XP, s32 YP); #endif /*=================================================================*/ static void RUN_se(BOS12_WK *x, s32 se_Xpos){ /*=================================================================*/ if(x->runXpos != se_Xpos){ se_set(SE02_BURNER2_2,x->mw.x); } } /*=================================================================*/ static void set_run_rain_beam(BOS12_WK *x){ /*=================================================================*/ DELIVERY_WK dw; if(LV5<2){ return; } se_set(SE_T_SHOT1,x->mw.x); dw.par = 0x0000; /* Type */ dw.Ds16w2 = 0x0007; /* 1st Speed */ dw.Ds16w0 = 0xe000; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = 0x2000; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = 0xc000; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = 0x4000; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = 0xa000; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = 0x6000; /* 1st angZ */ rain_beam_set(&dw,x); } /*=================================================================*/ static void SCROLL(BOS12_WK *x){ /*=================================================================*/ s8 i,suu,set; u16 dat; s32 s32w0; FIXED XpYp[XY]; u8 FG; #if SCR_DBG s16 BGX; #endif DELIVERY_WK dw; /*-------------------------------------*/ /* Boss Moved Command */ /*-------------------------------------*/ for(i=0; i<2; i++){ x->scr_y[i] += SC_DY; if(x->scr_y[i] < -0x80*DEC){ /*-------------------------------------*/ #if SCR_DBG BGX = SCROLL_BG[(x->scr_step*2)+0]; if(BGX!=BG_END){ test_hit_set(BGX*DEC,(-0x80-0xc0)*DEC); } BGX = SCROLL_BG[(x->scr_step*2)+1]; if(BGX!=BG_END){ test_hit_set(BGX*DEC,(-0x80-0xc0)*DEC); } #endif /*-------------------------------------*/ x->scr_step++; dat = SCROLL_proc[x->scr_step]; if(dat==SC_loop){ x->zibaku++; x->scr_step = 0; dat = SCROLL_proc[0]; } x->scr_p[i] = dat&0xf; x->scr_y[i] += 0x80*2*DEC; /*---------------------*/ /* Change Running Root */ /*---------------------*/ if(BACK_RUN_CHK){ get_play_posi(x, 0, &XpYp[0]); if(XpYp[X]>0){ x->scr_rand[i] = -1; }else{ x->scr_rand[i] = +1; } if(LV5<3){ x->scr_rand[i] = 0-x->scr_rand[i]; } }else{ if(RAND&0x10){ x->scr_rand[i] = -1; }else{ x->scr_rand[i] = +1; } } /*-----------------*/ /* Scroll Objs Set */ /*-----------------*/ suu = 0; yaji_set(x,dat&0xf00); dat &= 0xff; switch(dat){ case SC_ZERO + ESET_SHUTOUT_SEL: if(x->mw.x>0){ s32w0 = -0x78*DEC; }else{ s32w0 = +0x78*DEC; } for(; suu<3; suu++){ shutout_set(s32w0, (-0x80-0x94-(suu*0x2c))*DEC,x,1); } x->scr_p[i] = SC_ZERO; break; case SC_CENT + ESET_SHUTOUT_ENM6: case SC_CENT + ESET_SHUTOUT_START6: case SC_CENT + ESET_SHUTOUT_START: set_run_rain_beam(x); x->scr_shut = x->scr_rand[i]; if(dat==SC_CENT+ESET_SHUTOUT_ENM6 ){ FG = 1; }else{ FG = 0; } if(dat==SC_CENT+ESET_SHUTOUT_START6 || dat==SC_CENT+ESET_SHUTOUT_ENM6 ){ set = 6; }else{ set = 3; } for(; suu<set; suu++){ shutout_set(x->scr_rand[i]*-0x78*DEC, (-0x80-0x94-(suu*0x2c))*DEC,x,FG); } x->scr_p[i] = SC_CENT; break; case SC_CENT2 + ESET_SHUTOUT_START: set_run_rain_beam(x); x->scr_shut = x->scr_rand[i]; for(; suu<3; suu++){ shutout_set(x->scr_rand[i]*-0x78*DEC, (-0x80-0x94-0x80-(suu*0x2c))*DEC,x,0); } x->scr_p[i] = SC_CENT2; break; case SC_ZERO + ESET_GO_SET: x->fg ^= 1; x->scr_p[i] = SC_ZERO; break; case SC_ZERO + ESET_FIGHT: x->fg ^= 2; x->btimer = 0; x->scr_p[i] = SC_ZERO; x->IDEON_X_fg = 30; break; } } } /*-------------------------------------*/ /* Command Trans ??? */ /*-------------------------------------*/ for(i=0; i<2; i++){ if(x->scr_rand[i] && -x->scr_y[i]>=(x->mw.y-0x10*DEC)){ x->scr_command = x->scr_p[i]; switch(x->scr_command){ case SC_ZERO: /*--------------*/ /* 2way Missile */ /*--------------*/ if(((x->sp==s_WAIT && x->runYpos>0) && (x->IDEON_X==0||(x->IDEON_X!=0&&i))) || (x->sp==s_IDEON_SWORD && x->p1_fg&fg_brk&&x->p2_fg&fg_brk)){ dw.x = x->rain_pos[X]; dw.y = x->rain_pos[Y]; dw.z = 0; dw.Ds32w3 = 0x1c000; /* Speed */ dw.Ds16w1 = 40; /* Homing Flame */ dw.Ds16w3 = 0x2000; /* Re_Ang_Mode (64) */ dw.Ds16w0 = x->mw.angz; dw.Ds16w4 = dw.Ds16w0+0x0e00; /* First Dir */ eshot03_set_cstm(&dw); dw.Ds16w4 = dw.Ds16w0-0x0e00; /* First Dir */ eshot03_set_cstm(&dw); } break; case SC_SIDE: RUN_se(x,0); x->runsgt = 0x20; x->runXpos = 0; x->runHundle = 0x50; break; case SC_SIDE2: RUN_se(x,0); x->runsgt = 0x80; x->runXpos = 0; x->runHundle = 0x18; break; case SC_CENT2: RUN_se(x,0x78*DEC*x->scr_rand[i]); x->runsgt = 0x80; x->runXpos = 0x78*DEC*x->scr_rand[i]; x->runHundle = 0x18; break; case SC_CENT: RUN_se(x,0x78*DEC*x->scr_rand[i]); x->runsgt = 0x20; x->runXpos = 0x78*DEC*x->scr_rand[i]; x->runHundle = 0x50; break; case SC_LFT2: RUN_se(x,+0x78*DEC); x->runsgt = 0x60; x->runXpos = +0x78*DEC; x->runHundle = 0x38; break; case SC_RGT2: RUN_se(x,-0x78*DEC); x->runsgt = 0x60; x->runXpos = -0x78*DEC; x->runHundle = 0x38; break; case SC_BACK_TURN: if(BACK_RUN_CHK){ IDEON_SWORD_init(x); }else{ x->sp = s_BACK_TURN; x->runspd = -SC_DY+DEC+0x8000; x->runHundle = 0x40; x->s32w0 = 0; x->s32w1 = 0; se_set(SE02_KAITEN2_2,x->mw.x); M_hit_off(x); } break; } x->scr_rand[i] = 0; } } x->runZ = atan(x->runXpos-x->mw.x, (x->mw.y-x->runsgt*DEC)-x->mw.y); x->mw.y -= SC_DY; } /*=================================================================*/ static void RUN_rot(BOS12_WK *x){ /*=================================================================*/ rot_sub(&x->angZspd,&x->angZssp,x->mw.angz,x->runZ, 0x2000,8,x->runHundle); rot_sub(&x->angYspd,&x->angYssp,x->mw.angy,-x->mw.angz, 0x4000,0x10,0x060); } /*=================================================================*/ static void RUN_sub(BOS12_WK *x){ /*=================================================================*/ x->dx = fixmuls(sin32(x->mw.angz),-SC_DY+DEC); if(x->mw.y<x->runYpos+get_rand(0x10000)){ x->runspd = comps32(x->runspd,-SC_DY-0x10000,0x8000); x->dy = -fixmuls(cos32(x->mw.angz),x->runspd); }else{ x->runspd = comps32(x->runspd,-SC_DY+0xe000, 0x7000); x->dy = -fixmuls(cos32(x->mw.angz),x->runspd); } } /*=================================================================*/ static void DEMO(BOS12_WK *x){ /*=================================================================*/ x->angYspd = comps32(x->angYspd, 0x800,0x20); x->angYssp = (x->mw.y/DEC)*-0x20; x->mw.x = (sin32(x->mw.angy+0x8000+x->angYssp)*((-x->mw.y/(DEC*2))-0x20)); x->mw.z = (cos32(x->mw.angy+0x8000+x->angYssp)*-0x20)-0x40*DEC; x->dy = -0x20000; if(x->mw.y<0){ x->sp++; x->mw.angx = 0; x->mw.angz = 0; if(x->LG_fg==0){ M_hit_on(x); x->dx = -0x38000; }else{ x->dx = +0x40000; } } } /*=================================================================*/ static void DEMO_1(BOS12_WK *x){ /*=================================================================*/ if(x->LG_fg==0){ x->dy += 0x0a00; x->dx += 0x1400; x->angYspd -= 0x2d; x->dz += 0x0696; if(x->dx>0 && x->mw.x>-0x30*DEC){ x->sp++; x->angYssp = x->angYspd*2; } }else{ x->angZspd -= 0x4; x->dx -= 0x4000; x->dy -= 0x0800; x->angYspd += 0x30; x->dz -= 0x0100; if(x->mw.y<-0x120*DEC){ x->sp = m_Wait; x->mw.sys_fg = (SPR_DISP_CUT|ATARI_OFF_FG); x->dx = 0; x->dy = 0; x->dz = 0; } } } /*=================================================================*/ static void DEMO_2(BOS12_WK *x){ /*=================================================================*/ RUN_rot(x); x->dx = comps32(x->dx, 0, 0x1234); x->dz = comps32(x->dz, 0, 0x1000); x->dy -= 0x700; if(x->dz==0){ x->sp = s_WAIT; x->dy = 0; x->mw.z = 0x10*DEC; } } static u8 LV5_kirai[]={ 40, 30, 20, 17, 14, }; /*=================================================================*/ static void WAIT(BOS12_WK *x){ /*=================================================================*/ PLAY_OBJ *pw; DELIVERY_WK dw; // rot_sub(&x->angXspd,&x->angXssp,x->mw.angx,0, // 0x1800,0x10,0x040); SCROLL(x); /*------------------*/ /* Running Position */ /*------------------*/ if(BACK_RUN_CHK){ x->runYpos = (+0x48+0x20)*DEC; }else{ x->runYpos = (-0x3c+0x20)*DEC; } /*----------------*/ /* Running Attack */ /*----------------*/ dw.Dobj_no = x->mw.obj_no; if(x->fg&2){ x->IDEON_X = comps32(x->IDEON_X,16,2); if(x->IDEON_X == 14){ se_set(SE02_METAL2_2,x->mw.x); } /*--------------*/ /* Search Laser */ /*--------------*/ if(x->IDEON_X==16 && x->btimer>40){ x->runZ = 0; pw = get_play0(&x->mw); dw.Ds32w0 = x->mw.x - pw->mw.x; if(dw.Ds32w0 > +0x0c*DEC){ x->mw.x -= 0x2000; } if(dw.Ds32w0 < -0x0c*DEC){ x->mw.x += 0x2000; } if(x->mw.x > +0x40*DEC){ if(x->mw.x > (+0x78*DEC)+(0x10*DEC)){ x->mw.x =(+0x78*DEC)+(0x10*DEC); } if(x->mw.x < (+0x78*DEC)-(0x10*DEC)){ x->mw.x =(+0x78*DEC)-(0x10*DEC); } }else{ if(x->mw.x < -0x40*DEC){ if(x->mw.x < (-0x78*DEC)-(0x10*DEC)){ x->mw.x =(-0x78*DEC)-(0x10*DEC); } if(x->mw.x > (-0x78*DEC)+(0x10*DEC)){ x->mw.x =(-0x78*DEC)+(0x10*DEC); } }else{ if(x->mw.x > (+0x00*DEC)+(0x14*DEC)){ x->mw.x =(+0x00*DEC)+(0x14*DEC); } if(x->mw.x < (+0x00*DEC)-(0x14*DEC)){ x->mw.x =(+0x00*DEC)-(0x14*DEC); } } } if(rest(x->btimer,WAIT_rain_tym[LV5])==0){ se_set(SE_T_SHOT1,x->mw.x); dw.par = 0x0000; /* Type */ dw.Ds16w2 = 0x0007; /* 1st Speed */ if(x->mw.y>0 || x->p6_fg&fg_brk || x->p4_fg&fg_brk){ dw.Ds16w0 = 0xd000; /* 1st angZ */ rain_beam_set(&dw,x); } if(x->mw.y>0 || x->p5_fg&fg_brk || x->p3_fg&fg_brk){ dw.Ds16w0 = 0x3000; /* 1st angZ */ rain_beam_set(&dw,x); } } /*-------------*/ /* Armd Vulcan */ /*-------------*/ if(x->mw.y<0 && rest(x->btimer,25)==0){ if(rest(x->btimer,25*2)==0){ if((x->p5_fg&fg_brk)==0){ dw.x = x->vul_L_pos[X]; dw.y = x->vul_L_pos[Y]; wall_set(&dw); } }else{ if((x->p6_fg&fg_brk)==0){ dw.x = x->vul_R_pos[X]; dw.y = x->vul_R_pos[Y]; wall_set(&dw); } } } /*----------------*/ /* Wing Laser */ /*----------------*/ if(x->mw.y<0 && x->btimer==45){ if((x->p3_fg&fg_brk)==0){ wing_laser_set(x,0); } if((x->p4_fg&fg_brk)==0){ wing_laser_set(x,1); } } /*----------------*/ /* Destroyed Mine */ /*----------------*/ if(x->p3_fg&fg_brk && x->p4_fg&fg_brk && x->p5_fg&fg_brk && x->p6_fg&fg_brk && x->mw.y<0 && rest(x->btimer,LV5_kirai[LV5])==0){ se_set(SE02_T_SHOT2_1,x->mw.x); dw.x = x->rain_pos[X]; dw.y = x->rain_pos[Y]; dw.z = 0; dw.Ds16w0 = 0x8000+get_rand(0x0800); dw.Ds32w1 = 0x10000; /* Main MAX SPEED */ dw.Ds16w1 = dw.Ds16w0; /* First Seeta */ #if 0 dw.Ds16w6 = 3; /* Attack Type */ #endif dw.Ds16w6 = 0; /* Attack Type */ dw.Ds32w2 = 0x20000; /* First SPEED */ eshot06_set_cstm(&dw); } } }else{ if(x->IDEON_X_fg){ x->IDEON_X_fg--; }else{ x->IDEON_X = comps32(x->IDEON_X,0,2); if(x->IDEON_X == 2){ se_set(SE02_METAL2_2,x->mw.x); } } #if 0 /*------------*/ /* Back Laser */ /*------------*/ if(x->runYpos>0 && (gtimer&0xf)==0){ se_set(SE_E_SHOT1,x->mw.x); dw.x = x->rain_pos[X]; dw.y = x->rain_pos[Y]; dw.z = 0; dw.Ds16w0 = x->mw.angz; dw.Ds16w1 = 0x10; /* Speed Up Flame */ dw.Ds16w2 = 0x01; /* Color Type */ eshot08_set_cstm(&dw); } #endif } RUN_rot(x); RUN_sub(x); } /*=================================================================*/ static void BACK_TURN(BOS12_WK *x){ /*=================================================================*/ SCROLL(x); RUN_rot(x); x->s32w1 = comps32(x->s32w1,0x300,0x08); x->mw.angx += x->s32w1; #if 0 if(x->mw.x<0){ x->mw.angy -= x->s32w1/2; }else{ x->mw.angy += x->s32w1/2; } #endif x->s32w0 += x->s32w1; x->mw.z =(cos32(x->mw.angx)*+0x40)-0x40*DEC+0x10*DEC; if(x->s32w0>DEC){ x->mw.z = +0x10*DEC; x->mw.angx = 0; x->angXspd = 0; IDEON_SWORD_init(x); } x->runspd = comps32(x->runspd,-SC_DY-(0x30000),0x0900); x->dy = -fixmuls(cos32(x->mw.angz),x->runspd); } /*=================================================================*/ static void IDEON_SWORD(BOS12_WK *x){ /*=================================================================*/ PLAY_OBJ *p; DELIVERY_WK dw; SCROLL(x); RUN_rot(x); RUN_sub(x); x->s16w0++; if(x->s16w0>(80*10)){ x->sp = s_WAIT; } x->IDEON_X = comps32(x->IDEON_X,0xb,1); if(x->IDEON_X == 0xa){ se_set(SE02_METAL2_2,x->mw.x); M_hit_on(x); } p = get_play0(&x->mw); if(p->mw.y>0){ x->runYpos = comps32(x->runYpos,(+0x40+0x20)*DEC+p->mw.y/4,0x8000); }else{ x->runYpos = comps32(x->runYpos,(+0x40+0x20)*DEC, 0x8000); } /*---------------*/ /* Rain Beam Set */ /*---------------*/ if(x->s16w0>80*2 && x->s16w0<80*(10-1) && rest(x->s16w0,IDEON_SWORD_rain_tym[LV5])==0){ dw.par = 0x0000; /* Type */ dw.Ds16w2 = 0x0007; /* 1st Speed */ if(rest(x->s16w0,IDEON_SWORD_rain_tym[LV5]*2)==0){ dw.Ds16w0 = 0xd000; /* 1st angZ */ }else{ dw.Ds16w0 = 0x3000; /* 1st angZ */ } rain_beam_set(&dw,x); se_set(SE_T_SHOT1,x->mw.x); } /*-------------*/ /* IDEON Sword */ /*-------------*/ if(x->s16w0<80*(10-1) && rest(x->s16w0,80)==0){ if(rest(x->s16w0, 80*2)==0){ if((x->p1_fg & fg_brk)==0){ x->IDEON_L_sp = 1; x->s32w0 = 0; x->s32w2 = 0x8000; x->s16w2 = +0xc00; /* zoomx 1st spd */ x->s16w4 = +0xc00; /* zoomy 1st spd */ tame_set(&x->p1_fg, fg_brk, &x->IDEON_L_pos[X], &x->mw.angz, COL_RRED); } }else{ if((x->p2_fg & fg_brk)==0){ x->IDEON_R_sp = 1; x->s32w1 = 0; x->s32w3 = 0x8000; x->s16w3 = +0xc00; /* zoomx 1st spd */ x->s16w5 = +0xc00; /* zoomy 1st spd */ tame_set(&x->p2_fg, fg_brk, &x->IDEON_R_pos[X], &x->mw.angz, COL_RRED); } } } if(x->IDEON_L_sp){ if(x->p1_fg & fg_brk || x->s32w0<0){ x->IDEON_L_sp=0; }else{ x->IDEON_L_sp++; if(x->IDEON_L_sp==40){ se_set(SE02_SHOTL2_2,x->IDEON_L_pos[X]); IDEON_S_set(&x->IDEON_L_sp, &x->IDEON_L_pos[X], &x->s32w0); IDEON_S_eft_set(&x->IDEON_L_pos[X], COL_RRED, x->mw.angz); x->s32w2 = 0x0000; } if(x->IDEON_L_sp>=40){ x->s32w0 += x->s16w2; x->s16w2 -= IDEON_SWORD_zoomx[LV5]; x->s32w2 += x->s16w4; if(x->s16w4>0){ x->s16w4 -= 0x48; /* Zoomy Speed */ } } } } if(x->IDEON_R_sp){ if(x->p2_fg & fg_brk || x->s32w1<0){ x->IDEON_R_sp=0; }else{ x->IDEON_R_sp++; if(x->IDEON_R_sp==40){ se_set(SE02_SHOTL2_2,x->IDEON_R_pos[X]); IDEON_S_set(&x->IDEON_R_sp, &x->IDEON_R_pos[X], &x->s32w1); IDEON_S_eft_set(&x->IDEON_R_pos[X], COL_RRED, x->mw.angz); x->s32w3 = 0x0000; } if(x->IDEON_R_sp>=40){ x->s32w1 += x->s16w3; x->s16w3 -= IDEON_SWORD_zoomx[LV5]; x->s32w3 += x->s16w5; if(x->s16w5>0){ x->s16w5 -= 0x48; /* Zoomy Speed */ } } } } } /*=================================================================*/ static void DEAD(BOS12_WK *x){ /*=================================================================*/ if(x->btimer > 120){ x->sp = s_DEAD_WAIT; x->rep = report_set(100); #if DBG_FG x->STG_SCORE0 = play_data[0].befor_stg_score; x->STG_SCORE1 = play_data[1].befor_stg_score; #endif SCR_NextSection(); } } /*=================================================================*/ static void DEAD_WAIT(BOS12_WK *x){ /*=================================================================*/ BOS12_WK *ms; EFT_OBJ *rep; rep = x->rep; if(rep->mode >= OBJ_M_KIE){ x->mode = OBJ_M_KIE; area_no--; #if DBG_FG play_data[0].befor_stg_score = x->STG_SCORE0; play_data[1].befor_stg_score = x->STG_SCORE1; #endif ms = get_letsGO(x); ms->fg |= 2; } } /*============================================================================*/ /* ------------------------------------------ */ /* Steps Main (MUGNUM) */ /* ------------------------------------------ */ /*============================================================================*/ /*=================================================================*/ static void M_hit_on(BOS12_WK *x){ /*=================================================================*/ x->p0_fg &= -fg_hit-1; x->p1_fg &= -fg_hit-1; x->p2_fg &= -fg_hit-1; x->p3_fg &= -fg_hit-1; x->p4_fg &= -fg_hit-1; x->p5_fg &= -fg_hit-1; x->p6_fg &= -fg_hit-1; } /*=================================================================*/ static void M_hit_off(BOS12_WK *x){ /*=================================================================*/ x->p0_fg |= fg_hit; x->p1_fg |= fg_hit; x->p2_fg |= fg_hit; x->p3_fg |= fg_hit; x->p4_fg |= fg_hit; x->p5_fg |= fg_hit; x->p6_fg |= fg_hit; } /*=================================================================*/ static void Wait(BOS12_WK *x){ /*=================================================================*/ BOS12_WK *ms; ms = get_letsGO(x); if(x->fg&2){ x->sp = m_Figt_Wait; x->s32w0 = 0; return; } if(ms->fg & 1){ x->sp = m_Dual; x->mw.x = -ms->mw.x; x->mw.y = -0xe0*DEC; x->mw.z = -0x30*DEC; x->dx = -ms->dx; x->dy = ms->dy; x->dz = 0; x->angYspd = 0; x->mw.sys_fg = (MODEL_DISP_FG|MODEL_FUNC_CALL_FG|ATARI_OFF_FG); } } /*=================================================================*/ static void Dual(BOS12_WK *x){ /*=================================================================*/ BOS12_WK *ms; DELIVERY_WK dw; ms = get_letsGO(x); x->dx = -ms->dx; x->dy = ms->dy; if((ms->fg&1)==0||x->fg&1){ x->sp = m_Rtrn; x->dy = -0x0e000; } x->mw.y = comps32(x->mw.y,-0x50*DEC,DEC); x->mw.angz = -ms->mw.angz/4; x->mw.angy = -ms->mw.angy; x->mw.y -= SC_DY; if(x->mw.y > -0x60*DEC && abs(x->mw.x) > 0x30*DEC && rest(x->btimer,14)==0){ dw.Dobj_no = x->mw.obj_no; dw.x = x->mw.x+get_rand(0x10*DEC); dw.y = x->mw.y+0x10*DEC; dw.z = x->mw.z; baku_set(&dw); } } /*=================================================================*/ static void Rtrn(BOS12_WK *x){ /*=================================================================*/ x->runZ = 0; rot_sub(&x->angZspd,&x->angZssp,x->mw.angz,0, 0x2000,8,0x10); if(x->mw.x>0){ x->dx += 0x0400; x->angYspd -= 0x030; }else{ x->dx -= 0x0400; x->angYspd += 0x030; } x->dy -= 0x1c00; if(x->mw.y<-0x0f0*DEC){ x->sp = m_Wait; x->dx = 0; x->dy = 0; x->mw.sys_fg = (SPR_DISP_CUT|ATARI_OFF_FG); } x->mw.y -= SC_DY; } /*=================================================================*/ static void Figt_Wait(BOS12_WK *x){ /*=================================================================*/ x->s32w0--; if(x->s32w0<0){ se_set(SE02_APPEAR2_2_2,x->mw.x); x->sp = m_Demo; x->mw.sys_fg = (MODEL_DISP_FG|MODEL_FUNC_CALL_FG|ATARI_OFF_FG); x->mw.angz = 0; x->mw.angy = 0; x->mw.angx = 0; x->angZspd = 0; x->angZssp = 0; x->angYspd = 0; x->angYssp = 0; x->mw.x = -0x50*DEC+(-0xfff71f10); x->mw.y = -0xe0*DEC; x->mw.z = -0x70*DEC; x->dy = +0x50000; x->dx = +0x10000; x->fg |= 0x80; bar_set(P0_LIFE); } } /*=================================================================*/ static void Demo(BOS12_WK *x){ /*=================================================================*/ x->mw.angx = div(x->mw.z-0x20*DEC,+0x280); x->mw.angy = -x->dx; x->mw.angz = x->dx/2; if(x->mw.z>=+0x20*DEC){ se_set(SE02_SET2_2_2,x->mw.x); x->sp = m_Demo_Wait; x->proc_wait = 120; SSSS_Anime_Set(&x->sw, BOS12_TRNS1); M_hit_on(x); x->dx = 0; x->dy = 0; x->mw.z = +0x20*DEC; x->mw.angz = 0; x->mw.angy = 0; x->mw.angx = 0; }else{ x->dx = comps32(x->dx,0,0x01d0); x->dy -= 0x0e00; x->mw.z += 0x10000; } } /*=================================================================*/ static void Demo_Wait(BOS12_WK *x){ /*=================================================================*/ x->mw.y -= 0x3000; x->IDEON_X = comps32(x->IDEON_X,-3,1); if(x->sw.S_fg & ssss_end){ x->sp = m_Figt; } } /*============================================================================*/ /* ------------------------------------------ */ /* Main Proc */ /* ------------------------------------------ */ /*============================================================================*/ enum{ BS_RAIN, BS_VULCAN, BS_MSHOT, BS_METEO, LOOP, BS_END }; /*=================================================================*/ static u8 proc_data[]={ /*=================================================================*/ BS_RAIN, BS_VULCAN, BS_MSHOT, BS_METEO, /*-------------------*/ LOOP, }; /*=================================================================*/ static void main_proc(BOS12_WK *x){ /*=================================================================*/ u8 dt0; DELIVERY_WK dw; if(x->proc_wait){ return; } dt0 = proc_data[x->proc_step]; if(LOOP == dt0){ x->proc_step = 0; dt0 = proc_data[x->proc_step]; x->zibaku++; } x->proc_step++; switch(dt0){ case BS_RAIN: x->proc_wait = 120; x->s16w0 = 0; break; case BS_VULCAN: x->sp = m_Vulc_Wait; x->proc_wait = 120; x->s16w0 = 0; x->s32w0 = 0; SSSS_Anime_Set(&x->sw, BOS12_Vulc_Set); break; case BS_METEO: x->sp = m_Meto; x->proc_wait = 120; x->s16w0 = 0; SSSS_Anime_Set(&x->sw, BOS12_Meto_Set); break; case BS_MSHOT: x->sp = m_Msht; x->proc_wait = 120; x->s16w0 = -4; dw.ix = (void *)x; if((x->p4_fg&fg_brk)==0 && (x->fg & 0x8000)==0){ dw.x = x->wng_R_pos[X]; dw.y = x->wng_R_pos[Y]; dw.Ds16w0 = -0x0001; search_set(&dw); } if((x->p3_fg&fg_brk)==0 && (x->fg & 0x4000)==0){ dw.x = x->wng_L_pos[X]; dw.y = x->wng_L_pos[Y]; dw.Ds16w0 = +0x0001; search_set(&dw); } break; } } /*=================================================================*/ static void Move(BOS12_WK *x){ /*=================================================================*/ if(x->mw.y<-0x50*DEC){ x->dy = comps32(x->dy,+0x08000,0x4000); }else{ x->dy = comps32(x->dy,-0x08000,0x6000); } if(x->sp==m_Msht&& ((x->IDEON_L_sp&&x->IDEON_L_sp<64)||(x->IDEON_R_sp&&x->IDEON_R_sp<64))){ rot_sub(&x->angZspd,&x->angZssp,x->mw.angz, x->IDEON_X_sv, 0x0400,0x14,0x02); }else{ rot_sub(&x->angZspd,&x->angZssp,x->mw.angz, get_ang(x, get_play0(&x->mw))+0x8000, 0x0480,0x14,0x02); } x->mw.x = sin32(x->mw.angz+0x8000)*0x30; } /*=================================================================*/ static void Figt(BOS12_WK *x){ /*=================================================================*/ PLAY_OBJ *pw; DELIVERY_WK dw; x->mw.z = comps32(x->mw.z,+0x20*DEC, 0x4000); Move(x); x->proc_wait = comps32(x->proc_wait,0,1); if(x->sw.S_fg & ssss_end){ SSSS_Anime_Set(&x->sw, BOS12_Wait); } main_proc(x); if(x->sp == m_Figt){ x->s16w0++; if(rest(x->s16w0,18)==0){ dw.par = 0x0001; /* Type Red */ pw = get_play0(&x->mw); if(pw->mw.y<x->mw.y){ dw.Ds16w1 = x->mw.angz; }else{ dw.Ds16w1 = 0x8000+x->mw.angz; } dw.Ds16w2 = 0x0006/*+rest(x->s16w0,18*8)/18*/; /* 1st Speed */ dw.Ds16w3 = (rest(x->s16w0,18*16)/18)*0x1000; dw.Ds16w0 = -dw.Ds16w3+0x4000+0x8000+x->mw.angz; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = +dw.Ds16w3+0xc000+0x8000+x->mw.angz; /* 1st angZ */ rain_beam_set(&dw,x); se_set(SE02_T_SHOT2_2F2,x->mw.x); } } } /*=================================================================*/ static void Vulc_Wait(BOS12_WK *x){ /*=================================================================*/ Move(x); if(x->sw.S_fg & ssss_end){ x->sp = m_Vulc; SSSS_Anime_Set(&x->sw, BOS12_Vulc); } } /*=================================================================*/ static void Vulc(BOS12_WK *x){ /*=================================================================*/ DELIVERY_WK dw; Move(x); x->s16w0++; if((x->p5_fg & fg_brk && x->p6_fg & fg_brk) || x->s16w0>80*(10)){ x->sp = m_Figt; SSSS_Anime_Set(&x->sw, BOS12_Wait); return; } /*---------------*/ /* Arms Vulcan */ /*---------------*/ if(rest(x->s16w0,vulc_tym[LV5])==0){ dw.Dobj_no = x->mw.obj_no; if((x->p5_fg&fg_brk)==0){ dw.x = x->vul_L_pos[X]; dw.y = x->vul_L_pos[Y]; dw.Ds16w0 = 0x8000+x->mw.angz+(0xc000+LamANGZ); se_set(SE02_T_SHOT2_2F1, dw.x); if(rest(x->s16w0,vulc_tym[LV5]*2)==0){ dw.Ds16w0 += 0x700; vul_set(&dw); dw.Ds16w0 -= 0x700*2; vul_set(&dw); }else{ vul_set(&dw); } } if((x->p6_fg&fg_brk)==0){ dw.x = x->vul_R_pos[X]; dw.y = x->vul_R_pos[Y]; dw.Ds16w0 = 0x8000+x->mw.angz-(0xc000+RamANGZ); se_set(SE02_T_SHOT2_2F1, dw.x); if(rest(x->s16w0,vulc_tym[LV5]*2)!=0){ dw.Ds16w0 += 0x700; vul_set(&dw); dw.Ds16w0 -= 0x700*2; vul_set(&dw); }else{ vul_set(&dw); } } } /*---------------*/ /* Rain Beam Set */ /*---------------*/ if(x->sw.S_fg & ssss_loop){ x->s32w0 = 0; } dw.par = 0x0000; /* Type */ if((x->s32w0 == 0 || x->s32w0 == 15) ){ dw.Ds16w2 = 0x0006; /* 1st Speed */ dw.Ds16w0 = 0x3000+0x8000+x->mw.angz; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = 0xd000+0x8000+x->mw.angz; /* 1st angZ */ rain_beam_set(&dw,x); se_set(SE_T_SHOT1,x->mw.x); } if((x->s32w0 == 5 || x->s32w0 == 20) && LV5>1){ dw.Ds16w2 = 0x000a; /* 1st Speed */ dw.Ds16w0 = 0x4000+0x8000+x->mw.angz; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = 0xc000+0x8000+x->mw.angz; /* 1st angZ */ rain_beam_set(&dw,x); se_set(SE_T_SHOT1,x->mw.x); } if((x->s32w0 == 10 || x->s32w0 == 25) && LV5>0){ dw.Ds16w2 = 0x0006; /* 1st Speed */ dw.Ds16w0 = 0x5000+0x8000+x->mw.angz; /* 1st angZ */ rain_beam_set(&dw,x); dw.Ds16w0 = 0xb000+0x8000+x->mw.angz; /* 1st angZ */ rain_beam_set(&dw,x); se_set(SE_T_SHOT1,x->mw.x); } x->s32w0++; } /*=================================================================*/ static void Meto(BOS12_WK *x){ /*=================================================================*/ DELIVERY_WK dw; x->mw.z = comps32(x->mw.z, 0x0c*DEC, 0x4000); if(x->sw.S_fg & ssss_end){ SSSS_Anime_Set(&x->sw, BOS12_Meto); } Move(x); x->s16w0++; if(x->s16w0>80*(10)){ x->sp = m_Figt; SSSS_Anime_Set(&x->sw, BOS12_Wait); return; } if(x->p1_fg&fg_brk && x->p2_fg&fg_brk && x->p5_fg&fg_brk && x->p6_fg&fg_brk){ dw.Ds16w0 = 1; }else{ dw.Ds16w0 = 0; } if(x->mw.z==0xc*DEC && rest(x->s16w0,meteo_tym[LV5]+dw.Ds16w0)==0){ dw.Dobj_no = x->mw.obj_no; dw.x = x->rain_pos[X]; dw.y = x->rain_pos[Y]; dw.ang = x->mw.angz; dw.Ds16w0 = (gtimer&8)/8; meteo_set(&dw); } } /*=================================================================*/ static void Msht(BOS12_WK *x){ /*=================================================================*/ PLAY_OBJ *pw; Move(x); pw = get_play0(&x->mw); if((abs(tang_dist_get(x->mw.angz+0x8000 ,get_ang(x,pw)))<0x1c00) ||(x->IDEON_L_sp&&x->IDEON_L_sp<40)||(x->IDEON_R_sp&&x->IDEON_R_sp<40) ||x->s16w0>=80*4){ x->s16w0++; } if(((x->p1_fg & fg_brk && x->p2_fg & fg_brk) || x->s16w0>80*(6) || pw->mw.y<x->mw.y) && x->IDEON_L_sp==0&&x->IDEON_R_sp==0){ x->sp = m_Figt; return; } if(x->s16w0<80*(6-1) && rest(x->s16w0,80)==0){ if(rest(x->s16w0, 80*2)==0){ if((x->p1_fg & fg_brk)==0){ x->IDEON_L_sp = 1; x->IDEON_X_sv = x->mw.angz; x->s32w0 = 0; x->s32w2 = 0x8000; x->s16w2 = +0xc00; /* zoomx 1st spd */ x->s16w4 = +0xc00; /* zoomy 1st spd */ tame_set(&x->p1_fg, fg_brk, &x->IDEON_L_pos[X], &x->mw.angz, COL_RBLUE); SSSS_Anime_Set(&x->sw, BOS12_MshtL); } }else{ if((x->p2_fg & fg_brk)==0){ x->IDEON_R_sp = 1; x->IDEON_X_sv = x->mw.angz; x->s32w1 = 0; x->s32w3 = 0x8000; x->s16w3 = +0xc00; /* zoomx 1st spd */ x->s16w5 = +0xc00; /* zoomy 1st spd */ tame_set(&x->p2_fg, fg_brk, &x->IDEON_R_pos[X], &x->mw.angz, COL_RBLUE); SSSS_Anime_Set(&x->sw, BOS12_MshtR); } } } if(x->IDEON_L_sp){ if(x->p1_fg & fg_brk || x->s32w0<0){ x->IDEON_L_sp=0; }else{ x->IDEON_L_sp++; if(x->IDEON_L_sp==40){ se_set(SE02_SHOTL2_2,x->IDEON_L_pos[X]); IDEON_S_set(&x->IDEON_L_sp, &x->IDEON_L_pos[X], &x->s32w0); IDEON_S_eft_set(&x->IDEON_L_pos[X], COL_RBLUE, x->mw.angz); x->s32w2 = 0x0000; x->angZspd = -0x180; x->angZssp = -0x040; } if(x->IDEON_L_sp>=40){ x->s32w0 += x->s16w2; x->s16w2 -= IDEON_SWORD_zoomx[LV5]; x->s32w2 += x->s16w4; if(x->s16w4>0){ x->s16w4 -= 0x48; /* Zoomy Speed */ } } } } if(x->IDEON_R_sp){ if(x->p2_fg & fg_brk || x->s32w1<0){ x->IDEON_R_sp=0; }else{ x->IDEON_R_sp++; if(x->IDEON_R_sp==40){ se_set(SE02_SHOTL2_2,x->IDEON_R_pos[X]); IDEON_S_set(&x->IDEON_R_sp, &x->IDEON_R_pos[X], &x->s32w1); IDEON_S_eft_set(&x->IDEON_R_pos[X], COL_RBLUE, x->mw.angz); x->s32w3 = 0x0000; x->angZspd = +0x180; x->angZssp = +0x040; } if(x->IDEON_R_sp>=40){ x->s32w1 += x->s16w3; x->s16w3 -= IDEON_SWORD_zoomx[LV5]; x->s32w3 += x->s16w5; if(x->s16w5>0){ x->s16w5 -= 0x48; /* Zoomy Speed */ } } } } } /*=================================================================*/ static void Dead(BOS12_WK *x){ /*=================================================================*/ DELIVERY_WK dw; x->angXspd = comps32(x->angXspd, -0x0c00, 0x08); x->angZspd = comps32(x->angZspd, +0x0200, 0x01); x->dx = comps32(x->dx, 0, 0x1000); x->dy = comps32(x->dy, 0, 0x1000); if(x->btimer==60){ dw.x = x->mw.x; dw.y = x->mw.y; dw.z = x->mw.z; dw.ix= x; bbom_set(&dw); } x->mw.z += x->dz; x->dz = comps32(x->dz, +0x30000, 0x80); if(x->btimer > 60+150){ x->mode = OBJ_M_KIE; } } /*============================================================================*/ /* ------------------------------------------ */ /* Main Proc */ /* ------------------------------------------ */ /*============================================================================*/ /*=================================================================*/ static void (*step_tbl[])(BOS12_WK *x)={ /*=================================================================*/ #if EDIT TEST, #endif /*- SONIC ----------------------------*/ DEMO, DEMO_1, DEMO_2, WAIT, BACK_TURN, IDEON_SWORD, DEAD, DEAD_WAIT, /*- MUGNUM ----------------------------*/ DEMO, DEMO_1, Wait, Dual, Rtrn, Figt_Wait, Demo, Demo_Wait, Figt, Vulc_Wait, Vulc, Meto, Msht, Dead, }; /*=================================================================*/ void bos12(BOS12_WK *x){ /*=================================================================*/ u16 sp; s8 ZIBAKU_SUU; BOS12_WK *ms; DELIVERY_WK dw; #if MUTEKI_FG x->p0_life = P0_LIFE; #endif /*-----------------------------------------*/ ms = get_letsGO(x); if(x->LG_fg==0){ sp = s_DEAD; ZIBAKU_SUU = RT_zibaku_suu; #if GO_START x->zibaku = 100; #endif }else{ sp = m_Dead; ZIBAKU_SUU = GO_zibaku_suu; } if(x->fg&0x80){ bar_life(x->p0_life); } if(x->sp<sp && (x->p0_life <= 0 || x->zibaku>ZIBAKU_SUU)){ /*---------------------------------*/ x->mw.sys_fg = (SPR_DISP_CUT|ATARI_OFF_FG); if(x->LG_fg==0){ ms->fg = 1; SCR_NextSection(); } /*---------------------------------*/ dw.x = x->mw.x; dw.y = x->mw.y; dw.z = x->mw.z; eft_boms_set(&dw); /*---------------------------------*/ x->sp = sp; boss_dead_sub(); x->p0_fg |= (fg_brk|fg_off); x->btimer = 0; /*---------------------------------*/ /* Rate Bonus Calc */ BOS_RATE = 0; if(x->p0_life <= 0){ BOS_POINT = POINT; BOS_RATE += P0_RATE; }else{ BOS_POINT = 0; } if(x->p1_life <= 0){ BOS_RATE += P1_RATE; } if(x->p2_life <= 0){ BOS_RATE += P2_RATE; } if(x->p3_life <= 0){ BOS_RATE += P3_RATE; } if(x->p4_life <= 0){ BOS_RATE += P4_RATE; } if(x->p5_life <= 0){ BOS_RATE += P5_RATE; } if(x->p6_life <= 0){ BOS_RATE += P6_RATE; } /*---------------------------------*/ x->p0_life = 0; x->p1_life = 0; x->p2_life = 0; x->p3_life = 0; x->p4_life = 0; x->p5_life = 0; x->p6_life = 0; } /*-----------------------------------------*/ if(x->p1_brk_sp==0 && x->p1_life <= 0){ x->p1_brk_sp++; x->p1_fg |= fg_brk; } if(x->p2_brk_sp==0 && x->p2_life <= 0){ x->p2_brk_sp++; x->p2_fg |= fg_brk; } if(x->p3_brk_sp==0 && x->p3_life <= 0){ x->p3_brk_sp++; x->p3_fg |= fg_brk; } if(x->p4_brk_sp==0 && x->p4_life <= 0){ x->p4_brk_sp++; x->p4_fg |= fg_brk; } if(x->p5_brk_sp==0 && x->p5_life <= 0){ x->p5_brk_sp++; x->p5_fg |= fg_brk; } if(x->p6_brk_sp==0 && x->p6_life <= 0){ x->p6_brk_sp++; x->p6_fg |= fg_brk; } /*-----------------------------------------*/ /* Main Proc */ (*step_tbl[x->sp])(x); SSSS_Anime(&x->sw); x->mw.x += x->dx; x->mw.y += x->dy; x->mw.z += x->dz; x->mw.angx += x->angXspd; x->mw.angy += x->angYspd; x->mw.angz += x->angZspd; /*-----------------------------------------*/ /* Parts Break Proc */ if(x->p1_brk_sp && (x->p1_brk_sp-1 < p1_suu)){ if(boss_brk_sub(&x->p1_posi[(x->p1_brk_sp-1)*XYZ], 8, 4)){ x->p1_brk_sp++; } } if(x->p2_brk_sp && (x->p2_brk_sp-1 < p2_suu)){ if(boss_brk_sub(&x->p2_posi[(x->p2_brk_sp-1)*XYZ], 8, 4)){ x->p2_brk_sp++; } } if(x->p3_brk_sp && (x->p3_brk_sp-1 < p3_suu)){ if(boss_brk_sub(&x->p3_posi[(x->p3_brk_sp-1)*XYZ], 8, 4)){ x->p3_brk_sp++; } } if(x->p4_brk_sp && (x->p4_brk_sp-1 < p4_suu)){ if(boss_brk_sub(&x->p4_posi[(x->p4_brk_sp-1)*XYZ], 8, 4)){ x->p4_brk_sp++; } } if(x->p5_brk_sp && (x->p5_brk_sp-1 < p5_suu)){ if(boss_brk_sub(&x->p5_posi[(x->p5_brk_sp-1)*XYZ], 8, 4)){ x->p5_brk_sp++; } } if(x->p6_brk_sp && (x->p6_brk_sp-1 < p6_suu)){ if(boss_brk_sub(&x->p6_posi[(x->p6_brk_sp-1)*XYZ], 8, 4)){ x->p6_brk_sp++; } } x->btimer++; x->fg &= -0xc000-1; /* For Side Bits Comunication */ } /*============================================================================*/ /* ------------------------------------------ */ /* Polygon Disp */ /* ------------------------------------------ */ /*============================================================================*/ #if SCR_DBG /*=================================================================*/ static void test_hit(ENM_WK *x){ /*=================================================================*/ x->mw.y -= SC_DY; if(x->mw.y>(+0x80*DEC+(+0x80*DEC/2))){ x->mode = OBJ_M_KIE; } } /*=================================================================*/ static void test_hit_disp(MAIN_WK *mw){ /*=================================================================*/ ENM_WK *x; MAIN_WK m; s16 pos[4][XY]; x = (ENM_WK *)((u32)mw-0x10); mw_init(&m); m.sys_fg = POLYGON_DISP_FG; m.poly_adr = pos; m.pri_ofs = PRI_ENM; m.color_m = char_tbl[CHAR_EFT].color+COL_YRED+8; m.x = x->mw.x; m.y = x->mw.y; m.z = 0; pos[0][X] = -0x40; pos[0][Y] = -0x40; pos[1][X] = +0x40; pos[1][Y] = -0x40; pos[2][X] = +0x40; pos[2][Y] = +0x40; pos[3][X] = -0x40; pos[3][Y] = +0x40; spr_put(&m); } /*=================================================================*/ static ATARI_TBL at_test[]={ /*=================================================================*/ {(ATFG_ATTACK ), AT_BODY,+0x00,+0x00,0x40,0x40,}, {(ATFG_DAMAGE | ATFG_TBL_END), DM_NML, +0x00,+0x00,0x40,0x40,}, }; /*=================================================================*/ static void test_hit_set(s32 XP, s32 YP){ /*=================================================================*/ s8 i; ENM_WK *p; /*--------------------------------------------------------*/ i = ENM_OBJ_get(); if(i == DUMMY_OBJ) return; p = obj_set(ENM_OBJ_AREA,obj_size(sizeof(ENM_WK)),enm); if(p == NULL) return; /*--------------------------------------------------------*/ mw_init(&p->mw); aw_init(&p->aw); ENM_WK_init(p); p->mw.dousa_func = test_hit; p->mw.sys_fg |= (MODEL_DISP_FG|MODEL_FUNC_CALL_FG); p->mw.sys_fg |= (ATARI_MUTEKI_FG|ATARI_STEALTH_FG); p->mw.poly_adr = test_hit_disp; p->mw.obj_no = i; obj_x[p->mw.obj_no] = p; p->aw.atari_tbl_adr = at_test; p->aw.life = 10; p->aw.nakama = NAKAMA_KABE; p->aw.zoku = ZOKU_NORMAL; p->mw.x = XP; p->mw.y = YP; } #endif /*=================================================================*/ static void bos12_disp(MAIN_WK *mw){ /*=================================================================*/ BOS12_WK *x; u16 i,*fg,LG; s16 *p; s32 s32w0,ofsX; MAIN_WK b; FIXED IDE_L_pos[XYZ*4]; FIXED IDE_R_pos[XYZ*4]; #if SCR_DBG MAIN_WK m; s16 pos[4][XY]; #endif /*----------------------------------------------------------------------------*/ x = (BOS12_WK *)((u32)mw-0x10); /*----------------------------------------------------------------------------*/ if(x->LG_fg){ LG = 0; ofsX = 0; }else{ LG = M_MAGNUM_BREST_R; ofsX = x->IDEON_X*DEC; } /*----------------------------------------------------------------------------*/ /* Scroll Debug */ /*----------------------------------------------------------------------------*/ #if SCR_DBG mw_init(&m); m.sys_fg = POLYLINE_DISP_FG; m.poly_adr = pos; m.pri_ofs = PRI_SYS; m.color_m = char_tbl[CHAR_EFT].color+COL_YRED; m.x = 0; m.z = 0; pos[0][X] = -0x80; pos[0][Y] = 0; pos[1][X] = +0x80; pos[1][Y] = 0; pos[2][X] = +0x80; pos[2][Y] = 0; pos[3][X] = -0x80; pos[3][Y] = 0; m.y = -x->scr_y[0]; spr_put(&m); m.y = -x->scr_y[1]; spr_put(&m); #endif /*----------------------------------------------------------------------------*/ /* Damage Flag Proc */ /*----------------------------------------------------------------------------*/ fg = &x->p0_fg; for(i=0; i<((8-2)+1); i++,fg++){ if(*(fg) & fg_dmg_on) *(fg) &= -(fg_dmg_on + fg_dmg)-1; if(*(fg) & fg_dmg) *(fg) |= fg_dmg_on; } /*----------------------------------------------------------------------------*/ /* Ideon Sword */ /*----------------------------------------------------------------------------*/ if(x->IDEON_L_sp || x->IDEON_R_sp){ if(v_timer&7){ if(x->LG_fg){ i = COL_RBLUE; }else{ i = COL_RRED; } }else{ if(x->LG_fg){ i = COL_BLUE2; }else{ i = COL_YRED; } } model_col_set(CHAR_MEFT,M_EFFECT_HADOUHOU, char_tbl[CHAR_EFT].color + i); } /*----------------------------------------------------------------------------*/ /* Master Body */ /*----------------------------------------------------------------------------*/ slPushMatrix(); /* PUSH 0 */ slTranslate(x->mw.x,x->mw.y,x->mw.z); slPushMatrix(); /* PUSH */ slRotZ(x->mw.angz); slRotX(x->mw.angx+MasANGZ); slRotY(x->mw.angy+MasANGY); slTranslate(0,-0x20*DEC,-0x10*DEC); p = &p0_posi_data[0]; /* Basic XYZ Data */ for(i=0; i<p0_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p0_posi[i]); /* Trans XYZ Data */ } if((x->p0_fg & fg_off)==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_BODY+LG][x->p0_fg&fg_dmg]); slCalcPoint(0,0,0,&x->rain_pos[X]); } /*----------------------------------------------------------------------------*/ /* Breat Parts L */ /*----------------------------------------------------------------------------*/ slPushMatrix(); /* PUSH 1 */ slTranslate(+0x010*DEC+x->IDEON_X*DEC,+0x000*DEC+(LwgPOSX*0x020), +0x000*DEC+(LwgPOSX*0x040)); slPushMatrix(); /* PUSH 2 */ slRotX(BstANGX); slRotY(BstANGY); slTranslate(+0x000*DEC,-0x010*DEC,+0x000*DEC); p = &p1_posi_data[0]; for(i=0; i<p1_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p1_posi[i]); } if((x->p1_fg & fg_off)==0){ if((x->p1_fg & fg_brk)==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_BREST_L+LG][x->p1_fg&fg_dmg]); }else{ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_BREST_L_DMG+LG][0]); } /*-------------*/ /* Ideon Sword */ /*-------------*/ if(x->IDEON_L_sp){ slPushMatrix(); /* PUSH */ slRotY(v_timer*-0x0830); slScale(x->s32w0,x->s32w2,x->s32w0); slTranslate(+0x000*DEC,-0x00c*DEC,+0x000*DEC); slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_MEFT].header_adr) ->pdata_tbl[M_EFFECT_HADOUHOU][0]); if(gtimer&1&&x->IDEON_L_sp>40){ s32w0 = -(0x14+0x1c)*DEC; }else{ s32w0 = -0x14*DEC; } for(i=0; i<4; i++){ slCalcPoint(0,(i*-0x1c*2*DEC)+s32w0,0,&x->IDEON_L_pos[i*XYZ]); } for(i=0; i<4; i++){ slCalcPoint(0,-abs(get_rand(x->s32w2*0x160)),0,&IDE_L_pos[i*XYZ]); } slPopMatrix(); /* POP */ } } slPopMatrix(); /* PUSH 2 */ slPopMatrix(); /* PUSH 1 */ /*----------------------------------------------------------------------------*/ /* Breat Parts R */ /*----------------------------------------------------------------------------*/ slPushMatrix(); /* PUSH 3 */ slTranslate(-0x010*DEC-(x->IDEON_X*DEC),+0x000*DEC+(LwgPOSX*0x020), +0x000*DEC+(LwgPOSX*0x040)); slPushMatrix(); /* PUSH 4 */ slRotX(BstANGX); slRotY(-BstANGY); slTranslate(+0x000*DEC,-0x010*DEC,+0x000*DEC); p = &p2_posi_data[0]; for(i=0; i<p2_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p2_posi[i]); } if((x->p2_fg & fg_off)==0){ if((x->p2_fg & fg_brk)==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_BREST_R+LG][x->p2_fg&fg_dmg]); }else{ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_BREST_R_DMG+LG][0]); } /*-------------*/ /* Ideon Sword */ /*-------------*/ if(x->IDEON_R_sp){ slPushMatrix(); /* PUSH */ slRotY(v_timer*+0x0830); slScale(x->s32w1,x->s32w3,x->s32w1); slTranslate(+0x000*DEC,-0x00c*DEC,+0x000*DEC); slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_MEFT].header_adr) ->pdata_tbl[M_EFFECT_HADOUHOU][0]); if(gtimer&1&&x->IDEON_R_sp>40){ s32w0 = -(0x14+0x1c)*DEC; }else{ s32w0 = -0x14*DEC; } for(i=0; i<4; i++){ slCalcPoint(0,(i*-0x1c*2*DEC)+s32w0,0,&x->IDEON_R_pos[i*XYZ]); } for(i=0; i<4; i++){ slCalcPoint(0,-abs(get_rand(x->s32w3*0x160)),0,&IDE_R_pos[i*XYZ]); } slPopMatrix(); /* POP */ } } slPopMatrix(); /* PUSH 4 */ slPopMatrix(); /* PUSH 3 */ /*----------------------------------------------------------------------------*/ /* Wings Parts L */ /*----------------------------------------------------------------------------*/ slPushMatrix(); /* PUSH 5 */ slTranslate(+0x010*DEC+(LwgPOSX*0x100)+ofsX, +0x008*DEC-(LwgPOSX*0x060),+0x000*DEC); slPushMatrix(); /* PUSH 6 */ slTranslate(+0x000*DEC,+0x000*DEC,+0x000*DEC); slRotZ(LwgANGZ); slRotY(LwgANGY); p = &p3_posi_data[0]; for(i=0; i<p3_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p3_posi[i]); } if((x->p3_fg & fg_off)==0){ if((x->p3_fg & fg_brk)==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_KATA_L+LG][x->p3_fg&fg_dmg]); slCalcPoint(+0x8*DEC,+0x40*DEC,0,&x->wng_L_pos[X]); /*--------------------------------------------------------------*/ /* Omake Wing */ /*--------------------------------------------------------------*/ slPushMatrix(); slTranslate(+0x014*DEC,+0x030*DEC,+0x008*DEC); if(x->mw.angy>0){ slRotY(x->mw.angy); } slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_HANE_L+LG][x->p3_fg&fg_dmg]); slPopMatrix(); }else{ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_KATA_L_DMG+LG][0]); } } /*------------------------------------------------------------------------*/ /* Arm Parts L */ /*------------------------------------------------------------------------*/ slPushMatrix(); /* PUSH 7 */ slTranslate(-0x004*DEC+(LamPOSX*0x040)-ofsX, +0x00e*DEC+(LamPOSX*0x100),+0x000*DEC); slPushMatrix(); /* PUSH 8 */ slRotZ(LamANGZ); slRotX(LamANGX); slTranslate(-0x000*DEC,+0x00a*DEC,0x000*DEC); p = &p5_posi_data[0]; for(i=0; i<p5_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p5_posi[i]); } if((x->p5_fg & (fg_off|fg_brk))==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_ARM_L+LG][x->p5_fg&fg_dmg]); slCalcPoint(0,+0x8*DEC,0,&x->vul_L_pos[X]); } slPopMatrix(); /* PUSH 8 */ slPopMatrix(); /* PUSH 7 */ /*------------------------------------------------------------------------*/ slPopMatrix(); /* PUSH 6 */ slPopMatrix(); /* PUSH 5 */ /*----------------------------------------------------------------------------*/ /* Wings Parts R */ /*----------------------------------------------------------------------------*/ slPushMatrix(); /* PUSH 9 */ slTranslate(-0x010*DEC-(LwgPOSX*0x100)-ofsX, +0x008*DEC-(LwgPOSX*0x060),+0x000*DEC); slPushMatrix(); /* PUSH 10*/ slTranslate(-0x000*DEC,+0x000*DEC,+0x000*DEC); slRotZ(-LwgANGZ); slRotY(-LwgANGY); p = &p4_posi_data[0]; for(i=0; i<p4_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p4_posi[i]); } if((x->p4_fg & fg_off)==0){ if((x->p4_fg & fg_brk)==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_KATA_R+LG][x->p4_fg&fg_dmg]); slCalcPoint(-0x8*DEC,+0x40*DEC,0,&x->wng_R_pos[X]); /*--------------------------------------------------------------*/ /* Omake Wing */ /*--------------------------------------------------------------*/ slPushMatrix(); slTranslate(-0x014*DEC,+0x030*DEC,+0x008*DEC); if(x->mw.angy<0){ slRotY(x->mw.angy); } slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_HANE_R+LG][x->p4_fg&fg_dmg]); slPopMatrix(); }else{ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_KATA_R_DMG+LG][0]); } } /*------------------------------------------------------------------------*/ /* Arm Parts R */ /*------------------------------------------------------------------------*/ slPushMatrix(); /* PUSH 11*/ slTranslate(+0x004*DEC-(LamPOSX*0x040)+ofsX, +0x00e*DEC+(LamPOSX*0x100),+0x000*DEC); slPushMatrix(); /* PUSH 12*/ slRotZ(-RamANGZ); slRotX(+RamANGX); slTranslate(-0x000*DEC,+0x00a*DEC,0x000*DEC); p = &p6_posi_data[0]; for(i=0; i<p6_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p6_posi[i]); } if((x->p6_fg & (fg_off|fg_brk))==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_ARM_R+LG][x->p6_fg&fg_dmg]); slCalcPoint(0,+0x8*DEC,0,&x->vul_R_pos[X]); } slPopMatrix(); /* PUSH 12*/ slPopMatrix(); /* PUSH 11*/ /*------------------------------------------------------------------------*/ slPopMatrix(); /* PUSH 10*/ slPopMatrix(); /* PUSH 9 */ /*----------------------------------------------------------------------------*/ /* Reg Parts L */ /*----------------------------------------------------------------------------*/ slPushMatrix(); slTranslate(+0x013*DEC+(LwgPOSX*0x020), +0x020*DEC-(LwgPOSX*0x020),+0x015*DEC+(LrgPOSZ)*0x100); slPushMatrix(); slRotX(LrgANGX); slRotZ(LrgANGZ); slRotY(LrgANGY); slTranslate(+0x000*DEC,+0x000*DEC,+0x000*DEC); p = &p7_posi_data[0]; for(i=0; i<p7_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p7_posi[i]); } if((x->p0_fg & fg_off)==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_LEG_L+LG][x->p0_fg&fg_dmg]); /* Back Fire Point */ slCalcPoint( 0x0000*DEC, (+0x0028+(RAND&3)+(rest(v_timer,3))*0x08)*DEC, 0x0008*DEC, &x->p7_fire[0]); /* Trans XYZ Data */ } slPopMatrix(); slPopMatrix(); /*----------------------------------------------------------------------------*/ /* Reg Parts R */ /*----------------------------------------------------------------------------*/ slPushMatrix(); slTranslate(-0x013*DEC-(LwgPOSX*0x020), +0x020*DEC-(LwgPOSX*0x020),+0x015*DEC+(LrgPOSZ)*0x100); slPushMatrix(); slRotX(RrgANGX); slRotZ(-RrgANGZ); slRotY(-RrgANGY); slTranslate(-0x000*DEC,+0x000*DEC,+0x000*DEC); p = &p8_posi_data[0]; for(i=0; i<p8_suu*3; p+=4,i+=3){ slCalcPoint(*(p+X)*DEC,*(p+Y)*DEC,*(p+Z)*DEC, &x->p8_posi[i]); } if((x->p0_fg & fg_off)==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_LEG_R+LG][x->p0_fg&fg_dmg]); /* Back Fire Point */ slCalcPoint( 0x0000*DEC, (+0x0028+(RAND&3)+(rest(v_timer,3))*0x08)*DEC, 0x0008*DEC, &x->p8_fire[0]); /* Trans XYZ Data */ } slPopMatrix(); slPopMatrix(); /*----------------------------------------------------------------------------*/ /* Tail Parts */ /*----------------------------------------------------------------------------*/ slPushMatrix(); slTranslate(+0x000*DEC,+0x01e*DEC,-0x00a*DEC); slPushMatrix(); slRotX(TilANGX); slTranslate(+0x000*DEC,+0x000*DEC,+0x000*DEC); if((x->p0_fg & fg_off)==0){ slPutPolygonS((void *)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr) ->pdata_tbl[M_SONIC_SHIPPO+LG][x->p0_fg&fg_dmg]); } slPopMatrix(); slPopMatrix(); /*----------------------------------------------------------------------------*/ slPopMatrix(); /* PUSH */ slPopMatrix(); /* PUSH 0 */ /*----------------------------------------------------------------------------*/ /* Ideon Elec */ /*----------------------------------------------------------------------------*/ if(x->IDEON_L_sp>40 || x->IDEON_R_sp>40){ mw_init(&b); b.sys_fg = RAND&MESH_ON; b.angz = x->mw.angz; b.char_no = CHAR_EFT; b.pri_ofs = PRI_INU; b.zoomy = 0xc000; b.anm_no = A_DENKI0+(RAND&0xf); if(x->LG_fg){ b.color_m = char_tbl[CHAR_EFT].color + COL_E_BLUE; }else{ b.color_m = char_tbl[CHAR_EFT].color + COL_E_RED; } if(x->IDEON_L_sp>40){ b.zoomx = x->s32w0+0x6000; for(i=0; i<4; i++){ b.x = IDE_L_pos[XYZ*i+X]; b.y = IDE_L_pos[XYZ*i+Y]; b.z = IDE_L_pos[XYZ*i+Z]-0xb0*DEC; spr_put(&b); } } if(x->IDEON_R_sp>40){ b.zoomx = x->s32w1+0x6000; for(i=0; i<4; i++){ b.x = IDE_R_pos[XYZ*i+X]; b.y = IDE_R_pos[XYZ*i+Y]; b.z = IDE_R_pos[XYZ*i+Z]-0xb0*DEC; spr_put(&b); } spr_put(&b); } } /*----------------------------------------------------------------------------*/ /* Backed Fire */ /*----------------------------------------------------------------------------*/ if((x->p0_fg & fg_off)==0){ mw_init(&b); b.zoomx = (rest(v_timer,3)*0x3000)+0x4000+((RAND&0xf)*0x300); b.zoomy = fixmuls(b.zoomx,0x14000); b.angz = x->mw.angz; b.char_no = CHAR_EFT; b.pri_ofs = 0; switch(rest(v_timer,3)){ case 0: if(LG){ b.color_m = char_tbl[CHAR_EFT].color + COL_YELLOW; }else{ b.color_m = char_tbl[CHAR_EFT].color + COL_BLUE2; } b.anm_no = A_MARU0; break; case 1: if(LG){ b.color_m = char_tbl[CHAR_EFT].color + COL_YRED; }else{ b.color_m = char_tbl[CHAR_EFT].color + COL_BLUE; } b.anm_no = A_MARU1; break; case 2: b.sys_fg |= MESH_ON; if(LG){ b.color_m = char_tbl[CHAR_EFT].color + COL_E_RED; }else{ b.color_m = char_tbl[CHAR_EFT].color + COL_E_BLUE; } b.anm_no = A_MARU1; } if(v_timer&1){ b.x = x->p8_fire[X]; b.y = x->p8_fire[Y]; b.z = x->p8_fire[Z]-0xb0*DEC; spr_put(&b); b.x = x->p7_fire[X]; b.y = x->p7_fire[Y]; b.z = x->p7_fire[Z]-0xb0*DEC; spr_put(&b); }else{ b.x = x->p7_fire[X]; b.y = x->p7_fire[Y]; b.z = x->p7_fire[Z]-0xb0*DEC; spr_put(&b); b.x = x->p8_fire[X]; b.y = x->p8_fire[Y]; b.z = x->p8_fire[Z]-0xb0*DEC; spr_put(&b); } } } /*============================================================================*/ /* ------------------------------------------ */ /* Init Main */ /* ------------------------------------------ */ /*============================================================================*/ /*=================================================================*/ static void bos12_set_S(BOS12_WK *x){ /*=================================================================*/ x->sp = s_DEMO; x->runHundle = 0x40; x->runZ = 0; x->runsgt = 0x20; x->runspd = -SC_DY; x->runXpos = 0; x->runYpos = (-0x40+0x20)*DEC; x->scr_command = SC_ZERO; x->scr_step = 0; x->scr_p[0] = SC_ZERO; x->scr_p[1] = SC_ZERO; x->scr_y[0] = +0x80*DEC; x->scr_y[1] = +0x00*DEC; x->scr_rand[0] = +1; x->scr_rand[1] = +1; x->scr_shut = 0; x->fg = 0x80; bar_set(P0_LIFE); M_hit_off(x); se_set(SE02_APPEAR2_2,0); } /*=================================================================*/ static void bos12_set_M(BOS12_WK *x){ /*=================================================================*/ x->sp = m_DEMO; x->mw.angy = 0x8000; #if SCR_DBG x->scr_y[0] = +0x180*DEC; x->scr_y[1] = +0x080*DEC; #endif M_hit_off(x); } /*=================================================================*/ static void bos12_hitset(BOS12_WK *x){ /*=================================================================*/ x->p0_fg = 0; x->p0_brk_sp = 0; x->p0_posi_num = 0; /* For EDIT */ x->p0_menu = 0; /* For EDIT */ x->p0_life = P0_LIFE; HIT3D_SET( p0_suu, &x->p0_posi[0], &x->p0_fg, &x->p0_life, & p0_posi_data[0], x->mw.obj_no); /*-----------------------------------------------*/ x->p1_fg = 0; x->p1_brk_sp = 0; x->p1_life = P1_LIFE; HIT3D_SET( p1_suu, &x->p1_posi[0], &x->p1_fg, &x->p1_life, & p1_posi_data[0], x->mw.obj_no); /*-----------------------------------------------*/ x->p2_fg = 0; x->p2_brk_sp = 0; x->p2_life = P2_LIFE; HIT3D_SET( p2_suu, &x->p2_posi[0], &x->p2_fg, &x->p2_life, & p2_posi_data[0], x->mw.obj_no); /*-----------------------------------------------*/ x->p3_fg = 0; x->p3_brk_sp = 0; x->p3_life = P3_LIFE; HIT3D_SET( p3_suu, &x->p3_posi[0], &x->p3_fg, &x->p3_life, & p3_posi_data[0], x->mw.obj_no); /*-----------------------------------------------*/ x->p4_fg = 0; x->p4_brk_sp = 0; x->p4_life = P4_LIFE; HIT3D_SET( p4_suu, &x->p4_posi[0], &x->p4_fg, &x->p4_life, & p4_posi_data[0], x->mw.obj_no); /*-----------------------------------------------*/ x->p5_fg = 0; x->p5_brk_sp = 0; x->p5_life = P5_LIFE; HIT3D_SET( p5_suu, &x->p5_posi[0], &x->p5_fg, &x->p5_life, & p5_posi_data[0], x->mw.obj_no); /*-----------------------------------------------*/ x->p6_fg = 0; x->p6_brk_sp = 0; x->p6_life = P6_LIFE; HIT3D_SET( p6_suu, &x->p6_posi[0], &x->p6_fg, &x->p6_life, & p6_posi_data[0], x->mw.obj_no); /*-----------------------------------------------*/ HIT3D_SET( p7_suu, &x->p7_posi[0], &x->p0_fg, &x->p0_life, & p7_posi_data[0], x->mw.obj_no); /*-----------------------------------------------*/ HIT3D_SET( p8_suu, &x->p8_posi[0], &x->p0_fg, &x->p0_life, & p8_posi_data[0], x->mw.obj_no); } /*=================================================================*/ static void bos12_set_sub(BOS12_WK *x, s8 nB, u8 LG){ /*=================================================================*/ /* Works Init */ mw_init(&x->mw); aw_init(&x->aw); /*-----------------------------------------------*/ x->mw.dousa_func = bos12; x->mw.sys_fg |= (MODEL_DISP_FG|MODEL_FUNC_CALL_FG|ATARI_OFF_FG); x->mw.poly_adr = bos12_disp; x->LG_fg = LG; x->LG_no = nB; /*-----------------------------------------------*/ x->mw.x = +0x000*DEC; x->mw.y = +0x120*DEC; x->mw.z = -0x060*DEC; x->dx = 0; x->dy = 0; x->dz = 0; x->angXspd = 0; x->angXssp = 0; x->angYspd = 0; x->angYssp = 0; x->angZspd = 0; x->angZssp = 0; x->btimer = 0; x->fg = 0; x->proc_step = 0; x->proc_wait = 0; x->zibaku = 0; /*-----------------------------------------------*/ if(LG==0){ bos12_hitset(x); bos12_set_S(x); }else{ bos12_hitset(x); bos12_set_M(x); } x->IDEON_L_sp = 0; x->IDEON_R_sp = 0; x->IDEON_X = 0; /*--------------------------------------*/ /* SSSS Init */ x->sw.S_Chain_suu = BOS12_Chain_suu; x->sw.S_mot_buf = &x->mot_buf[0]; x->sw.S_spd_buf = &x->spd_buf[0]; x->sw.S_ent_adr = BOS12_mot_ent_tbl; SSSS_Mot_Set(&x->sw, BOS12_Mot_0000); SSSS_Anime_Set(&x->sw, BOS12_WAIT); SSSS_Anime(&x->sw); #if EDIT x->sp = s_TEST; x->ew.edit_anm_adr = &BOS12_TRNS[0]; x->ew.sp = 0; x->ew.parts_num = 0; x->mw.x = 0; x->mw.y = 0; x->mw.z = +0x10*DEC; SSSS_Anime_Set(&x->sw, x->ew.edit_anm_adr); #endif } /*=================================================================*/ s8 bos12_set(void){ /*=================================================================*/ BOS12_WK *xL,*xG; s8 iL,iG; u16 i; iL = ENM_OBJ_get(); if(iL == DUMMY_OBJ) return 0; xL = obj_set(ENM_OBJ_AREA,obj_size(sizeof(BOS12_WK)),enm); if(xL == NULL) return 0; xL->mw.obj_no = iL; obj_x[xL->mw.obj_no]= xL; #if !EDIT iG = ENM_OBJ_get(); if(iG == DUMMY_OBJ) return 0; xG = obj_set(ENM_OBJ_AREA,obj_size(sizeof(BOS12_WK)),enm); if(xG == NULL) return 0; xG->mw.obj_no = iG; obj_x[xG->mw.obj_no]= xG; #endif /*-----------------------------------------------*/ /* Lets */ /*-----------------------------------------------*/ bos12_set_sub(xL,iG,0); /*-----------------------------------------------*/ /* GO */ /*-----------------------------------------------*/ #if !EDIT bos12_set_sub(xG,iL,1); #endif for(i=M_MAGNUM_BREST_R; i<M_SONIC_END; i++){ model_col_set(CHAR_SONIC,i, get_look_colno(CHAR_SONIC) + COL_MAGNUM); } return iG; }
0xDB400
This is part of an objdump listing.
etNbg0 00002ce8 .text 00002ce8 _SCR_2_1d_ctrl 00016be4 .control 06056be4 _hit3D 0002de70 .control 0606de70 _slSpecialCCalcModeNbg0 0002de78 .control 0606de78 _slSpecialCCalcModeNbg3 060fff60 *ABS* 060fff60 _DAR1 060ffdf8 *ABS* 060ffdf8 _rb_char_adr 0600406c *ABS* 0600406c _PCM_WkSize 00000040 COMMON 00000040 _tim0_pos 06008a58 *ABS* 06008a58 _f_title 060ffdc0 *ABS* 060ffdc0 _VDP2_CCRSA 060ffd92 *ABS* 060ffd92 _VDP2_WCTLB 00023618 .control 06063618 _set_laser_hit 06009434 *ABS* 06009434 _f_st24_tne 00021014 .control 06061014 _disp_string8 00014c18 .control 06054c18 _eshot04_set_cstm 060ffcd4 *ABS* 060ffcd4 _VDP2_CYCA1L 06008028 *ABS* 06008028 ___ashiftrt_r4_2 00000614 .data 00004534 _houmon1 0000662c .control 0604662c _bef_link_dmc 060ffcde *ABS* 060ffcde _VDP2_CYCB1U 060ffefc *ABS* 060ffefc _Window1_data 000269d0 .control 060669d0 ___gesf2 060ffca8 *ABS* 060ffca8 _DMASetFlag 060fff2c *ABS* 060fff2c _Center2_data 0001e178 .control 0605e178 _init_objscr 06009104 *ABS* 06009104 _f_ed_bg05 000066f8 .text 000066f8 _SCR_2_6c_ctrl 06008b6c *ABS* 06008b6c _f_demo43 060092bc *ABS* 060092bc _f_stg2_tne_m 00029714 .control 06069714 _slCos 060ffcd2 *ABS* 060ffcd2 _VDP2_CYCA0U 00021714 .control 06061714 _set_kaiwa_int_func 0000089c .text 0000089c _SONIC_set 00008418 .contbss 0607bd88 _weapon_level 0001e0e8 .control 0605e0e8 _scroll_system_stop 00003ee4 .text 00003ee4 _SCR_2_3_n0_sub 00019528 .control 06059528 _boss_brk_sub 0002d840 .control 0606d840 _slIncMatrixPtr 00018de0 .control 06058de0 _eft_moon_set 06008b24 *ABS* 06008b24 _f_demo31 00032dd8 .control 06072dd8 _anm_hibana02 000015e4 .data 00005504 _tail_anmpat 060ffd6c *ABS* 060ffd6c _VDP2_BKTA 000187a0 .control 060587a0 _bbom 00022f88 .control 06062f88 _model_gour_set 060ffc0c *ABS* 060ffc0c _EventCount 0001ecb8 .control 0605ecb8 _Map2VRAM 06008e00 *ABS* 06008e00 _f_nurse 00000000 SLPROG 00000000 _slZoomR 000080d4 .control 060480d4 _player_set 0600ed28 *ABS* 0600ed28 _v_timer 000023a0 .text 000023a0 _enm05_2 060fff16 *ABS* 060fff16 _Window2_Bottom 00002244 .text 00002244 _nise_set 06009394 *ABS* 06009394 _f_st10_tne 00016ff4 .control 06056ff4 _rot_sub 06007ff2 *ABS* 06007ff2 ___ashiftrt_r4_24 06035010 *ABS* 06035010 _set_imask 00008420 .contbss 0607bd90 _load_end_ram_adr 060ffc1c *ABS* 060ffc1c _mtptr 060ffcd6 *ABS* 060ffcd6 _VDP2_CYCA1U 000003d4 .text 000003d4 _padman_muku 0000170c .data 0000562c _middle_pos 06008b9c *ABS* 06008b9c _f_peft 060ffd64 *ABS* 060ffd64 _VDP2_LSTA1 06008c88 *ABS* 06008c88 _f_misako 060ffc1a *ABS* 060ffc1a _TransRequest 0000391c .text 0000391c _SCR_2_3b2_init 000041ec .text 000041ec _SCR_2_3d3_ctrl 00000f74 .control 06040f74 _credit_ct 06
0xDC000
This is part of the header file for the boss Golets.
/*------------------------------------------------------------------------*/ /* HIT3D */ /*------------------------------------------------------------------------*/ /*-------------------------------------------*/ //M_SONIC_BODY static s16 p0_posi_data[]={ /* 0x00 */ 0x0000, 0x0000, 0xfffb, 0x0000, /* 0x00 */ 0x0000, 0x0000, 0x0005, 0x0000, /* 0x00 */ 0x0000, 0xfff4, 0x0000, 0x0003, /* 0x00 */ 0x0000, 0x000b, 0x0002, 0x0000, /* 0x00 */ 0x0000, 0xfff4, 0x0008, 0x0003, /* 0x00 */ 0x0000, 0xfff4, 0xfff9, 0x0003, /* 0x06 */ 0x0000, 0xffef, 0x0002, 0x0003, }; #define p0_suu (6+1) /*-------------------------------------------*/ //M_SONIC_BREST_L //M_SONIC_BREST_R static s16 p1_posi_data[]={ /* 0x00 */ 0x0000, 0xfff9, 0x0000, 0x0000, /* 0x01 */ 0x0000, 0x0006, 0x0000, 0x0000, }; #define p1_suu (1+1) #define p2_suu (1+1) #define p2_posi_data p1_posi_data /*-------------------------------------------*/ //M_SONIC_KATA_L static s16 p3_posi_data[]={ /* 0x00 */ 0x0000, 0xffff, 0x0000, 0x0000, /* 0x00 */ 0xfffd, 0x0035, 0x0000, 0x0000, /* 0x00 */ 0x0008, 0x000c, 0x0004, 0x0003, /* 0x00 */ 0x0008, 0x000c, 0xfffc, 0x0003, /* 0x00 */ 0x0008, 0x0014, 0x0004, 0x0003, /* 0x00 */ 0x0008, 0x0014, 0xfffc, 0x0003, /* 0x00 */ 0x0008, 0x001c, 0x0004, 0x0003, /* 0x00 */ 0x0008, 0x001c, 0xfffc, 0x0003, /* 0x00 */ 0x0008, 0x0024, 0x0004, 0x0003, /* 0x00 */ 0x0008, 0x0024, 0xfffc, 0x0003, /* 0x00 */ 0x000b, 0x002d, 0x0000, 0x0000, /* 0x0b */ 0x000b, 0x0038, 0x0000, 0x0000, }; #define p3_suu (11+1) /*-------------------------------------------*/ //M_SONIC_KATA_R static s16 p4_posi_data[]={ /* 0x00 */ 0x0000, 0xffff, 0x0000, 0x0000, /* 0x00 */ 0x0003, 0x0035, 0x0000, 0x0000, /* 0x00 */ 0xfff8, 0x000c, 0x0004, 0x0003, /* 0x00 */ 0xfff8, 0x000c, 0xfffc, 0x0003, /* 0x00 */ 0xfff8, 0x0014, 0x0004, 0x0003, /* 0x00 */ 0xfff8, 0x0014, 0xfffc, 0x0003, /* 0x00 */ 0xfff8, 0x001c, 0x0004, 0x0003, /* 0x00 */ 0xfff8, 0x001c, 0xfffc, 0x0003, /* 0x00 */ 0xfff8, 0x0024, 0x0004, 0x0003, /* 0x00 */ 0xfff8, 0x0024, 0xfffc, 0x0003, /* 0x00 */ 0xfff5, 0x002d, 0x0000, 0x0000, /* 0x0b */ 0xfff5, 0x0038, 0x0000, 0x0000, }; #define p4_suu (11+1) /*-------------------------------------------*/ //M_SONIC_ARM_L //M_SONIC_ARM_R static s16 p5_posi_data[]={ /* 0x00 */ 0x0000, 0xfff9, 0x0000, 0x0000, /* 0x01 */ 0x0000, 0x0005, 0x0000, 0x0000, }; #define p5_suu (1+1) #define p6_suu (1+1) #define p6_posi_data p5_posi_data /*-------------------------------------------*/ //M_SONIC_LEG_L static s16 p7_posi_data[]={ /* 0x00 */ 0x0009, 0x0000, 0x0000, 0x0000, /* 0x00 */ 0x0000, 0x000d, 0x0000, 0x0000, /* 0x00 */ 0x0000, 0x0017, 0x0000, 0x0000, /* 0x00 */ 0x0000, 0x0020, 0x0000, 0x0000, /* 0x00 */ 0x0000, 0x001b, 0x000a, 0x0000, /* 0x06 */ 0x0000, 0x0011, 0x0006, 0x0000, }; #define p7_suu (6+1) /*-------------------------------------------*/ //M_SONIC_LEG_R static s16 p8_posi_data[]={ /* 0x00 */ 0xfff7, 0x0000, 0x0000, 0x0000, /* 0x00 */ 0x0000, 0x000d, 0x0000, 0x0000, /* 0x00 */ 0x0000, 0x0017, 0x0000, 0x0000, /* 0x00 */ 0x0000, 0x0020, 0x0000, 0x0000, /* 0x00 */ 0x0000, 0x001b, 0x000a, 0x0000, /* 0x06 */ 0x0000, 0x0011, 0x0006, 0x0000, }; #define p8_suu (6+1) /*------------------------------------------------------------------------*/ /* SSSS Defines */ /*------------------------------------------------------------------------*/ #define BOS12_Chain_suu (19+1) /*------------------------------------------------------------------------*/ /* Structs */ /*------------------------------------------------------------------------*/ obj_def(BOS12_WK, MAIN_WK mw; ATARI_WK aw; /* For System */ u8 sp; u16 fg; /* Control Master */ u16 btimer; /* For GAME Proc */ u16 proc_step; s16 proc_wait; s16 zibaku; /* For Moving */ s32 dx; s32 dy; s32 dz; s16 angXspd; s16 angXssp; s16 angYspd; s16 angYssp; s16 angZspd; s16 angZssp; /* For Hit3D */ u16 p0_fg; u16 p1_fg; u16 p2_fg; u16 p3_fg; u16 p4_fg; u16 p5_fg; u16 p6_fg; u8 p0_brk_sp; u8 p1_brk_sp; u8 p2_brk_sp; u8 p3_brk_sp; u8 p4_brk_sp; u8 p5_brk_sp; u8 p6_brk_sp; s32 p0_life; s32 p1_life; s32 p2_life; s32 p3_life; s32 p4_life; s32 p5_life; s32 p6_life; FIXED p0_posi[(XYZ)*p0_suu]; FIXED p1_posi[(XYZ)*p1_suu]; FIXED p2_posi[(XYZ)*p2_suu]; FIXED p3_posi[(XYZ)*p3_suu]; FIXED p4_posi[(XYZ)*p4_suu]; FIXED p5_posi[(XYZ)*p5_suu]; FIXED p6_posi[(XYZ)*p6_suu]; FIXED p7_posi[(XYZ)*p7_suu]; FIXED p8_posi[(XYZ)*p8_suu]; FIXED p7_fire[(XYZ)]; FIXED p8_fire[(XYZ)]; /* For Hit3D EDIT */ s16 p0_posi_num; s16 p0_menu; s16 p0_save; /* For SSSS */ SSSS_WK sw; s16 mot_buf[BOS12_Chain_suu]; s16 spd_buf[BOS12_Chain_suu]; SEDT_WK ew; /* For Parts_Link TransForm */ s8 IDEON_X; u8 IDEON_X_fg; u16 IDEON_X_sv; /* For Run-away */ u8 runHundle; s16 runZ; s16 runsgt; s32 runspd; s32 runXpos; s32 runYpos; u8 scr_command; u8 scr_step; s8 scr_rand[2]; u8 scr_p[2]; s32 scr_y[2]; s8 scr_shut; /* For Lets&GO */ u8 LG_fg; s8 LG_no; /* For Ideon Sword */ u8 IDEON_L_sp; u8 IDEON_R_sp; FIXED IDEON_L_pos[XYZ*4]; FIXED IDEON_R_pos[XYZ*4]; /* For Shot Pos */ FIXED rain_pos[XYZ]; FIXED vul_L_pos[XYZ]; FIXED vul_R_pos[XYZ]; FIXED wng_L_pos[XYZ]; FIXED wng_R_pos[XYZ]; /* For Report Wait */ EFT_OBJ *rep; s32 STG_SCORE0; s32 STG_SCORE1; /* For UserFree */ s16 s16w0; s16 s16w1; s16 s16w2; s16 s16w3; s16 s16w4; s16 s16w5; s32 s32w0; s32 s32w1; s32 s32w2; s32 s32w3; ); obj_def(IDEON_SWORD_WK, MAIN_WK mw; ATARI_WK aw; u8 *IDEON_sp; FIXED *pos; s32 *zom; ); obj_def(SEARCH_WK, MAIN_WK mw; ATARI_WK aw; BOS12_WK *ms; u16 fg; s32 dx; s32 dy; s8 s8w1; s8 s16we; ); /*------------------------------------------------------------------------*/ /* SSSS Datas */ /*------------------------------------------------------------------------*/ #define DATA(Z) Z, #define MasANGY *(x->sw.S_mot_buf+0x00) #define MasANGZ *(x->sw.S_mot_buf+0x01) #define BstANGY *(x->sw.S_mot_buf+0x02) #define BstANGX *(x->sw.S_mot_buf+0x03) #define LwgANGY *(x->sw.S_mot_buf+0x04) #define LwgANGZ *(x->sw.S_mot_buf+0x05) #define LwgPOSX *(x->sw.S_mot_buf+0x06) #define LamPOSX *(x->sw.S_mot_buf+0x07) #define LamANGZ *(x->sw.S_mot_buf+0x08) #define LamANGX *(x->sw.S_mot_buf+0x09) #define RamANGZ *(x->sw.S_mot_buf+0x0a) #define RamANGX *(x->sw.S_mot_buf+0x0b) #define LrgPOSZ *(x->sw.S_mot_buf+0x0c) #define LrgANGZ *(x->sw.S_mot_buf+0x0d) #define LrgANGY *(x->sw.S_mot_buf+0x0e) #define LrgANGX *(x->sw.S_mot_buf+0x0f) #define RrgANGZ *(x->sw.S_mot_buf+0x10) #define RrgANGY *(x->sw.S_mot_buf+0x11) #define RrgANGX *(x->sw.S_mot_buf+0x12) #define TilANGX *(x->sw.S_mot_buf+0x13) /*====================================== 31 Line ===================*/ static s16 BOS12_Mot_0000[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x0000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0000) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0x0000) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ }; /*====================================== 31 Line ===================*/ static s16 BOS12_Mot_0001[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0xdc00) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xe000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0300) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0xf000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0xf000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xf600) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x3000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x3000) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x1000) /* Mas DATA */ }; /*====================================== 31 Line ===================*/ static s16 BOS12_Mot_0002[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x8000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x2000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xf000) /* Mas DATA */ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x1a00) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0800) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x3000) /* Mas DATA */ DATA ( 0xe000) /* Mas DATA */ DATA ( 0x3000) /* Mas DATA */ DATA ( 0xe000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xf000) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ DATA ( 0x5800) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ DATA ( 0x5800) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x2000) /* Mas DATA */ }; /*====================================== 31 Line ===================*/ static s16 BOS12_Mot_0003[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x4000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0x0800) /* Mas DATA */ DATA ( 0xb800) /* Mas DATA */ DATA ( 0x1600) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0800) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xe000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xe000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xe800) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0xfc00) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0xfc00) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x4000) /* Mas DATA */ }; /*====================================== 31 Line ===================*/ static s16 BOS12_Mot_0004[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x3000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x2000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0x2000) /* Mas DATA */ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x1a00) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0000) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xf800) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xea00) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xea00) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x5400) /* Mas DATA */ }; /*====================================== 31 Line ===================*/ static s16 BOS12_Mot_0005[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x1000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0x3000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x1100) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0000) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xf600) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x2000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x2000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x3b00) /* Mas DATA */ }; /*====================================== 31 Line ===================*/ static s16 BOS12_Mot_0006[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x4000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xb800) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0xc400) /* Mas DATA */ DATA ( 0x0e00) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0e00) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x6800) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x6800) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xec00) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0xfc00) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0x0300) /* Mas DATA */ DATA ( 0xfc00) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0x0300) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x4b00) /* Mas DATA */ }; /*====================================== 31 Line ===================*/ static s16 BOS12_Mot_0007[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x3800) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc500) /* Mas DATA */ DATA ( 0x5000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0xbb00) /* Mas DATA */ DATA ( 0x0c00) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0300) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x1000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xec00) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0xfa00) /* Mas DATA */ DATA ( 0x3500) /* Mas DATA */ DATA ( 0xfe00) /* Mas DATA */ DATA ( 0xfa00) /* Mas DATA */ DATA ( 0x3500) /* Mas DATA */ DATA ( 0xfe00) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x2800) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_0008[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x4400) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xcc00) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xfc00) /* Mas DATA */ DATA ( 0xb800) /* Mas DATA */ DATA ( 0x1200) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0900) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xd000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xd000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xe500) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0xfa00) /* Mas DATA */ DATA ( 0x3500) /* Mas DATA */ DATA ( 0xf000) /* Mas DATA */ DATA ( 0xfa00) /* Mas DATA */ DATA ( 0x3500) /* Mas DATA */ DATA ( 0xf000) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x4b00) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_0009[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x4200) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x4600) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0x0400) /* Mas DATA */ DATA ( 0xc500) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0800) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x3c00) /* Mas DATA */ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x3c00) /* Mas DATA */ DATA ( 0xc000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xe900) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0xf500) /* Mas DATA */ DATA ( 0x3500) /* Mas DATA */ DATA ( 0xf400) /* Mas DATA */ DATA ( 0xf500) /* Mas DATA */ DATA ( 0x3500) /* Mas DATA */ DATA ( 0xf400) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x4000) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_000a[]={ DATA ( 0xfc00) /* MasANG Y */ DATA ( 0x4000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xa800) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xe600) /* Mas DATA */ DATA ( 0xcc00) /* Mas DATA */ DATA ( 0x1300) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0500) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x7300) /* Mas DATA */ DATA ( 0xe900) /* Mas DATA */ DATA ( 0x1700) /* Mas DATA */ DATA ( 0x2000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xde00) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0xe900) /* Mas DATA */ DATA ( 0x1f00) /* Mas DATA */ DATA ( 0xe100) /* Mas DATA */ DATA ( 0x1100) /* Mas DATA */ DATA ( 0x5600) /* Mas DATA */ DATA ( 0xea00) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x6d00) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_000b[]={ DATA ( 0x0400) /* MasANG Y */ DATA ( 0x4000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xa800) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xe600) /* Mas DATA */ DATA ( 0xcc00) /* Mas DATA */ DATA ( 0x1300) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0500) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x1700) /* Mas DATA */ DATA ( 0x2000) /* Mas DATA */ DATA ( 0x7300) /* Mas DATA */ DATA ( 0xe900) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xde00) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x1100) /* Mas DATA */ DATA ( 0x5600) /* Mas DATA */ DATA ( 0xea00) /* Mas DATA */ DATA ( 0xe900) /* Mas DATA */ DATA ( 0x1f00) /* Mas DATA */ DATA ( 0xe100) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x6d00) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_000c[]={ DATA ( 0xfc00) /* MasANG Y */ DATA ( 0x4000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xf200) /* Mas DATA */ DATA ( 0xb100) /* Mas DATA */ DATA ( 0x1300) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0a00) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x2000) /* Mas DATA */ DATA ( 0xcf00) /* Mas DATA */ DATA ( 0x2800) /* Mas DATA */ DATA ( 0xe000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xe300) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0300) /* Mas DATA */ DATA ( 0x4c00) /* Mas DATA */ DATA ( 0xde00) /* Mas DATA */ DATA ( 0xfd00) /* Mas DATA */ DATA ( 0x1c00) /* Mas DATA */ DATA ( 0xe700) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x6900) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_000d[]={ DATA ( 0x0400) /* MasANG Y */ DATA ( 0x4000) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xf200) /* Mas DATA */ DATA ( 0xb100) /* Mas DATA */ DATA ( 0x1300) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0a00) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x2800) /* Mas DATA */ DATA ( 0xe000) /* Mas DATA */ DATA ( 0x2000) /* Mas DATA */ DATA ( 0xcf00) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xe300) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0xfd00) /* Mas DATA */ DATA ( 0x1c00) /* Mas DATA */ DATA ( 0xe700) /* Mas DATA */ DATA ( 0x0300) /* Mas DATA */ DATA ( 0x4c00) /* Mas DATA */ DATA ( 0xde00) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x6900) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_000e[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x4600) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x4600) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0x1800) /* Mas DATA */ DATA ( 0xa800) /* Mas DATA */ DATA ( 0x0c00) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0700) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xaa00) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xaa00) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xf300) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x1800) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_000f[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x5c00) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x2400) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0xd800) /* Mas DATA */ DATA ( 0x0e00) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0800) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x1b00) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ DATA ( 0x1b00) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xed00) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0x0400) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0x0400) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x5800) /* Mas DATA */ }; /*====================================== 30 Line ===================*/ static s16 BOS12_Mot_0010[]={ DATA ( 0x0000) /* MasANG Y */ DATA ( 0x6800) /* MasANG Y */ /*- Brest --------------------------*/ DATA ( 0xc000) /* Mas DATA */ DATA ( 0x1c00) /* Mas DATA */ /*- Wing ---------------------------*/ DATA ( 0xf500) /* Mas DATA */ DATA ( 0xd200) /* Mas DATA */ DATA ( 0x1000) /* Mas DATA */ /*- Arm Pos ------------------------*/ DATA ( 0x0800) /* Mas DATA */ /*- Arm ----------------------------*/ DATA ( 0x2000) /* Mas DATA */ DATA ( 0xf000) /* Mas DATA */ DATA ( 0x2000) /* Mas DATA */ DATA ( 0xf000) /* Mas DATA */ /*- Reg ZP -------------------------*/ DATA ( 0xed00) /* Mas DATA */ /*- Reg ----------------------------*/ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xed00) /* Mas DATA */ DATA ( 0x0000) /* Mas DATA */ DATA ( 0x4000) /* Mas DATA */ DATA ( 0xed00) /* Mas DATA */ /*- Til ----------------------------*/ DATA ( 0x4d00) /* Mas DATA */ }; /*=========================================================*/ static s16 *BOS12_mot_ent_tbl[]={ /*--- Trans Form ------------------------------------------*/ BOS12_Mot_0000, BOS12_Mot_0001, BOS12_Mot_0002, BOS12_Mot_0003, BOS12_Mot_0004, BOS12_Mot_0005, /*--- M Vulcan --------------------------------------------*/ BOS12_Mot_0006, BOS12_Mot_0007, /*--- M Wait --------------------------------------------*/ BOS12_Mot_0008, BOS12_Mot_0009, /*--- M Msht --------------------------------------------*/ BOS12_Mot_000a, BOS12_Mot_000b, BOS12_Mot_000c, BOS12_Mot_000d, BOS12_Mot_000e, /*--- M Meto --------------------------------------------*/ BOS12_Mot_000f, BOS12_Mot_0010, }; /*=========================================================*/ static s16 BOS12_WAIT[]={ 0x0000, 10, 0, 0x0000, 10, 0, SSSS_LOOP, }; static s16 BOS12_TRNS1[]={ SSSS_START, 0x0001, 10, 0, 0x0002, 10, 0, 0x0003, 10, 0, 0x0003, 10, 0, 0x0008, 30, 0, SSSS_END, }; #if 0 static s16 BOS12_TRNS2[]={ SSSS_START, 0x0004, 10, 0, 0x0005, 10, 0, 0x0000, 10, 0, SSSS_END, }; #endif static s16 BOS12_Wait[]={ 0x0009, 20, 0, 0x0008, 50, -45, 0x0008, 40, -5, 0x0008, 20, 0, 0x0009, 50, -45, 0x0009, 40, -5, SSSS_LOOP, }; static s16 BOS12_Vulc_Set[]={ SSSS_START, 0x0007, 30, -8, 0x0007, 20, +4, SSSS_END, }; static s16 BOS12_Vulc[]={ 0x0007, 20, 0, 0x0006, 100,-90, 0x0006, 80, -10, 0x0006, 20, 0, 0x0007, 100,-90, 0x0007, 80, -10, SSSS_LOOP, }; static s16 BOS12_MshtR[]={ SSSS_START, 0x000e, 40, 0, 0x000a, 8, 0, 0x000c, 16, 0, 0x0008, 20, -10, 0x0008, 30, 0, SSSS_END, }; static s16 BOS12_MshtL[]={ SSSS_START, 0x000e, 40, 0, 0x000b, 8, 0, 0x000d, 16, 0, 0x0008, 20, -10, 0x0008, 30, 0, SSSS_END, }; static s16 BOS12_Meto_Set[]={ SSSS_START, 0x0010, 30, 0, SSSS_END, }; static s16 BOS12_Meto[]={ 0x0010, 7, 0, 0x000f, 7, 0, SSSS_LOOP, }; #if EDIT static s16 BOS12_TRNS[]={ 0x0010, 10, 0, 0x000f, 10, 0, SSSS_LOOP, }; #endif
0xE4400
This is part of an objdump listing.
0026d1c .control 06066d1c ___mulsi3 06008adc *ABS* 06008adc _f_demo13 00000000 .text 00000000 _SCR_2_init 00014ef0 .control 06054ef0 _eshot07_disp 00032e48 .control 06072e48 _anm_gero00 06007860 *ABS* 06007860 _SND_GetSeqStat 060ffd26 *ABS* 060ffd26 _VDP2_MPGHRB 060342d8 *ABS* 060342d8 _slSetPortMode2 0600931c *ABS* 0600931c _f_stg4_tne_m 00018a60 .control 06058a60 _bbom_set 060ffc76 *ABS* 060ffc76 _TotalVertices 00018170 .control 06058170 _hahen_set 0000de64 .control 0604de64 _eft_func 06008d2c *ABS* 06008d2c _f_s3jama 0000ac40 .contbss 0607e5b0 _vntbl_body 00001174 .text 00001174 _set_mime_matrix 0000847a .contbss 0607bdea _local_load_tex_ofs 00024f8c .control 06064f8c _sys__interrupt_handler28 0000424c .text 0000424c _SCR_2_3_moya 060fff18 *ABS* 060fff18 _Win1Zlimit 060ffd28 *ABS* 060ffd28 _VDP2_MPIJRB 00024d48 .control 06064d48 _SYS_SetUintMacSave 060094e4 *ABS* 060094e4 _f_st51_tne 000311a0 .control 060711a0 _slDivFX 00016084 .control 06056084 _hansya_anm 0001f244 .control 0605f244 _SCR_MoveRbgRB 00021534 .control 06061534 _demo_start 06004000 *ABS* 06004000 _main 0000847c .contbss 0607bdec _load_col_ofs 06008c14 *ABS* 06008c14 _f_makuno 06004064 *ABS* 06004064 _SortListSize 0600405c *ABS* 0600405c _EventSize 00019d38 .control 06059d38 _enm01_dead 06033530 *ABS* 06033530 _slInitInterrupt 06008ba8 *ABS* 06008ba8 _f_warning 00006608 .text 00006608 _moni_scr 060fff20 *ABS* 060fff20 _Win1_ScreenDist 00021c4c .control 06061c4c _set_next_win 00016030 .control 06056030 _hansya_set 0000019c .data 00007124 _st2_name_10 060ffd7c *ABS* 060ffd7c _VDP2_RPTA 00003508 .text 00003508 _SCR_2_2c_ctrl 06033276 *ABS* 06033276 _BlankIn 00030930 .control 06070930 _slMapNbg0 00023a98 .control 06063a98 _chase_laser 000216d0 .control 060616d0 _kaiwa_tim0_func3 000095d0 .control 060495d0 _play_spred_set 060ffd5a *ABS* 060ffd5a _VDP2_SCRCTL 060344d8 *ABS* 060344d8 _Smpc_Result 060ffde0 *ABS* 060ffde0 _ScrRotPtr 0002da30 .control 0606da30 _slVRAMMode 00006268 .text 00006268 _guid_set 06034d92 *ABS* 06034d92 _PCM_EndCheck 00017bb4 .control 06057bb4 _eft_bomb04_set 00002284 .text 00002284 _SCR_2_1a_ctrl 00008480 .contbss 0607bdf0 _obj_x 060ffd2a *ABS* 060ffd2a _VDP2_MPKLRB 06006a58 *ABS* 06006a58 _SND_TIMING 060ffcc4 *ABS* 060ffcc4 _VDP2_TVSTAT 00024f02 .control 06064f02 _sys__interrupt_handler3 00003b50 .text 00003b50 _padman_disp2 060093f4 *ABS* 060093f4 _f_stg2_seq 0001fb4c .control 0605fb4c _disp_warning_bg 00020ab4 .control 06060ab4 _mk_credit_map_sub 06008f18 *ABS* 06008f18 _f_titlebg 060ffde4 *ABS* 060ffde4 _nbg0_char_adr 00020884 .control 06060884 _mk_score_map 00030eb0 .control 06070eb0 _slSetAmbient 00014638 .control 06054638 _eshot02_set 000006f4
0xE5000
This is part of the source code for Stage 2.
/*==================================================================*/ /* STG02 */ /*==================================================================*/ #include "bios.h" #include "ryo.h" #include "game.h" #include "nami.h" #include "scroll.h" /*------------------------------------------------------------------*/ #define NORMAL_SET 1 #define BOSSX_DEBUG_SET 0 #define BOSSY_DEBUG_SET 0 #define BOSSZ_DEBUG_SET 0 #define PAD_DEBUG_SET 0 #define FLAT_MODE 0 /*------------------------------------------------------------------*/ #define tm(X,Y,Z) ((X*60*60)+(Y*60)+Z) /*------------------------------------------------------------------*/ ENM_SET_TBL_ etbl00[]; ENM_SET_TBL_ etbl01[]; ENM_SET_TBL_ etbl02[]; ENM_SET_TBL_ etbl03[]; ENM_SET_TBL_ etbl04[]; /*------------------------------------------------------------------*/ /* Common Enemy */ /*------------------------------------------------------------------*/ extern s32 eset10_enm00_set(ESET_OBJ *ex); extern s32 inu_set(ESET_OBJ *ex); extern void name_set_sub(s8 *AD0, s8 *AD1, s8 *AD2, s8 *AD3, s16 Wait); /*------------------------------------------------------------------*/ /* Boss Enemy */ /*------------------------------------------------------------------*/ extern s8 bos10_set(void); extern s8 bos11_set(void); extern s8 bos12_set(void); extern s8 padman_set(void); extern s8 guid_set(void); extern s8 bike_set(void); extern s32 nise_set(ENM_SET_TBL *etbl); /*------------------------------------------------------------------*/ static s8 bos00_name[] = "^1KOTETSU"; static s8 bos00_p0[] = "1:HARDINESS"; static s8 bos00_p1[] = "2:SLEIGHT;OF;HAND"; static s8 bos00_p2[] = "3:FRIEND;SHIP"; static s8 bos01_name[] = "^1GOLETS"; static s8 bos01_p0[] = "1:HIGH;SPEED;SIGHT"; static s8 bos01_p1[] = "2:BRAVE;HEART"; static s8 bos01_p2[] = "3:BROTHER;LOVE"; static s8 bos02_name[] = "^1NASU"; static s8 bos02_p0[] = "1:BRAVE;FOR;ENTER;BOSOM"; static s8 bos02_p1[] = "2:PLACATE;TO;ANIMAL"; static s8 bos02_p2[] = "3:WILD;CAMERA"; static s8 bos03_name[] = "^1DAIKAI10"; static s8 bos03_p0[] = "1:DECIDE;WEAPONS"; static s8 bos03_p1[] = "2:SUPPLE;THINK"; static s8 bos03_p2[] = "3:...AND;LUCK"; static s8 bos04_name[] = "^1GEDO-O"; static s8 bos04_p0[] = "1:MAKE TIME"; static s8 bos04_p1[] = "2:DECIDE;WEAPONS"; static s8 bos04_p2[] = "3:LOOK;OVER;TO;LINES"; static s8 *bos_name[]={ bos00_name, bos01_name, bos02_name, bos03_name, bos04_name, }; static s8 *bos_poten[]={ bos00_p0,bos00_p1,bos00_p2, bos01_p0,bos01_p1,bos01_p2, bos02_p0,bos02_p1,bos02_p2, bos03_p0,bos03_p1,bos03_p2, bos04_p0,bos04_p1,bos04_p2, }; /*=================================================================*/ static s32 name_set(ENM_SET_TBL *etbl){ /*=================================================================*/ name_set_sub(bos_name[(u8)etbl->no], bos_poten[((u8)etbl->no*3)+0], bos_poten[((u8)etbl->no*3)+1], bos_poten[((u8)etbl->no*3)+2], etbl->d0.swl); return 1; } /*==================================================================*/ #define step no #define load_adr etbl->w1.swl #define vram_adr etbl->w2.swl #define tex_ofs etbl->w3.sww[0] #define col_ofs etbl->w3.sww[1] #define sd_adr etbl->w1.swl #define sq_adr (sd_adr + sd_size) #define sd_size etbl->w2.swl #define sq_size etbl->w3.swl static s32 SE_load(ENM_SET_TBL *etbl, u8 TONE){ enum{ LOAD_INIT, SD_LOAD_START, SD_LOAD_WAIT, SD_SET, LOAD_END, END }; s32 ret; #ifdef SS GfsHn cdhn; #endif #ifdef STV LOAD_FILE_INF *cdhn; #endif cdhn = etbl->w0.func; // return 1; ret = 0; switch(etbl->step){ /*----------------------*/ case LOAD_INIT: /*----------------------*/ sd_adr = local_load_end_ram_adr; sd_adr -= STG_TONE_BANK_SIZE_MAX; etbl->step = SD_LOAD_START; break; /*----------------------*/ case SD_LOAD_START: /*----------------------*/ cdhn = sd_data_load(TONE,sd_adr); if(cdhn == NULL)break; sd_size = file_size_get(cdhn); etbl->step = SD_LOAD_WAIT; break; /*----------------------*/ case SD_LOAD_WAIT: /*----------------------*/ if(!read_check(cdhn))break; etbl->step = SD_SET; break; /*----------------------*/ case SD_SET: /*----------------------*/ sd_data_set(TONE,sd_adr,sd_size); etbl->step = LOAD_END; break; /*----------------------*/ case LOAD_END: /*----------------------*/ ret = 1; break; } etbl->w0.func = cdhn; etbl->d0.swl--; return(ret); } /*============================================================================*/ static s32 stg21_se_load(ENM_SET_TBL *etbl){ /*============================================================================*/ return SE_load(etbl,SD_STG21_TNE); } /*============================================================================*/ static s32 stg22_se_load(ENM_SET_TBL *etbl){ /*============================================================================*/ return SE_load(etbl,SD_STG22_TNE); } /*============================================================================*/ static s32 stg23_se_load(ENM_SET_TBL *etbl){ /*============================================================================*/ return SE_load(etbl,SD_STG23_TNE); } /*============================================================================*/ static s32 stg24_se_load(ENM_SET_TBL *etbl){ /*============================================================================*/ return SE_load(etbl,SD_STG24_TNE); } /*============================================================================*/ static s32 stg25_se_load(ENM_SET_TBL *etbl){ /*============================================================================*/ return SE_load(etbl,SD_STG25_TNE); } #undef sd_adr #undef sq_adr #undef sd_size #undef sq_size /*==================================================================*/ #define step no #define load_adr etbl->w1.swl #define vram_adr etbl->w2.swl #define tex_ofs etbl->w3.sww[0] #define col_ofs etbl->w3.sww[1] #define sd_adr etbl->w1.swl #define sq_adr (sd_adr + sd_size) #define sd_size etbl->w2.swl #define sq_size etbl->w3.swl static s32 bos_bgm_load(ENM_SET_TBL *etbl) { enum{ LOAD_INIT, SD_LOAD_START, SD_LOAD_WAIT, SQ_LOAD_START, SQ_LOAD_WAIT, BGM_STOP, BGM_STOP_WAIT, SD_SET, SQ_SET, BGM_SET, LOAD_END, END }; s32 ret; #ifdef SS GfsHn cdhn; #endif #ifdef STV LOAD_FILE_INF *cdhn; #endif cdhn = etbl->w0.func; ret = 0; switch(etbl->step){ case LOAD_INIT: sd_adr = local_load_end_ram_adr; sd_adr -= BGM_BANK_SIZE_MAX; etbl->step++; break; case SD_LOAD_START: cdhn = sd_data_load(SD_BOS2_TNE_M, sd_adr); if(cdhn == NULL)break; sd_size = file_size_get(cdhn); etbl->step = SD_LOAD_WAIT; break; case SD_LOAD_WAIT: if(!read_check(cdhn))break; etbl->step++; break; case SQ_LOAD_START: cdhn = sd_data_load(SD_BOS2_SEQ_M, sq_adr); if(cdhn == NULL)break; sq_size = file_size_get(cdhn); etbl->step = SQ_LOAD_WAIT; break; case SQ_LOAD_WAIT: if(!read_check(cdhn))break; etbl->step = BGM_STOP; break; case BGM_STOP: if(etbl->d0.swl > 0)break; bgm_stop(200); etbl->step = BGM_STOP_WAIT; break; case BGM_STOP_WAIT: if(sd_x->bgm_set_no != BGM_NULL)break; etbl->d0.swl = 2; etbl->step = SD_SET; break; case SD_SET: if(etbl->d0.swl > 0)break; sd_data_set(SD_BOS2_TNE_M,sd_adr,sd_size); sd_data_set(SD_BOS2_SEQ_M,sq_adr,sq_size); etbl->d0.swl = cmin(etbl->d1.swl,((sd_size + sq_size) / DIV_DMA_SIZE) + 4); etbl->step = BGM_SET; break; case BGM_SET: if(etbl->d0.swl > 0)break; gcon_x->bgm_load_no = BGM_BOS02; bgm_set(BGM_BOS02); etbl->step = LOAD_END; break; case LOAD_END: ret = 1; break; } etbl->w0.func = cdhn; etbl->d0.swl--; return(ret); } #undef sd_adr #undef sq_adr #undef sd_size #undef sq_size /*=================================================================*/ s32 demo01_set(ENM_SET_TBL *etbl){ /*=================================================================*/ switch(Set_Step){ case 0: if(!(get_stage_fg() & STAGE_START_FG))break; Set_Step++; break; case 1: if(SCR_NextAreaFlag){ eset_x = enm_set_set((ENM_SET_TBL *)etbl00); return -1; } } return 0; } /*============================================================================*/ /* */ /* --- KOTESU Stage ------------------------------------------------------- */ /* */ /*============================================================================*/ static s32 kotetsu_load(ENM_SET_TBL *etbl) { enum{ LOAD_INIT, MODEL_LOAD_START, MODEL_LOAD_WAIT, MODEL_LOAD_END, CHAR_LOAD_START, CHAR_LOAD_WAIT, CHAR_LOAD_END, LOAD_END, END }; s32 ret; #ifdef SS GfsHn cdhn; #endif #ifdef STV LOAD_FILE_INF *cdhn; #endif cdhn = etbl->w0.func; ret = 0; switch(etbl->step){ case LOAD_INIT: load_adr = local_load_ram_adr; vram_adr = local_load_vram_adr; tex_ofs = local_load_tex_ofs; col_ofs = local_load_col_ofs; etbl->step = MODEL_LOAD_START; break; case MODEL_LOAD_START: cdhn = model_load(CHAR_KOTETSU,load_adr); if(cdhn == NULL)break; etbl->step = MODEL_LOAD_WAIT; break; case MODEL_LOAD_WAIT: if(!read_check(cdhn))break; model_load_end(CHAR_KOTETSU,load_adr); vram_adr = model_set(CHAR_KOTETSU,vram_adr,tex_ofs,col_ofs); tex_ofs += ((P_HEADER *)char_tbl[CHAR_KOTETSU].header_adr)->tex_suu; if((char_tbl[CHAR_KOTETSU].atrb & CL_MODE) != CL16Look){ col_ofs += ((P_HEADER *)char_tbl[CHAR_KOTETSU].header_adr)->colsize; } load_adr = (u32)((P_HEADER *)char_tbl[CHAR_KOTETSU].header_adr)->texinf; model_all_hss_set (CHAR_KOTETSU,M_KOTETSU_END); model_all_flat_set(CHAR_KOTETSU,M_KOTETSU_END); set_light_color (22,24,28); set_light_ambient (10,12,14); set_light_angle (+0x1000,-0x2000,-0x0000); etbl->step = MODEL_LOAD_END; break; case MODEL_LOAD_END: etbl->step = CHAR_LOAD_START; break; case CHAR_LOAD_START: cdhn = char_load(CHAR_KOTET_E,load_adr); if(cdhn == NULL)break; etbl->step = CHAR_LOAD_WAIT; break; case CHAR_LOAD_WAIT: if(!read_check(cdhn))break; char_load_end(CHAR_KOTET_E,load_adr); vram_adr = char_set(CHAR_KOTET_E,vram_adr,tex_ofs,col_ofs); tex_ofs += ((S_HEADER *)char_tbl[CHAR_KOTET_E].header_adr)->tex_suu; col_ofs += ((S_HEADER *)char_tbl[CHAR_KOTET_E].header_adr)->colsize; load_adr = (u32)((S_HEADER *)char_tbl[CHAR_KOTET_E].header_adr)->texinf; etbl->step = CHAR_LOAD_END; break; case CHAR_LOAD_END: etbl->step = LOAD_END; break; case LOAD_END: ret = 1; break; } etbl->w0.func = cdhn; return(ret); } /*=================================================================*/ s32 KOTETSU_set(ENM_SET_TBL *etbl){ /*=================================================================*/ EFT_OBJ *x; s8 OBJ_NO; switch(Set_Step){ case 0: /* Boss Set */ OBJ_NO = bos10_set(); if(OBJ_NO){ Set_Step++; Set_Boss_obj_no = OBJ_NO; } break; case 1: /* Boss Dead Wait */ if(obj_x[Set_Boss_obj_no]==0){ x = report_set( 60); if(x){ Set_Step++; Set_Report_Adr = (u32)x; SCR_NextSection(); } } break; case 2: /* Next Enemies Set */ x = (EFT_OBJ *)Set_Report_Adr; if(x->mode >= OBJ_M_KIE){ Set_Step++; SCR_NextSection(); } break; case 3: /* Next Enemies Set */ if(SCR_NextAreaFlag){ eset_x = enm_set_set((ENM_SET_TBL *)etbl01); return -1; } } return 0; } /*============================================================================*/ /* */ /* --- SONIC Stage ------------------------------------------------------- */ /* */ /*============================================================================*/ static s32 sonic_load(ENM_SET_TBL *etbl) { enum{ LOAD_INIT, MODEL_LOAD_START, MODEL_LOAD_WAIT, MODEL_LOAD_END, CHAR_LOAD_START, CHAR_LOAD_WAIT, CHAR_LOAD_END, LOAD_END, END }; s32 ret; #ifdef SS GfsHn cdhn; #endif #ifdef STV LOAD_FILE_INF *cdhn; #endif cdhn = etbl->w0.func; ret = 0; switch(etbl->step){ case LOAD_INIT: load_adr = local_load_ram_adr; vram_adr = local_load_vram_adr; tex_ofs = local_load_tex_ofs; col_ofs = local_load_col_ofs; etbl->step = MODEL_LOAD_START; break; case MODEL_LOAD_START: cdhn = model_load(CHAR_SONIC,load_adr); if(cdhn == NULL)break; etbl->step = MODEL_LOAD_WAIT; break; case MODEL_LOAD_WAIT: if(!read_check(cdhn))break; model_load_end(CHAR_SONIC,load_adr); vram_adr = model_set(CHAR_SONIC,vram_adr,tex_ofs,col_ofs); tex_ofs += ((P_HEADER *)char_tbl[CHAR_SONIC].header_adr)->tex_suu; if((char_tbl[CHAR_SONIC].atrb & CL_MODE) != CL16Look){ col_ofs += ((P_HEADER *)char_tbl[CHAR_SONIC].header_adr)->colsize; } load_adr = (u32)((P_HEADER *)char_tbl[CHAR_SONIC].header_adr)->texinf; model_all_hss_set (CHAR_SONIC,M_SONIC_END); model_all_flat_set(CHAR_SONIC,M_SONIC_END); set_light_color (28,28,28); set_light_ambient (12,12,12); set_light_angle (-0x2000,+0x2000,-0x0000); etbl->step = MODEL_LOAD_END; break; case MODEL_LOAD_END: etbl->step = CHAR_LOAD_START; break; case CHAR_LOAD_START: cdhn = char_load(CHAR_SONIC_E,load_adr); if(cdhn == NULL)break; etbl->step = CHAR_LOAD_WAIT; break; case CHAR_LOAD_WAIT: if(!read_check(cdhn))break; char_load_end(CHAR_SONIC_E,load_adr); vram_adr = char_set(CHAR_SONIC_E,vram_adr,tex_ofs,col_ofs); tex_ofs += ((S_HEADER *)char_tbl[CHAR_SONIC_E].header_adr)->tex_suu; col_ofs += ((S_HEADER *)char_tbl[CHAR_SONIC_E].header_adr)->colsize; load_adr = (u32)((S_HEADER *)char_tbl[CHAR_SONIC_E].header_adr)->texinf; etbl->step = CHAR_LOAD_END; break; case CHAR_LOAD_END: etbl->step = LOAD_END; break; case LOAD_END: ret = 1; break; } etbl->w0.func = cdhn; return(ret); } /*=================================================================*/ s32 SONIC_set(ENM_SET_TBL *etbl){ /*=================================================================*/ EFT_OBJ *x; s8 OBJ_NO; switch(Set_Step){ case 0: /* Scroll Wait */ if(SCR_NextAreaFlag){ Set_Step++; } break; case 1: /* Boss Set */ OBJ_NO = bos12_set(); if(OBJ_NO){ Set_Step++; Set_Boss_obj_no = OBJ_NO; } break; case 2: /* Boss Dead Wait */ if(obj_x[Set_Boss_obj_no]==0){ x = report_set( 60); if(x){ Set_Step++; Set_Report_Adr = (u32)x; SCR_NextSection(); } } break; case 3: /* Next Enemies Set */ x = (EFT_OBJ *)Set_Report_Adr; if(x->mode >= OBJ_M_KIE){ Set_Step++; SCR_NextSection(); } break; case 4: /* Next Enemies Set */ if(SCR_NextAreaFlag){ eset_x = enm_set_set((ENM_SET_TBL *)etbl02); return -1; } } return 0; } /*============================================================================*/ /* */ /* --- NURSE Stage ------------------------------------------------------- */ /*
- Pages missing developer references
- Games developed by Treasure
- Pages missing publisher references
- Games published by Treasure
- Arcade games
- Pages missing date references
- Games released in 1998
- Games released in May
- Games released on May 28
- Games with uncompiled source code
- Games with regional differences
- Articles needing basics
Cleanup > Articles needing basics
Cleanup > Pages missing date references
Cleanup > Pages missing developer references
Cleanup > Pages missing publisher references
Games > Games by content > Games with regional differences
Games > Games by content > Games with uncompiled source code
Games > Games by developer > Games developed by Treasure
Games > Games by platform > Arcade games
Games > Games by publisher > Games published by Treasure
Games > Games by release date > Games released in 1998
Games > Games by release date > Games released in May
Games > Games by release date > Games released in May > Games released on May 28