Amulets & Armor  v1.02
Open Source Game
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
Data Structures | Macros | Typedefs | Enumerations | Functions
CRELOGIC

Creature Logic and AI. More...

Data Structures

struct  T_creatureLogic
 
struct  T_creaturesStruct
 
struct  T_creatureState
 

Macros

#define CREATURE_DIP_AMOUNT_ABOVE_FLOOR   34
 
#define CRELOGIC_DFT_ARMOR_TYPE   0
 
#define CRELOGIC_DFT_ATTACK2_SOUND   5014
 
#define CRELOGIC_DFT_ATTACK_SOUND   5014
 
#define CRELOGIC_DFT_CAN_HURT_SELF   FALSE
 
#define CRELOGIC_DFT_DAMAGE_RESIST   0
 
#define CRELOGIC_DFT_DAMAGE_TYPE   EFFECT_DAMAGE_NORMAL
 
#define CRELOGIC_DFT_DEATH_LOGIC   0
 
#define CRELOGIC_DFT_DECAY_OBJECT   0
 
#define CRELOGIC_DFT_DIE_SOUND   5015
 
#define CRELOGIC_DFT_EFX_AT_DEATH   0
 
#define CRELOGIC_DFT_EXPLODE_ON_COLILDE   FALSE
 
#define CRELOGIC_DFT_FACE_DELAY   6
 
#define CRELOGIC_DFT_FLY_ACCELERATION   7 /* Usually same as UPDATE_TIME */
 
#define CRELOGIC_DFT_FLY_MAX_VELOCITY   20
 
#define CRELOGIC_DFT_HIT_POINTS   2000
 
#define CRELOGIC_DFT_HURT2_SOUND   5013
 
#define CRELOGIC_DFT_HURT_HEALTH   500
 
#define CRELOGIC_DFT_HURT_SOUND   5013
 
#define CRELOGIC_DFT_MAX_MELEE_RANGE   60
 
#define CRELOGIC_DFT_MAX_MISSILE_RANGE   1000
 
#define CRELOGIC_DFT_MELEE_DAMAGE   200
 
#define CRELOGIC_DFT_MELEE_DELAY   10
 
#define CRELOGIC_DFT_MIN_MISSILE_RANGE   250
 
#define CRELOGIC_DFT_MISSILE_DELAY   50
 
#define CRELOGIC_DFT_MISSILE_TYPE   4011
 
#define CRELOGIC_DFT_REGEN_RATE   0
 
#define CRELOGIC_DFT_STAY_ON_SECTOR
 
#define CRELOGIC_DFT_STEP_SIZE   15
 
#define CRELOGIC_DFT_TARGET_SOUND   4001
 
#define CRELOGIC_DFT_TREASURE   TREASURE_TYPE_NONE
 
#define CRELOGIC_DFT_UPDATE_TIME   7
 
#define CRELOGIC_DFT_VISION_FIELD   INT_ANGLE_90
 
#define CRELOGIC_DFT_WANDER_SOUND   4005
 
#define CRELOGIC_TIME_BETWEEN_SECTOR_DAMAGE   35
 
#define DEATH_LOGIC_TIME_TO_DECAY   (60*70) /* One minute to decay */
 
#define MAX_CREATURE_MOVES_PER_UPDATE   3
 
#define MAX_CREATURES_FOR_SUMMON   50
 
#define MAX_TELEPORTER_POSITIONS   20
 
#define NUM_CREATURE_LOGICS   (sizeof(G_creatureLogics) / sizeof(T_creatureLogic))
 
#define NUM_UPDATES_DO_BLOCK_MOVEMENT   5
 
#define SCANB_TURN_RATE   10
 
#define SUMMON_CREATURE_TYPE   1025
 
#define SUMMON_DISTANCE   75
 
#define TIME_BETWEEN_SUMMONS   350
 
#define TIME_BETWEEN_TELEPORTS   700
 

Typedefs

typedef E_Boolean(* T_creatureDeathRoutine )(T_creatureState *p_creature, T_creatureLogic *p_logic, T_3dObject *p_obj)
 
