diff --git a/src/dhgr.tk/gg/event.pla b/src/dhgr.tk/gg/event.pla new file mode 100644 index 00000000..4466a113 --- /dev/null +++ b/src/dhgr.tk/gg/event.pla @@ -0,0 +1,115 @@ +// +// Events +// +include "../../inc/cmdsys.plh" +include "event.plh" + +const MAX_EVENTS = 20 +res[MAX_EVENTS*t_event] eventTable +var eventFreeList = @eventTable +var eventQueue +// +// Event implementation +// +export def eventInit#0 + eventQueue = NULL + eventFreeList = @eventTable + (MAX_EVENTS-1) * t_event + eventFreeList=>evNext = NULL + repeat + eventFreeList = eventFreeList - t_event + eventFreeList=>evNext = eventFreeList + t_event + until eventFreeList == @eventTable +end +export def eventFree(event)#0 + event=>evNext = eventFreeList + eventFreeList = event +end +export def eventNew#1 + var event + + event = eventFreeList + eventFreeList = eventFreeList=>evNext + event=>evNext = NULL + return event +end +export def doEvents#0 + var event + + if eventQueue + eventQueue=>evDelta-- + while eventQueue and eventQueue=>evDelta == 0 + event = eventQueue + eventQueue = eventQueue=>evNext + event=>evAction(event)#0 + loop + fin +end +export def addEvent(time, event)#0 + var search + + if time < 1; time = 1; fin + if eventQueue + if eventQueue=>evDelta >= time + // + // Insert at head of queue + // + eventQueue=>evDelta = eventQueue=>evDelta - time + event=>evNext = eventQueue + eventQueue = event + else + search = eventQueue + time = time - search=>evDelta + while search=>evNext + if search=>evNext=>evDelta < time + // + // Keep searching while time > evDelta + // + search = search=>evNext + time = time - search=>evDelta + else + event=>evDelta = time + event=>evNext = search=>evNext + search=>evNext = event + search = event=>evNext + search=>evDelta = search=>evDelta - time + return + fin + loop + if not search=>evNext + search=>evNext = event + event=>evNext = NULL + fin + fin + else + eventQueue = event + event=>evNext = NULL + fin + event=>evDelta = time +end +export def addAction(time, action, param)#0 + var event, search + + event = eventNew + event=>evAction = action + event=>evParam = param + addEvent(time, event) +end +export def dumpEvents#0 + var event + + event = eventQueue + while event + puts("Event: "); puti(event=>evDelta); putc(','); puti(event=>evParam); putln + event = event=>evNext + loop + puts("End of events.\n") +end +// +// Go ahead and initialize for now +// +eventInit +// +// Keep module in memory +// +return modkeep +done \ No newline at end of file diff --git a/src/dhgr.tk/gg/event.plh b/src/dhgr.tk/gg/event.plh new file mode 100644 index 00000000..906af65f --- /dev/null +++ b/src/dhgr.tk/gg/event.plh @@ -0,0 +1,15 @@ +import event + struc t_event + var evDelta + var evAction + var evParam + var evNext + end + predef eventInit#0 + predef eventFree(event)#0 + predef eventNew#1 + predef doEvents#0 + predef addEvent(time, event)#0 + predef addAction(time, action, param)#0 + predef dumpEvents#0 +end \ No newline at end of file diff --git a/src/dhgr.tk/gg/makefile b/src/dhgr.tk/gg/makefile index eb1ae8a6..81efd64d 100755 --- a/src/dhgr.tk/gg/makefile +++ b/src/dhgr.tk/gg/makefile @@ -3,11 +3,13 @@ AFLAGS = -o $@ IMPORT = IMPORT.REL SEAN = SEAN.REL +EVENT = EVENT.REL ARTIFACT = ARTIFACT.REL -gg: $(SEAN) $(IMPORT) $(ARTIFACT) +gg: $(SEAN) $(EVENT) $(IMPORT) $(ARTIFACT) -mkdir ../../prodos/dhgr.tk/gg/ cp $(SEAN) ../../prodos/dhgr.tk/gg + cp $(EVENT) ../../prodos/dhgr.tk/gg cp $(IMPORT) ../../prodos/dhgr.tk/gg cp $(ARTIFACT) ../../prodos/dhgr.tk/gg @@ -20,6 +22,10 @@ $(SEAN): sean.pla sean.plh ../../xplasm -AMOW sean.pla acme --setpc 4094 -o $(SEAN) sean.a +$(EVENT): event.pla event.plh + ../../xplasm -AMOW event.pla + acme --setpc 4094 -o $(EVENT) event.a + $(IMPORT): import.pla sean.plh ../../xplasm -AMOW import.pla acme --setpc 4094 -o $(IMPORT) import.a diff --git a/src/dhgr.tk/gg/sean.pla b/src/dhgr.tk/gg/sean.pla index 4e196b75..d79069a0 100644 --- a/src/dhgr.tk/gg/sean.pla +++ b/src/dhgr.tk/gg/sean.pla @@ -1,6 +1,5 @@ include "../../inc/cmdsys.plh" include "../../inc/args.plh" -include "../../inc/matchfiles.plh" include "../../inc/fileio.plh" include "../../inc/conio.plh" include "../../inc/vblank.plh" @@ -8,6 +7,7 @@ include "../../inc/sndseq.plh" include "../../inc/joybuzz.plh" include "../inc/dhgrlib.plh" include "../inc/dhgrutils.plh" +include "event.plh" include "sean.plh" sysflags resxtxt1|reshgr1|resxhgr1|nojitc @@ -25,7 +25,18 @@ byte tileRow6 = 8, 9, 9, 16, 17, 17, 17, 18, 9, 9 byte tileRow7 = 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 byte tileRow8 = 8, 9, 9, 9, 9, 9, 9, 9, 9, 9 var tileMap = @tileRow1, @tileRow2, @tileRow3, @tileRow4 -var = @tileRow5, @tileRow6, @tileRow7, @tileRow8 +var = @tileRow5, @tileRow6, @tileRow7, @tileRow8 +// +// Hoard +// +const HOARD_ACTION_MASK = $01FF +const HOARD_POS = 12 +byte[HOARD_POS] tablePosX = 3, 4, 5, 6, 7, 3, 7, 3, 4, 5, 6, 7 +byte[HOARD_POS] tablePosY = 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5 +byte[HOARD_POS] hoardType +byte hoardAvailable // Available to be picked up +byte hoardActive // Active equipment in play +byte hoardRemaining // Equipment remaining // // Sprites // @@ -49,12 +60,29 @@ byte[NUM_NERDS] nerdClr = CLR_GREEN, CLR_BROWN, CLR_GREY, CLR_ORANGE byte[NUM_NERDS] nerdX = 2, 3, 4, 5 byte[NUM_NERDS] nerdY = 2, 2, 2, 2 byte[NUM_NERDS] nerdDir = LOOK_LEFT, LOOK_FORWARD, LOOK_FORWARD, LOOK_RIGHT -byte[NUM_NERDS] nerdBooty, nerdScore +byte[NUM_NERDS] nerdHoard, nerdScore +// +// Joystick values +// +byte joyX, joyY, btn0, btn1, buzz +byte joyLeft, joyRight, joyUp, joyDown // // Levels // const LEVEL_SCALE = 10 -byte level, game, hoard // Equipment +byte level +// +// Sound F/X +// +const SFX_BUMP = 0 +const SFX_PICKUP = 1 +const SFX_SCORE = 2 +const SFX_JACKPOT = 3 +byte sfxBump = 20, 20, 20, 20, 0 +byte sfxPickup = 8, 9, 10, 0 +byte sfxScore = 5, 10, 5, 10, 0 +byte sfxJackpot = 5, 10, 15, 20, 15, 10, 5, 10, 15, 20, 15, 10, 5,0 +var sfxList = @sfxBump, @sfxPickup, @sfxScore, @sfxJackpot // // This fixes the Virtual ][ bug with outstanding Mockingboard interrupts // @@ -108,6 +136,25 @@ def loadSprites#0 fileio:close(refnum) fin end +// +// Sound F/X Action +// +def actionSFX(event)#0 + byte sfxTable, sfxIndex + + sfxIndex = event->evParam.1 + sfxTable = event->evParam.0 + buzz = sfxList.[sfxTable, sfxIndex] + if buzz + event->evParam.1 = sfxIndex + 1 + addEvent(1, event) + else + eventFree(event) + fin +end +// +// Drawing utilites +// def drawFrame(x, y, w, h)#0 byte r, b @@ -206,17 +253,24 @@ def drawMenu#0 dcgrStr(104, 190, "2026") for i = 0 to 4; drawItem(i); next end +def drawMessage(msg)#0 + byte extX, extY + + dhgrMemBl7(4*TILE_WIDTH7, 4*TILE_HEIGHT, TILE_WIDTH7, TILE_HEIGHT, tileList+(TILE_TABLEMID-1)*TILE_SIZE, TILE_SPAN) + dhgrMemBl7(5*TILE_WIDTH7, 4*TILE_HEIGHT, TILE_WIDTH7, TILE_HEIGHT, tileList+(TILE_TABLEMID-1)*TILE_SIZE, TILE_SPAN) + dhgrMemBl7(6*TILE_WIDTH7, 4*TILE_HEIGHT, TILE_WIDTH7, TILE_HEIGHT, tileList+(TILE_TABLEMID-1)*TILE_SIZE, TILE_SPAN) + if msg + dcgrColor(CLR_WHITE) + extX, extY = dcgrStrExtents(msg) + dcgrStr((140 + TILE_WIDTH/2 - extX)/2, 5*TILE_HEIGHT - extY, msg) + fin +end def drawStatus#0 char[4] str - var chalkboard - itoa(@str, hoard) - chalkboard = tileList+(TILE_CHALKBOARD-1)*TILE_SIZE + itoa(@str, hoardRemaining) dcgrColor(CLR_WHITE) - //dhgrMemBl7(4*TILE_WIDTH7, 0, TILE_WIDTH7, TILE_HEIGHT, chalkboard, TILE_SPAN) - //dhgrMemBl7(5*TILE_WIDTH7, 0, TILE_WIDTH7, TILE_HEIGHT, chalkboard, TILE_SPAN) - dhgrMemBl7(6*TILE_WIDTH7, 0, TILE_WIDTH7, TILE_HEIGHT, chalkboard, TILE_SPAN) - dcgrStr(46, 15, "Remaining:") + dhgrMemBl7(6*TILE_WIDTH7, 0, TILE_WIDTH7, TILE_HEIGHT, tileList+(TILE_CHALKBOARD-1)*TILE_SIZE, TILE_SPAN) dcgrStr(86, 15, @str) end def drawScore(nerd)#0 @@ -240,6 +294,13 @@ def drawMap#0 dhgrMemBl7(l*TILE_WIDTH7, k*TILE_HEIGHT, TILE_WIDTH7, TILE_HEIGHT, tileList+(tileMap.[k,l]-1)*TILE_SIZE, TILE_SPAN) next next + dcgrColor(CLR_WHITE) + dcgrStr(46, 15, "Remaining") +end +def actionSean(event)#0 + dhgrMemBl7(8*TILE_WIDTH7, 0, TILE_WIDTH7, TILE_HEIGHT, tileList+(TILE_SEAN1-1)*TILE_SIZE, TILE_SPAN) + dhgrMemBl7(9*TILE_WIDTH7, 0, TILE_WIDTH7, TILE_HEIGHT, tileList+(TILE_SEAN2-1)*TILE_SIZE, TILE_SPAN) + eventFree(event) end def hitCheck(nerd, x, y) byte i @@ -250,20 +311,22 @@ def hitCheck(nerd, x, y) // Check for other nerds // for i = 0 to NUM_NERDS-1 - if x == nerdX[i] and y == nerdY[i]; return TRUE; fin + if x == nerdX[i] and y == nerdY[i] + addAction(1, @actionSFX, SFX_BUMP) + return TRUE + fin next return FALSE is TILE_BOX // - // Drop off booty? + // Drop off hoard? // - if y == nerd * 2 + 1 and nerdBooty[nerd] - nerdBooty[nerd] = 0 + if y == nerd * 2 + 1 and nerdHoard[nerd] + hoardActive-- + nerdHoard[nerd] = 0 nerdScore[nerd]++ drawScore(nerd) - if hoard == 0 - game = FALSE - fin + addAction(1, @actionSFX, SFX_SCORE) fin break is TILE_SEAN1 @@ -271,15 +334,41 @@ def hitCheck(nerd, x, y) // // Jackpot? // - if nerdBooty[nerd] == JACKPOT - nerdBooty[nerd] = 0 + if nerdHoard[nerd] == JACKPOT + hoardActive-- + nerdHoard[nerd] = 0 nerdScore[nerd] = nerdScore[nerd] + 3 drawScore(nerd) - if hoard == 0 - game = FALSE - fin + addAction(1, @actionSFX, SFX_JACKPOT) + addAction(100, @actionSean, 0) + dhgrMemBl7(8*TILE_WIDTH7, 0, TILE_WIDTH7, TILE_HEIGHT, tileList+(TILE_BOX-1)*TILE_SIZE, TILE_SPAN) + dhgrMemBl7(9*TILE_WIDTH7, 0, TILE_WIDTH7, TILE_HEIGHT, tileList+(TILE_BOX-1)*TILE_SIZE, TILE_SPAN) fin break + is TILE_TABLE1 + is TILE_TABLE2 + is TILE_TABLE3 + is TILE_TABLE4 + is TILE_TABLE5 + is TILE_TABLE6 + is TILE_TABLE7 + is TILE_TABLE8 + for i = 0 to HOARD_POS-1 + if tablePosX[i] == x and tablePosY[i] == y; break; fin + next + if hoardType[i] // Pick up HW + dhgrMemBl7(x*TILE_WIDTH7, y*TILE_HEIGHT, TILE_WIDTH7, TILE_HEIGHT, tileList+(tileMap.[y,x]-1)*TILE_SIZE, TILE_SPAN) + nerdHoard[nerd], hoardType[i] = hoardType[i], nerdHoard[nerd] // Swap goods + if hoardType[i] + dcgrPixMap(tablePosX[i] * TILE_WIDTH, \ + tablePosY[i] * TILE_HEIGHT + 2, \ + SPRITE_WIDTH, SPRITE_HEIGHT, \ + spriteList + (hoardType[i] - 1) * SPRITE_SIZE) + else + hoardAvailable-- + fin + addAction(1, @actionSFX, SFX_PICKUP) + fin wend return TRUE end @@ -290,210 +379,237 @@ def moveNerd(nerd, dir) oldX = nerdX[nerd] oldY = nerdY[nerd] - moved = TRUE + moved = FALSE when dir is MOVE_UP - if hitCheck(nerd, nerdX[nerd], nerdY[nerd] - 1) - moved = FALSE - else + if not hitCheck(nerd, nerdX[nerd], nerdY[nerd] - 1) nerdY[nerd]-- + moved = TRUE fin nerdDir[nerd] = LOOK_AWAY break is MOVE_LEFT - if nerdX[nerd] < 1 or hitCheck(nerd, nerdX[nerd] - 1, nerdY[nerd]) - moved = FALSE - else + if nerdX[nerd] > 0 and not hitCheck(nerd, nerdX[nerd] - 1, nerdY[nerd]) nerdX[nerd]-- + moved = TRUE fin nerdDir[nerd] = LOOK_LEFT break is MOVE_RIGHT - if nerdX[nerd] >= 9 or hitCheck(nerd, nerdX[nerd] + 1, nerdY[nerd]) - moved = FALSE - else + if nerdX[nerd] < 9 and not hitCheck(nerd, nerdX[nerd] + 1, nerdY[nerd]) nerdX[nerd]++ + moved = TRUE fin nerdDir[nerd] = LOOK_RIGHT break is MOVE_DOWN - if nerdY[nerd] >= 7 or hitCheck(nerd, nerdX[nerd], nerdY[nerd] + 1) - moved = FALSE - else + if nerdY[nerd] < 7 and not hitCheck(nerd, nerdX[nerd], nerdY[nerd] + 1) nerdY[nerd]++ + moved = TRUE fin nerdDir[nerd] = LOOK_FORWARD break wend + // + // Draw nerd + any hoard to memory surface the size of a tile + // dhgrSurfMem(OP_SRC, TILE_HEIGHT, @tileNerd, TILE_SPAN) dcgrColor(CLR_LTBLUE) dhgrClearBl7(0, 0, TILE_WIDTH7, TILE_HEIGHT) dcgrPixMap(0, 2, SPRITE_WIDTH, SPRITE_HEIGHT, spriteList + (HORDE_BASE + nerd*NUM_NERDS + nerdDir[nerd])*SPRITE_SIZE) - if nerdBooty[nerd] - dcgrPixMap(0, 0, SPRITE_WIDTH, SPRITE_HEIGHT, spriteList + (nerdBooty[nerd] + HOARD_BASE)*SPRITE_SIZE) + if nerdHoard[nerd] + dcgrPixMap(0, 0, SPRITE_WIDTH, SPRITE_HEIGHT, spriteList + (nerdHoard[nerd] + HOARD_BASE)*SPRITE_SIZE) fin dhgrSurfScr(OP_SRC) - if oldX <> nerdX[nerd] or oldY <> nerdY[nerd] + if moved + // + // Erase previous position + // dcgrColor(CLR_LTBLUE) dhgrClearBl7(oldX * TILE_WIDTH7, oldY * TILE_HEIGHT, TILE_WIDTH7, TILE_HEIGHT) fin - dhgrMemBl7(nerdX[nerd] * TILE_WIDTH7, \ - nerdY[nerd] * TILE_HEIGHT, \ - TILE_WIDTH7, \ - TILE_HEIGHT, \ - @tileNerd, \ - TILE_SPAN) - //dhgrMemBl7(oldX * TILE_WIDTH7, \ - // oldY * TILE_HEIGHT, \ - // TILE_WIDTH7, \ - // TILE_HEIGHT, \ - // tileList + (tileMap.[oldY, oldX] - 1)*TILE_SIZE, \ - // TILE_SPAN) - //dcgrPixMap(nerdX[nerd] * TILE_WIDTH, \ - // nerdY[nerd] * TILE_HEIGHT + 2, \ - // SPRITE_WIDTH, \ - // SPRITE_HEIGHT, \ - // spriteList + (HORDE_BASE + nerd*NUM_NERDS + nerdDir[nerd])*SPRITE_SIZE) - //if nerdBooty[nerd] - // dcgrPixMap(nerdX[nerd] * TILE_WIDTH, \ - // nerdY[nerd] * TILE_HEIGHT + 6, \ - // SPRITE_WIDTH, \ - // SPRITE_HEIGHT, \ - // spriteList + (nerdBooty[nerd] + HOARD_BASE)*SPRITE_SIZE) - //fin + // + // Update nerd on screen + // + dhgrMemBl7(nerdX[nerd] * TILE_WIDTH7, nerdY[nerd] * TILE_HEIGHT, TILE_WIDTH7, TILE_HEIGHT, @tileNerd, TILE_SPAN) return moved end -def playGG#0 - byte nerd, moveDir, try - byte joyEn, joyX, joyY, btn0, btn1, buzz - byte joyLeft, joyRight, joyUp, joyDown - var[NUM_NERDS] update +def addHoard#0 + byte pos + if hoardRemaining and hoardAvailable < HOARD_POS + pos = conio:rnd() % HOARD_POS + while hoardType[pos] + pos++; if pos >= HOARD_POS; pos = 0; fin + loop + hoardType[pos] = ((conio:rnd() & 255) < 25) ?? JACKPOT :: (conio:rnd() & HOARD_NUM-2) + 1 + hoardActive++ + hoardAvailable++ + hoardRemaining-- + dcgrPixMap(tablePosX[pos] * TILE_WIDTH, tablePosY[pos]*TILE_HEIGHT+2, SPRITE_WIDTH, SPRITE_HEIGHT, spriteList + (hoardType[pos] - 1) * SPRITE_SIZE) + drawStatus + fin +end +// +// Actions +// +def actionUpdateHoard(event)#0 + // + // Add hoard to table at random time + // + addHoard + if hoardRemaining + addEvent(conio:rnd() & HOARD_ACTION_MASK, event) + else + eventFree(event) + fin +end +def actionUpdateNerd(event)#0 + // + // Move NPC + // + moveNerd(event=>evParam, conio:rnd() & MOVE_MASK) + addEvent(level * LEVEL_SCALE, event) +end +def joyCalibrate#4 + byte x, y + + x, y, drop, drop = joyPos(0) + if x < MAX_JOY and y < MAX_JOY + return x / 2, (x + MAX_JOY) / 2, y / 2, (y + MAX_JOY) / 2 + fin + return 0, 0, MAX_JOY, MAX_JOY +end +def actionUpdatePlayer(event)#0 + byte moveDir + + moveDir = MOVE_NONE + if joyX < joyLeft + moveDir = MOVE_LEFT + elsif joyX > joyRight + moveDir = MOVE_RIGHT + fin + if joyY < joyUp + moveDir = MOVE_UP + elsif joyY > joyDown + moveDir = MOVE_DOWN + fin + if conio:keypressed() + when toupper(conio:getkey()) + is keyArrowUp + moveDir = MOVE_UP + break + is keyArrowLeft + moveDir = MOVE_LEFT + break + is keyArrowRight + moveDir = MOVE_RIGHT + break + is keyArrowDown + moveDir = MOVE_DOWN + break + is 'C' // Recalibrate joystick on the fly + joyLeft, joyRight, joyUp, joyDown = joyCalibrate + break + is '1' + level = 9 + break + is '2' + level = 8 + break + is '3' + level = 7 + break + is '4' + level = 6 + break + is '5' + level = 5 + break + is '6' + level = 4 + break + is '7' + level = 3 + break + is '8' + level = 2 + break + is '9' + level = 1 + break + is '0' + level = 0 + break + is 'X' + dhgrMode(DHGR_TEXT_MODE) + dumpEvents + is keyEscape + hoardActive = 0; hoardRemaining = 0 + wend + moveNerd(nerdPlayer, moveDir) + fin + addEvent(level, event) +end +def playGG#0 // // Automatic joystick enable/calibration // - joyEn = FALSE - joyX, joyY, btn0, btn1 = joyPos(0) - if joyX < MAX_JOY and joyY < MAX_JOY - joyEn = TRUE - joyLeft = joyX / 2 - joyRight = (joyX + MAX_JOY) / 2 - joyUp = joyY / 2 - joyDown = (joyY + MAX_JOY) / 2 - fin + joyLeft, joyRight, joyUp, joyDown = joyCalibrate // - // Intitialize level + // Initialize event system // - for nerd = 0 to NUM_NERDS-1 - nerdX[nerd] = 1 - nerdY[nerd] = nerd * 2 + 1 - nerdBooty[nerd] = 0 - nerdScore[nerd] = 0 - drawScore(nerd) - update[nerd] = conio:rnd() % (level * LEVEL_SCALE) - moveNerd(nerd, MOVE_NONE) + eventInit + // + // Intitialize nerds + // + for buzz = 0 to NUM_NERDS-1 + nerdX[buzz] = 1 + nerdY[buzz] = buzz * 2 + 1 + nerdHoard[buzz] = 0 + nerdScore[buzz] = 0 + drawScore(buzz) + moveNerd(buzz, MOVE_NONE) + if buzz == nerdPlayer + addAction(level, @actionUpdatePlayer, buzz) + else + addAction(conio:rnd() % (level * LEVEL_SCALE), @actionUpdateNerd, buzz) + fin next - update[nerdPlayer] = level - hoard = 12 - drawStatus - buzz = 0 - game = TRUE - while game - if buzz; buzz = ((buzz + 1) & 63) + 1; fin + // + // Initialize hoard + // + hoardRemaining = 20 + hoardActive = 0 + addHoard + addHoard + addHoard + addHoard + addAction(conio:rnd() & HOARD_ACTION_MASK, @actionUpdateHoard, 0) + // + // Go! + // + drawMessage("Ready...") + conio:tone(50, 40) + drawMessage("Set...") + conio:tone(50, 40) + drawMessage("Go!") + conio:tone(60, 10) + drawMessage(NULL) + buzz = 0 + while hoardActive or hoardRemaining + // + // Sound/joystick + // joyX, joyY, btn0, btn1 = joyPos(buzz) - for nerd = 0 to NUM_NERDS-1 - if update[nerd] - update[nerd]-- - else - if nerd == nerdPlayer - moveDir = MOVE_NONE - if joyEn - if joyX < joyLeft - moveDir = MOVE_LEFT - elsif joyX > joyRight - moveDir = MOVE_RIGHT - fin - if joyY < joyUp - moveDir = MOVE_UP - elsif joyY > joyDown - moveDir = MOVE_DOWN - fin - fin - if conio:keypressed() - when toupper(conio:getkey()) - is 'I' - is keyArrowUp - moveDir = MOVE_UP - break - is 'J' - is keyArrowLeft - moveDir = MOVE_LEFT - break - is 'K' - is keyArrowRight - moveDir = MOVE_RIGHT - break - is 'M' - is keyArrowDown - moveDir = MOVE_DOWN - break - is 'B' - hoard-- - drawStatus - nerdBooty[nerdPlayer]++ - if nerdBooty[nerdPlayer] > HOARD_NUM; nerdBooty[nerdPlayer] = 0; fin - moveNerd(nerdPlayer, MOVE_NONE) - break - is 'P' - nerdPlayer++ - if nerdPlayer >= NUM_NERDS; nerdPlayer = 0; fin - break - is 'S' - if buzz; buzz = 0; else buzz = 1; fin - break - is '1' - level = 9 - break - is '2' - level = 8 - break - is '3' - level = 7 - break - is '4' - level = 6 - break - is '5' - level = 5 - break - is '6' - level = 4 - break - is '7' - level = 3 - break - is '8' - level = 2 - break - is '9' - level = 1 - break - is '0' - level = 0 - break - is keyEscape - game = FALSE - wend - moveNerd(nerdPlayer, moveDir) - fin - update[nerdPlayer] = level - else // Move NPC - moveNerd(nerd, conio:rnd() & MOVE_MASK) - update[nerd] = (level * LEVEL_SCALE) - fin - fin - next + // + // Check event queue + // + doEvents loop + drawMessage("Finished!") + conio:tone(30, 20) + conio:tone(200, 10) end def info#0 screenRead("GG.DHGR") @@ -579,34 +695,33 @@ def randomize#0 conio:rnd() end // -// Import test harness -// -arg = argNext(argFirst) -while ^arg - arg = argNext(arg) -loop -dhgrMode(DHGR_COLOR_MODE) -//screenRead("SPLASH.DHGR") -// // Hook CYA IRQ handler into ProDOS IRQ chain // params.0 = 2 params.1 = 3 params:2 = @serviceCYA syscall($40, @params) -// -// Play opening sequence -// -//arg = musicRead("GG.SEQ") -//musicPlay(arg, FALSE) -//musicGetKey(8, @randomize) -//heaprelease(arg) +dhgrMode(DHGR_COLOR_MODE) +arg = argNext(argFirst) +while ^arg and ^(arg + 1) == '-' + when toupper(^(arg + 2)) + is 'S' // Splash screen + // + // Play opening sequence + // + screenRead("SPLASH.DHGR") + spriteList = musicRead("GG.SEQ") + musicPlay(spriteList, FALSE) + musicGetKey(8, @randomize) + heaprelease(spriteList) + spriteList = NULL + wend + arg = argNext(arg) +loop dcgrFont(FONT_DEF_THIN) loadTiles loadSprites if tileList <> NULL and spriteList <> NULL - //screenRead("MENU.DHGR") - //getc level = 9 while menu drawMap diff --git a/src/dhgr.tk/gg/sean.plh b/src/dhgr.tk/gg/sean.plh index 32a47c06..ebdad255 100644 --- a/src/dhgr.tk/gg/sean.plh +++ b/src/dhgr.tk/gg/sean.plh @@ -24,6 +24,7 @@ const TILE_TABLE5 = 15 const TILE_TABLE6 = 16 const TILE_TABLE7 = 17 const TILE_TABLE8 = 18 +const TILE_TABLEMID = 14 const TILE_SEAN1 = 19 const TILE_SEAN2 = 20 //