Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make Way test cases #1675

Closed
fmatthew5876 opened this issue Mar 7, 2019 · 14 comments

Comments

@fmatthew5876
Copy link
Contributor

commented Mar 7, 2019

Test Cases 1: Diagonal movement

  1. Setup a Tile passable right and down only.
Start from Step Result
On the tile Upper left Blocked
On the tile Upper right ok
On the tile Lower left ok
On the tile Lower Right ok
Left of the tile Upper right ok
Left of the tile Lower right ok
Above of the tile Lower left ok
Above of the tile Lower right ok
Up left from the tile Lower right Blocked

Result: Both directions must be blocked to stop movement

  1. Setup blocking tiles as described
Right Of Below Of Step Result
Lower Right Ok
Blocked Lower Right ok
Blocked Lower Right ok
Blocked Blocked Lower Right Blocked

Result: At least 1 of the adjacent tiles must not be blocked to allow movement.

  1. Setup 5 events in a star formation as shown below:

All of these events should be layer=same, trigger=parallel.

Tile Tile Tile
EV05
EV04 EV01 EV02
EV03

Set the code for EV02 to EV05 to Message "N" where N is the event number.

Now set the code of EV01 to a move route with the following movements:

MoveRoute Result
Lower Right 3, 2, 3, 2, 3, 2, 3, 2, 3, 2,
Lower Left 3, 4, 3, 2, 3, 4, 3, 3, 4, 3, 2, 3, 4, 3
Upper Right 5, 2, 5, 2, 5, 2, 5, 2, 5, 2,
Upper Left 5, 4, 5, 2, 5, 4, 5, 3, 5, 4, 5, 2, 5, 4, 5, 4, 5, 2, 5, 4
Right 2, 2, 2, 2, 2, 2, 2
Down 3, 2, 3, 3, 2, 3, 3
Left 4, 2, 4, 3, 4, 2, 4, 4, 2, 4, 3, 4, 2, 4, 4,
Up 5, 2, 5, 3, 5, 2, 5, 4, 5, 2, 5, 3, 5, 2, 5, 5

Result: Vertical direction is checked first!

  1. Lets verify message timing didn't skew our results
Tile Tile Tile
EV08 EV05 EV09
EV04 EV01 EV02
EV07 EV03 EV06

Now change each EV02-EV09 code to

Change Variable N to 1 (where N is the event number)
Enabled Sw1

For each Event EV02-EV09, add a second page activated by SW1 with no code.

Change EV01 to

SetMoveRoute: MOve
Wait 0.1s
Msg: \v[2] \v[3] \v[4] \v[5] \v[6] \v[7] \v[8] \v[9]
MoveRoute Result
Lower Right 0 1 0 0 0 0 0 0
Lower Left 0 1 0 0 0 0 0 0
Upper Right 0 0 0 1 0 0 0 0
Upper Left 0 0 0 1 0 0 0 0
Right 1 0 0 0 0 0 0 0
Down 0 1 0 0 0 0 0 0
Left 0 0 1 0 0 0 0 0
Up 0 0 0 1 0 0 0 0

Result: Vertical is indeed checked first.

  1. For all events EV03-EV09 (Not EV02!), remove the Enable SW1 code
MoveRoute Result
Lower Left 1 1 1 0 0 0 0 0
Upper Left 1 0 1 1 0 0 0 0

Result:

  • Diagonal movement checks vertical (vertical event runs)
  • then checks horizontal. (horizontal event runs)
  • Both failed, so it does not check the diagonal square.
  • EV02 runs, enabling SW1.
  1. Now change EV02-EV09 to layer=below
MoveRoute Result
Lower Left 1 1 0 0 0 1 0 0
Upper Left 1 0 0 1 0 0 1 0

Result: Vertical movement check passes, so horizontal is not checked. Diagonal is checked.

  1. Now change EV03 and EV05 to layer=same
MoveRoute Result
Lower Left 1 1 1 0 0 1 0 0
Upper Left 1 0 1 1 0 0 1 0

Result: Verticals fail, so all 3 tiles checked

  1. Delete the events