typedef T_void(* T_creatureNavigateRoutine )(T_creatureState *p_creature, T_creatureLogic *p_logic, T_3dObject *p_obj)
 
typedef E_Boolean(* T_creatureTargetRoutine )(T_creatureState *p_creature, T_creatureLogic *p_logic, T_3dObject *p_obj)
 
typedef T_void(* T_monsterUpdateCallback )(T_void *p_data)
 

Enumerations

enum  E_blockTurnDir { BLOCK_TURN_DIR_NONE, BLOCK_TURN_DIR_LEFT, BLOCK_TURN_DIR_RIGHT, BLOCK_TURN_DIR_UNKNOWN }
 
enum  E_deathLogic {
  DEATH_LOGIC_NONE, DEATH_LOGIC_SINK, DEATH_LOGIC_FAST_DISAPPEAR, DEATH_LOGIC_NORMAL_DECAY,
  DEATH_LOGIC_UNKNOWN
}
 
enum  E_navigateLogicPackage {
  NAV_LOGIC_PKG_NONE, NAV_LOGIC_PKG_BERSERKER_A, NAV_LOGIC_PKG_BERSERKER_B, NAV_LOGIC_PKG_BARBARIAN_GUARD,
  NAV_LOGIC_PKG_BARBARIAN_ARCHER, NAV_LOGIC_PKG_NEUTRAL_WANDERER, NAV_LOGIC_PKG_SCAREDY_CAT, NAV_LOGIC_PKG_ROAMING_GUARD,
  NAV_LOGIC_PKG_COMBO_FIGHTER_ARCHER, NAV_LOGIC_PKG_BARBARIAN_ARCHER_B, NAV_LOGIC_PKG_DIPPER, NAV_LOGIC_PKG_TELEPORTER,
  NAV_LOGIC_PKG_HOMING, NAV_LOGIC_PKG_STRAIGHT_LINE, NAV_LOGIC_PKG_CLOUD, NAV_LOGIC_PKG_APPROACH_AND_SHOOT,
  NAV_LOGIC_PKG_UNKNOWN, NAV_LOGIC_PKG_NONE, NAV_LOGIC_PKG_BERSERKER_A, NAV_LOGIC_PKG_BERSERKER_B,
  NAV_LOGIC_PKG_BARBARIAN_GUARD, NAV_LOGIC_PKG_BARBARIAN_ARCHER, NAV_LOGIC_PKG_NEUTRAL_WANDERER, NAV_LOGIC_PKG_SCAREDY_CAT,
  NAV_LOGIC_PKG_ROAMING_GUARD, NAV_LOGIC_PKG_COMBO_FIGHTER_ARCHER, NAV_LOGIC_PKG_UNKNOWN
}
 
enum  E_scanBDir { SCANB_DIR_TURN_LEFT, SCANB_DIR_TURN_RIGHT }
 
enum  E_scanBFacing {
  SCANB_FACING_LEFT_90, SCANB_FACING_LEFT_45, SCANB_FACING_MIDDLE, SCANB_FACING_RIGHT_45,
  SCANB_FACING_RIGHT_90, SCANB_FACING_UNKNOWN
}
 
enum  E_targetLogicPackage {
  TARGET_LOGIC_PACKAGE_NONE, TARGET_LOGIC_PACKAGE_STANDARD_HIT_OR_SHOOT, TARGET_LOGIC_PACKAGE_SUICIDE_EXPLOSION, TARGET_LOGIC_PACKAGE_EXPLODE_ON_COLLISION,
  TARGET_LOGIC_PACKAGE_SCREAM, TARGET_LOGIC_PACKAGE_SUMMON_CREATURE, TARGET_LOGIC_PACKAGE_CONSTANT_DAMAGE, TARGET_LOGIC_PACKAGE_UNKNOWN,
  TARGET_LOGIC_PACKAGE_NONE, TARGET_LOGIC_PACKAGE_STANDARD_HIT_OR_SHOOT, TARGET_LOGIC_PACKAGE_SUICIDE_EXPLOSION, TARGET_LOGIC_PACKAGE_EXPLODE_ON_COLLISION,
  TARGET_LOGIC_PACKAGE_UNKNOWN
}
 
