#include "COMMON.H"
#include "KAZU.H"
#include "SPMGR.H"
#include "TASKMGR.H"
#include "SPCONT.H"
#include "SOUND.H"
#include "BAND.H"
#define BAND_GAME_TIM_POS 0+4
#define BAND_GAME_TIM_NUM 5
#define BAND_EVENT_TIM_POS 0+4
#define BAND_EVENT_TIM_NUM 7
#define TIM_POS_BAND_GAME_Z1_
#define TIM_POS_BAND_GAME_Z1_
#define TIM_POS_BAND_GAME_Z1_
#define TIM_POS_BAND_GAME_Z1_
#define TIM_POS_BAND_GAME_Z1_
#define TIM_POS_BAND_EVENT_FONT 0
#define TIM_POS_BAND_EVENT_YORNO 1
#define TIM_POS_BAND_EVENT_Z2_
#define TIM_POS_BAND_EVENT_Z2_
#define TIM_POS_BAND_EVENT_Z2_
#define TIM_POS_BAND_EVENT_Z2_
#define TIM_POS_BAND_EVENT_Z2_
#define TIM_POS_BAND_EVENT_Z2_
#define TIM_POS_BAND_EVENT_Z2_
#define BAND_CHAR_GAME_BG_
#define BAND_CHAR_GAME_BG_
#define BAND_CHAR_GAME_DANTYOU_BIG_
#define BAND_CHAR_GAME_DANTYOU_BIG_
#define BAND_CHAR_GAME_LEVEL_SELECT_PLATE 4
#define BAND_CHAR_GAME_LEVEL_SELECT_PLATE_WAKU 5
#define BAND_CHAR_GAME_LEVEL_SELECT_BG_
#define BAND_CHAR_GAME_LEVEL_SELECT_BG_
#define BAND_CHAR_GAME_DANTYOU_
#define BAND_CHAR_GAME_DANTYOU_
#define BAND_CHAR_GAME_DANTYOU_
#define BAND_CHAR_GAME_DANTYOU_
#define BAND_CHAR_GAME_DANTYOU_
#define BAND_CHAR_GAME_DANTYOU_
#define BAND_CHAR_GAME_DANTYOU_
#define BAND_CHAR_GAME_DANTYOU_
#define BAND_CHAR_GAME_DANIN_A_
#define BAND_CHAR_GAME_DANIN_A_
#define BAND_CHAR_GAME_DANIN_B_
#define BAND_CHAR_GAME_DANIN_B_
#define BAND_CHAR_GAME_DANIN_C_
#define BAND_CHAR_GAME_DANIN_C_
#define BAND_CHAR_GAME_DANIN_D_
#define BAND_CHAR_GAME_DANIN_D_
#define BAND_CHAR_GAME_DANIN_E_
#define BAND_CHAR_GAME_DANIN_E_
#define BAND_CHAR_GAME_DANIN_F_
#define BAND_CHAR_GAME_DANIN_F_
#define BAND_CHAR_GAME_DANIN_G_
#define BAND_CHAR_GAME_DANIN_G_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_NUM_
#define BAND_CHAR_GAME_ARROW_LEFT 40
#define BAND_CHAR_GAME_ARROW_UP 41
#define BAND_CHAR_GAME_ARROW_RIGHT 42
#define BAND_CHAR_GAME_ARROW_DOWN 43
#define BAND_CHAR_GAME_SMOKE_
#define BAND_CHAR_GAME_SMOKE_
#define BAND_CHAR_GAME_DOOR_
#define BAND_CHAR_GAME_DOOR_
#define BAND_CHAR_GAME_DOOR_
#define BAND_CHAR_GAME_DOOR_
#define BAND_CHAR_GAME_LEVEL_SELECT_BG_MASK 50
#define BAND_CHAR_EVENT_CLEAR_BG_
#define BAND_CHAR_EVENT_CLEAR_BG_
#define BAND_CHAR_EVENT_CLEAR_BG_
#define BAND_CHAR_EVENT_CLEAR_BG_
#define BAND_CHAR_EVENT_ALLCLEAR_BG_
#define BAND_CHAR_EVENT_ALLCLEAR_BG_
#define BAND_CHAR_EVENT_ALLCLEAR_BG_
#define BAND_CHAR_EVENT_ALLCLEAR_BG_
#define BAND_CHAR_EVENT_CLEAR_DANTYOU_
#define BAND_CHAR_EVENT_CLEAR_DANTYOU_
#define BAND_CHAR_EVENT_ALLCLEAR_DANTYOU_
#define BAND_CHAR_EVENT_ALLCLEAR_DANTYOU_
#define BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_
#define BAND_CHAR_EVENT_ICON_
#define BAND_CHAR_EVENT_ICON_
#define BAND_CHAR_EVENT_ICON_
#define BAND_CHAR_EVENT_ICON_
#define BAND_CHAR_EVENT_ICON_
#define BAND_CHAR_EVENT_ICON_
#define BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_
#define BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_
#define BAND_CHAR_EVENT_SELECT_CONTINUE_PLATE 34
#define BAND_CHAR_EVENT_SELECT_CONTINUE_YES_DARK 35
#define BAND_CHAR_EVENT_SELECT_CONTINUE_NO_DARK 36
#define BAND_CHAR_EVENT_SELECT_CONTINUE_YES_LIGHT 37
#define BAND_CHAR_EVENT_SELECT_CONTINUE_NO_LIGHT 38
#define BAND_CHAR_EVENT_SELECT_CONTINUE_BUPE_
#define BAND_CHAR_EVENT_SELECT_CONTINUE_BUPE_
#define BAND_CHAR_EVENT_SELECT_CONTINUE_RETRY_H 41
#define BAND_CHAR_EVENT_SELECT_CONTINUE_END_H 42
#define BAND_CHAR_EVENT_SELECT_CONTINUE_CONTINUE_H 43
#define BAND_CHAR_EVENT_SELECT_CONTINUE_CURSOR 44
#define BAND_CHAR_EVENT_SELECT_CONTINUE_ERABU 45
#define BAND_CHAR_EVENT_SELECT_CONTINUE_KETEI 46
#define BAND_CHAR_EVENT_SELECT_CONTINUE_MENU 47
extern u_long pad;
extern u_long NewPad;
extern u_long OldPad;
extern u_long JstPad;
extern u_long WorkPad;
extern u_long Z1_01_A_image[];
extern u_long Z1_01_A_clut[];
extern u_long Z1_01_B_image[];
extern u_long Z1_01_B_clut[];
extern u_long Z1_02_A_image[];
extern u_long Z1_02_A_clut[];
extern u_long Z1_02_B_image[];
extern u_long Z1_02_B_clut[];
extern u_long Z1_03_image[];
extern u_long Z1_03_clut[];
extern u_long Z2_01_A_image[];
extern u_long Z2_01_A_clut[];
extern u_long Z2_01_B_image[];
extern u_long Z2_01_B_clut[];
extern u_long Z2_01_C_image[];
extern u_long Z2_01_C_clut[];
extern u_long Z2_02_A_image[];
extern u_long Z2_02_A_clut[];
extern u_long Z2_02_B_image[];
extern u_long Z2_02_B_clut[];
extern u_long Z2_03_image[];
extern u_long Z2_03_clut[];
extern u_long Z2_04_image[];
extern u_long Z2_04_clut[];
extern u_long font_image[];
extern u_long YorN_image[];
extern u_long name_image[];
extern u_long MMENU_image[];
extern u_long font_clut[];
extern u_long YorN_clut[];
extern u_long name_clut[];
extern u_long MMENU_clut[];
extern u_long help_00_image[];
extern u_long help_00_clut[];
extern int active;
extern GsOT Wot[2];
static GsBOXF Box;
static GsBOXF BoxDataBlack[] = {0x00000000, 0, 0,320,240,0x00,0x00,0x00};
static GsBOXF BoxDataWhite[] = {0x00000000, 0, 0,320,240,0xFF,0xFF,0xFF};
static BAND_GAME BGameMgr;
static TIMD BandGameTextureFile[] = {
{ "RCUBE3", "\\TIM\\BANDGD.B;1"},
};
static TIMD BandEventTextureFile[] = {
{ "RCUBE2", "\\TIM\\BANDED.B;1"},
};
static GsIMAGE BandGameTextureImage[]=
{
{ TIM_COLOR_16, 384,0, 64,256, font_image, 16,480, 16,6, font_clut },
{ TIM_COLOR_16, 448,0, 64,256, YorN_image, 0,480, 16,16, YorN_clut },
{ TIM_COLOR_16, 512,0, 64,256, help_00_image, 0,496, 16,2, help_00_clut },
{ TIM_COLOR_16, 320,0, 64,256, MMENU_image, 16,489, 16,7, MMENU_clut },
{ TIM_COLOR_16, 768,0, 64,256, Z1_01_A_image, 80,480, 16,1, Z1_01_A_clut },
{ TIM_COLOR_16, 704,0, 64,256, Z1_01_B_image, 96,480, 16,3, Z1_01_B_clut },
{ TIM_COLOR_256, 576,0, 128,256, Z1_02_A_image, 0,510, 256,1, Z1_02_A_clut },
{ TIM_COLOR_256, 896,0, 128,256, Z1_02_B_image, 0,509, 256,1, Z1_02_B_clut },
{ TIM_COLOR_16, 832,0, 64,256, Z1_03_image, 64,480, 16,5, Z1_03_clut },
};
static GsIMAGE BandEventTextureImage[]=
{
{ TIM_COLOR_16, 384,0, 64,256, font_image, 16,480, 16,6, font_clut },
{ TIM_COLOR_16, 448,0, 64,256, YorN_image, 0,480, 16,16, YorN_clut },
{ TIM_COLOR_16, 512,0, 64,256, help_00_image, 0,496, 16,2, help_00_clut },
{ TIM_COLOR_16, 320,0, 64,256, MMENU_image, 16,489, 16,7, MMENU_clut },
{ TIM_COLOR_256, 704, 0, 128,256, Z2_01_A_image, 0,508, 256,1, Z2_01_A_clut },
{ TIM_COLOR_256, 320,256, 128,256, Z2_01_B_image, 0,509, 256,1, Z2_01_B_clut },
{ TIM_COLOR_256, 576,0, 128,256, Z2_01_C_image, 0,510, 256,1, Z2_01_C_clut },
{ TIM_COLOR_256, 448,256, 128,256, Z2_02_A_image, 0,507, 256,1, Z2_02_A_clut },
{ TIM_COLOR_256, 832,0, 128,256, Z2_02_B_image, 0,511, 256,1, Z2_02_B_clut },
{ TIM_COLOR_16, 576,256, 64,256, Z2_03_image, 80,480, 16,5, Z2_03_clut },
{ TIM_COLOR_16, 960,0, 64,256, Z2_04_image, 64,480, 16,3, Z2_04_clut },
};
static ENTRY_SPRITE_DATA BandGameSpriteData[] =
{
{ TIM_POS_BAND_GAME_Z1_01_A, 0, 0, 240, 256, 0 },
{ TIM_POS_BAND_GAME_Z1_01_B, 0, 0, 240, 64, 0 },
{ TIM_POS_BAND_GAME_Z1_01_B, 66, 0, 126, 144, 1 },
{ TIM_POS_BAND_GAME_Z1_01_B, 66, 128, 126, 144, 1 },
{ TIM_POS_BAND_GAME_Z1_01_B, 212, 0, 10, 18, 2 },
{ TIM_POS_BAND_GAME_Z1_01_B, 212, 12, 14, 20, 2 },
{ TIM_POS_BAND_GAME_Z1_02_A, 0, 0, 240, 256, 0 },
{ TIM_POS_BAND_GAME_Z1_02_B, 0, 0, 240, 64, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 0, 0, 38, 44, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 44, 0, 38, 44, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 88, 0, 38, 44, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 132, 0, 38, 44, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 0, 40, 38, 44, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 44, 40, 38, 44, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 88, 40, 38, 44, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 132, 40, 38, 44, 0 },
{ TIM_POS_BAND_GAME_Z1_03, 0, 80, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 46, 80, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 92, 80, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 138, 80, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 0, 112, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 46, 112, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 92, 112, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 138, 112, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 0, 144, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 46, 144, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 92, 144, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 138, 144, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 0, 176, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 46, 176, 30, 44, 1 },
{ TIM_POS_BAND_GAME_Z1_03, 196, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 202, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 208, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 214, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 220, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 226, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 232, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 238, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 244, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 250, 246, 10, 6, 4 },
{ TIM_POS_BAND_GAME_Z1_03, 0, 218, 18, 18, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 20, 218, 18, 18, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 40, 218, 18, 18, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 60, 218, 18, 18, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 92, 208, 36, 32, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 126, 208, 36, 32, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 208, 0, 56, 48, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 208, 58, 56, 48, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 208, 116, 56, 48, 2 },
{ TIM_POS_BAND_GAME_Z1_03, 208, 174, 56, 48, 3 },
{ TIM_POS_BAND_GAME_Z1_02_B, 80, 0, 104, 148, 0 },
{ ENTRY_SPRITE_DATA_END,0,0,0,0,0 }
};
static ENTRY_SPRITE_DATA BandEventSpriteData[] =
{
{ TIM_POS_BAND_EVENT_Z2_01_A, 0, 0, 240, 256, 0 },
{ TIM_POS_BAND_EVENT_Z2_01_B, 0, 0, 240, 256, 0 },
{ TIM_POS_BAND_EVENT_Z2_01_C, 0, 0, 240, 64, 0 },
{ TIM_POS_BAND_EVENT_Z2_01_C, 72, 0, 240, 64, 0 },
{ TIM_POS_BAND_EVENT_Z2_02_A, 0, 0, 240, 68, 0 },
{ TIM_POS_BAND_EVENT_Z2_02_A, 68, 0, 240, 184, 0 },
{ TIM_POS_BAND_EVENT_Z2_02_A, 252, 0, 240, 4, 0 },
{ TIM_POS_BAND_EVENT_Z2_02_B, 0, 0, 240, 256, 0 },
{ TIM_POS_BAND_EVENT_Z2_03, 0, 0, 126, 144, 0 },
{ TIM_POS_BAND_EVENT_Z2_03, 0, 128, 126, 144, 0 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 0, 48, 48, 1 },
{ TIM_POS_BAND_EVENT_Z2_03, 196, 0, 48, 48, 1 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 50, 32, 32, 2 },
{ TIM_POS_BAND_EVENT_Z2_03, 180, 50, 32, 32, 2 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 84, 32, 32, 2 },
{ TIM_POS_BAND_EVENT_Z2_03, 180, 84, 32, 32, 2 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 118, 32, 32, 2 },
{ TIM_POS_BAND_EVENT_Z2_03, 180, 118, 32, 32, 2 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 152, 32, 32, 2 },
{ TIM_POS_BAND_EVENT_Z2_03, 180, 152, 32, 32, 2 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 186, 20, 102, 3 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 208, 20, 90, 3 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 230, 20, 62, 3 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 186, 20, 102, 4 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 208, 20, 90, 4 },
{ TIM_POS_BAND_EVENT_Z2_03, 146, 230, 20, 62, 4 },
{ TIM_POS_BAND_EVENT_Z2_04, 0, 0, 34, 38, 0 },
{ TIM_POS_BAND_EVENT_Z2_04, 40, 0, 34, 38, 0 },
{ TIM_POS_BAND_EVENT_Z2_04, 80, 0, 34, 38, 0 },
{ TIM_POS_BAND_EVENT_Z2_04, 120, 0, 34, 38, 0 },
{ TIM_POS_BAND_EVENT_Z2_04, 160, 0, 34, 38, 2 },
{ TIM_POS_BAND_EVENT_Z2_04, 200, 0, 34, 38, 2 },
{ TIM_POS_BAND_EVENT_Z2_04, 0, 0, 34, 38, 1 },
{ TIM_POS_BAND_EVENT_Z2_04, 40, 0, 34, 38, 1 },
{ TIM_POS_BAND_EVENT_YORNO, 0, 0, 115, 186, 0 },
{ TIM_POS_BAND_EVENT_YORNO, 0, 115, 40, 38, 1 },
{ TIM_POS_BAND_EVENT_YORNO, 38, 115, 40, 44, 1 },
{ TIM_POS_BAND_EVENT_YORNO, 82, 115, 40, 44, 2 },
{ TIM_POS_BAND_EVENT_YORNO, 126, 115, 40, 44, 2 },
{ TIM_POS_BAND_EVENT_YORNO, 186, 0, 69, 58, 3 },
{ TIM_POS_BAND_EVENT_YORNO, 186, 69, 69, 58, 3 },
{ TIM_POS_BAND_EVENT_YORNO, 0, 155, 14, 148, 4 },
{ TIM_POS_BAND_EVENT_YORNO, 0, 170, 14, 148, 4 },
{ TIM_POS_BAND_EVENT_YORNO, 20, 20, 14, 148, 4 },
{ TIM_POS_BAND_EVENT_FONT, 24, 200, 24, 26, 2 },
{ TIM_POS_BAND_EVENT_FONT, 0, 232, 15, 52, 4 },
{ TIM_POS_BAND_EVENT_FONT, 52, 232, 15, 52, 4 },
{ TIM_POS_BAND_EVENT_FONT, 104, 232, 15, 52, 4 },
{ ENTRY_SPRITE_DATA_END,0,0,0,0,0 }
};
static char InitMapData[SQUARE_H_NUM+2][SQUARE_W_NUM+2]=
{
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
{ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1 },
{ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1 },
{ -1, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, -1 },
{ -1, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, -1 },
{ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1 },
{ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1 },
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
};
static int DaninNoTable[]={
BAND_CHAR_GAME_NUM_00,
BAND_CHAR_GAME_NUM_01,
BAND_CHAR_GAME_NUM_02,
BAND_CHAR_GAME_NUM_03,
BAND_CHAR_GAME_NUM_04,
BAND_CHAR_GAME_NUM_05,
BAND_CHAR_GAME_NUM_06,
BAND_CHAR_GAME_NUM_07,
BAND_CHAR_GAME_NUM_08,
BAND_CHAR_GAME_NUM_09,
};
static int GakudaninAnmTable[]={
BAND_CHAR_EVENT_ALLCLEAR_DANTYOU_00,
BAND_CHAR_EVENT_ALLCLEAR_DANTYOU_01,
BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_00,
BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_01,
BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_06,
BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_07,
BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_04,
BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_05,
BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_02,
BAND_CHAR_EVENT_ALLCLEAR_BACK_DANIN_03,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_00,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_01,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_02,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_03,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_04,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_05,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_06,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_07,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_06,
BAND_CHAR_EVENT_ALLCLEAR_FRONT_DANIN_07,
};
static GAKUDANIN_DATA InitDataAllClearGkudan[]={
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 1, 140, 76, PRIORITY_EVENT_DANTYOU, 0, 0, 0, 140, 76 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 146, 88, PRIORITY_EVENT_DANIN_BACK, 1, 0, 60, 188, 88 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 146, 88, PRIORITY_EVENT_DANIN_BACK, -1, 0, 120, 108, 88 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 188, 88, PRIORITY_EVENT_DANIN_BACK, 1, 0, 180, 224, 88 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 108, 88, PRIORITY_EVENT_DANIN_BACK, -1, 0, 240, 72, 88 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 280, 144, PRIORITY_EVENT_DANIN_FRONT, -1, 0, 300, 146, 144 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 0, 120, PRIORITY_EVENT_DANIN_FRONT, 1, 0, 360, 110, 120 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 280, 120, PRIORITY_EVENT_DANIN_FRONT, -1, 0, 420, 180, 120 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 0, 134, PRIORITY_EVENT_DANIN_FRONT, 1, 0, 480, 76, 134 },
{ ALL_CLEAR_EVENT_GAKUDANIN_WAIT, 0, 280, 134, PRIORITY_EVENT_DANIN_FRONT, -1, 0, 540, 210, 134 },
};
static BAND_PROBLEM BandProblemTable[50][DANIN_NUM]=
{
{
{ 1, 10, 3 },
{ 2, 8, 2 },
{ 3, 4, 4 },
{ 4, 3, 1 },
{ 5, 5, 2 },
{ 6, 1, 6 },
},
{
{ 2, 10, 3 },
{ 3, 8, 2 },
{ 4, 4, 4 },
{ 5, 3, 1 },
{ 6, 5, 2 },
{ 7, 1, 6 },
},
{
{ 3, 11, 5 },
{ 4, 2, 4 },
{ 5, 4, 6 },
{ 6, 5, 2 },
{ 7, 8, 3 },
{ 8, 12, 1 },
},
{
{ 4, 11, 5 },
{ 5, 2, 4 },
{ 6, 4, 6 },
{ 7, 5, 2 },
{ 8, 8, 3 },
{ 9, 12, 1 },
},
{
{ 5, 2, 4 },
{ 6, 6, 6 },
{ 7, 1, 5 },
{ 8, 10, 2 },
{ 9, 10, 5 },
{ 10, 2, 2 },
},
{
{ 1, 2, 4 },
{ 2, 6, 6 },
{ 3, 1, 5 },
{ 4, 10, 2 },
{ 5, 10, 5 },
{ 6, 2, 2 },
},
{
{ 2, 7, 6 },
{ 3, 2, 2 },
{ 4, 8, 4 },
{ 5, 1, 6 },
{ 6, 3, 5 },
{ 7, 11, 2 },
},
{
{ 3, 7, 6 },
{ 4, 2, 2 },
{ 5, 8, 4 },
{ 6, 1, 6 },
{ 7, 3, 5 },
{ 8, 11, 2 },
},
{
{ 4, 11, 2 },
{ 5, 9, 4 },
{ 6, 4, 6 },
{ 7, 3, 3 },
{ 8, 2, 5 },
{ 9, 6, 2 },
},
{
{ 5, 11, 2 },
{ 6, 9, 4 },
{ 7, 4, 6 },
{ 8, 3, 3 },
{ 9, 2, 5 },
{ 10, 6, 2 },
},
{
{ 6, 4, 3 },
{ 7, 4, 5 },
{ 8, 10, 3 },
{ 9, 7, 1 },
{ 10, 9, 6 },
{ 11, 2, 4 },
},
{
{ 7, 4, 3 },
{ 8, 4, 5 },
{ 9, 10, 3 },
{ 10, 7, 1 },
{ 11, 9, 6 },
{ 12, 2, 4 },
},
{
{ 8, 6, 1 },
{ 9, 2, 3 },
{ 10, 4, 5 },
{ 11, 4, 2 },
{ 12, 10, 3 },
{ 13, 11, 5 },
},
{
{ 9, 6, 1 },
{ 10, 2, 3 },
{ 11, 4, 5 },
{ 12, 4, 2 },
{ 13, 10, 3 },
{ 14, 11, 5 },
},
{
{ 10, 2, 3 },
{ 11, 4, 4 },
{ 12, 9, 5 },
{ 13, 2, 5 },
{ 14, 12, 1 },
{ 15, 10, 3 },
},
{
{ 11, 2, 3 },
{ 12, 4, 4 },
{ 13, 9, 5 },
{ 14, 2, 5 },
{ 15, 12, 1 },
{ 16, 10, 3 },
},
{
{ 12, 11, 4 },
{ 13, 8, 2 },
{ 14, 3, 2 },
{ 15, 4, 5 },
{ 16, 1, 6 },
{ 17, 9, 6 },
},
{
{ 13, 11, 4 },
{ 14, 8, 2 },
{ 15, 3, 2 },
{ 16, 4, 5 },
{ 17, 1, 6 },
{ 18, 9, 6 },
},
{
{ 14, 2, 2 },
{ 15, 9, 2 },
{ 16, 9, 4 },
{ 17, 2, 4 },
{ 18, 3, 6 },
{ 19, 11, 6 },
},
{
{ 15, 2, 2 },
{ 16, 9, 2 },
{ 17, 9, 4 },
{ 18, 2, 4 },
{ 19, 3, 6 },
{ 20, 11, 6 },
},
{
{ 26, 7, 2 },
{ 27, 1, 3 },
{ 28, 3, 5 },
{ 29, 9, 6 },
{ 30, 11, 4 },
{ 31, 10, 3 },
},
{
{ 37, 7, 2 },
{ 38, 1, 3 },
{ 39, 3, 5 },
{ 40, 9, 6 },
{ 41, 11, 4 },
{ 42, 10, 3 },
},
{
{ 45, 2, 3 },
{ 46, 4, 4 },
{ 47, 12, 6 },
{ 48, 9, 4 },
{ 49, 9, 3 },
{ 50, 4, 2 },
},
{
{ 48, 2, 3 },
{ 49, 4, 4 },
{ 50, 12, 6 },
{ 51, 9, 4 },
{ 52, 9, 3 },
{ 53, 4, 2 },
},
{
{ 59, 4, 2 },
{ 60, 12, 5 },
{ 61, 1, 4 },
{ 62, 4, 5 },
{ 63, 9, 2 },
{ 64, 9, 4 },
},
{
{ 60, 4, 2 },
{ 61, 12, 5 },
{ 62, 1, 4 },
{ 63, 4, 5 },
{ 64, 9, 2 },
{ 65, 9, 4 },
},
{
{ 67, 5, 4 },
{ 68, 3, 5 },
{ 69, 8, 6 },
{ 70, 2, 2 },
{ 71, 11, 2 },
{ 72, 11, 5 },
},
{
{ 78, 5, 4 },
{ 79, 3, 5 },
{ 80, 8, 6 },
{ 81, 2, 2 },
{ 82, 11, 2 },
{ 83, 11, 5 },
},
{
{ 88, 9, 3 },
{ 89, 11, 5 },
{ 90, 2, 5 },
{ 91, 3, 2 },
{ 92, 4, 4 },
{ 93, 11, 3 },
},
{
{ 88, 9, 3 },
{ 89, 11, 5 },
{ 90, 2, 5 },
{ 91, 3, 2 },
{ 92, 4, 4 },
{ 93, 11, 3 },
},
{
{ 10, 9, 2 },
{ 20, 10, 4 },
{ 30, 3, 6 },
{ 40, 7, 6 },
{ 50, 2, 4 },
{ 60, 3, 3 },
},
{
{ 20, 9, 2 },
{ 30, 10, 4 },
{ 40, 3, 6 },
{ 50, 7, 6 },
{ 60, 2, 4 },
{ 70, 3, 3 },
},
{
{ 30, 8, 1 },
{ 40, 10, 4 },
{ 50, 3, 3 },
{ 60, 1, 5 },
{ 70, 9, 3 },
{ 80, 4, 4 },
},
{
{ 40, 8, 1 },
{ 50, 10, 4 },
{ 60, 3, 3 },
{ 70, 1, 5 },
{ 80, 9, 3 },
{ 90, 4, 4 },
},
{
{ 30, 8, 1 },
{ 40, 10, 4 },
{ 50, 3, 3 },
{ 60, 1, 5 },
{ 70, 9, 3 },
{ 80, 4, 4 },
},
{
{ 10, 2, 2 },
{ 20, 4, 3 },
{ 30, 3, 5 },
{ 40, 8, 2 },
{ 50, 11, 3 },
{ 60, 9, 4 },
},
{
{ 20, 4, 2 },
{ 30, 8, 4 },
{ 40, 1, 5 },
{ 50, 1, 1 },
{ 60, 12, 1 },
{ 70, 11, 5 },
},
{
{ 30, 4, 2 },
{ 40, 8, 4 },
{ 50, 1, 5 },
{ 60, 1, 1 },
{ 70, 12, 1 },
{ 80, 11, 5 },
},
{
{ 40, 3, 2 },
{ 50, 9, 5 },
{ 60, 4, 4 },
{ 70, 8, 2 },
{ 80, 3, 5 },
{ 90, 11, 3 },
},
{
{ 40, 3, 2 },
{ 50, 9, 5 },
{ 60, 4, 4 },
{ 70, 8, 2 },
{ 80, 3, 5 },
{ 90, 11, 3 },
},
{
{ 1, 1, 5 },
{ 3, 11, 1 },
{ 5, 9, 4 },
{ 7, 4, 3 },
{ 9, 3, 5 },
{ 11, 10, 6 },
},
{
{ 5, 1, 5 },
{ 7, 11, 1 },
{ 9, 9, 4 },
{ 11, 4, 3 },
{ 13, 3, 5 },
{ 15, 10, 6 },
},
{
{ 14, 3, 2 },
{ 16, 2, 5 },
{ 18, 10, 6 },
{ 20, 9, 3 },
{ 22, 4, 4 },
{ 24, 12, 4 },
},
{
{ 27, 3, 2 },
{ 29, 2, 5 },
{ 31, 10, 6 },
{ 33, 9, 3 },
{ 35, 4, 4 },
{ 37, 12, 4 },
},
{
{ 30, 9, 3 },
{ 32, 11, 5 },
{ 34, 8, 6 },
{ 36, 8, 2 },
{ 38, 2, 3 },
{ 40, 3, 4 },
},
{
{ 38, 9, 3 },
{ 40, 11, 5 },
{ 42, 8, 6 },
{ 44, 8, 2 },
{ 46, 2, 3 },
{ 48, 3, 4 },
},
{
{ 53, 3, 2 },
{ 55, 9, 2 },
{ 57, 9, 6 },
{ 59, 2, 4 },
{ 61, 10, 4 },
{ 63, 11, 4 },
},
{
{ 66, 3, 2 },
{ 68, 9, 2 },
{ 70, 9, 6 },
{ 72, 2, 4 },
{ 74, 10, 4 },
{ 76, 11, 4 },
},
{
{ 79, 2, 2 },
{ 81, 9, 5 },
{ 83, 4, 4 },
{ 85, 2, 4 },
{ 87, 10, 2 },
{ 89, 4, 3 },
},
{
{ 79, 2, 2 },
{ 81, 9, 5 },
{ 83, 4, 4 },
{ 85, 2, 4 },
{ 87, 10, 2 },
{ 89, 4, 3 },
},
};
static int BGMIndexTable[]={
BAND_BGM_00,
BAND_BGM_01,
BAND_BGM_02,
BAND_BGM_03,
BAND_BGM_04,
BAND_BGM_05,
BAND_BGM_06,
};
static int XaCatchWaitTable[]=
{
2,
14,
3,
4,
15,
13,
};
#define INIT_PLAY_DEMO_SCRIPT_BASE 0
#define INIT_PLAY_DEMO_SCRIPT_NUM 2
#define DANTYOU_SPEAK_SCRIPT_BASE 2
#define DANTYOU_SPEAK_SCRIPT_NUM 2
#define DANTYOU_CLEAR_SCRIPT_BASE 4
#define DANTYOU_CLEAR_SCRIPT_NUM 2
#define DANTYOU_ALL_CLEAR_SCRIPT_BASE 6
#define DANTYOU_ALL_CLEAR_SCRIPT_NUM 2
#define DANTYOU_SELECT_LEVEL_SCRIPT_BASE 8
#define DANTYOU_SELECT_LEVEL_SCRIPT_NUM 1
static SCRIP_DATA BandScript[]=
{
{
0,
NamePlateDan,
XA_FILE_BAND00,
0,
"初音時06わしは、この 「ぞろぞろバンド」の改リーダーなのだ。待240終"
},
{
0,
NamePlateDan,
XA_FILE_BAND00,
1,
"初音時06おおっ、たいへん! もうすぐ 改パレードなのだ!待400終"
},
{
0,
NamePlateDan,
XA_FILE_BAND01,
0,
"初音時06メンバー、しゅうごう!待180終"
},
{
0,
NamePlateDan,
XA_FILE_BAND01,
1,
"初音時06じゅんばんに ならぶのだ!待300終"
},
{
0,
NamePlateDan,
XA_FILE_BAND02,
0,
"初音時06やった! おみごと。待240終"
},
{
0,
NamePlateDan,
XA_FILE_BAND02,
1,
"初音時06パレードに しゅっぱつなのだ!待280終"
},
{
0,
NamePlateDan,
XA_FILE_BAND02,
3,
"初音時06すばらしいのだ!待220終"
},
{
0,
NamePlateDan,
XA_FILE_BAND02,
4,
"初音時06ワシの バンドは、改せかいいちなのだぁぁ!待300終"
},
{
0,
NamePlateDan,
XA_FILE_BAND00,
4,
"初音時06ひかっている すうじを えらんでくれ。待300終"
},
};
int Band(GAMEMGR * ip_GameMgr)
{
TASK Task;
int i;
switch( ip_GameMgr->SubMode )
{
case INIT:
ip_GameMgr->SubMode = MAIN;
InitSprite();
InitTaskMgr();
srand(ip_GameMgr->Timer);
SfileRead2(BAND_SOUNDFILE_00);
HelpInit();
GameMgr.WaitFlag = ON;
#ifdef __DEBUG_BAND__
GameMgr.FadeFlag = FadeIn;
#endif
BGameMgr.BgmIndex = 0;
BGameMgr.Level = ip_GameMgr->Level[GAME_BAND];
BGameMgr.PlayLevel = 0;
BGameMgr.GetNum = 0;
BGameMgr.ContinueFlag = 0;
BGameMgr.ProblemIndex = 0;
BGameMgr.ClearFlag = 0;
BGameMgr.AllClearFlag = 0;
BGameMgr.ExitFlag = 0;
#ifdef __DEBUG_BAND__
if(NewPad & PADR1){
Task.func = AllClearEventTask;
Task.priority = TASK_NO_DEBUG;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_DEBUG;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "AllClearEventTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
if(NewPad & PADL1)
{
Task.func = DebugGameSpriteTask;
Task.priority = TASK_NO_DEBUG;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_DEBUG;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "DebugGameSpriteTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
if(NewPad & PADL2)
{
Task.func = DebugEventSpriteTask;
Task.priority = TASK_NO_DEBUG;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_DEBUG;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "DebugEventSpriteTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
if(NewPad & PADR2)
{
Task.func = ClearEventTask;
Task.priority = TASK_NO_DEBUG;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_DEBUG;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "ClearEventTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
{
if(BGameMgr.Level==0)
{
Task.func = GameControllTask;
Task.priority = TASK_NO_GAME_CONTROLL;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_CONTROLL;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "GameControllTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
{
Task.func = SelectLevelTask;
Task.priority = TASK_NO_GAME_SELECT_LEVEL;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SELECT_LEVEL;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "SelectLevelTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}
}
#else
if(BGameMgr.Level==0)
{
Task.func = GameControllTask;
Task.priority = TASK_NO_GAME_CONTROLL;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_CONTROLL;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "GameControllTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
{
Task.func = SelectLevelTask;
Task.priority = TASK_NO_GAME_SELECT_LEVEL;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SELECT_LEVEL;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "SelectLevelTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}
#endif
break;
case MAIN:
FntPrint("");
ExecuteTask();
TransSprite();
SpraitControl();
if(BGameMgr.ExitFlag) ip_GameMgr->SubMode = EXIT;
break;
case EXIT:
ip_GameMgr->Level[GAME_BAND] = BGameMgr.Level;
SpraitCharClr();
SpraitControl();
GameMgr.WaitFlag = ON;
for(i=0;i<MAX_BGM_NUM;i++){
ssStopBgm(BGMIndexTable[i]);
}
ssStopAll();
ssCloseVab();
ip_GameMgr->MainMode = MAIN_MODE_TOP_MENU;
ip_GameMgr->SubMode = INIT;
break;
default:
break;
}
return TRUE;
}
static int GameControllTask(TASK* ip_task)
{
TASK Task;
int i;
switch( ip_task->mode )
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
if((file_read(BandGameTextureFile[0].fn,LoadAddress)) == -1)
{
return FALSE;
}
TexInit( BAND_GAME_TIM_NUM, &BandGameTextureImage[BAND_GAME_TIM_POS] );
TimImgData = BandGameTextureImage;
EntrySprite( BandGameSpriteData );
BGameMgr.BgmIndex = 0;
BGameMgr.GetNum = 0;
BGameMgr.ProblemIndex = 0;
BGameMgr.ClearFlag = 0;
BGameMgr.AllClearFlag = 0;
GaidoInit();
if(BGameMgr.ContinueFlag==0)
{
BGameMgr.ContinueFlag = 1;
Task.func = AppearDantyouTask;
Task.priority = TASK_NO_GAME_APPEAR_DANTYOU;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_APPEAR_DANTYOU;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "AppearDantyouTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
{
Task.func = DantyouTask;
Task.priority = TASK_NO_GAME_DANTYOU;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_DANTYOU;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "DantyouTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
Task.func = GameBgTask;
Task.priority = TASK_NO_GAME_BG;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_BG;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "GameBgTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}
break;
case TASK_MODE_MAIN:
#ifdef __DEBUG_BAND__
FntPrint("LEVEL____=%d\n", BGameMgr.Level);
FntPrint("PLAYLEVEL=%d\n", BGameMgr.PlayLevel);
#endif
if(BGameMgr.ClearFlag){
ip_task->mode=TASK_MODE_EXIT;
}
break;
case TASK_MODE_EXIT:
for(i=0;i<MAX_BGM_NUM;i++){
ssStopBgm(BGMIndexTable[i]);
}
RemoveTask(TASK_NO_GAME_DANTYOU);
RemoveTask(TASK_NO_GAME_DANIN);
RemoveTask(TASK_NO_GAME_BG);
RemoveTask(TASK_NO_GAME_PAUSE);
ReleaseSprite();
SpraitCharClr();
Task.func = ClearEventTask;
Task.priority = TASK_NO_GAME_CLEAR_EVENT;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_CLEAR_EVENT;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "ClearEventTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
ExitTask(ip_task->id);
break;
default:
}
return TRUE;
}
static int AppearDantyouTask(TASK* ip_task)
{
static int AppearDantyouAnmTable[]={
BAND_CHAR_GAME_DANTYOU_BIG_00,
BAND_CHAR_GAME_DANTYOU_BIG_01,
};
TASK Task;
SPRITE_DATA SpData;
switch(ip_task->mode)
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
GameMgr.FadeFlag = FadeIn;
BGameMgr.AppearDantyou.Character.Anm.Data.no = 0;
BGameMgr.AppearDantyou.Character.Anm.Data.wt = 0;
BGameMgr.AppearDantyou.Character.Anm.Index = 0;
BGameMgr.AppearDantyou.Character.Pos.x = 0;
BGameMgr.AppearDantyou.Character.Pos.y = 0;
BGameMgr.AppearDantyou.Character.Pos.x = 0;
BGameMgr.AppearDantyou.Character.Pos.y = 0;
BGameMgr.AppearDantyou.Character.Pos.z = 0;
BGameMgr.AppearDantyou.Character.OPos.x = 0;
BGameMgr.AppearDantyou.Character.OPos.y = 0;
BGameMgr.AppearDantyou.Character.OPos.z = 0;
BGameMgr.AppearDantyou.WaitTimer = 0;
BGameMgr.AppearDantyou.WaitFlag = 0;
BGameMgr.Script.Flag= 1;
Task.func = ScriptTask;
Task.priority = TASK_NO_GAME_SCRIPT;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SCRIPT;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "ScriptTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = SCRIPT_LINE_2;
Task.user[1] = INIT_PLAY_DEMO_SCRIPT_BASE;
Task.user[2] = INIT_PLAY_DEMO_SCRIPT_NUM;
CreateTask(&Task);
break;
case TASK_MODE_MAIN:
if(!BGameMgr.AppearDantyou.WaitFlag){
if(++BGameMgr.AppearDantyou.WaitTimer > EVENT_APPEAR_DANTYOU_TIME)
{
if(!BGameMgr.Script.Flag){
BGameMgr.AppearDantyou.WaitFlag = 1;
Task.func = EventFadeOutTask;
Task.priority = TASK_NO_GAME_FADE;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_FADE;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "EventFadeOutTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = ip_task->id;
CreateTask(&Task);
}
}
}
if(++BGameMgr.AppearDantyou.Character.Anm.Data.wt>EVENT_SELECT_LEVEL_ANM_TIME){
BGameMgr.AppearDantyou.Character.Anm.Data.wt = 0;
BGameMgr.AppearDantyou.Character.Anm.Index ^=1;
}
SpData.No = AppearDantyouAnmTable[BGameMgr.AppearDantyou.Character.Anm.Index];
SpData.PosX = 96;
SpData.PosY = 56+42;
SpData.PosZ = PRIORITY_EVENT_BG-2;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_BG_MASK;
SpData.PosX = 88;
SpData.PosY = 12;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_BG_00;
SpData.PosX = 0;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_BG_01;
SpData.PosX = 256;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
break;
case TASK_MODE_EXIT:
MetuseijiFlag=OFF;
Task.func = DantyouTask;
Task.priority = TASK_NO_GAME_DANTYOU;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_DANTYOU;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "DantyouTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
Task.func = GameBgTask;
Task.priority = TASK_NO_GAME_BG;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_BG;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "GameBgTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
ExitTask(ip_task->id);
break;
default:
}
return TRUE;
}
static int DantyouTask(TASK* ip_task)
{
int i,dir;
SPRITE_DATA SpData;
TASK Task;
static int DantyouAnmTable[]={
BAND_CHAR_GAME_DANTYOU_00,BAND_CHAR_GAME_DANTYOU_01,
BAND_CHAR_GAME_DANTYOU_02,BAND_CHAR_GAME_DANTYOU_03,
BAND_CHAR_GAME_DANTYOU_04,BAND_CHAR_GAME_DANTYOU_05,
BAND_CHAR_GAME_DANTYOU_06,BAND_CHAR_GAME_DANTYOU_07,
};
static ANMDATA DoorAnmTable[]={
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_00_TIME },
{ BAND_CHAR_GAME_DOOR_01, DOOR_ANM_01_TIME },
{ BAND_CHAR_GAME_DOOR_02, DOOR_ANM_02_TIME },
{ BAND_CHAR_GAME_DOOR_02, DOOR_ANM_03_TIME },
{ BAND_CHAR_GAME_DOOR_01, DOOR_ANM_04_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ BAND_CHAR_GAME_DOOR_00, DOOR_ANM_05_TIME },
{ ANM_STOP,0 },
};
static ANMDATA DantyouOpenningTalkAnmTable[]={
{ BAND_CHAR_GAME_DANTYOU_BIG_00, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_01, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_00, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_01, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_00, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_01, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_00, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_01, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_00, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_01, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_00, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_01, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_00, 30 },
{ BAND_CHAR_GAME_DANTYOU_BIG_01, 30 },
{ ANM_STOP,0 },
};
static ARR_POS ClearAlignmenTable[]={
{ 3, 2 },{ 10, 2 },
{ 10, 2 },{ 3, 2 },
{ 3, 5 },{ 10, 5 },
{ 10, 5 },{ 3, 5 },
};
switch(ip_task->mode)
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
GameMgr.FadeFlag = FadeIn;
BGameMgr.Dantyou.Status = DANTYOU_APPEAR;
BGameMgr.Dantyou.Character.Anm.Data.no = BAND_CHAR_GAME_DANTYOU_00;
BGameMgr.Dantyou.Character.Anm.Data.wt = 0;
BGameMgr.Dantyou.Character.Anm.Index = 0;
BGameMgr.Dantyou.AnmBase = 0;
BGameMgr.Dantyou.AppearTimer = 0;
BGameMgr.Dantyou.DoorOpenTime = DOOR_ANM_00_TIME + DOOR_ANM_01_TIME + DOOR_ANM_02_TIME;
BGameMgr.Dantyou.DoorAnmIndex = 0;
BGameMgr.Dantyou.DoorAnmNo = DoorAnmTable[BGameMgr.Dantyou.DoorAnmIndex].no;
BGameMgr.Dantyou.DoorAnmWaitTimer = DoorAnmTable[BGameMgr.Dantyou.DoorAnmIndex].wt;
BGameMgr.Dantyou.AppearMode = 0;
BGameMgr.Dantyou.ClearArea = 0;
BGameMgr.Dantyou.ClearWaitTimer = CLEAR_WAIT_TIMER;
BGameMgr.Dantyou.Character.Pos.x = MAP_LEFT_X + (SQUARE_W * (7-1));
BGameMgr.Dantyou.Character.Pos.y = MAP_LEFT_Y + (SQUARE_H * (5-1))-SQUARE_H;
BGameMgr.Dantyou.Character.Pos.z = PRIORITY_GAME_BG-6;
BGameMgr.Dantyou.Character.OPos.x = 18;
BGameMgr.Dantyou.Character.OPos.y = 20;
BGameMgr.Dantyou.Index = START_POS_INDEX;
for(i=0;i<POS_ARR_NUM;i++){
BGameMgr.Dantyou.Xarr[i] = BGameMgr.Dantyou.Character.Pos.x;
BGameMgr.Dantyou.Yarr[i] = BGameMgr.Dantyou.Character.Pos.y;
}
BGameMgr.Dantyou.GetIndex = 0;
BGameMgr.Dantyou.Px = INIT_ARR_POSX;
BGameMgr.Dantyou.Py = INIT_ARR_POSY;
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveY = 0;
BGameMgr.Dantyou.MoveCount = 0;
InitMap();
ssPlaySe(BAND_SE_01);
Task.func = ScriptTask;
Task.priority = TASK_NO_GAME_SCRIPT;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SCRIPT;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "ScriptTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = SCRIPT_LINE_2;
Task.user[1] = DANTYOU_SPEAK_SCRIPT_BASE;
Task.user[2] = DANTYOU_SPEAK_SCRIPT_NUM;
CreateTask(&Task);
break;
case TASK_MODE_MAIN:
switch(BGameMgr.Dantyou.Status)
{
case DANTYOU_APPEAR:
if(BGameMgr.Dantyou.AppearMode==0)
{
SpData.No = BGameMgr.Dantyou.Character.Anm.Data.no;
SpData.PosX = BGameMgr.Dantyou.Character.Pos.x - BGameMgr.Dantyou.Character.OPos.x;
SpData.PosY = BGameMgr.Dantyou.Character.Pos.y - BGameMgr.Dantyou.Character.OPos.y;
SpData.PosZ = BGameMgr.Dantyou.Character.Pos.z;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
if(--BGameMgr.Dantyou.DoorOpenTime < 0)
{
BGameMgr.Dantyou.AppearMode=1;
BGameMgr.Dantyou.Character.Pos.x = (320-128)/2;
BGameMgr.Dantyou.Character.Pos.y = (240-128)/2 - 10;
BGameMgr.Dantyou.Character.Pos.z = PRIORITY_GAME_EFFECT;
BGameMgr.Dantyou.Character.Anm.Data.no = DantyouOpenningTalkAnmTable[BGameMgr.Dantyou.Character.Anm.Index].no;
BGameMgr.Dantyou.Character.Anm.Data.wt = DantyouOpenningTalkAnmTable[BGameMgr.Dantyou.Character.Anm.Index].wt;
}
}else
if(BGameMgr.Dantyou.AppearMode==1)
{
if(--BGameMgr.Dantyou.Character.Anm.Data.wt<0){
BGameMgr.Dantyou.Character.Anm.Index++;
BGameMgr.Dantyou.Character.Anm.Data.wt = DantyouOpenningTalkAnmTable[BGameMgr.Dantyou.Character.Anm.Index].wt;
}
if(DantyouOpenningTalkAnmTable[BGameMgr.Dantyou.Character.Anm.Index].no != ANM_STOP)
{
BGameMgr.Dantyou.Character.Anm.Data.no = DantyouOpenningTalkAnmTable[BGameMgr.Dantyou.Character.Anm.Index].no;
SpData.No = BGameMgr.Dantyou.Character.Anm.Data.no;
SpData.PosX = BGameMgr.Dantyou.Character.Pos.x;
SpData.PosY = BGameMgr.Dantyou.Character.Pos.y;
SpData.PosZ = BGameMgr.Dantyou.Character.Pos.z;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}else
{
ssPlayBgm(BGMIndexTable[BGameMgr.BgmIndex]);
MetuseijiFlag=OFF;
BGameMgr.Dantyou.Status = DANTYOU_WAIT;
BGameMgr.Dantyou.Character.Anm.Data.no = BAND_CHAR_GAME_DANTYOU_00;
BGameMgr.Dantyou.Character.Anm.Data.wt = DANTYOU_ANM_WAIT_TIME;
BGameMgr.Dantyou.Character.Anm.Index = 0;
BGameMgr.Dantyou.AnmBase = 0;
BGameMgr.Dantyou.Character.Pos.x = MAP_LEFT_X + (SQUARE_W * (INIT_ARR_POSX-1))+SQUARE_W/2;
BGameMgr.Dantyou.Character.Pos.y = MAP_LEFT_Y + (SQUARE_H * (INIT_ARR_POSY-1))+SQUARE_H/2;
BGameMgr.Dantyou.Character.Pos.z = PRIORITY_GAME_DANTYOU;
BGameMgr.Dantyou.Character.OPos.x = 18;
BGameMgr.Dantyou.Character.OPos.y = 20;
BGameMgr.Dantyou.Index = START_POS_INDEX;
for(i=0;i<POS_ARR_NUM;i++){
BGameMgr.Dantyou.Xarr[i] = BGameMgr.Dantyou.Character.Pos.x;
BGameMgr.Dantyou.Yarr[i] = BGameMgr.Dantyou.Character.Pos.y;
}
BGameMgr.Dantyou.GetIndex = 0;
BGameMgr.Dantyou.Px = INIT_ARR_POSX;
BGameMgr.Dantyou.Py = INIT_ARR_POSY;
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveY = 0;
BGameMgr.Dantyou.MoveCount = 0;
Task.func = DaninTask;
Task.priority = TASK_NO_GAME_DANIN;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_DANIN;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "DaninTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
Task.func = PauseTask;
Task.priority = TASK_NO_GAME_PAUSE;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_PAUSE;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "PauseTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}
}
if(--BGameMgr.Dantyou.DoorAnmWaitTimer < 0)
{
BGameMgr.Dantyou.DoorAnmIndex++;
BGameMgr.Dantyou.DoorAnmWaitTimer = DoorAnmTable[BGameMgr.Dantyou.DoorAnmIndex].wt;
}
if(DoorAnmTable[BGameMgr.Dantyou.DoorAnmIndex].no != ANM_STOP)
{
BGameMgr.Dantyou.DoorAnmNo = DoorAnmTable[BGameMgr.Dantyou.DoorAnmIndex].no;
}else
{
}
SpData.No = BGameMgr.Dantyou.DoorAnmNo;
SpData.PosX = 136;
SpData.PosY = 84;
SpData.PosZ = PRIORITY_GAME_BG-7;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_DOOR_03;
SpData.PosX = 136;
SpData.PosY = 84;
SpData.PosZ = PRIORITY_GAME_BG-5;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
break;
case DANTYOU_WAIT:
if( CheckKeyDir(&dir) )
{
switch( CheckCharacter(dir) )
{
case CHAR_NONE:
BGameMgr.Dantyou.Status = DANTYOU_WALK;
if(dir==KEY_DIR_UP){
if(--BGameMgr.Dantyou.Py < 1){
BGameMgr.Dantyou.Py=1;
}
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveY = -1;
BGameMgr.Dantyou.MoveCount = SQUARE_H;
BGameMgr.Dantyou.AnmBase = 4;
}else if(dir==KEY_DIR_DOWN){
if(++BGameMgr.Dantyou.Py >= SQUARE_H_NUM+1){
BGameMgr.Dantyou.Py=SQUARE_H_NUM-1+1;
}
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveY = 1;
BGameMgr.Dantyou.MoveCount = SQUARE_H;
BGameMgr.Dantyou.AnmBase = 0;
}else if(dir==KEY_DIR_LEFT){
if(--BGameMgr.Dantyou.Px < 1){
BGameMgr.Dantyou.Px=1;
}
BGameMgr.Dantyou.MoveX = -1;
BGameMgr.Dantyou.MoveY = 0;
BGameMgr.Dantyou.MoveCount = SQUARE_W;
BGameMgr.Dantyou.AnmBase = 6;
}else if(dir==KEY_DIR_RIGHT){
if(++BGameMgr.Dantyou.Px>=SQUARE_W_NUM+1){
BGameMgr.Dantyou.Px=SQUARE_W_NUM-1+1;
}
BGameMgr.Dantyou.MoveX = 1;
BGameMgr.Dantyou.MoveY = 0;
BGameMgr.Dantyou.MoveCount = SQUARE_W;
BGameMgr.Dantyou.AnmBase = 2;
}else{
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveY = 0;
}
break;
case CHAR_WALL:
BGameMgr.Dantyou.MoveX=0;
BGameMgr.Dantyou.MoveY=0;
break;
case CHAR_DANIN:
if(CheckDanin(dir))
{
GameMgr.WaitFlag = ON;
BGameMgr.Dantyou.Status = DANTYOU_CATCH_WALK;
if(++BGameMgr.GetNum>DANIN_NUM){
BGameMgr.GetNum = DANIN_NUM;
}
if(dir==KEY_DIR_UP){
if(--BGameMgr.Dantyou.Py < 1){
BGameMgr.Dantyou.Py=1;
}
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveY = -1;
BGameMgr.Dantyou.MoveCount = SQUARE_H;
BGameMgr.Dantyou.AnmBase = 4;
}else if(dir==KEY_DIR_DOWN){
if(++BGameMgr.Dantyou.Py >= SQUARE_H_NUM+1){
BGameMgr.Dantyou.Py=SQUARE_H_NUM-1+1;
}
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveY = 1;
BGameMgr.Dantyou.MoveCount = SQUARE_H;
BGameMgr.Dantyou.AnmBase = 0;
}else if(dir==KEY_DIR_LEFT){
if(--BGameMgr.Dantyou.Px < 1){
BGameMgr.Dantyou.Px=1;
}
BGameMgr.Dantyou.MoveX = -1;
BGameMgr.Dantyou.MoveY = 0;
BGameMgr.Dantyou.MoveCount = SQUARE_W;
BGameMgr.Dantyou.AnmBase = 6;
}else if(dir==KEY_DIR_RIGHT){
if(++BGameMgr.Dantyou.Px>=SQUARE_W_NUM+1){
BGameMgr.Dantyou.Px=SQUARE_W_NUM-1+1;
}
BGameMgr.Dantyou.MoveX = 1;
BGameMgr.Dantyou.MoveY = 0;
BGameMgr.Dantyou.MoveCount = SQUARE_W;
BGameMgr.Dantyou.AnmBase = 2;
}else{
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveY = 0;
}
}else
{
BGameMgr.Dantyou.Status = DANTYOU_WAIT;
}
break;
default:
break;
}
}else
{
}
break;
case DANTYOU_WALK:
BGameMgr.Dantyou.Character.Pos.x+=BGameMgr.Dantyou.MoveX;
BGameMgr.Dantyou.Character.Pos.y+=BGameMgr.Dantyou.MoveY;
BGameMgr.Dantyou.Xarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.x;
BGameMgr.Dantyou.Yarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.y;
BGameMgr.Dantyou.Index++;
if(--BGameMgr.Dantyou.MoveCount <= 0)
{
BGameMgr.Dantyou.Status = DANTYOU_WAIT;
}
break;
case DANTYOU_CATCH_WALK:
BGameMgr.Dantyou.Character.Pos.x+=BGameMgr.Dantyou.MoveX;
BGameMgr.Dantyou.Character.Pos.y+=BGameMgr.Dantyou.MoveY;
BGameMgr.Dantyou.Xarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.x;
BGameMgr.Dantyou.Yarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.y;
BGameMgr.Dantyou.Index++;
if(--BGameMgr.Dantyou.MoveCount <= 0)
{
BGameMgr.Dantyou.Status = DANTYOU_CATCH;
BGameMgr.Danin[BGameMgr.Dantyou.GetIndex].Status=DANIN_CATCH_WALK;
BGameMgr.Map.Data[BGameMgr.Danin[BGameMgr.Dantyou.GetIndex].Py][BGameMgr.Danin[BGameMgr.Dantyou.GetIndex].Px]=0;
if( ++BGameMgr.Dantyou.GetIndex > DANIN_NUM-1) BGameMgr.Dantyou.GetIndex=DANIN_NUM-1;
}
break;
case DANTYOU_CATCH:
break;
case DANTYOU_CATCH_WAIT:
BGameMgr.Dantyou.Status = DANTYOU_CATCH_END;
break;
case DANTYOU_CATCH_END:
BGameMgr.Dantyou.Status = DANTYOU_CATCH_END_WAIT;
dsPlayXa(XA_FILE_BAND04,XaCatchWaitTable[BGameMgr.BgmIndex]);
ssStopBgm(BGMIndexTable[BGameMgr.BgmIndex]);
if(++BGameMgr.BgmIndex >= MAX_BGM_NUM){
BGameMgr.BgmIndex = MAX_BGM_NUM-1;
}
ssPlaySe(BAND_SE_02);
break;
case DANTYOU_CATCH_END_WAIT:
if(BGameMgr.GetNum==DANIN_NUM)
{
BGameMgr.Dantyou.Status = DANTYOU_ALIGNMENT;
BGameMgr.Dantyou.Mode = MODE_ALIGNMENT_00;
}else
{
GameMgr.WaitFlag = OFF;
ssPlayBgm(BGMIndexTable[BGameMgr.BgmIndex]);
BGameMgr.Dantyou.Status = DANTYOU_WAIT;
}
break;
case DANTYOU_ALIGNMENT:
switch(BGameMgr.Dantyou.Mode)
{
case MODE_ALIGNMENT_00:
for(i=0;i<4;i++){
BGameMgr.Dantyou.AlignmentMoveArr[i] = 0;
}
BGameMgr.Dantyou.ClearArea = GetMapPos(BGameMgr.Dantyou.Px,BGameMgr.Dantyou.Py);
BGameMgr.Dantyou.AlignmentMoveArr[0] = ClearAlignmenTable[BGameMgr.Dantyou.ClearArea+NEXT_1].Px - BGameMgr.Dantyou.Px;
BGameMgr.Dantyou.AlignmentMoveArr[1] = ClearAlignmenTable[BGameMgr.Dantyou.ClearArea+NEXT_1].Py - BGameMgr.Dantyou.Py;
BGameMgr.Dantyou.AlignmentMoveArr[2] = ClearAlignmenTable[BGameMgr.Dantyou.ClearArea+NEXT_2].Px - ClearAlignmenTable[BGameMgr.Dantyou.ClearArea+NEXT_1].Px;
BGameMgr.Dantyou.AlignmentMoveArr[3] = ClearAlignmenTable[BGameMgr.Dantyou.ClearArea+NEXT_2].Py - ClearAlignmenTable[BGameMgr.Dantyou.ClearArea+NEXT_1].Py;
if(BGameMgr.Dantyou.AlignmentMoveArr[1] < 0){
BGameMgr.Dantyou.MoveY = -1;
BGameMgr.Dantyou.AnmBase = 0;
}else{
BGameMgr.Dantyou.MoveY = 1;
BGameMgr.Dantyou.AnmBase = 4;
}
BGameMgr.Dantyou.MoveX = 0;
BGameMgr.Dantyou.MoveCount = ABS(BGameMgr.Dantyou.AlignmentMoveArr[1])*SQUARE_H;
BGameMgr.Dantyou.Mode = MODE_ALIGNMENT_01;
break;
case MODE_ALIGNMENT_01:
BGameMgr.Dantyou.Character.Pos.x+=BGameMgr.Dantyou.MoveX;
BGameMgr.Dantyou.Character.Pos.y+=BGameMgr.Dantyou.MoveY;
BGameMgr.Dantyou.Xarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.x;
BGameMgr.Dantyou.Yarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.y;
BGameMgr.Dantyou.Index++;
if(--BGameMgr.Dantyou.MoveCount <= 0)
{
BGameMgr.Dantyou.Mode = MODE_ALIGNMENT_02;
if(BGameMgr.Dantyou.AlignmentMoveArr[0] < 0){
BGameMgr.Dantyou.MoveX = -1;
BGameMgr.Dantyou.AnmBase = 6;
}else{
BGameMgr.Dantyou.MoveX = 1;
BGameMgr.Dantyou.AnmBase = 2;
}
BGameMgr.Dantyou.MoveY = 0;
BGameMgr.Dantyou.MoveCount=ABS(BGameMgr.Dantyou.AlignmentMoveArr[0])*SQUARE_W;
}else
{
}
break;
case MODE_ALIGNMENT_02:
BGameMgr.Dantyou.Character.Pos.x+=BGameMgr.Dantyou.MoveX;
BGameMgr.Dantyou.Character.Pos.y+=BGameMgr.Dantyou.MoveY;
BGameMgr.Dantyou.Xarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.x;
BGameMgr.Dantyou.Yarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.y;
BGameMgr.Dantyou.Index++;
if(--BGameMgr.Dantyou.MoveCount <= 0)
{
BGameMgr.Dantyou.Mode = MODE_ALIGNMENT_03;
if(BGameMgr.Dantyou.AlignmentMoveArr[2] < 0){
BGameMgr.Dantyou.MoveX = -1;
BGameMgr.Dantyou.AnmBase = 6;
}else{
BGameMgr.Dantyou.MoveX = 1;
BGameMgr.Dantyou.AnmBase = 2;
}
BGameMgr.Dantyou.MoveY = 0;
BGameMgr.Dantyou.MoveCount=ABS(BGameMgr.Dantyou.AlignmentMoveArr[2])*SQUARE_W;
}else
{
}
break;
case MODE_ALIGNMENT_03:
BGameMgr.Dantyou.Character.Pos.x+=BGameMgr.Dantyou.MoveX;
BGameMgr.Dantyou.Character.Pos.y+=BGameMgr.Dantyou.MoveY;
BGameMgr.Dantyou.Xarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.x;
BGameMgr.Dantyou.Yarr[BGameMgr.Dantyou.Index%POS_ARR_NUM] = BGameMgr.Dantyou.Character.Pos.y;
BGameMgr.Dantyou.Index++;
if(--BGameMgr.Dantyou.MoveCount <= 0)
{
BGameMgr.Dantyou.Mode = MODE_ALIGNMENT_04;
}else
{
}
break;
case MODE_ALIGNMENT_04:
BGameMgr.Dantyou.Status = DANTYOU_CLEAR;
dsPlayXa(XA_FILE_BAND04,6);
break;
default:
}
break;
case DANTYOU_CLEAR:
if(--BGameMgr.Dantyou.ClearWaitTimer < 0)
{
BGameMgr.ClearFlag=1;
BGameMgr.Dantyou.Status = DANTYOU_CLEAR_END;
RemoveTask(TASK_NO_GAME_PAUSE);
if(++BGameMgr.PlayLevel>BAND_GAME_MAX_LEVEL_NUM-1){
BGameMgr.PlayLevel=BAND_GAME_MAX_LEVEL_NUM-1;
BGameMgr.AllClearFlag = 1;
}
if(BGameMgr.PlayLevel>BGameMgr.Level)
{
BGameMgr.Level=BGameMgr.PlayLevel;
}
}
break;
case DANTYOU_CLEAR_END:
break;
default:
}
if(BGameMgr.Dantyou.Status!=DANTYOU_APPEAR)
{
if(++BGameMgr.Dantyou.Character.Anm.Data.wt>DANTYOU_ANM_WAIT_TIME)
{
BGameMgr.Dantyou.Character.Anm.Index^=1;
BGameMgr.Dantyou.Character.Anm.Data.wt = 0;
}
BGameMgr.Dantyou.Character.Anm.Data.no = DantyouAnmTable[BGameMgr.Dantyou.AnmBase + BGameMgr.Dantyou.Character.Anm.Index];
SpData.No = BGameMgr.Dantyou.Character.Anm.Data.no;
SpData.PosX = BGameMgr.Dantyou.Character.Pos.x - BGameMgr.Dantyou.Character.OPos.x;
SpData.PosY = BGameMgr.Dantyou.Character.Pos.y - BGameMgr.Dantyou.Character.OPos.y;
SpData.PosZ = BGameMgr.Dantyou.Character.Pos.z;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
break;
case TASK_MODE_EXIT:
ExitTask(ip_task->id);
break;
default:
}
return TRUE;
}
int DaninTask(TASK* ip_task)
{
static int RandPtn;
SPRITE_DATA SpData;
int i,r1,r2;
int j,k;
static ANMDATA DaninAppearAnmTable[]={
{ BAND_CHAR_GAME_SMOKE_00, 12 },
{ BAND_CHAR_GAME_SMOKE_01, 12 },
{ BAND_CHAR_GAME_SMOKE_00, 12 },
{ BAND_CHAR_GAME_SMOKE_01, 12 },
{ ANM_STOP,0},
};
static int DaninAnmTable[][7][2]={
{
BAND_CHAR_GAME_DANIN_A_00,BAND_CHAR_GAME_DANIN_A_01,
BAND_CHAR_GAME_DANIN_B_00,BAND_CHAR_GAME_DANIN_B_01,
BAND_CHAR_GAME_DANIN_C_00,BAND_CHAR_GAME_DANIN_C_01,
BAND_CHAR_GAME_DANIN_D_00,BAND_CHAR_GAME_DANIN_D_01,
BAND_CHAR_GAME_DANIN_E_00,BAND_CHAR_GAME_DANIN_E_01,
BAND_CHAR_GAME_DANIN_F_00,BAND_CHAR_GAME_DANIN_F_01,
BAND_CHAR_GAME_DANIN_G_00,BAND_CHAR_GAME_DANIN_G_01,
},
{
BAND_CHAR_GAME_DANIN_A_00,BAND_CHAR_GAME_DANIN_A_01,
BAND_CHAR_GAME_DANIN_F_00,BAND_CHAR_GAME_DANIN_F_01,
BAND_CHAR_GAME_DANIN_D_00,BAND_CHAR_GAME_DANIN_D_01,
BAND_CHAR_GAME_DANIN_B_00,BAND_CHAR_GAME_DANIN_B_01,
BAND_CHAR_GAME_DANIN_G_00,BAND_CHAR_GAME_DANIN_G_01,
BAND_CHAR_GAME_DANIN_C_00,BAND_CHAR_GAME_DANIN_C_01,
BAND_CHAR_GAME_DANIN_E_00,BAND_CHAR_GAME_DANIN_E_01,
},
{
BAND_CHAR_GAME_DANIN_C_00,BAND_CHAR_GAME_DANIN_C_01,
BAND_CHAR_GAME_DANIN_A_00,BAND_CHAR_GAME_DANIN_A_01,
BAND_CHAR_GAME_DANIN_F_00,BAND_CHAR_GAME_DANIN_F_01,
BAND_CHAR_GAME_DANIN_B_00,BAND_CHAR_GAME_DANIN_B_01,
BAND_CHAR_GAME_DANIN_E_00,BAND_CHAR_GAME_DANIN_E_01,
BAND_CHAR_GAME_DANIN_D_00,BAND_CHAR_GAME_DANIN_D_01,
BAND_CHAR_GAME_DANIN_G_00,BAND_CHAR_GAME_DANIN_G_01,
},
{
BAND_CHAR_GAME_DANIN_F_00,BAND_CHAR_GAME_DANIN_F_01,
BAND_CHAR_GAME_DANIN_A_00,BAND_CHAR_GAME_DANIN_A_01,
BAND_CHAR_GAME_DANIN_B_00,BAND_CHAR_GAME_DANIN_B_01,
BAND_CHAR_GAME_DANIN_D_00,BAND_CHAR_GAME_DANIN_D_01,
BAND_CHAR_GAME_DANIN_G_00,BAND_CHAR_GAME_DANIN_G_01,
BAND_CHAR_GAME_DANIN_C_00,BAND_CHAR_GAME_DANIN_C_01,
BAND_CHAR_GAME_DANIN_E_00,BAND_CHAR_GAME_DANIN_E_01,
},
{
BAND_CHAR_GAME_DANIN_G_00,BAND_CHAR_GAME_DANIN_G_01,
BAND_CHAR_GAME_DANIN_B_00,BAND_CHAR_GAME_DANIN_B_01,
BAND_CHAR_GAME_DANIN_E_00,BAND_CHAR_GAME_DANIN_E_01,
BAND_CHAR_GAME_DANIN_C_00,BAND_CHAR_GAME_DANIN_C_01,
BAND_CHAR_GAME_DANIN_A_00,BAND_CHAR_GAME_DANIN_A_01,
BAND_CHAR_GAME_DANIN_F_00,BAND_CHAR_GAME_DANIN_F_01,
BAND_CHAR_GAME_DANIN_D_00,BAND_CHAR_GAME_DANIN_D_01,
},
};
switch(ip_task->mode)
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
BGameMgr.ProblemIndex = (rand()%10) + BGameMgr.PlayLevel*10;
for(i=0;i<DANIN_NUM;i++)
{
BGameMgr.Danin[i].Character.Anm.Index = 0;
BGameMgr.Danin[i].Character.Anm.Data.no = DaninAppearAnmTable[0].no;
BGameMgr.Danin[i].Character.Anm.Data.wt = DaninAppearAnmTable[0].wt;
BGameMgr.Danin[i].AnmBase = i*2;
BGameMgr.Danin[i].AppearTimer = 0;
BGameMgr.Danin[i].Index = DANIN_REFRANCE_INDEX*(1+i);
BGameMgr.Danin[i].EntryIndex = i;
BGameMgr.Danin[i].No = BandProblemTable[BGameMgr.ProblemIndex][i].No;
BGameMgr.Danin[i].Px = BandProblemTable[BGameMgr.ProblemIndex][i].PosX;
BGameMgr.Danin[i].Py = BandProblemTable[BGameMgr.ProblemIndex][i].PosY;
BGameMgr.Danin[i].CatchMoveIndex = 0;
BGameMgr.Danin[i].Status = DANIN_CATCH_APPEAR;
BGameMgr.Danin[i].Character.OPos.x = 15;
BGameMgr.Danin[i].Character.OPos.y = 20;
BGameMgr.Danin[i].Character.Pos.x = (MAP_LEFT_X + (SQUARE_W * (BGameMgr.Danin[i].Px))+SQUARE_W/2)-SQUARE_W;
BGameMgr.Danin[i].Character.Pos.y = (MAP_LEFT_Y + (SQUARE_H * (BGameMgr.Danin[i].Py))+SQUARE_H/2)-SQUARE_H;
BGameMgr.Danin[i].Character.Pos.z = PRIORITY_GAME_DANIN+5*i;
BGameMgr.Map.Data[BGameMgr.Danin[i].Py][BGameMgr.Danin[i].Px]=CHAR_DANIN;
}
RandPtn=rand()%5;
break;
case TASK_MODE_MAIN:
for(i=0;i<DANIN_NUM;i++)
{
switch(BGameMgr.Danin[i].Status)
{
case DANIN_CATCH_APPEAR:
if(--BGameMgr.Danin[i].Character.Anm.Data.wt<0)
{
BGameMgr.Danin[i].Character.Anm.Index++;
BGameMgr.Danin[i].Character.Anm.Data.wt = DaninAppearAnmTable[BGameMgr.Danin[i].Character.Anm.Index].wt;
}
if(DaninAppearAnmTable[BGameMgr.Danin[i].Character.Anm.Index].no!=ANM_STOP)
{
BGameMgr.Danin[i].Character.Anm.Data.no = DaninAppearAnmTable[BGameMgr.Danin[i].Character.Anm.Index].no;
}else
{
BGameMgr.Danin[i].Character.Anm.Data.no = i*2;
BGameMgr.Danin[i].Character.Anm.Data.wt = 0;
BGameMgr.Danin[i].Character.Anm.Index = 0;
BGameMgr.Danin[i].Status = DANIN_CATCH_WAIT;
BGameMgr.Danin[i].Character.OPos.x = 19;
BGameMgr.Danin[i].Character.OPos.y = 15;
}
break;
case DANIN_CATCH_WAIT:
break;
case DANIN_CATCH_WALK:
BGameMgr.Danin[i].Character.Pos.x = BGameMgr.Dantyou.Xarr[((BGameMgr.Dantyou.Index - 1 - BGameMgr.Danin[i].CatchMoveIndex) % POS_ARR_NUM)];
BGameMgr.Danin[i].Character.Pos.y = BGameMgr.Dantyou.Yarr[((BGameMgr.Dantyou.Index - 1 - BGameMgr.Danin[i].CatchMoveIndex) % POS_ARR_NUM)];
if(++BGameMgr.Danin[i].CatchMoveIndex == DANIN_REFRANCE_INDEX*(1+i) )
{
BGameMgr.Danin[i].Status=DANIN_WALK;
BGameMgr.Dantyou.Status = DANTYOU_CATCH_WAIT;
}
break;
case DANIN_WALK:
BGameMgr.Danin[i].Character.Pos.x = BGameMgr.Dantyou.Xarr[(BGameMgr.Dantyou.Index - BGameMgr.Danin[i].Index) % POS_ARR_NUM];
BGameMgr.Danin[i].Character.Pos.y = BGameMgr.Dantyou.Yarr[(BGameMgr.Dantyou.Index - BGameMgr.Danin[i].Index) % POS_ARR_NUM];
break;
case DANIN_CLEAR:
break;
default:
break;
}
if(BGameMgr.Danin[i].Status != DANIN_CATCH_APPEAR)
{
if(++BGameMgr.Danin[i].Character.Anm.Data.wt>DANIN_ANM_WAIT_TIME)
{
BGameMgr.Danin[i].Character.Anm.Index^=1;
BGameMgr.Danin[i].Character.Anm.Data.wt = 0;
}
BGameMgr.Danin[i].Character.Anm.Data.no = DaninAnmTable[RandPtn][i][BGameMgr.Danin[i].Character.Anm.Index];
}
SpData.No = BGameMgr.Danin[i].Character.Anm.Data.no;
SpData.PosX = BGameMgr.Danin[i].Character.Pos.x - BGameMgr.Danin[i].Character.OPos.x;
SpData.PosY = BGameMgr.Danin[i].Character.Pos.y - BGameMgr.Danin[i].Character.OPos.y;
SpData.PosZ = BGameMgr.Danin[i].Character.Pos.z;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
if(BGameMgr.Danin[i].Status != DANIN_CATCH_APPEAR)
{
DrawDaninNo(BGameMgr.Danin[i].No,
5,
DaninNoTable,
BGameMgr.Danin[i].Character.Pos.x - 9,
BGameMgr.Danin[i].Character.Pos.y - 4,
BGameMgr.Danin[i].Character.Pos.z-1);
}
}
break;
case TASK_MODE_EXIT:
ExitTask(ip_task->id);
break;
}
return TRUE;
}
static int GameBgTask(TASK* ip_task)
{
SPRITE_DATA SpData;
switch(ip_task->mode)
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
break;
case TASK_MODE_MAIN:
SpData.No = BAND_CHAR_GAME_DOOR_00;
SpData.PosX = 136;
SpData.PosY = 84;
SpData.PosZ = PRIORITY_GAME_BG-1;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_BG_00;
SpData.PosX = 0;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_GAME_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_BG_01;
SpData.PosX = 256;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_GAME_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
break;
case TASK_MODE_EXIT:
ExitTask(ip_task->id);
break;
default:
}
return TRUE;
}
static int SelectLevelTask(TASK* ip_task)
{
static int SelectLevelDantyouAnmTable[]={
BAND_CHAR_GAME_DANTYOU_BIG_00,
BAND_CHAR_GAME_DANTYOU_BIG_01,
};
SPRITE_DATA SpData;
TASK Task;
int i,j;
switch(ip_task->mode)
{
case TASK_MODE_INIT:
SpraitCharSet(&GaidoLevelSpControl00[0], NULL);
ip_task->mode = TASK_MODE_MAIN;
if((file_read(BandGameTextureFile[0].fn,LoadAddress)) == -1)
{
return FALSE;
}
TexInit( BAND_GAME_TIM_NUM, &BandGameTextureImage[BAND_GAME_TIM_POS] );
TimImgData = BandGameTextureImage;
BGameMgr.ContinueFlag = 0;
GameMgr.FadeFlag = FadeIn;
EntrySprite( BandGameSpriteData );
BGameMgr.PlayLevel = 0;
BGameMgr.SelectLevel.DantyouNo = 0;
BGameMgr.SelectLevel.DantyouWt = 0;
BGameMgr.SelectLevel.DantyouIndex = 0;
BGameMgr.SelectLevel.Mode = SELECT_LEVEL_MODE_00;
BGameMgr.SelectLevel.Timer = 0;
BGameMgr.SelectLevel.BlockNo = 0;
BGameMgr.SelectLevel.BlockWt = 0;
BGameMgr.SelectLevel.KeteiWt = 0;
BGameMgr.SelectLevel.KeteiFlushIndex = 0;
BGameMgr.SelectLevel.KeteiFlushWt = 0;
BGameMgr.SelectLevel.WaitFlag = 0;
BGameMgr.Script.Flag=1;
Task.func = ScriptTask;
Task.priority = TASK_NO_GAME_SCRIPT;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SCRIPT;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "ScriptTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = SCRIPT_LINE_1;
Task.user[1] = DANTYOU_SELECT_LEVEL_SCRIPT_BASE;
Task.user[2] = DANTYOU_SELECT_LEVEL_SCRIPT_NUM;
CreateTask(&Task);
break;
case TASK_MODE_MAIN:
SsinScriptFlag = BGameMgr.Script.Flag;
switch(BGameMgr.SelectLevel.Mode)
{
case SELECT_LEVEL_MODE_00:
if(!BGameMgr.Script.Flag){
BGameMgr.SelectLevel.Mode = SELECT_LEVEL_MODE_01;
}
for(i=0;i<BGameMgr.Level+1;i++)
{
for(j=0;j<5;j++)
{
if(j>i) continue;
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_PLATE;
SpData.PosX = 101 + 25*i;
SpData.PosY = 95 - 10*j;
SpData.PosZ = PRIORITY_EVENT_BG-1;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
}
break;
case SELECT_LEVEL_MODE_01:
if(JstPad & PADLright)
{
ssPlaySe(BUTONSE_LEVER);
if(++BGameMgr.PlayLevel>BGameMgr.Level){
BGameMgr.PlayLevel=0;
}
}else
if(JstPad & PADLleft){
ssPlaySe(BUTONSE_LEVER);
if(--BGameMgr.PlayLevel<0){
BGameMgr.PlayLevel=BGameMgr.Level;
}
}else{
}
if(JstPad & PADRright)
{
BGameMgr.SelectLevel.Mode=SELECT_LEVEL_MODE_02;
ssPlaySe(BUTONSE_MARU);
}
if( ++BGameMgr.SelectLevel.BlockWt > EVENT_SELECT_LEVEL_FLUSH_ANM_TIME)
{
BGameMgr.SelectLevel.BlockWt=0;
if(++BGameMgr.SelectLevel.BlockNo > BAND_GAME_MAX_LEVEL_NUM)
{
BGameMgr.SelectLevel.BlockNo=0;
}
}
for(i=0;i<BGameMgr.Level+1;i++)
{
for(j=0;j<5;j++)
{
if(j>i) continue;
if(BGameMgr.SelectLevel.BlockNo <= j) continue;
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_PLATE;
SpData.PosX = 101 + 25*i;
SpData.PosY = 95 - 10*j;
SpData.PosZ = PRIORITY_EVENT_BG-1;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
}
break;
case SELECT_LEVEL_MODE_02:
if(!BGameMgr.SelectLevel.WaitFlag)
{
if(++BGameMgr.SelectLevel.KeteiWt>EVENT_SELECT_LEVEL_KETEI_WAIT_TIME)
{
BGameMgr.SelectLevel.WaitFlag = 1;
Task.func = EventFadeOutTask;
Task.priority = TASK_NO_GAME_FADE;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_FADE;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "EventFadeOutTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = ip_task->id;
CreateTask(&Task);
}
}
if( ++BGameMgr.SelectLevel.KeteiFlushWt > EVENT_SELECT_LEVEL_KETEI_FLUSH_TIME ){
BGameMgr.SelectLevel.KeteiFlushWt = 0;
BGameMgr.SelectLevel.KeteiFlushIndex^=1;
}
if(BGameMgr.SelectLevel.KeteiFlushIndex){
for(i=0;i<5;i++)
{
if(BGameMgr.PlayLevel>=i){
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_PLATE;
SpData.PosX = 101 + 25*BGameMgr.PlayLevel;
SpData.PosY = 95 - 10*i;
SpData.PosZ = PRIORITY_EVENT_BG-1;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
}
}
break;
default:
}
if(++BGameMgr.SelectLevel.DantyouWt>EVENT_SELECT_LEVEL_ANM_TIME){
BGameMgr.SelectLevel.DantyouWt = 0;
BGameMgr.SelectLevel.DantyouIndex ^=1;
}
SpData.No = SelectLevelDantyouAnmTable[BGameMgr.SelectLevel.DantyouIndex];
SpData.PosX = 96;
SpData.PosY = 56+42;
SpData.PosZ = PRIORITY_EVENT_BG-2;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_PLATE_WAKU;
SpData.PosX = 100 + 25 * BGameMgr.PlayLevel;
SpData.PosY = 80 - 10 * BGameMgr.PlayLevel;
SpData.PosZ = PRIORITY_EVENT_BG-2;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_BG_00;
SpData.PosX = 0;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_GAME_LEVEL_SELECT_BG_01;
SpData.PosX = 256;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
break;
case TASK_MODE_EXIT:
MetuseijiFlag=OFF;
Task.func = GameControllTask;
Task.priority = TASK_NO_GAME_CONTROLL;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_CONTROLL;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "GameControllTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
ExitTask(ip_task->id);
break;
default:
}
}
static int PauseTask(TASK* ip_task)
{
SPRITE_DATA SpData;
TASK Task;
int ret;
switch( ip_task->mode )
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
ip_task->user[0] = 0;
GameMgr.WaitFlag = OFF;
break;
case TASK_MODE_MAIN:
if( !ip_task->user[0] )
{
ret = MainMenuCheck10();
if(ret==ON)
{
ip_task->user[0] = 1;
SleepTask(TASK_NO_GAME_DANTYOU);
SleepTask(TASK_NO_GAME_DANIN);
}else{
}
}else
{
ret = MainMenuCheck10();
if(ret==OFF)
{
ip_task->user[0] = 0;
WakeupTask(TASK_NO_GAME_DANTYOU);
WakeupTask(TASK_NO_GAME_DANIN);
}else
if(ret==MEIN_MENU_OWARI)
{
Task.func = PauseMenuFadeOutTask;
Task.priority = TASK_NO_GAME_FADE;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_FADE;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "PauseMenuFadeOutTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
ip_task->mode = TASK_MODE_EXIT;
}else{
}
}
break;
case TASK_MODE_EXIT:
GameMgr.WaitFlag = ON;
ExitTask(ip_task->id);
break;
default:
}
return TRUE;
}
static int ClearEventTask(TASK *ip_task)
{
TASK Task;
switch(ip_task->mode)
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
if((file_read(BandEventTextureFile[0].fn,LoadAddress)) == -1)
{
return FALSE;
}
TexInit( BAND_EVENT_TIM_NUM, &BandEventTextureImage[BAND_EVENT_TIM_POS] );
TimImgData = BandEventTextureImage;
EntrySprite( BandEventSpriteData );
BGameMgr.Event.BgNo = 0;
BGameMgr.Event.BgWt = 0;
BGameMgr.Event.DantyouNo = 0;
BGameMgr.Event.DantyouWt = 0;
BGameMgr.Event.Timer = 0;
BGameMgr.Event.EndFlag = 0;
BGameMgr.SelectContinue.Val = 0;
BGameMgr.SelectContinue.Type = SELECT_RETRY_H;
BGameMgr.SelectContinue.No = 0;
BGameMgr.SelectContinue.Wt = 0;
BGameMgr.SelectContinue.FadeFlag = 0;
Task.func = ScriptTask;
Task.priority = TASK_NO_GAME_SCRIPT;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SCRIPT;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "ScriptTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = SCRIPT_LINE_2;
Task.user[1] = DANTYOU_CLEAR_SCRIPT_BASE;
Task.user[2] = DANTYOU_CLEAR_SCRIPT_NUM;
CreateTask(&Task);
break;
case TASK_MODE_MAIN:
++BGameMgr.Event.Timer;
if(BGameMgr.Event.Timer>CLEAR_EVENT_END_TIME){
BGameMgr.Event.EndFlag=1;
}
ClearEventDantyou();
ClearEventBg();
if(BGameMgr.Event.EndFlag && BGameMgr.AllClearFlag)
{
ip_task->mode = TASK_MODE_EXIT;
}else
{
if(BGameMgr.Event.EndFlag)
{
if(SelectContinue(!BGameMgr.SelectContinue.FadeFlag))
{
if(!BGameMgr.SelectContinue.FadeFlag)
{
if((BGameMgr.SelectContinue.Val==0) && (BGameMgr.SelectContinue.Type==SELECT_RETRY_H))
{
BGameMgr.SelectContinue.FadeFlag = 1;
Task.func = EventFadeOutTask;
Task.priority = TASK_NO_GAME_FADE;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_FADE;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "EventFadeOutTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = ip_task->id;
CreateTask(&Task);
}else
if( (BGameMgr.SelectContinue.Val==1) && (BGameMgr.SelectContinue.Type==SELECT_RETRY_H))
{
BGameMgr.SelectContinue.Type =SELECT_END_H;
BGameMgr.SelectContinue.Val = 0;
}else
if((BGameMgr.SelectContinue.Type==SELECT_END_H) && (BGameMgr.SelectContinue.Val==0))
{
BGameMgr.SelectContinue.FadeFlag = 1;
Task.func = EventFadeOutTask;
Task.priority = TASK_NO_GAME_FADE;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_FADE;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "EventFadeOutTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = ip_task->id;
CreateTask(&Task);
}else
if((BGameMgr.SelectContinue.Type==SELECT_END_H) && (BGameMgr.SelectContinue.Val==1))
{
BGameMgr.SelectContinue.Type = SELECT_RETRY_H;
BGameMgr.SelectContinue.Val = 0;
}else
{
}
}
}else{
}
}
}
break;
case TASK_MODE_EXIT:
ReleaseSprite();
if(BGameMgr.AllClearFlag)
{
Task.func = AllClearEventTask;
Task.priority = TASK_NO_GAME_ALL_CLEAR_EVENT;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_ALL_CLEAR_EVENT;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "AllClearEventTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
if((BGameMgr.SelectContinue.Val==0) && (BGameMgr.SelectContinue.Type==SELECT_RETRY_H))
{
Task.func = SelectLevelTask;
Task.priority = TASK_NO_GAME_SELECT_LEVEL;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SELECT_LEVEL;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "SelectLevelTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
{
BGameMgr.ExitFlag=1;
}
ExitTask(ip_task->id);
break;
default:
}
}
static int AllClearEventTask(TASK *ip_task)
{
TASK Task;
int i;
switch(ip_task->mode)
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
#ifdef __DEBUG_BAND__
if((file_read(BandEventTextureFile[0].fn,LoadAddress)) == -1)
{
return FALSE;
}
TexInit( BAND_EVENT_TIM_NUM, &BandEventTextureImage[BAND_EVENT_TIM_POS] );
TimImgData = BandEventTextureImage;
#endif
EntrySprite( BandEventSpriteData );
for(i=0;i<10;i++)
{
BGameMgr.Event.Gakudanin[i].Status = InitDataAllClearGkudan[i].Status;
BGameMgr.Event.Gakudanin[i].ExitFlag = InitDataAllClearGkudan[i].ExitFlag;
BGameMgr.Event.Gakudanin[i].PosX = InitDataAllClearGkudan[i].PosX;
BGameMgr.Event.Gakudanin[i].PosY = InitDataAllClearGkudan[i].PosY;
BGameMgr.Event.Gakudanin[i].PosZ = InitDataAllClearGkudan[i].PosZ;
BGameMgr.Event.Gakudanin[i].DirX = InitDataAllClearGkudan[i].DirX;
BGameMgr.Event.Gakudanin[i].DirY = InitDataAllClearGkudan[i].DirY;
BGameMgr.Event.Gakudanin[i].Base = i*2;
BGameMgr.Event.Gakudanin[i].No = GakudaninAnmTable[BGameMgr.Event.Gakudanin[i].Base];
BGameMgr.Event.Gakudanin[i].Index = 0;
BGameMgr.Event.Gakudanin[i].Wt = 0;
BGameMgr.Event.Gakudanin[i].AppearWaitTime = InitDataAllClearGkudan[i].AppearWaitTime;
BGameMgr.Event.Gakudanin[i].MoveCount = 0;
BGameMgr.Event.Gakudanin[i].StopPosX = InitDataAllClearGkudan[i].StopPosX;
BGameMgr.Event.Gakudanin[i].StopPosY = InitDataAllClearGkudan[i].StopPosY;
}
BGameMgr.Event.Timer = 0;
BGameMgr.Event.EndFlag = 0;
BGameMgr.SelectContinue.Val = 0;
BGameMgr.SelectContinue.Type = SELECT_RETRY_H;
BGameMgr.SelectContinue.No = 0;
BGameMgr.SelectContinue.Wt = 0;
BGameMgr.SelectContinue.FadeFlag = 0;
Task.func = ScriptTask;
Task.priority = TASK_NO_GAME_SCRIPT;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SCRIPT;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "ScriptTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = SCRIPT_LINE_2;
Task.user[1] = DANTYOU_ALL_CLEAR_SCRIPT_BASE;
Task.user[2] = DANTYOU_ALL_CLEAR_SCRIPT_NUM;
CreateTask(&Task);
break;
case TASK_MODE_MAIN:
++BGameMgr.Event.Timer;
if(BGameMgr.Event.Timer>ALL_CLEAR_EVENT_END_TIME){
BGameMgr.Event.EndFlag=1;
}
AllClearEventGakudan();
AllClearEventBg();
if(BGameMgr.Event.EndFlag)
{
if(SelectContinue(!BGameMgr.SelectContinue.FadeFlag))
{
if(!BGameMgr.SelectContinue.FadeFlag)
{
if((BGameMgr.SelectContinue.Val==0) && (BGameMgr.SelectContinue.Type==SELECT_RETRY_H))
{
BGameMgr.SelectContinue.FadeFlag = 1;
Task.func = EventFadeOutTask;
Task.priority = TASK_NO_GAME_FADE;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_FADE;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "EventFadeOutTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = ip_task->id;
CreateTask(&Task);
}else
if( (BGameMgr.SelectContinue.Val==1) && (BGameMgr.SelectContinue.Type==SELECT_RETRY_H))
{
BGameMgr.SelectContinue.Type =SELECT_END_H;
BGameMgr.SelectContinue.Val = 0;
}else
if((BGameMgr.SelectContinue.Type==SELECT_END_H) && (BGameMgr.SelectContinue.Val==0))
{
BGameMgr.SelectContinue.FadeFlag = 1;
Task.func = EventFadeOutTask;
Task.priority = TASK_NO_GAME_FADE;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_FADE;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "EventFadeOutTask";
Task.mode = TASK_MODE_INIT;
Task.user[0] = ip_task->id;
CreateTask(&Task);
}else
if((BGameMgr.SelectContinue.Type==SELECT_END_H) && (BGameMgr.SelectContinue.Val==1))
{
BGameMgr.SelectContinue.Type = SELECT_RETRY_H;
BGameMgr.SelectContinue.Val = 0;
}else
{
}
}
}else{
}
}
break;
case TASK_MODE_EXIT:
ReleaseSprite();
if((BGameMgr.SelectContinue.Val==0) && (BGameMgr.SelectContinue.Type==SELECT_RETRY_H))
{
Task.func = SelectLevelTask;
Task.priority = TASK_NO_GAME_SELECT_LEVEL;
Task.attribute = ATTR_USER;
Task.status = TASK_NEW_ENTRY;
Task.id = TASK_NO_GAME_SELECT_LEVEL;
Task.wait_time = 0;
Task.buf = NULL;
Task.name = "SelectLevelTask";
Task.mode = TASK_MODE_INIT;
CreateTask(&Task);
}else
{
BGameMgr.ExitFlag=1;
}
ExitTask(ip_task->id);
break;
default:
}
}
static int EventFadeOutTask(TASK* ip_task)
{
TASK* pTask;
switch( ip_task->mode )
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
GameMgr.FadeFlag = FadeOut;
break;
case TASK_MODE_MAIN:
if(GameMgr.FadeFlag==FadeOutOk){
ip_task->mode = TASK_MODE_EXIT;
}
break;
case TASK_MODE_EXIT:
pTask = SearchTask(ip_task->user[0]);
if(pTask!=NULL){
pTask->mode = TASK_MODE_EXIT;
}
ExitTask(ip_task->id);
break;
default:
}
return TRUE;
}
static int PauseMenuFadeOutTask(TASK* ip_task)
{
switch( ip_task->mode )
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
GameMgr.FadeFlag = FadeOut;
break;
case TASK_MODE_MAIN:
if(GameMgr.FadeFlag==FadeOutOk){
ip_task->mode = TASK_MODE_EXIT;
}
break;
case TASK_MODE_EXIT:
BGameMgr.ExitFlag = 1;
ExitTask(ip_task->id);
break;
default:
}
return TRUE;
}
static int ScriptTask(TASK* ip_task)
{
switch( ip_task->mode )
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
BGameMgr.Script.Flag = 1;
BGameMgr.Script.Index = 0;
BGameMgr.Script.Line = ip_task->user[0];
BGameMgr.Script.Base = ip_task->user[1];
BGameMgr.Script.Num = ip_task->user[2];
ip_task->user[0] = 0;
ip_task->user[1] = GET_DA_STATUS_WAIT_TIME*3;
break;
case TASK_MODE_MAIN:
switch(ip_task->user[0])
{
case 0:
if(MetuseijiFlag==OFF)
{
switch(BGameMgr.Script.Line)
{
case SCRIPT_LINE_1:
MenuMessageSet10(&BandScript[BGameMgr.Script.Base + BGameMgr.Script.Index]);
break;
case SCRIPT_LINE_2:
MenuMessageSet20(&BandScript[BGameMgr.Script.Base + BGameMgr.Script.Index]);
break;
case SCRIPT_LINE_3:
MenuMessageSet30(&BandScript[BGameMgr.Script.Base + BGameMgr.Script.Index]);
break;
default:
}
if(++BGameMgr.Script.Index >= BGameMgr.Script.Num){
ip_task->user[0] = 1;
}
}
break;
case 1:
if(--ip_task->user[1]<=0){
if(dSoundStatus == DslStatStandby){
ip_task->mode = TASK_MODE_EXIT;
}
}
break;
default:
}
break;
case TASK_MODE_EXIT:
BGameMgr.Script.Flag = 0;
ExitTask(ip_task->id);
break;
default:
}
return TRUE;
}
static int CheckKeyDir(int *ip_dir)
{
if(NewPad & PADLup){
*ip_dir=KEY_DIR_UP;
return TRUE;
}else
if(NewPad & PADLdown){
*ip_dir=KEY_DIR_DOWN;
return TRUE;
}
else
if(NewPad & PADLleft){
*ip_dir=KEY_DIR_LEFT;
return TRUE;
}
else
if(NewPad & PADLright){
*ip_dir=KEY_DIR_RIGHT;
return TRUE;
}else{
*ip_dir=KEY_DIR_NOTHING;
return FALSE;
}
}
static int CheckCharacter(int i_dir)
{
int ofx,ofy;
switch(i_dir)
{
case KEY_DIR_UP:
ofx=0;
ofy=-1;
break;
case KEY_DIR_DOWN:
ofx=0;
ofy=1;
break;
case KEY_DIR_LEFT:
ofx=-1;
ofy=0;
break;
case KEY_DIR_RIGHT:
ofx=1;
ofy=0;
break;
default:
ofx=0;
ofy=0;
break;
}
switch( BGameMgr.Map.Data[BGameMgr.Dantyou.Py+ofy][BGameMgr.Dantyou.Px+ofx] )
{
case CHAR_NONE:
return CHAR_NONE;
break;
case CHAR_WALL:
return CHAR_WALL;
break;
case CHAR_DANIN:
return CHAR_DANIN;
break;
default:
return CHAR_WALL;
break;
}
}
static int CheckDanin(int i_dir)
{
int ofx,ofy,i;
switch(i_dir)
{
case KEY_DIR_UP:
ofx=0;
ofy=-1;
break;
case KEY_DIR_DOWN:
ofx=0;
ofy=1;
break;
case KEY_DIR_LEFT:
ofx=-1;
ofy=0;
break;
case KEY_DIR_RIGHT:
ofx=1;
ofy=0;
break;
default:
ofx=0;
ofy=0;
break;
}
for(i=0;i<DANIN_NUM;i++)
{
if( BGameMgr.Danin[i].Py == BGameMgr.Dantyou.Py+ofy && BGameMgr.Danin[i].Px == BGameMgr.Dantyou.Px+ofx)
{
if( BGameMgr.Danin[i].EntryIndex == BGameMgr.Dantyou.GetIndex )
{
return TRUE;
}
}
}
return FALSE;
}
static void InitMap(void)
{
memcpy(BGameMgr.Map.Data,InitMapData, (SQUARE_W_NUM+2)*(SQUARE_H_NUM+2) );
}
static void DrawDaninNo(int i_num,int i_wsize,int *ip_numtbl,int i_x,int i_y,int i_z)
{
int i,bx,by,offsetx;
int numarr[3];
SPRITE_DATA SpData;
if(i_num>99) i_num=99;
if(i_num<0) i_num=0;
offsetx=0;
if(i_num<10) offsetx=-2;
numarr[0] = i_num/100;
numarr[1] = (i_num-numarr[0]*100)/10;
numarr[2] = (i_num-numarr[0]*100-numarr[1]*10)/1;
bx=i_x;
by=i_y;
for(i=0;i<3;i++){
if(numarr[i]==0){
if(i==0)
{
bx+=i_wsize;
}else if(i==1)
{
if(i_num<100)
{
bx+=i_wsize;
}else
{
SpData.No = ip_numtbl[0];
SpData.PosX = bx;
SpData.PosY = by;
SpData.PosZ = i_z;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
bx+=i_wsize;
}
}else if(i==2)
{
SpData.No = ip_numtbl[0];
SpData.PosX = bx+offsetx;
SpData.PosY = by;
SpData.PosZ = i_z;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
}else{
SpData.No = ip_numtbl[numarr[i]];
SpData.PosX = bx+offsetx;
SpData.PosY = by;
SpData.PosZ = i_z;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
bx+=i_wsize;
}
}
}
static int GetMapPos(int i_x,int i_y)
{
if( i_x>=1 && i_x<=6 )
{
if( i_y>=1 && i_y<=3 )
{
return MAP_AREA_00;
}else
if( i_y>=4 && i_y<=6 )
{
return MAP_AREA_02;
}else
{
return MAP_AREA_FALSE;
}
}else
if( i_x>=7 && i_x<=12 )
{
if( i_y>=1 && i_y<=3 )
{
return MAP_AREA_01;
}else
if( i_y>=4 && i_y<=6 )
{
return MAP_AREA_03;
}else
{
return MAP_AREA_FALSE;
}
}else
{
return MAP_AREA_FALSE;
}
}
static void ClearEventDantyou(void)
{
static int ClearEventDantyouAnmTable[]={
BAND_CHAR_EVENT_CLEAR_DANTYOU_00,
BAND_CHAR_EVENT_CLEAR_DANTYOU_01,
};
SPRITE_DATA SpData;
if(++BGameMgr.Event.DantyouWt>CLEAR_EVENT_DANTYOU_CHANGE_TIMER){
BGameMgr.Event.DantyouWt = 0;
BGameMgr.Event.DantyouNo ^=1;
}
SpData.No = ClearEventDantyouAnmTable[BGameMgr.Event.DantyouNo];
SpData.PosX = 96;
SpData.PosY = 56;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
static void AllClearEventGakudan(void)
{
SPRITE_DATA SpData;
int i;
for(i=0;i<10;i++)
{
switch(BGameMgr.Event.Gakudanin[i].Status)
{
case ALL_CLEAR_EVENT_GAKUDANIN_WAIT:
if(--BGameMgr.Event.Gakudanin[i].AppearWaitTime<0)
{
BGameMgr.Event.Gakudanin[i].ExitFlag = 1;
BGameMgr.Event.Gakudanin[i].Status=ALL_CLEAR_EVENT_GAKUDANIN_MOVE;
}
break;
case ALL_CLEAR_EVENT_GAKUDANIN_MOVE:
BGameMgr.Event.Gakudanin[i].PosX += BGameMgr.Event.Gakudanin[i].DirX*2;
BGameMgr.Event.Gakudanin[i].PosY += BGameMgr.Event.Gakudanin[i].DirY*2;
if( (BGameMgr.Event.Gakudanin[i].PosX == BGameMgr.Event.Gakudanin[i].StopPosX) ){
BGameMgr.Event.Gakudanin[i].Status = ALL_CLEAR_EVENT_GAKUDANIN_STOP;
}
break;
case ALL_CLEAR_EVENT_GAKUDANIN_STOP:
break;
default:
}
if(++BGameMgr.Event.Gakudanin[i].Wt > ALL_CLEAR_EVENT_GAKUDANIN_ANM_TIME)
{
BGameMgr.Event.Gakudanin[i].Wt=0;
BGameMgr.Event.Gakudanin[i].Index ^= 1;
}
if(BGameMgr.Event.Gakudanin[i].ExitFlag)
{
SpData.No = BGameMgr.Event.Gakudanin[i].No+BGameMgr.Event.Gakudanin[i].Index;
SpData.PosX = BGameMgr.Event.Gakudanin[i].PosX;
SpData.PosY = BGameMgr.Event.Gakudanin[i].PosY;
SpData.PosZ = BGameMgr.Event.Gakudanin[i].PosZ;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
}
}
static void ClearEventBg(void)
{
SPRITE_DATA SpData;
if(++BGameMgr.Event.BgWt>CLEAR_EVENT_BG_CHANGE_TIMER){
BGameMgr.Event.BgWt = 0;
BGameMgr.Event.BgNo^=1;
}
if(BGameMgr.Event.BgNo){
SpData.No = BAND_CHAR_EVENT_CLEAR_BG_00;
SpData.PosX = 0;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_EVENT_CLEAR_BG_02;
SpData.PosX = 256;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}else{
SpData.No = BAND_CHAR_EVENT_CLEAR_BG_01;
SpData.PosX = 0;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_EVENT_CLEAR_BG_03;
SpData.PosX = 256;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
}
static void AllClearEventBg(void)
{
SPRITE_DATA SpData;
SpData.No = BAND_CHAR_EVENT_ALLCLEAR_BG_00;
SpData.PosX = 0;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG_FRONT;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_EVENT_ALLCLEAR_BG_01;
SpData.PosX = 68;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_EVENT_ALLCLEAR_BG_02;
SpData.PosX = 252;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG_FRONT;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_EVENT_ALLCLEAR_BG_03;
SpData.PosX = 256;
SpData.PosY = 0;
SpData.PosZ = PRIORITY_EVENT_BG_FRONT;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
}
static int SelectContinue(int i_flag)
{
static int BupeAnmTable[] ={
BAND_CHAR_EVENT_SELECT_CONTINUE_BUPE_00,BAND_CHAR_EVENT_SELECT_CONTINUE_BUPE_01,
};
static int MaruBatuTable[]={
BAND_CHAR_EVENT_SELECT_CONTINUE_YES_LIGHT, BAND_CHAR_EVENT_SELECT_CONTINUE_NO_DARK,
BAND_CHAR_EVENT_SELECT_CONTINUE_YES_DARK, BAND_CHAR_EVENT_SELECT_CONTINUE_NO_LIGHT,
};
SPRITE_DATA SpData;
int o_ret;
if(i_flag){
o_ret=FALSE;
if(JstPad & PADRright){
ssPlaySe(BUTONSE_MARU);
o_ret=TRUE;
}
if(JstPad & PADLright || JstPad & PADLleft){
BGameMgr.SelectContinue.Val^=1;
ssPlaySe(BUTONSE_LEVER);
}
}
SpData.No = MaruBatuTable[BGameMgr.SelectContinue.Val*2];
SpData.PosX = 68+72;
SpData.PosY = 73+57;
SpData.PosZ = PRIORITY_EVENT_MENU-2;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = MaruBatuTable[BGameMgr.SelectContinue.Val*2+1];
SpData.PosX = 68+126;
SpData.PosY = 73+57;
SpData.PosZ = PRIORITY_EVENT_MENU-2;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
switch(BGameMgr.SelectContinue.Type)
{
case SELECT_RETRY_H:
SpData.No = BAND_CHAR_EVENT_SELECT_CONTINUE_RETRY_H;
SpData.PosX = 68+20;
SpData.PosY = 73+20;
SpData.PosZ = PRIORITY_EVENT_MENU-2;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
break;
case SELECT_END_H:
SpData.No = BAND_CHAR_EVENT_SELECT_CONTINUE_END_H;
SpData.PosX = 68+20;
SpData.PosY = 73+20;
SpData.PosZ = PRIORITY_EVENT_MENU-2;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
break;
case SELECT_CONTINUE_H:
SpData.No = BAND_CHAR_EVENT_SELECT_CONTINUE_CONTINUE_H;
SpData.PosX = 68+20;
SpData.PosY = 73+20;
SpData.PosZ = PRIORITY_EVENT_MENU-2;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
break;
default:
}
if(++BGameMgr.SelectContinue.Wt>SELECT_LEVEL_PUPE_ANM_TIME){
BGameMgr.SelectContinue.No^=1;
BGameMgr.SelectContinue.Wt=0;
}
SpData.No = BupeAnmTable[BGameMgr.SelectContinue.No];
SpData.PosX = 68+12;
SpData.PosY = 73+34;
SpData.PosZ = PRIORITY_EVENT_MENU-10;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_EVENT_SELECT_CONTINUE_PLATE;
SpData.PosX = 68;
SpData.PosY = 73;
SpData.PosZ = PRIORITY_EVENT_MENU;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_EVENT_SELECT_CONTINUE_ERABU;
SpData.PosX = (320-130)/2;
SpData.PosY = 206;
SpData.PosZ = PRIORITY_EVENT_MENU-1;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
SpData.No = BAND_CHAR_EVENT_SELECT_CONTINUE_KETEI;
SpData.PosX = (320-130)/2+78;
SpData.PosY = 206;
SpData.PosZ = PRIORITY_EVENT_MENU-1;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
return o_ret;
}
#ifdef __DEBUG_BAND__
static int DebugGameSpriteTask(TASK* ip_task)
{
static int SpIndex;
static int SpEntryNum;
static int Counter;
static int FlushFlag;
SPRITE_DATA SpData;
switch(ip_task->mode)
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
if((file_read(BandGameTextureFile[0].fn,LoadAddress)) == -1)
{
return FALSE;
}
TexInit( BAND_GAME_TIM_NUM, &BandGameTextureImage[BAND_GAME_TIM_POS] );
TimImgData = BandGameTextureImage;
ReleaseSprite();
EntrySprite( BandGameSpriteData );
GameMgr.FadeFlag = FadeIn;
SpIndex = 0;
SpEntryNum = GetEntrySpriteNum();
Counter = 0;
FlushFlag = 0;
break;
case TASK_MODE_MAIN:
if( JstPad & PADLdown ){
SpIndex++;
if(SpIndex > SpEntryNum-1) SpIndex = 0;
}else
if( JstPad & PADLup ){
SpIndex--;
if( SpIndex < 0 ) SpIndex = SpEntryNum-1;
}else{
}
if(JstPad & PADRright)
{
FlushFlag^=1;
}
if(FlushFlag) GsSortBoxFill(&BoxDataBlack, &Wot[active], 4);
else GsSortBoxFill(&BoxDataWhite, &Wot[active], 4);
SpData.No = SpIndex;
SpData.PosX = (320 - BandGameSpriteData[SpIndex].Width) / 2;
SpData.PosY = (240 - BandGameSpriteData[SpIndex].Height) / 2;
SpData.PosZ = 10;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
FntPrint("SNO=%d/%d\n", SpIndex,SpEntryNum-1 );
FntPrint("OfX=%d\n", BandGameSpriteData[SpIndex].OffSetX );
FntPrint("OfY=%d\n", BandGameSpriteData[SpIndex].OffSetY );
FntPrint("W__=%d\n", BandGameSpriteData[SpIndex].Width );
FntPrint("H__=%d\n", BandGameSpriteData[SpIndex].Height );
FntPrint("PNO=%d\n", BandGameSpriteData[SpIndex].PaletteNo );
FntPrint("CNT=%d\n", ++Counter );
break;
case TASK_MODE_EXIT:
ExitTask(ip_task->id);
break;
default:
break;
}
return TRUE;
}
static int DebugEventSpriteTask(TASK* ip_task)
{
static int SpIndex;
static int SpEntryNum;
static int Counter;
static int FlushFlag;
SPRITE_DATA SpData;
switch(ip_task->mode)
{
case TASK_MODE_INIT:
ip_task->mode = TASK_MODE_MAIN;
if((file_read(BandEventTextureFile[0].fn,LoadAddress)) == -1)
{
return FALSE;
}
TexInit( BAND_EVENT_TIM_NUM, &BandEventTextureImage[BAND_EVENT_TIM_POS] );
TimImgData = BandEventTextureImage;
ReleaseSprite();
EntrySprite( BandEventSpriteData );
GameMgr.FadeFlag = FadeIn;
SpIndex = 0;
SpEntryNum = GetEntrySpriteNum();
Counter = 0;
FlushFlag = 0;
break;
case TASK_MODE_MAIN:
if( JstPad & PADLdown ){
SpIndex++;
if(SpIndex > SpEntryNum-1) SpIndex = 0;
}else
if( JstPad & PADLup ){
SpIndex--;
if( SpIndex < 0 ) SpIndex = SpEntryNum-1;
}else{
}
if(JstPad & PADRright)
{
FlushFlag^=1;
}
if(FlushFlag) GsSortBoxFill(&BoxDataBlack, &Wot[active], 4);
else GsSortBoxFill(&BoxDataWhite, &Wot[active], 4);
SpData.No = SpIndex;
SpData.PosX = (320 - BandEventSpriteData[SpIndex].Width) / 2;
SpData.PosY = (240 - BandEventSpriteData[SpIndex].Height) / 2;
SpData.PosZ = 10;
SpData.ScaleX = SCALE10;
SpData.ScaleY = SCALE10;
SpData.Rotate = ROTATE000;
SpData.Reverse = NOREVERS;
DrawSprite( &SpData );
FntPrint("SNO=%d/%d\n", SpIndex,SpEntryNum-1 );
FntPrint("OfX=%d\n", BandEventSpriteData[SpIndex].OffSetX );
FntPrint("OfY=%d\n", BandEventSpriteData[SpIndex].OffSetY );
FntPrint("W__=%d\n", BandEventSpriteData[SpIndex].Width );
FntPrint("H__=%d\n", BandEventSpriteData[SpIndex].Height );
FntPrint("PNO=%d\n", BandEventSpriteData[SpIndex].PaletteNo );
FntPrint("CNT=%d\n", ++Counter );
break;
case TASK_MODE_EXIT:
ExitTask(ip_task->id);
break;
default:
break;
}
return TRUE;
}
#endif