On the right edge of a non-looping map, setup the following events

Tile Tile
EV02 EV01
EV03

All 3 events trigger=parallel

EV01 code is SetMoveRoute: ThisEvent, lower right
EV02 code is Message "2"
EV03 code is Message "3"

Now start a new game.

Result: "3" and then "2". Despite the fact that the target diagonal tile is invalid, vertical is still checked.

  1. Now reorganize the events on the bottom edge of the map

On the right edge of a non-looping map, setup the following events

Tile Tile
EV02
EV01 EV03

Now start a new game.

Result: "3" and then "2". Despite the fact that the target diagonal tile is invalid, horizontal is still checked.

  1. Tile event self conflict check

Delete the events

Setup EV01 with layer=below, a TILE graphic (see below), custom move route Move Upper Right

Setup the map like this:

Tile Tile
Player
EV01
TILE Result
With Up direction blocked Moves
With Right direction blocked Moves
With Up and Right blocked Blocked

Result: self conflict check is done, and requires both directions to be blocked.

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 8, 2019

Test Cases 2 - Jumping

Create EV01 with a custom move route Jump, Lower Right, Land

Setup these tiles:

Tile Tile
EV01
Tile with up and left blocked

Result: EV01 jumps onto the tile. Jumping ignores directional blocking.

  1. Remove the tile

Create EV02 in this setup

Tile Tile
EV01
EV02

Now test the various layers

EV01 layer EV02 layer Result
below below blocked
below same jumps
below above jumps
same below jumps
same same blocked
same above jumps
same below jumps
above below jumps
above same jumps
above above blocked
  1. Delete EV01

Change EV01 move route to Jump, Land

Place a blocking tile under EV01

Result: EV01 is able to jump in place.

  1. Change EV01 move_type=stationary

Create EV02 as parallel with code Msg: 2
Create EV03 as parallel with code Msg: 3
Setup EV01 as parallel with code

Set EV03 to position of EV01
SetMoveRoute: This Event, Jump, Land

Result: "2", "3" - Jumping in place does not trigger other events to run!

  1. Delete the events.

Setup EV01 with layer=below, and tile graphic that blocks the up direction, with custom move route Jump, Up, Land

Set the player above EV01

Result: EV01 jumps. Self conflict check is not done for jumping.

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 8, 2019

Test Cases 3 - Ship Tests

  1. Setup EV01 to the left of the ship, on the grass.

Set EV01 custom move route Right

EV01 layer EV01 graphic Result
below sprite steps through
same sprite blocked
above sprite steps through
below tile passable above steps through
same tile passable above blocked
above tile passable above steps through
below tile passable steps through
same tile passable blocked
above tile passable steps through
below tile impassable blocked
same tile impassable blocked
above tile impassable steps through
below tile impassable above blocked
same tile impassable above blocked
above tile impassable above steps through
  1. Change EV01 move_type=stationary, trigger=paralel, code SetMoveRoute: Ship, Left

Put the event and the ship in the water. EV01 to the left of the ship still.

EV01 layer EV01 graphic Result
below sprite steps through
same sprite blocked
above sprite steps through
below tile passable above steps through
same tile passable above blocked
above tile passable above steps through
below tile passable blocked
same tile passable blocked
above tile passable steps through
below tile impassable blocked
same tile impassable blocked
above tile impassable steps through
below tile impassable above steps through
same tile impassable above blocked
above tile impassable above steps through
  1. Move the event away

Put a tile to the left of the ship as described:

Upper Tile Result
Passable Tile Blocked
Impassable Tile Blocked
Passable Above Tile Steps Through
Impassable Above Tile Steps Through
  1. Put EV01 to the left of the ship and set the overlap_forbidden flag

Result: Ignores the flag and steps

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 8, 2019

Test Cases 3 - Airhip Tests

  1. Setup EV01 to the left of the airship, on the grass.

Set EV01 custom move route Right

