From a208b5b4a0715a25ed19cbca7e55fc6a8f66895f Mon Sep 17 00:00:00 2001 From: Martin Haye Date: Tue, 20 Nov 2018 06:54:52 -0800 Subject: [PATCH] More work on quest log locations. --- .../src/org/badvision/A2PackPartitions.groovy | 6 +- .../Apple/virtual/src/plasma/questlog.pla | 232 ++++++++++++++++++ .../Apple/virtual/src/plasma/questlog.plh | 11 + 3 files changed, 247 insertions(+), 2 deletions(-) create mode 100644 Platform/Apple/virtual/src/plasma/questlog.pla create mode 100644 Platform/Apple/virtual/src/plasma/questlog.plh diff --git a/Platform/Apple/tools/PackPartitions/src/org/badvision/A2PackPartitions.groovy b/Platform/Apple/tools/PackPartitions/src/org/badvision/A2PackPartitions.groovy index 4e116303..181cf4eb 100644 --- a/Platform/Apple/tools/PackPartitions/src/org/badvision/A2PackPartitions.groovy +++ b/Platform/Apple/tools/PackPartitions/src/org/badvision/A2PackPartitions.groovy @@ -3251,7 +3251,8 @@ class A2PackPartitions def map1Num = 0, map1X = 0, map1Y = 0 if (map1Name) { assert mapNames.containsKey(map1Name) : "unrecognized map '$map1Name'" - map1Num = mapNames[map1Name][1] + assert mapNames[map1Name][0] =~ /^[23]D$/ + map1Num = mapNames[map1Name][1] | (mapNames[map1Name][0] == "3D" ? 0x80 : 0) map1X = row.@"Map1-X".toInteger() map1Y = row.@"Map1-Y".toInteger() } @@ -3260,7 +3261,8 @@ class A2PackPartitions def map2Num = 0, map2X = 0, map2Y = 0 if (map2Name) { assert mapNames.containsKey(map2Name) : "unrecognized map '$map2Name'" - map2Num = mapNames[map2Name][1] + assert mapNames[map2Name][0] =~ /^[23]D$/ + map2Num = mapNames[map2Name][1] | (mapNames[map2Name][0] == "3D" ? 0x80 : 0) map2X = row.@"Map2-X".toInteger() map2Y = row.@"Map2-Y".toInteger() } diff --git a/Platform/Apple/virtual/src/plasma/questlog.pla b/Platform/Apple/virtual/src/plasma/questlog.pla new file mode 100644 index 00000000..1cb2e2a6 --- /dev/null +++ b/Platform/Apple/virtual/src/plasma/questlog.pla @@ -0,0 +1,232 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2015 The 8-Bit Bunch. Licensed under the Apache License, Version 1.1 +// (the "License"); you may not use this file except in compliance with the License. +// You may obtain a copy of the License at . +// Unless required by applicable law or agreed to in writing, software distributed under +// the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +// ANY KIND, either express or implied. See the License for the specific language +// governing permissions and limitations under the License. +/////////////////////////////////////////////////////////////////////////////////////////////////// + +include "gamelib.plh" +include "globalDefs.plh" +include "playtype.plh" +include "gen_images.plh" +include "gen_items.plh" +include "gen_enemies.plh" +include "gen_modules.plh" +include "combat.plh" + +predef _showQuests()#1 +word[] funcTbl = @_showQuests + +word pQuestsModule + +byte nUnstarted, nActive, nDone +byte nTriggeredSteps, lastTriggered, nSteps +byte displayMode, curQuestNum +word curQuestFunc, curStepFunc +byte questMapNum[2] +word questMapX[2] +word questMapY[2] + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +def loadExtraModules()#0 + mmgr(START_LOAD, 1) // code is in partition 1 + pQuestsModule = mmgr(QUEUE_LOAD, MOD_GEN_QUESTS<<8 | RES_TYPE_MODULE) + mmgr(FINISH_LOAD, 0) +end + +/////////////////////////////////////////////////////////////////////////////////////////////////// +def unloadExtraModules()#0 + mmgr(FREE_MEMORY, pQuestsModule) +end + +/////////////////////////////////////////////////////////////////////////////////// +def displayQuest_cb3(descrip, portraitNum, map1Num, map1X, map1Y, map2Num, map2X, map2Y) + setPortrait(portraitNum) + displayStr(descrip) + questMapNum[0] = map1Num; questMapX[0] = map1X; questMapY[0] = map1Y + questMapNum[1] = map2Num; questMapX[1] = map2X; questMapY[1] = map2Y + return 0 +end + +/////////////////////////////////////////////////////////////////////////////////// +def displayQuest_cb2(stepNum, questName, triggerFlag, triggerItem, stepFunc)#1 + if stepNum == 0 + displayf1("Quest: %s\n\n", questName) + fin + if displayMode == 'A' + nSteps++ + if triggerFlag + if getGameFlag(triggerFlag); nTriggeredSteps++; fin + elsif triggerItem + if partyHasItem(triggerItem); nTriggeredSteps++; fin + fin + if nTriggeredSteps == nSteps + curStepFunc = stepFunc + fin + fin + return 0 +end + +/////////////////////////////////////////////////////////////////////////////////////////////////// +def displayCurQuest()#0 + byte ct + + questMapNum[0] = 0 + questMapNum[1] = 0 + + clearPortrait; useMapWindow; clearWindow + setWindow2; clearWindow + rawDisplayStr("^I^Y") + if displayMode == 'A' + rawDisplayStr("Active") + ct = nActive + else + rawDisplayStr("Done") + ct = nDone + fin + if !ct + rawDisplayStr(" quests^N\n\nNone.") + return + fin + rawDisplayf2(" %d of %d^N\n\n", curQuestNum+1, ct) + + if !curQuestFunc; return; fin + + nTriggeredSteps = 0 + nSteps = 0 + curQuestFunc(@displayQuest_cb2) + if curStepFunc + curStepFunc(@displayQuest_cb3) + fin +end + +/////////////////////////////////////////////////////////////////////////////////// +def countQuests_cb2(stepNum, name, triggerFlag, triggerItem, stepFunc)#1 + lastTriggered = FALSE + if triggerFlag + if getGameFlag(triggerFlag); nTriggeredSteps++; lastTriggered = TRUE; fin + elsif triggerItem + if partyHasItem(triggerItem); nTriggeredSteps++; lastTriggered = TRUE; fin + fin + return 0 +end + +/////////////////////////////////////////////////////////////////////////////////// +def countQuests_cb1(questNum, questFunc)#1 + nTriggeredSteps = 0 + lastTriggered = FALSE + questFunc(@countQuests_cb2) + if lastTriggered + if displayMode == 'D' and nDone == curQuestNum + curQuestFunc = questFunc + fin + nDone++ + elsif nTriggeredSteps + if displayMode == 'A' and nActive == curQuestNum + curQuestFunc = questFunc + fin + nActive++ + else + nUnstarted++ + fin + return 0 +end + +/////////////////////////////////////////////////////////////////////////////////// +def countQuests()#0 + nUnstarted = 0 + nActive = 0 + nDone = 0 + curQuestFunc = NULL + pQuestsModule()(@countQuests_cb1) +end + +/////////////////////////////////////////////////////////////////////////////////////////////////// +def showMenu()#0 + byte ct + setWindow3 + clearWindow + if questMapNum[0] or questMapNum[1]; displayStr("S)how on map,\n"); fin + ct = displayMode=='A' ?? nActive :: nDone + if curQuestNum+1 < ct; displayStr("N)ext, "); fin + if curQuestNum; displayStr("P)rev, "); fin + if curQuestNum+1 < ct or curQuestNum; displayStr("\n"); fin + displayStr("T)oggle active/done,\n[Esc] to exit") +end + +/////////////////////////////////////////////////////////////////////////////////////////////////// +def _showQuests()#1 + byte sel, resetup, redisplay + + resetup = TRUE + while TRUE + if resetup + // Setup + showMapName("Quest Log") + setWindow2; clearWindow + setWindow3; clearWindow + useMapWindow; clearWindow + loadExtraModules + + displayMode = 'A' + curQuestNum = 0 + + // Main work + redisplay = TRUE + resetup = FALSE + fin + if redisplay + countQuests // also sets current quest + displayCurQuest + showMenu + redisplay = FALSE + fin + sel = getUpperKey + when sel + is 'S' + // Show on map + if questMapNum[0] or questMapNum[1] + showOnMap; redisplay = TRUE + else + beep + fin + is 'N' + // Next quest + if displayMode == 'A' and curQuestNum+1 < nActive + curQuestNum++; redisplay = TRUE + elsif displayMode == 'D' and curQuestNum+1 < nDone + curQuestNum++; redisplay = TRUE + else + beep + fin + break + is 'P' + // Prev quest + if curQuestNum + curQuestNum--; redisplay = TRUE + else + beep + fin + break + is 'T' + // Toggle active/done + displayMode = displayMode=='D' ?? 'A' :: 'D' + redisplay = TRUE + break + is $1B // Esc + setWindow2; clearWindow + unloadExtraModules + return 0 + wend + loop + return 0 +end + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// initialization code + +return @funcTbl +done diff --git a/Platform/Apple/virtual/src/plasma/questlog.plh b/Platform/Apple/virtual/src/plasma/questlog.plh new file mode 100644 index 00000000..ea81c82c --- /dev/null +++ b/Platform/Apple/virtual/src/plasma/questlog.plh @@ -0,0 +1,11 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2018 The 8-Bit Bunch. Licensed under the Apache License, Version 1.1 +// (the "License"); you may not use this file except in compliance with the License. +// You may obtain a copy of the License at . +// Unless required by applicable law or agreed to in writing, software distributed under +// the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +// ANY KIND, either express or implied. See the License for the specific language +// governing permissions and limitations under the License. +/////////////////////////////////////////////////////////////////////////////////////////////////// + +const questlog_showQuests = 0