8pack

    0.2.0 • Public • Published

    8pack

    Utility that injects modular Lua source into a PICO-8 project.

    Installation

    npm install 8pack -g

    Examples

    Create sample.lua.p8 from sample.lua using newest PICO-8 template

    8pack tests/sample.lua

    Inject sample.lua source into foo.p8. Will overwrite foo.p8 if already exists.

    8pack tests/sample.lua foo.p8  

    Watch /tests/sample.lua for changes and overwrite to /tests/sample.lua.p8

    8pack /tests/sample.lua -w  

    Write /tests/sample.lua source to /tests/foo.p8 using PICO-8 0.1.10c template

    8pack tests/sample.lua /tests/foo.p8 --template 0.1.10c

    Modules

    Lua modules can be imported via require('./libs/lib') and will be injected to the top of the p8 file as global variables. Each module must return a table, variable or a function. Use node.js style path prefixes to access parent directories: require('../lib')

    main.lua:

    local liba = require('./liba');
     
    function _init()
        state = {
            hi = "hello world",
            i = 0,
            someFunct = function()
                return 1
            end,
            someOtherFunct = function()
                return 0
            end
        }
    end
     
    function _update60()
        state.i = state.i + rnd(liba.iterator);
    end
     
    function _draw()
        cls();
        print(liba.foo() .. ' ' .. state.i, 0, 116, 7);
    end

    ./liba.lua module:

    local lib = {
        foo = function()
            return 'hello world'
        end,
    }
    lib.iterator = 1
     
    return lib;

    Each injection is instantiated as a new function in pico8 code thus no code can be shared between modules. As a workaround 8pack creates a globals table as the topmost variable inside the project which can be accessed from every module.

    ./helpers.lua module:

    local helpers = {
        setLevel = function(level)
            globals.level = level
        end,
    }
     
    return lib;

    ./game.lua module:

    return {
       nextLevel = function() 
         globals.level =  globals.level+1
         return globals.level
       end

    JetBrains Watcher Arguments

    Install 8pack globally and add 8pack bin as watcher with following arguments for on-the-fly injection

    $ProjectFileDir$/projectroot.lua $ProjectFileDir$/project.p8
    

    e.g. for Lua watcher in PhpStorm 2017.3 on Windows 10 (I'm using the official Lua plugin) Screenshot

    ToDos

    • Circular dependancy checks
    • Module order checks
    • Prevent pedundant imports
    • Honor token limits
    • Compress code

    Keywords

    none

    Install

    npm i 8pack

    DownloadsWeekly Downloads

    12

    Version

    0.2.0

    License

    ISC

    Unpacked Size

    48.3 kB

    Total Files

    23

    Last publish

    Collaborators

    • avatar