EV01 layer EV01 graphic Result
below sprite steps through
same sprite blocked
above sprite steps through
below tile passable above steps through
same tile passable above blocked
above tile passable above steps through
below tile passable steps through
same tile passable blocked
above tile passable steps through
below tile impassable blocked
same tile impassable blocked
above tile impassable steps through
below tile impassable above blocked
same tile impassable above blocked
above tile impassable above steps through
  1. Change EV01 move_type=stationary, trigger=paralel, code SetMoveRoute: Airship, Left
EV01 layer EV01 graphic Result
below sprite steps through
same sprite steps through
above sprite steps through
below tile passable above steps through
same tile passable above steps through
above tile passable above steps through
below tile passable steps through
same tile passable steps through
above tile passable steps through
below tile impassable steps through
same tile impassable steps through
above tile impassable steps through
below tile impassable above steps through
same tile impassable above steps through
above tile impassable above steps through
  1. Move the event away

Put a tile to the left of the ship as described:

Upper Tile Result
Passable Tile Steps Through
Impassable Tile Steps Through
Passable Above Tile Steps Through
  1. Put EV01 to the left of the airship and set the overlap_forbidden flag

Result: Ignores the flag and steps

  1. Delete the events.

Setup this

Tile Tile
Airship EV03
EV01 EV02

Set all events as trigger=parallel

EV01 SetMoveRoute: Airship, Right
EV02 Message: 2
EV03 Message: 3

Result: Airship moves right, "2", "3" - Airship movement does not trigger event update routines.

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 8, 2019

Test Cases 5 - Tile Events

  1. Setup these events
Tile Tile
EV03 (Water) EV01 (Grass)
EV02 (Grass)

Set EV01 to parallel with code MoveRoute: This, Left
Set EV02 to parallel with code Msg: 2
Set EV03 to parallel with code Msg: 3

Set EV03 layer=below and graphic to a passable tile

Result: EV01 steps left, "3", "2" - EV03 allows passable and updates before EV02

  1. Change EV03's graphic to a passable above tile with layer=below

Result: EV01 is blocked, "3", "2" - EV03 blocks and updates before EV02

  1. Change EV03's lower tile to grass

Change EV03's graphic to an impassable tile with layer=below

Result: EV01 is blocked, "3", "2" - EV03 blocks and updates before EV02

  1. Change EV03's graphic to an impassable above tile with layer=below

Result: EV01 steps , "3", "2" - EV03 updates before EV02

  1. Delete the events

Create EV01 to the left of EV02.
Set EV01 custom move route Move: Right

Set EV01 to sprite graphic, passable tile, or passable above tile:

EV01 layer EV02 layer EV02 graphic Result
below below sprite blocked
below same sprite steps
below above sprite steps
below below pass tile blocked
below same pass tile steps
below above pass tile steps
below below impass tile blocked
below same impass tile steps
below above impass tile steps
below below pass above tile blocked
below same pass above tile steps
below above pass above tile steps
below below impass above tile blocked
below same impass above tile steps
below above impass above tile steps
same below sprite steps
same same sprite blocked
same above sprite steps
same below pass tile steps
same same pass tile blocked
same above pass tile steps
same below impass tile blocked
same same impass tile blocked
same above impass tile steps
same below pass above tile steps
same same pass above tile blocked
same above pass above tile steps
same below impass above tile steps
same same impass above tile blocked
same above impass above tile steps
above below sprite steps
above same sprite steps
above above sprite blocked
above below pass tile steps
above same pass tile steps
above above pass tile blocked
above below impass tile blocked ❗️
above same impass tile steps
above above impass tile blocked
above below pass above tile steps
above same pass above tile steps
above above pass above tile blocked
above below impass above tile steps
above same impass above tile steps
above above impass above tile blocked
  1. Change EV01 to an impassable or impassable above tile graphic
