Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - llamazing

Your projects / Re: Ocean's Heart
December 01, 2023, 03:22:58 AM
Quote from: Wuzzy2 on November 07, 2023, 04:36:17 PM
Wait, so is this game actually proprietary in the end (or has proprietary components)? The Solarus games webpage seems to suggest this.

Some points for consideration:
* A 100% FOSS license (in particular GPLv3) does not prevent commercial use and charging money for the software.
* It would not be possible to release the game on the Switch without including proprietary code. Releasing Ocean's Heart on the Switch has been a boone to the Solarus Engine and brought it some much-needed visibility.
* The vast majority of the lua scripts for Ocean's Heart are GPLv3. And as Max said, there are improved versions of the scripts included in the Trillium resource pack anyway.

Between the free tilesets, GPLv3 scripts and switch port, Ocean's Heart has produced a number of high quality features and assets to the Solarus Engine. Moreso than any other FOSS project to date, in my opinion.

Here is the license file for Ocean's Heart. The proprietary parts are listed as "All rights reserved". :

QuoteThis file contains the license for Ocean's Heart.

- The Solarus engine is licensed under the terms of the GNU General Public License
in version 3. Information and source code can be found at

- Lua scripts are licensed under the terms of the GNU General Public License
in version 3, unless specifically licensed otherwise in the text of the script.

- Music, sound effects, scenario, level design, and graphics are created by Max Mraz.
All rights reserved.

- However, some assets in particular are licensed under the
Creative Commons Attribution-ShareAlike 4.0 (CC BY-SA 4.0)
These can be found, among other assets, at

This game was made by Max Mraz.

Additional programming by Llamazing

Special thanks to the Solarus Team and community for all their help.

Your projects / Re: Quest Log Menu
May 02, 2021, 04:26:33 PM
The names of the tabs come from strings.dat and thus are configurable.

The number of tabs is flexible too, but I believe at the moment the data format only supports two types (main and side). The biggest problem with having more than two tabs is screen real-estate, which consumes the precious space available for the rest of the interface (would be a different story if the game were 1920x1080 resolution).

There's also a set of events for side/main quests, and adding new tab types would mean more events are needed as well.

If you need more tabs types for your game then create an issue in the gitlab project and include mock-up screenshots and describe the use-cases for the additional tabs.
Development / Re: Changing Basic Traits
April 01, 2021, 02:15:35 PM
Here's a script you can use to read the data file:
Code (lua) Select

--local data_loader = require("scripts/data_loader")

local data_loader = {}

