mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-02-08 18:30:35 +00:00
Refactored to save space in the main gameloop module.
This commit is contained in:
parent
c352a867a2
commit
caa05f16f6
@ -1819,6 +1819,28 @@ class PackPartitions
|
||||
addCodeToFunc("_NEn_${humanNameToSymbol(row.@name, false)}", row.@"map-code", codeToFunc) }
|
||||
outCodeToFuncTbl("mapCode_", codeToFunc, out)
|
||||
|
||||
// Helper function to fill in the Enemy data structure
|
||||
out.println("""
|
||||
def makeEnemy(name, healthDice, image0, image1, attackType, attackText, attackRange, chanceToHit, dmg, groupSize, goldLoot)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_ENEMY)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p=>w_health = rollDice(healthDice) // 4d6
|
||||
if !image1 or (rand16() % 2)
|
||||
p->b_image = image0
|
||||
else
|
||||
p->b_image = image1
|
||||
fin
|
||||
p->b_attackType = attackType
|
||||
p=>s_attackText = mmgr(HEAP_INTERN, attackText)
|
||||
p->b_enemyAttackRange = attackRange
|
||||
p->b_chanceToHit = chanceToHit
|
||||
p=>r_enemyDmg = dmg
|
||||
p=>r_groupSize = groupSize
|
||||
p=>r_goldLoot = goldLoot
|
||||
return p
|
||||
end
|
||||
""")
|
||||
|
||||
// Now output a function for each enemy
|
||||
sheet.rows.row.each { row ->
|
||||
genEnemy(out, row, portraitNames)
|
||||
@ -2055,6 +2077,52 @@ class PackPartitions
|
||||
}
|
||||
out.println("")
|
||||
|
||||
// Data structure filling helpers
|
||||
out.print("""\n\
|
||||
def makeArmor(name, kind, price, armorValue, modifier)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_ARMOR)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p=>s_itemKind = mmgr(HEAP_INTERN, kind)
|
||||
p=>w_price = price
|
||||
p->b_armorValue = armorValue
|
||||
p=>p_modifiers = modifier
|
||||
return p
|
||||
end
|
||||
|
||||
def makeWeapon_pt1(name, kind, price, modifier, ammoKind, clipSize, meleeDmg, projectileDmg)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_WEAPON)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p=>s_itemKind = mmgr(HEAP_INTERN, kind)
|
||||
p=>w_price = price
|
||||
p=>p_modifiers = modifier
|
||||
p=>s_ammoKind = mmgr(HEAP_INTERN, ammoKind)
|
||||
p->b_clipSize = clipSize
|
||||
p->b_clipCurrent = clipSize
|
||||
p=>r_meleeDmg = meleeDmg
|
||||
p=>r_projectileDmg = projectileDmg
|
||||
return p
|
||||
end
|
||||
|
||||
def makeWeapon_pt2(p, attack0, attack1, attack2, weaponRange, combatText)
|
||||
p->ba_attacks[0] = attack0
|
||||
p->ba_attacks[1] = attack1
|
||||
p->ba_attacks[2] = attack2
|
||||
p->b_weaponRange = weaponRange
|
||||
p=>s_combatText = mmgr(HEAP_INTERN, combatText)
|
||||
return p
|
||||
end
|
||||
|
||||
def makeStuff(name, kind, price, count)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_ARMOR)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p=>s_itemKind = mmgr(HEAP_INTERN, kind)
|
||||
p=>w_price = price
|
||||
p=>w_count = count
|
||||
p=>w_maxCount = count
|
||||
return p
|
||||
end
|
||||
""")
|
||||
|
||||
// Generate all the functions themselves
|
||||
funcs.each { typeName, func, index, row ->
|
||||
withContext("$typeName '${row.@name}'")
|
||||
@ -2128,6 +2196,32 @@ class PackPartitions
|
||||
}
|
||||
out.println("")
|
||||
|
||||
// Data structure-filling helper
|
||||
out.print("""\n\
|
||||
def makePlayer_pt1(name, intelligence, strength, agility, stamina, charisma, spirit, luck)
|
||||
word p
|
||||
p = mmgr(HEAP_ALLOC, TYPE_PLAYER)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p->b_intelligence = intelligence
|
||||
p->b_strength = strength
|
||||
p->b_agility = agility
|
||||
p->b_stamina = stamina
|
||||
p->b_charisma = charisma
|
||||
p->b_spirit = spirit
|
||||
p->b_luck = luck
|
||||
return p
|
||||
end
|
||||
|
||||
def makePlayer_pt2(p, health, aiming, handToHand, dodging)
|
||||
p=>w_health = health
|
||||
p=>w_maxHealth = health
|
||||
p->b_aiming = aiming
|
||||
p->b_handToHand = handToHand
|
||||
p->b_dodging = dodging
|
||||
return p
|
||||
end
|
||||
""")
|
||||
|
||||
// Generate all the functions themselves
|
||||
funcs.each { func, index, row ->
|
||||
withContext("player '${row.@name}'") {
|
||||
|
@ -105,24 +105,24 @@ const brk = gameLibVecs + 3*40
|
||||
const encodeDice = gameLibVecs + 3*41
|
||||
const rollDice = gameLibVecs + 3*42
|
||||
const setPlural = gameLibVecs + 3*43
|
||||
const makeEnemy = gameLibVecs + 3*44
|
||||
const getStringResponse = gameLibVecs + 3*45
|
||||
const strcmpi = gameLibVecs + 3*46
|
||||
const addEncounterZone = gameLibVecs + 3*47
|
||||
const fatal = gameLibVecs + 3*48
|
||||
const pause = gameLibVecs + 3*49
|
||||
const tossStrings = gameLibVecs + 3*50
|
||||
const showMapName = gameLibVecs + 3*51
|
||||
const setMapWindow = gameLibVecs + 3*52
|
||||
const makeModifier = gameLibVecs + 3*53
|
||||
const makeArmor = gameLibVecs + 3*54
|
||||
const makeWeapon_pt1 = gameLibVecs + 3*55
|
||||
const makeWeapon_pt2 = gameLibVecs + 3*56
|
||||
const randomFromArray = gameLibVecs + 3*57
|
||||
const makePlayer_pt1 = gameLibVecs + 3*58
|
||||
const makePlayer_pt2 = gameLibVecs + 3*59
|
||||
const calcPlayerArmor = gameLibVecs + 3*60
|
||||
const makeStuff = gameLibVecs + 3*61
|
||||
const getStringResponse = gameLibVecs + 3*44
|
||||
const strcmpi = gameLibVecs + 3*45
|
||||
const addEncounterZone = gameLibVecs + 3*46
|
||||
const fatal = gameLibVecs + 3*47
|
||||
const pause = gameLibVecs + 3*48
|
||||
const tossStrings = gameLibVecs + 3*49
|
||||
const showMapName = gameLibVecs + 3*50
|
||||
const setMapWindow = gameLibVecs + 3*51
|
||||
const makeModifier = gameLibVecs + 3*52
|
||||
const randomFromArray = gameLibVecs + 3*53
|
||||
const calcPlayerArmor = gameLibVecs + 3*54
|
||||
const UNUSED_FN_55 = gameLibVecs + 3*55
|
||||
const UNUSED_FN_56 = gameLibVecs + 3*56
|
||||
const UNUSED_FN_57 = gameLibVecs + 3*57
|
||||
const UNUSED_FN_58 = gameLibVecs + 3*58
|
||||
const UNUSED_FN_59 = gameLibVecs + 3*59
|
||||
const UNUSED_FN_60 = gameLibVecs + 3*60
|
||||
const UNUSED_FN_61 = gameLibVecs + 3*61
|
||||
const UNUSED_FN_62 = gameLibVecs + 3*62
|
||||
const UNUSED_FN_63 = gameLibVecs + 3*63
|
||||
const UNUSED_FN_64 = gameLibVecs + 3*64
|
||||
|
@ -108,10 +108,9 @@ predef _puts, _min, _max
|
||||
predef _countList, _countListFiltered, _randomFromListFiltered, _addToList, _beep
|
||||
predef _showParty, _mmgr, _setWindow1, _setWindow2, _setWindow3
|
||||
predef _reboot, _brk, _encodeDice, _rollDice
|
||||
predef _setPlural, _makeEnemy, _getStringResponse, _strcmpi, _addEncounterZone, _fatal
|
||||
predef _setPlural, _getStringResponse, _strcmpi, _addEncounterZone, _fatal
|
||||
predef _pause, _tossStrings, _showMapName, _setMapWindow
|
||||
predef _makeModifier, _makeArmor, _makeWeapon_pt1, _makeWeapon_pt2, _randomFromArray
|
||||
predef _makePlayer_pt1, _makePlayer_pt2, _calcPlayerArmor, _makeStuff
|
||||
predef _makeModifier, _randomFromArray, _calcPlayerArmor
|
||||
|
||||
word gameLib_addrs = @_setScriptInfo, @_scriptDisplayStr, @_scriptDisplayStrNL, @_getYN
|
||||
word = @_queue_setMap, @_setSky, @_setGround, @_queue_teleport, @_setPortrait, @_clearPortrait
|
||||
@ -124,10 +123,9 @@ word = @_puts, @_min, @_max
|
||||
word = @_countList, @_countListFiltered, @_randomFromListFiltered, @_addToList, @_beep
|
||||
word = @_showParty, @_mmgr, @_setWindow1, @_setWindow2, @_setWindow3
|
||||
word = @_reboot, @_brk, @_encodeDice, @_rollDice
|
||||
word = @_setPlural, @_makeEnemy, @_getStringResponse, @_strcmpi, @_addEncounterZone, @_fatal
|
||||
word = @_setPlural, @_getStringResponse, @_strcmpi, @_addEncounterZone, @_fatal
|
||||
word = @_pause, @_tossStrings, @_showMapName, @_setMapWindow
|
||||
word = @_makeModifier, @_makeArmor, @_makeWeapon_pt1, @_makeWeapon_pt2, @_randomFromArray
|
||||
word = @_makePlayer_pt1, @_makePlayer_pt2, @_calcPlayerArmor, @_makeStuff
|
||||
word = @_makeModifier, @_randomFromArray, @_calcPlayerArmor
|
||||
|
||||
word = 0 // end of library functions
|
||||
|
||||
@ -1893,26 +1891,6 @@ def showPlayer3()
|
||||
showPlayerSheet(2)
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def _makeEnemy(name, healthDice, image0, image1, attackType, attackText, attackRange, chanceToHit, dmg, groupSize, goldLoot)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_ENEMY)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p=>w_health = rollDice(healthDice) // 4d6
|
||||
if !image1 or (rand16() % 2)
|
||||
p->b_image = image0
|
||||
else
|
||||
p->b_image = image1
|
||||
fin
|
||||
p->b_attackType = attackType
|
||||
p=>s_attackText = mmgr(HEAP_INTERN, attackText)
|
||||
p->b_enemyAttackRange = attackRange
|
||||
p->b_chanceToHit = chanceToHit
|
||||
p=>r_enemyDmg = dmg
|
||||
p=>r_groupSize = groupSize
|
||||
p=>r_goldLoot = goldLoot
|
||||
return p
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def _addEncounterZone(code, x, y, dist, chance)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_ENCOUNTER_ZONE)
|
||||
@ -2131,6 +2109,7 @@ def _randomFromArray(arr, siz)
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor: create a modifier given its name and value
|
||||
def _makeModifier(name, value)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_MODIFIER)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
@ -2139,67 +2118,7 @@ def _makeModifier(name, value)
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def _makeArmor(name, kind, price, armorValue, modifier)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_ARMOR)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p=>s_itemKind = mmgr(HEAP_INTERN, kind)
|
||||
p=>w_price = price
|
||||
p->b_armorValue = armorValue
|
||||
p=>p_modifiers = modifier
|
||||
return p
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def _makeWeapon_pt1(name, kind, price, modifier, ammoKind, clipSize, meleeDmg, projectileDmg)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_WEAPON)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p=>s_itemKind = mmgr(HEAP_INTERN, kind)
|
||||
p=>w_price = price
|
||||
p=>p_modifiers = modifier
|
||||
p=>s_ammoKind = mmgr(HEAP_INTERN, ammoKind)
|
||||
p->b_clipSize = clipSize
|
||||
p->b_clipCurrent = clipSize
|
||||
p=>r_meleeDmg = meleeDmg
|
||||
p=>r_projectileDmg = projectileDmg
|
||||
return p
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def _makeWeapon_pt2(p, attack0, attack1, attack2, weaponRange, combatText)
|
||||
p->ba_attacks[0] = attack0
|
||||
p->ba_attacks[1] = attack1
|
||||
p->ba_attacks[2] = attack2
|
||||
p->b_weaponRange = weaponRange
|
||||
p=>s_combatText = mmgr(HEAP_INTERN, combatText)
|
||||
return p
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def _makePlayer_pt1(name, intelligence, strength, agility, stamina, charisma, spirit, luck)
|
||||
word p
|
||||
p = mmgr(HEAP_ALLOC, TYPE_PLAYER)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p->b_intelligence = intelligence
|
||||
p->b_strength = strength
|
||||
p->b_agility = agility
|
||||
p->b_stamina = stamina
|
||||
p->b_charisma = charisma
|
||||
p->b_spirit = spirit
|
||||
p->b_luck = luck
|
||||
return p
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def _makePlayer_pt2(p, health, aiming, handToHand, dodging)
|
||||
p=>w_health = health
|
||||
p=>w_maxHealth = health
|
||||
p->b_aiming = aiming
|
||||
p->b_handToHand = handToHand
|
||||
p->b_dodging = dodging
|
||||
return p
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Recalculate player's armor score based on their currently equipped armor
|
||||
def _calcPlayerArmor(player)
|
||||
word pItem
|
||||
player->b_armor = 0
|
||||
@ -2212,17 +2131,6 @@ def _calcPlayerArmor(player)
|
||||
loop
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def _makeStuff(name, kind, price, count)
|
||||
word p; p = mmgr(HEAP_ALLOC, TYPE_ARMOR)
|
||||
p=>s_name = mmgr(HEAP_INTERN, name)
|
||||
p=>s_itemKind = mmgr(HEAP_INTERN, kind)
|
||||
p=>w_price = price
|
||||
p=>w_count = count
|
||||
p=>w_maxCount = count
|
||||
return p
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Create the party
|
||||
def initParty()
|
||||
|
Loading…
x
Reference in New Issue
Block a user