EV01 layer EV02 layer EV02 graphic Result
below below sprite blocked
below same sprite blocked
below above sprite steps
below below pass tile blocked
below same pass tile blocked
below above pass tile steps
below below impass tile blocked
below same impass tile blocked
below above impass tile steps
below below pass above tile blocked
below same pass above tile blocked
below above pass above tile steps
same below sprite steps
same same sprite blocked
same above sprite steps
same below pass tile steps
same same pass tile blocked
same above pass tile steps
same below impass tile blocked
same same impass tile blocked
same above impass tile steps
same below pass above tile steps
same same pass above tile blocked
same above pass above tile steps
above below sprite steps
above same sprite steps
above above sprite blocked
above below pass tile steps
above same pass tile steps
above above pass tile blocked
above below impass tile blocked ❗️
above same impass tile steps
above above impass tile blocked
above below pass above tile steps
above same pass above tile steps
above above pass above tile blocked
  1. Delete the events

Setup these events:

Tile Tile
EV01 EV03
EV02 EV04

Set all as parallel.
For Events EV02, EV03, EV04, make page 2 activated by Sw1 with no code
EV02 Page1 Enable SW1
EV03 Page1 Var3 = 1
EV04 Page1 Var4 = 1
EV01 Page 1 layer=same, sprite graphic, code

Set EV04 position to EV03
SetMoveRoute: This, Right
Wait 0.1s
Msg: \v[3] \v[4]

Now try the following cases for EV03

EV03 layer EV03 tile Result
below pass tile 1 1
same pass tile 1 0
below impass tile 1 1
below impass above tile 1 1

Result: Impassable tile check seems to happen after checking all events. Even though EV03 blocks EV01, EV04 is still checked and updated.

  1. Change EV01 to layer=above
EV03 layer EV03 tile Result
below pass tile 1 1
same pass tile 1 1
below impass tile 1 1
below impass above tile 1 1

Result: Impassable tile check seems to happen after checking all events. Even though EV03 blocks the EV01, EV04 is still checked and updated.

  1. Change EV01 to layer=below and graphic as impassable tile
EV03 layer EV03 tile Result
below pass tile 1 0
same pass tile 1 1
below impass tile 1 0
below impass above tile 1 0

Result: self conflict check aborts the loop at EV03.

  1. Delete the events

Create EV01 and EV02 as below.

Setup EV03 as autostart Move EV01 to EV02; Erase Event

Try to step on the tile containing EV01 and EV02

Tile EV01 graphic EV02 graphic Result
Grass pass tile impass tile blocked
Grass impass tile pass tile steps
Grass impass tile sprite blocked
Grass sprite impass tile blocked
Grass pass tile impass above tile blocked
Grass impass above tile pass tile steps
Grass impass above tile sprite steps
Grass sprite impass above tile steps
Water sprite pass tile steps
Water pass tile sprite steps
Water pass tile pass above tile blocked
Water pass above tile pass tile steps

Result: Highest Event ID tile sprite with layer=below wins

  1. Delete all events

Setup EV01 as layer=below with a blocking tile. put it on grass

Setup EV02 as trigger=action with code SetMoveRoute: EV01, Through On

Talk to EV02, then try to step on EV01

Result: Player can step through EV02. So through

  1. Put EV01 on water

Talk to EV02, then try to step on EV01

Result: blocked by the water

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 8, 2019

Test Cases 6 - Airship Landing

  1. Can the airship land?
Lower Tile Landable Lower Tile Passable Upper Tile or Event Result
Landable pass pass yes
Landable pass impass no
Landable pass pass above yes
Landable pass impass above no
Landable pass Any event no
Landable impass pass no
Landable impass impass no
Landable impass pass above no
Landable impass impass above no
Not Landable impass pass no
Not landable impass impass no
Not landable impass pass above no
Not landable impass Any event no
Not Landable pass pass no
Not landable pass impass no
Not landable pass pass above no
Not landable pass Any event no
Landable pass pass by only 1 direction yes
  1. Can the airship land on events with these flags?
Flag Result
through No
No active page? Yes
!active Yes
@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 8, 2019

Test Cases 7 - Tile Events blocking you from starting

  1. Setup these events:
Tile Tile Tile Tile
EV02 EV01 EV04 EV03

Set EV02, EV03, EV04 as parallel, layer=same

EV01 as layer=below, graphic with a tile not passable on the right
EV02 parallel SetEventLocation: This event to EV01; SetMoveRoute: This, Right
EV03 parallel Msg: 3
EV04 parallel Msg: 4