enum  E_targetLogicState {
  TARGET_LOGIC_STATE_DO_NOTHING, TARGET_LOGIC_STATE_ATTACK_WHILE_IN_RANGE, TARGET_LOGIC_STATE_EXPLODE_WHEN_IN_RANGE, TARGET_LOGIC_STATE_EXPLODE_ON_COLLISION,
  TARGET_LOGIC_STATE_UNKNOWN, TARGET_LOGIC_STATE_DO_NOTHING, TARGET_LOGIC_STATE_ATTACK_WHILE_IN_RANGE, TARGET_LOGIC_STATE_EXPLODE_WHEN_IN_RANGE,
  TARGET_LOGIC_STATE_EXPLODE_ON_COLLISION, TARGET_LOGIC_STATE_UNKNOWN
}
 
enum  E_treasureType {
  TREASURE_TYPE_NONE, TREASURE_TYPE_1_PLAT, TREASURE_TYPE_1_GOLD, TREASURE_TYPE_1_SILVER,
  TREASURE_TYPE_5_COPPER, TREASURE_TYPE_SHADOW, TREASURE_TYPE_LICH, TREASURE_TYPE_EXIGUUS,
  TREASURE_TYPE_BAD_KNIGHT, TREASURE_TYPE_MITHRIL_BAD_KNIGHT, TREASURE_TYPE_EVIL_ORANGE_WIZARD, TREASURE_TYPE_BLUE_WIZARD,
  TREASURE_TYPE_DRUID, TREASURE_TYPE_POISON_DRUID, TREASURE_TYPE_EVIL_KNIGHT, TREASURE_TYPE_SILVER_EVIL_KNIGHT,
  TREASURE_TYPE_ELK, TREASURE_TYPE_ELF_ARCHER, TREASURE_TYPE_VITORIX, TREASURE_TYPE_JUGURTHA,
  TREASURE_TYPE_EVIL_ARCHER, TREASURE_TYPE_ELYMAS, TREASURE_TYPE_MIGHTY_HUNTER, TREASURE_TYPE_MATTAN,
  TREASURE_TYPE_MAMMA_DRAGON, TREASURE_TYPE_KOA_FOOTMAN, TREASURE_TYPE_KOA_HORSEMAN, TREASURE_TYPE_BRONZE_EVIL_KNIGHT,
  TREASURE_TYPE_TROJAN, TREASURE_TYPE_UNKNOWN, TREASURE_TYPE_UNKNOWN
}
 

Functions

T_void CreatureAttachToObject (T_3dObject *p_obj)
 
T_void CreatureDetachFromObject (T_3dObject *p_obj)
 
T_void CreatureGoSplat (T_3dObject *p_obj, T_word16 amount, T_word16 damageType)
 
E_Boolean CreatureIsMissile (T_3dObject *p_obj)
 
T_word16 CreatureLookForPlayer (T_3dObject *p_obj)
 
T_void CreaturePlayerGone (T_player player)
 
T_void CreaturesAllOnOneTarget (T_word16 targetId)
 
T_void CreaturesCheck (T_void)
 
T_void CreatureSetTarget (T_3dObject *p_obj, T_word16 targetID)
 
T_void CreaturesFinish (T_void)
 
T_void CreaturesHearSoundOfPlayer (T_3dObject *p_player, T_word16 distance)
 
T_void CreaturesInitialize (T_void)
 
T_word32 CreaturesKillAll (T_void)
 
T_word16 CreatureStolenFrom (T_3dObject *p_obj)
 
T_void CreaturesUpdate (T_void)
 
T_void CreatureTakeDamage (T_3dObject *p_obj, T_word32 damage, T_word16 type, T_word16 ownerID)
 
T_void OutputPlayerJunk (T_void)
 

Detailed Description

