Free Hero Mesh

Changes To Compatibility notes
Login
This is a mirror of the main repository for Free Hero Mesh. New tickets and changes will not be accepted at this mirror.

Changes to "Compatibility notes" between 2019-08-02 00:57:13 and 2020-12-05 08:05:53

12
13
14
15
16
17
18

19
20
21
22
23
24
25
26
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27







+








  *  HeightAt (and probably also VolumeAt) ignores objects with the VisualOnly flag set (and probably also objects with Destroyed flag set).
  *  Destroyed objects won't move (perhaps this is checked in the internal MoveTo() function), and always returns 0 (failed).
  *  POSTINIT message is sent evento an object which is created during INIT. (However, since broadcasts are in the reverse order of creation, creating an object during POSTINIT will not cause the new object to receive a POSTINIT message.)
  *  Create: Destroying the object blocks MSG_CREATED and other messages. If the object is destroyed before Create returns, then it returns zero.
  *  FLOATED messages are sent in order from bottom to top, presumably using ObjAbove; moving the object uses the above the new location.
  *  If the object moving is VisualOnly, then MoveTo() won't send the SUNK/FLOATED messages to any objects. (This does not apply to created objects; if you create an object and set it VisualOnly in the MSG_CREATE block, it will still send the SUNK/FLOATED messages.)
  *  The trigger phase that sends ARRIVED/DEPARTED/MOVED messages is bottom to top, and it seems to remember the list of objects; perhaps, at each location, make a list of objects at that location, before sending any messages.
  *  Broadcasts do not count objects that do not contain any message blocks, nor are objects with the OF_DESTROYED flag counted. (Perhaps, when OF_DESTROYED is set, also remove the object from the linked list of objects.)

For moving objects (with the Move command), here is a separate list specifically for that:
  *  If you use Move(Self,constant_direction) then instead of Inertia=Strength it does Inertia+=Strength. In Free Hero Mesh, this is handled in the converter, which when finding such an instruction in the P-code, decompiles it into a different instruction due to this different behaviour.
  *  ObjF seems to be found just after the "restart:" label (prossibly at the beginning of the "if dir is" blocks, since the logic to find ObjRF and so on will differ). The "for( each object at ObjF's location )" actually starts at the topmost object (ObjF), and then on each iteration, looks below (as the ObjBelow() function does). Probably this is also true of ObjR, ObjRF, etc. Changes to LastDir have no effect on this movement, and LastDir is not reset if the move is restarted.
  *  Also at the "restart:" label, when ObjF is found, it also computes and remembers HeightAt(ObjF.Xloc,ObjF.Yloc). This is used rather than ObjF.Height below (this seems to be a mistake in the documentation).
  *  Skip shoving if target is VisualOnly (or Destroyed, probably).
  *  Where it says "if( EachObj.Height > 0 )", it probably should be "if( EachObj.Height > 0 AND (NOT obj.VisualOnly) AND (NOT obj.Destroyed) )"; note that it checks the VisualOnly and Destroyed of the object trying to move, and not EachObj (if those flags are set for EachObj, then ObjBelow() will already skip that object).
  *  The documentation for HSG_HIT says that bit15 is reserved. Its actual effect is as described in the pseudocode for the internal Move() function, but also see above about the "restart:" label.