Free Hero Mesh

Check-in [b572dd834c]
Login
This is a mirror of the main repository for Free Hero Mesh. New tickets and changes will not be accepted at this mirror.
Overview
Comment:Implement bit23 for HIT/HITBY to prevent cascading after shoving
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: b572dd834cb0dd152d7a3b1d2734849225d9dbc3
User & Date: user on 2021-03-21 20:34:45
Other Links: manifest | tags
Context
2021-03-23
05:00
Implement the possibility to add new levels into the puzzle set. check-in: bbdc443497 user: user tags: trunk
2021-03-21
20:34
Implement bit23 for HIT/HITBY to prevent cascading after shoving check-in: b572dd834c user: user tags: trunk
06:42
Implement the "a?" and "ArrayCell" instructions check-in: e0a86ed98a user: user tags: trunk
Changes

Modified class.doc from [613227b86c] to [de4beeba2e].

1843
1844
1845
1846
1847
1848
1849

1850


1851
1852
1853
1854
1855
1856
1857
1843
1844
1845
1846
1847
1848
1849
1850

1851
1852
1853
1854
1855
1856
1857
1858
1859







+
-
+
+







  Allows the object to move regardless of Height. The game engine sets
  this bit if currently the Climb/Height is OK for moving.

bit22 *
  Prevents movement regardless of Height, but may still allow sliding.

bit23 *
  If this bit is set, then do not consider any further objects at the
  Reserved for future.
  new location of the shoved object after successfully shoving, and
  instead restart the movement immediately.

bit24 *
  Allows sliding to the left regardless of Height; the other attributes
  still need to be correct (unless bit26 is set). The game engine sets
  this bit if the Climb/Height is OK for moving.

bit25 *

Modified exec.c from [d5095c8102] to [701969d391].

884
885
886
887
888
889
890

891
892
893
894
895
896
897
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898







+







      }
      // Shoving
      if(!(hit&0x44) && (oE->shovable&(1<<dir)) && o->inertia>=oE->weight && !(oE->oflags&OF_VISUALONLY)) {
        oE->inertia=o->inertia;
        if(move_dir(obj,objE,dir)) {
          if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
          hit|=0x8000;
          if(hit&0x800000) goto restart;
        }
      }
      if(hit&0x400) goto fail;
      objE=obj_below(objE);
    }
    if(hit&0x2008) goto fail;
    if((hit&0x48000)==0x8000) goto restart;