sm64/fileselect.c

1111 lines
37 KiB
C

/********************************************************************************
Ultra 64 MARIO Brothers
File Select Stage Strategy & main
Copyright 1995 Nintendo co., ltd. All rights reserved
December 28, 1995
********************************************************************************/
#include "headers.h"
#include "include/iwa_select.h"
#define state_flag stw_work0
#define counter stw_work1
#define str_x stw_work2
#define str_y stw_work3
#define str_z stw_work4
#define str_scale stw_work5
#define bu_mode s[stw_work6].d
#define SCALE 6.0
static StrategyRecord* buttonData[32];
static char selectNo = -1;
#if CHINA
static char pageNo = 0;
#endif
static char Floor = 1;
static unsigned char alpha_value = 0; // Font Alpha Value
static float cursol_pos[2] = {0,0};
static short cursol_flag = 0;
static short cursol_ptr[2] = {-10000,-10000};
extern unsigned long e_button1[];
extern unsigned long e_itest2[];
static char click_file = -1;
static char click_flag = 0;
static char click_mess = 0;
static unsigned char click_alpha = 0;
static short click_counter = 0;
static char sound_flag = 0; // 0->STEREO 1->MONORAL 2->HEADPHON
static unsigned char blink_alpha[2];
static char yesNo_flag = 0; //1--> Yes 2--> No
static char fileFlow_flag = 0;
static char goTogame = 0;
static char score_flag = 0; // MYSCORE HISCORE ChangeFlag
/*==============================================================================*/
/* Button Strategy. */
/*==============================================================================*/
/********************************************************************************/
/* stop. */
/********************************************************************************/
extern void s_istop_init()
{
execstp->s[stw_animeangleY].d = 0x8000;
execstp->s[str_scale].f = 9;
}
extern void s_istop_main()
{
s_set_scale(9.0);
}
/*------------------------------------------------------------------------------*/
/* Button1. */
/*------------------------------------------------------------------------------*/
/********************************************************************************/
/* Button Click Check. */
/********************************************************************************/
static char ButtonClickCheck(short posx,short posy,float offt)
{
float ans = 52.4213;
float orthoX = ((160.*(float)(posx))/(ans*offt));
float orthoY = ((120.*(float)(posy))/((ans*3/4)*offt));
short maxX = orthoX + 25;
short minX = orthoX - 25;
short maxY = orthoY + 21;
short minY = orthoY - 21;
// rmonpf(("x %f\n", orthoX));
// rmonpf(("y %f\n\n",orthoY));
if ((cursol_ptr[0]<maxX && cursol_ptr[0]>minX) && (cursol_ptr[1]<maxY && cursol_ptr[1]>minY)) {
return(1);
}
return(0);
}
/********************************************************************************/
/* Button Click Event 1. (end is 16 Frame) */
/********************************************************************************/
static void ClickButtonEvent1(StrategyRecord* execstp)
{
/*-------------- Angle Y-----------------------*/
if ((execstp->s[counter].d) < 0x10) (execstp->s[stw_animeangleY].d) += 0x800;
/*-------------- Angle X-----------------------*/
if ((execstp->s[counter].d) < 0x8) (execstp->s[stw_animeangleX].d) += 0x800;
if ((execstp->s[counter].d) >= 0x8 && (execstp->s[counter].d) < 0x10) (execstp->s[stw_animeangleX].d) -= 0x800;
/*-------------- Move -----------------------*/
execstp->s[stw_skeletonX].f -= (execstp->s[str_x].f/16.);
execstp->s[stw_skeletonY].f -= (execstp->s[str_y].f/16.);
if (execstp->s[stw_worldZ].f < (execstp->s[str_z].f + 17800.0)) {
execstp->s[stw_skeletonZ].f += 1112.5;
}
(execstp->s[counter].d)++;
if ((execstp->s[counter].d == 16) ) {
execstp->s[stw_skeletonX].f = 0;
execstp->s[stw_skeletonY].f = 0;
execstp->s[state_flag].d = 2;
execstp->s[counter].d = 0;
}
}
/****************************************************************************************************/
/* Button Click Cancel 1. (end is 16 Frame) */
/***************************************************************************************************/
static void ClickButtonCancel1(StrategyRecord* execstp)
{
/*-------------- Angle Y-----------------------*/
if ((execstp->s[counter].d) < 0x10) (execstp->s[stw_animeangleY].d) -= 0x800;
/*-------------- Angle X-----------------------*/
if ((execstp->s[counter].d) < 0x8) (execstp->s[stw_animeangleX].d) -= 0x800;
if ((execstp->s[counter].d) >= 0x8 && (execstp->s[counter].d) < 0x10) (execstp->s[stw_animeangleX].d) += 0x800;
/*-------------- Move -----------------------*/
execstp->s[stw_skeletonX].f += execstp->s[str_x].f/16.;
execstp->s[stw_skeletonY].f += execstp->s[str_y].f/16.;
if (execstp->s[stw_worldZ].f > execstp->s[str_z].f) {
execstp->s[stw_skeletonZ].f -= 1112.5;
}
(execstp->s[counter].d)++;
if ((execstp->s[counter].d == 16) ) {
execstp->s[stw_skeletonX].f = execstp->s[str_x].f;
execstp->s[stw_skeletonY].f = execstp->s[str_y].f;
execstp->s[state_flag].d = 0;
execstp->s[counter].d = 0;
}
}
/********************************************************************************/
/* Button Click Event 2. (end is 16 Frame) */
/********************************************************************************/
static void ClickButtonEvent2(StrategyRecord* execstp)
{
/*-------------- Angle Y-----------------------*/
if ((execstp->s[counter].d) < 0x10) (execstp->s[stw_animeangleY].d) += 0x800;
/*-------------- Angle X-----------------------*/
if ((execstp->s[counter].d) < 0x8) (execstp->s[stw_animeangleX].d) += 0x800;
if ((execstp->s[counter].d) >= 0x8 && (execstp->s[counter].d) < 0x10) (execstp->s[stw_animeangleX].d) -= 0x800;
/*-------------- Move -----------------------*/
execstp->s[stw_skeletonX].f -= (execstp->s[str_x].f/16.);
execstp->s[stw_skeletonY].f -= (execstp->s[str_y].f/16.);
execstp->s[stw_skeletonZ].f -= 116.25; // oya tono kyori 1860
(execstp->s[counter].d)++;
if ((execstp->s[counter].d == 16) ) {
execstp->s[stw_skeletonX].f = 0;
execstp->s[stw_skeletonY].f = 0;
execstp->s[state_flag].d = 2;
execstp->s[counter].d = 0;
}
}
/****************************************************************************************************/
/* Button Click Cancel 2. */
/***************************************************************************************************/
static void ClickButtonCancel2(StrategyRecord* execstp)
{
/*-------------- Angle Y-----------------------*/
if ((execstp->s[counter].d) < 0x10) (execstp->s[stw_animeangleY].d) -= 0x800;
/*-------------- Angle X-----------------------*/
if ((execstp->s[counter].d) < 0x8) (execstp->s[stw_animeangleX].d) -= 0x800;
if ((execstp->s[counter].d) >= 0x8 && (execstp->s[counter].d) < 0x10) (execstp->s[stw_animeangleX].d) += 0x800;
/*-------------- Move -----------------------*/
execstp->s[stw_skeletonX].f += (execstp->s[str_x].f/16.);
execstp->s[stw_skeletonY].f += (execstp->s[str_y].f/16.);
if (execstp->s[stw_worldZ].f > execstp->s[str_z].f) {
execstp->s[stw_skeletonZ].f += 116.25; //1860
}
(execstp->s[counter].d)++;
if ((execstp->s[counter].d == 16) ) {
execstp->s[stw_skeletonX].f = execstp->s[str_x].f;
execstp->s[stw_skeletonY].f = execstp->s[str_y].f;
execstp->s[state_flag].d = 0;
execstp->s[counter].d = 0;
}
}
/****************************************************************************************************/
/* Button Push Event. */
/***************************************************************************************************/
static void PushButtonEvent(StrategyRecord* execstp)
{
if (Floor == 1) {
if (execstp->s[counter].d < 4) execstp->s[stw_skeletonZ].f -= 20;
if (execstp->s[counter].d >= 4) execstp->s[stw_skeletonZ].f += 20;
} else {
if (execstp->s[counter].d < 4) execstp->s[stw_skeletonZ].f += 20;
if (execstp->s[counter].d >= 4) execstp->s[stw_skeletonZ].f -= 20;
}
(execstp->s[counter].d)++;
if ((execstp->s[counter].d == 8) ) {
execstp->s[state_flag].d = 0;
execstp->s[counter].d = 0;
}
}
/****************************************************************************************************/
/* Button Zoom Up Event. */
/***************************************************************************************************/
static void ButtonZoomUpEvent(StrategyRecord* execstp)
{
execstp->s[str_scale].f += 0.0022;
(execstp->s[counter].d)++;
if ((execstp->s[counter].d == 10) ) {
execstp->s[state_flag].d = 0;
execstp->s[counter].d = 0;
}
}
/****************************************************************************************************/
/* Button Zoom Down Event. */
/***************************************************************************************************/
static void ButtonZoomDownEvent(StrategyRecord* execstp)
{
execstp->s[str_scale].f -= 0.0022;
(execstp->s[counter].d)++;
if ((execstp->s[counter].d == 10) ) {
execstp->s[state_flag].d = 0;
execstp->s[counter].d = 0;
}
}
/********************************************************************************/
/* Button1 Initaraize . */
/********************************************************************************/
extern void s_button_init()
{
execstp->s[str_x].f = execstp->s[stw_skeletonX].f;
execstp->s[str_y].f = execstp->s[stw_skeletonY].f;
}
/********************************************************************************/
/* Button1 main . */
/********************************************************************************/
extern void s_buttonMove()
{
switch (execstp->s[state_flag].d) {
case 0: execstp->s[str_z].f = execstp->s[stw_worldZ].f;
break;
case 1: if (Floor == 1) ClickButtonEvent1(execstp);
if (Floor == 2) ClickButtonEvent2(execstp);
alpha_value = 0;
cursol_flag = 4;
break;
case 2: break;
case 3: if (Floor == 1) ClickButtonCancel1(execstp);
if (Floor == 2) ClickButtonCancel2(execstp);
alpha_value = 0;
cursol_flag = 4;
break;
case 4: PushButtonEvent(execstp);
cursol_flag = 4;
break;
case 5: ButtonZoomUpEvent(execstp);
cursol_flag = 4;
break;
case 6: ButtonZoomDownEvent(execstp);
cursol_flag = 4;
break;
}
/* if ( obj_timer == 10 ){
rmonpf(("%d,%f,%f,%f\n",execstp->s[stw_flag].d,obj_worldX,obj_worldY,obj_worldZ ));
}
*/
s_set_scale(execstp->s[str_scale].f);
}
/*------------------------------------------------------------------------------*/
/* FileSelect. */
/*------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------*/
/* File Score Scene */
/*------------------------------------------------------------------------------*/
/********************************************************************************/
/* Watch Score */
/********************************************************************************/
static void WatchFileScore(StrategyRecord* buttonPtr,char back_scene)
{
if (buttonPtr->s[state_flag].d == 2) {
if (cursol_flag == 2) {
Na_FixSeFlagEntry(NA_SYS_ZOOM_OUT);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonPtr->s[state_flag].d = 3;
}
}
if (buttonPtr->s[state_flag].d == 0) {
selectNo = back_scene;
if (Floor == 2) Floor = 1;
}
}
/********************************************************************************/
/* File Select Score Initalize */
/********************************************************************************/
static void ScoreScene_init(StrategyRecord* execstp)
{
if (BuIsActive(0) == 1) buttonData[ 7] = s_makeobj_relative(execstp,S_bg01,e_button1, 6400/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[ 7] = s_makeobj_relative(execstp,S_bg07,e_button1, 6400/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
buttonData[ 7]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(1) == 1) buttonData[ 8] = s_makeobj_relative(execstp,S_bg01,e_button1, -1500/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[ 8] = s_makeobj_relative(execstp,S_bg07,e_button1, -1500/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
buttonData[ 8]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(2) == 1) buttonData[ 9] = s_makeobj_relative(execstp,S_bg01,e_button1, 6400/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[ 9] = s_makeobj_relative(execstp,S_bg07,e_button1, 6400/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[ 9]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(3) == 1) buttonData[10] = s_makeobj_relative(execstp,S_bg01,e_button1, -1500/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[10] = s_makeobj_relative(execstp,S_bg07,e_button1, -1500/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[10]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[11] = s_makeobj_relative(execstp,S_bg04,e_button1 , 6400/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[11]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[12] = s_makeobj_relative(execstp,S_bg03,e_button1, 0/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[12]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[13] = s_makeobj_relative(execstp,S_bg02,e_button1, -6400/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[13]->s[str_scale].f = 1.0/(SCALE*1.5);
}
/********************************************************************************/
/* FileSelct Score */
/********************************************************************************/
static void FileScoreScene(StrategyRecord* buttonPtr)
{
int i;
if (buttonPtr->s[state_flag].d == 2) {
for(i=7; i<14; i++) {
short posx = (short)buttonData[i]->s[stw_worldX].f;
short posy = (short)buttonData[i]->s[stw_worldY].f;
if(ButtonClickCheck(posx,posy,22.) == 1 && click_counter > 30) {
if (i==11 || i==12 || i==13) {
Na_FixSeFlagEntry(NA_SYS_CLICK);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[i]->s[state_flag].d = 4;
selectNo = i;
}
else if (click_counter > 30){
if (BuIsActive(i-7) == 1 ) {
Na_FixSeFlagEntry(NA_SYS_ZOOM_IN);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[i]->s[state_flag].d = 1;
selectNo = i;
}
else {
Na_FixSeFlagEntry(NA_SYS_BUZZER);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[i]->s[state_flag].d = 4;
if (click_counter > 30) {click_flag = 1; click_counter = 0;}
}
}
Floor = 2;
break;
}
}
}
}
/*------------------------------------------------------------------------------*/
/* File Copy Scene Scene */
/*------------------------------------------------------------------------------*/
/********************************************************************************/
/* File Select Copy Initalize */
/********************************************************************************/
static void CopyScene_init(StrategyRecord* execstp)
{
if (BuIsActive(0) == 1) buttonData[14] = s_makeobj_relative(execstp,S_bg01,e_button1, 6400/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[14] = s_makeobj_relative(execstp,S_bg07,e_button1, 6400/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
buttonData[14]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(1) == 1) buttonData[15] = s_makeobj_relative(execstp,S_bg01,e_button1, -1500/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[15] = s_makeobj_relative(execstp,S_bg07,e_button1, -1500/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
buttonData[15]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(2) == 1) buttonData[16] = s_makeobj_relative(execstp,S_bg01,e_button1, 6400/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[16] = s_makeobj_relative(execstp,S_bg07,e_button1, 6400/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[16]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(3) == 1) buttonData[17] = s_makeobj_relative(execstp,S_bg01,e_button1, -1500/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[17] = s_makeobj_relative(execstp,S_bg07,e_button1, -1500/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[17]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[18] = s_makeobj_relative(execstp,S_bg04,e_button1, 6400/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[18]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[19] = s_makeobj_relative(execstp,S_bg05,e_button1, 0/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[19]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[20] = s_makeobj_relative(execstp,S_bg02,e_button1, -6400/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[20]->s[str_scale].f = 1.0/(SCALE*1.5);
}
/********************************************************************************/
/* File Copy Event */
/********************************************************************************/
static void FileCopyButtonEvent(StrategyRecord* buttonPtr,int buNo)
{
switch (buttonPtr->bu_mode) {
case 0: if (fileFlow_flag == 1) return;
if (BuIsActive(buNo-14) == 1) {
Na_FixSeFlagEntry(NA_SYS_CLICK);
SendMotorEvent(5,80); /* MOTOR 1997.6.5 */
buttonData[buNo]->s[state_flag].d = 5;
click_file = (buNo-14);
buttonPtr->bu_mode = 1;
click_flag = 1;
click_counter = 0;
}
else {
Na_FixSeFlagEntry(NA_SYS_BUZZER);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[buNo]->s[state_flag].d = 4;
if (click_counter > 20) {click_flag = 1; click_counter = 0;}
}
break;
case 1:
buttonData[buNo]->s[state_flag].d = 4;
if (BuIsActive(buNo-14) == 0) {
Na_FixSeFlagEntry(NA_SE2_SET);
SendMotorEvent(5,80); /* MOTOR 1997.6.5 */
buttonPtr->bu_mode = 2;
click_flag = 1;
click_counter = 0;
BuCopyStorage(click_file,buNo-14); //Main Copy Function
buttonData[buNo]->map.shape = stageShapes[S_bg06]; //Change Shape
buttonData[buNo-14]->map.shape = stageShapes[S_bg06]; //Change Shape
}
else {
if (buNo == (click_file+14)) {
Na_FixSeFlagEntry(NA_SYS_BUZZER);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[click_file+14]->s[state_flag].d = 6;
buttonPtr->bu_mode = 0;
click_flag = 1;
return;
}
if (click_counter > 20) {click_flag = 1; click_counter = 0;}
}
break;
}
}
/********************************************************************************/
/* File Copy Scene */
/********************************************************************************/
static void FileCopyScene(StrategyRecord* buttonPtr)
{
int i;
if (buttonPtr->s[state_flag].d == 2) {
for(i=14; i<21; i++) {
short posx = (short)buttonData[i]->s[stw_worldX].f;
short posy = (short)buttonData[i]->s[stw_worldY].f;
if(ButtonClickCheck(posx,posy,22.) == 1) {
if (i==18 || i==19 || i==20){
if (buttonPtr->bu_mode == 0) {
Na_FixSeFlagEntry(NA_SYS_CLICK);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[i]->s[state_flag].d = 4;
selectNo = i;
}
}
else {
if (buttonData[i]->s[state_flag].d == 0 && click_counter > 30)
{FileCopyButtonEvent(buttonPtr,i);}
}
Floor = 2;
break;
}
}
if (buttonPtr->bu_mode == 2) {
if (click_counter > 30) {
buttonPtr->bu_mode = 0;
buttonData[click_file+14]->s[state_flag].d = 6;
}
}
}
// rmonpf(("z->%f,scale->%f\n",buttonData[14]->s[stw_worldZ].f,buttonData[14]->s[str_scale].f));
}
/*------------------------------------------------------------------------------*/
/* File Remove Score Scene */
/*------------------------------------------------------------------------------*/
/********************************************************************************/
/* File Remove Select Initalize */
/********************************************************************************/
static void RemoveScene_init(StrategyRecord* execstp)
{
if (BuIsActive(0) == 1) buttonData[21] = s_makeobj_relative(execstp,S_bg01,e_button1, 6400/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[21] = s_makeobj_relative(execstp,S_bg07,e_button1, 6400/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
buttonData[21]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(1) == 1) buttonData[22] = s_makeobj_relative(execstp,S_bg01,e_button1, -1500/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[22] = s_makeobj_relative(execstp,S_bg07,e_button1, -1500/(SCALE*1.5), 2800/(SCALE*1.5), -100,0,0x8000,0);
buttonData[22]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(2) == 1) buttonData[23] = s_makeobj_relative(execstp,S_bg01,e_button1, 6400/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[23] = s_makeobj_relative(execstp,S_bg07,e_button1, 6400/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[23]->s[str_scale].f = 1.0/(SCALE*1.5);
if (BuIsActive(3) == 1) buttonData[24] = s_makeobj_relative(execstp,S_bg01,e_button1, -1500/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
else buttonData[24] = s_makeobj_relative(execstp,S_bg07,e_button1, -1500/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[24]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[25] = s_makeobj_relative(execstp,S_bg04,e_button1, 6400/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[25]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[26] = s_makeobj_relative(execstp,S_bg05,e_button1, 0/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[26]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[27] = s_makeobj_relative(execstp,S_bg03,e_button1, -6400/(SCALE*1.5),-3500/(SCALE*1.5), -100,0,0x8000,0);
buttonData[27]->s[str_scale].f = 1.0/(SCALE*1.5);
}
/********************************************************************************/
/* File Remove Event */
/********************************************************************************/
static void FileRemoveButtonEvent(StrategyRecord* buttonPtr,int buNo)
{
switch (buttonPtr->bu_mode) {
case 0: if (BuIsActive(buNo-21) == 1) {
Na_FixSeFlagEntry(NA_SYS_CLICK);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[buNo]->s[state_flag].d = 5;
click_file = (buNo-21);
buttonPtr->bu_mode = 1;
click_flag = 1;
click_counter = 0;
}
else {
Na_FixSeFlagEntry(NA_SYS_BUZZER);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[buNo]->s[state_flag].d = 4;
if (click_counter > 20) {click_flag = 1; click_counter = 0;}
}
break;
case 1:
if (buNo == (click_file+21)) {
Na_FixSeFlagEntry(NA_SYS_CLICK);
SendMotorEvent(5,80); /* MOTOR 1997.6.5 */
buttonData[click_file+21]->s[state_flag].d = 6;
buttonPtr->bu_mode = 0;
click_flag = 1;
}
break;
}
}
/********************************************************************************/
/* FileSelct Remove */
/********************************************************************************/
static void FileRemoveScene(StrategyRecord* buttonPtr)
{
int i;
if (buttonPtr->s[state_flag].d == 2) {
for(i=21; i<28; i++) {
short posx = (short)buttonData[i]->s[stw_worldX].f;
short posy = (short)buttonData[i]->s[stw_worldY].f;
if(ButtonClickCheck(posx,posy,22.) == 1) {
if (i==25 || i==26 || i==27){
if (buttonPtr->bu_mode == 0) {
Na_FixSeFlagEntry(NA_SYS_CLICK);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[i]->s[state_flag].d = 4;
selectNo = i;
}
}
else if( click_counter > 30) FileRemoveButtonEvent(buttonPtr,i);
Floor = 2;
break;
}
}
if (buttonPtr->bu_mode == 2) {
if (click_counter > 30) {
buttonPtr->bu_mode = 0;
buttonData[click_file+21]->s[state_flag].d = 6;
}
}
}
}
/*------------------------------------------------------------------------------*/
/* Sound Select Scene */
/*------------------------------------------------------------------------------*/
/********************************************************************************/
/* Sound Select Scene Initalize */
/********************************************************************************/
static void SoundScene_init(StrategyRecord* execstp)
{
buttonData[29] = s_makeobj_relative(execstp,S_bg10,e_button1, 4800/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[29]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[30] = s_makeobj_relative(execstp,S_bg10,e_button1, 0/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[30]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[31] = s_makeobj_relative(execstp,S_bg10,e_button1, -4800/(SCALE*1.5), 0/(SCALE*1.5), -100,0,0x8000,0);
buttonData[31]->s[str_scale].f = 1.0/(SCALE*1.5);
buttonData[29+sound_flag]->s[state_flag].d = 5;
}
/********************************************************************************/
/* Sound Selct Scene */
/********************************************************************************/
static void SoundSelectScene(StrategyRecord* buttonPtr)
{
int i;
if (buttonPtr->s[state_flag].d == 2) {
for(i=29; i<32; i++) {
short posx = (short)buttonData[i]->s[stw_worldX].f;
short posy = (short)buttonData[i]->s[stw_worldY].f;
if(ButtonClickCheck(posx,posy,22.) == 1) {
if (i==29 || i==30 || i==31){
if (buttonPtr->bu_mode == 0) {
Na_FixSeFlagEntry(NA_SYS_CLICK);
SendMotorEvent(5,80); /* MOTOR 1997.6.3 */
buttonData[i]->s[state_flag].d = 4;
selectNo = i;
sound_flag = (i - 29);
BuSetSoundMode(sound_flag);
}
}
Floor = 2;
break;
}
}
}
}
/*==============================================================================================*/
/********************************************************************************/
/* Go To Game */
/********************************************************************************/
static void GoToGame(StrategyRecord* buttonPtr,int buNo)
{
if (buttonPtr->s[state_flag].d == 2) {
goTogame = buNo;
}
}
/********************************************************************************/
/* Go To File Select */
/********************************************************************************/
static void GoToFileSelect(short buttonNo,StrategyRecord* clickPtr)
{
int i;
if (clickPtr->s[state_flag].d == 0 && buttonData[buttonNo]->s[state_flag].d == 2) {
Na_FixSeFlagEntry(NA_SYS_ZOOM_OUT);
buttonData[buttonNo]->s[state_flag].d = 3;
Floor = 1;
}
if (buttonData[buttonNo]->s[state_flag].d == 0) {
selectNo = -1;
if (buttonNo == 4) {for (i= 7; i<14; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 5) {for (i=14; i<21; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 6) {for (i=21; i<28; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 28) {for (i=29; i<32; i++) RemoveShape(buttonData[i]);}
}
}
/********************************************************************************/
/* Go To File Score */
/********************************************************************************/
static void GoToFileScore(short buttonNo,StrategyRecord* clickPtr)
{
int i;
if (clickPtr->s[state_flag].d == 0 && buttonData[buttonNo]->s[state_flag].d == 2) {
Na_FixSeFlagEntry(NA_SYS_ZOOM_OUT);
buttonData[buttonNo]->s[state_flag].d = 3;
Floor = 1;
}
if (buttonData[buttonNo]->s[state_flag].d == 0) {
if (buttonNo == 4) {for (i= 7; i<14; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 5) {for (i=14; i<21; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 6) {for (i=21; i<28; i++) RemoveShape(buttonData[i]);}
selectNo = 4;
Na_FixSeFlagEntry(NA_SYS_ZOOM_IN);
buttonData[4]->s[state_flag].d = 1;
ScoreScene_init (buttonData[4]);
}
}
/********************************************************************************/
/* Go To File Copy */
/********************************************************************************/
static void GoToFileCopy(short buttonNo,StrategyRecord* clickPtr)
{
int i;
if (clickPtr->s[state_flag].d == 0 && buttonData[buttonNo]->s[state_flag].d == 2) {
Na_FixSeFlagEntry(NA_SYS_ZOOM_OUT);
buttonData[buttonNo]->s[state_flag].d = 3;
Floor = 1;
}
if (buttonData[buttonNo]->s[state_flag].d == 0) {
if (buttonNo == 4) {for (i= 7; i<14; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 5) {for (i=14; i<21; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 6) {for (i=21; i<28; i++) RemoveShape(buttonData[i]);}
selectNo = 5;
Na_FixSeFlagEntry(NA_SYS_ZOOM_IN);
buttonData[5]->s[state_flag].d = 1;
CopyScene_init (buttonData[5]);
}
}
/********************************************************************************/
/* Go To File Remove */
/********************************************************************************/
static void GoToFileRemove(short buttonNo,StrategyRecord* clickPtr)
{
int i;
if (clickPtr->s[state_flag].d == 0 && buttonData[buttonNo]->s[state_flag].d == 2) {
Na_FixSeFlagEntry(NA_SYS_ZOOM_OUT);
buttonData[buttonNo]->s[state_flag].d = 3;
Floor = 1;
}
if (buttonData[buttonNo]->s[state_flag].d == 0) {
if (buttonNo == 4) {for (i= 7; i<14; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 5) {for (i=14; i<21; i++) RemoveShape(buttonData[i]);}
if (buttonNo == 6) {for (i=21; i<28; i++) RemoveShape(buttonData[i]);}
selectNo = 6;
Na_FixSeFlagEntry(NA_SYS_ZOOM_IN);
buttonData[6]->s[state_flag].d = 1;
RemoveScene_init (buttonData[6]);
}
}
/*------------------------------------------------------------------------------*/
/* FileSelect. */
/*------------------------------------------------------------------------------*/
/********************************************************************************/
/* FileSelct Init */
/********************************************************************************/
extern void s_fileSelect_init() {
if (BuIsActive(0) == 1) buttonData[0] = s_makeobj_relative(execstp,S_bg06,e_button1,-6400, 2800,0,0,0,0);
else buttonData[0] = s_makeobj_relative(execstp,S_bg08,e_button1,-6400, 2800,0,0,0,0);
buttonData[0] ->s[str_scale].f = 1.0;
if (BuIsActive(1) == 1) buttonData[1] = s_makeobj_relative(execstp,S_bg06,e_button1, 1500, 2800,0,0,0,0);
else buttonData[1] = s_makeobj_relative(execstp,S_bg08,e_button1, 1500, 2800,0,0,0,0);
buttonData[1] ->s[str_scale].f = 1.0;
if (BuIsActive(2) == 1) buttonData[2] = s_makeobj_relative(execstp,S_bg06,e_button1,-6400, 0,0,0,0,0);
else buttonData[2] = s_makeobj_relative(execstp,S_bg08,e_button1,-6400, 0,0,0,0,0);
buttonData[2] ->s[str_scale].f = 1.0;
if (BuIsActive(3) == 1) buttonData[3] = s_makeobj_relative(execstp,S_bg06,e_button1, 1500, 0,0,0,0,0);
else buttonData[3] = s_makeobj_relative(execstp,S_bg08,e_button1, 1500, 0,0,0,0,0);
buttonData[3] ->s[str_scale].f = 1.0;
buttonData[4] = s_makeobj_relative(execstp,S_bg05,e_button1, -6400, -3500,0,0,0,0);
buttonData[4] ->s[str_scale].f = 1.0;
buttonData[5] = s_makeobj_relative(execstp,S_bg03,e_button1, -2134, -3500,0,0,0,0);
buttonData[5] ->s[str_scale].f = 1.0;
buttonData[6] = s_makeobj_relative(execstp,S_bg02,e_button1, 2134, -3500,0,0,0,0);
buttonData[6] ->s[str_scale].f = 1.0;
buttonData[28] = s_makeobj_relative(execstp,S_bg09,e_button1, 6400, -3500,0,0,0,0);
buttonData[28] ->s[str_scale].f = 1.0;
alpha_value = 0;
}
/********************************************************************************/
/* FileSelct Scene */
/********************************************************************************/
static void FileSelectScene(void)
{
char i;
/*---- Sound ----*/
if(ButtonClickCheck((short)buttonData[28]->s[stw_worldX].f,(short)buttonData[28]->s[stw_worldY].f,200.) == 1) {
buttonData[28]->s[state_flag].d = 1;
selectNo = 28;
}
else {
for(i=0; i<7; i++) {
short posx = (short)buttonData[i]->s[stw_worldX].f;
short posy = (short)buttonData[i]->s[stw_worldY].f;
if(ButtonClickCheck(posx,posy,200.) == 1) {
buttonData[i]->s[state_flag].d = 1;
selectNo = i;
break;
}
}
}
switch(selectNo) { /*------------- select Initialize -------------------*/
case 0: Na_FixSeFlagEntry(NA_SYS_FILE_SELECT);
SendMotorEvent(60,70); /* MOTOR 1997.6.5 */
SendMotorDecay(1); /* MOTOR 1997.6.5 */
break;
case 1: Na_FixSeFlagEntry(NA_SYS_FILE_SELECT);
SendMotorEvent(60,70); /* MOTOR 1997.6.5 */
SendMotorDecay(1); /* MOTOR 1997.6.5 */
break;
case 2: Na_FixSeFlagEntry(NA_SYS_FILE_SELECT);
SendMotorEvent(60,70); /* MOTOR 1997.6.5 */
SendMotorDecay(1); /* MOTOR 1997.6.5 */
break;
case 3: Na_FixSeFlagEntry(NA_SYS_FILE_SELECT);
SendMotorEvent(60,70); /* MOTOR 1997.6.5 */
SendMotorDecay(1); /* MOTOR 1997.6.5 */
break;
case 4: Na_FixSeFlagEntry(NA_SYS_ZOOM_IN);
SendMotorEvent(5,80); /* MOTOR 1997.6.5 */
ScoreScene_init(buttonData[4]);
break;
case 5: Na_FixSeFlagEntry(NA_SYS_ZOOM_IN);
SendMotorEvent(5,80); /* MOTOR 1997.6.5 */
CopyScene_init(buttonData[5]);
break;
case 6: Na_FixSeFlagEntry(NA_SYS_ZOOM_IN);
SendMotorEvent(5,80); /* MOTOR 1997.6.5 */
RemoveScene_init(buttonData[6]);
break;
case 28: Na_FixSeFlagEntry(NA_SYS_ZOOM_IN);
SendMotorEvent(5,80); /* MOTOR 1997.6.5 */
SoundScene_init(buttonData[28]);
break;
}
}
/********************************************************************************/
/* FileSelct Stage */
/********************************************************************************/
extern void s_fileSelect() {
switch(selectNo) {
case -1: FileSelectScene(); break;
case 0: GoToGame (buttonData[0],1); break;
case 1: GoToGame (buttonData[1],2); break;
case 2: GoToGame (buttonData[2],3); break;
case 3: GoToGame (buttonData[3],4); break;
case 4: FileScoreScene (buttonData[4]); break;
case 5: FileCopyScene (buttonData[5]); break;
case 6: FileRemoveScene(buttonData[6]); break;
case 7: WatchFileScore(buttonData[ 7],4); break;
case 8: WatchFileScore(buttonData[ 8],4); break;
case 9: WatchFileScore(buttonData[ 9],4); break;
case 10: WatchFileScore(buttonData[10],4); break;
case 11: GoToFileSelect(4,buttonData[11]); break;
case 12: GoToFileCopy(4,buttonData[12]); break;
case 13: GoToFileRemove(4,buttonData[13]); break;
case 14: break;
case 15: break;
case 16: break;
case 17: break;
case 18: GoToFileSelect(5,buttonData[18]); break;
case 19: GoToFileScore(5,buttonData[19]); break;
case 20: GoToFileRemove(5,buttonData[20]);break;
case 21: break;
case 22: break;
case 23: break;
case 24: break;
case 25: GoToFileSelect(6,buttonData[25]);break;
case 26: GoToFileScore(6,buttonData[26]); break;
case 27: GoToFileCopy(6,buttonData[27]); break;
case 28: SoundSelectScene(buttonData[28]); break;
case 29: GoToFileSelect(28,buttonData[29]); break;
case 30: GoToFileSelect(28,buttonData[30]); break;
case 31: GoToFileSelect(28,buttonData[31]); break;
}
cursol_ptr[0] = -10000;
cursol_ptr[1] = -10000;
// dprintf(20,100,"select %d",selectNo);
}
/*------------------------------------------------------------------------------*/
#include "selectmess.c"
/*==============================================================================*/
/* File Select Init. */
/*==============================================================================*/
/********************************************************************************/
/* Select main Init. */
/********************************************************************************/
extern ulong
SeSelectInitProcess(short code, long param)
{
selectNo = -1;
Floor = 1;
alpha_value = 0; // Font Alpha Value
switch (activePlayerNo) {
case 1: cursol_pos[0]=-94.;
cursol_pos[1]= 46.;
break;
case 2: cursol_pos[0]= 24.;
cursol_pos[1]= 46.;
break;
case 3: cursol_pos[0]=-94.;
cursol_pos[1]= 5.;
break;
case 4: cursol_pos[0]= 24.;
cursol_pos[1]= 5.;
break;
}
cursol_ptr[0] = -10000;
cursol_ptr[1] = -10000;
cursol_flag = 0;
goTogame = 0;
click_file = -1;
click_flag = 0;
click_mess = 0;
click_alpha = 0;
click_counter = 0;
yesNo_flag = 0;
sound_flag = (char) BuGetSoundMode();
}
/*==============================================================================*/
/* File Select Main. */
/*==============================================================================*/
/********************************************************************************/
/* Select main process. */
/********************************************************************************/
extern ulong
SeSelectProcess(short code, long param)
{
SnExecuteStrategy();
return((ulong)goTogame);
}