Chunker size to uint8 and Rectangular Doodads #84
26
Changes.md
26
Changes.md
|
@ -2,6 +2,22 @@
|
||||||
|
|
||||||
## v0.13.2 (TBD)
|
## 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
|
* 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
|
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
|
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!
|
on your level as might happen with the Actor Tool!
|
||||||
* Start distributing AppImage releases for GNU/Linux (64-bit and 32-bit)
|
* 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)
|
## v0.13.1 (Oct 10 2022)
|
||||||
|
|
||||||
This release brings a handful of minor new features to the game.
|
This release brings a handful of minor new features to the game.
|
||||||
|
|
|
@ -43,7 +43,7 @@ var (
|
||||||
|
|
||||||
// Actor replacement cheats
|
// Actor replacement cheats
|
||||||
var CheatActors = map[string]string{
|
var CheatActors = map[string]string{
|
||||||
"pinocchio": "boy",
|
"pinocchio": PlayerCharacterDoodad,
|
||||||
"the cell": "azu-blu",
|
"the cell": "azu-blu",
|
||||||
"super azulian": "azu-red",
|
"super azulian": "azu-red",
|
||||||
"hyper azulian": "azu-white",
|
"hyper azulian": "azu-white",
|
||||||
|
|
|
@ -36,10 +36,15 @@ func (d *Doodle) MakeCheatsWindow(supervisor *ui.Supervisor) *ui.Window {
|
||||||
return d.Scene.Name()
|
return d.Scene.Name()
|
||||||
},
|
},
|
||||||
RunCommand: func(command string) {
|
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)
|
d.shell.Execute(command)
|
||||||
},
|
},
|
||||||
OnSetPlayerCharacter: func(doodad string) {
|
OnSetPlayerCharacter: func(doodad string) {
|
||||||
if scene, ok := d.Scene.(*PlayScene); ok {
|
if scene, ok := d.Scene.(*PlayScene); ok {
|
||||||
|
scene.SetCheated()
|
||||||
scene.SetPlayerCharacter(doodad)
|
scene.SetPlayerCharacter(doodad)
|
||||||
} else {
|
} else {
|
||||||
shmem.FlashError("This only works during Play Mode.")
|
shmem.FlashError("This only works during Play Mode.")
|
||||||
|
|
|
@ -643,6 +643,11 @@ func (s *PlayScene) GetCheated() bool {
|
||||||
return s.cheated
|
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.
|
// ShowEndLevelModal centralizes the EndLevel modal config.
|
||||||
// This is the common handler function between easy methods such as
|
// This is the common handler function between easy methods such as
|
||||||
// BeatLevel, FailLevel, and DieByFire.
|
// 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.
|
// Draw the UI screen and any widgets that attached to it.
|
||||||
s.screen.Compute(d.Engine)
|
s.screen.Compute(d.Engine)
|
||||||
s.screen.Present(d.Engine, render.Origin)
|
s.screen.Present(d.Engine, render.Origin)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user