stoneage8.5/石器时代8.5客户端最新源代码/石器源码/ohta/ohta.cpp

888 lines
21 KiB
C++
Raw Normal View History

2020-06-23 15:27:59 +08:00
/************************/
/* ohta.c */
/************************/
#include "../systeminc/version.h"
#include "../systeminc/system.h"
#include "ohta.h"
#include "../systeminc/loadsprbin.h"
#include "../systeminc/t_music.h"
ACTION *MakeJiki( void );
void Jiki( ACTION *pAct );
ACTION *MakeJikiTama( int x, int y, int dx, int dy, int bmpNo );
void JikiTama( ACTION *pAct );
ACTION *MakeEnemy( void );
void Enemy( ACTION *pAct );
ACTION *MakeEnemyTama( ACTION *pOya );
void EnemyTama( ACTION *pAct );
ACTION *MakeBg( void );
void Bg( ACTION *pAct );
ACTION *MakeKen( void );
void Ken( ACTION *pAct );
ACTION *MakeGameOver( void );
void GameOver( ACTION *pAct );
/* <20><><EFBFBD>k<EFBFBD>ǩ`<60><> */
int bomData[] = { 21, 22, 23, 23, 22, 21 };
/* <20>ԙC<D499>Υݥ<CEA5><DDA5><EFBFBD><EFBFBD><EFBFBD> */
ACTION *pJiki;
/* <20><><EFBFBD>ĤηN<CEB7><4E> */
enum{
TAMA_NORMAL, /* <20>Ω`<60>ޥ<EFBFBD> */
TAMA_TWIN, /* <20>ĥ<EFBFBD><C4A5><EFBFBD> */
TAMA_3WAY, /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
TAMA_DIR, /* ȫ<><C8AB><EFBFBD><EFBFBD> */
TAMA_END /* <20>K<EFBFBD><4B><EFBFBD><EFBFBD> */
};
/********************************************/
/* <09>ԙC */
/********************************************/
/* <20>ԙC<D499><43><EFBFBD><EFBFBD><E4988B><EFBFBD><EFBFBD> */
typedef struct{
int cnt,cnt2,cnt3; /* <20><><EFBFBD>å<EFBFBD><C3A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
int tamaDir; /* <20><><EFBFBD>η<EFBFBD><CEB7><EFBFBD> */
int tamaDx; /* <20><><EFBFBD>Σ؉<CEA3><D889><EFBFBD> */
int attackKind; /* <20><><EFBFBD>ĤηN<CEB7><4E> */
STR_BUFFER strTestBuffer; /* <20>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
}JIKI;
static int No = 36000;
/* <20>ԙC<D499><43><EFBFBD><EFBFBD> *******************************************************************/
ACTION *MakeJiki( void )
{
ACTION *pAct;
JIKI *pYobi;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥ˵<C8A4><CBB5>h */
pAct = GetAction( PRIO_JIKI, sizeof( JIKI ) );
if( pAct == NULL ) return NULL;
/* <20><><EFBFBD><EFBFBD><E4988B><EFBFBD><EFBFBD><EFBFBD>Υ<EFBFBD><CEA5>ɥ쥹 */
pYobi = ( JIKI *)pAct->pYobi;
/* <20>g<EFBFBD><67><EFBFBD>v<EFBFBD><76> */
pAct->func = Jiki;
/* <20><>ʾ<EFBFBD><CABE><EFBFBD>ȶ<EFBFBD> */
pAct->dispPrio = DISP_PRIO_JIKI;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> + <20>ܥå<DCA5><C3A5><EFBFBD><EFBFBD><EFBFBD>ʾ
pAct->atr |= ACT_ATR_HIT_BOX;
/* <20><><EFBFBD>ץ饤<D7A5>ȷ<EFBFBD><C8B7><EFBFBD> */
//pAct->bmpNo = 31;
//pAct->anim_chr_no = 20001;
// anim_tbl.h <20>η<EFBFBD><CEB7><EFBFBD>
pAct->anim_chr_no = 31555; // <20><><EFBFBD>Υ<EFBFBD><CEA5><EFBFBD>
//pAct->anim_chr_no = 5200; // <20>ޥ<EFBFBD><DEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD><EFBFBD>
//pAct->anim_chr_no = 9350; // SCORE
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pAct->anim_no = ANIM_ATTACK;
pAct->anim_no = ANIM_STAND;
pAct->anim_no = ANIM_STAND + 1;
// <20><><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )( <20>¤<EFBFBD><C2A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һؤ<D2BB> )
pAct->anim_ang = 0;
/* <20>ȣ<EFBFBD> */
pAct->hp = 100;
/* <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
pAct->x = 304;
pAct->y = 400;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
// MakeEnemy();
/* <20>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD> */
//MakeBg();
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
// MakeKen();
/* <20><><EFBFBD>ĤηN<CEB7><4E> */
//pYobi->attackKind = TAMA_DIR;
pYobi->attackKind = TAMA_3WAY;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
pYobi->tamaDir = 1;
pYobi->tamaDx = 1;
/* <20><><EFBFBD><EFBFBD><EFBFBD>`<60>Х<EFBFBD><D0A5>˱<EFBFBD><CBB1><EFBFBD> */
pJiki = pAct;
// <20><><EFBFBD><EFBFBD><EFBFBD>Ф<EFBFBD><D0A4>L<EFBFBD><4C>
pYobi->strTestBuffer.len = 10;
// <20><><EFBFBD><EFBFBD><EFBFBD>Ф<EFBFBD>ɫ
pYobi->strTestBuffer.color = 1;
pYobi->strTestBuffer.x = 320;
pYobi->strTestBuffer.y = 260;
return pAct;
}
/* <20>ԙC<D499>I<EFBFBD><49> *******************************************************************/
void Jiki( ACTION *pAct )
{
JIKI *pYobi = ( JIKI *)pAct->pYobi;
//int i;
/* <20><><EFBFBD><EFBFBD><EFBFBD>ܤ<EFBFBD><DCA4><EFBFBD><EFBFBD>r */
if( pAct->damage > 0 ){
pAct->hp -= pAct->damage;
if( pAct->hp <= 0 ){
pAct->state = ACT_STATE_DEAD;
pYobi->cnt = 0;
pYobi->cnt2 = 0;
pYobi->cnt3 = 0;
}
pAct->damage = 0;
}
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// rcX = Rnd( 0,608 );
// rcY = Rnd( 0,400 );
// SetRect( &Rc[ pAct->bmpNo ], rcX, rcY, rcX + 32, rcY + 32 );
// <20>ޥ<EFBFBD><DEA5><EFBFBD><EFBFBD>Ƅ<EFBFBD>
//pAct->x = mouse.nowPoint.x;
//pAct->y = mouse.nowPoint.y;
// <20>ޥ<EFBFBD><DEA5><EFBFBD><EFBFBD>Ǐ<EFBFBD><C78F>k<EFBFBD><6B>
if( pYobi->cnt3 <= 0 ){
// <20><><EFBFBD>k<EFBFBD><6B>
//if( mouse.state == MOUSE_LEFT_CRICK ){
if( mouse.onceState & MOUSE_LEFT_CRICK ){
// <20><><EFBFBD><EFBFBD><EFBFBD>ե<EFBFBD><D5A5>`<60><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
//GetKeyInputFocus( &pYobi->strTestBuffer );
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//MakeJikiTama( pAct->x , pAct->y -16, 0, -8, Rnd( 0, BMP_FILE - 1 ) );
//MakeJikiTama( pAct->x , pAct->y -16, 0, -8, 1034 );
//MakeJikiTama( pAct->x, pAct->y -16, 0, -8, 25 );
//MakeJikiTama( pAct->x, pAct->y -16, 0, -8, Rnd( 0, BMP_FILE - 2 ) );
//MakeJikiTama( pAct->x, pAct->y -16, 0, -8, Rnd( 31554, 31557 ) ); // <20>ԣǣ<D4A3>
//MakeJikiTama( pAct->x, pAct->y -16, 0, -8, Rnd( 31000, 31069 ) ); // <20><><EFBFBD>󥹥<EFBFBD><F3A5B9A5>`
// MakeJikiTama( pAct->x, pAct->y -16, 0, -8, Rnd( 30100, 30135 ) ); // <20>У<EFBFBD>
//MakeJikiTama( pAct->x + 10, pAct->y -16, 0, -8, Rnd( 0, BMP_FILE - 1 ) );
//MakeJikiTama( pAct->x, pAct->y -16, 0, -8, 29 );
//MakeJikiTama( pAct->x - 10, pAct->y -16, 0, -8, 29 );
//MakeJikiTama( pAct->x + 10, pAct->y -16, 0, -8, 29 );
pYobi->cnt3 = 5;
#if 0
for( i = 0; i < (int)256; i++ ){
// <20><><EFBFBD><EFBFBD><EBA4AF><EFBFBD><EFBFBD>
Palette[i].peRed *= 0.95;
Palette[i].peGreen *= 0.95;
Palette[i].peBlue *= 0.95;
}
// <20>ѥ<EFBFBD><D1A5>åȤ<C3A5><C8A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F>
lpDraw->lpPALETTE->SetEntries( 0, 0, 256, Palette );
#endif
}
// <20><><EFBFBD>Хܥ<D0A5><DCA5><EFBFBD>
if( GetAsyncKeyState( VK_MBUTTON ) ){
//MakeJikiTama( pAct->x, pAct->y -16, 0, -8, 29 );
//MakeJikiTama( pAct->x, pAct->y -16, 0, -8, Rnd( 0, BMP_FILE - 1 ) );
// MakeJikiTama( pAct->x, pAct->y -16, 0, -8, 32 );
pYobi->cnt3 = 5;
}
// <20><><EFBFBD>k<EFBFBD><6B>
//if( mouse.onceState & MOUSE_RIGHT_CRICK ){
if( mouse.state & MOUSE_RIGHT_CRICK ){
// <20><><EFBFBD><EFBFBD><EFBFBD>ե<EFBFBD><D5A5>`<60><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
//GetKeyInputFocus( &MyChatBuffer );
//if( GetAsyncKeyState( VK_RBUTTON ) & 0x8000 ){
// MakeJikiTama( pAct->x, pAct->y -16, 0, -8, 29 );
// <20><><EFBFBD>`<60>ե<EFBFBD><D5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ä<EFBFBD><C3A4><EFBFBD>
//if( lpSurface[ 0 ] != NULL ){
// // <20><><EFBFBD><EFBFBD><EFBFBD>`<60><>
// lpSurface[ 0 ]->Release( );
// lpSurface[ 0 ] = NULL;
//}
// MakeBg();
#if 0
MakeJikiTama( pAct->x - 10, pAct->y -16, -6, -8, Rnd( 0, BMP_FILE - 2 ) );
MakeJikiTama( pAct->x - 5, pAct->y -16, -3, -8, Rnd( 0, BMP_FILE - 2 ) );
MakeJikiTama( pAct->x, pAct->y -16, 0, -8, Rnd( 0, BMP_FILE - 2 ) );
MakeJikiTama( pAct->x + 5, pAct->y -16, 3, -8, Rnd( 0, BMP_FILE - 2 ) );
MakeJikiTama( pAct->x + 10, pAct->y -16, 6, -8, Rnd( 0, BMP_FILE - 2 ) );
#else
// MakeJikiTama( pAct->x - 10, pAct->y -16, -6, -8, No );
// MakeJikiTama( pAct->x - 5, pAct->y -16, -3, -8, No );
// MakeJikiTama( pAct->x, pAct->y -16, 0, -8, No );
// MakeJikiTama( pAct->x + 5, pAct->y -16, 3, -8, No );
// MakeJikiTama( pAct->x + 10, pAct->y -16, 6, -8, No );
#endif
pYobi->cnt3 = 5;
#if 0
for( i = 0; i < (int)256; i++ ){
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Palette[i].peRed *= 1.05;
Palette[i].peGreen*= 1.05;
Palette[i].peBlue *= 1.05;
}
//<2F>ѥ<EFBFBD><D1A5>åȤ<C3A5><C8A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F>
lpDraw->lpPALETTE->SetEntries( 0, 0, 256, Palette );
#endif
}
}else pYobi->cnt3--;
/* ״<>B<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD> */
switch( pAct->state ){
/* ͨ<><CDA8><EFBFBD>r */
case ACT_STATE_ACT:
/* <20><><EFBFBD><EFBFBD><EFBFBD>Ȥε<C8A4><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
//Hit( pAct, PRIO_ENEMY_TAMA );
/* <20><><EFBFBD>Ȥε<C8A4><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
//Hit( pAct, PRIO_ENEMY );
/* <20>Ƅ<EFBFBD> */
if( joy_con[ 0 ] & JOY_UP ){ /* <20><> */
pAct->y -= 2;
if( pAct->y < 0 ) pAct->y = 0;
}
if( joy_con[ 0 ] & JOY_DOWN ){ /* <20><> */
pAct->y += 2;
if( pAct->y > 448 ) pAct->y = 448;
}
if( joy_con[ 0 ] & JOY_LEFT ){ /* <20><> */
pAct->x -= 2;
if( pAct->x < 0 ) pAct->x = 0;
}
if( joy_con[ 0 ] & JOY_RIGHT ){ /* <20><> */
pAct->x += 2;
if( pAct->x > 608 ) pAct->x = 608;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//if( joy_con[ 0 ] & JOY_B ) MakeEnemy();
/* <20><><EFBFBD>k<EFBFBD><6B> */
if( pYobi->cnt3 <= 0 ){ /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if( joy_con[ 0 ] & JOY_A ){
/*DeathAllAction();*/
/* <20><><EFBFBD>ηNǷ<EE90A4><C7B7><EFBFBD> */
switch( pYobi->attackKind ){
case TAMA_NORMAL:
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
MakeJikiTama( pAct->x, pAct->y -16, 0, -8, 28 );
break;
case TAMA_TWIN:
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
MakeJikiTama( pAct->x - 10, pAct->y -16, 0, -8, 29 );
MakeJikiTama( pAct->x + 10, pAct->y -16, 0, -8, 29 );
break;
case TAMA_3WAY:
MakeJikiTama( pAct->x - 10, pAct->y -16, -4, -8, 29 );
MakeJikiTama( pAct->x, pAct->y -16, 0, -8, 29 );
MakeJikiTama( pAct->x + 10, pAct->y -16, 4, -8, 29 );
break;
case TAMA_DIR:
MakeJikiTama( pAct->x, pAct->y -16, pYobi->tamaDx, -8, 29 );
MakeJikiTama( pAct->x, pAct->y -16, -pYobi->tamaDx, -8, 29 );
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
pYobi->tamaDx += pYobi->tamaDir;
if( pYobi->tamaDx <= -10 || 10 <= pYobi->tamaDx ){
pYobi->tamaDir *= -1;
}
break;
}
pYobi->cnt3 = 2; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//pYobi->cnt3 = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
}
}else{
if( pYobi->cnt3 > 0 ) pYobi->cnt3--;
}
/* <20><><EFBFBD><EFBFBD> */
/* if( ( int )pAct->x % 2 ) pAct->atr |= ACT_ATR_HIDE;
else pAct->atr &= ~ACT_ATR_HIDE;
*/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
pYobi->cnt++;
if( pYobi->cnt >= 1 ){
//MakeEnemy();
pYobi->cnt2++;
if( pYobi->cnt2 >= 5 ){
pYobi->cnt2 = 0;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//pYobi->attackKind++;
if( pYobi->attackKind >= TAMA_END ){
pYobi->attackKind = 0;
}
}
pYobi->cnt = 0;
}
break;
/* <20><><EFBFBD><EFBFBD><EFBFBD>r */
case ACT_STATE_DEAD:
if( pYobi->cnt == 0 ){
pAct->bmpNo = bomData[ 0 ];
pYobi->cnt = 1;
}
/* <20><><EFBFBD>k<EFBFBD><6B><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
pYobi->cnt2++;
if( pYobi->cnt2 >= 5 ){
pAct->bmpNo = bomData[ pYobi->cnt ];
pYobi->cnt++;
pYobi->cnt2 = 0;
/* <20>K<EFBFBD><4B><EFBFBD>ä<EFBFBD><C3A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if( pYobi->cnt == 6 ){
DeathAction( pAct );
MakeGameOver( );
}
}
break;
}
// <20><>ʾ<EFBFBD>ǩ`<60><><EFBFBD><EFBFBD><EFBFBD>Хåե<C3A5><D5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//StockDispBuffer( pAct->x + 32, pAct->y, pAct->dispPrio, pAct->anim_chr_no, 0 );
//StockDispBuffer( pAct->x - 32, pAct->y, pAct->dispPrio, pAct->anim_chr_no, 0 );
{
char szMoji[ 256 ];
wsprintf( szMoji,"BmpNo = %d",No );
// StockFontBuffer( pAct->x, pAct->y, FONT_PRIO_FRONT, 2, szMoji, 0 );
}
// <20><><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pattern( pAct, ANM_NOMAL_SPD, ANM_LOOP );
// <20>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ʾ
//StockFontBuffer( 320, 200, FONT_PRIO_FRONT, pYobi->strTestBuffer.color, pYobi->strTestBuffer.buffer, 0 );
StockFontBuffer2( &pYobi->strTestBuffer );
}
/********************************************/
/* <09>ԙC<D499><43> */
/********************************************/
/* <20>ԙC<D499><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *********************************************************************/
ACTION *MakeJikiTama( int x, int y, int dx, int dy, int bmpNo )
{
ACTION *pAct;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥ˵<C8A4><CBB5>h */
pAct = GetAction( PRIO_JIKI_TAMA, 0 );
if( pAct == NULL ) return NULL;
/* <20>g<EFBFBD><67><EFBFBD>v<EFBFBD><76> */
pAct->func = JikiTama;
// anim_tbl.h <20>η<EFBFBD><CEB7><EFBFBD>
pAct->anim_chr_no = bmpNo; // <20><><EFBFBD>Υ<EFBFBD><CEA5><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pAct->anim_no = ANIM_ATTACK;
pAct->anim_no = Rnd( ANIM_ATTACK, ANIM_WALK );
//pAct->anim_no = ANIM_WALK;
// <20><><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )( <20>¤<EFBFBD><C2A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һؤ<D2BB> )
pAct->anim_ang = Rnd( 0, 7 );
///* <20><><EFBFBD>ץ饤<D7A5>ȷ<EFBFBD><C8B7><EFBFBD> */
//pAct->bmpNo = bmpNo;
/* <20><>ʾ<EFBFBD><CABE><EFBFBD>ȶ<EFBFBD> */
pAct->dispPrio = 2;
/* <20>ȣ<EFBFBD> */
pAct->hp = 10000;
/* <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
pAct->x = x - dx;
pAct->y = y - dy;
/* <20><><EFBFBD><EFBFBD> */
pAct->dx = dx / 2;
pAct->dy = dy / 2;
return pAct;
}
/* <20>ԙC<D499><43><EFBFBD>I<EFBFBD><49> *********************************************************************/
void JikiTama( ACTION *pAct )
{
/* <20><><EFBFBD><EFBFBD><EFBFBD>ܤ<EFBFBD><DCA4><EFBFBD><EFBFBD>r */
if( pAct->damage > 0 ){
pAct->hp -= pAct->damage;
if( pAct->hp <= 0 ){
pAct->state = ACT_STATE_DEAD;
}
pAct->damage = 0;
}
/* ״<>B<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD> */
switch( pAct->state ){
/* ͨ<><CDA8><EFBFBD>r */
case ACT_STATE_ACT:
/* <20><><EFBFBD>Ȥε<C8A4><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
//Hit( pAct, PRIO_ENEMY );
/* <20>Ƅ<EFBFBD> */
pAct->x += pAct->dx;
pAct->y += pAct->dy;
/* <20><><EFBFBD>ߥå<DFA5> */
if( pAct->y <= -32 ){
pAct->y = -32;
MakeEnemyTama( pAct );
DeathAction( pAct );
}else
if( lpDraw->ySize <= pAct->y ){
pAct->y = lpDraw->ySize;
DeathAction( pAct );
}
if( pAct->x <= -32 ){
pAct->x = -32;
DeathAction( pAct );
}else
if( lpDraw->xSize <= pAct->x ){
pAct->x = lpDraw->xSize;
DeathAction( pAct );
}
break;
/* <20><><EFBFBD><EFBFBD><EFBFBD>r */
case ACT_STATE_DEAD:
DeathAction( pAct );
break;
}
// <20><><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pattern( pAct, ANM_NOMAL_SPD, ANM_LOOP );
}
/********************************************/
/* <09><> */
/********************************************/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4988B><EFBFBD><EFBFBD> */
typedef struct{
int cnt,cnt2,cnt3,animCnt; /* <20><><EFBFBD>å<EFBFBD><C3A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
}ENEMY;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *********************************************************************/
ACTION *MakeEnemy( void )
{
ACTION *pAct;
ENEMY *pYobi;
short bmpTbl[] = { 1, 3, 5, 7, 9, 29 };
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥ˵<C8A4><CBB5>h */
pAct = GetAction( PRIO_ENEMY, sizeof( ENEMY ) );
if( pAct == NULL ) return NULL;
/* <20><><EFBFBD><EFBFBD><E4988B><EFBFBD><EFBFBD><EFBFBD>Υ<EFBFBD><CEA5>ɥ쥹 */
pYobi = ( ENEMY *)pAct->pYobi;
/* <20>g<EFBFBD><67><EFBFBD>v<EFBFBD><76> */
pAct->func = Enemy;
/* <20><><EFBFBD>ץ饤<D7A5>ȷ<EFBFBD><C8B7><EFBFBD> */
pAct->bmpNo = bmpTbl[ ( int )Rnd( 0, 4 ) ];
//pAct->bmpNo = Rnd( 1, 10 );
/* <20><>ʾ<EFBFBD><CABE><EFBFBD>ȶ<EFBFBD> */
pAct->dispPrio = 1;
/* <20>ȣ<EFBFBD> */
pAct->hp = 10;//Rnd( 10, 50 );
/* <20><><EFBFBD><EFBFBD>λ<EFBFBD>å<EFBFBD><C3A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
// pAct->x = Rnd( 0, 608 );
pAct->x = Rnd( 0, lpDraw->xSize );
ATR_CRS(pAct) = 16;
ATR_SPD(pAct) = Rnd( 28, 36 );
pAct->dx = 0;
pAct->y = 0;
/* <20><><EFBFBD>֥<EFBFBD><D6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
pAct->dx = Rnd( -3, 3 );
pAct->dy = Rnd( 1, 3 );
return pAct;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49> *********************************************************************/
void enemy_missile( ACTION *a0 )
{
gemini(a0); //<2F>Ƅ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʤ<EFBFBD>
if(ATR_H_POS(a0)>=lpDraw->xSize || ATR_H_POS(a0)<-32 || ATR_V_POS(a0)>lpDraw->ySize || ATR_V_POS(a0)<-32)
DeathAction( a0 ); //<2F>K<EFBFBD><4B>
}
/* <20><><EFBFBD>I<EFBFBD><49> *********************************************************************/
void Enemy( ACTION *pAct )
{
ENEMY *pYobi = ( ENEMY *)pAct->pYobi;
/* <20><><EFBFBD><EFBFBD><EFBFBD>ܤ<EFBFBD><DCA4><EFBFBD><EFBFBD>r */
if( pAct->damage > 0 ){
pAct->hp -= pAct->damage;
if( pAct->hp <= 0 ){
pAct->state = ACT_STATE_DEAD;
pYobi->cnt = 0;
pYobi->cnt2 = 0;
pYobi->cnt3 = 0;
}
pAct->damage = 0;
}
/* ״<>B<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD> */
switch( pAct->state ){
/* ͨ<><CDA8><EFBFBD>r */
case ACT_STATE_ACT:
/* <20>Ƅ<EFBFBD> */
// pAct->x += pAct->dx;
// pAct->y += pAct->dy;
/* <20><><EFBFBD>ߥåȥ<C3A5><C8A5><EFBFBD><EFBFBD>å<EFBFBD> */
// if( pAct->x < 0 ){
// pAct->x = 0;
// pAct->dx *= -1;
// }
// else
// if( pAct->x > lpDraw->xSize ){
// pAct->x = lpDraw->xSize;
// pAct->dx *= -1;
// }
// if( pAct->y > lpDraw->ySize ){
// pAct->y = -32;
// }
pAct->dx++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD>ߤˣ<DFA4><CBA3>إ<EFBFBD><D8A5>ԩ`<60>ɉ<EFBFBD><C989><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pAct->dx&=1; //
gemini(pAct); //<2F>Ƅ<EFBFBD>
if(ATR_CRS(pAct)==0){ //<2F><><EFBFBD>Ƅ<EFBFBD><C684>Фʤ<D0A4>
if( pAct->y < -32 ){ //<2F>϶ˤʤ<CBA4>
ATR_CRS(pAct)=16; //<2F><><EFBFBD>Ƅ<EFBFBD><C684>_ʼ
ATR_SPD(pAct) = Rnd( 28, 36 );
pAct->x = Rnd( 0, lpDraw->xSize ); //
} else {
if(pAct->dx)
ATR_SPD(pAct)++; //<2F><><EFBFBD>ԩ`<60>ɥ<EFBFBD><C9A5>å<EFBFBD>
}
} else {
if(pAct->dx){
ATR_SPD(pAct)--; //<2F><><EFBFBD>ԩ`<60>ɥ<EFBFBD><C9A5><EFBFBD><EFBFBD><EFBFBD>
if(!ATR_SPD(pAct)){ //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>ʤ<EFBFBD>
ATR_CRS(pAct)=0; //<2F><><EFBFBD>Ƅ<EFBFBD><C684>_ʼ
ACTION *a1; //<2F>ߥ<EFBFBD><DFA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><6B>
int d1,d2;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥ˵<C8A4><CBB5>h */
a1 = GetAction( PRIO_ENEMY_TAMA, 0 );
if( a1 == NULL ) break;
/* <20>g<EFBFBD><67><EFBFBD>v<EFBFBD><76> */
a1->func = enemy_missile;
/* <20><><EFBFBD>ץ饤<D7A5>ȷ<EFBFBD><C8B7><EFBFBD> */
a1->bmpNo = No++;
/* <20><>ʾ<EFBFBD><CABE><EFBFBD>ȶ<EFBFBD> */
a1->dispPrio = 3;
/* <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
ATR_H_POS(a1) = ATR_H_POS(pAct)+16;
ATR_V_POS(a1) = ATR_V_POS(pAct)+16;
d1 = pJiki->x; //<2F>ԙC<D499>η<EFBFBD><CEB7>򥻥å<F2A5BBA5>
d2 = pJiki->y; //
radar(a1, &d1, &d2); //
ATR_CRS(a1)=d1; //
ATR_SPD(a1)=16; //<2F>Ƅ<EFBFBD><C684>ٶ<EFBFBD>
play_se( 2, ATR_H_POS(a1), ATR_V_POS(a1) ); //<2F>ߥ<EFBFBD><DFA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD>
}
}
}
// <20><><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* pYobi->cnt3 += pAct->dy;
if( pYobi->cnt3 >= 20 ){
pYobi->cnt3 = 0;
pYobi->animCnt = pYobi->animCnt * ( -2 ) + 1;
pAct->bmpNo += pYobi->animCnt;
}
*/
/*
pAct->cnt++;
if( pAct->cnt >= 300 ){
pAct->state = ACT_STATE_DEAD;
pAct->cnt = 0;
}
*/
//if( Rnd( 0, 300 ) == 0 ) MakeEnemyTama( pAct );
//MakeEnemyTama( pAct );
break;
/* <20><><EFBFBD><EFBFBD><EFBFBD>r */
case ACT_STATE_DEAD:
if( pYobi->cnt == 0 ){
pAct->bmpNo = bomData[ 0 ];
pYobi->cnt = 1;
}
/* <20><><EFBFBD>k<EFBFBD><6B><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
pYobi->cnt2++;
if( pYobi->cnt2 >= 5 ){
pAct->bmpNo = bomData[ pYobi->cnt ];
pYobi->cnt++;
pYobi->cnt2 = 0;
/* <20>K<EFBFBD><4B><EFBFBD>ä<EFBFBD><C3A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if( pYobi->cnt == 6 ){
DeathAction( pAct );
}
}
break;
}
}
/********************************************/
/* <09><><EFBFBD><EFBFBD> */
/********************************************/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *********************************************************************/
ACTION *MakeEnemyTama( ACTION *pOya )
{
ACTION *pAct;
//float dir;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥ˵<C8A4><CBB5>h */
pAct = GetAction( PRIO_ENEMY_TAMA, 0 );
if( pAct == NULL ) return NULL;
/* <20>g<EFBFBD><67><EFBFBD>v<EFBFBD><76> */
pAct->func = EnemyTama;
/* <20><><EFBFBD>ץ饤<D7A5>ȷ<EFBFBD><C8B7><EFBFBD> */
pAct->anim_chr_no = Rnd( 31554, 31556 ); //<2F><><EFBFBD><EFBFBD><E9A5A4>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> + <20>ܥå<DCA5><C3A5><EFBFBD><EFBFBD><EFBFBD>ʾ
pAct->atr |= ACT_ATR_HIT_BOX;
//pAct->anim_no = Rnd( ANIM_ATTACK, ANIM_SATTACK );
//pAct->anim_no = ANIM_ATTACK;
pAct->anim_no = ANIM_WALK;
/* <20><>ʾ<EFBFBD><CABE><EFBFBD>ȶ<EFBFBD> */
pAct->dispPrio = DISP_PRIO_JIKI;
/* <20>ȣ<EFBFBD> */
pAct->hp = 0;
/* <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
//pAct->x = pOya->x + 16;
//pAct->y = pOya->y + 32 ;
pAct->x = Rnd( 100, 500 );
pAct->y = Rnd( 100, 400 );
// <20>Ƅӷ<C684><D3B7><EFBFBD>
radar2( pAct, pJiki->x, pJiki->y, 1 );
//<2F>Ƅ<EFBFBD><C684>ٶ<EFBFBD>
pAct->spd = 16;
// <20><><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pattern( pAct, ANM_NOMAL_SPD, ANM_LOOP );
return pAct;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49> *********************************************************************/
void EnemyTama( ACTION *pAct )
{
/* <20><><EFBFBD><EFBFBD><EFBFBD>ܤ<EFBFBD><DCA4><EFBFBD><EFBFBD>r */
if( pAct->damage > 0 ){
pAct->hp -= pAct->damage;
if( pAct->hp <= 0 ){
pAct->state = ACT_STATE_DEAD;
}
pAct->damage = 0;
}
/* ״<>B<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD> */
switch( pAct->state ){
/* ͨ<><CDA8><EFBFBD>r */
case ACT_STATE_ACT:
// <20>ޥ<EFBFBD><DEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD><EFBFBD>ҥåȤ<C3A5><C8A4>Ƥ<EFBFBD><C6A4><EFBFBD><EFBFBD><EFBFBD>
if( pAct->hitDispNo == HitDispNo ){
// <20>󥯥<EFBFBD><F3A5AFA5>å<EFBFBD><C3A5><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD><EFBFBD>Ƥ<EFBFBD><C6A4><EFBFBD><EFBFBD>r
if( mouse.state & MOUSE_LEFT_CRICK ){
// <20>ɥ<EFBFBD><C9A5>å<EFBFBD><C3A5>Ƅ<EFBFBD>
pAct->x = mouse.nowPoint.x;
pAct->y = mouse.nowPoint.y;
}
// <20>󥯥<EFBFBD><F3A5AFA5>å<EFBFBD><C3A5><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD><EFBFBD>Ƥ<EFBFBD><C6A4><EFBFBD><EFBFBD>r
if( mouse.state & MOUSE_RIGHT_CRICK ){
// <20>ɥ<EFBFBD><C9A5>å<EFBFBD><C3A5>Ƅ<EFBFBD>
DeathAction( pAct );
}
}
/* <20>Ƅ<EFBFBD> */
//pAct->x += pAct->dx;
//pAct->y += pAct->dy;
//gemini( pAct ); //<2F>Ƅ<EFBFBD>
#if 0
/* <20><><EFBFBD>ߥå<DFA5> */
if( pAct->y <= 0 ){
pAct->y = 0;
DeathAction( pAct );
}else
if( pAct->y >= 481 ){
DeathAction( pAct );
}
if( pAct->x <= -8 ){
DeathAction( pAct );
}else
if( lpDraw->xSize <= pAct->x ){
DeathAction( pAct );
}
#endif
break;
/* <20><><EFBFBD><EFBFBD><EFBFBD>r */
case ACT_STATE_DEAD:
DeathAction( pAct );
break;
}
// <20>Ƅӷ<C684><D3B7><EFBFBD>
radar2( pAct, pJiki->x, pJiki->y, Rnd( 0, 10 ) );
// <20><><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pattern( pAct, ANM_NOMAL_SPD, ANM_LOOP );
}
/* <20><><EFBFBD>`<60><EFBFBD>`<60>Щ`<60><><EFBFBD><EFBFBD> *******************************************************************/
ACTION *MakeGameOver( void )
{
ACTION *pAct;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥ˵<C8A4><CBB5>h */
pAct = GetAction( PRIO_GAME_OVER, 0 );
if( pAct == NULL ) return NULL;
/* <20>g<EFBFBD><67><EFBFBD>v<EFBFBD><76> */
pAct->func = GameOver;
// <20>DZ<EFBFBD>ʾ
pAct->atr |= ACT_ATR_HIDE;
/* <20><><EFBFBD>ץ饤<D7A5>ȷ<EFBFBD><C8B7><EFBFBD> */
pAct->bmpNo = 0;
// pAct->bmpNo = 30;
/* <20>ȣ<EFBFBD> */
pAct->hp = 100;
/* <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
pAct->x = 250;
pAct->y = 200;
return pAct;
}
/* <20><><EFBFBD>`<60><EFBFBD>`<60>Щ`<60>I<EFBFBD><49> *******************************************************************/
void GameOver( ACTION *pAct )
{
//char szMoji[128];
// GAME OVER <20><>ʾ
}
/* <20>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD> *********************************************************************/
ACTION *MakeBg( void )
{
ACTION *pAct;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥ˵<C8A4><CBB5>h */
pAct = GetAction( PRIO_BG, NULL );
if( pAct == NULL ) return NULL;
/* <20>g<EFBFBD><67><EFBFBD>v<EFBFBD><76> */
pAct->func = Bg;
/* <20><><EFBFBD>ץ饤<D7A5>ȷ<EFBFBD><C8B7><EFBFBD> */
//pAct->bmpNo = 30;
// pAct->bmpNo = 44;
pAct->anim_chr_no = 9376;
/* <20><>ʾ<EFBFBD><CABE><EFBFBD>ȶ<EFBFBD> */
pAct->dispPrio = 0;
/* <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
pAct->x = 320;
pAct->y = 240;
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pYobi->rcX = 0;
//pYobi->rcY = lpDraw->ySize;
//SetRect( &Rc[ pAct->bmpNo ], pYobi->rcX, pYobi->rcY, pYobi->rcX + lpDraw->xSize, pYobi->rcY + lpDraw->ySize );
return pAct;
}
/* <20>£DŽI<C784><49> *********************************************************************/
void Bg( ACTION *pAct )
{
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pAct->y++;
//if( pAct->y >= 240 ) pAct->y = -240;
pattern( pAct, ANM_NOMAL_SPD, ANM_LOOP ); //<2F><><EFBFBD>˥<EFBFBD><CBA5>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49>
//StockDispBuffer( pAct->x, pAct->y+lpDraw->ySize, 0, pAct->anim_chr_no, 0 );
//StockDispBuffer( pAct->x, pAct->y, 0, pAct->anim_chr_no, 0 );
//StockDispBuffer( pAct->x, pAct->y+lpDraw->ySize, 0, pAct->anim_chr_no, 0);
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *********************************************************************/
ACTION *MakeKen( void )
{
ACTION *pAct;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȥ˵<C8A4><CBB5>h */
pAct = GetAction( PRIO_BG, NULL );
if( pAct == NULL ) return NULL;
/* <20>g<EFBFBD><67><EFBFBD>v<EFBFBD><76> */
pAct->func = Ken;
/* <20><><EFBFBD>ץ饤<D7A5>ȷ<EFBFBD><C8B7><EFBFBD> */
pAct->bmpNo = 33;
/* <20><>ʾ<EFBFBD><CABE><EFBFBD>ȶ<EFBFBD> */
pAct->dispPrio = 100;
/* <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
pAct->x = 100;
pAct->y = 100;
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pYobi->rcX = 0;
//pYobi->rcY = lpDraw->ySize;
//SetRect( &Rc[ pAct->bmpNo ], pYobi->rcX, pYobi->rcY, pYobi->rcX + lpDraw->xSize, pYobi->rcY + lpDraw->ySize );
return pAct;
}
/* <20><><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49> *********************************************************************/
void Ken( ACTION *pAct )
{
int anim[] = { 0,0,0,0,
1,1,1,1,
2,2,2,2,
3,3,3,3,
2,2,2,2,
1,1,1,1
};
}