butler and door updated from CK 8.4

git-svn-id: https://clonekeenplus.svn.sourceforge.net/svnroot/clonekeenplus/cgenius/trunk@192 4df4b0f3-56ce-47cb-b001-ed939b7d65a6
This commit is contained in:
gerstrong
2009-07-29 16:48:51 +00:00
parent 5059fd486a
commit e9497a8836
7 changed files with 70 additions and 7 deletions

View File

@@ -39,8 +39,10 @@ char not_about_to_fall;
objects[o].ai.butler.movedir = RIGHT;
objects[o].ai.butler.animtimer = 0;
objects[o].canbezapped = 1; // will stop bullets but are not harmed
//objects[o].inhibitfall = 1;
objects[o].needinit = 0;
objects[o].x -= 16;
//objects[o].x -= 16;
objects[o].x -= 4;
}
// push keen
if (objects[o].touchPlayer && !player[objects[o].touchedBy].pdie)
@@ -87,7 +89,6 @@ char not_about_to_fall;
{ // move left
not_about_to_fall = TileProperty[getmaptileat((objects[o].x>>CSF)-BUTLER_LOOK_AHEAD_DIST, (objects[o].y>>CSF)+sprites[BUTLER_WALK_LEFT_FRAME].ysize)][BUP];
//not_about_to_fall = tiles[getmaptileat((objects[o].x>>CSF)-BUTLER_LOOK_AHEAD_DIST, (objects[o].y>>CSF)+sprites[BUTLER_WALK_LEFT_FRAME].ysize)].solidfall;
objects[o].sprite = BUTLER_WALK_LEFT_FRAME + objects[o].ai.butler.frame;
if (!objects[o].blockedl && not_about_to_fall)
{
@@ -109,7 +110,6 @@ char not_about_to_fall;
{ // move right
not_about_to_fall = TileProperty[getmaptileat((objects[o].x>>CSF)+sprites[BUTLER_WALK_RIGHT_FRAME].xsize+BUTLER_LOOK_AHEAD_DIST, (objects[o].y>>CSF)+sprites[BUTLER_WALK_RIGHT_FRAME].ysize)][BUP];
//not_about_to_fall = tiles[getmaptileat((objects[o].x>>CSF)+sprites[BUTLER_WALK_RIGHT_FRAME].xsize+BUTLER_LOOK_AHEAD_DIST, (objects[o].y>>CSF)+sprites[BUTLER_WALK_RIGHT_FRAME].ysize)].solidfall;
objects[o].sprite = BUTLER_WALK_RIGHT_FRAME + objects[o].ai.butler.frame;
if (!objects[o].blockedr && not_about_to_fall)
{

View File

@@ -1,6 +1,6 @@
#include "../keen.h"
#include "../include/enemyai.h"
#include "door.h"
// "AI" for the door object (to do the animation when a door
// opens, the door tiles are removed and replaced with a sprite
@@ -9,7 +9,7 @@
#define DOOR_OPEN_SPEED 10
void door_ai(int o)
/*void door_ai(int o)
{
if (objects[o].needinit)
{
@@ -30,4 +30,29 @@ void door_ai(int o)
else objects[o].ai.door.distance_traveled++;
objects[o].ai.door.timer = 0;
} else objects[o].ai.door.timer++;
}*/
void door_ai(int o, char DoorOpenDir)
{
if (objects[o].needinit)
{
objects[o].ai.door.timer = 0;
sprites[objects[o].sprite].ysize = 32;
objects[o].inhibitfall = 1;
objects[o].needinit = 0;
}
if (objects[o].ai.door.timer > DOOR_OPEN_SPEED)
{
// TODO: Create a flag for mods in which the door can be opened in another direction
/*if (DoorOpenDir==DOWN)*/ objects[o].y += (1<<CSF);
if (!--sprites[objects[o].sprite].ysize)
{
delete_object(o);
}
objects[o].ai.door.timer = 0;
}
else objects[o].ai.door.timer++;
}

19
src/ai/door.h Normal file
View File

@@ -0,0 +1,19 @@
/*
* door.h
*
* Created on: 29.07.2009
* Author: gerstrong
*/
#ifndef DOOR_H_
#define DOOR_H_
// direction in the where the door goes, when door opened. Usually down
#define RIGHT 0
#define LEFT 1
#define UP 2
#define DOWN 3
void delete_object(int o);
#endif /* DOOR_H_ */

View File

@@ -384,6 +384,15 @@ short tilefix=0;
objects[o].sprite = doorsprite;
}
void delete_object(int o)
{
if (objects[o].exists)
{
objects[o].exists = 0;
//if (o+1==highest_objslot) highest_objslot--;
}
}
// checks if score is > than "extra life at" and award 1-UPs when appropriate
void extralifeat(int cp)
{

View File

@@ -258,7 +258,7 @@ int i;
case OBJ_BUTLER: butler_ai(i, pCKP->Control.levelcontrol.hardmode); break;
case OBJ_TANK: tank_ai(i, pCKP->Control.levelcontrol.hardmode); break;
case OBJ_RAY: ray_ai(i, pCKP, pCKP->Control.levelcontrol); break;
case OBJ_DOOR: door_ai(i); break;
case OBJ_DOOR: door_ai(i, pCKP->Control.levelcontrol.cepvars.DoorOpenDir); break;
case OBJ_ICECHUNK: icechunk_ai(i); break;
case OBJ_ICEBIT: icebit_ai(i); break;
case OBJ_TELEPORTER: teleporter_ai(i, pCKP->Control.levelcontrol); break;

View File

@@ -64,6 +64,16 @@ struct stLevelControl
// as long as we only have POD
stLevelControl() { memset(this, 0, sizeof(stLevelControl)); }
// stuff for custom episode's options
struct
{
char DoorOpenDir;
char pShotSpeed;
char VortDieDoFade;
char vgatiles;
char vgasprites;
} cepvars;
};

View File

@@ -13,9 +13,9 @@ void vort_ai(int o, stCloneKeenPlus *pCKP, stLevelControl levelcontrol);
void butler_ai(int o, bool hardmode);
void tank_ai(int o, bool hardmode);
void ray_ai(int o, stCloneKeenPlus *pCKP, stLevelControl levelcontrol);
void door_ai(int o);
void icechunk_ai(int o);
void icebit_ai(int o);
void door_ai(int o, char DoorOpenDir);
void teleporter_ai(int o, stLevelControl levelcontrol);
void rope_ai(int o);
// ep2