mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-02-12 14:30:43 +00:00
Added enemy grouping.
This commit is contained in:
parent
679a9ae6fb
commit
6e2187087f
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)"
|
||||
|
Loading…
x
Reference in New Issue
Block a user