︙ | | |
878
879
880
881
882
883
884
885
886
887
888
889
890
891
|
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
|
+
+
+
+
|
Moved : bool
After a Move instruction successfully moves this object, it will set
this flag. During the trigger phase, it will send the MOVED message
to all objects which have moved; you can set or clear this flag by
yourself if you want to cause it to trigger even though it didn't
move or to not trigger even though it did move.
Moving : bool
This flag indicates that a deferred movement is scheduled for this
object. The direction of movement is specified by the Dir variable.
Player : bool [c] [ro]
If this object is the player. This is used implicitly as the From of
some messages sent by the game engine, and has a few other purposes.
(Normally, a level should have exactly one object of such a class,
although this is not mandatory; any number (including zero) is allowed.)
Shape : int16 [c]
|
︙ | | |
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
|
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
|
-
-
+
+
|
values for the sides that are touching will be compared. If the Sharp
value for one is greater than the Hard of the other, then the object
with insufficient Hardness is destroyed.
Shovable : int16 [c]
Defines what directions the object may be shoved, where bit0 means east,
bit2 means north, bit4 means west, and bit6 means south. Bit1, bit3,
bit5, and bit7 can be used for diagonal shoving; the high 8-bits are
currently unused but may be used in future.
bit5, and bit7 can be used for diagonal shoving. Higher bits are
reserved for future and should not be used.
Stealthy : bool [c]
If this flag is set, then the Arrived and Departed variables of other
objects are not automatically set when this object moves.
Strength : int16/int32 [c]
When this object's code tries to move this or other objects by the use
|
︙ | | |
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
|
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
Similar to Move but adds Strength to Inertia without resetting Inertia.
(The reason this exists is for compatibility with a bug in EKS Hero
Mesh; you probably do not need to use this yourself.)
,Move+ ( obj dir -- bool ) **
As Move+ but for a specified object.
+Move ( dir -- bool ) **
Schedules a deferred move for this object in the specified direction
(which may be absolute or relative). Some things are checked at this
time, while other things are checked at the time that the movement will
be made; its working is different from non-deferred movements. The
result is true if the move was scheduled or false if it isn't. (Note:
Do not confuse +Move with Move+; they are unrelated.)
,+Move ( obj dir -- bool ) **
As +Move but for a specified object rather than necessarily this one.
-Move ( dir -- bool ) **
Cancel a deferred move in the specified direction, and possibly also
other things that are shoved by it. The result will be true if it was
scheduled and successfully removed, or false otherwise.
,-Move ( obj dir -- bool ) **
As -Move but for a specified object rather than necessarily this one.
MoveNumber ( -- number )
The current move number. This is initially zero, and is advanced after
each input phase (before the beginning phase).
MoveTo ( x y -- bool ) **
Teleports this object to the specified coordinates; the MOVING message
(and PLAYERMOVING if applicable) are sent to check if it is allowed.
|
︙ | | |
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
|
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
|
+
+
+
+
+
+
|
from the specified object.
ObjLayerAt ( layers x y -- obj )
Find an object with the given CollisionLayers bits set at that location.
If you specify multiple bits, it finds one with any of those bits. (It
is not possible for there to be more than one such object.)
ObjMovingTo ( x y -- ... )
Push on the stack all objects scheduled to move to the specified X and Y
coordinates. There may be zero or more such objects; you can add a mark
to the stack in order to delimit this list (it won't do so automatically,
since you may be putting multiple lists together).
ObjTopAt ( x y -- obj )
Find the object on the top at the specified location. The result will be
zero if that location is vacant or out of range.
over ( x y -- x y x )
oz? ( any -- bool )
|
︙ | | |
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
|
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
|
+
-
+
+
+
+
+
+
+
+
+
|
Display a percentage sign; does not consume an argument.
=== Messages ===
This section describes when the various standard messages are sent to
objects, and what return values are expected. (Do not confuse CREATE with
CREATED, or DESTROY with DESTROYED, or COLLIDE with COLLIDING; they have
CREATED or DESTROY with DESTROYED; they have different purposes.)
different purposes.)
(Some standard messages are in the names.js file but not used; do not use
them in your own code, since their names and meaning may change later. The
ones listed here are (probably) considered stable, and their numeric value
(used in level files) will (probably) remain unchanged.)
ARRIVED
Sent during the trigger phase if the Arrived value is nonzero. Arg1 is
the saved Arrived value. The Arrived variable will usually be set
automatically; see the section about variables.
BEGIN_TURN
Sent to all objects during the beginning phase (the phase after the
input phase). From is an object with the Player flag (if there is any),
Arg1 and Arg2 are the X and Y coordinates of that object, and Arg3 is
the most recent return value from a KEY message. The beginning phase may
be suppressed; if it is, then the ending phase is also suppressed.
BLOCKED
When scheduling deferred movement, if the moving object is blocked by
another object, then the moving object sends this message to the object
which is blocking it. From is the object attempting to move, Arg1 and
Arg2 are that object's coordinates, and Arg3 is 1 for +Move or 0 for
-Move. Of the return value, bit0 clears the Moving flag (causing the
move to fail), and bit1 causes it to not send any more BLOCKED messages.
COLLIDE
Received when this object is trying to move into a location where there
is a collision, so it can't move there. Of the return value, bit0 means
to prevent the movement (even if the objects are moved out of the way or
destroyed in order to make room), bit1 means to not send any COLLIDEBY
messages, and bit2 means to pretend the move attempt was successful even
if it isn't successful. Even if bit0 is set, that won't prevent sending
|
︙ | | |
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
|
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
attempt is successful even if it isn't (there is no effect for creating
objects; this bit is meaningful only for moves), and bit4 means that if
necessary, it will try to destroy this object to make room. From is the
object attempting to move here, and Arg1 and Arg2 are its location (if
attempting to create an object, then From, Arg1, and Arg2 are all zero).
Arg3 is the class of the object being moved or created.
COLLIDING
Called when deferred movement is being performed if the move cannot
occur due to a collision with some other object. From is the object
that it is colliding with, Arg1 and Arg2 are its location, and Arg3
is the type of collision (0 if this object is trying to move into a
stationary object, 1 if another object is trying to move into this
stationary object, 2 if two objects are trying to move into the same
space, or 3 if two or more objects forming a loop are trying to move
into each other). There is no guarantee that this will only be called
once; sometimes it will be called multiple times for a single collision
or for multiple collisions with the same objects. (TODO)
CONFLICT
Called during scheduling of a deferred move if it is already currently
scheduled to move but in a different direction. Arg1 is the direction
that it is trying to schedule the move in. If the return value is false
then the schedule fails; if true, then it succeeds.
CREATE
Sent when the object is created by the Create instruction. This is done
after the object is created, but before sending any other messages. The
From is the object that created it. The return value will be used as the
Arg3 of the SUNK and CREATED messages it might send if appropriate. From
is the object which executed the Create instruction to create it.
|
︙ | | |