increpare / PuzzleScript

Open Source HTML5 Puzzle Game Engine
MIT License
903 stars 159 forks source link

right [ horizontal TestObject1 | perpendicular TestObject1 ] -> [ perpendicular TestObject1 | ] produces an error #498

Closed increpare closed 3 years ago

increpare commented 3 years ago

expect the following ambiguous words to cause problems:

vertical, horizontal, parallel, perpendicular, orthogonal, moving

increpare commented 3 years ago
title Simple Block Pushing Game
author David Skinner
homepage www.puzzlescript.net

debug

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

Background
LIGHTGREEN

Player
Black 

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

. = Background
P = Player

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

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

Background
Player

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

right [ horizontal Player | perpendicular Player ] -> [ perpendicular Player | ]

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

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

.......
...p...
.......
increpare commented 3 years ago

even worse, with

right [ vertical Player | perpendicular Player ] -> [ perpendicular Player |  ]

we get

(40) RIGHT [ up player | up player ] -> [ up player | ]
(40) RIGHT [ down player | up player ] -> [ down player | ]
(40) RIGHT [ up player | down player ] -> [ up player | ]
(40) RIGHT [ down player | down player ] -> [ down player | ]

we'd expect the movements from the right player to be transferred to the left one, but that's not what happens

increpare commented 3 years ago

maybe the solution is before the disambiguation phase to mark what things on the right should be deduced from what things on the left (if they have the same position, for instance, or if they're only mentioned once on the LHS), and the follow that through after

increpare commented 3 years ago

right [ moving Player ] [ orthogonal crate ] -> [ orthogonal player ] [ crate ]

seems to work though, producing

(84) DOWN [ down player ] [ up crate ] -> [ up player ] [ crate ]
(84) DOWN [ left player ] [ up crate ] -> [ up player ] [ crate ]
(84) DOWN [ right player ] [ up crate ] -> [ up player ] [ crate ]
(84) DOWN [ action player ] [ up crate ] -> [ up player ] [ crate ]
(84) DOWN [ up player ] [ down crate ] -> [ down player ] [ crate ]
(84) DOWN [ down player ] [ down crate ] -> [ down player ] [ crate ]
(84) DOWN [ left player ] [ down crate ] -> [ down player ] [ crate ]
(84) DOWN [ right player ] [ down crate ] -> [ down player ] [ crate ]
(84) DOWN [ action player ] [ down crate ] -> [ down player ] [ crate ]
(84) DOWN [ up player ] [ left crate ] -> [ left player ] [ crate ]
(84) DOWN [ down player ] [ left crate ] -> [ left player ] [ crate ]
(84) DOWN [ left player ] [ left crate ] -> [ left player ] [ crate ]
(84) DOWN [ right player ] [ left crate ] -> [ left player ] [ crate ]
(84) DOWN [ action player ] [ left crate ] -> [ left player ] [ crate ]
(84) DOWN [ up player ] [ right crate ] -> [ right player ] [ crate ]
(84) DOWN [ down player ] [ right crate ] -> [ right player ] [ crate ]
(84) DOWN [ left player ] [ right crate ] -> [ right player ] [ crate ]
(84) DOWN [ right player ] [ right crate ] -> [ right player ] [ crate ]
(84) DOWN [ action player ] [ right crate ] -> [ right player ] [ crate ]

Is there a difference between how moving/orthogonal is handled and how vertical/horizontal are handled?