Chunker size to uint8 and Rectangular Doodads #84

Merged
kirsle merged 3 commits from file-format-optimization into master 2023-02-18 05:49:49 +00:00
4 changed files with 44 additions and 1 deletions
Showing only changes of commit 1e37509421 - Show all commits

View File

@ -2,6 +2,22 @@
## v0.13.2 (TBD)
Some new features:
* **Doodads can be non-square!** You can now set a rectangular canvas size
for your doodads. Many of the game's built-in doodads that used to be
off-center before (doors, creatures) because their sprites were not squares
now have correct rectangular shapes.
* A **Cheats Menu** has been added which enables you to enter many of the
game's cheat codes by clicking on buttons instead. Enable it through the
"Experimental" tab of the Settings, and the cheats menu can be opened from
the Help menu bar during gameplay.
Other miscellaneous changes:
* The default Author name on your new drawings will prefer to use your
license registration name (if the game is registered) before falling back
on your operating system's $USER name like before.
* In the level editor, you can now use the Pan Tool to access the actor
properties of doodads you've dropped into your level. Similar to the
Actor Tool, when you mouse-over an actor on your level it will highlight
@ -12,6 +28,16 @@
on your level as might happen with the Actor Tool!
* Start distributing AppImage releases for GNU/Linux (64-bit and 32-bit)
Some technical changes:
* Chunk sizes in levels/doodads is now a uint8 type, meaning the maximum
chunk size is 255x255 pixels. The game's default has always been 128x128
but now there is a limit. This takes a step towards optimizing the game's
file formats: large world coordinates (64-bit) are mapped to a chunk
coordinate, and if each chunk only needs to worry about the 255 pixels
in its territory, space can be saved in memory without chunks needing to
theoretically support 64-bit sizes of pixels!
## v0.13.1 (Oct 10 2022)
This release brings a handful of minor new features to the game.

View File

@ -43,7 +43,7 @@ var (
// Actor replacement cheats
var CheatActors = map[string]string{
"pinocchio": "boy",
"pinocchio": PlayerCharacterDoodad,
"the cell": "azu-blu",
"super azulian": "azu-red",
"hyper azulian": "azu-white",

View File

@ -36,10 +36,15 @@ func (d *Doodle) MakeCheatsWindow(supervisor *ui.Supervisor) *ui.Window {
return d.Scene.Name()
},
RunCommand: func(command string) {
// If we are in Play Mode, every command out of here is cheating.
if playScene, ok := d.Scene.(*PlayScene); ok {
playScene.SetCheated()
}
d.shell.Execute(command)
},
OnSetPlayerCharacter: func(doodad string) {
if scene, ok := d.Scene.(*PlayScene); ok {
scene.SetCheated()
scene.SetPlayerCharacter(doodad)
} else {
shmem.FlashError("This only works during Play Mode.")

View File

@ -643,6 +643,11 @@ func (s *PlayScene) GetCheated() bool {
return s.cheated
}
// GetPerfect gives read-only access to the perfectRun flag.
func (s *PlayScene) GetPerfect() bool {
return s.perfectRun
}
// ShowEndLevelModal centralizes the EndLevel modal config.
// This is the common handler function between easy methods such as
// BeatLevel, FailLevel, and DieByFire.
@ -833,6 +838,13 @@ func (s *PlayScene) Draw(d *Doodle) error {
}
}
// Bug: sometimes (especially after cheating) if you restart a level
// properly, cheated=false perfectRun=true but the perfectRunIcon
// would not be showing.
if !s.cheated && s.perfectRun && s.timerPerfectImage.Hidden() {
s.timerPerfectImage.Show()
}
// Draw the UI screen and any widgets that attached to it.
s.screen.Compute(d.Engine)
s.screen.Present(d.Engine, render.Origin)