Commit 55f2fbd3 authored by Steven Fuller's avatar Steven Fuller

Finished conversion of actor states from individual structions to an array

of structures, using enumerated indexes instead of pointers (idea from
WolfGL).
parent 328d9220
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -909,7 +909,7 @@ void Cmd_Fire() ...@@ -909,7 +909,7 @@ void Cmd_Fire()
gamestate.weaponframe = 0; gamestate.weaponframe = 0;
player->state = &s_attack; player->state = s_attack;
gamestate.attackframe = 0; gamestate.attackframe = 0;
gamestate.attackcount = gamestate.attackcount =
...@@ -1028,7 +1028,7 @@ void SpawnPlayer (int tilex, int tiley, int dir) ...@@ -1028,7 +1028,7 @@ void SpawnPlayer (int tilex, int tiley, int dir)
*(mapsegs[0] + farmapylookup[player->tiley]+player->tilex); *(mapsegs[0] + farmapylookup[player->tiley]+player->tilex);
player->x = ((long)tilex<<TILESHIFT)+TILEGLOBAL/2; player->x = ((long)tilex<<TILESHIFT)+TILEGLOBAL/2;
player->y = ((long)tiley<<TILESHIFT)+TILEGLOBAL/2; player->y = ((long)tiley<<TILESHIFT)+TILEGLOBAL/2;
player->state = &s_player; player->state = s_player;
player->angle = (1-dir)*90; player->angle = (1-dir)*90;
if (player->angle<0) if (player->angle<0)
player->angle += ANGLES; player->angle += ANGLES;
...@@ -1250,7 +1250,7 @@ void T_Attack(objtype *ob) ...@@ -1250,7 +1250,7 @@ void T_Attack(objtype *ob)
switch (cur->attack) switch (cur->attack)
{ {
case -1: case -1:
ob->state = &s_player; ob->state = s_player;
if (!gamestate.ammo) if (!gamestate.ammo)
{ {
gamestate.weapon = wp_knife; gamestate.weapon = wp_knife;
......
...@@ -524,8 +524,8 @@ typedef struct statestruct ...@@ -524,8 +524,8 @@ typedef struct statestruct
int shapenum; /* a shapenum of -1 means get from ob->temp1 */ int shapenum; /* a shapenum of -1 means get from ob->temp1 */
int tictime; int tictime;
void (*think)(), (*action)(); void (*think)(), (*action)();
struct statestruct *next; int next; /* stateenum */
} PACKED statetype; } statetype;
//--------------------- //---------------------
// //
...@@ -540,7 +540,7 @@ typedef struct statstruct ...@@ -540,7 +540,7 @@ typedef struct statstruct
int shapenum; /* if shapenum == -1 the obj has been removed */ int shapenum; /* if shapenum == -1 the obj has been removed */
byte flags; byte flags;
byte itemnumber; byte itemnumber;
} PACKED statobj_t; } statobj_t;
//--------------------- //---------------------
// //
...@@ -555,7 +555,7 @@ typedef struct doorstruct ...@@ -555,7 +555,7 @@ typedef struct doorstruct
byte lock; byte lock;
enum {dr_open,dr_closed,dr_opening,dr_closing} action; enum {dr_open,dr_closed,dr_opening,dr_closing} action;
int ticcount; int ticcount;
} PACKED doorobj_t; } doorobj_t;
//-------------------- //--------------------
// //
...@@ -568,7 +568,7 @@ typedef struct objstruct ...@@ -568,7 +568,7 @@ typedef struct objstruct
activetype active; activetype active;
int ticcount; int ticcount;
classtype obclass; classtype obclass;
statetype *state; int state; /* stateenum */
byte flags; /* FL_SHOOTABLE, etc */ byte flags; /* FL_SHOOTABLE, etc */
...@@ -589,11 +589,11 @@ typedef struct objstruct ...@@ -589,11 +589,11 @@ typedef struct objstruct
int temp1,temp2,temp3; int temp1,temp2,temp3;
struct objstruct *next,*prev; struct objstruct *next,*prev;
} PACKED objtype; } objtype;
#define NUMBUTTONS 8 #define NUMBUTTONS 8
enum { enum {
bt_nobutton=-1, bt_nobutton=-1,
bt_attack=0, bt_attack=0,
bt_strafe, bt_strafe,
...@@ -607,7 +607,7 @@ enum { ...@@ -607,7 +607,7 @@ enum {
#define NUMWEAPONS 4 #define NUMWEAPONS 4
typedef enum { typedef enum {
wp_knife, wp_knife,
wp_pistol, wp_pistol,
wp_machinegun, wp_machinegun,
...@@ -647,7 +647,7 @@ typedef struct ...@@ -647,7 +647,7 @@ typedef struct
long TimeCount; long TimeCount;
long killx,killy; long killx,killy;
boolean victoryflag; // set during victory animations boolean victoryflag; // set during victory animations
} PACKED gametype; } gametype;
typedef enum { typedef enum {
...@@ -730,7 +730,6 @@ extern boolean spearflag; ...@@ -730,7 +730,6 @@ extern boolean spearflag;
void ScanInfoPlane (void); void ScanInfoPlane (void);
void SetupGameLevel (void); void SetupGameLevel (void);
void DrawPlayScreen (void); void DrawPlayScreen (void);
void FizzleOut (void);
void GameLoop (void); void GameLoop (void);
void ClearMemory (void); void ClearMemory (void);
void PlayDemo(int demonumber); void PlayDemo(int demonumber);
...@@ -878,8 +877,8 @@ void ThreeDRefresh (void); ...@@ -878,8 +877,8 @@ void ThreeDRefresh (void);
#define SPDPATROL 512 #define SPDPATROL 512
#define SPDDOG 1500 #define SPDDOG 1500
void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state); void SpawnNewObj(unsigned tilex, unsigned tiley, int state); /* stateenum */
void NewState (objtype *ob, statetype *state); void NewState(objtype *ob, int state); /* stateenum */
boolean TryWalk (objtype *ob); boolean TryWalk (objtype *ob);
void SelectChaseDir (objtype *ob); void SelectChaseDir (objtype *ob);
......
...@@ -248,8 +248,8 @@ static int CalcRotate(objtype *ob) ...@@ -248,8 +248,8 @@ static int CalcRotate(objtype *ob)
while (angle<0) while (angle<0)
angle+=ANGLES; angle+=ANGLES;
if (ob->state->rotate == 2) // 2 rotation pain frame if (gamestates[ob->state].rotate == 2) // 2 rotation pain frame
return 4*(angle/(ANGLES/2)); // seperated by 3 (art layout...) return 4*(angle/(ANGLES/2)); // seperated by 3
return angle/(ANGLES/8); return angle/(ANGLES/8);
} }
...@@ -320,7 +320,7 @@ static void DrawScaleds() ...@@ -320,7 +320,7 @@ static void DrawScaleds()
// //
for (obj = player->next; obj; obj = obj->next) for (obj = player->next; obj; obj = obj->next)
{ {
if (!(visptr->shapenum = obj->state->shapenum)) if (!(visptr->shapenum = gamestates[obj->state].shapenum))
continue; // no shape continue; // no shape
spotloc = (obj->tilex << 6) + obj->tiley; spotloc = (obj->tilex << 6) + obj->tiley;
...@@ -350,7 +350,7 @@ static void DrawScaleds() ...@@ -350,7 +350,7 @@ static void DrawScaleds()
if (visptr->shapenum == -1) if (visptr->shapenum == -1)
visptr->shapenum = obj->temp1; // special shape visptr->shapenum = obj->temp1; // special shape
if (obj->state->rotate) if (gamestates[obj->state].rotate)
visptr->shapenum += CalcRotate(obj); visptr->shapenum += CalcRotate(obj);
if (visptr < &vislist[MAXVISABLE-1]) /* don't let it overflow */ if (visptr < &vislist[MAXVISABLE-1]) /* don't let it overflow */
...@@ -412,7 +412,7 @@ static void DrawPlayerWeapon() ...@@ -412,7 +412,7 @@ static void DrawPlayerWeapon()
#ifndef SPEAR #ifndef SPEAR
if (gamestate.victoryflag) if (gamestate.victoryflag)
{ {
if (player->state == &s_deathcam && (get_TimeCount() & 32) ) if ((player->state == s_deathcam) && (get_TimeCount() & 32))
SimpleScaleShape(viewwidth/2,SPR_DEATHCAM,viewheight+1); SimpleScaleShape(viewwidth/2,SPR_DEATHCAM,viewheight+1);
return; return;
} }
......
...@@ -831,7 +831,7 @@ static void RemoveObj(objtype *gone) ...@@ -831,7 +831,7 @@ static void RemoveObj(objtype *gone)
if (gone == player) if (gone == player)
Quit ("RemoveObj: Tried to remove the player!"); Quit ("RemoveObj: Tried to remove the player!");
gone->state = NULL; gone->state = s_none;
// //
// fix the next object's back link // fix the next object's back link
...@@ -1120,11 +1120,11 @@ void DoActor(objtype *ob) ...@@ -1120,11 +1120,11 @@ void DoActor(objtype *ob)
if (!ob->ticcount) if (!ob->ticcount)
{ {
think = ob->state->think; think = gamestates[ob->state].think;
if (think) if (think)
{ {
think (ob); think(ob);
if (!ob->state) if (ob->state == s_none)
{ {
RemoveObj (ob); RemoveObj (ob);
return; return;
...@@ -1145,45 +1145,45 @@ void DoActor(objtype *ob) ...@@ -1145,45 +1145,45 @@ void DoActor(objtype *ob)
// transitional object // transitional object
// //
ob->ticcount-=tics; ob->ticcount-=tics;
while ( ob->ticcount <= 0) while (ob->ticcount <= 0)
{ {
think = ob->state->action; // end of state action think = gamestates[ob->state].action; // end of state action
if (think) if (think)
{ {
think (ob); think(ob);
if (!ob->state) if (ob->state == s_none)
{ {
RemoveObj(ob); RemoveObj(ob);
return; return;
} }
} }
ob->state = ob->state->next; ob->state = gamestates[ob->state].next;
if (!ob->state) if (ob->state == s_none)
{ {
RemoveObj (ob); RemoveObj(ob);
return; return;
} }
if (!ob->state->tictime) if (!gamestates[ob->state].tictime)
{ {
ob->ticcount = 0; ob->ticcount = 0;
goto think; goto think;
} }
ob->ticcount += ob->state->tictime; ob->ticcount += gamestates[ob->state].tictime;
} }
think: think:
// //
// think // think
// //
think = ob->state->think; think = gamestates[ob->state].think;
if (think) if (think)
{ {
think (ob); think(ob);
if (!ob->state) if (ob->state == s_none)
{ {
RemoveObj(ob); RemoveObj(ob);
return; return;
......
...@@ -42,13 +42,13 @@ void FirstSighting (objtype *ob); ...@@ -42,13 +42,13 @@ void FirstSighting (objtype *ob);
=================== ===================
*/ */
void SpawnNewObj(unsigned tilex, unsigned tiley, statetype *state) void SpawnNewObj(unsigned tilex, unsigned tiley, int state) /* stateenum */
{ {
GetNewActor(); GetNewActor();
new->state = state; new->state = state;
if (state->tictime) if (gamestates[state].tictime)
new->ticcount = US_RndT () % state->tictime; new->ticcount = US_RndT () % gamestates[state].tictime;
else else
new->ticcount = 0; new->ticcount = 0;
...@@ -73,10 +73,10 @@ void SpawnNewObj(unsigned tilex, unsigned tiley, statetype *state) ...@@ -73,10 +73,10 @@ void SpawnNewObj(unsigned tilex, unsigned tiley, statetype *state)
=================== ===================
*/ */
void NewState(objtype *ob, statetype *state) void NewState(objtype *ob, int state) /* stateenum */
{ {
ob->state = state; ob->state = state;
ob->ticcount = state->tictime; ob->ticcount = gamestates[state].tictime;
} }
/* /*
...@@ -742,25 +742,25 @@ void KillActor (objtype *ob) ...@@ -742,25 +742,25 @@ void KillActor (objtype *ob)
{ {
case guardobj: case guardobj:
GivePoints (100); GivePoints (100);
NewState (ob,&s_grddie1); NewState (ob,s_grddie1);
PlaceItemType (bo_clip2,tilex,tiley); PlaceItemType (bo_clip2,tilex,tiley);
break; break;
case officerobj: case officerobj:
GivePoints (400); GivePoints (400);
NewState (ob,&s_ofcdie1); NewState (ob,s_ofcdie1);
PlaceItemType (bo_clip2,tilex,tiley); PlaceItemType (bo_clip2,tilex,tiley);
break; break;
case mutantobj: case mutantobj:
GivePoints (700); GivePoints (700);
NewState (ob,&s_mutdie1); NewState (ob,s_mutdie1);
PlaceItemType (bo_clip2,tilex,tiley); PlaceItemType (bo_clip2,tilex,tiley);
break; break;
case ssobj: case ssobj:
GivePoints (500); GivePoints (500);
NewState (ob,&s_ssdie1); NewState (ob,s_ssdie1);
if (gamestate.bestweapon < wp_machinegun) if (gamestate.bestweapon < wp_machinegun)
PlaceItemType (bo_machinegun,tilex,tiley); PlaceItemType (bo_machinegun,tilex,tiley);
else else
...@@ -769,19 +769,19 @@ void KillActor (objtype *ob) ...@@ -769,19 +769,19 @@ void KillActor (objtype *ob)
case dogobj: case dogobj:
GivePoints (200); GivePoints (200);
NewState (ob,&s_dogdie1); NewState (ob,s_dogdie1);
break; break;
#ifndef SPEAR #ifndef SPEAR
case bossobj: case bossobj:
GivePoints (5000); GivePoints (5000);
NewState (ob,&s_bossdie1); NewState (ob,s_bossdie1);
PlaceItemType (bo_key1,tilex,tiley); PlaceItemType (bo_key1,tilex,tiley);
break; break;
case gretelobj: case gretelobj:
GivePoints (5000); GivePoints (5000);
NewState (ob,&s_greteldie1); NewState (ob,s_greteldie1);
PlaceItemType (bo_key1,tilex,tiley); PlaceItemType (bo_key1,tilex,tiley);
break; break;
...@@ -789,71 +789,71 @@ void KillActor (objtype *ob) ...@@ -789,71 +789,71 @@ void KillActor (objtype *ob)
GivePoints (5000); GivePoints (5000);
gamestate.killx = player->x; gamestate.killx = player->x;
gamestate.killy = player->y; gamestate.killy = player->y;
NewState (ob,&s_giftdie1); NewState (ob,s_giftdie1);
break; break;
case fatobj: case fatobj:
GivePoints (5000); GivePoints (5000);
gamestate.killx = player->x; gamestate.killx = player->x;
gamestate.killy = player->y; gamestate.killy = player->y;
NewState (ob,&s_fatdie1); NewState (ob,s_fatdie1);
break; break;
case schabbobj: case schabbobj:
GivePoints (5000); GivePoints (5000);
gamestate.killx = player->x; gamestate.killx = player->x;
gamestate.killy = player->y; gamestate.killy = player->y;
NewState (ob,&s_schabbdie1); NewState (ob,s_schabbdie1);
A_DeathScream(ob); A_DeathScream(ob);
break; break;
case fakeobj: case fakeobj:
GivePoints (2000); GivePoints (2000);
NewState (ob,&s_fakedie1); NewState (ob,s_fakedie1);
break; break;
case mechahitlerobj: case mechahitlerobj:
GivePoints (5000); GivePoints (5000);
NewState (ob,&s_mechadie1); NewState (ob,s_mechadie1);
break; break;
case realhitlerobj: case realhitlerobj:
GivePoints (5000); GivePoints (5000);
gamestate.killx = player->x; gamestate.killx = player->x;
gamestate.killy = player->y; gamestate.killy = player->y;
NewState (ob,&s_hitlerdie1); NewState (ob,s_hitlerdie1);
A_DeathScream(ob); A_DeathScream(ob);
break; break;
#else #else
case spectreobj: case spectreobj:
GivePoints (200); GivePoints (200);
NewState (ob,&s_spectredie1); NewState (ob,s_spectredie1);
break; break;
case angelobj: case angelobj:
GivePoints (5000); GivePoints (5000);
NewState (ob,&s_angeldie1); NewState (ob,s_angeldie1);
break; break;
case transobj: case transobj:
GivePoints (5000); GivePoints (5000);
NewState (ob,&s_transdie0); NewState (ob,s_transdie0);
PlaceItemType (bo_key1,tilex,tiley); PlaceItemType (bo_key1,tilex,tiley);
break; break;
case uberobj: case uberobj:
GivePoints (5000); GivePoints (5000);
NewState (ob,&s_uberdie0); NewState (ob,s_uberdie0);
PlaceItemType (bo_key1,tilex,tiley); PlaceItemType (bo_key1,tilex,tiley);
break; break;
case willobj: case willobj:
GivePoints (5000); GivePoints (5000);
NewState (ob,&s_willdie1); NewState (ob,s_willdie1);
PlaceItemType (bo_key1,tilex,tiley); PlaceItemType (bo_key1,tilex,tiley);
break; break;
case deathobj: case deathobj:
GivePoints (5000); GivePoints (5000);
NewState (ob,&s_deathdie1); NewState (ob,s_deathdie1);
PlaceItemType (bo_key1,tilex,tiley); PlaceItemType (bo_key1,tilex,tiley);
break; break;
#endif #endif
...@@ -905,30 +905,30 @@ void DamageActor (objtype *ob, unsigned damage) ...@@ -905,30 +905,30 @@ void DamageActor (objtype *ob, unsigned damage)
{ {
case guardobj: case guardobj:
if (ob->hitpoints&1) if (ob->hitpoints&1)
NewState (ob,&s_grdpain); NewState (ob,s_grdpain);
else else
NewState (ob,&s_grdpain1); NewState (ob,s_grdpain1);
break; break;
case officerobj: case officerobj:
if (ob->hitpoints&1) if (ob->hitpoints&1)
NewState (ob,&s_ofcpain); NewState (ob,s_ofcpain);
else else
NewState (ob,&s_ofcpain1); NewState (ob,s_ofcpain1);
break; break;
case mutantobj: case mutantobj:
if (ob->hitpoints&1) if (ob->hitpoints&1)
NewState (ob,&s_mutpain); NewState (ob,s_mutpain);
else else
NewState (ob,&s_mutpain1); NewState (ob,s_mutpain1);
break; break;
case ssobj: case ssobj:
if (ob->hitpoints&1) if (ob->hitpoints&1)
NewState (ob,&s_sspain); NewState (ob,s_sspain);
else else
NewState (ob,&s_sspain1); NewState (ob,s_sspain1);
break; break;
default: default:
...@@ -1179,120 +1179,120 @@ void FirstSighting (objtype *ob) ...@@ -1179,120 +1179,120 @@ void FirstSighting (objtype *ob)
{ {
case guardobj: case guardobj:
PlaySoundLocActor(HALTSND,ob); PlaySoundLocActor(HALTSND,ob);
NewState (ob,&s_grdchase1); NewState (ob,s_grdchase1);
ob->speed *= 3; // go faster when chasing player ob->speed *= 3; // go faster when chasing player
break; break;
case officerobj: case officerobj:
PlaySoundLocActor(SPIONSND,ob); PlaySoundLocActor(SPIONSND,ob);
NewState (ob,&s_ofcchase1); NewState (ob,s_ofcchase1);
ob->speed *= 5; // go faster when chasing player ob->speed *= 5; // go faster when chasing player
break; break;
case mutantobj: case mutantobj:
NewState (ob,&s_mutchase1); NewState (ob,s_mutchase1);
ob->speed *= 3; // go faster when chasing player ob->speed *= 3; // go faster when chasing player
break; break;
case ssobj: case ssobj:
PlaySoundLocActor(SCHUTZADSND,ob); PlaySoundLocActor(SCHUTZADSND,ob);
NewState (ob,&s_sschase1); NewState (ob,s_sschase1);
ob->speed *= 4; // go faster when chasing player ob->speed *= 4; // go faster when chasing player
break; break;
case dogobj: case dogobj:
PlaySoundLocActor(DOGBARKSND,ob); PlaySoundLocActor(DOGBARKSND,ob);
NewState (ob,&s_dogchase1); NewState (ob,s_dogchase1);
ob->speed *= 2; // go faster when chasing player ob->speed *= 2; // go faster when chasing player
break; break;
#ifndef SPEAR #ifndef SPEAR
case bossobj: case bossobj:
SD_PlaySound(GUTENTAGSND); SD_PlaySound(GUTENTAGSND);
NewState (ob,&s_bosschase1); NewState (ob,s_bosschase1);
ob->speed = SPDPATROL*3; // go faster when chasing player ob->speed = SPDPATROL*3; // go faster when chasing player
break; break;
case gretelobj: case gretelobj:
SD_PlaySound(KEINSND); SD_PlaySound(KEINSND);
NewState (ob,&s_gretelchase1); NewState (ob,s_gretelchase1);
ob->speed *= 3; // go faster when chasing player ob->speed *= 3; // go faster when chasing player
break; break;
case giftobj: case giftobj:
SD_PlaySound(EINESND); SD_PlaySound(EINESND);
NewState (ob,&s_giftchase1); NewState (ob,s_giftchase1);
ob->speed *= 3; // go faster when chasing player ob->speed *= 3; // go faster when chasing player
break; break;
case fatobj: case fatobj:
SD_PlaySound(ERLAUBENSND); SD_PlaySound(ERLAUBENSND);
NewState (ob,&s_fatchase1); NewState (ob,s_fatchase1);
ob->speed *= 3; // go faster when chasing player ob->speed *= 3; // go faster when chasing player
break; break;
case schabbobj: case schabbobj:
SD_PlaySound(SCHABBSHASND); SD_PlaySound(SCHABBSHASND);
NewState (ob,&s_schabbchase1); NewState (ob,s_schabbchase1);
ob->speed *= 3; // go faster when chasing player ob->speed *= 3; // go faster when chasing player
break; break;
case fakeobj: case fakeobj:
SD_PlaySound(TOT_HUNDSND); SD_PlaySound(TOT_HUNDSND);
NewState (ob,&s_fakechase1); NewState (ob,s_fakechase1);
ob->speed *= 3; // go faster when chasing player ob->speed *= 3; // go faster when chasing player
break; break;
case mechahitlerobj: case mechahitlerobj:
SD_PlaySound(DIESND); SD_PlaySound(DIESND);
NewState (ob,&s_mechachase1); NewState (ob,s_mechachase1);
ob->speed *= 3; // go faster when chasing player ob->speed *= 3; // go faster when chasing player
break; break;
case realhitlerobj: case realhitlerobj:
SD_PlaySound(DIESND); SD_PlaySound(DIESND);
NewState (ob,&s_hitlerchase1); NewState (ob,s_hitlerchase1);
ob->speed *= 5; // go faster when chasing player ob->speed *= 5; // go faster when chasing player
break; break;
case ghostobj: case ghostobj:
NewState (ob,&s_blinkychase1); NewState (ob,s_blinkychase1);
ob->speed *= 2; // go faster when chasing player ob->speed *= 2; // go faster when chasing player
break; break;
#else #else
case spectreobj: case spectreobj:
SD_PlaySound(GHOSTSIGHTSND); SD_PlaySound(GHOSTSIGHTSND);
NewState (ob,&s_spectrechase1); NewState (ob,s_spectrechase1);
ob->speed = 800; // go faster when chasing player ob->speed = 800; // go faster when chasing player
break; break;
case angelobj: case angelobj:
SD_PlaySound(ANGELSIGHTSND); SD_PlaySound(ANGELSIGHTSND);
NewState (ob,&s_angelchase1); NewState (ob,s_angelchase1);
ob->speed = 1536; // go faster when chasing player ob->speed = 1536; // go faster when chasing player
break; break;
case transobj: case transobj:
SD_PlaySound(TRANSSIGHTSND); SD_PlaySound(TRANSSIGHTSND);
NewState (ob,&s_transchase1); NewState (ob,s_transchase1);
ob->speed = 1536; // go faster when chasing player ob->speed = 1536; // go faster when chasing player
break; break;
case uberobj: case uberobj:
NewState (ob,&s_uberchase1); NewState (ob,s_uberchase1);
ob->speed = 3000; // go faster when chasing player ob->speed = 3000; // go faster when chasing player
break; break;
case willobj: case willobj:
SD_PlaySound(WILHELMSIGHTSND); SD_PlaySound(WILHELMSIGHTSND);
NewState (ob,&s_willchase1); NewState (ob,s_willchase1);
ob->speed = 2048; // go faster when chasing player ob->speed = 2048; // go faster when chasing player
break; break;
case deathobj: case deathobj:
SD_PlaySound(KNIGHTSIGHTSND); SD_PlaySound(KNIGHTSIGHTSND);
NewState (ob,&s_deathchase1); NewState (ob,s_deathchase1);
ob->speed = 2048; // go faster when chasing player ob->speed = 2048; // go faster when chasing player
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment