Refactored to save space in the main gameloop module.

This commit is contained in:
Martin Haye 2016-06-19 08:04:43 -07:00
parent c352a867a2
commit caa05f16f6
3 changed files with 118 additions and 116 deletions

View File

@ -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)
@ -2054,7 +2076,53 @@ class PackPartitions
out.println("word = @_$func")
}
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}'") {

View File

@ -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

View File

@ -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()