* Corrected some spell errors
* Added vorticon baby AI from CK 8.4. Now they are more pesty ;-) git-svn-id: https://clonekeenplus.svn.sourceforge.net/svnroot/clonekeenplus/cgenius/trunk@185 4df4b0f3-56ce-47cb-b001-ed939b7d65a6
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
#include "../keen.h"
|
||||
#include "../include/game.h"
|
||||
|
||||
#include "../include/enemyai.h"
|
||||
#include "baby.h"
|
||||
|
||||
// Baby Vorticon (the superfast little blue creatures that knock you down)
|
||||
// (ep 2 & 3)
|
||||
@@ -21,7 +21,8 @@
|
||||
#define BABY_FRY_FRAME 56
|
||||
#define BABY_DEAD_FRAME 57
|
||||
|
||||
#define BABY_SMALLJUMP_PROB 20
|
||||
#define BABY_JUMP_PROB 80
|
||||
#define BABY_BOUNCE_PROB 10
|
||||
|
||||
#define BABY_FRY_TIME 80
|
||||
#define BABY_DIE_INERTIA 20
|
||||
@@ -30,14 +31,14 @@
|
||||
#define BABY_JUMP_SMALL 0
|
||||
void baby_jump(int o, int big);
|
||||
|
||||
void baby_ai(int o, stLevelControl levelcontrol)
|
||||
void baby_ai(int o, int episode, bool hard)
|
||||
{
|
||||
unsigned int ep3;
|
||||
bool ep3;
|
||||
|
||||
if (objects[o].needinit)
|
||||
{
|
||||
objects[o].ai.baby.state = BABY_RUN;
|
||||
objects[o].ai.baby.dir = RIGHT;
|
||||
objects[o].ai.baby.dir = rnd()&1?LEFT:RIGHT;
|
||||
objects[o].ai.baby.walkframe = 0;
|
||||
objects[o].ai.baby.walktimer = 0;
|
||||
objects[o].ai.baby.inertia_x = 0;
|
||||
@@ -46,7 +47,8 @@ unsigned int ep3;
|
||||
objects[o].needinit = 0;
|
||||
objects[o].blockedl = objects[o].blockedr = objects[o].blockedu = objects[o].blockedd = 1;
|
||||
|
||||
if (levelcontrol.episode==3) ep3 = 1; else ep3 = 0;
|
||||
// babies are in ep2 & ep3, but frameset starts one index prior in ep3
|
||||
if (episode==3) ep3 = true; else ep3 = false;
|
||||
objects[o].sprite = BABY_WALK_RIGHT_FRAME - ep3;
|
||||
return;
|
||||
}
|
||||
@@ -56,8 +58,8 @@ unsigned int ep3;
|
||||
return;
|
||||
}
|
||||
|
||||
// need to -1 on the animation frames when in ep3
|
||||
if (levelcontrol.episode==3) ep3 = 1; else ep3 = 0;
|
||||
// babies are in ep2 & ep3, but frameset starts one index prior in ep3
|
||||
if (episode==3) ep3 = true; else ep3 = false;
|
||||
|
||||
/* jumping */
|
||||
if (objects[o].ai.baby.inertia_y < 0 || !objects[o].blockedd)
|
||||
@@ -79,13 +81,12 @@ unsigned int ep3;
|
||||
}
|
||||
else objects[o].ai.baby.jumpdectimer++;
|
||||
}
|
||||
else
|
||||
else // blockedd = 1, and inertia_y >= 0
|
||||
{
|
||||
// blockedd = 1, and inertia_y > 0
|
||||
objects[o].ai.baby.inertia_y = 0;
|
||||
if (objects[o].ai.baby.state == BABY_RUN)
|
||||
{
|
||||
if (rand()%BABY_SMALLJUMP_PROB == (BABY_SMALLJUMP_PROB/2))
|
||||
if (rnd()%BABY_JUMP_PROB == (BABY_JUMP_PROB/2))
|
||||
{
|
||||
baby_jump(o, BABY_JUMP_SMALL);
|
||||
}
|
||||
@@ -96,7 +97,7 @@ unsigned int ep3;
|
||||
// got hit?
|
||||
if (objects[o].zapped)
|
||||
{
|
||||
if (objects[o].zapped > 1 || !levelcontrol.hardmode)
|
||||
if (objects[o].zapped > 1 || !hard)
|
||||
{ // we're fried!!
|
||||
if (objects[o].ai.baby.state != BABY_DYING)
|
||||
{
|
||||
@@ -106,21 +107,14 @@ unsigned int ep3;
|
||||
objects[o].sprite = BABY_FRY_FRAME - ep3;
|
||||
objects[o].zapped = 0;
|
||||
objects[o].canbezapped = 0;
|
||||
|
||||
if (objects[o].onscreen && !g_pSound->isPlaying(SOUND_VORT_DIE))
|
||||
{
|
||||
g_pSound->playStereofromCoord(SOUND_VORT_DIE, PLAY_NOW, objects[o].scrx);
|
||||
|
||||
}
|
||||
|
||||
if (objects[o].ai.baby.dir == RIGHT)
|
||||
{
|
||||
objects[o].ai.baby.inertia_x = BABY_DIE_INERTIA;
|
||||
}
|
||||
else
|
||||
{
|
||||
objects[o].ai.baby.inertia_x = -BABY_DIE_INERTIA;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -153,9 +147,9 @@ unsigned int ep3;
|
||||
objects[o].ai.baby.inertia_x--;
|
||||
}
|
||||
|
||||
if (objects[o].ai.baby.inertia_x == 0 &&\
|
||||
objects[o].ai.baby.inertia_y == 0 &&\
|
||||
objects[o].sprite==(BABY_DEAD_FRAME-ep3))
|
||||
if (objects[o].ai.baby.inertia_x == 0 &&
|
||||
objects[o].ai.baby.inertia_y == 0 &&
|
||||
objects[o].sprite==(unsigned int)(BABY_DEAD_FRAME-ep3))
|
||||
{
|
||||
objects[o].ai.baby.state = BABY_DEAD;
|
||||
}
|
||||
@@ -177,7 +171,7 @@ unsigned int ep3;
|
||||
if (objects[o].blockedr)
|
||||
{
|
||||
objects[o].ai.baby.dir = LEFT;
|
||||
if (rand()&1) baby_jump(o, BABY_JUMP_BIG);
|
||||
if ((rnd()&BABY_BOUNCE_PROB)==BABY_BOUNCE_PROB/2) baby_jump(o, BABY_JUMP_BIG);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -190,7 +184,7 @@ unsigned int ep3;
|
||||
if (objects[o].blockedl)
|
||||
{
|
||||
objects[o].ai.baby.dir = RIGHT;
|
||||
if (rand()&1) baby_jump(o, BABY_JUMP_BIG);
|
||||
if ((rnd()&BABY_BOUNCE_PROB)==BABY_BOUNCE_PROB/2) baby_jump(o, BABY_JUMP_BIG);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -211,7 +205,7 @@ unsigned int ep3;
|
||||
}
|
||||
|
||||
#define BABY_BIGJUMP 25
|
||||
#define BABY_BIGJUMP_DEC_RATE 20
|
||||
#define BABY_BIGJUMP_DEC_RATE 10
|
||||
|
||||
#define BABY_MIN_SMALLJUMP 23
|
||||
#define BABY_SMALLJUMP_MIN_DEC_RATE 18
|
||||
@@ -219,7 +213,7 @@ unsigned int ep3;
|
||||
#define BABY_SMALLJUMP_MAX_DEC_RATE 20
|
||||
void baby_jump(int o, int big)
|
||||
{
|
||||
if ((rand()&2)==0) big = 1-big;
|
||||
if ((rnd()&2)==0) big = 1-big;
|
||||
if (big==BABY_JUMP_BIG)
|
||||
{
|
||||
objects[o].ai.baby.inertia_y = -BABY_BIGJUMP;
|
||||
@@ -227,10 +221,12 @@ void baby_jump(int o, int big)
|
||||
}
|
||||
else
|
||||
{
|
||||
objects[o].ai.baby.inertia_y = -20;//(rand()%(BABY_MAX_SMALLJUMP-BABY_MIN_SMALLJUMP))+BABY_MIN_SMALLJUMP;
|
||||
objects[o].ai.baby.jumpdecrate = 10;//(rand()%(BABY_SMALLJUMP_MAX_DEC_RATE-BABY_SMALLJUMP_MIN_DEC_RATE))+BABY_SMALLJUMP_MIN_DEC_RATE;
|
||||
objects[o].ai.baby.inertia_y = -20;//(rnd()%(BABY_MAX_SMALLJUMP-BABY_MIN_SMALLJUMP))+BABY_MIN_SMALLJUMP;
|
||||
objects[o].ai.baby.jumpdecrate = 10;//(rnd()%(BABY_SMALLJUMP_MAX_DEC_RATE-BABY_SMALLJUMP_MIN_DEC_RATE))+BABY_SMALLJUMP_MIN_DEC_RATE;
|
||||
}
|
||||
|
||||
|
||||
objects[o].ai.baby.jumpdectimer = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
#include "include/enemyai.h"
|
||||
|
||||
|
||||
extern unsigned long gotPlayX;
|
||||
|
||||
extern unsigned long CurrentTickCount;
|
||||
@@ -268,7 +269,8 @@ int i;
|
||||
case OBJ_PLATFORM: platform_ai(i, pCKP->Control.levelcontrol); break;
|
||||
case OBJ_VORTELITE: vortelite_ai(i, pCKP->Control.levelcontrol.dark); break;
|
||||
case OBJ_SECTOREFFECTOR: se_ai(i, pCKP); break;
|
||||
case OBJ_BABY: baby_ai(i, pCKP->Control.levelcontrol); break;
|
||||
case OBJ_BABY: baby_ai(i, pCKP->Control.levelcontrol.episode,
|
||||
pCKP->Control.levelcontrol.hardmode); break;
|
||||
case OBJ_EXPLOSION: explosion_ai(i); break;
|
||||
case OBJ_EARTHCHUNK: earthchunk_ai(i); break;
|
||||
//KEEN3
|
||||
|
||||
@@ -24,7 +24,6 @@ void tankep2_ai(int o, stCloneKeenPlus *pCKP);
|
||||
void platform_ai(int o, stLevelControl levelcontrol);
|
||||
void vortelite_ai(int o, bool darkness);
|
||||
void se_ai(int o, stCloneKeenPlus *pCKP);
|
||||
void baby_ai(int o, stLevelControl levelcontrol);
|
||||
void explosion_ai(int o);
|
||||
void earthchunk_ai(int o);
|
||||
// ep3
|
||||
|
||||
@@ -5,3 +5,6 @@ void gamedo_HandleFKeys(stCloneKeenPlus *pCKP);
|
||||
void gamedo_frameskipping_blitonly(void);
|
||||
void gamedo_getInput(stCloneKeenPlus *pCKP);
|
||||
void gamedo_render_drawobjects(stCloneKeenPlus *pCKP);
|
||||
|
||||
// Enemies AI Functions used in gamepdo.cpp
|
||||
void baby_ai(int o, int episode, bool hard);
|
||||
|
||||
@@ -5,23 +5,20 @@ void gamepdo_getgoodies(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_falling(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_ProcessInput(unsigned int cp, stCloneKeenPlus *pCKP);
|
||||
|
||||
//void gamepdo_HandlePlayer(int cp);
|
||||
void gamepdo_walkbehindexitdoor(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_dieanim(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_keencicle(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_setdir(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_setblockedlru(unsigned int cp, stCloneKeenPlus *pCKP);
|
||||
//void gamepdo_getgoodies(int cp);
|
||||
void gamepdo_walkinganim(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_walking(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_playpushed(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_JumpAndPogo(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_Jump(int cp);
|
||||
//void gamepdo_falling(int cp, stCommand command[MAX_COMMANDS]);
|
||||
void gamepdo_raygun(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_special(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_SelectFrame(int cp);
|
||||
void gamepdo_checkcollision(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_moveplayer(int cp, stCloneKeenPlus *pCKP);
|
||||
void gamepdo_ankh(int cp);
|
||||
//void gamepdo_StatusBox(int cp);
|
||||
|
||||
|
||||
@@ -13,3 +13,5 @@ char gameiswon(stCloneKeenPlus *pCKP);
|
||||
void game_save(char *fname, stCloneKeenPlus *pCKP);
|
||||
int game_load(char *fname, stCloneKeenPlus *pCKP);
|
||||
void showTextMB(int lines, char **text, stCloneKeenPlus *pCKP);
|
||||
|
||||
unsigned int rnd(void);
|
||||
|
||||
@@ -1228,6 +1228,13 @@ void usage(void)
|
||||
printf(" keen -ep3 play a normal game of ep3<br>");
|
||||
}
|
||||
|
||||
unsigned int rnd(void)
|
||||
{
|
||||
//random_seed = random_seed * 1103515245 + 12345;
|
||||
//return (uint)(random_seed / 65536) % 32768;
|
||||
return rand();
|
||||
}
|
||||
|
||||
void radar(void)
|
||||
{
|
||||
unsigned int x,y,o;
|
||||
|
||||
Reference in New Issue
Block a user