Creature Logic and AI.

All Creature AI goes here. I would love to turn these into scripts.

See Also
http://www.amuletsandarmor.com/AALicense.txt

Macro Definition Documentation

#define CREATURE_DIP_AMOUNT_ABOVE_FLOOR   34
#define CRELOGIC_DFT_ARMOR_TYPE   0
#define CRELOGIC_DFT_ATTACK2_SOUND   5014
#define CRELOGIC_DFT_ATTACK_SOUND   5014
#define CRELOGIC_DFT_CAN_HURT_SELF   FALSE
#define CRELOGIC_DFT_DAMAGE_RESIST   0
#define CRELOGIC_DFT_DAMAGE_TYPE   EFFECT_DAMAGE_NORMAL
#define CRELOGIC_DFT_DEATH_LOGIC   0
#define CRELOGIC_DFT_DECAY_OBJECT   0
#define CRELOGIC_DFT_DIE_SOUND   5015
#define CRELOGIC_DFT_EFX_AT_DEATH   0
#define CRELOGIC_DFT_EXPLODE_ON_COLILDE   FALSE
#define CRELOGIC_DFT_FACE_DELAY   6
#define CRELOGIC_DFT_FLY_ACCELERATION   7 /* Usually same as UPDATE_TIME */
#define CRELOGIC_DFT_FLY_MAX_VELOCITY   20
#define CRELOGIC_DFT_HIT_POINTS   2000
#define CRELOGIC_DFT_HURT2_SOUND   5013
#define CRELOGIC_DFT_HURT_HEALTH   500
#define CRELOGIC_DFT_HURT_SOUND   5013
#define CRELOGIC_DFT_MAX_MELEE_RANGE   60
#define CRELOGIC_DFT_MAX_MISSILE_RANGE   1000
#define CRELOGIC_DFT_MELEE_DAMAGE   200
#define CRELOGIC_DFT_MELEE_DELAY   10
#define CRELOGIC_DFT_MIN_MISSILE_RANGE   250
#define CRELOGIC_DFT_MISSILE_DELAY   50
#define CRELOGIC_DFT_MISSILE_TYPE   4011
#define CRELOGIC_DFT_REGEN_RATE   0
#define CRELOGIC_DFT_STAY_ON_SECTOR
Value:
SECTOR_TYPE_ICE| \
SECTOR_TYPE_WATER| \
SECTOR_TYPE_MUD)
#define CRELOGIC_DFT_STEP_SIZE   15
#define CRELOGIC_DFT_TARGET_SOUND   4001
#define CRELOGIC_DFT_TREASURE   TREASURE_TYPE_NONE
#define CRELOGIC_DFT_UPDATE_TIME   7
#define CRELOGIC_DFT_VISION_FIELD   INT_ANGLE_90
#define CRELOGIC_DFT_WANDER_SOUND   4005
#define CRELOGIC_TIME_BETWEEN_SECTOR_DAMAGE   35
#define DEATH_LOGIC_TIME_TO_DECAY   (60*70) /* One minute to decay */
#define MAX_CREATURE_MOVES_PER_UPDATE   3
#define MAX_CREATURES_FOR_SUMMON   50
#define MAX_TELEPORTER_POSITIONS   20
#define NUM_CREATURE_LOGICS   (sizeof(G_creatureLogics) / sizeof(T_creatureLogic))
#define NUM_UPDATES_DO_BLOCK_MOVEMENT   5
#define SCANB_TURN_RATE   10
#define SUMMON_CREATURE_TYPE   1025
#define SUMMON_DISTANCE   75
#define TIME_BETWEEN_SUMMONS   350
#define TIME_BETWEEN_TELEPORTS   700

Typedef Documentation

typedef E_Boolean(* T_creatureDeathRoutine)(T_creatureState *p_creature, T_creatureLogic *p_logic, T_3dObject *p_obj)
typedef T_void(* T_creatureNavigateRoutine)(T_creatureState *p_creature, T_creatureLogic *p_logic, T_3dObject *p_obj)
typedef E_Boolean(* T_creatureTargetRoutine)(T_creatureState *p_creature, T_creatureLogic *p_logic, T_3dObject *p_obj)
typedef T_void(* T_monsterUpdateCallback)(T_void *p_data)

