Added enemy grouping.

This commit is contained in:
Martin Haye 2015-10-01 10:04:01 -07:00
parent 679a9ae6fb
commit 6e2187087f
3 changed files with 68 additions and 5 deletions

View File

@ -1495,6 +1495,7 @@ end
//
initHeap()
addToList(global + p_players, new_Player_Hue_Hauser())
addToList(global + p_enemyGroups, new_EnemyGroup_Dirt_Bags())
loadTitle()
setCallbacks()
mapIs3D = OVERMAP_IS_3D

View File

@ -12,6 +12,7 @@ def addTypes()
mmgr(HEAP_ADD_TYPE, @typeTbl_Armor)
mmgr(HEAP_ADD_TYPE, @typeTbl_Stuff)
mmgr(HEAP_ADD_TYPE, @typeTbl_Enemy)
mmgr(HEAP_ADD_TYPE, @typeTbl_EnemyGroup)
end
///////////////////////////////////////////////////////////////////////////////////////////////////
@ -40,6 +41,19 @@ def encodeDice(nDice, dieSize, add)
return (nDice << 12) | (dieSize << 8) | add
end
///////////////////////////////////////////////////////////////////////////////////////////////////
def rollDice(encoded)
byte i, nDice, dieSize, add, result
nDice = encoded >> 12
dieSize = (encoded >> 8) & $F
add = encoded & $F
result = 0
for i = 1 to nDice
result = result + (rand16() % dieSize) + 1
next
return result + add
end
///////////////////////////////////////////////////////////////////////////////////////////////////
def new_Weapon_Handgun
word p
@ -53,7 +67,7 @@ def new_Weapon_Handgun
p->r_meleeDmg = encodeDice(1, 6, 0) // 1d6
p->r_projectileDmg = encodeDice(1, 6, 0) // 1d6
p->ba_attacks[0] = 1 // single attack
p->b_range = 40
p->b_weaponRange = 40
p->s_combatText = mmgr(HEAP_INTERN, "shoots")
return p
end
@ -105,4 +119,37 @@ def new_Player_Hue_Hauser
// All done with the player.
return p
end
end
///////////////////////////////////////////////////////////////////////////////////////////////////
def new_Enemy_Dirt_Bag
word p
p = mmgr(HEAP_ALLOC, TYPE_ENEMY)
p=>s_name = mmgr(HEAP_INTERN, "Dirt-Bag(s)")
p=>w_health = rollDice(encodeDice(1, 6, 0))
p->b_attackType = 1 // melee
p->s_attackText = mmgr(HEAP_INTERN, "swings at")
p->b_enemyAttackRange = 5
p->b_chanceToHit = 15
p=>r_enemyDmg = encodeDice(1, 6, 0) // 1d6
p=>r_groupSize = encodeDice(1, 4, 0) // 1d4
return p
end
///////////////////////////////////////////////////////////////////////////////////////////////////
def new_EnemyGroup_Dirt_Bags
word p, enem, groupSize
p = mmgr(HEAP_ALLOC, TYPE_ENEMY_GROUP)
enem = new_Enemy_Dirt_Bag()
p->b_enemyGroupRange = rollDice(enem=>r_initialRange)
groupSize = rollDice(enem=>r_groupSize)
addToList(p + p_enemies, enem)
while groupSize > 1
addToList(p + p_enemies, new_Enemy_Dirt_Bag())
groupSize = groupSize - 1
loop
return p
end

View File

@ -5,8 +5,9 @@ const TYPE_GLOBAL = $80
struc Global
byte t_type
word p_players
word p_enemyGroups
end
byte typeTbl_Global[] = Global, p_players, 0
byte typeTbl_Global[] = Global, p_players, p_enemyGroups, 0
const TYPE_PLAYER = $81
struc Player
@ -99,7 +100,7 @@ struc Weapon
word r_meleeDmg // 3 hex digits: num dice, die size, add. E.g. $361 = 3d6+1
word r_projectileDmg // ditto
byte ba_attacks[3] // each is: 0=none, 1=single, 2=double, 3+ = multi-shot
byte b_range
byte b_weaponRange
word s_combatText
end
byte typeTbl_Weapon[] = Weapon, p_nextObj, s_name, p_modifiers, s_combatText, 0
@ -142,13 +143,27 @@ struc Enemy
word p_nextObj
word s_name
byte ba_images[2]
word w_hitPoints
word w_health
byte b_hitBonus
byte b_attackType // 1=melee, 2=projectile
word s_attackText
byte b_enemyAttackRange
byte b_chanceToHit
word r_enemyDmg // 3 hex digits: num dice, die size, add. E.g. $361 = 3d6+1
word r_groupSize // number encountered, as 3 hex digits for dice
word r_initialRange
end
byte typeTbl_Enemy[] = Enemy, p_nextObj, s_name, s_attackText, 0
const TYPE_ENEMY_GROUP = $8A
struc EnemyGroup
byte t_type
word p_nextObj
word p_enemies
byte b_enemyGroupRange
end
byte typeTbl_EnemyGroup[] = EnemyGroup, p_nextObj, p_enemies, 0
// Weapon kinds
const KIND_BOW = 1; byte[] kind_bow_str = "bow(s)"
const KIND_BLADE = 2; byte[] kind_blade_str = "blade(s)"