Changelog and Prepare v0.5.0 for Release

This commit is contained in:
Noah 2021-03-31 19:16:33 -07:00
parent 76b7dfa4f8
commit 1f274e0ca6
5 changed files with 85 additions and 1 deletions

View File

@ -1,5 +1,51 @@
# Changes # Changes
## v0.5.0-alpha
Project: Doodle is renamed to Sketchy Maze in this release.
New Features:
* **New Tutorial Levels:** the bundled levels demonstrate the built-in doodads
and how they interact and shows off several game features.
* **Level Editor:** you can now set the Title and Author of the level you're
editing by using the Level->Page Settings window.
* The **Inventory HUD** in Play Mode now shows a small number indicator for items
which have quantity, such as the Small Key. Colored Keys do not have quantity
and don't show a number: those are permanent collectibles.
* **Fire Pixels:** when the player character dies by touching a "Fire" pixel
during gameplay, the death message uses the **name** of the color instead
of calling it "fire." For example, if you name a color "spikes" and give
it the Fire attribute, it will say "Watch out for spikes!" if the player
dies by touching it.
* New cheat code: `give all keys` gives all four colored keys and 99x Small Keys
to the player character. The `drop all items` cheat clears your inventory.
New Doodads:
* **Warp Doors** allow the player character to fast travel to another location
on the map. Drag two Warp Doors into your level and use the Link Tool to
connect them together. Doors without an exit link will be "locked" and don't
open.
* **Small Key Doors** are locked doors which consume the Small Keys when unlocked,
unlike the colored doors where the key is multi-use. The player character can
hold many small keys at once and only unlock as many doors as he has keys.
Updated Doodads:
* **Several doodads** were increased in size to better match the player character:
Colored Locked Doors, Trapdoors, the Crumbly Floor and Electric Door, and the
blue and orange Boolean State Blocks.
* **Colored Doors** now have a visual locked vs. unlocked state: while locked, a
golden padlock hangs from the door, which goes away after it's been unlocked.
* **Switches** now interact differently with Electric Doors: the door will _always_
toggle its current state regardless of the 'power' setting of the Switch.
* **Buttons** which are linked to a **Sticky Button** will press and stay down
if the linked Sticky Button is pressed. Or in other words, the Sticky Button
makes all linked Buttons act sticky too and stay pressed while the Sticky
Button is pressed. If the Sticky Button is released later (e.g. by receiving
power from a Switch) it releases its linked Buttons as well.
## v0.4.0-alpha ## v0.4.0-alpha
This update brings improvements to the editor; you can now fully draw all the This update brings improvements to the editor; you can now fully draw all the

View File

