mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-02-23 09:29:00 +00:00
Fleshed out ability to use an item on a map space. In addition, add item god-mode cheat moved to player info screen and made fancier.
This commit is contained in:
parent
83a26c901b
commit
49d025a44c
@ -2218,6 +2218,7 @@ end
|
||||
funcs.each { typeName, func, index, row ->
|
||||
out.println("const ${func} = ${(index+2)*2}")
|
||||
}
|
||||
out.println("const NUM_ITEMS = ${funcs.size()}")
|
||||
}
|
||||
replaceIfDiff("build/src/plasma/gen_items.plh")
|
||||
|
||||
@ -3107,6 +3108,25 @@ end
|
||||
}
|
||||
}
|
||||
|
||||
def packLogicOperation(blk)
|
||||
{
|
||||
def op = getSingle(blk.field, "OP").text()
|
||||
assert blk.value[0].@name == 'A'
|
||||
assert blk.value[1].@name == 'B'
|
||||
def val1 = getSingle(blk.value[0].block)
|
||||
def val2 = getSingle(blk.value[1].block)
|
||||
switch (op) {
|
||||
case 'AND':
|
||||
packExpr(val1); out << " and "; packExpr(val2)
|
||||
break
|
||||
case 'OR':
|
||||
packExpr(val1); out << " or "; packExpr(val2)
|
||||
break
|
||||
default:
|
||||
assert false : "Logic op '$op' not yet implemented."
|
||||
}
|
||||
}
|
||||
|
||||
def packVarGet(blk)
|
||||
{
|
||||
def name = "v_" + humanNameToSymbol(getSingle(blk.field, "VAR").text(), false)
|
||||
@ -3143,6 +3163,9 @@ end
|
||||
case 'logic_compare':
|
||||
packLogicCompare(blk)
|
||||
break
|
||||
case 'logic_operation':
|
||||
packLogicOperation(blk)
|
||||
break
|
||||
case 'variables_get':
|
||||
packVarGet(blk)
|
||||
break
|
||||
|
@ -142,15 +142,6 @@ asm mliStub
|
||||
rts
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Clear the text-mode screen, and put the cursor there.
|
||||
// Params: None
|
||||
asm home
|
||||
+asmPlasm 0
|
||||
+safeHome
|
||||
rts
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def callMLI(cmd, p_params)
|
||||
byte err
|
||||
@ -286,7 +277,7 @@ def _newOrLoadGame(ask)
|
||||
return 0
|
||||
fin
|
||||
|
||||
home()
|
||||
textHome()
|
||||
^$c053
|
||||
^$25 = 20
|
||||
puts("\n N)ew game, or L)oad last game? ")
|
||||
|
@ -13,6 +13,7 @@ import gamelib
|
||||
//////////// Shared library routines ////////////
|
||||
predef setScriptInfo, scriptDisplayStr, scriptDisplayStrNL, getYN, queue_setMap
|
||||
predef setSky, setGround, queue_teleport, setPortrait, clearPortrait, moveWayBackward
|
||||
predef flipToPage1, textHome
|
||||
predef getUpperKey, clearWindow, getGlobals, rand16, printf1, printf2, printf3
|
||||
predef displayf1, displayf2, displayf3, buildString, addToString, finishString, printHex
|
||||
predef displayChar, rawDisplayStr, displayStr, rightJustifyStr, rightJustifyNum, puts
|
||||
@ -22,10 +23,10 @@ import gamelib
|
||||
predef encodeDice, rollDice, setPlural, getStringResponse
|
||||
predef streqi, strncpy, fatal, pause, tossStrings, charToUpper
|
||||
predef addEncounterZone, clearEncounterZones, showMapName, setMapWindow, getMapWindow
|
||||
predef addGold, countGold, payGold
|
||||
predef addGold, countGold, payGold, scriptEvent
|
||||
predef calcPlayerArmor, rdkey, initHeap, scriptCombat, makeModifier
|
||||
predef giveItemToPlayer, takeItemFromPlayer, playerHasItem, getStat, setStat
|
||||
predef setGameFlag, getGameFlag, scriptSetAvatar
|
||||
predef setGameFlag, getGameFlag, scriptSetAvatar, parseDecWithDefault, readStr
|
||||
predef addPlayerToParty, removePlayerFromParty, partyHasPlayer
|
||||
|
||||
/////////// Shared string constants //////////////
|
||||
|
@ -37,6 +37,7 @@ include "gen_modules.plh"
|
||||
include "gen_enemies.plh"
|
||||
include "gen_players.plh"
|
||||
include "gen_globalScripts.plh"
|
||||
include "gen_items.plh"
|
||||
include "combat.plh"
|
||||
include "party.plh"
|
||||
include "diskops.plh"
|
||||
@ -176,7 +177,7 @@ asm initDisplay // params: mapNum, pMapData, x, y, dir
|
||||
+asmPlasm 5
|
||||
jmp $6000
|
||||
end
|
||||
asm flipToPage1 // no params
|
||||
export asm flipToPage1 // no params
|
||||
+asmPlasm 0
|
||||
jmp $6003
|
||||
end
|
||||
@ -591,7 +592,7 @@ end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Read a string from the keyboard, turn it into a PLASMA string and return a pointer to the string.
|
||||
asm readStr
|
||||
export asm readStr
|
||||
+asmPlasm 0
|
||||
bit setROM
|
||||
jsr ROM_getln1
|
||||
@ -807,6 +808,15 @@ export asm rand16
|
||||
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Clear the text-mode screen, and put the text cursor at the top of it.
|
||||
// Params: None
|
||||
export asm textHome
|
||||
+asmPlasm 0
|
||||
+safeHome
|
||||
rts
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// General methods
|
||||
|
||||
@ -966,7 +976,7 @@ def parseDec(str)
|
||||
end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
def parseDecWithDefault(str, default)
|
||||
export def parseDecWithDefault(str, default)
|
||||
if ^str == 0
|
||||
return default
|
||||
fin
|
||||
@ -1194,7 +1204,7 @@ end
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Send an event to the scripts on the current map square
|
||||
def scriptEvent(event, param)
|
||||
export def scriptEvent(event, param)
|
||||
byte i, argCount
|
||||
word script
|
||||
if !nMapScripts; return; fin
|
||||
@ -2081,25 +2091,6 @@ def testCombat
|
||||
getPos(@x, @y)
|
||||
checkEncounter(x, y, TRUE)
|
||||
end
|
||||
def addItem()
|
||||
word funcTbl, func, p_item, n_item
|
||||
|
||||
flipToPage1()
|
||||
^$c053
|
||||
if ^$25 < 23; ^$25 = 23; fin
|
||||
|
||||
puts("\nAdd item #: ")
|
||||
n_item = parseDecWithDefault(readStr(), 0)
|
||||
^$c052
|
||||
|
||||
if n_item >= 2
|
||||
funcTbl = loadEngine(MODULE_GEN_ITEMS)
|
||||
func = *(funcTbl + n_item * 2)
|
||||
p_item = func()
|
||||
addToList(@global=>p_players=>p_items, p_item)
|
||||
returnFromEngine()
|
||||
fin
|
||||
end
|
||||
def printMem
|
||||
flipToPage1
|
||||
^$c051
|
||||
@ -2113,7 +2104,6 @@ def setCheatCmds
|
||||
// install cheat commands
|
||||
cmdTbl['T'] = @kbdTeleport
|
||||
cmdTbl['P'] = @showPos
|
||||
cmdTbl['%'] = @addItem
|
||||
cmdTbl['>'] = @nextPortrait
|
||||
cmdTbl['<'] = @prevPortrait
|
||||
cmdTbl['!'] = @testCombat
|
||||
|
@ -17,6 +17,8 @@ include "playtype.plh"
|
||||
|
||||
// Global definitions
|
||||
include "globalDefs.plh"
|
||||
include "gen_modules.plh"
|
||||
include "gen_items.plh"
|
||||
|
||||
// Definition of constants for functions exported by this module
|
||||
include "party.plh"
|
||||
@ -55,7 +57,7 @@ def itemMatch(item, group)
|
||||
is TYPE_EQUIP
|
||||
return type == TYPE_ARMOR or type == TYPE_WEAPON
|
||||
is TYPE_USE
|
||||
return type == TYPE_ITEM and item=>p_modifiers
|
||||
return type == TYPE_ITEM
|
||||
break
|
||||
is TYPE_DROP
|
||||
return type == TYPE_WEAPON or type == TYPE_ARMOR
|
||||
@ -234,6 +236,47 @@ def showPlayerSheet(num, i_page, i_rows)
|
||||
return player
|
||||
end
|
||||
|
||||
// Add an item cheat
|
||||
def addItem(player)
|
||||
word pModule, funcTbl, func, p_item, n_item, n2, pstr, pstr2
|
||||
pstr = "%d: %s\n"
|
||||
pstr2 = "Add item #: "
|
||||
|
||||
flipToPage1()
|
||||
textHome()
|
||||
^$c051
|
||||
|
||||
mmgr(START_LOAD, 1) // code is in partition 1
|
||||
pModule = mmgr(QUEUE_LOAD, MODULE_GEN_ITEMS<<8 | RES_TYPE_MODULE)
|
||||
mmgr(FINISH_LOAD, 0)
|
||||
funcTbl = pModule()
|
||||
|
||||
for n_item = 1 to NUM_ITEMS
|
||||
func = *(funcTbl + (n_item+1) * 2)
|
||||
p_item = func()
|
||||
printf2(pstr, n_item, p_item=>s_name)
|
||||
if (n_item % 22) == 0 or n_item == NUM_ITEMS
|
||||
mmgr(HEAP_COLLECT, 0)
|
||||
puts(pstr2)
|
||||
n2 = parseDecWithDefault(readStr(), 0)
|
||||
if n2 >= 1 and n2 <= NUM_ITEMS
|
||||
func = *(funcTbl + (n2+1) * 2)
|
||||
p_item = func()
|
||||
printf1("Adding '%s'\n", p_item=>s_name)
|
||||
addToList(@player=>p_items, p_item)
|
||||
rdkey()
|
||||
break
|
||||
else
|
||||
textHome()
|
||||
fin
|
||||
fin
|
||||
next
|
||||
|
||||
mmgr(FREE_MEMORY, pModule)
|
||||
^$c050
|
||||
return
|
||||
end
|
||||
|
||||
// Show player sheet and accept command
|
||||
def _party_doPlayerSheet(num)
|
||||
word player, item
|
||||
@ -274,7 +317,9 @@ def _party_doPlayerSheet(num)
|
||||
rawDisplayStr("\n^T032Which item?")
|
||||
item = itemNum(player, i_rows * i_page, getUpperKey() - 'A', TYPE_USE)
|
||||
if item
|
||||
if streqi(item=>p_modifiers=>s_name, "health")
|
||||
setWindow2()
|
||||
clearWindow()
|
||||
if item=>p_modifiers and streqi(item=>p_modifiers=>s_name, "health")
|
||||
if player=>w_health < player=>w_maxHealth
|
||||
player=>w_health = min(player=>w_health + item=>p_modifiers=>w_modValue, player=>w_maxHealth)
|
||||
item->b_curUses++
|
||||
@ -283,6 +328,7 @@ def _party_doPlayerSheet(num)
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
scriptEvent(@S_USE, item=>s_name)
|
||||
fin
|
||||
else
|
||||
beep
|
||||
@ -343,6 +389,11 @@ def _party_doPlayerSheet(num)
|
||||
addGold(500)
|
||||
fin
|
||||
break
|
||||
is '%' // item cheat
|
||||
if global->b_godmode
|
||||
addItem(player)
|
||||
fin
|
||||
break
|
||||
// All done
|
||||
otherwise return
|
||||
wend
|
||||
|
Loading…
x
Reference in New Issue
Block a user