📄 hotblood.c
字号:
AEERect r;
HotBloodApp * pme = (HotBloodApp *)pi;
if( pme->ply[0].PlayerState == PS_DEADLY_ATTACK_BY_SPEAR && pme->ply[0].anime >= 2 ) {
if( pme->ply[0].anime % 2 == 1 ) {
SETAEERECT(&r, 0, pme->O_PlayerY, 120, 117);
IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
}else {
IIMAGE_SetOffset(pme->m_pIBackGround, 0, -(pme->BackGroundY));
IIMAGE_SetDrawSize(pme->m_pIBackGround, 120, 117);
IIMAGE_Draw(pme->m_pIBackGround, 0, pme->O_PlayerY);
}
}
SETAEERECT(&r, 0, 0, pme->m_cxWidth, pme->O_PlayerY);
IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
SETAEERECT(&r, 0, pme->O_PlayerY + 117, pme->m_cxWidth, pme->m_cyHeight - pme->O_PlayerY + 117);
IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
}
static void drawEffect2(IApplet * pi)
{
AEERect r;
HotBloodApp * pme = (HotBloodApp *)pi;
if( pme->ply[0].PlayerState == PS_DEADLY_ATTACK_BY_SPEAR && pme->ply[0].anime >= 2 ) {
if( pme->ply[0].anime % 2 == 0 ) {
switch( pme->ply[0].anime ) {
case 4:
IIMAGE_Draw(pme->m_pIPly[12], 33, -15 + pme->O_PlayerY);
IIMAGE_Draw(pme->m_pIPly[12], 84, -3 + pme->O_PlayerY);
IIMAGE_Draw(pme->m_pIPly[12], 114, -1 + pme->O_PlayerY);
break;
case 6:
IIMAGE_Draw(pme->m_pIPly[12], 35, 45 + pme->O_PlayerY);
IIMAGE_Draw(pme->m_pIPly[12], 62, -4 + pme->O_PlayerY);
IIMAGE_Draw(pme->m_pIPly[12], 70, 47 + pme->O_PlayerY);
IIMAGE_Draw(pme->m_pIPly[12], 80, 84 + pme->O_PlayerY);
break;
case 8:
IIMAGE_Draw(pme->m_pIPly[12], -12, 50 + pme->O_PlayerY);
IIMAGE_Draw(pme->m_pIPly[12], -14, 96 + pme->O_PlayerY);
IIMAGE_Draw(pme->m_pIPly[12], 19, 98 + pme->O_PlayerY);
break;
}
}
}
SETAEERECT(&r, 0, 0, pme->m_cxWidth, pme->O_PlayerY);
IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
SETAEERECT(&r, 0, pme->O_PlayerY + 117, pme->m_cxWidth, pme->m_cyHeight - pme->O_PlayerY + 117);
IDISPLAY_DrawRect(pme->a.m_pIDisplay, &r, MAKE_RGB(0, 0, 0), MAKE_RGB(0, 0, 0), IDF_RECT_FILL);
}
static void drawGame(IApplet * pi)
{
HotBloodApp * pme = (HotBloodApp *)pi;
if( pme->GameState != GS_BONUS_STAGE ) {
drawScore(pi);
drawEffect1(pi);
drawPlayer(pi);
drawEffect2(pi);
drawEnergy(pi);
}else {
if( pme->stage == 1 ) {
checkBonusStage(pi);
drawPlayer(pi);
drawEnergy(pi);
}else {
stoneManager(pi);
checkStone(pi);
drawObjects(pi);
drawEnergy(pi);
}
}
IDISPLAY_Update(pme->a.m_pIDisplay);
}
static void InitPlayer(IApplet * pi)
{
int i;
HotBloodApp * pme = (HotBloodApp *)pi;
pme->ply[0].liveOK = TRUE;
pme->ply[0].type = 0;
if( pme->stage == 1 ) {
if( pme->cheatMode == 0 || pme->cheatMode == 2 ) pme->ply[0].HP = CHO_ENERGY;
else if( pme->cheatMode == 1 ) pme->ply[0].HP = CHO_CHEATED_ENERGY;
}
pme->ply[0].anime = 0;
pme->ply[0].AP = 0;
pme->ply[0].KOflag = 0;
pme->ply[0].playerX = 5;
pme->ply[0].playerY = pme->O_PlayerY + 72;
pme->ply[0].yLevel = Y_LEV_9;
pme->ply[0].currentDir = PS_RIGHT;
pme->ply[0].shadowOK = TRUE;
pme->ply[0].oldPlayerX = 5;
pme->ply[0].oldPlayerY = pme->O_PlayerY + 72;
pme->ply[0].imgNum = 0;
pme->comboOn = FALSE;
pme->bossDie = FALSE;
pme->loading = FALSE;
for( i = 1;i < 5;i++ ) {
pme->ply[i].forDeath = FALSE;
pme->ply[i].imgNum = 0;
pme->ply[i].anime = 0;
pme->ply[i].liveOK = FALSE;
pme->ply[i].getPig = FALSE;
pme->ply[i].energyOK = FALSE;
pme->ply[i].KOflag = 0;
pme->ply[i].playerX = 7;
pme->ply[i].playerY = 72;
pme->ply[i].AINum = 0;
pme->ply[i].PlayerState = ES_NULL;
pme->ply[i].shadowOK = TRUE;
pme->ply[i].onScreen = FALSE;
pme->ply[i].AINum1 = 0;
pme->ply[i].preDamage = PS_NULL;
pme->ply[i].oldPlayerX = 7;
pme->ply[i].oldPlayerY = 72;
}
}
static void movePlayerX(IApplet * pi, PlayerStruct * who, int move)
{
int i;
AEEImageInfo imageInfo;
AEEImageInfo imageInfo2;
HotBloodApp * pme = (HotBloodApp *)pi;
if( pme->GameState != GS_BONUS_STAGE ) {
if( who->type == 0 ) {
IIMAGE_GetInfo(pme->m_pIPly[who->imgNum], &imageInfo);
if( who->boundaryX + move >= 0 && who->boundaryX + move <= pme->m_cxWidth ) {
who->playerX += move;
if( who->PlayerState != PS_JUMP ) {
for( i = 1;i < 5;i++ ) {
if( pme->ply[i].yLevel == pme->ply[0].yLevel && pme->ply[i].liveOK ) {
if( move > 0 && pme->ply[0].playerX + imageInfo.cx - 5 > pme->ply[i].boundaryX &&
pme->ply[0].playerX < pme->ply[i].playerX ) {
who->playerX -= move;
return;
}
if( move < 0 && pme->ply[0].playerX + 5 < pme->ply[i].boundaryX &&
pme->ply[0].playerX > pme->ply[i].playerX ) {
who->playerX -= move;
return;
}
}
}
}
}
}else {
IIMAGE_GetInfo(pme->m_pIPly[who->imgNum], &imageInfo);
IIMAGE_GetInfo(pme->m_pIPly[pme->ply[0].imgNum], &imageInfo2);
if( who->onScreen ) {
if( who->playerX + 5 + move >= 0 && who->playerX + imageInfo.cx - 5 + move <= pme->m_cxWidth ) {
who->blockOn = FALSE;
who->playerX += move;
if( who->type == 6 && who->PlayerState != ES_JUMP ) {
if( pme->ply[0].yLevel == who->yLevel ) {
if( move > 0 && pme->ply[0].playerX + 5 < who->boundaryX &&
pme->ply[0].playerX > who->playerX ) {
who->playerX -= move;
return;
}
if( move < 0 && pme->ply[0].playerX + imageInfo2.cx - 5 > who->boundaryX &&
pme->ply[0].playerX < who->playerX ) {
who->playerX -= move;
return;
}
}
}
}else who->blockOn = TRUE;
}else {
who->playerX += move;
}
}
}else {
if( pme->stage == 1 ) {
if( who->type == 0 ) {
if( who->boundaryX + move >= 0 && who->boundaryX + move <= 75 ) who->playerX += move;
}
}else {
if( who->type == 0 ) {
if( who->boundaryX + move >= 0 && who->boundaryX + move <= pme->m_cxWidth ) who->playerX += move;
}else {
who->playerX += move;
}
}
}
}
static void movePlayerY(IApplet * pi, PlayerStruct * who, int move)
{
HotBloodApp * pme = (HotBloodApp *)pi;
if( pme->GameState != GS_BONUS_STAGE ) {
if( move > 0 ) {
if( who->yLevel < Y_LEV_9 ) {
who->playerY += move;
who->yLevel++;
}
}else {
if( who->yLevel > Y_LEV_1 ) {
who->playerY += move;
who->yLevel--;
}
}
}else {
if( pme->stage == 1 ) {
if( move > 0 ) {
if( who->yLevel < Y_LEV_9 ) {
who->playerY += move;
who->yLevel++;
}
}else {
if( who->yLevel > Y_LEV_1 ) {
who->playerY += move;
who->yLevel--;
}
}
}else {
if( move > 0 ) {
if( who->yLevel < Y_LEV_8 ) {
who->playerY += move;
who->yLevel++;
}
}else {
if( who->yLevel > Y_LEV_2 ) {
who->playerY += move;
who->yLevel--;
}
}
}
}
}
static void stoneManager(IApplet * pi)
{
int i;
int sum = 0;
HotBloodApp * pme = (HotBloodApp *)pi;
for( i = 1;i < 4;i++ ) {
if( pme->bonus < 30 ) {
if( pme->bonusCount > 10 ) {
if( !pme->ply[i].liveOK ) {
if( GetRandomMinMax(pi, 0, 100) < 30 ) {
pme->ply[i].liveOK = TRUE;
pme->bonus++;
pme->ply[i].type = 7;
pme->ply[i].anime = 0;
pme->ply[i].PlayerState = ES_STONE_ROLL;
if( GetRandomMinMax(pi, 0, 100) < 50 ) {
pme->ply[i].currentDir = ES_RIGHT;
pme->ply[i].playerX = -19;
pme->ply[i].playerY = pme->O_PlayerY + 46 + 15 * (i - 1);
switch(i) {
case 1:
pme->ply[i].yLevel = Y_LEV_2;
break;
case 2:
pme->ply[i].yLevel = Y_LEV_5;
break;
case 3:
pme->ply[i].yLevel = Y_LEV_8;
break;
}
}else {
pme->ply[i].currentDir = ES_LEFT;
pme->ply[i].playerX = pme->m_cxWidth;
pme->ply[i].playerY = pme->O_PlayerY + 46 + 15 * (i - 1);
switch(i) {
case 1:
pme->ply[i].yLevel = Y_LEV_2;
break;
case 2:
pme->ply[i].yLevel = Y_LEV_5;
break;
case 3:
pme->ply[i].yLevel = Y_LEV_8;
break;
}
}
}
}
}else {
pme->bonusCount++;
}
}else {
if( !pme->ply[i].liveOK ) sum++;
}
}
if( sum == 3 ) { // 焊呈胶 胶抛捞瘤 场.
if( pme->bonusCount == 0 ) {
if( !pme->endBonus2 ) {
pme->GameState = GS_BONUS_STAGE_END2;
pme->endBonus2 = TRUE;
}else {
drawGoGo(pi);
if( pme->howmanyPig >= 21 ) {
pme->pigLiveOK = TRUE;
pme->pigX = 87;
pme->pigYLevel = Y_LEV_5;
}else if( pme->howmanyPig >= 11 ) {
pme->pigLiveOK = TRUE;
pme->pigX = 87;
pme->pigYLevel = Y_LEV_5;
}
checkBonusEnd(pi);
}
}else {
pme->bonusCount--;
}
}
}
static void checkBonusEnd(IApplet * pi)
{
int i;
HotBloodApp * pme = (HotBloodApp *)pi;
if( pme->ply[0].boundaryX >= pme->m_cxWidth - 5 ) {
pme->pigLiveOK = FALSE;
pme->stopjump = FALSE;
//焊呈胶 胶抛捞瘤 捞固瘤 秦力.
for( i = 0;i < 3;i++ ) {
if( pme->m_pIBonusImg[i] != NULL ) {
IIMAGE_Release(pme->m_pIBonusImg[i]);
pme->m_pIBonusImg[i] = NULL;
}
}
//硅版 捞固瘤 秦力.
if( pme->m_pIBackGround != NULL ) {
IIMAGE_Release(pme->m_pIBackGround);
pme->m_pIBackGround = NULL;
}
//绊绊 捞固瘤 秦力.
if( pme->m_pIGoGo != NULL ) {
IIMAGE_Release(pme->m_pIGoGo);
pme->m_pIGoGo = NULL;
}
//痢荐 捞固瘤 秦力.
if( pme->m_pIScore != NULL ) {
IIMAGE_Release(pme->m_pIScore);
pme->m_pIScore = NULL;
}
pme->m_pIBackGround = ISHELL_LoadResImage(pme->a.m_pIShell, HOTBLOOD_RES_FILE, IDB_BACK3_1);
//芒捍 捞固瘤肺靛.
for( i = 30;i < 40;i++ ) {
if( (pme->m_pIPly[i] = ISHELL_LoadResImage(pme->a.m_pIShell, HOTBLOOD_RES_FILE, (int16)(i + 1))) == NULL ) return;
IIMAGE_SetParm(pme->m_pIPly[i], IPARM_ROP, AEE_RO_TRANSPARENT, 0);
}
//痢荐 肺爹.
if( (pme->m_pIScore = ISHELL_LoadResImage(pme->a.m_pIShell, HOTBLOOD_RES_FILE, IDB_SCORE2)) == NULL ) return;
IIMAGE_SetParm(pme->m_pIScore, IPARM_ROP, AEE_RO_TRANSPARENT, 0);
pme->bossPage = 0;
pme->stage = 3;
InitPlayer(pi);
InitStage(pi);
//pme->GameState = GS_PLAY;
pme->GameState = GS_START_ST3;
IDISPLAY_SetColor(pme->a.m_pIDisplay, CLR_USER_BACKGROUND, MAKE_RGB(0, 0, 0));
IDISPLAY_ClearScreen(pme->a.m_pIDisplay);
IIMAGE_SetOffset(pme->m_pIBackGround, 0, -(pme->BackGroundY));
IIMAGE_SetDrawSize(pme->m_pIBackGround, 120, 117);
IIMAGE_Draw(pme->m_pIBackGround, 0, pme->O_PlayerY);
}
}
static void checkStone(IApplet * pi)
{
int i;
HotBloodApp * pme = (HotBloodApp *)pi;
for( i = 1;i < 4;i++ ) {
if( pme->ply[0].yLevel == pme->ply[i].yLevel ) {
if( !pme->ply[i].liveOK ) continue;
if( pme->ply[0].PlayerState != PS_DEFAULT_ATTACK_BY_SPEAR &&
pme->ply[0].PlayerState != PS_KNOCK_DOWN && pme->ply[i].PlayerState != ES_STONE_RUIN
&& pme->ply[0].PlayerState != PS_JUMP ) {
if( pme->ply[0].boundaryX <= pme->ply[i].playerX + 24 &&
pme->ply[0].boundaryX_R >= pme->ply[i].playerX - 5 &&
pme->ply[i].PlayerState == ES_STONE_ROLL ) {
pme->ply[i].anime = 0;
pme->ply[i].PlayerState = ES_STONE_RUIN;
pme->ply[0].anime = 0;
pme->ply[0].PlayerState = PS_KNOCK_DOWN;
}
}else if( pme->ply[0].PlayerState == PS_DEFAULT_ATTACK_BY_SPEAR &&
pme->ply[i].PlayerState != ES_STONE_RUIN ){
if( pme->ply[0].currentDir == PS_LEFT ) {
if( pme->ply[0].boundaryX - 5 < pme->ply[i].playerX + 19 &&
pme->ply[0].boundaryX_R > pme->ply[i].playerX + 19 ) {
pme->ply[i].anime = 0;
pme->ply[i].PlayerState = ES_STONE_RUIN;
}
}else {
if( pme->ply[0].boundaryX + 5 > pme->ply[i].playerX &&
pme->ply[0].boundaryX_R < pme->ply[i].playerX ) {
pme->ply[i].anime = 0;
pme->ply[i].PlayerState = ES_STONE_RUIN;
}
}
}else if( pme->ply[0].PlayerState == PS_JUMP && pme->jumpAttack == 1 ) {
if( pme->ply[0].currentDir == PS_LEFT ) {
if( pme->ply[0].boundaryX - 5 < pme->ply[i].playerX + 19 &&
pme->ply[0].boundaryX_R > pme->ply[i].playerX + 19 ) {
pme->ply[i].anime = 0;
pme->ply[i].PlayerState = ES_STONE_RUIN;
}
}else {
if( pme->ply[0].boundaryX + 5 > pme->ply[i].playerX &&
pme->ply[0].boundaryX_R < pme->ply[i].playerX ) {
pme->ply[i].anime = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -