axnjaxn [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=23000 Helpful functions for auto-sizing text boxes <p> <table><tr><td> <a href="/bbs/?pid=139050#p"> <img src="/bbs/thumbs/pico8_textfit-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=139050#p"> Helpful functions for auto-sizing text boxes</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=139050#p"> [Click to Play]</a> </td></tr></table> </p> <p>Hello again, Toy Box Jammers!</p> <p>This cart has a few tools that are handy when using text.</p> <p>By editing the text in this cart, and rerunning it, you can encode all the text for your game in a string, while setting the maximum width and height of individual pages. It can also embed x- and y-offsets so that your text prints centered without requiring any additional code (just print!), and optionally, you can have it return the width and height of each text box so that you can put nice borders (such as the included &quot;speech bubble&quot;) around it.</p> <p>Simply include one of the two decode functions in your program, and call it with the text that's copied to the clipboard after running this cart, and the decoder will return a table organized into:</p> <p>table[string_number][page_number] (stored as a str)</p> <p>or </p> <p>table[string_number][page_number][1...3] (stored in w, h, str order)</p> https://www.lexaloffle.com/bbs/?tid=55442 https://www.lexaloffle.com/bbs/?tid=55442 Fri, 22 Dec 2023 22:43:08 UTC TBJ 2023 Font Loader <p> <table><tr><td> <a href="/bbs/?pid=138914#p"> <img src="/bbs/thumbs/pico8_loadfont_axnjaxn-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=138914#p"> TBJ 2023 Font Loader</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=138914#p"> [Click to Play]</a> </td></tr></table> </p> <p>This is a small utility cart for folks working on Toy Box Jam 2023: you can paste one of the fonts into the spritesheet and run the cart to copy a pasteable version for your carts, or use the code directly. I've set it up to take characters beginning at the space and running through 0x7F, but it can be easily modified as you see fit.</p> <p>You can either paste the relevant routines and spritesheets into your own cart or run this, then paste the command (which includes the relevant P8SCII command) into your cart at a cost of two tokens.</p> <p>EDIT: I've been told that the embedded version has problems displaying the font snippet I used; you may have to run this or grab the P8 to get the correct results if you're pasting in the font I used here.</p> https://www.lexaloffle.com/bbs/?tid=55396 https://www.lexaloffle.com/bbs/?tid=55396 Tue, 19 Dec 2023 22:32:24 UTC Crash from three-parameter ord <p>I was working on an earlier version of <a href="https://twitter.com/axnjaxn/status/1448048012861661184">this</a> tweetcart when I noticed a problem with ord used to poke in a single call (i.e. the three-parameter version).</p> <p>The relevant portion:</p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>s=&quot;ンH!\0イTvzw」😐゛\&quot;%l_b&lt;く゛■}ト0aOヤE⁘~わ、そ」う1U゛^Wヌ}ろ014ャ ⁸+Zc=:&bull;ᶠ⬅️~ふO7dウ ➡️ イ⁙★wき&amp;□0◜▶せ~p⁵\n:リ hU&gt;ᶠみ○dI、U)7&amp;⁸とv3r&sup3;\&quot;ふ\&quot;&and;a]Z。F🐱■゛tᶜv&yen;⁷C],□y゜ウ+ふ$し+m&amp;WIニ~_&yen;ホrへWW|Y7}Cd゛}ᵇ‖■へM_Eスvイ36ᵇめ-モeそ◀ラ ▥9gKE4ヒ(=ᶠ&quot; poke(17152,ord(s,1,#s)) --rest of the cart</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>On my Mac, at least, I got:</p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>pico8(36303,0x10ab435c0) malloc: Incorrect checksum for freed object 0x7fca4d589600: probably modified after being freed. Corrupt value: 0x3deadbeef pico8(36303,0x10ab435c0) malloc: *** set a breakpoint in malloc_error_break to debug</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>I was able to reproduce it without such a strange byte-string too, and I can <em>almost</em> imagine what the offending code is doing.</p> https://www.lexaloffle.com/bbs/?tid=44888 https://www.lexaloffle.com/bbs/?tid=44888 Sun, 17 Oct 2021 05:46:36 UTC Root directory + export <p>I've noticed that when I try to build a makefile for multicarts that calling export from the command line of my host machine doesn't respect root_path. </p> <p>For example:</p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>pico8 -root_path ./ -export mygame.html title.p8 intro.p8 mygame.p8</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>produces an html export that <em>only</em> gets title.p8 but neither of intro or mygame carts if the root path isn't already the pico-8 cartridge directory.</p> <p>Does anybody know of a workaround short of actually changing the pico-8 system config for each new directory?</p> https://www.lexaloffle.com/bbs/?tid=44468 https://www.lexaloffle.com/bbs/?tid=44468 Wed, 01 Sep 2021 21:14:33 UTC Catacombae (Sepulcrum Romanum) <p> <table><tr><td> <a href="/bbs/?pid=94429#p"> <img src="/bbs/thumbs/pico8_catacombae-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=94429#p"> catacombae</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=94429#p"> [Click to Play]</a> </td></tr></table> </p> <p>&quot;For ye are like unto whited sepulchres, which indeed appear beautiful outward, but are within full of dead men's bones...&quot;</p> <p>I descend, examining the catacombs by the light of a lantern.</p> https://www.lexaloffle.com/bbs/?tid=43663 https://www.lexaloffle.com/bbs/?tid=43663 Sun, 04 Jul 2021 02:31:12 UTC Would anyone be interested in a Seattle interest group? <p>Hey, all!</p> <p>I live out in Seattle, and I think there are probably at least a few of us in or near that area. If there are enough people interested, I'd love to start putting together a group to meet up as the city reopens post-pandemic. I don't think it would take too much to run a monthly meetup, especially in a city like Seattle, and we could run tutorials / show and tells / demo sessions / collabs / local events if we got enough interest.</p> <p>So who's interested? :D</p> https://www.lexaloffle.com/bbs/?tid=43652 https://www.lexaloffle.com/bbs/?tid=43652 Sat, 03 Jul 2021 04:31:02 UTC Lite Raid <p> <table><tr><td> <a href="/bbs/?pid=94053#p"> <img src="/bbs/thumbs/pico8_literaid-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=94053#p"> literaid</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=94053#p"> [Click to Play]</a> </td></tr></table> </p> <p>For TweetTweetJam 6, I drew again upon my backlog of childhood MS-DOS favorites, inspired by the Argo Software title <a href="https://archive.org/details/NightRaid">Night Raid</a> (itself a modernization of the 1981 Apple ][ classic <a href="https://archive.org/details/wozaday_Sabotage">Sabotage</a> by Mark Allen).</p> <h2>Controls</h2> <p>Left/Right: Rotate the cannon<br /> X: Hold to fire, release to reload</p> <h2>Features</h2> <ul> <li>Gradually increasing difficulty</li> <li>Session high scores</li> <li>The ability to destroy a large number of meeples in a matter of seconds, thereby taking an aggressive stance on the popular board game Carcassonne</li> </ul> <h2>Thanks</h2> <p>Thanks to <a href="https://www.lexaloffle.com/bbs/?uid=44112"> @shy</a> for noticing the bug in the first version of this cart and to <a href="https://www.lexaloffle.com/bbs/?uid=15096"> @ElGregos</a> for proposing the last little change I needed to get back down under the limit as I fixed it.</p> https://www.lexaloffle.com/bbs/?tid=43539 https://www.lexaloffle.com/bbs/?tid=43539 Sat, 26 Jun 2021 01:21:24 UTC Spoiler-Free Hints to Bob of Thunder <p>A few people have asked me for hints / a walkthrough for Bob of Thunder. Rather than just produce a video that you have to skip through, I've decided to give this hint guide to give a little nudge and let people solve things the rest of the way by themselves!</p> <h1>General Hints</h1> <p>Ljessnir, Bob's hammer, can hit switches at a distance, and will try to return to him even across the room. Try to experiment with different ways you can hit switches and different orders - all switches don't do the same things!</p> <p>No matter what order you do things, there's always a way to progress, but it may be something you forgot about in a previous area. If you get stuck, try wandering back through the places you've been.</p> <p>Hearts and coins respawn when you leave a room, so if you're low on health or money, you can return to any rooms that contain those items again.</p> <p>The NPCs want Bob to succeed, so if you see any of them, make sure to talk to them right away!</p> <h1>Entrance Area</h1> <h2>Q: How do I go further north?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Do you see anything else you can interact with?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Try throwing your hammer around the room to see what happens.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Flip the switch by hitting it with your hammer.</div></div></div></p> <h2>Q: I can't figure out how to get the key so I can open the lock.</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Does it look like there are other ways to get inside that fence?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Try other routes to see if any of them access that key area.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You'll need to solve the east and west routes to get all the keys in this area.</div></div></div></p> <h2>Q: How do I go further west?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Your hammer can damage the red enemies, but you need to use the environment to avoid getting zapped by the skulls.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Did you brush up against that gray block when you grabbed the heart in the room earlier?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Try pushing the gray block around.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Push the gray block so that it's below the skull, then walk underneath it to shield you from the skull.</div></div></div></p> <h2>Q: I got further west, but now I can't figure out what to do!</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">There's probably some way to open the door near the Bowyer's workshop.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Have you explored the rest of the areas that are accessible to you?</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The Bowyer can open the door for you if you rescue him from the area east of where you came in.</div></div></div></p> <h2>Q: I saw something in the west area that I can't figure out how to get to.</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You don't have to get that item to progress, but there is a way to get there from a different room.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The entrance is in the room with all the red patrolling enemies</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">There are enough blocks that you can avoid getting zapped and make your way north from there.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">While I won't give you the solution for this one, you have everything you need to get there - be patient and try doing it a few different ways and you'll figure it out!</div></div></div></p> <h2>Q: How do I come back from the area to the west?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">There are other blocks you can use in the room with the skulls.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You can push the block in the lower left corner upward to shield you from the skull at the top of the screen, then progress east.</div></div></div></p> <h2>Q: How do I go through the door to the east?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">This puzzle is designed to be solvable almost as soon as you start the game.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">If you walk up to the switch, you get stuck as soon as you flip it. Have you tried any other ways to flip the switches?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Try using your hammer and staying outside the puzzle.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The switches do different things, and you can flip all of them by leaving your hammer inside the puzzle.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The bomb looks important, too!</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Flip the right switch with your hammer while standing outside the puzzle, then walk around so that your hammer flips the left switch. Walk clockwise so that the skull tries to zap you and shoots the bomb, and it will blow the door open.</div></div></div></p> <h2>Q: I'm stuck on what to do once I get through the door!</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">That guy looks really uncomfortable hiding from all the monsters, doesn't he?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You can't hit the switch, but he's standing right next to it.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Kill all the monsters in the room, and the guy in the corner will flip the switch for you. Make sure to talk to him before you leave.</div></div></div></p> <h2>Q: I've completed the area to the east, and I've gotten the key I need to open the lock, but I feel like I'm leaving something unfinished by going further north. What do I do?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You can get two keys in this area, and you need both of them to complete the game.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The NPC you rescued was the Bowyer whose workshop you probably saw in the area to the west.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">What did the Bowyer say to you after you rescued him?</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You can find the Bowyer outside the workshop area to the west, and he'll let you obtain the second key.</div></div></div></p> <h1>Beyond the First Lock</h1> <h2>Q: Which way do I go now?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">If you don't have a key to use, that means you need to go back for it.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">If you have a key, you can go east or west, and either way will allow you to make progress.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Unlock one of the two locks and complete the area beyond it to get another key. It's easier to solve the area to the east first.</div></div></div></p> <h2>Q: How do I go further north?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">How do you plan to deal with the gray block at the top of the screen?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">If you know how you're going to deal with the gray block, you can flip the switch in the room to toggle the pegs and fight your way to it.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Complete both the east and west areas before you progress north, then use the items you obtain to pass beyond where the block is.</div></div></div></p> <h2>Q: How do I go further west?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The round gray stones can also be pushed.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Try experimenting with interacting with things in the first room in a different order.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Why are there pegs/switches in the first room?</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Raise the pegs and push the stones so that you can use one for each of the two skulls. Walk clockwise around the room, then use the stones in the upper corner to pass by the uppermost skull again, and exit through the north.</div></div></div></p> <h2>Q: I made it past the first puzzle to the west, but I'm stuck on the room with <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">three skulls and three stones.</div></div></div></h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">There aren't enough stones to block each skull individually. How can you block more than one skull with a single stone?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">These stones move on their own once you nudge them. Can you use that to help you?</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Push the stone toward the left of the the screen, then walk behind it as it's rolling so that it blocks the skulls as it's moving. Do the same thing along the left edge of the screen to walk down to the bottom corner and progress west.</div></div></div></p> <h2>Q: I made it past two puzzles to the west, but I'm stuck on the room with <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">two skulls and pegs that move on their own.</div></div></div></h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Can you get to a position where you can observe how the room works if you don't interact with anything?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The pegs are timed and cycle around the skulls every couple of seconds.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Wait until the pegs are raised to avoid getting zapped, then make your way around the room and grab the key. It's easiest to go clockwise around the room and make your escape.</div></div></div></p> <h2>Q: I see some blocks that I don't know how to move. What do I do?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You may get some ideas as to what to do after you complete the east area.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Once you have the item from the east area, you can use it to progress beyond the blocks.</div></div></div></p> <h2>Q: I'm past the blocks, but there's still <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">skulls keeping me from reaching the NPC at the north end of a room.</div></div></div></h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You can solve this puzzle with your hammer.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Throw the hammer north, and let it hit the switch on the return flight, then walk north through the pegs. Talk to the NPC before you leave the room.</div></div></div></p> <h2>Q: How do I go further east?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The gray blocks to the top must have some meaning, but you can't do anything with them yet.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The switches do not do the same thing, and you can hit both with your hammer.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">If you only flip one switch, you can get to the right side of the screen, but the skull and snakes will be released.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Open the right side of the screen, kill snakes as necessary, and flip the second switch to block the skull and open the route forward.</div></div></div></p> <h2>Q: I can't figure out how to get the key that's further east!</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You can't avoid blocking the key off with the rolling stone and gray block, no matter what order you do this room in.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Have you explored the rest of this area?</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Retrieve the item from the next room to the east, then use it to get the key.</div></div></div></p> <h2>Q: I can't figure out what to do east of the key!</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">There are two switches to experiment with, and your hammer will always return to you when you throw it.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Try flipping the switches near the goblin to see what they do.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Flip the left switch to open the area at the top of the room. If you leave your hammer in the central area, you can also drag it across the right switch to close off the yellow crabbers so that you can access the item along the right edge of the screen.</div></div></div></p> <h2>Q: How do I get back from the area to the east?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Once you have everything there is to pick up in the east area, you can use what you get to return.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You should have both a key and an electric drill.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Use the drill to break blocks and stones. Pick up the key on your way back, and use the coins near the puzzle to keep your meter full.</div></div></div></p> <h2>Q: How do I make sure I got everything in this area?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You can't leave the area without a new item.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You need to rescue the Tailor, retrieve the electric drill, and retrieve a key from both the east and west areas to be able to progress.</div></div></div></p> <h1>Outside the Utility Shed</h1> <h2>Q: How do I get to the utility shed?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">If there's a wall in the way that you can't open with the drill, there must be another way.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Have you fully explored the previous area?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">An NPC can help you get past the wall.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Rescue the Tailor and get all the keys from the previous area, and talk to him again next to the wall. Use the skulls to trigger the solution he produces.</div></div></div></p> <h2>Q: What does the picnic area do?</h2> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">If you've completed all the areas so far, you can find the Bowyer here, who will wish you well and refill your meters.</div></div></div></p> <h1>The Utility Shed</h1> <h2>Q: How do I go further north?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The closed door you see is not the way forward.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">There are two locks that you need keys for.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Solve the west and east areas and retrieve two keys to enter the final area of the game.</div></div></div></p> <h2>Q: How do I go further west?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Can you observe what happens in the first room if you don't do anything?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You can make it through the first room with good timing and exit through the top of the screen.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The three pegs don't have a switch connected to them. What else can you do in this room?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">There are three pegs and three robots.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Try smashing a robot with your hammer or drill.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Each robot you destroy opens a peg. Clearing the room opens the way to the key.</div></div></div></p> <h2>Q: How do I go further east?</h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The key you need is in the bottom corner of the room, and the skulls can't set the bombs off.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">If the bombs keep going off, try to deal with the thing that's setting them off first, and then go for the key.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Keep to the left of the room and destroy the robots so that their flames don't trigger the bombs, then go grab the key.</div></div></div></p> <h1>The Endgame</h1> <h2>Q: How do I <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">go back to the previous areas once I encounter Hrungnir?</div></div></div></h2> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">In a body bag.</div></div></div></p> <h2>Q: How do I <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">damage Hrungnir?</div></div></div></h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">When you first try to hit him with your hammer or drill, he brags about being invulnerable to direct attacks. What does that leave?</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">When he flashes blue, that means he didn't take damage.</div></div></div></p> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">He can only be damaged by attacks he doesn't expect. Are there any ways you can conceal your attacks from him?</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You need to destroy the gray blocks and throw the hammer through the top of the apparatus behind Hrungnir. Lure him to the bottom and let your hammer return out the bottom so that it hits him on the return. You'll know it damages him if he retreats to the next room.</div></div></div></p> <h2>Q: How do I <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">damage Hrungnir the second time?</div></div></div></h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">The switch toggles all pegs in the room, and you can use it to slide the hammer through the apparatus.</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Destroy all enemies, clear some of the blocks, then slide the hammer through the apparatus on the left of the screen, flipping the switch. Repeat the process from the previous room to hit him from behind and progress. Don't forget to switch the pegs to the up position that block the skull at the top of the screen.</div></div></div></p> <h2>Q: You, the game designer, are a jerk.</h2> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Your tears provide the nourishment that keep my skin soft and my hair shiny.</div></div></div></p> <h2>Q: How do I <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">damage Hrungnir the third time?</div></div></div></h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">What's the relationship between robots and pegs?</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Destroy the robots to lower the pegs, then hammer Hrungnir one last time from behind the apparatus.</div></div></div></p> <h2>Q: What do I do once <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Hrungnir is defeated?</div></div></div></h2> <p>Hint: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">You still have a job to do, don't you?</div></div></div></p> <p>Solution: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">Progress to the west, and flip the switch. Enjoy the ending!</div></div></div></p> https://www.lexaloffle.com/bbs/?tid=41134 https://www.lexaloffle.com/bbs/?tid=41134 Mon, 11 Jan 2021 18:28:34 UTC Bob of Thunder <p> <table><tr><td> <a href="/bbs/?pid=86328#p"> <img src="/bbs/thumbs/pico8_bobthunder-4.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=86328#p"> Bob of Thunder</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=86328#p"> [Click to Play]</a> </td></tr></table> </p> <p>I'm excited to introduce Bob of Thunder, my entry to Toy Box Jam 2!</p> <p>This is probably my most ambitious cart in terms of process: it borrows heavily from the techniques I used in <a href="https://www.lexaloffle.com/bbs/?tid=38132">Astro Clerk in The Documents of Mars</a> last year, but it has a considerably larger map requiring compression, more in terms of scripted events, and took way more planning. I plan to write up some of the more interesting parts later on.</p> <h1>The Story So Far</h1> <p><div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"><br /> BOB OF THUNDER</p> <p>In the land of Midgard, none is so mighty as THOR!</p> <p>After a mead-filled night on the town, the Odinson tends to leave a trail of damage and disrepair in his wake.</p> <p>You are BOB, contractor to the gods, mender of fences, and entry on several speed-dials across the nine realms.</p> <p>The power's out in Vilahalla, where Thor spent all weekend partying, and your voicemail's filling up with work requests. Time to put on your steel-toed boots and defrost your pickup - it's going to be a long day!<br /> </div></div></div></p> <h1>Instructions</h1> <p>Bob will acquire several items as his workday progresses. He can touch most signs, notes, or villagers to see what they have to say, and you can press Z/Square on switches or hit them with your hammer to activate them. </p> <p>Z/Square - Throw Ljessnir<br /> X/Cross - Use Secondary Items</p> <p>The game will autosave as you progress, most often when you cross a screen boundary or enter/exit a room. </p> <h1>Credits</h1> <p><div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"><br /> BOB OF THUNDER</p> <p>A Game by Brian Jackson for Toy Box Jam 2</p> <p>Inspired by Adept Software's God of Thunder</p> <p>Art and Music Contributed By:<br /> Gruber<br /> Tom Hall<br /> Toby Hefflin<br /> Lafolie<br /> Smelly Fishsticks<br /> Alice Stenger</p> <p>Special thanks to:<br /> &lt;3 Emahlea<br /> Tim Jackson<br /> The Immortal Albatross Crew<br /> </div></div></div></p> <h1>Changes</h1> <p>Revision 1: Adjusted the difficulty for the last challenge.<br /> Revision 2: Fix the color scheme on one of the NPCs<br /> Revision 3: Fix some missing dialog colors<br /> Revision 4: Adjust layout of rooms in the last challenge.</p> https://www.lexaloffle.com/bbs/?tid=41127 https://www.lexaloffle.com/bbs/?tid=41127 Sun, 10 Jan 2021 20:16:11 UTC Star Mr. <p> <table><tr><td> <a href="/bbs/?pid=84872#p"> <img src="/bbs/thumbs/pico8_starmr-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=84872#p"> starmr</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=84872#p"> [Click to Play]</a> </td></tr></table> </p> <p>My favorite 2600 game has to be Activision's StarMaster. It had everything: space combat, docking maneuvers, a map. The whole nine yards.</p> <p>This game only has one of those things. I'd hoped to complete it for TweetTweetJam 5, but I'm just happy it got finished at all. There are a couple tricks I'm pretty proud of in here, and I look forward to the next one!</p> <p>Code: <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"></p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>cls()l=line l(9) ?&quot;🐱&quot; memcpy(0,24576,512)c=-64m=0n=0w=-9a=0z=8s=0j=w::_::camera(c,c)b=btn()x=b&amp;2x-=2*b&amp;2b\=4y=b&amp;2y-=2*b&amp;2for i=0,19do q=(i^.2+t())%1*96+19p=i^.7pset(q*cos(p)+x*8,q*sin(p)+y*8,6)end ?s..0,c,58 w+=1-w\24&gt;&gt;3sspr(0,0,8,8,m-w/2,n-w/4,w\c*-w,w)j+=1/8if(j&lt;0)o=atan2(m,n)u,v=m,n u-=x+cos(o)v-=y+sin(o)circfill(u,v,j,10)p=j\8\c j+=p*17f=-p*pget(u,v)*.9s*=1-f\8p=z%8\7*pget(0,0)z+=1-z\8if(p==9)w=-20f=9s+=10 if(p&gt;9)j=-9f=9s+=5 b&amp;=z z-=b&amp;8s-=b\8p=80-z*9q=p/2l(p-16,q-8,p,q,8)l(16-p,q-8,-p,q)a+=rnd(.1)-.05m-=x-m\c-cos(a)n-=y-n\c-sin(a)flip()cls(f)goto _</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p></div></div></div></p> https://www.lexaloffle.com/bbs/?tid=40611 https://www.lexaloffle.com/bbs/?tid=40611 Mon, 30 Nov 2020 18:54:11 UTC luvbomber <p> <table><tr><td> <a href="/bbs/?pid=84103#p"> <img src="/bbs/thumbs/pico8_luvbomber-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=84103#p"> luvbomber</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=84103#p"> [Click to Play]</a> </td></tr></table> </p> <p>The Atari 2600 gave me a lot of silly memories.</p> <p>Unfortunately, there were no characters to spare for realistic wood paneling texture.</p> <p>This isn't my most impressive cart ever, but I had fun with it.</p> <p>Code follows:</p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>f=rectfill cls()f(0,1,0,3,6)pset(1,2,8)f(2,0,3,4)f(2,2,5,3)f(6,1,7,2)memcpy(0,24576,512)poke(24364,3)w=64y=8d=0r=64s=0p={}h=-9m=w::_::cls(12)b=btn()y+=b\8%2-b\4%2pal(6,5+d%2) ?s,1,1,7 f(0,50,w,w,3)y=mid(0,y,32)spr(0,8,y,1,1,1)h-=.5d-=1if(d&lt;0)d,r=r,max(r-1,9)add(p,{x=w,y=rnd(36)}) pal(8,2)for i in all(p)do i.x-=1x,z=i.x,i.y spr(0,x,z-2) if(x&lt;-8)del(p,i) if(x==32)q=pget(12,z)f(x,z,0,z,9) end if(h&lt;-8)h=w+rnd(32)g=&quot;⌂&quot; ?g,h,58,7 m+=2 if(b&gt;15)m=y+4 ?&quot;&hearts;&quot;,9,m,14 if(pget(12,m+5)==7)g=&quot;&hearts;&quot;s+=1m=w pal()flip() if(q!=8)goto _ while btn()&lt;16do ?&quot;*&quot;,11,y,10 end run()</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> https://www.lexaloffle.com/bbs/?tid=40330 https://www.lexaloffle.com/bbs/?tid=40330 Wed, 11 Nov 2020 04:07:55 UTC Tiny Cactpot Helper <p> <table><tr><td> <a href="/bbs/?pid=83535#p"> <img src="/bbs/thumbs/pico8_tinycact-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=83535#p"> tinycact</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=83535#p"> [Click to Play]</a> </td></tr></table> </p> <p>Who doesn't love gambling in Final Fantasy XIV?</p> <p>I do. Especially when the odds are in my favor.</p> <p>This FF14 Mini Cactpot &quot;solver&quot; takes a simple approach: average all the possible outcomes of each decision you make during the Mini Cactpot minigame, and suggest the specific choice where the average outcome is highest.</p> <p>Press square to make choices and X to undo them.</p> https://www.lexaloffle.com/bbs/?tid=40092 https://www.lexaloffle.com/bbs/?tid=40092 Sat, 31 Oct 2020 05:38:17 UTC Vampire Dice <p> <table><tr><td> <a href="/bbs/?pid=81231#p"> <img src="/bbs/thumbs/pico8_vampdice-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=81231#p"> vampdice</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=81231#p"> [Click to Play]</a> </td></tr></table> </p> <p>I will, on occasion, play a game or two of Vampire the Masquerade (5th Edition).</p> <p>I will, on occasion, rely on borrowing dice.</p> <p>Here's an alternative for kindred of less discerning tastes.</p> https://www.lexaloffle.com/bbs/?tid=39382 https://www.lexaloffle.com/bbs/?tid=39382 Thu, 27 Aug 2020 00:28:08 UTC Strange performance with constant table <p>Okay, bear with me, because this is a pretty niche bug and also I can't post the actual code because it's spoilers for a demo I'm putting together.</p> <p>I have code that basically works like this:</p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>local a,b={},{} --a loop that populates a,b with 128 nums each ::_:: cls() --some code that involves nested looping through a,b to draw pixel-by-pixel on the screen flip() goto _</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>This is not a super uncommon design pattern for my tweetcarts. One thing I'd intended to do was encode the contents of a,b rather than the code that populates them. So I did, and the performance tanked.</p> <p>Weird. Maybe there's a performance difference I'm not aware of?</p> <p>What was odd is that I know a and b are local in both cases, and they take up the same storage as far as I can tell. I started poking around, and I tried this:</p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>local a,b={},{} --a loop that populates a,b with 128 nums each local anew, bnew = {...my constants...}, {...my other constants...} ::_:: cls() --some code that involves nested looping through a,b to draw pixel-by-pixel on the screen --note that this code never references anew, bnew flip() goto _</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>Oddly, the performance <em>still</em> takes a hit. Even though anew,bnew are defined outside the loop. Even nil-ing them out doesn't reverse the performance hit.</p> <p>Am I being silly, or is this behavior strange?</p> https://www.lexaloffle.com/bbs/?tid=39151 https://www.lexaloffle.com/bbs/?tid=39151 Sat, 08 Aug 2020 22:58:47 UTC Alex Jones Simulator <p> <table><tr><td> <a href="/bbs/?pid=78900#p"> <img src="/bbs/thumbs/pico8_axnjaxn_ajml-2.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=78900#p"> axnjaxn_ajml</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=78900#p"> [Click to Play]</a> </td></tr></table> </p> <p>I couldn't resist making a cursed PICO-8 cart after someone sent me the <a href="https://www.reddit.com/r/alexjones/comments/hcny5e/me_and_some_buds_made_this_enjoy/">What's Your Alex Jones Conspiracy Theory</a> post on reddit by /u/dreggmuffin.</p> <p>Given the subject matter &quot;mad libs&quot; is almost a double entendre.</p> <p>(Press z/O button or x/X button to get a new conspiracy theory that you'll use to exploit the patriotism of your listeners!)</p> https://www.lexaloffle.com/bbs/?tid=38678 https://www.lexaloffle.com/bbs/?tid=38678 Sat, 04 Jul 2020 18:48:41 UTC How to pack a map into cartdata at runtime <p> <table><tr><td> <a href="/bbs/?pid=78776#p"> <img src="/bbs/thumbs/pico8_axnjaxn_packmap-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=78776#p"> axnjaxn_packmap</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=78776#p"> [Click to Play]</a> </td></tr></table> </p> <p>This snippet was requested on the Discord, and shows how to pack a 16x16 byte map into the cartdata. I've used the title screen of Astro Clerk just to have something non-repetitive to use to show that the behavior is correct.</p> https://www.lexaloffle.com/bbs/?tid=38637 https://www.lexaloffle.com/bbs/?tid=38637 Wed, 01 Jul 2020 21:02:07 UTC Astro Clerk's 6x15 font tools / bitfield encoding <p> <table><tr><td> <a href="/bbs/?pid=78314#p"> <img src="/bbs/thumbs/pico8_astroclerkfonts-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=78314#p"> astroclerkfonts</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=78314#p"> [Click to Play]</a> </td></tr></table> </p> <p>This cart contains three things of interest:</p> <ul> <li>A 6x15 font I used in <a href="https://www.lexaloffle.com/bbs/?tid=38132">Astro Clerk</a></li> <li>Code for encoding your own 6x15 font in the same way (i.e. four 1-bit graphics per tile)</li> <li>Code for decoding/printing with a 6x15 font</li> </ul> <p>Inside the cart, you can use initfont to create a starting point by upscaling the system font, encode6x15 to write the sprites, and print6x15 to output the result.</p> https://www.lexaloffle.com/bbs/?tid=38492 https://www.lexaloffle.com/bbs/?tid=38492 Fri, 19 Jun 2020 21:19:17 UTC Conversation Parade <p> <table><tr><td> <a href="/bbs/?pid=78006#p"> <img src="/bbs/thumbs/pico8_convparade-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=78006#p"> convparade</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=78006#p"> [Click to Play]</a> </td></tr></table> </p> <p>I was working on a half-baked 3D engine when my brother texted me to tell me that my games are just like the <a href="https://www.youtube.com/watch?v=U_JbTHp6uzI">ones on Adventure Time</a>.</p> <p>Well, <em>I'll show him</em>.</p> https://www.lexaloffle.com/bbs/?tid=38393 https://www.lexaloffle.com/bbs/?tid=38393 Fri, 12 Jun 2020 20:34:08 UTC Astro Clerk <p> <table><tr><td> <a href="/bbs/?pid=77202#p"> <img src="/bbs/thumbs/pico8_astroclerk-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=77202#p"> astroclerk</a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=77202#p"> [Click to Play]</a> </td></tr></table> </p> <p>In the future, humanity will achieve world peace by offloading all of its paperwork to Mars.</p> <p>You are Astro Clerk, a capable custodian of all documents, forms, certificates, contracts, and records to be found on the red planet.</p> <p>Tomorrow is Mars Day, the beginning of a long weekend. Unfortunately, this year it falls on the first of the month!</p> <p>Traverse the hostile terrain and rescue the common pencil-pushers from an endless night locked away completing their quarterly mars reports!</p> <hr /> <p>Astro Clerk is my entry for RNDGame Jam 2020, an homage to the early-90s classic The Monuments of Mars. It features 20 levels of puzzle action, autosave, high scores, and 2-bit CGA color!</p> <p>With any luck, there won't be any last-minute bugs, because this cartridge is coming in hot! Screaming into the jam with 20 minutes and 0 tokens to spare, Astro Clerk is the game you never knew you wanted, but might learn to live with!</p> <hr /> <p>I've updated Astro Clerk to the v2.FINAL REVISED FINAL.doc Edition, now with slight improvements to the levels and ear-splitting DOS sound!</p> https://www.lexaloffle.com/bbs/?tid=38132 https://www.lexaloffle.com/bbs/?tid=38132 Tue, 26 May 2020 00:53:21 UTC Otrn <p> <table><tr><td> <a href="/bbs/?pid=76082#p"> <img src="/bbs/thumbs/pico8_otrn_tt4-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=76082#p"> Otrn </a><br><br> by <a href="/bbs/?uid=23000"> axnjaxn</a> <br><br><br> <a href="/bbs/?pid=76082#p"> [Click to Play]</a> </td></tr></table> </p> <p>It's the fourth TweetTweetJam! My entry for this Jam is a stripped-down OutRun clone in 559 characters.</p> <p>There's a couple things I'm proud of in this cart, so I'm posting an annotated, less-minified version of it below.</p> <h1>Controls</h1> <p>Use left and right arrows and stay on the road as long as possible! Sorry, if you crash you may have to refresh the page or reload the PICO-8 widget.</p> <h1>Code</h1> <p><div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"></p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>g,l=color,line poke(24366,1)pal(2,139,1)x,f,k,n,v,z,c=0,0,1,32,0,1,64::_::camera(-c,-c)memcpy(0,88,c*c)n-=1if(n&lt;0)n=8+rnd(30)v=rnd(14)-7 for i=490,512 do poke4(4*i,peek4(4*i-4)+v/k)end cls(12)for d=512,c,-1 do q=(d+f)\40%2y=c*c/d r=y/c*(x+peek4(4*d))l(-c,y,c,y,3-q)l(r-y,y,r+y,y,5)l(r,y,r+1,y,9-4*q)end a=btn()&amp;3 if(a%3&gt;0)a=6-4*a x+=a*3b=-a/2o=&quot;w&quot; ?o,a-9,58,0 ?o,a+6,58 ?o,-a-7,57 ?o,4-a,57 ?z..&quot;m&quot;,1-c,1-c u=8h=8g(12)for y=56,60 do s=-y/c rectfill((a+u)*s,y+s*h+1,(a-u)*s,y)a+=b g(8)u=10h=6 end z+=k\11 flip() ?&quot;oops&quot;,0,0 f+=k if(k&lt;22)k+=1 if(abs(r)&lt;c)goto _</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p></div></div></div></p> <h1>Annotated code</h1> <p><div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"></p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>--otrn --by axnjaxn --note: lines ending in -- show where i cut a newline g,l=color,line poke(24366,1)-- pal(2,139,1)-- --x: car's horizontal position --f: odometer/used in determining lines and terrain colors --k: speed --n: downcounter to change direction --v: current road direction --z: odometer for display --c: constant 64 x,f,k,n,v,z,c=0,0,1,32,0,1,64-- ::_::-- camera(-c,-c)-- --advance the road data generated in sprite memory by 22 units (max speed) memcpy(0,88,c*c)-- n-=1-- --each new road segment is determined here if(n&lt;0)n=8+rnd(30)v=rnd(14)-7 for i=490,512 do poke4(4*i,peek4(4*i-4)+v/k)-- end --draw terrain cls(12)-- for d=512,c,-1 do q=(d+f)\40%2-- y=c*c/d r=y/c*(x+peek4(4*d))-- --for each distance along the ground, i compute the y and x scale, then draw lines --this ends up using like 1.5k lines to draw a 61-row tall background l(-c,y,c,y,3-q)-- l(r-y,y,r+y,y,5)-- l(r,y,r+1,y,9-4*q)-- end --a and b are the position and slope of the car's tilt a=btn()&amp;3 if(a%3&gt;0)a=6-4*a x+=a*3-- b=-a/2-- --wheels o=&quot;w&quot; ?o,a-9,58,0 ?o,a+6,58 ?o,-a-7,57 ?o,4-a,57 --score ?z..&quot;m&quot;,1-c,1-c --car's body u=8-- h=8-- g(12)-- for y=56,60 do s=-y/c --might have been able to save characters by dropping the +1 and altering h accordingly. oh well! rectfill((a+u)*s,y+s*h+1,(a-u)*s,y)-- a+=b --since the first rect (the windshield) is different, always set the color/dims here g(8)-- u=10-- h=6 end z+=k\11 flip() --yes, putting it inside the game loop saves a single character. it gets erased unless the loop exits. ?&quot;oops&quot;,0,0 f+=k if(k&lt;22)k+=1 if(abs(r)&lt;c)goto _ </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p></div></div></div></p> https://www.lexaloffle.com/bbs/?tid=37801 https://www.lexaloffle.com/bbs/?tid=37801 Thu, 07 May 2020 18:43:51 UTC