function data_loader.load_data(path)
  local weapon_classes = {}
  local weapons = {}
  assert(sol.file.exists(path), "Error: data file not found: "..path)
  --create environment for loading data
  local env = setmetatable({}, {__index = function(self, data_type_name) --default function to handle unknown data entries
    print("WARNING: Unknown data entry: "..tostring(data_type_name))
    return function(properties) end --return dummy function to prevent error because return value will be called
  function env.weapon_class(properties)
    local id =
    assert(type(id)=="string", "Bad weapon_class property 'id' (string expected)")
    assert(not weapon_classes[id], "Bad weapon_class property 'id', must be unique value: "
    local weapon_class_entry = {} --create new weapon entry
    for k,v in pairs(properties) do weapon_class_entry[k] = v end --copy properties to new weapon entry
    weapon_classes[id] = weapon_class_entry
  function env.weapon(properties)
    local id =
    assert(type(id)=="string", "Bad weapon property 'id' (string expected)")
    assert(not weapons[id], "Bad weapon property 'id', must be unique value: "
    local weapon_entry = {} --create new weapon entry
    for k,v in pairs(properties) do weapon_entry[k] = v end --copy properties to new weapon entry
    weapons[id] = weapon_entry
  --load the data file
  local chunk = sol.main.load_file(path)
  assert(chunk, "Error: unable to read file: "..path)
  setfenv(chunk, env)
  --put loaded data into a new table and return it
  return {
    weapon_classes = weapon_classes,
    weapons = weapons,

return data_loader
Development / Re: Changing Basic Traits
April 01, 2021, 04:12:46 AM
I would use the following for the data file:
Code (lua) Select

  id = "sword",
  attack_sprite = "sword_attack",
  charged_attack_sprite = "sword_charged_attack", --i.e. spin attack
  damage_modifier = -1,

  id = "spear",
  attack_sprite = "spear_attack",
  charged_attack_sprite = "spear_charged_attack",
  damage_modifier = 0,

  id = "simple_sword",
  class = "sword",
  damage = {6, 7, 8, 10, 12, 15}, --rank 1 is 6 damage, rank 6 is 15 damage

  id = "legendary_spear",
  class = "spear",
  damage = {8, 10, 13, 16}, --rank 1 is 8 damage, rank 4 is 16 damage
Your scripts / Default Destination Checker
January 27, 2021, 01:57:34 AM
So apparently if a map has no default destination designated, then the first one listed in the map data file becomes the default. This caused a bug in Ocean's Heart where if someone saved the game on a particular map then they would spawn at a destination that was blocked by a locked door, and the hero would be stuck. The solution is to always designate one of the map's destinations as the default whenever there is more than one (choosing one that won't be blocked by an obstruction, of course).

I wrote a script to scan all the map data files, reporting any found that have more than one destination without a default destination specified.


The list of maps found is printed to the console.
Your projects / Re: Quest Log Menu
January 27, 2021, 12:27:37 AM
If the section were only for actual games then it should be called "Games" and not "Projects".

I've been working on this project since 2018, so it is a major project (and have you seen how extensive the documentation is? That's the real project where I've spent the majority of my time). I'm not sure why you are trying to belittle it?
Your projects / Re: Quest Log Menu
January 26, 2021, 03:08:10 AM
This project includes a fully playable demo map, so it kinda is an actual game (just very short). So it's in this hybrid grey-zone of being both a collection of scripts and playable game.
Your projects / Quest Log Menu
January 22, 2021, 07:52:25 PM
The Quest Log Menu shows a list of main & side-quests, tracking their current progress and status. Also featured by Ocean's Heart.

See the wiki page for documentation and examples.

Feel free to open an issue for feature requests, bug reports, or assistance in how to write/construct a particular quest log entry.

The repo files include a playable short demo that showcases various features that are possible (a mini-dungeon with different side-quests in each room).
Your projects / Re: Ocean's Heart
November 23, 2020, 03:10:37 PM
There are a lot of user comments in that article about how the game looks like a rip-off of oceanhorn. I've never heard of oceanhorn, lol
Game art & music / Re: Tileset for a world map
October 02, 2020, 04:44:31 PM
Oh yeah! If your goal is to have the player actually leave the current map and go to an overworld map where they can move around, then you can actually implement it as a functional map using a different tileset. The only tricky part would be swapping out the hero sprites for ones that fit with the overworld look (if applicable), but isn't even that hard. And maybe you'd want to use a custom state that prevents the hero from attacking or doing other similar actions.

If your goal is to display a pause menu overworld map that can be viewed while the player is still present on any map, then exporting an image is probably the best bet.
Game art & music / Re: Tileset for a world map
October 02, 2020, 12:47:08 AM
I think the question is about making a world map like this one using tiles in the map editor:

While doing such a thing is possible, it doesn't really work to render the map in-game because only one map can be active at a time (which is the map that the player is currently on). What you can do is create the map in the map editor then export it as an image and then use that image as the basis for the world map.
You might have to compile it yourself. The build provided on the downloads page probably doesn't target such an old OS.
Development / Re: Audio buffer error
July 28, 2020, 01:34:33 PM
Are you on a Mac? I see this error when certain music files end if using my Mac but I don't ever see the error on my Linux machine.
If you set-up the quest editor to use ZeroBrane as an external editor for lua scripts, it includes auto-completion (in addition to some extra debugging features):
Your scripts / Dialog_Box script to change font
February 06, 2020, 01:59:55 PM
It was asked on Discord how to change the font used in the dialog_box script for certain dialogs.

Here's an updated script where you can assign the font and font_size properties to a dialog entry to specify what to use, otherwise it will use default values.

Original author: Christopho, GPLv3