Fixed XP gaining for party. Improvements to melee weapon combat, and to hand-to-hand combat

This commit is contained in:
Martin Haye 2021-09-04 08:05:13 -07:00
parent 4e1fb075e5
commit 026e1c2e5d
3 changed files with 27 additions and 12 deletions

View File

@ -3787,18 +3787,24 @@ class A2PackPartitions
replaceIfDiff("build/src/plasma/gen_flags.pla")
}
def lookupStringOrNull(strings, str)
{
if (str == null || str.trim() == "")
return "NULL"
assert strings[str] != null
return "@${strings[str]}"
}
def genWeapon(func, row, out, strings)
{
assert strings[parseStringAttr(row, "weapon-kind")] != null
assert strings[parseStringAttr(row, "ammo-kind")] != null
assert strings[parseStringAttr(row, "combat-text")] != null
out.println(
" return makeWeapon_pt2(makeWeapon_pt1(" +
"${escapeString(parseStringAttr(row, "name"))}, " +
"@${strings[parseStringAttr(row, "weapon-kind")]}, " +
"${lookupStringOrNull(strings, parseStringAttr(row, "weapon-kind"))}, " +
"${parseWordAttr(row, "price")}, " +
"${parseModifier(row, "bonus-value", "bonus-attribute")}, " +
"@${strings[parseStringAttr(row, "ammo-kind")]}, " +
"${lookupStringOrNull(strings, parseStringAttr(row, "ammo-kind"))}, " +
"${parseByteAttr(row, "clip-size")}, " +
"${parseDiceAttr(row, "melee-damage")}, " +
"${parseDiceAttr(row, "projectile-damage")}), " +
@ -3812,6 +3818,8 @@ class A2PackPartitions
def genArmor(func, row, out, strings)
{
assert strings[parseStringAttr(row, "armor-kind")] != null
assert strings[parseStringAttr(row, "armor-kind")] != ""
out.println(
" return makeArmor(" +
"${escapeString(parseStringAttr(row, "name"))}, " +
@ -3835,7 +3843,7 @@ class A2PackPartitions
if (count > 0 && !name.contains("("))
printWarning("countable item should have (singular/plural) in name")
out.println(" return makeFancyItem(${escapeString(name)}, $price, " +
"@${strings[kind]}, $modifier, $count, $storeAmount, $lootAmount)")
"${lookupStringOrNull(strings, kind)}, $modifier, $count, $storeAmount, $lootAmount)")
}
else
out.println(" return makePlainItem(${escapeString(name)}, $price)")

View File

@ -283,7 +283,11 @@ def playerMelee(pPlayer, pWeapon)#0
byte agil
// Maybe in the future we'll put this under control of a global script
sAction = (rand16() % 2) ?? "punches" :: "kicks"
if pWeapon
sAction = pWeapon=>s_combatText
else
sAction = (rand16() % 2) ?? "punches" :: "kicks"
fin
pEnemy = chooseEnemy(5, pPlayer->b_gangChoice) // max distance 5 feet for melee
if !pEnemy
@ -619,6 +623,7 @@ def chooseWeapon(pl, pWeapon)#0
fin
pi = pi=>p_nextObj
loop
displayOption(i, "Fists & Feet")
while TRUE
k = getUpperKey
sel = NULL
@ -631,12 +636,15 @@ def chooseWeapon(pl, pWeapon)#0
pi = pi=>p_nextObj
loop
if sel; break; fin
if k == 'A'; break; fin // selected Fists & Feet
beep
loop
fin
// Apply the final selection
sel->b_flags = sel->b_flags | ITEM_FLAG_EQUIP
if sel
sel->b_flags = sel->b_flags | ITEM_FLAG_EQUIP
fin
end
///////////////////////////////////////////////////////////////////////////////////////////////////
@ -659,10 +667,9 @@ def playerCombatChoose(pl)#0
p = pl=>p_items
while p
if p->t_type == TYPE_WEAPON
canChange = TRUE
if p->b_flags & ITEM_FLAG_EQUIP
pWeapon = p
else
canChange = TRUE
fin
fin
p = p=>p_nextObj
@ -828,7 +835,6 @@ def playerCombatTurn(pl)#1
return 0
is 'S'
nAttacks = calcNumAtt(pl, FALSE, pWeapon) // FALSE=not melee
displayf1("nAttacks=%d\n", nAttacks)
for i = 1 to nAttacks
for j = 1 to pl->b_shotChoice
if nEnemiesFighting and pWeapon->b_clipCurrent
@ -848,7 +854,7 @@ def playerCombatTurn(pl)#1
break
is 'C'
// Choose a different weapon
displayf3("\n%s switches to %s %s.\n", pl=>s_name, hisHerTheir(pl->c_gender), pWeapon=>s_name)
displayf3("\n%s switches to %s %s.\n", pl=>s_name, hisHerTheir(pl->c_gender), pWeapon ?? pWeapon=>s_name :: "fists & feet")
break
is 'A'
// Advance 5 feet as a party (i.e. only the first player)

View File

@ -2852,7 +2852,7 @@ def showPlayerSheet(num)#1
anyInteraction = FALSE
scriptEvent(@S_USE, sNameToUse)
if !anyInteraction
scriptDisplayStr("Nothing happened.")
scriptDisplayStr("Nothing happens.")
setTextCountdown
fin
fin
@ -3512,6 +3512,7 @@ export def getStat(player, statName)#1
is streqi(statName, @S_DODGING); return player->b_dodging
is streqi(statName, @S_GOLD); return global=>w_gold
is streqi(statName, @S_TIME); return global->b_hour
is streqi(statName, @S_XP); return player=>w_curXP
is streqi(statName, @S_SP); return player->b_skillPoints
is streqi(statName, @S_PACK_SIZE); return player->b_packSize
is streqi(statName, @S_BANK_BAL); return global=>w_bankBal