Enumeration Type Documentation

Enumerator
BLOCK_TURN_DIR_NONE 
BLOCK_TURN_DIR_LEFT 
BLOCK_TURN_DIR_RIGHT 
BLOCK_TURN_DIR_UNKNOWN 
Enumerator
DEATH_LOGIC_NONE 
DEATH_LOGIC_SINK 
DEATH_LOGIC_FAST_DISAPPEAR 
DEATH_LOGIC_NORMAL_DECAY 
DEATH_LOGIC_UNKNOWN 
Enumerator
NAV_LOGIC_PKG_NONE 
NAV_LOGIC_PKG_BERSERKER_A 
NAV_LOGIC_PKG_BERSERKER_B 
NAV_LOGIC_PKG_BARBARIAN_GUARD 
NAV_LOGIC_PKG_BARBARIAN_ARCHER 
NAV_LOGIC_PKG_NEUTRAL_WANDERER 
NAV_LOGIC_PKG_SCAREDY_CAT 
NAV_LOGIC_PKG_ROAMING_GUARD 
NAV_LOGIC_PKG_COMBO_FIGHTER_ARCHER 
NAV_LOGIC_PKG_BARBARIAN_ARCHER_B 
NAV_LOGIC_PKG_DIPPER 
NAV_LOGIC_PKG_TELEPORTER 
NAV_LOGIC_PKG_HOMING 
NAV_LOGIC_PKG_STRAIGHT_LINE 
NAV_LOGIC_PKG_CLOUD 
NAV_LOGIC_PKG_APPROACH_AND_SHOOT 
NAV_LOGIC_PKG_UNKNOWN 
NAV_LOGIC_PKG_NONE 
NAV_LOGIC_PKG_BERSERKER_A 
NAV_LOGIC_PKG_BERSERKER_B 
NAV_LOGIC_PKG_BARBARIAN_GUARD 
NAV_LOGIC_PKG_BARBARIAN_ARCHER 
NAV_LOGIC_PKG_NEUTRAL_WANDERER 
NAV_LOGIC_PKG_SCAREDY_CAT 
NAV_LOGIC_PKG_ROAMING_GUARD 
NAV_LOGIC_PKG_COMBO_FIGHTER_ARCHER 
NAV_LOGIC_PKG_UNKNOWN 
enum E_scanBDir
Enumerator
SCANB_DIR_TURN_LEFT 
SCANB_DIR_TURN_RIGHT 
Enumerator
SCANB_FACING_LEFT_90 
SCANB_FACING_LEFT_45 
SCANB_FACING_MIDDLE 
SCANB_FACING_RIGHT_45 
SCANB_FACING_RIGHT_90 
SCANB_FACING_UNKNOWN 
Enumerator
TARGET_LOGIC_PACKAGE_NONE 
TARGET_LOGIC_PACKAGE_STANDARD_HIT_OR_SHOOT 
TARGET_LOGIC_PACKAGE_SUICIDE_EXPLOSION 
TARGET_LOGIC_PACKAGE_EXPLODE_ON_COLLISION 
TARGET_LOGIC_PACKAGE_SCREAM 
TARGET_LOGIC_PACKAGE_SUMMON_CREATURE 
TARGET_LOGIC_PACKAGE_CONSTANT_DAMAGE 
TARGET_LOGIC_PACKAGE_UNKNOWN 
TARGET_LOGIC_PACKAGE_NONE 
TARGET_LOGIC_PACKAGE_STANDARD_HIT_OR_SHOOT 
TARGET_LOGIC_PACKAGE_SUICIDE_EXPLOSION 
TARGET_LOGIC_PACKAGE_EXPLODE_ON_COLLISION 
TARGET_LOGIC_PACKAGE_UNKNOWN 
Enumerator
TARGET_LOGIC_STATE_DO_NOTHING 
TARGET_LOGIC_STATE_ATTACK_WHILE_IN_RANGE 
TARGET_LOGIC_STATE_EXPLODE_WHEN_IN_RANGE 
TARGET_LOGIC_STATE_EXPLODE_ON_COLLISION 
TARGET_LOGIC_STATE_UNKNOWN 
TARGET_LOGIC_STATE_DO_NOTHING 
TARGET_LOGIC_STATE_ATTACK_WHILE_IN_RANGE 
TARGET_LOGIC_STATE_EXPLODE_WHEN_IN_RANGE 
TARGET_LOGIC_STATE_EXPLODE_ON_COLLISION 
TARGET_LOGIC_STATE_UNKNOWN 
Enumerator
TREASURE_TYPE_NONE 
TREASURE_TYPE_1_PLAT 
TREASURE_TYPE_1_GOLD 
TREASURE_TYPE_1_SILVER 
TREASURE_TYPE_5_COPPER 
TREASURE_TYPE_SHADOW 
TREASURE_TYPE_LICH 
TREASURE_TYPE_EXIGUUS 
TREASURE_TYPE_BAD_KNIGHT 
TREASURE_TYPE_MITHRIL_BAD_KNIGHT 
TREASURE_TYPE_EVIL_ORANGE_WIZARD 
TREASURE_TYPE_BLUE_WIZARD 
TREASURE_TYPE_DRUID 
TREASURE_TYPE_POISON_DRUID 
TREASURE_TYPE_EVIL_KNIGHT 
TREASURE_TYPE_SILVER_EVIL_KNIGHT 
TREASURE_TYPE_ELK 
TREASURE_TYPE_ELF_ARCHER 
TREASURE_TYPE_VITORIX 
TREASURE_TYPE_JUGURTHA 
TREASURE_TYPE_EVIL_ARCHER 
TREASURE_TYPE_ELYMAS 
TREASURE_TYPE_MIGHTY_HUNTER 
TREASURE_TYPE_MATTAN 
TREASURE_TYPE_MAMMA_DRAGON 
TREASURE_TYPE_KOA_FOOTMAN 
TREASURE_TYPE_KOA_HORSEMAN 
TREASURE_TYPE_BRONZE_EVIL_KNIGHT 
TREASURE_TYPE_TROJAN 
TREASURE_TYPE_UNKNOWN 
TREASURE_TYPE_UNKNOWN 

