Free Hero Mesh

Changes To Features
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 "Features" between 2018-03-25 17:35:36 and 2018-03-25 17:40:51

10
11
12
13
14
15
16
17

18
19
20
21
22
23
24
10
11
12
13
14
15
16

17
18
19
20
21
22
23
24







-
+







  *  Maximum grid size is up to 64 by 64. The level still stores the maximum size for that level which may be less than that; objects cannot be created or move outside of the maximum area defined by the level (29 by 21 for all converted levels).
  *  Many attributes are now signed 32-bit numbers. This means you can for example define objects with a negative Weight or Volume.
  *  All values now include a type. This avoids some of the problems with improper puzzles<sup>1</sup>, and prevents segfaults, since pointers to objects are stored with the generation number.
  *  AltImage and GlobalBool and ExplainDeath are no longer available. This avoids problems with improper puzzles. Instead they are converted into constants (0 for AltImage and GlobalBool, 1 for ExplainDeath). There is a AltImage setting, but it is not used by class codes; it is used to select which picture to load if multiple pictures of an appropriate size are available.
  *  WinLevel ends execution of all class codes, and does advance the level (or a user setting may change this).
  *  GotoLevel and Link no longer exist; both are replaced with a new instruction called LoseLevel.
  *  PopupMisc() is no longer available; it is converted into "Misc1 Misc2 Misc3 (PopUp 2)", which does the same thing.
  *  Animations are handled differently, in order to avoid improper puzzles.<sup>2</sup>
  *  Animations are handled differently, in order to avoid improper puzzles.<sup>2,3</sup>
  *  Signed comparison and division operators are now available, although the unsigned ones still exist and are used by converted puzzle sets.
  *  The Level global variable works differently. Instead of being the zero-based level number, it is a 16-bit number which is defined by the level itself and does not change if the levels are reordered (you can use it as an extra parameter to mean whatever you want in the puzzle set). Converted levels retain their existing value though.
  *  LevelCount is no longer available and is converted to -1 (because converted puzzle sets always use unsigned comparison operators, it should not make a mistake).
  *  PuzzleSetNumber is no longer available; all references to it in class codes are replaced by its value at the time of conversion.
  *  IgnoreKey() does some things to avoid improper puzzles and bugs.
  *  You can now access class attributes without needing to create an object of that class. (Having typed values helps with this.)
  *  Global definitions are now possible, including global variables, global functions, and default message codes.
39
40
41
42
43
44
45

46
47
48
49
50
51
52
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53







+







  *  IntMove and ,IntMove command which calls the internal Move() function without initializing Inertia.
  *  MoveTo and ,MoveTo commands which call the internal MoveTo() function without triggering the JUMPED message.
  *  PopupModal and (PopupModal) commands, which can be used to create modal popups that block execution.
  *  Cleanup phase triggers.
  *  Assassinate and ,Assassinate commands to stealthily destroy an object without triggering the DESTROY and DESTROYED messages.
  *  QueueInput command, which can be used to force a given input next turn automatically without the player entering it or it being entered into the move list (before the player gets another turn).
  *  QueueMessage and ,QueueMessage command to insert triggers before the end phase.
  *  Ability to define default message actions for any class without its own message code, as well as to define your own global variables, and global functions which can be called by any class.

A compatibility mode is available to disable many things in order to make it more compatible in many ways.

<h2>Bug Fixes</h2>

There are also several bugs that Free Hero Mesh would correct.

61
62
63
64
65
66
67


62
63
64
65
66
67
68
69
70







+
+
  *  Changing the density of or otherwise tampering with the density of the backmost object can cause problems (including memory leaks and GPF).

<h2>Footnotes</h2>

<sup>1</sup> "Improper puzzles" means that the operation of the puzzle can be affected by things that it is not supposed to be affected by, such as: randomness, timing, internal numbers assigned to classes/messages/objects, level reordering, animations, etc.

<sup>2</sup> It may be necessary to figure out how to properly handle Roller animations (and possibly the irregular Hero animations) in this way. Even if such problems occur, the only thing expected to happen is an improper display; the puzzle would otherwise still work.

<sup>3</sup> Some puzzle sets may use object pointers as random number seeds for doing animation. This is no longer supported, although the Lava_bubble class in Hero Defiant does not do this, so it can still work.