Result: EV02 is stuck, "3", "4".

A tile event preventing you from starting to move aborts the loop early. We don't check collisions on any events.

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 8, 2019

@CherryDT

How does the GetOnOffVehicle event command work exactly? More specifically what is the timing?

Lets say EV01 is parallel and does a GetOnOffVehicle command.

Will this command execute immediately right there in the intepreter? Forcing the player to collision check against events right then and there?

Or does it somehow set a hidden flag and get deferred until the player's update loop and then collision checked then?

Does this use the same collision routine as stepping/jumping or is it different?

Basically I want to know if and how this command's collision check could cause event update routines to happen out of order.

@CherryDT

This comment has been minimized.

Copy link

commented Mar 8, 2019

I'm not sure, but I think it's handled immediately. And it's the same collision check (once verified that the action of boarding/exiting a vehicle is actually possible right now)

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 8, 2019

Test Cases 8 - processed flag

  1. Setup common parallel event
Loop:
  OpenSaveMenu

Create EV01

Save player processed boat processed ship processed airship processed EV01 processed
1 0 0 0 0 1
2 1 0 0 0 1

Result: Player doesn't update on first save. Vehicles not on map so never updated.

  1. Now put all 3 vehicles on the map
Save player processed boat processed ship processed airship processed EV01 processed
1 0 0 0 0 1
2 1 1 1 1 1

Result: Player and vehicles don't update on first save.

  1. Now put EV01 to the left of the player, and set EV01 custom move route to Right
Save player processed boat processed ship processed airship processed EV01 processed
1 1 0 0 0 1
2 2 1 1 1 1

Result: collision causes player to update on first save

  1. Now put EV01 to the left of the boat
Save player processed boat processed ship processed airship processed EV01 processed
1 0 1 0 0 1
2 1 2 1 1 1

Result: collision causes boat to update on first save

  1. Now put EV01 to the left of the ship
Save player processed boat processed ship processed airship processed EV01 processed
1 0 0 1 0 1
2 1 1 2 1 1

Result: collision causes ship to update on first save

  1. Now put EV01 to the left of the airship
Save player processed boat processed ship processed airship processed EV01 processed
1 0 0 0 1 1
2 1 1 1 2 1

Result: collision causes airship to update on first save

  1. Set EV01 to stationary

Change the common event to

OpenSaveMenu
OpenSaveMenu
Teleport to other map with no events
Loop:
  OpenSaveMenu
Save player processed boat processed ship processed airship processed EV01 processed
1 0 0 0 0 1
2 1 1 1 1 1
3 1 1 1 1
4 1 1 1 1

Result: Vehicle processed flags are not cleared when they are off map. Player processed flag is not cleared, despite not being updated on first save after teleport

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 10, 2019

Test Cases 9 - Boat/Ship Disembark

  1. Setup these tiles:
Tile Event
Grass Player
Water Boat
Grass Ship
Water

Start a new game and board the boat, face down, and hit ENTER to disembark

Result:
Player disembarks ontop of the ship. Normally the player is not allowed to step on the same tile as the boat or ship, even if they are on the same tile. But for disembark it is allowed.

This seems to indicate that vehicle disembark uses a different collision routine.

  1. Setup these tiles:
Tile Event
Grass Player
Water Boat
Grass EV01 with layer=same
Water

Setup EV02 with trigger=action and code SetMoveRoute: Player, Through On

Board the boat, try to move the boat out of the water, face down, and try to disembark

Result: Despite having the through flag set, the player is not allowed to disembark into an obstacle. Also, while boarding the vehicle, the players through flag is ignored when the vehicle moves.

  1. Change EV02 code to
SetMoveRoute: Player, Through On
SetMoveRoute: Boat, Through On

Board the boat, try to move around, and then try to disembark into the obstacle

Result: With the boat's through flag set, now the boat is able to move anywhere. However the player is still prevented from disembarking onto obstacles.

  1. Put the ship and airship in the water.

Board the board and try to step over the ship or airship

