Asset Pipeline

ALPACA has a fully automated asset pipeline. Each project has a data-src folder with the source asset files such as ".spine" files and a data folder for runtime optimized files. The contents of the data folder are automatically generated by the prepare_assets script.

⚠️ All changes must be made to the data-src folder. Otherwise, your changes will be overwritten.

The data-src folder must have the following structure:

/data-src/
    ├── audio                 # All audio as .ogg files
    ├── config
    │   └── game.json         # Game configuration file
    ├── dialog
    │   └── dialogs.schnack   # Schnack file
    ├── fonts                 # Fonts in .ttf format
    ├── icons                 # Game icons (512 x 512 WebP file)
    ├── scenes                # All scene definition files
    └── scripts               # All Lua scripts

prepare_assets

The prepare_assets script is a one-file Python script that handles all the files ALPACA needs. Before you can run the Python file, you need to install the dependencies using pipenv

pipenv sync -d

For the Windows version of ALPACA, the prepare_assets script is bundled into prepare_assets.exe and can be run without Python installed.

The game configuration file

{
    "name": "ALPACA test chambers",                 # The name of the game
    "screenSize": {                                 # The native resolution of the game
        "x": 1920,
        "y": 1080
    },
    "minAspectRatio": {                             # The minimum aspect ratio
        "x": 16,
        "y": 9
    },
    "maxAspectRatio": {                             # And the maximum aspect ratio
        "x": 16,                                    # Define the visible area, otherwise black borders will be displayed.
        "y": 9
    },
    "default_font": "fonts/ABeeZee-Regular.ttf",    # Font for all ingame text
    "default_font_color": "#000000",                # Font color used for normal text
    "default_font_selected_color": "#00ff00",       # Font color used for selected choise
    "default_font_not_selected_color": "#ffffff",   # Font color for choises not selected
    "player": "spineboy-ess",                       # The Spine file of the player
    "pointer": "pointer",                           # The Spine file of the mouse pointer
    "dialog": "dialog/dialogs.schnack",             # Path to the .schnack file with all dialogs
    "antiAliasing": true,                           # Enable/disable anti-aliasing
    "icon": "icons/icon_512.webp",                  # The game icon
    "start_scene": "test_chamber_one",              # Name of the first scene
    "double_click_time": 0.3,                       # Time between two clicks for wrapping to positions
    "max_click_distance": 1000,                     # Distance between clicks for double clicks
    "debug_grap_distance": 40.0,                    # Debug only: Edit mode grap distance
    "gamepad_speed_multiplier": 11.0,               # Gamepad movement speed multiplier
    "inventory_default_skin": "default",            # AddToInventory sets this skin on objects
    "player_default_skin": "default",               # The skin the player starts with
    "player_side_skin": "default",                  # Skin to use when the player moves to the side
    "player_front_skin": "default",                 # Skin to use when the player moves down
    "player_up_skin": "default",                    # Skin to use when the player moves up
    "player_walk_animation": "walk",                # Animation to play when the player is walking
    "player_beam_animation": "aim",                 # Animation to play after a double click
    "player_idle_animation": "idle",                # Animation to play when the player is idle
    "player_start_animation": "sleeping",           # The animation the player will start with
    "spine_default_animation": "idle",              # The animation all objects start with
    "pointer_idle_animation": "idle",               # The animation the cursor plays while not over a clickable region
    "pointer_over_animation": "over",               # The animation to play when the cursor is over a clickable region
    "background_default_animation": "animation",    # The animation to play on all backgrounds by default
    "speechbubbleScaleX": 100.0,                    # Scale value to fit font and speech bubble
    "speechbubbleScaleY": 100.0,                    # Scale value to fit font and speech bubble
    "pointer_max_speed": 4.0,                       # Pointer maximum speed for gamepad control
    "player_max_speed": 4.0,                        # maximum player speed
    "player_start_position": {                      # Player start position
        "x": 0,
        "y": 256
    },
    "border": {                                     # Player border for camera
        "x": 250,
        "y": 100
    },
    "supportedLanguages": ["de", "en"]              # Supported languages for the game. If the system language is not in the list, the first language is selected.
}