Asset licences
Everything in Malta Life that we did not make ourselves, where it came from, and the licence it ships under. This page is generated from the game's own licence files (website/tools/build_licenses.py), so it matches the repository.
Required attributions
- Map data © OpenStreetMap contributors, available under the Open Database Licence (ODbL).
- Voices: Piper (rhasspy) trained on LibriTTS-R (CC BY 4.0). Used for the baked mumble syllables.
- Fonts: Playfair Display, Inter and Oswald, SIL Open Font License 1.1. The licence texts ship with this site in
assets/fonts/. - Kenney, Poly Haven, ambientCG, MakeHuman, Quaternius and KayKit assets are CC0. Credit is given below with thanks, not because it is required.
Items marked unverified or review before shipping below are copied as-is from the internal notes. Most of them concern optional local AI tools in ai/, which the export presets exclude from the downloadable build.
Source file: game/assets/audio/LICENSES.md
Audio licences and sources
Every file under game/assets/audio/ is listed below with its source and licence. Nothing here is CC-BY-NC or of unknown licence.
1. Kenney (CC0 1.0 Universal, public domain)
Downloaded from https://kenney.nl/assets/<pack>. Each file is a verbatim copy of the pack's OGG, renamed to the path shown.
| Game file | Kenney pack | Original path in pack |
|---|---|---|
minigame/fail_0.ogg | digital-audio | lowDown.ogg |
minigame/fail_1.ogg | digital-audio | highDown.ogg |
minigame/success_0.ogg | digital-audio | powerUp2.ogg |
minigame/success_1.ogg | digital-audio | powerUp4.ogg |
minigame/success_2.ogg | digital-audio | powerUp5.ogg |
minigame/success_3.ogg | digital-audio | powerUp6.ogg |
sfx/bell/bell_strike_0.ogg | impact-sounds | impactBell_heavy_000.ogg |
sfx/bell/bell_strike_1.ogg | impact-sounds | impactBell_heavy_001.ogg |
sfx/bell/bell_strike_2.ogg | impact-sounds | impactBell_heavy_002.ogg |
sfx/bell/bell_strike_3.ogg | impact-sounds | impactBell_heavy_003.ogg |
sfx/bell/bell_strike_4.ogg | impact-sounds | impactBell_heavy_004.ogg |
sfx/car/impact_metal_0.ogg | impact-sounds | impactMetal_heavy_000.ogg |
sfx/car/impact_metal_1.ogg | impact-sounds | impactMetal_heavy_001.ogg |
sfx/car/impact_metal_2.ogg | impact-sounds | impactMetal_heavy_002.ogg |
sfx/car/impact_metal_3.ogg | impact-sounds | impactMetal_heavy_003.ogg |
sfx/car/impact_metal_4.ogg | impact-sounds | impactMetal_heavy_004.ogg |
sfx/car/impact_plate_0.ogg | impact-sounds | impactPlate_heavy_000.ogg |
sfx/car/impact_plate_1.ogg | impact-sounds | impactPlate_heavy_001.ogg |
sfx/car/impact_plate_2.ogg | impact-sounds | impactPlate_heavy_002.ogg |
sfx/car/impact_plate_3.ogg | impact-sounds | impactPlate_heavy_003.ogg |
sfx/car/impact_plate_4.ogg | impact-sounds | impactPlate_heavy_004.ogg |
sfx/cash/chips_0.ogg | casino-audio | chips-collide-1.ogg |
sfx/cash/chips_1.ogg | casino-audio | chips-collide-2.ogg |
sfx/cash/chips_2.ogg | casino-audio | chips-collide-3.ogg |
sfx/cash/chips_3.ogg | casino-audio | chips-collide-4.ogg |
sfx/cash/coins_0.ogg | rpg-audio | handleCoins.ogg |
sfx/cash/coins_1.ogg | rpg-audio | handleCoins2.ogg |
sfx/door/close_0.ogg | rpg-audio | doorClose_1.ogg |
sfx/door/close_1.ogg | rpg-audio | doorClose_2.ogg |
sfx/door/close_2.ogg | rpg-audio | doorClose_3.ogg |
sfx/door/close_3.ogg | rpg-audio | doorClose_4.ogg |
sfx/door/creak_0.ogg | rpg-audio | creak1.ogg |
sfx/door/creak_1.ogg | rpg-audio | creak2.ogg |
sfx/door/creak_2.ogg | rpg-audio | creak3.ogg |
sfx/door/latch_0.ogg | rpg-audio | metalLatch.ogg |
sfx/door/open_0.ogg | rpg-audio | doorOpen_1.ogg |
sfx/door/open_1.ogg | rpg-audio | doorOpen_2.ogg |
sfx/footstep/grass_0.ogg | impact-sounds | footstep_grass_000.ogg |
sfx/footstep/grass_1.ogg | impact-sounds | footstep_grass_001.ogg |
sfx/footstep/grass_2.ogg | impact-sounds | footstep_grass_002.ogg |
sfx/footstep/grass_3.ogg | impact-sounds | footstep_grass_003.ogg |
sfx/footstep/grass_4.ogg | impact-sounds | footstep_grass_004.ogg |
sfx/footstep/stone_0.ogg | impact-sounds | footstep_concrete_000.ogg |
sfx/footstep/stone_1.ogg | impact-sounds | footstep_concrete_001.ogg |
sfx/footstep/stone_2.ogg | impact-sounds | footstep_concrete_002.ogg |
sfx/footstep/stone_3.ogg | impact-sounds | footstep_concrete_003.ogg |
sfx/footstep/stone_4.ogg | impact-sounds | footstep_concrete_004.ogg |
sfx/footstep/wood_0.ogg | impact-sounds | footstep_wood_000.ogg |
sfx/footstep/wood_1.ogg | impact-sounds | footstep_wood_001.ogg |
sfx/footstep/wood_2.ogg | impact-sounds | footstep_wood_002.ogg |
sfx/footstep/wood_3.ogg | impact-sounds | footstep_wood_003.ogg |
sfx/footstep/wood_4.ogg | impact-sounds | footstep_wood_004.ogg |
sfx/impact/drop_bag_0.ogg | rpg-audio | dropLeather.ogg |
sfx/impact/generic_0.ogg | impact-sounds | impactGeneric_light_000.ogg |
sfx/impact/generic_1.ogg | impact-sounds | impactGeneric_light_001.ogg |
sfx/punch/body_soft_0.ogg | impact-sounds | impactSoft_medium_000.ogg |
sfx/punch/body_soft_1.ogg | impact-sounds | impactSoft_medium_001.ogg |
sfx/punch/body_soft_2.ogg | impact-sounds | impactSoft_medium_002.ogg |
sfx/punch/body_soft_3.ogg | impact-sounds | impactSoft_medium_003.ogg |
sfx/punch/body_soft_4.ogg | impact-sounds | impactSoft_medium_004.ogg |
sfx/punch/punch_heavy_0.ogg | impact-sounds | impactPunch_heavy_000.ogg |
sfx/punch/punch_heavy_1.ogg | impact-sounds | impactPunch_heavy_001.ogg |
sfx/punch/punch_heavy_2.ogg | impact-sounds | impactPunch_heavy_002.ogg |
sfx/punch/punch_heavy_3.ogg | impact-sounds | impactPunch_heavy_003.ogg |
sfx/punch/punch_heavy_4.ogg | impact-sounds | impactPunch_heavy_004.ogg |
sfx/punch/punch_medium_0.ogg | impact-sounds | impactPunch_medium_000.ogg |
sfx/punch/punch_medium_1.ogg | impact-sounds | impactPunch_medium_001.ogg |
sfx/punch/punch_medium_2.ogg | impact-sounds | impactPunch_medium_002.ogg |
sfx/punch/punch_medium_3.ogg | impact-sounds | impactPunch_medium_003.ogg |
sfx/punch/punch_medium_4.ogg | impact-sounds | impactPunch_medium_004.ogg |
stinger/lose_0.ogg | music-jingles | Steel jingles/jingles_STEEL00.ogg |
stinger/win_0.ogg | music-jingles | Pizzicato jingles/jingles_PIZZI00.ogg |
stinger/win_1.ogg | music-jingles | Pizzicato jingles/jingles_PIZZI01.ogg |
ui/back_0.ogg | interface-sounds | back_001.ogg |
ui/back_1.ogg | interface-sounds | back_002.ogg |
ui/back_2.ogg | interface-sounds | back_003.ogg |
ui/back_3.ogg | interface-sounds | back_004.ogg |
ui/card_0.ogg | casino-audio | card-place-1.ogg |
ui/card_1.ogg | casino-audio | card-place-2.ogg |
ui/card_2.ogg | casino-audio | card-place-3.ogg |
ui/card_3.ogg | casino-audio | card-place-4.ogg |
ui/click_0.ogg | ui-audio | click1.ogg |
ui/click_1.ogg | ui-audio | click2.ogg |
ui/click_2.ogg | ui-audio | click3.ogg |
ui/click_3.ogg | ui-audio | click4.ogg |
ui/click_4.ogg | ui-audio | click5.ogg |
ui/confirm_0.ogg | interface-sounds | confirmation_001.ogg |
ui/confirm_1.ogg | interface-sounds | confirmation_002.ogg |
ui/confirm_2.ogg | interface-sounds | confirmation_003.ogg |
ui/confirm_3.ogg | interface-sounds | confirmation_004.ogg |
ui/error_0.ogg | interface-sounds | error_001.ogg |
ui/error_1.ogg | interface-sounds | error_002.ogg |
ui/error_2.ogg | interface-sounds | error_003.ogg |
ui/error_3.ogg | interface-sounds | error_004.ogg |
ui/error_4.ogg | interface-sounds | error_005.ogg |
ui/error_5.ogg | interface-sounds | error_006.ogg |
ui/error_6.ogg | interface-sounds | error_007.ogg |
ui/error_7.ogg | interface-sounds | error_008.ogg |
ui/hover_0.ogg | ui-audio | rollover1.ogg |
ui/hover_1.ogg | ui-audio | rollover2.ogg |
ui/hover_2.ogg | ui-audio | rollover3.ogg |
ui/hover_3.ogg | ui-audio | rollover4.ogg |
ui/hover_4.ogg | ui-audio | rollover5.ogg |
ui/hover_5.ogg | ui-audio | rollover6.ogg |
ui/notify_bong_0.ogg | interface-sounds | bong_001.ogg |
ui/notify_tone_0.ogg | digital-audio | twoTone1.ogg |
ui/notify_tone_1.ogg | digital-audio | threeTone1.ogg |
ui/open_0.ogg | interface-sounds | open_001.ogg |
ui/open_1.ogg | interface-sounds | open_002.ogg |
ui/open_2.ogg | interface-sounds | open_003.ogg |
ui/open_3.ogg | interface-sounds | open_004.ogg |
ui/select_0.ogg | interface-sounds | select_001.ogg |
ui/select_1.ogg | interface-sounds | select_002.ogg |
ui/select_2.ogg | interface-sounds | select_003.ogg |
ui/select_3.ogg | interface-sounds | select_004.ogg |
ui/select_4.ogg | interface-sounds | select_005.ogg |
ui/select_5.ogg | interface-sounds | select_006.ogg |
ui/select_6.ogg | interface-sounds | select_007.ogg |
ui/select_7.ogg | interface-sounds | select_008.ogg |
ui/tick_0.ogg | interface-sounds | tick_001.ogg |
ui/tick_1.ogg | interface-sounds | tick_002.ogg |
ui/tick_2.ogg | interface-sounds | tick_004.ogg |
ui/toggle_0.ogg | ui-audio | switch1.ogg |
ui/toggle_1.ogg | ui-audio | switch2.ogg |
ui/toggle_2.ogg | ui-audio | switch3.ogg |
ui/toggle_3.ogg | ui-audio | switch4.ogg |
ui/toggle_4.ogg | ui-audio | switch5.ogg |
ui/toggle_5.ogg | ui-audio | switch6.ogg |
2. Procedural (original, generated by game/tools/make_sfx.py)
Synthesised in numpy from sine partials, filtered noise and envelopes. No samples were used. The project owns these files and they carry no third-party licence. Loops are exact multiples of their length at 48 kHz, so they join without a seam.
amb/boat_engine_loop.oggamb/cicadas_loop.oggamb/crickets_loop.oggamb/gull_0.oggamb/gull_1.oggamb/gull_2.oggamb/gull_3.oggamb/harbour_clink_0.oggamb/harbour_clink_1.oggamb/harbour_clink_2.oggamb/harbour_water_loop.oggamb/outboard_loop.oggamb/street_chatter_loop.oggamb/surf_loop.oggamb/traffic_hum_loop.oggsfx/bell/church_0.oggsfx/bell/church_1.oggsfx/bicycle/bell_0.oggsfx/bicycle/bell_1.oggsfx/bicycle/chain_loop.oggsfx/gun/pistol_0.ogg,sfx/gun/pistol_1.ogg,sfx/gun/shotgun_0.ogg,sfx/gun/shotgun_1.ogg,sfx/gun/rifle_0.ogg,sfx/gun/rifle_1.ogg(make_guns_and_sirens)sfx/police/siren_loop.ogg(make_guns_and_sirens)sfx/bus/air_brake_0.oggsfx/bus/diesel_loop.oggsfx/bus/door_chime_0.oggsfx/car/engine_diesel_loop.oggsfx/car/engine_small_loop.oggsfx/car/horn_double_0.oggsfx/car/horn_long_0.oggsfx/car/horn_short_0.oggsfx/car/horn_short_1.oggsfx/car/skid_0.oggsfx/car/skid_1.oggsfx/cash/register_0.oggsfx/cash/register_1.oggsfx/crowd/cheer_0.oggsfx/crowd/cheer_1.oggsfx/crowd/murmur_loop.oggsfx/footstep/asphalt_0.oggsfx/footstep/asphalt_1.oggsfx/footstep/asphalt_2.oggsfx/footstep/asphalt_3.oggsfx/footstep/sand_0.oggsfx/footstep/sand_1.oggsfx/footstep/sand_2.oggsfx/footstep/sand_3.oggsfx/grunt/effort_0.oggsfx/grunt/effort_1.oggsfx/grunt/effort_2.oggsfx/grunt/effort_3.oggsfx/grunt/effort_f_0.oggsfx/grunt/effort_f_1.oggsfx/grunt/effort_f_2.oggsfx/grunt/pain_0.oggsfx/grunt/pain_1.oggsfx/grunt/pain_2.oggsfx/petard/burst_0.oggsfx/petard/burst_1.oggsfx/petard/petard_0.oggsfx/petard/petard_1.oggsfx/petard/petard_2.oggsfx/petard/petard_3.oggsfx/petard/petard_4.oggsfx/petard/rocket_0.oggsfx/petard/rocket_1.oggsfx/punch/swing_0.oggsfx/punch/swing_1.oggsfx/punch/swing_2.oggsfx/scooter/two_stroke_loop.oggui/phone_notify_0.oggui/phone_notify_1.ogg
Festa band march (original, synthesised in Python with the standard wave module)
sfx/band/march_0.wav: a 4 s, 120 BPM bass-and-snare march loop (two bars) for the festa band. No samples, no third-party sounds. Used asband_marchindata/audio.json. Original work, free to use.
3. Voice lines (generated, game/tools/bake_voices.py)
Rendered with Kokoro-82M through the local server in game/ai/tts, using only the Kokoro preset voices listed in game/ai/tts/voices/voices.json. No real person's voice is cloned. The Kokoro-82M licence is not recorded in this repository. Check the model card before any public release and add the licence here.
0 files, indexed in voice/manifest.json.
3b. Mumble syllables (generated, game/tools/bake_mumbles.py)
mumble/male/*.ogg and mumble/female/*.ogg (60 clips, 0.15 to 0.32 s, about 260 KB in all): single nonsense syllables spoken offline by Piper en_US-libritts_r-medium speakers 7, 272 and 201 (male) and 255, 241 and 101 (female). These are non-cast voices from fallback_pools in game/data/piper_voices.json, and none of them is a ref_* clone reference. Voice licence: LibriTTS-R, CC BY 4.0 (openslr.org/141). Attribution: "Voices: Piper (rhasspy) trained on LibriTTS-R (CC BY 4.0)".
4. Music
None shipped. The music states in game/data/audio.json have no files, and their expected filenames are documented in game/docs/AUDIO.md.
Source file: game/assets/third_party/LICENSES.md
Third-party visual assets: sources and licences
All textures and HDRIs below come from Poly Haven (https://polyhaven.com), whose assets are released under CC0 1.0 Universal (https://creativecommons.org/publicdomain/zero/1.0/). Attribution is not required; the author credits are listed for reference.
Fonts come from Google Fonts (https://fonts.google.com), taken from the google/fonts GitHub repository (https://github.com/google/fonts, path ofl/<family>/). They are licensed under the SIL Open Font License 1.1; the licence text ships in each font folder as OFL.txt.
Textures (textures/<id>/)
Each texture folder holds _diff (albedo), _nor_gl (normal map, OpenGL convention), _rough (roughness) and _ao (ambient occlusion) JPGs.
| Folder | Use | Resolution | Source | Author(s) | Licence |
|---|---|---|---|---|---|
sandstone_blocks_05 | warm stone block walls (stands in for Maltese limestone; Poly Haven has no limestone block set) | 2K | https://polyhaven.com/a/sandstone_blocks_05 | Rob Tuytel | CC0 1.0 |
painted_plaster_wall | weathered painted plaster | 2K | https://polyhaven.com/a/painted_plaster_wall | Amal Kumar | CC0 1.0 |
asphalt_03 | worn asphalt road | 2K | https://polyhaven.com/a/asphalt_03 | Dario Barresi (processing), Charlotte Baglioni (photography) | CC0 1.0 |
concrete_pavement_03 | concrete pavement / sidewalk | 2K | https://polyhaven.com/a/concrete_pavement_03 | Charlotte Baglioni | CC0 1.0 |
patterned_concrete_pavers | patterned cement floor / paving tiles | 2K | https://polyhaven.com/a/patterned_concrete_pavers | Amal Kumar | CC0 1.0 |
distressed_painted_planks | painted wood planks (balconies, doors) | 1K | https://polyhaven.com/a/distressed_painted_planks | Rob Tuytel | CC0 1.0 |
metal_grate_rusty | rusty metal | 1K | https://polyhaven.com/a/metal_grate_rusty | Rob Tuytel (processing), Dimitrios Savva (photography) | CC0 1.0 |
coast_land_rocks_01 | coastal rock | 2K | https://polyhaven.com/a/coast_land_rocks_01 | Rob Tuytel (photography, processing), Rico Cilliers (tiling) | CC0 1.0 |
coast_sand_01 | beach sand | 2K | https://polyhaven.com/a/coast_sand_01 | Rob Tuytel | CC0 1.0 |
clay_roof_tiles_02 | terracotta roof tiles | 2K | https://polyhaven.com/a/clay_roof_tiles_02 | Amal Kumar | CC0 1.0 |
grass_ground | dry grass and soil | 1K | https://polyhaven.com/a/grass_ground | Charlotte Baglioni | CC0 1.0 |
Downloaded from the jpg entries of https://api.polyhaven.com/files/<id>, e.g. https://dl.polyhaven.org/file/ph-assets/Textures/jpg/2k/sandstone_blocks_05/sandstone_blocks_05_diff_2k.jpg.
HDRIs (hdri/)
Equirectangular Radiance .hdr, 2K.
| File | Use | Source | Author(s) | Licence |
|---|---|---|---|---|
circus_maximus_2_2k.hdr | clear sunny midday sky (Rome) | https://polyhaven.com/a/circus_maximus_2 | Greg Zaal (all), Rico Cilliers (backplates) | CC0 1.0 |
blue_lagoon_2k.hdr | clear afternoon sky with sea and pier | https://polyhaven.com/a/blue_lagoon | Greg Zaal | CC0 1.0 |
belfast_sunset_puresky_2k.hdr | sunset sky | https://polyhaven.com/a/belfast_sunset_puresky | Greg Zaal (processing), Dimitrios Savva (photography), Jarod Guest (sky edits) | CC0 1.0 |
blue_lagoon_night_2k.hdr | night, lit promenade by the sea | https://polyhaven.com/a/blue_lagoon_night | Greg Zaal | CC0 1.0 |
Downloaded from the hdri entry of https://api.polyhaven.com/files/<id>.
Fonts (fonts/)
| Folder | File | Use | Designer | Source | Licence |
|---|---|---|---|---|---|
playfair_display/ | PlayfairDisplay[wght].ttf | display serif | Claus Eggers Sørensen | https://github.com/google/fonts/tree/main/ofl/playfairdisplay | SIL OFL 1.1 (OFL.txt) |
inter/ | Inter[opsz,wght].ttf | UI sans | Rasmus Andersson | https://github.com/google/fonts/tree/main/ofl/inter | SIL OFL 1.1 (OFL.txt) |
oswald/ | Oswald[wght].ttf | condensed signage | Vernon Adams, Kalapi Gajjar, Cyreal | https://github.com/google/fonts/tree/main/ofl/oswald | SIL OFL 1.1 (OFL.txt) |
Downloaded from https://raw.githubusercontent.com/google/fonts/main/ofl/<family>/.
Not used
ambientCG was not used. Poly Haven had a suitable match for every requested slot.
Source file: game/assets/LICENSES.md
Third-party assets and tools: sources and licences
3D characters
Derived variants (generated, current)
- Files:
assets/characters/variants/*.glb(21 files), built bytools/blender_makehuman.py. - Bodies and clothing: MakeHuman 1.x system and community assets (CC0), see below, built with MPFB2.
- Animations: Quaternius Universal Animation Library, Standard set (CC0), see below. Retargeted to the MPFB game_engine rig. Wave and Drink are procedural arm offsets on the Idle pose (the UAL has no such clips).
- Licence of the generated files: CC0 (from the sources above). The tool script and the primitive props (hard hat, police cap, delivery box, apron, badge, handbag) are original work.
MakeHuman assets (body, skin, hair, clothes, eyes, eyebrows)
- Project: https://makehumancommunity.org. System assets (targets, skins, rigs, eyes, eyebrows, hair, clothes) are released under CC0 1.0 by the MakeHuman project.
- Source used:
makehuman_system_assets_cc0.zip(280 MB) from files.makehumancommunity.org, extracted into the MPFB2 add-on data folder (extensions/user_default/mpfb/data). - Files used in the variants: skins
young/middleage/old_caucasian_male|female,toon01not used; hairshort01-04,bob01-02,long01,ponytail01; clothesmale_casualsuit01-06,male_elegantsuit01,male_worksuit01,female_casualsuit01-02,female_elegantsuit01,shoes01-06,fedora01; eyeslow-poly; eyebrowseyebrow001. - Licence: CC0 1.0 (public domain dedication). Attribution is not required.
MPFB2 (MakeHuman Plugin for Blender) v2.0.18
- Project: https://github.com/makehumancommunity/mpfb2, source zip from GitHub.
- Licence: GPL-3.0-or-later (the add-on code). It is used only as a build tool in Blender. It is not shipped in the game, and the GLB outputs are not derived from its code.
Quaternius Universal Animation Library (Standard), CC0
- Author: Quaternius (https://quaternius.com).
- Source used: the GitHub mirror
J-Ponzo/gltf-universal-animation-library(its README says it is the itch.io free version of 2025-06-10). The itch.io download was not used because its purchase flow did not allow a free download. - Licence: CC0 1.0 (text in the mirror's
LICENSE, copied toassets/characters/_downloads/ual/LICENSE). - File used:
AnimationLibrary_Godot_Standard.gltfand its.bin. Retargeted, not shipped.
KayKit: Adventurers Character Pack 1.0 (archived)
- Author: Kay Lousberg (https://www.kaylousberg.com), KayKit. CC0 1.0 Universal.
- The earlier base humans (Barbarian, Knight, Mage, Rogue, Rogue_Hooded) are no longer used. They are archived in
assets/characters/_old_kaykit/with a.gdignore, and the superseded script is archived there asblender_variants_kaykit.py.
Textures (ambientCG, CC0)
Rust007 (1K-JPG)
- Author and source: ambientCG (https://ambientcg.com/a/Rust007). Licence CC0 1.0 Universal, stated on the asset page.
- Files kept:
assets/external/ambientcg/Rust007/(Color, Roughness, NormalGL, AmbientOcclusion JPGs). The zip's .blend, .usdc and .mtlx files were not kept. - Used for: the rust decal patches on the Maruti 800 (colour, normal and AO/roughness ORM) and the "rust" vehicle surface (triplanar PBR), both in
scripts/world/vehicles/VehicleModels.gd; its normal map also gives the city lamp posts a faint pitting (scripts/world/city/CityStreet.gd).
Metal032 and Wood049 (1K-JPG)
- Author and source: ambientCG (https://ambientcg.com/a/Metal032, https://ambientcg.com/a/Wood049). Licence CC0 1.0 Universal, stated on each asset page.
- Files kept:
assets/external/ambientcg/Metal032/andWood049/(Color, Roughness, NormalGL JPGs). - Used for: the bus shelter steel frame and pole (Metal032) and the bench slats (Wood049) in
scripts/world/city/BusShelter.gd. The shelter's timetable and route-sign atlas is drawn bytools/make_bus_shelter_atlas.py(procedural, parody operator name).
Procedural city assets (no third-party content)
- Parish churches (
scripts/world/city/CityChurch.gd), festa pennants and pavaljuni (CityFesta.gd), luzzu boats with the procedural Eye of Osiris texture (CityLuzzu.gd), and the facade detail inCityBuilder.gdare generated in code. They reuse the Poly Haven CC0 textures already listed inassets/third_party/(sandstone_blocks_05, distressed_painted_planks, painted_plaster_wall, coast_land_rocks_01). No fal or other paid generation was used.
Text-to-speech (offline)
Piper (TTS engine)
- Project: https://github.com/rhasspy/piper, Copyright (c) 2022 Michael Hansen, MIT licence (
LICENSE.mdin the repo). - Installed in
ai/piper/venvfrom PyPI aspiper-tts1.8.0. The old macOS release tarball (piper_macos_aarch64.tar.gz, 2023.11.14-2) was incomplete (its libraries were missing), so it was not used. - The
piper-ttspackage licence was not separately checked. It is expected to be MIT like the upstream project; confirm before shipping.
Voice: en_GB-alan-medium
- Source: https://huggingface.co/rhasspy/piper-voices (
en/en_GB/alan/medium), filesen_GB-alan-medium.onnxand.onnx.jsoninai/piper/voices/. - Model card: fine-tuned from the US English lessac voice. Dataset is the Mycroft
mimic3-voicesvoiceapope_low(https://github.com/MycroftAI/mimic3-voices). The model card says "License: See URL". - The mimic3-voices repository is listed on GitHub as CC BY-SA 4.0. That is a ShareAlike licence, and it may apply to this voice model. Review before shipping a commercial build. Consider swapping this voice for one with a clear permissive licence.
Voice: en_GB-jenny_dioco-medium
- Source: https://huggingface.co/rhasspy/piper-voices (
en/en_GB/jenny_dioco/medium), filesen_GB-jenny_dioco-medium.onnxand.onnx.jsoninai/piper/voices/. - Dataset: Jenny (Dioco), https://github.com/dioco-group/jenny-tts-dataset. Licence per its README: commercial use permitted. Attribution is required in software that generates audio from user action: refer to the voice as "Jenny" and, where practical, "Jenny (Dioco)". Attribution is not required for distributed clips.
speak.sh
ai/piper/speak.sh "<text>" <alan|jenny|path.onnx> <out.wav>(tested: produces 22.05 kHz mono WAV for both voices).
Tools
Blender 5.2 LTS (used in background mode)
- Used to run
tools/blender_makehuman.py. Blender itself is GPL and is not distributed with the project.
Godot 4.7.2
- Used for the headless import and the
tools/test_human.gdtest.
Assets that were considered and not used
- Kenney "Animated Characters 3" (CC0, https://kenney.nl) was considered. It has only 3 animations (Idle, Jump pose, Running), so it was not added.
Source file: game/ai/piper/voices/LICENSES.md
Piper voice licences
All models come from https://huggingface.co/rhasspy/piper-voices (the .onnx, .onnx.json and MODEL_CARD files; each card is saved next to its model as <stem>.MODEL_CARD). The Piper runtime (piper-tts 1.8.0 in venv/) is GPL-3.0-or-later and bundles espeak-ng data (GPL-3.0). It runs as a separate process over HTTP and is not linked into the game; keep it that way, and ship its source and licence if the server is ever bundled. The licence below is that of the *training dataset*, as stated in the model card, and it governs the voice.
| Model | Speakers | Size | Dataset licence (from MODEL_CARD) | Commercial use |
|---|---|---|---|---|
| en_US-libritts_r-medium | 904 | 78.6 MB | CC BY 4.0 (LibriTTS-R, openslr.org/141) | yes, with attribution |
| en_GB-vctk-medium | 109 | 77.0 MB | CC BY 4.0 (VCTK, datashare.ed.ac.uk/handle/10283/3443) | yes, with attribution |
| en_GB-northern_english_male-medium | 1 | 63.2 MB | CC BY-SA 4.0 (openslr.org/83) | yes, attribution + share-alike |
| en_GB-cori-medium | 1 | 63.5 MB | public domain (LibriVox) | yes |
| en_US-reza_ibrahim-medium | 1 | 63.5 MB | CC0 (HF datasets mah92/Hedayatfar-Persian-Quran-Audio-Dataset + mah92/Ibrahim-Walk-English-Quran-Audio-Dataset) | yes |
| en_GB-alan-medium (pre-installed) | 1 | 63.2 MB | "See URL": github.com/MycroftAI/mimic3-voices (en_UK/apope_low) | UNVERIFIED: check that URL before shipping |
| en_GB-jenny_dioco-medium (pre-installed) | 1 | 63.2 MB | "See URL": github.com/dioco-group/jenny-tts-dataset (custom licence) | UNVERIFIED: check that URL before shipping |
Non-commercial flags: none of the downloaded models are NC. Two models were considered and deliberately *not* downloaded because their cards are non-commercial: en_US-l2arctic-medium (CC BY-NC 4.0) and en_GB-semaine-medium (CC BY-NC-SA 4.0). en_US-ryan-medium (CC BY-NC-SA 4.0) was also skipped. alan and jenny_dioco are not used by data/piper_voices.json, so the cast does not depend on their unverified licences.
Attribution for credits: "Voices: Piper (rhasspy) trained on LibriTTS-R (CC BY 4.0), CSTR VCTK Corpus (CC BY 4.0), the Google crowdsourced UK/Ireland English dataset (openslr 83, CC BY-SA 4.0) and LibriVox (public domain)." reza_ibrahim is CC0 (no attribution needed; credit: datasets by RezaHedayatfar and IbrahimWalk, voice trained by Ali Mahmoudi).
Downloaded 2026-11-03: 282.3 MB in total (four models), plus en_US-reza_ibrahim-medium (63.5 MB, sha256 99f0c314...15cd3c, matches the HF LFS oid) the same day: 345.8 MB. Not cast (see docs/handover/piper_voices.md).