Result: Boat cannot step onto same tile as ship and airship

  1. Disembark table

What is the player allowed to disembark onto?

Tile Event layer Event graphic Result
Blocked No
pass Yes
pass below sprite Yes
pass same sprite No
pass above sprite Yes
block below sprite No
block same sprite No
block above sprite No
pass below pass tile Yes
pass same pass tile No
pass above pass tile Yes
block below pass tile Yes
block same pass tile No
block above pass tile No
pass below pass above tile Yes
pass same pass above tile No
pass above pass above tile Yes
block below pass above tile No
block same pass above tile No
block above pass above tile No
pass below impass tile No
pass same impass tile No
pass above impass tile Yes
block below impass tile No
block same impass tile No
block above impass tile No
block ship ship No
block airship airship No
pass ship ship Yes
pass airship airship Yes
  1. Setup thes tiles
Tile Event
Grass Player
Water Boat
Grass EV02 with layer=same
Grass

Setup EV01 as parallel

If boat is boarded:
  Wait 0.1s  
  SetMoveRoute; Player, Turn Down
  Wait 0.1s
  GetOnOffVehicle
  SetMoveRoute: EV02, Down
  EraseEvent

Result: EV02 moves and player does not disembark

  1. Change EV01 to
    Setup EV01 as parallel
If boat is boarded:
  Wait 0.1s  
  SetMoveRoute; Player, Turn Down
  Wait 0.1s
  SetMoveRoute: EV02, Down
  Wait 0.0s
  GetOnOffVehicle
  EraseEvent

Result: EV02 moves and player disembarks

Conclusions

Disembarking the ship is very similar to normal collision but there appears some differences:

  • Events do not update out of order to move out of the way
  • Self collision with the current tile checks are not done
  • If an event is in the way of your disembark has the through flag, the flag is ignore and you're still blocked.
  • Collision checks against other vehicles are not done.
@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 10, 2019

Test Cases 10 - Tile events and through

  1. Tile graphics and through

Setup EV01 as trigger=action

Transfer EV03 to E04
SetMoveRoute: *THROUGH*

Create EV03 and EV04 as layer=below. Put EV03 on a grass tile.

Lower Tile EV03 Graphic EV03 Through EV04 graphic EV04 through Result
pass impass tile 0 impass tile 0 blocked
pass impass tile 0 impass tile 1 blocked
pass impass tile 1 impass tile 0 blocked
pass impass tile 1 impass tile 1 pass
pass pass tile 0 impass tile 0 blocked
pass pass tile 0 impass tile 1 pass
pass pass tile 1 impass tile 0 blocked
pass pass tile 1 impass tile 1 pass
pass impass tile 0 pass tile 0 pass
pass impass tile 0 pass tile 1 blocked
pass impass tile 1 pass tile 0 pass
pass impass tile 1 pass tile 1 pass
  1. Now put EV03 on a water tile
Lower Tile EV03 Graphic EV03 Through EV04 graphic EV04 through Result
blocked pass tile 0 pass tile 0 pass
blocked pass tile 0 pass tile 1 pass
blocked pass tile 1 pass tile 0 pass
blocked pass tile 1 pass tile 1 blocked
blocked pass tile 0 impass tile 0 blocked
blocked pass tile 0 impass tile 1 pass
blocked pass tile 1 impass tile 0 blocked
blocked pass tile 1 impass tile 1 blocked
blocked impass tile 0 pass tile 0 pass
blocked impass tile 0 pass tile 1 blocked
blocked impass tile 1 pass tile 0 pass
blocked impass tile 1 pass tile 1 blocked

Conclusion

The through flag removes the event from tile consideration.

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 10, 2019

Test Cases 11 - Events collide against vehicle while boarded behavior.

  1. Setup EV01 as parallel with this code:
Wait 0.1s
SetMoveRoute: EV02, Skip, Right
SetMoveRoute: Player, Right
Erase Event

Setup EV02 as layer=same setup tiles like

Tile Tile Tile
EV02 (Grass) Player (Grass) (Grass)

Result: EV02 and player move right.

