GithubHelp home page GithubHelp logo

auroriax / puzzlescriptplus Goto Github PK

View Code? Open in Web Editor NEW

This project forked from increpare/puzzlescript

33.0 33.0 4.0 21.61 MB

Puzzlescript Plus: Open Source HTML5 Puzzle Game Engine (with lots of extra functionality)

Home Page: https://auroriax.github.io/PuzzleScript/

CSS 2.41% HTML 4.40% JavaScript 92.78% Go 0.20% Batchfile 0.01% Python 0.20%
puzzlescript

puzzlescriptplus's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

puzzlescriptplus's Issues

Weird graphical glitch/crash on mobile after loading a level

As reported in #35: https://itch.io/post/5925685

Whenever I start a level it looks like this. I need to press Restart to actually see and play the level. Sometimes it will stop responding and ends up crashing. I entered now the menu and didn't have any issues with it.

The level looks weird and stretched out. It could be a bug with the custom PS+ fork this developer is using, I'm noting it down here in case the root problem ends up being in this repo.

Look into desktop builds

Desktop PS sounds like it could be very useful in some cases. Maybe I want to add some features (e.g. exporting and importing files from disk, opening some windows in new tabs) but the actual build can probably be made through Electron with a Github action with minimal configuration changes.

Use case would mostly be to make games without an internet connection and the ability to lock into a certain version of PS and making it easier to roll back to a specific version.

Definitely a long term goal but something that'll be really interesting to look into!

Expand event system

