StendhalRefactoringCreatures
Creatures
List
Feel free to expand this list.
Please be original :)
Have a look to this: http://en.wikipedia.org/wiki/List_of_species_in_fantasy_fiction
Animals
- Boar
- Caverat
- Cobra
- Bear
- Giantrat
- Rat
- Wolf
Beholders
- Beholder
- Elder Beholder
Dragon
- Green Dragon
- Blue Dragon
- White Dragon
- Black Dragon
Dwarves
- Dwarf
- Dwarf Warrior
- Dwarf Veteran
- Dwarf Leader
Elves
- Elf
- Elf Hunter
- Elf Warrior
- Elf Veteran
- Elf Leader
- Drow
- Drow Hunter
- Drow Warrior
- Drow Veteran
- Drow Leader
Gargoyle
- Gargoyle
Giants
- Ogre
- Hill Giants
- Cyclops
- Mountain Giants
- Fire Giants
- Ice Giants
Goblin
- Goblin
- Goblin Veteran
- Goblin Chief
Human
- Bandit
- Assassin
- Hunter
Kobold
- Kobold
- Kobold Hunter
- Kobold Chief
Orcs
- Orc
- Orc Hunter
- Orc Warrior
- Orc Veteran
- Orc Leader
Troll
- Young Troll
- Troll
- Troll Veteran
- Troll Chief
Undead
- Ghost
- Zombi
- Zombi Veteran
- Vampire
- Lich
Properties
We have several common attributes for all the items. Mainly:
- Type
- Class
- Subclass
And some attributes that objects may or many not have:
- XP value
- Attack
- Defense
- Dropped items
- Item
- Probability (0.0 - 1.0)
- Slots
- Capacity
- Equiped items
- Item
Extra information
Additionally creatures should explain:
- tiled id
Actions
- Move
- Stop
- Chat
- Tell
- Outfit
- Attack
- Use
- Equip
- Drop
- Own ( a sheep )
Events
I see two different approachs here:
- Active one, in the form of onAttack, that requieres something like
Player.onAttack(target, weapon)
{
if(target is of type ghost)
{
return false;
}
return true;
}
- Passive one, in the form of onAttacked
Ghost.onAttacked(source, weapon)
{
return false;
}
I think passive approach can lead to simpler more mantenible code. So I break the below list in those two categories.
Creatures can recieve the next list of events:
Passive way
boolean onAttacked(attacker, weapon)
called when attacked by someone with a given weapon.
void onStopAttacked(target)
called when target stops attacking us
boolean onDamage(type, amount)
called when entity is damaged with the damage type (physical, fire, poison, magical, ... ) and the amount of damage done.
boolean onKilled(attacker, weapon)
called when attacked killed us with the given weapon
boolean onMove(x,y)
called when entity moves to x,y ( before moving in fact )
boolean onCollidedWith(source)
called when entity collide with another entity
boolean onEquipped(source, slot)
called when entity is equipped on the source entity and in the given slot
boolean onDropped(source, x, y)
called when entity is dropped by source to floor at position x,y
void onChat(source, text)
called when someone speaks near entity or write to entity
boolean onUsed(source)
called when entity is used by source
boolean onUsedWith(source, base)
called when entity is used by source on base item
boolean onStop()
called when entity stops moving, attacking, etc...
Active way
boolean onAttack(target, weapon)
called when attacking a target with the given weapon.
void onStopAttack(target)
called when we stop attacking target
boolean onDamage(type, amount)
called when entity is damaged with the damage type (physical, fire, poison, magical, ... ) and the amount of damage done.
boolean onKill(target)
called when entity kills target
boolean onMove(x,y)
called when entity moves to x,y ( before moving in fact )
boolean onCollide(x,y)
called when entity collide at position x,y
boolean onCollideWith(target)
called when entity collide with another entity
boolean onEquip(item, slot)
called when entity equips item on the given slot
boolean onDrop(item, slot)
called when entity drops item from the given slot to floor
void onChat(source, text)
called when someone speaks near entity or write to entity
boolean onUse(item)
called when entity use item
boolean onUseWith(base, item)
called when entity use item on base item
boolean onStop()
called when entity stops moving, attacking, etc...