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.
}