mirror of
https://github.com/id-Software/Wolf3D-iOS.git
synced 2024-11-10 07:22:02 +00:00
172 lines
3.9 KiB
C
172 lines
3.9 KiB
C
/*
|
|
|
|
Copyright (C) 2004 Michael Liebscher
|
|
Copyright (C) 2000-2002 by DarkOne the Hacker
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
/*
|
|
* wolf_actors.h: Wolfenstein3-D entity management.
|
|
*
|
|
* Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
|
* Date: 2004
|
|
*
|
|
* Acknowledgement:
|
|
* Portion of this code was derived from NewWolf, and was originally
|
|
* written by DarkOne the Hacker.
|
|
*
|
|
* Portion of this code was derived from Wolfenstein3-D, and was originally
|
|
* written by Id Software, Inc.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
Notes:
|
|
This module is implemented by wolf_actors.c
|
|
|
|
*/
|
|
|
|
#ifndef __WOLF_ACTORS_H__
|
|
#define __WOLF_ACTORS_H__
|
|
|
|
#define SPDPATROL 512
|
|
#define SPDDOG 1500
|
|
|
|
#define FL_SHOOTABLE 1
|
|
#define FL_BONUS 2
|
|
#define FL_NEVERMARK 4
|
|
#define FL_VISABLE 8
|
|
#define FL_ATTACKMODE 16
|
|
#define FL_FIRSTATTACK 32
|
|
#define FL_AMBUSH 64
|
|
#define FL_NONMARK 128
|
|
|
|
#define MAX_GUARDS 255
|
|
#define NUMENEMIES 31
|
|
#define NUMSTATES 34
|
|
|
|
#define MINACTORDIST 0x10000 // minimum dist from player center to any actor center
|
|
|
|
typedef enum
|
|
{
|
|
en_guard,
|
|
en_officer,
|
|
en_ss,
|
|
en_dog,
|
|
en_boss,
|
|
en_schabbs,
|
|
en_fake,
|
|
en_mecha,
|
|
en_hitler,
|
|
en_mutant,
|
|
en_blinky,
|
|
en_clyde,
|
|
en_pinky,
|
|
en_inky,
|
|
en_gretel,
|
|
en_gift,
|
|
en_fat,
|
|
// --- Projectiles
|
|
en_needle,
|
|
en_fire,
|
|
en_rocket,
|
|
en_smoke,
|
|
en_bj,
|
|
// --- Spear of destiny!
|
|
en_spark,
|
|
en_hrocket,
|
|
en_hsmoke,
|
|
|
|
en_spectre,
|
|
en_angel,
|
|
en_trans,
|
|
en_uber,
|
|
en_will,
|
|
en_death
|
|
|
|
} enemy_t;
|
|
|
|
typedef enum
|
|
{
|
|
st_stand,
|
|
st_path1, st_path1s, st_path2, st_path3, st_path3s, st_path4,
|
|
st_pain, st_pain1,
|
|
st_shoot1, st_shoot2, st_shoot3, st_shoot4, st_shoot5, st_shoot6, st_shoot7, st_shoot8, st_shoot9,
|
|
st_chase1, st_chase1s, st_chase2, st_chase3, st_chase3s, st_chase4,
|
|
st_die1, st_die2, st_die3, st_die4, st_die5, st_die6, st_die7, st_die8, st_die9,
|
|
st_dead,
|
|
st_remove
|
|
|
|
} en_state;
|
|
|
|
typedef struct entity_s
|
|
{
|
|
int x, y, angle;
|
|
int type;
|
|
int health;
|
|
int max_health;
|
|
int speed;
|
|
int ticcount;
|
|
int temp2;
|
|
int distance;
|
|
char tilex, tiley;
|
|
char areanumber;
|
|
int waitfordoorx, waitfordoory; // waiting on this door if non 0
|
|
W8 flags; // FL_SHOOTABLE, etc
|
|
en_state state;
|
|
dir8type dir;
|
|
int sprite;
|
|
|
|
} entity_t;
|
|
|
|
typedef void (*think_t)( entity_t *self );
|
|
|
|
typedef struct
|
|
{
|
|
char rotate; // 1-if object can be rotated, 0 if one sprite for every direction
|
|
int texture; // base object's state texture if rotation is on facing player
|
|
int timeout; // after how man ticks change state to .next_state
|
|
think_t think; // what to do every frame
|
|
think_t action; // what to do once per state
|
|
en_state next_state; // next state
|
|
|
|
} stateinfo;
|
|
|
|
|
|
|
|
extern entity_t Guards[ MAX_GUARDS + 1 ];
|
|
extern entity_t *New;
|
|
extern W16 NumGuards;
|
|
extern stateinfo objstate[ NUMENEMIES ][ NUMSTATES ];
|
|
|
|
extern void ResetGuards(void);
|
|
|
|
|
|
extern entity_t *GetNewActor( void );
|
|
extern entity_t *SpawnActor( enemy_t which, int x, int y, dir4type dir, LevelData_t *lvl );
|
|
extern void A_StateChange( entity_t *Guard, en_state NewState );
|
|
|
|
|
|
extern void SpawnStand( enemy_t which, int tilex, int tiley, int dir, LevelData_t *lvl );
|
|
extern void SpawnPatrol( enemy_t which, int tilex, int tiley, int dir );
|
|
extern void SpawnDeadGuard( enemy_t which, int x, int y );
|
|
extern void SpawnBoss( enemy_t which, int x, int y );
|
|
extern void SpawnGhosts( enemy_t which, int x, int y );
|
|
|
|
|
|
#endif /* __WOLF_ACTORS_H__ */
|
|
|