* 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:
gerstrong
2009-07-26 20:00:14 +00:00
parent 3ea2d41304
commit 10d15cdffc
7 changed files with 41 additions and 35 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;