diff --git a/Platform/Apple/virtual/src/plasma/gameloop.pla b/Platform/Apple/virtual/src/plasma/gameloop.pla index e439f5e3..49265c4f 100644 --- a/Platform/Apple/virtual/src/plasma/gameloop.pla +++ b/Platform/Apple/virtual/src/plasma/gameloop.pla @@ -2895,7 +2895,8 @@ end export def addPlayerToParty(playerFuncNum)#0 word p if countList(global=>p_players) == MAX_PARTY - displayStr("Party too large.") + rawDisplayStr("Party too large.") + beep return fin p = createAndAddUnique(MOD_GEN_PLAYERS, playerFuncNum, @global=>p_players) diff --git a/Platform/Apple/virtual/src/plasma/godmode.pla b/Platform/Apple/virtual/src/plasma/godmode.pla index 3086b954..5da33fcf 100644 --- a/Platform/Apple/virtual/src/plasma/godmode.pla +++ b/Platform/Apple/virtual/src/plasma/godmode.pla @@ -230,10 +230,14 @@ def selectThing(moduleNum, nThings, nSkip, prompt)#1 nFunc = -1 textHome() fin + elsif moduleNum == MOD_GEN_PLAYERS + // Players are big, so need collect each time + mmgr(HEAP_COLLECT, 0) fin next mmgr(FREE_MEMORY, pModule) + ^$c050 return nFunc end @@ -242,11 +246,7 @@ end def _addItem(player)#1 word funcNum funcNum = selectThing(MOD_GEN_ITEMS, NUM_ITEMS, 2, "Add item #: ") - if funcNum >= 0 - giveItemToPlayer(player, funcNum) - rdkey() - fin - ^$c050 + if funcNum >= 0; giveItemToPlayer(player, funcNum); fin return 0 end @@ -255,11 +255,7 @@ end def _addPlayer()#1 word funcNum funcNum = selectThing(MOD_GEN_PLAYERS, NUM_PLAYERS, 1, "Add player #: ") - if funcNum >= 0 - addPlayerToParty(funcNum) - rdkey() - fin - ^$c050 + if funcNum >= 0; addPlayerToParty(funcNum); fin return 0 end diff --git a/Platform/Apple/virtual/src/plasma/party.pla b/Platform/Apple/virtual/src/plasma/party.pla index 88e2add0..4593fc0c 100644 --- a/Platform/Apple/virtual/src/plasma/party.pla +++ b/Platform/Apple/virtual/src/plasma/party.pla @@ -411,9 +411,55 @@ def doEquip(player, item)#0 calcPlayerArmor(player) end +def choosePlayer(disp, chooseNum, avoid) + word player + byte num + player = global=>p_players + num = 0 + while player + if player <> avoid + if num; rawDisplayStr(", "); fin + if disp + rawDisplayf2("%c) %s", num+'A', player=>s_name) + elsif num == chooseNum + return player + fin + num++ + fin + player = player=>p_nextObj + loop + return num +end + +/////////////////////////////////////////////////////////////////////////////////////////////////// +def displayDone()#1 + clearMenuRect() + clearMainRect() + rawDisplayStr("Done.") + pause(800) + return NULL +end + // Trade an item to another player/npc def doTrade(player, item)#1 - fatal("not yet: trade") + word destPlayer + byte nChoices, sel + + clearMenuRect() + rawDisplayStr("To: ") + nChoices = choosePlayer(TRUE, 0, player) + rawDisplayStr(" or [Esc]") + while TRUE + sel = getUpperKey() + if sel == $1B; return 0; fin + if sel >= 'A' and (sel-'A') < nChoices + destPlayer = choosePlayer(FALSE, sel-'A', player) + removeFromList(@player=>p_items, item) + addUnique(@destPlayer=>p_items, item) + return displayDone + fin + beep + loop return 0 end @@ -500,15 +546,6 @@ def displayItems(pItem1, pItem2)#0 _displayItemStats(pItem1, pItem2) end -/////////////////////////////////////////////////////////////////////////////////////////////////// -def displayDone()#1 - clearMenuRect() - clearMainRect() - rawDisplayStr("Done.") - pause(800) - return NULL -end - /////////////////////////////////////////////////////////////////////////////////////////////////// def interactWithItem(player, item)#1 word comp, quantity @@ -628,7 +665,7 @@ def _showPlayerSheet(player_num)#1 // funcTbl functions always have to return a when sel is '1'; is '2'; is '3' sel = sel - '1' - if player_num <> sel and countList(global=>p_players) > sel + if countList(global=>p_players) > sel player_num = sel i_page = 0 redisplay = 2 @@ -672,12 +709,14 @@ def _showPlayerSheet(player_num)#1 // funcTbl functions always have to return a break is '%' // add item cheat if global->b_godmode + clearMainRect() pGodModule=>godmode_addItem(player) redisplay = 2 fin break is '9' // add player cheat if global->b_godmode + clearMainRect() pGodModule=>godmode_addPlayer() redisplay = 2 fin