This is an undocumented feature for in the latest release (so this may change, use with care!), but PS+ will now throw some events on the document so it becomes easier to listen to those events from native JS code. You can listen to psplusGameStarted, psplusLevelLoaded, and psplusLevelRestarted, with the latter two passing the level number as detail. Ideally I want to expand on this a bit more, by adding more events, deciding from which component to fire the events (probably the canvas instead of the document, and document it properly (also explaining the use cases).

For example, this would fire a console message each time a level was started:

document.addEventListener("psplusLevelLoaded", LevelStartFunction);

function LevelStartFunction(e) {
    var level = e.detail;
    console.log("Wow! You're already at level " + level + "!");
}

Accidentally pushed to master branch, need to fix it, then set up master branch protection

Accidentally pushed to master instead of develop, whoops! So what is on master at the moment is not live in the web editor yet. I can't fix this right away, and additionally I need to look into protecting the master branch so that I can't accidentally push towards it.

(And whatever's on there has not fully been tested yet, so please take care if you already want to use it!)

Attempt to catch up to vanilla Puzzlescript

I am not going to update PS+ to have all the latest vanilla Puzzlescript changes (vanilla puzzlescript is at v1.7 while PS+ is at v1.6). The reason for this is that I simply expect a lot of merge conflicts and resulting bugs in the engine, as most forks PS+ uses also fork from version 1.6. The update is certainly possible, but it will take a significant amount of effort to pull it off, which is why I'm considering it out of scope for now.

However, there have been a couple of nice changes made there that I actually want to have in PS+:

  • Improved default font increpare#276 and related commits/fix pull requests
  • Don't tick realtime when tab is not in focus increpare@95b7086
  • Probably more? I should investigate. If you're reading this, feel free to add suggestions (with links please)!

I should make sure to cherry pick these. I should probably also document these in case it ever becomes relevant.

mobile + level_select + mouse_left crashes on level select screen

hello! I'm trying to debug why https://pancelor.itch.io/like-a-hot-knife-through-butter crashes on mobile in the level select screen

I was able to get android remote debugging sort of set up. I don't really know what I'm doing, but I was able to get a stack trace of a crash! It ends with getTilesTraversingPoints (in src/js/inputoutput.js) but the code is minified and this dev setup I have is pretty awful so I haven't been able to dig much deeper

Here's the stack trace, from firefox mobile:

Script terminated by timeout at:
getTilesTraversingPoints@https://v6p9d9t4.ssl.hwcdn.net/html/5770877/index.html:11946:5502
mouseAction@https://v6p9d9t4.ssl.hwcdn.net/html/5770877/index.html:11946:8753
mouseMove@https://v6p9d9t4.ssl.hwcdn.net/html/5770877/index.html:11946:12629
EventListener.handleEvent*@https://v6p9d9t4.ssl.hwcdn.net/html/5770877/index.html:11946:19526

you can crash my game pretty reliably by going to the level select menu, pressing on the screen for ~0.5 seconds and then swiping (well, it crashes mobile chrome; on mobile firefox it hangs for a minute and then starts working again.)


more info / theories

I noticed by messing around with basic puzzlescriptplus examples that the mobile menu behavior in my game is very odd - if you make a game with level_select and no mouse_left, you can swipe in the menu to move the selection cursor around and tap to activate the cursor (like a simulated keyboard) but in my game (which has level_select and also mouse_left) the mobile controls in the level select menu act more like a mouse rather than a simulated keyboard -- you can click on things directly. This is pretty weird and feels wrong, and I bet it's related to this crash.

I think the combination of level_select and mouse_left in the prelude is causing getTilesTraversingPoints to get called differently than it should be (maybe it shouldn't be called at all?) and it's entering some sort of infinite loop, probably because the level select screen doesn't have a normal grid like actual levels.

my game does use a custom fork of puzzlescriptplus (mine deals with sprites larger than the grid size; I haven't published it anywhere b/c it's quite janky. see my devlog for more details) but I don't think that's relevant.

Bring Github Wiki documentation into normal PS documentation

Right now the information is too scattered. Originally I decided against bringing the documentation into the main PS documentation on this fork to prevent merge conflicts in the future, but I've changed my mind and think it would be better there.

How I'm envisioning it is that newly added stuff for PS+ has a plus-shaped icon to differentiate that its new.

Need to index which pages to change/add based on the pages in the current wiki, and how to redirect (deprecate) the wiki & link to the documentation. (Acceptance Criteria: current wiki-based documentation is deprecated and the majority of it's contents is added to the actual PS docs, fixing any links broken in the meantime & also updating the repo readme)

Add different way of level_select_unlocked_ahead

Currently the implementation allows you to have e.g. with a level_select_unlocked_ahead of 3 to play lvl 1, 2, and 3 at the start of the game. If you beat 1, you unlock 4, but if instead you beat 2, you unlock 4 and 5, and so on.

Although I can understand why it was implemented this way, I feel it would be more useful for my use cases if the unlocked ahead count would not reset after each solved level. So in the example above, beating lvl 1 would unlock 4, but beating 2 and 3 would only unlock 4, beating any of those would unlock 5, etc.

Should hopefully be an easy fix, maybe just introduce a new flag that toggles the behavior?

Make it more obvious that things in menus can be clicked when mouse controls are enabled

As suggested in #35 , make it more self-evident that menu items in mouse-enabled games can be clicked (instead of swiped) by e.g. feedback on hover.

ahh I didn't realize the mouse-like behavior was a conscious choice... I think it would help me if there was some sort of "css :hover" style applied to anything clickable. i.e, when you're hovering over a menu option if the selection cursors (the #s) moved to where you're currently hovering.

Syntax highlighting can get weird for big projects

It seems that if you scroll too quickly the syntax highlighting can get weird & can cause ctrl+clicking a level to crash in some cases:

afbeelding

Could it break because I changed the syntax highlighing code?

Twiddled background & text color don't change back after solving a level if there is a message in-between levels

Can be reproduced in https://stingby12.itch.io/simple-parallel-universe-game level 3, or with this code (edited version of the twiddle example):

title Runtime Metadata Twiddling v2
author Tom H.
homepage https://auroriax.github.io/PuzzleScript//Documentation/plus_runtime_metadata_twiddling.html

runtime_metadata_twiddling
runtime_metadata_twiddling_debug
realtime_interval 0.2

level_select

========
OBJECTS
========

Background
LIGHTGREEN GREEN
11111
01111
11101
11111
10111


Target
DarkBlue
.....
.000.
.0.0.
.000.
.....

Wall
BROWN DARKBROWN
00010
11111
01000
11111
00010

PlayerNormal
Black Orange White Blue
.000.
.111.
22222
.333.
...3.

PlayerBlink
Black Orange White Blue
.000.
.111.
22222
.333.
.3...

Crate
Orange Yellow
00000
0...0
0...0
0...0
00000

SlowBtn s
lightblue white
00000
00000
01110
00000
00000

FastBtn f
red white
00000
00100
01110
00100
00000

ZoomBtn z
Yellow Black
00000
01110
01010
01110
00000

FlickBtn t
Brown white
01010
11111
01010
11111
01010

FastWalkBtn d
lightbrown white
00000
01100
01100
01110
00000

DefaultBtn r
Pink White
00000
01100
01010
01100
00000

WipeButton B
Gray White
00000
01010
00100
01010
00000

UndoBlockButton U
darkgray White
00000
01100
00010
01100
00000

LightModeBtn L
White

DarkModeBtn N
Black

ConveyorRight -
Black White
00000
00100
00010
00100
00000

ConveyorDown /
lightred White
00000
00000
01010
00100
00000

=======
LEGEND
=======

. = Background
# = Wall
P = PlayerNormal
* = Crate
@ = Crate and Target
O = Target

Player = PlayerNormal or PlayerBlink

=======
SOUNDS
=======

Crate MOVE 36772507

================
COLLISIONLAYERS
================

Background
ConveyorRight, ConveyorDown
SlowBtn, FastBtn, ZoomBtn, DefaultBtn, FlickBtn, FastWalkBtn, WipeButton, UndoBlockButton, DarkModeBtn, LightModeBtn
Target
Player, Wall, Crate

======
RULES
======
(Basics)
[ stationary PlayerNormal] -> [action PlayerBlink]
[ stationary PlayerBlink] -> [action PlayerNormal]

[ >  Player | Crate ] -> [  >  Player | > Crate  ]
[ >  Crate | Crate ] -> [  >  Crate | > Crate  ]

(Conveyors: Not all conveyors move as fast)
[ Player ConveyorRight] -> [right Player ConveyorRight] again again_interval 0.5
[ Player ConveyorDown] -> [down Player ConveyorDown] again again_interval 0.1

(Buttons)
[> Player | SlowBtn] -> realtime_interval 0.5
[> Player | FastBtn] -> realtime_interval 0.1

[> Player | ZoomBtn] -> smoothscreen 5x5
[> Player | FlickBtn] -> smoothscreen flick 5x5 3x3

[> Player | FastWalkBtn] -> key_repeat_interval 0.05

[> Player | LightModeBtn] -> background_color #DDDDDD
[> Player | LightModeBtn] -> text_color #222222
[> Player | LightModeBtn] -> message Light mode enabled!

[> Player | DarkModeBtn] -> background_color #222222
[> Player | DarkModeBtn] -> text_color #DDDDDD
[> Player | DarkModeBtn] -> message Dark mode enabled!

[> Player | UndoBlockButton] -> noundo true
[> Player | UndoBlockButton] -> norestart true
[> Player | UndoBlockButton] -> message Muhaha, I've stolen your ability to undo and restart!

(Buttons with special meanings)
(DEFAULT will set the value that this setting was at the beginning of the level)
[> Player | DefaultBtn] -> realtime_interval default
[> Player | DefaultBtn] -> key_repeat_interval default
[> Player | DefaultBtn] -> smoothscreen default

(WIPE will act as if the value was never set & removes it from the metadata)
[> Player | WipeButton] -> realtime_interval wipe
[> Player | WipeButton] -> key_repeat_interval wipe
[> Player | WipeButton] -> smoothscreen wipe

==============
WINCONDITIONS
==============

All Target on Crate
Some Crate

=======
LEVELS
=======

section Testing Grounds
...............
.n.l.....----/.
............./.
.........s.f./.
.....*......./.
.d...o.p.......
...............
...............
...............
.u...z.t...b.r.
...............

section Level 1

message test
####..
#.O#..
#..###
#@P..#
#..*.#
#..###
####..

section Level 2
######
#....#
#.#P.#
#.*@.#
#.O@.#
#....#
######

Custom color palletes

In the prelude you can add color1 ... color16 and use it to reference in object colors instead of a hex number or color name. The idea is that this will make it easier to iterate on colors, especially in games with a lot of sprites. In a way it also complements the sprite cloning feature.

Additionally you would be able to use text_color and background_color in this way as well (not sure if this will play nice with twiddleable stuff though).

Consider adding a way to track state in-between levels

This is a big one. Goto is very cool, but I feel that it is missing a way to pass state between levels. I've been thinking about this off and on recently, mostly because it is a recurring discussion over on the Thinky Puzzle Discord channel, where it came up in a discussion about level selects.

It would allow use cases like this:

  • Walking around a dungeon would allow you to spawn in the correct place in the target level (e.g. exiting the level on the right would spawn you on the left side in the other room)
  • Building level selects as a level of its own!

Could be implemented as such:

  • Some objects (or perhaps entire layers) are "persistent", when the level changes they are spawned again into (approximately) the same location.
    • Alternative suggestion: spawn in sequence starting from the top left corner. To prevent any possible issues with overlapping objects that share a layer.
    • The biggest issue here is how to deal with object placement when the room size changes between levels. Could be mitigated by explicitly designing around this, e.g. the way you are supposed to use object permanence is to only check the existence of permanent object and then using that in your own logic. But I imagine that this gets verbose very quickly.
  • Having variables that persist between levels.
  • Goto can pass an object to the next scene. goto levelName objectName. Spawns in top left corner?
    • But this only seems useful for going from room to room, not for e.g. level selects
  • A rule can be given an condition, such as completed(LevelName), to check if the level with that name was already completed.
    • Probably the cheapest of these to implement.

Mostly when people ask whether this is possible in vanilla PS they are suggested to use zoomscreen or flickscreen. Which I don't think is a bad approach. But can we do better?

Serialization approach also needs to be planned out, I've mostly avoided touching the save games for now but there won't be any way to get around it here :P

Games without `level_select` flag open level select at after the last room

I ran into a weird issue where, after doing a Ctrl+Click on the last level in the editor, and after solving it, it would not toss me back onto the main menu, but instead toss me into an (empty) level select, even though this project does not have the level_select flag or any sections set. I think this only impacts the editor. This was the code I managed to trigger it with:

title PushTOOL
author Tom Hermans [@Auroriax]

========
OBJECTS
========

background .
#444

Player P
Pink
.000.
0.0.0
00000
00000
.000.

Wall #
#222

RedCrate 1
Red

RedThrough 2
#ff000088
0.0.0
.0.0.
0.0.0
.0.0.
0.0.0

BlueCrate 4
Blue

CollapsedL
White
.....
.0...
00...
.0...
.....

ExtendedL
white
.....
0....
00...
0....
.....

NoPushL
white
0....
.....
0....
.....
0....

CollapsedR
White
.....
...0.
...00
...0.
.....

ExtendedR
white
.....
....0
...00
....0
.....

NoPushR
white
....0
.....
....0
.....
....0

Target O
Blue
00000
0...0
0...0
0...0
00000

=======
LEGEND
=======

Crates = RedCrate or BlueCrate
Through = RedThrough

Collapsed = CollapsedL or CollapsedR
Extended = ExtendedL or ExtendedR
NoPush = NoPushL or NoPushR
Symbol = Collapsed or Extended or NoPush

RedPropagation = RedCrate or RedThrough

A = RedCrate and CollapsedL
B = RedCrate and ExtendedL
C = RedCrate and NoPushL

D = RedCrate and CollapsedR
E = RedCrate and ExtendedR
F = RedCrate and NoPushR

=======
SOUNDS
=======

================
COLLISIONLAYERS
================

background
Crates Wall
RedThrough
Collapsed
Extended
NoPush
Target
Player 

======
RULES
======

right [< Player | Crates CollapsedL] -> [< Player Crates ExtendedL | Crates]
right [> Player | Crates ExtendedL | Crates] -> [> Player | | Crates CollapsedL]
right [> Player | NoPushL] -> [Player | NoPushL]

left [< Player | Crates CollapsedR] -> [< Player Crates ExtendedR | Crates]
left [> Player | Crates ExtendedR | Crates] -> [> Player | | Crates CollapsedR]
left [> Player | NoPushR] -> [Player | NoPushR]

[> Player | Crates] -> [> Player | > Crates]

[moving RedPropagation | stationary RedPropagation] -> [moving RedPropagation | moving RedPropagation] (QQQ Cancel if not possible)

[moving Crates stationary Symbol] -> [moving Crates moving Symbol]

late [Player Crates] -> cancel

==============
WINCONDITIONS
==============

All Target on Crates
All Crates on Target
Some Target

=======
LEVELS
=======

...
...


.........
....121..
.p.b121e.
....121..
.........


########
#......#
#.d....#
#..##..#
#...oo.#
#......#
########

UNDO command does not respect NOUNDO prelude flag

e.g. if you do (with realtime toggling enabled):

[ Player ] -> noundo
( to enable undo on action even though it's disabled)()
[ action Player ] -> undo

Then you will be able to undo with action, but not with [Z] or other undo buttons.

Determine if this is expected behaviour (e.g. look at where & how the undo command was first implemented )

Crash when loading a checkpoint when RUNTIME_METADATA_TWIDDLING

Probably it has issues with serializing (or otherwise saving) the metadata object when running checkpoint, causing a crash one it is loaded again. You get it pressing CONTINUE on the title screen, not 100% sure if it can be reproduced by using restart in the game. Once you do, it spams this error:

Screenshot_8

Source code to reproduce this:

title Microban
author David Skinner
homepage www.sneezingtiger.com/sokoban/levels/microbanText.html

runtime_metadata_twiddling

(
My favourite set of sokoban levels - here're the first ten of the Microban set.

I tried contacting this guy, but he seems to have vanished from the net. The levels are in lots of places online, so I'm just chancing my arm by including them.  BUT BE WARNED.
)

========
OBJECTS
========

Background
LIGHTGREEN GREEN
11111
01111
11101
11111
10111


Target
DarkBlue
.....
.000.
.0.0.
.000.
.....

Wall
BROWN DARKBROWN
00010
11111
01000
11111
00010

Player
Black Orange White Blue
.000.
.111.
22222
.333.
.3.3.

Crate
Orange Yellow
00000
0...0
0...0
0...0
00000


=======
LEGEND
=======

. = Background
# = Wall
P = Player
* = Crate
@ = Crate and Target
O = Target


=======
SOUNDS
=======

Crate MOVE 36772507
endlevel 83744503
startgame 92244503

================
COLLISIONLAYERS
================

Background
Target
Player, Wall, Crate

======
RULES
======

[ >  Player | Crate ] -> [  >  Player | > Crate  ]

(breaks reset & continue, black screen)
[ action Player ] -> checkpoint

==============
WINCONDITIONS
==============

All Target on Crate

=======
LEVELS
=======

message level 1 of 10

####..
#.O#..
#..###
#@P..#
#..*.#
#..###
####..

message level 2 of 10

######
#....#
#.#P.#
#.*@.#
#.O@.#
#....#
######

message level 3 of 10

..####...
###..####
#.....*.#
#.#..#*.#
#.O.O#P.#
#########

message level 4 of 10

########
#......#
#.O@@*P#
#......#
#####..#
....####

message level 5 of 10

.#######
.#.....#
.#.O*O.#
##.*P*.#
#..O*O.#
#......#
########

message level 6 of 10

######.#####
#....###...#
#.**.....#P#
#.*.#OOO...#
#...########
#####.......

message level 7 of 10

#######
#.....#
#.O*O.#
#.*O*.#
#.O*O.#
#.*O*.#
#..P..#
#######

message level 8 of 10

..######
..#.OOP#
..#.**.#
..##.###
...#.#..
...#.#..
####.#..
#....##.
#.#...#.
#...#.#.
###...#.
..#####.

message level 9 of 10

#####.
#O..##
#P**.#
##...#
.##..#
..##O#
...###

message level 10 of 10

......#####
......#O..#
......#O#.#
#######O#.#
#.P.*.*.*.#
#.#.#.#.###
#.......#..
#########..

message congratulations!

Tween can cause sprites to disappear while spamming errors in some scenarios

Once you press UP, the sprite disappears and the console will constantly keep throwing errors.

tween_length 0.05

========
OBJECTS

background .
darkgray

playerIdle
black white pink
.....
..2..
.111.
.111.
.0.0.

playerJumping
black white pink
.....
..2..
.111.
01110
.....

=======
LEGEND

player = playerIdle or playerJumping

p = playerIdle

SOUNDS

================
COLLISIONLAYERS

background
player, playerJumping

======
RULES

up [> player] -> [> playerJumping]

==============
WINCONDITIONS

=======
LEVELS

......
......
......
......
...p..

Introduce prelude flags for mouse control preferences

controls_disable_player_movement (controls_force_mouse_input?) Completely blocks all keyboard input, including mobile swipes. Because on mobile, a tap can be percieved as both a mouse event and player movement. However, you must have mouse controls enabled.
Alt: Disable swipes on mobile by default when mouse input is on. Have a flag to enable it again. Likely doesn't cause any existing games to break. controls_enable_player_movement_on_mobile?
controls_disable_swipes Similar to above, but explicitly for swipes, keyboard will still work
controls_mobile_menu_prefer_swipe_controls will prefer swipe controls over mouse controls to control the menus, even when mouse controls would otherwise be enabled for the main game.


controls_disable_player_movement for mouse-enabled games. Can perhaps leverage an existing undocumented tag (no_player or something?)
controls_disable_swipes for mouse-enabled mobile games that still want to offer keyboard support on supporting devices.
controls_menu_prefer_swipes for mouse-enabled games (not super necessary now that the mouse feedback in the level select is a lot better).

Game using mouse on mobile register two actions for a tap

Copied from a chat with minotalen:

all games with mouse controls need this t.handleTap=function(){if(textMode){this.emitKeydown("action")}} otherwise on mobile 1 tap triggers 2 turns 
first the click then action
I guess the if should be if(!mouseMode || textmode){} where mousemode it true if the mouse_left prelude exists

Determine what the correct behaviour here should be.

New default project showing most important PS+ use cases

I see that most games made with PS+ are using only a single feature that's exclusive to PS+. Which is fine (although I generally use all the features that I can!), but might indicate that people have problems figuring out how to use all the features. Although #4 and improving the documentation has helped on this front, I feel it might be helpful to have the default game (when the editor loads for the first time) show a number of the common use cases of PS+.

Additionally, there should be a version of the Blank Project example that is set up with nice defaults for e.g. smooth scrolling, tweening, level select, and such. Maybe a project that has a full prelude list?

I've also had the idea to add an example game as a changelog for PS+, might be a good idea to handle that under this task too?

Easier way of doing custom_font

The current base64 implementation is handy, but can get really unwieldy! I think the best approach might be to include a number of fonts into Puzzlescript (nice tiny monospace fonts like those that I've used for my own games: Monogram, Peaberry, etc., assuming their license allows it & don't bloat the final export size too much) and being able to reference it in custom_font using just their names. This should already cover a majority of use cases for custom fonts, I think.

(Fonts can than also be referred to by number such as the tweens and color palettes)

games on itch with mouse_left won't focus

I think 3e142aa broke something:

  1. make a game with mouse_left but no mouse_right
  2. export and upload to itch
  3. try to undo a move by pressing Z -- you can't
  4. right click -- this finally focuses the game canvas, letting you press Z to undo

This only becomes a problem once it's uploaded to itch and played inside an iframe (I assume the iframe is the relevant thing here) -- the html file works fine if you play it locally

Clean up test cases

Some tests fail on capitalization changes & "The Far Away Danish Pastry..." test also fails for some unknown reason (probably it doesn't handle the comment just before a level incorrectly). Need to clean it up so all tests pass.

Also adding some PS+ tests might be nice to test output for prelude flags & case_sensitive...

[feature] custom text for title screen & message prompts

grafik

When using mouse interaction the title screen texts change to focus on mouse interaction.
I'd like to suggest 3 prelude options: text_titleA, text_titleB and text_message. They would replace the original text, it would be necessary to limit the character count.

My current method is going into the html export and manually replacing the texts..

Add new examples for all the merged forks

I've recently added some examples to the editor for PS+ exclusive functionality, but someone on Discord requested more examples for the functionality of the other forks, and I agree because it can make PS+ much more accessible for people coming from vanilla Puzzlescript. However, most of my own projects are too complex to use as samples, so it might be nice to make some new projects especially for this. I'm adding it as an issue so people can contribute examples (if nobody jumps in that's fine, but it can take a while before I can get around to make all of these myself).

Ideally we'd have at least one example for each merged fork, probably more for complex forks. Here are my ideas:

  • Puzzleclick: Simple paint app that shows how to use all the prelude flags, and a more complex example featuring a simple paper-y puzzle (e.g. 5x5 nonograms or a simple minesweeper variant).
  • smoothscreen: I don't know if we need an example for this since the documentation on this is already really really good. Maybe just add some more smooth_screen buttons to the existing metadata twiddle examples?
  • Dario Zubovic: Take the microban example and add a level select to it, using all the available prelude flags. Then put all the remaining stuff like custom_font and nosave all in another, second example.
  • local_radius: Should demonstrate local_radius and have both local and global rules.

In general examples should be around 300 lines max and generally fit the rest of the puzzlescript examples. These are not strict guidelines, but ideally I'd want something similar to these.

If you want to submit pull requests that's fine, but is is probably better for my workflow of adding stuff to the engine if you just put a share link in the comments here.

Realtime Twiddle bug

Reported on the Thinky Puzzle Game Discord:

 PuzzleScript+ Bug Report: when runtime_metadata_twiddling is on, cancel-ed turns also reset the realtime_interval timer (both manually cancelled turns and stuff that PS automatically cancels i.e. running into a wall). by, say, constantly pressing against a wall, i can do things not otherwise humanely possible in a single realtime tick.

At a glance I don't see where the issue could be with this, so it'll require some digging. Might be a vanilla PS bug that's already fixed there?

[feature] highlight line breaks in messages, align text

For most of my PS games I've been meticulously aligning my messages with trial-and-error. It'd be super helpful to me if there was a prelude option message_align that could be set to center(standard), left and right, with the option to realtime_twiddle during runtime.

Having a visual indicator for where a line breaks in messages happen would be super neat QOL as well (maybe a blue vertical line |?).

Warnings during compilation should not formally be treated as compile failures

e.g. the tween + late rules warning will formally cause compiling to fail even though there's not really a good reason for it, and the game will work regardless, but it does trigger the warning. In PS+ this warning is not shown to the player in exported games, since the HTML template is a little different there.
It feels a little over the top that this throws a big scary error into the console. Also text probably needs to be adjusted to that anyone running into issues will come to the issue tracker instead of mailing Increpare.

<span class="systemMessage">Errors detected during compilation; the game may not work correctly.  If this is an older game, and you think it just broke because of recent changes in the puzzlescript engine, please consider dropping an email to [email protected] with a link to the game and I'll try make sure it's back working ASAP.</span> undefined [ind](https://v6p9d9t4.ssl.hwcdn.net/html/6108370/index.html)

Additionally this would make it easier to add more compile validation for PS+ features that are currently checked at runtime (e.g. level select stuff).

Github-based functionality is broken (sharing, hacking, etc.)

I clicked "share", as a result I got this error and sharing failed (otherwise silently). Probably still a leftover bug from the v1.7 merge.

Uncaught ReferenceError: is_public is not defined
    shareClick toolbar.js:296
toolbar.js:296:2
    shareClick toolbar.js:296

Games to add to gallery

Just making sure I don't forget any! (Feel free to add a comment to this commit if you've made any cool games using PS+!)

https://stingby12.itch.io/ground-night-theme-shenanigans-prototype
https://stingby12.itch.io/simple-parallel-universe-game

Search through the Thinky Puzzle Game discord, look for anything with the auroriax.github.io url and see if any of those games have already been properly released.

Aditionally, I need to make it easier for myself to see if a game was made using vanilla PS and PS+ but I think resolving #19 will mostly suffice for this

case_sensitive is broken

e.g. Microban example with case_sensitive added will cause syntax highlighting in other places in the project to break and throw "unrecognised stuff in the prelude" errors. Probably fails somewhere during parsing (since it does parse the prelude correctly but nothing afterwards)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.