EV02 move route triggers player update to run and move the player.

  1. Change EV01 to this:
Wait 0.1s
SetMoveRoute: EV02, Skip, Right
SetMoveRoute: Boat, Right
Erase Event

Now setup the tiles like this:

Tile Tile Tile
EV02 (Grass) Boar (Grass) (Water)

Result: EV02 and boat move right.

EV02 move route triggers boat update to run and move the player.

  1. Change EV01 to this:
if boat is boarded:
  Wait 0.1s
  SetMoveRoute: EV02, Skip, Right
  SetMoveRoute: Boat, Right
  Erase Event

Board the boat.

Result: Boat moves, but EV02 does not

EV02 move route triggers boat update to run, but since the boat is boarded the move route is applied to the player. So the boat update routine does nothing, EV02 is blocked, and then the player moves, which moves the boat

Conclusion:

When vehicle is boarded, the player is removed from make way calculations. Other events collide against the vehicle and not the player.

@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 10, 2019

Test Cases 12 - Boat / Ship Embark

  1. What prevents embarking the ship?

The ship cannot be embarked if certain conditions hold on the current tile.

Tile Event layer Event graphic Result
Passable Yes
Not passable No
Passable same ANY yes
Passable below pass tile yes
Passable below pass above tile yes
Passable below impass tile no
Passable below impass above tile yes
Not Passable below pass tile yes
Not Passable below pass above tile no
Not Passable below impass tile no
Not Passable below impass above tile no

Result: Embark does a current tile check (including event tiles) before allowing the action to happen.

  1. Use SetVehicleLocation to put the boat one tile past the edge of the map (x=20).

Walk to the edge of the map and attempt the board the vehicle

Result: Player boards vehicle on the edge! (x=19) ❗️

This was referenced Mar 11, 2019
@fmatthew5876

This comment has been minimized.

Copy link
Contributor Author

commented Mar 12, 2019

Test Cases 13 - SyncWithPlayer behavior

  1. Set these tiles
Tile Tile
Player / Grass
Boat / Water EV02 / Grass

Setup EV01 as parallel

If boat is driven
  Wait 0.4s
  SetMoveRoute: EV02, Left
  SetMoveRoute: Player, Left
  Loop:
    OpenSaveMenu

Board the boat

Save player stop count player remaining step boat stop count boat remaining step EV02 stop count EV02 remaining step
1 0 224 0 224 65536 0
2 0 192 0 192 65536 0

On the first save, EV02 collides with the boat, causing it to update before Player. Despite this, RPG_RT still animates the boat movement properly.

  1. Set these tiles
Tile Tile
Player / Grass EV02 / Grass

Setup EV01 as parallel

SetAirship to Player
Get On/Off Vehicle
OpenSaveMenu
Wait 0.5s
OpenSaveMenu
SetMoveRoute: Player, Left
SetMoveRoute, EV02, Left
OpenSaveMenu
OpenSaveMenu
EraseEvent
Save player stop count player remaining step airship stop count airship remaining step EV02 stop count EV02 remaining step remaining ascent
1 0 0 0 0 1 0 256
2 31 0 0 0 32 0 8
3 65536 0 0 0 0 240 0
4 0 192 0 129 0 224 0

Result:

  • Save 3
    • EV01 sets move route on player and airship
    • EV02 tries to move left, collides with airship
    • Airship update routine runs early, does nothing
    • Player update routine runs
      • remaining_ascent > 0, so doesn't process move route and instead increments stop_count from 65535 to 65536
      • Animates remaining_ascent from 8 to 0
  • Save 4
    • EV02 moves
    • Player/airship moves since remaining_ascent is now 0

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 12, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 12, 2019

@fdelapena fdelapena added this to the 0.6.1 milestone Mar 12, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 12, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 12, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 13, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 13, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 17, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 17, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 18, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 18, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 26, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 26, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 31, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Mar 31, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Apr 3, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Apr 3, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Apr 3, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Apr 3, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Apr 6, 2019

fmatthew5876 added a commit to fmatthew5876/Player that referenced this issue Apr 6, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants
You can’t perform that action at this time.