Here's a snippet I made to launch webpages in the player's browser from within a pico8 cartridge. It only works in html exports, because it uses the GPIO pins to send the url to a custom html template.
Example (player perspective)
For an example of this in action, play https://pancelor.itch.io/make-ten-deluxe and click "info" on the title screen. A paper will pop up with some clickable URLs on them, which will load new tabs when clicked.
Setup
folder config
, open the "plates" subfolder, copy the default template (TODO: is there a default template, or did I make it myself by exporting a cart and then undoing pico8's##js_file##
/##label_file##
replacement?)- Find
var pico8_gpio = new Array(128);
(it's near the top, around line 30) - Replace it with this:
var pico8_gpio = new Proxy(new Array(128),{ // pancelor's gpio-url, https://www.lexaloffle.com/bbs/?tid=149864 set(arr, pin, value) { // console.log(typeof pin, typeof value); // string number 0.o pin = parseInt(pin,10); arr[pin] = value; // write url chars to pins 1,2... // then set pin 0 to ord("u") to open the url if (pin==0) { var code = String.fromCharCode(value); if (code=="u") { // read URL (and reset pins to undefined) var url = ""; for (var ii = 1; ii < 128; ii++) { var state = arr[ii]; if (state==undefined) break; url += String.fromCharCode(state); arr[ii] = undefined; } arr[0] = undefined // open if (!url.startsWith("http")) url = "https://"+url; console.log("opening gpio url:",url); window.open(url,'_blank'); } else { console.log("unknown gpio command:",code,arr[0]); } } } }); |
- Save your new template as
plates/gpio_url.html
- Inside your cart, use this function to open a URL in the player's browser:
function open_external(url) assert(#url<=127) poke(0x5f81,ord(url,1,#url)) ?"\^!5f80u" --must be last end |
- Export your cart with
export -f mygame.html -p gpio_url
Example cart
-- export -f test.html -p gpio_url function _update() if btnp(4) and not launched then launched=true open_external("pancelor.com") end end function _draw() cls(launched and 2 or 1) print(launched and "done" or "press z",54,64,7) end function open_external(url) poke(0x5f81,ord(url,1,#url)) ?"\^!5f80u" --must be last end |
License
CC BY 4.0. Just leave the "// pancelor's gpio-url <link>" comment in the code itself and you can use this for anything. (I think CC BY normally means you need to give more credit than just leaving a code comment, e.g. a shoutout in the game's description or something, but in this case I'm not bothered about it.)
[Please log in to post a comment]