From 10d15cdffcbc54e7d34db35257a3221a710c54ca Mon Sep 17 00:00:00 2001 From: gerstrong Date: Sun, 26 Jul 2009 20:00:14 +0000 Subject: [PATCH] * 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 --- src/ai/baby.cpp | 54 ++++++++++++++++++++----------------------- src/gamedo.cpp | 4 +++- src/include/enemyai.h | 1 - src/include/gamedo.h | 3 +++ src/include/gamepdo.h | 5 +--- src/include/misc.h | 2 ++ src/misc.cpp | 7 ++++++ 7 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/ai/baby.cpp b/src/ai/baby.cpp index fd36e1eea..b3346c7e0 100644 --- a/src/ai/baby.cpp +++ b/src/ai/baby.cpp @@ -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; } + + diff --git a/src/gamedo.cpp b/src/gamedo.cpp index 3e77df761..faee91dc8 100644 --- a/src/gamedo.cpp +++ b/src/gamedo.cpp @@ -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 diff --git a/src/include/enemyai.h b/src/include/enemyai.h index 2ea3fdc07..15d8569ef 100644 --- a/src/include/enemyai.h +++ b/src/include/enemyai.h @@ -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 diff --git a/src/include/gamedo.h b/src/include/gamedo.h index e494ac250..32d2e29a3 100644 --- a/src/include/gamedo.h +++ b/src/include/gamedo.h @@ -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); diff --git a/src/include/gamepdo.h b/src/include/gamepdo.h index f46f9dd5d..630113318 100644 --- a/src/include/gamepdo.h +++ b/src/include/gamepdo.h @@ -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); + diff --git a/src/include/misc.h b/src/include/misc.h index 91351b495..87d34a8e3 100644 --- a/src/include/misc.h +++ b/src/include/misc.h @@ -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); diff --git a/src/misc.cpp b/src/misc.cpp index 0674eca68..22a965263 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -1228,6 +1228,13 @@ void usage(void) printf(" keen -ep3 play a normal game of ep3
"); } +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;