Beta 4.4.0
Time for Beta 4.4.0! It introduces a few changes, mostly regarding collectibles. Enjoy!
As always, the full list of changes can be found here.
Changelog
Game development
-
The
config/powerups.json
file has been renamed toconfig/collectibles.json
. -
A few changes inside that file have been made as well:
- Some new fields have been added:
pickupParticle
- A one-time particle packet which is launched when that collectible is collected.spawnSound
- A sound effect launched when the collectible is spawned.dropEffects
(optional) - A list of effects to be executed when a powerup falls off the board without the player catching it.
- The fields
pickupName
andpickupFont
are now optional. If not set, no label will spawn upon picking that collectible up. - The field
effects
is now also optional.
- Some new fields have been added:
-
A few new level effects have been added:
grantScore
- Adds score to the player. It has one field,score
- an integer value determining how much score to add.grantCoin
- Grants a coin to the player.incrementGemStat
- Adds 1 to the gem stats for the current level.
-
Level format changes:
- A new field,
gemGenerator
, has been added. It contains a reference to the collectible generator which is now used to spawn gems. - The
gems
field has been removed.
- A new field,
-
Collectible generator changes:
- The collectible generators data structure has been completely revamped.
- Each collectible generator is an entry of a certain type.
- Every collectible generator entry evaluates to a list of collectibles.
- That means each generator now returns a list of collectibles, and not either one or nil.
- There are four types of entries, for now:
"collectible"
- Has one field,
name
. - Always evaluates to a single collectible.
- Has one field,
"collectible_generator"
- Has one field, which is also called
name
. - Evaluates to a given collectible generator result.
- Has one field, which is also called
"repeat"
- Has two fields:
entry
andcount
. - Evaluates an
entry
count
times, and returns a list of all collectibles evaluated from each iteration.
- Has two fields:
"random_pick"
- Has a single field:
pool
. It's a list of entries, which have anentry
field and an optionalweight
field, which defaults to 1. - Evaluates all choices from the
pool
, and then picks one randomly.- Empty choices are ignored.
- The choice weights can be modified by giving an appropriate weight value.
- Has a single field:
- A new condition type has been added:
cmp_latest_checkpoint
.- Compares the current player's latest checkpoint value.
- There are three optional fields for this condition:
min
,max
andvalue
. - If the value is greater than
min
, lower thanmax
or not equal to thevalue
, this condition does not pass. - If either of the fields is missing, the corresponding check is not performed.
- Examples:
- This condition will pass if the value is between 1 and 3, both inclusive:
{ "type": "cmp_latest_checkpoint", "min": 1, "max": 3 }
- This condition will pass if the latest checkpoint value is equal to 5:
{ "type": "cmp_latest_checkpoint", "value": 5 }
- This condition will pass if the value is between 1 and 3, both inclusive:
- The collectible generators data structure has been completely revamped.
-
config/gameplay.json
changes:- The field
sphereBehaviour.attractionSpeed
has been split intoattractionSpeedMult
andattractionSpeedBase
.- The old formula for the maximum magnetization speed was
attractionSpeed * max(combo, 1)
. - The new formula is now
attractionSpeedBase + attractionSpeedMult * max(combo, 1)
. - In order to retain current behavior, set
attractionSpeedBase
to0
and renameattractionSpeed
toattractionSpeedMult
.
- The old formula for the maximum magnetization speed was
- The field
-
config.json
changes:- The file now looks like this:
{ "name": "Luxor", "window_title": null, "engine_version": "v0.40.0", "native_resolution": { "x": 800, "y": 600 }, "rich_presence": { "enabled": false } }
- Fields:
name
(optional): The game name to be displayed in Rich Presence and in the game window.window_title
(optional): How the window should be named.engine_version
: Specifies the version a game is for. Not really used at the moment, but mandatory.native_resolution
: The native resolution of the game. Same as above.rich_presence
: An object which contains the following field:enabled
: Should be alwaystrue
, unless you want the game to be a secret.- Loading a game with this flag set to
false
causes Rich Presence to disconnect.
- Loading a game with this flag set to
-
Powerups, both internally and in
runtime.json
, are now stored simply by their names instead of an object withtype
,name
andcolor
fields. -
Bonus scarabs, scorpions and large matches now use the, for now hardcoded,
vanilla_coin.json
collectible generator. -
The level now waits for all collectibles to despawn before firing the level win callback.
Gameplay
- The default coin drop rate has been changed to match the original Luxor game:
# of spheres Old New 3 0% 0% 4 20% 0% 5 40% 50% 6 60% 75% 7 80% 100% 8 or more 100% 100%
- You can still change it manually in modules/game.lua.
Boot Screen
- You can now cancel edits to the settings.
- The version label in the settings is now aligned correctly.
- Fixed a few grammar errors in the outdated game message.
Converter
- The Python conversion script should now work with Mac OS systems.
- The
convert.bat
script will now show an appropriate message when the Python script fails, and will revert all changes if the user chooses to do so. - Converted levels should now land in the correct directory once again.
Bugfixes
- Apparently none!