hi there
edit: i've updated this a bit and put this into an installer cartridge (here) which can also be installed via yotta, a package and dependency manager.
i've already wanted to throw out what i'm working on and start a cart from scratch a few times and am accustomed to being able to use PICO-8's reset
to do so. this doesn't seem to work well here, and i don't like just closing and reopening picotron. we have save
and load
but not reset
or new
. so... i made new
.
you can place this code in /appdata/system/util/new.lua
:
-- remove current cart and replace with template cart source_template = "/appdata/new/template.p64" default_filename = "/untitled.p64" if(fstat("/appdata/new") != "folder") mkdir("/appdata/new") -- (most of this copied from /system/util/load.lua, thx zep) -- remove currently loaded cartridge rm("/ram/cart") -- create new one local result = cp(source_template, "/ram/cart/") if (result) then print(result) exit(1) end -- set current project filename store("/ram/system/pwc.pod", default_filename) -- tell window manager to clear out all workspaces send_message(3, {event="clear_project_workspaces"}) dat = fetch_metadata("/ram/cart") if (dat) dat = dat.workspaces -- create workspaces if (type(dat) == "table") then -- open in background (don't show in workspace) local edit_argv = {"-b"} for i=1,#dat do local ti = dat[i] local location = ti.location if (location) then add(edit_argv, "/ram/cart/"..location) end end -- open all at once create_process("/system/util/open.lua", { argv = edit_argv, pwd = "/ram/cart" } ) end print("new cart initialized.") |
once /appdata/system/util/new.lua
exists, you can immediately invoke it on the terminal by simply typing new
. any lua script in this util directory behaves like this, as noted in the readme. i love this.
you'll need a .p64 cart saved that will serve as your "new cart" template. you can customize where to put it, but by default it expects you'll save one at /appdata/new/template.p64
. to make this, i suggest freshly booting up picotron, editing the cart and code to whatever you'd like your default cart to look and act like, making the directory (mkdir /appdata/new
) and saving it directly (save /appdata/new/template.p64
). you can edit anything and it will be carried over to newly-created carts (via new
, anyway) - sprites, maps, sfx, multiple luas, even cover art, etc.
if you customize default_filename
up at the top, it will change where it saves the cart to if you were to invoke new
then make some edits and just hit ctrl+s without manually invoking save <filename>
. i've moved this to be /dev/untitled.p64
because i like to hide my clutter away.
warning: it will simply destroy any unsaved changes in the current cart. i would like to find out if there is a way to detect "unsavedness" in the future and prompt/warn about it and maybe require an overwrite flag if the workspace is dirty... but i'm not sure how to do that yet. so, take care.
it looks like /appdata/system/startup.lua
can be used to run custom startup code. in here, i would probably invoke this 'new' script, so that when i boot picotron it starts as my template. i haven't done this yet, because i am breaking other things ... but i think i will shortly.
if you're looking for ideas, my template only has a modification of main.lua
to be the following:
-- New Picotron Cartridge -- by Your Name Here -- called once per cart run function _init() end -- called every frame function _draw() end -- called every 1/60th of a second function _update() end |
i later replaced the default_filename
constant with something dynamic, since i found myself losing some temporary "sketches".
the below code replaces the first 3 lines of the original script, and will automatically name your new cartridge "/untitled_YYYYMMDD_NN.p64" - where YYYYMMDD is a current datestamp and NN is an incrementing number starting at 0. if, when you run new
, /untitled_YYYYMMDD_00.p64 already exists, your new cart will have /untitled_YYYYMMDD_01.p64 baked-in as its filename. this way, you can quickly new
something, make some tweaks and test some things, hit ctrl+s to keep it around, then just hit up new
again without risk of blowing up what you just saved. is it messy? yes. i'm a little messy.
-- source template cart (must exist!) source_template = "/appdata/new/template.p64" if(fstat("/appdata/new") != "folder") mkdir("/appdata/new") -- determine useful default filename today = table.concat(split(split(date(), " ")[1], "-", false)) default_filename_prefix = "/untitled_" .. today .. "_" default_filename = default_filename_prefix .. "00.p64" inst = 0 while fstat(default_filename) do inst += 1 sinst = inst if(inst<10) sinst = "0"..inst default_filename = default_filename_prefix .. sinst .. ".p64" end -- ... (remainder of existing script continues here) ... |
I've been using this a lot, it's a great tool! a small suggestion: make an appdata folder for your tool and put the template there, to keep the system tidy. I've changed mine to load from source_template = "/appdata/new/template.p64"
@pancelor that's a fantastic idea, I'll do so. After pulling my head out of a bunch of initial development, I've noticed others on the BBS are doing this. I'll make the edits to this, because that keeps everyone's systems cleaner :)
[Please log in to post a comment]