Function Documentation

T_void CreatureAttachToObject ( T_3dObject p_obj)

This routine is called to try to make a creature out of an object if the object type is that of a creature. If not, nothing happens.

T_void CreatureDetachFromObject ( T_3dObject p_obj)

This routine is called to destroy creature data on an object. (making the object no longer a creature but an object).

T_void CreatureGoSplat ( T_3dObject p_obj,
T_word16  amount,
T_word16  damageType 
)
E_Boolean CreatureIsMissile ( T_3dObject p_obj)
T_word16 CreatureLookForPlayer ( T_3dObject p_obj)
T_void CreaturePlayerGone ( T_player  player)
T_void CreaturesAllOnOneTarget ( T_word16  targetId)
T_void CreaturesCheck ( T_void  )
T_void CreatureSetTarget ( T_3dObject p_obj,
T_word16  targetID 
)
T_void CreaturesFinish ( T_void  )

CreaturesFinish unloads all creature based data. All objects in the world should already be destroyed.

T_void CreaturesHearSoundOfPlayer ( T_3dObject p_player,
T_word16  distance 
)
T_void CreaturesInitialize ( T_void  )

CreaturesInitialize sets up the list of creatures.

T_word32 CreaturesKillAll ( T_void  )
T_word16 CreatureStolenFrom ( T_3dObject p_obj)
T_void CreaturesUpdate ( T_void  )
T_void CreatureTakeDamage ( T_3dObject p_obj,
T_word32  damage,
T_word16  type,
T_word16  ownerID 
)
T_void OutputPlayerJunk ( T_void  )