@ -15,6 +15,7 @@ import (
"git.kirsle.net/apps/doodle/pkg/bindata" "git.kirsle.net/apps/doodle/pkg/bindata"
"git.kirsle.net/apps/doodle/pkg/branding" "git.kirsle.net/apps/doodle/pkg/branding"
"git.kirsle.net/apps/doodle/pkg/log" "git.kirsle.net/apps/doodle/pkg/log"
"git.kirsle.net/apps/doodle/pkg/shmem"
"git.kirsle.net/apps/doodle/pkg/sound" "git.kirsle.net/apps/doodle/pkg/sound"
"git.kirsle.net/go/render/sdl" "git.kirsle.net/go/render/sdl"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -85,6 +86,10 @@ func main() {
Name: "experimental", Name: "experimental",
Usage: "enable experimental Feature Flags", Usage: "enable experimental Feature Flags",
}, },
&cli.BoolFlag{
Name: "offline",
Usage: "offline mode, disables check for new updates",
},
} }
app.Action = func(c *cli.Context) error { app.Action = func(c *cli.Context) error {
@ -113,6 +118,11 @@ func main() {
balance.FeaturesOn() balance.FeaturesOn()
} }
// Offline mode?
if c.Bool("offline") {
shmem.OfflineMode = true
}
// SDL engine. // SDL engine.
engine := sdl.New( engine := sdl.New(
fmt.Sprintf("%s v%s", branding.AppName, branding.Version), fmt.Sprintf("%s v%s", branding.AppName, branding.Version),

View File

@ -48,7 +48,7 @@ var (
PlayerCharacterDoodad = "boy.doodad" PlayerCharacterDoodad = "boy.doodad"
// Level name for the title screen. // Level name for the title screen.
DemoLevelName = "example 1.level" DemoLevelName = "Tutorial 3.level"
) )
// Edit Mode Values // Edit Mode Values

View File

@ -9,6 +9,7 @@ import (
"git.kirsle.net/apps/doodle/pkg/log" "git.kirsle.net/apps/doodle/pkg/log"
"git.kirsle.net/apps/doodle/pkg/native" "git.kirsle.net/apps/doodle/pkg/native"
"git.kirsle.net/apps/doodle/pkg/scripting" "git.kirsle.net/apps/doodle/pkg/scripting"
"git.kirsle.net/apps/doodle/pkg/shmem"
"git.kirsle.net/apps/doodle/pkg/uix" "git.kirsle.net/apps/doodle/pkg/uix"
"git.kirsle.net/apps/doodle/pkg/updater" "git.kirsle.net/apps/doodle/pkg/updater"
"git.kirsle.net/go/render" "git.kirsle.net/go/render"
@ -27,6 +28,7 @@ type MainScene struct {
// UI components. // UI components.
labelTitle *ui.Label labelTitle *ui.Label
labelVersion *ui.Label labelVersion *ui.Label
labelHint *ui.Label
frame *ui.Frame // Main button frame frame *ui.Frame // Main button frame
// Update check variables. // Update check variables.
@ -70,6 +72,17 @@ func (s *MainScene) Setup(d *Doodle) error {
ver.Compute(d.Engine) ver.Compute(d.Engine)
s.labelVersion = ver s.labelVersion = ver
// Arrow Keys hint label (scroll the demo level).
s.labelHint = ui.NewLabel(ui.Label{
Text: "Hint: press the Arrow keys",
Font: render.Text{
Size: 16,
Color: render.Grey,
Shadow: render.Purple,
},
})
s.labelHint.Compute(d.Engine)
// "Update Available" button. // "Update Available" button.
s.updateButton = ui.NewButton("Update Button", ui.NewLabel(ui.Label{ s.updateButton = ui.NewButton("Update Button", ui.NewLabel(ui.Label{
Text: "An update is available!", Text: "An update is available!",
@ -144,6 +157,11 @@ func (s *MainScene) Setup(d *Doodle) error {
// checkUpdate checks for a version update and shows the button. // checkUpdate checks for a version update and shows the button.
func (s *MainScene) checkUpdate() { func (s *MainScene) checkUpdate() {
if shmem.OfflineMode {
log.Info("OfflineMode: skip updates check")
return
}
info, err := updater.Check() info, err := updater.Check()
if err != nil { if err != nil {
log.Error(err.Error()) log.Error(err.Error())
@ -244,6 +262,13 @@ func (s *MainScene) Draw(d *Doodle) error {
}) })
s.labelVersion.Present(d.Engine, s.labelVersion.Point()) s.labelVersion.Present(d.Engine, s.labelVersion.Point())
// Hint label.
s.labelHint.MoveTo(render.Point{
X: d.width - s.labelHint.Size().W - 32,
Y: d.height - s.labelHint.Size().H - 32,
})
s.labelHint.Present(d.Engine, s.labelHint.Point())
// Update button. // Update button.
s.updateButton.MoveTo(render.Point{ s.updateButton.MoveTo(render.Point{
X: 24, X: 24,

View File

@ -19,6 +19,9 @@ var (
// The level.Chunk.ToBitmap() uses this to cache a texture image. // The level.Chunk.ToBitmap() uses this to cache a texture image.
CurrentRenderEngine render.Engine CurrentRenderEngine render.Engine
// Offline mode, if True then the updates check in MainScene is skipped.
OfflineMode bool
// Globally available Flash() function so we can emit text to the Doodle UI. // Globally available Flash() function so we can emit text to the Doodle UI.
Flash func(string, ...interface{}) Flash func(string, ...interface{})