Free Hero Mesh

Check-in [665dcd24be]
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 the (Control) block to define a global control object.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 665dcd24be3b6869afe0ace54df9b7c277896325
User & Date: user on 2021-12-10 00:00:13
Other Links: manifest | tags
Context
2021-12-14
06:54
Start to implement the LEVELS table. check-in: c4208ea179 user: user tags: trunk
2021-12-10
00:00
Implement the (Control) block to define a global control object. check-in: 665dcd24be user: user tags: trunk
2021-12-04
06:13
Corrections in picedit.c due to recent things added check-in: 33fb27825a user: user tags: trunk
Changes

Modified class.c from [0a4452237b] to [170c8e3f92].

48
49
50
51
52
53
54

55
56
57
58
59
60
61
Uint8 inv_back_color=9;
char**stringpool;
AnimationSlot anim_slot[8];
Uint8 keymask[256/8];
Uint16 array_size;
Uint16*orders;
Uint8 norders;


#define HASH_SIZE 8888
#define LOCAL_HASH_SIZE 5555
typedef struct {
  Uint16 id;
  char*txt;
} Hash;







>







48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Uint8 inv_back_color=9;
char**stringpool;
AnimationSlot anim_slot[8];
Uint8 keymask[256/8];
Uint16 array_size;
Uint16*orders;
Uint8 norders;
Uint16 control_class;

#define HASH_SIZE 8888
#define LOCAL_HASH_SIZE 5555
typedef struct {
  Uint16 id;
  char*txt;
} Hash;
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
    if(tokent!=TF_OPEN) ParseError("Open or close parenthesis expected\n");
    if(ptr>=0x3FFD) ParseError("Out of order memory\n");
    nxttok();
    if(Tokenf(TF_MACRO|TF_COMMA|TF_EQUAL) || !Tokenf(TF_NAME)) ParseError("Unexpected token in (Order) block\n");
    orders[++norders]=ptr;
    if(norders==beg) ParseError("Too many orders\n");
    switch(tokenv) {
      case OP_INPUT: case OP_PLAYER:
        orders[ptr++]=tokenv;
        break;
      case OP_USERFLAG:
        tokenv=look_hash(glohash,HASH_SIZE,0x1000,0x10FF,0,"user flags");
        if(!tokenv) ParseError("User flag ^%s not defined\n",tokenstr);
        orders[ptr++]=tokenv;
        break;







|







2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
    if(tokent!=TF_OPEN) ParseError("Open or close parenthesis expected\n");
    if(ptr>=0x3FFD) ParseError("Out of order memory\n");
    nxttok();
    if(Tokenf(TF_MACRO|TF_COMMA|TF_EQUAL) || !Tokenf(TF_NAME)) ParseError("Unexpected token in (Order) block\n");
    orders[++norders]=ptr;
    if(norders==beg) ParseError("Too many orders\n");
    switch(tokenv) {
      case OP_INPUT: case OP_PLAYER: case OP_CONTROL:
        orders[ptr++]=tokenv;
        break;
      case OP_USERFLAG:
        tokenv=look_hash(glohash,HASH_SIZE,0x1000,0x10FF,0,"user flags");
        if(!tokenv) ParseError("User flag ^%s not defined\n",tokenstr);
        orders[ptr++]=tokenv;
        break;
2184
2185
2186
2187
2188
2189
2190

2191
2192
2193
2194
2195
2196
2197
        case 0x1000 ... 0x101F: if(classes[i]->misc4&(1UL<<(k&0x1F))) goto found; break;
        case 0x1020 ... 0x103F: if(classes[i]->misc5&(1UL<<(k&0x1F))) goto found; break;
        case 0x1040 ... 0x105F: if(classes[i]->misc6&(1UL<<(k&0x1F))) goto found; break;
        case 0x1060 ... 0x107F: if(classes[i]->misc7&(1UL<<(k&0x1F))) goto found; break;
        case 0x1080 ... 0x1087: if(classes[i]->collisionLayers&(1L<<(k&0x07))) goto found; break;
        case OP_PLAYER: if(classes[i]->cflags&CF_PLAYER) goto found; break;
        case OP_INPUT: if(classes[i]->cflags&CF_INPUT) goto found; break;

      }
      continue;
      found: classes[i]->order=j; break;
    }
  }
}








>







2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
        case 0x1000 ... 0x101F: if(classes[i]->misc4&(1UL<<(k&0x1F))) goto found; break;
        case 0x1020 ... 0x103F: if(classes[i]->misc5&(1UL<<(k&0x1F))) goto found; break;
        case 0x1040 ... 0x105F: if(classes[i]->misc6&(1UL<<(k&0x1F))) goto found; break;
        case 0x1060 ... 0x107F: if(classes[i]->misc7&(1UL<<(k&0x1F))) goto found; break;
        case 0x1080 ... 0x1087: if(classes[i]->collisionLayers&(1L<<(k&0x07))) goto found; break;
        case OP_PLAYER: if(classes[i]->cflags&CF_PLAYER) goto found; break;
        case OP_INPUT: if(classes[i]->cflags&CF_INPUT) goto found; break;
        case OP_CONTROL: if(i==control_class) goto found; break;
      }
      continue;
      found: classes[i]->order=j; break;
    }
  }
}

2338
2339
2340
2341
2342
2343
2344







2345
2346
2347
2348
2349
2350
2351
          nxttok();
          if(tokent!=TF_CLOSE) ParseError("Expected close parenthesis\n");
          break;
        case OP_ORDER:
          if(norders) ParseError("Extra (Order) block\n");
          parse_order_block();
          break;







        default:
          ParseError("Invalid top level definition: %s\n",tokenstr);
      }
    } else {
      ParseError("Invalid top level definition\n");
    }
  }







>
>
>
>
>
>
>







2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
          nxttok();
          if(tokent!=TF_CLOSE) ParseError("Expected close parenthesis\n");
          break;
        case OP_ORDER:
          if(norders) ParseError("Extra (Order) block\n");
          parse_order_block();
          break;
        case OP_CONTROL:
          if(control_class) ParseError("Extra (Control) block\n");
          strcpy(tokenstr,"(Control)");
          control_class=look_class_name();
          if(!(classes[control_class]->cflags&CF_NOCLASS1)) ParseError("Conflicting definition of (Control) class\n");
          class_definition(control_class,vst);
          break;
        default:
          ParseError("Invalid top level definition: %s\n",tokenstr);
      }
    } else {
      ParseError("Invalid top level definition\n");
    }
  }
2372
2373
2374
2375
2376
2377
2378




2379
2380
2381
2382
2383
2384
2385
2386
2387
    } else {
      free(glohash[i].txt);
    }
  }
  if(vst) sqlite3_finalize(vst);
  free(glohash);
  for(i=1;i<undef_class;i++) if(classes[i] && (classes[i]->cflags&CF_NOCLASS1)) fatal("Class $%s mentioned but not defined\n",classes[i]->name);




  if(macros) for(i=0;i<MAX_MACRO;i++) if(macros[i]) free_macro(macros[i]);
  free(macros);
  if(array_size) {
    array_data=malloc(array_size*sizeof(Value));
    if(!array_data) fatal("Array allocation failed\n");
  }
  if(norders) set_class_orders();
  fprintf(stderr,"Done\n");
}







>
>
>
>









2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
    } else {
      free(glohash[i].txt);
    }
  }
  if(vst) sqlite3_finalize(vst);
  free(glohash);
  for(i=1;i<undef_class;i++) if(classes[i] && (classes[i]->cflags&CF_NOCLASS1)) fatal("Class $%s mentioned but not defined\n",classes[i]->name);
  if(control_class) {
    if(classes[control_class]->nimages) fatal("Images are not allowed in Control class");
    if(classes[control_class]->cflags&CF_GROUP) fatal("Control class is not allowed to be Abstract");
  }
  if(macros) for(i=0;i<MAX_MACRO;i++) if(macros[i]) free_macro(macros[i]);
  free(macros);
  if(array_size) {
    array_data=malloc(array_size*sizeof(Value));
    if(!array_data) fatal("Array allocation failed\n");
  }
  if(norders) set_class_orders();
  fprintf(stderr,"Done\n");
}

Modified class.doc from [04a1165740] to [f6921ebc9a].

267
268
269
270
271
272
273








274
275
276
277
278
279
280
  can optionally specify a second number, which is the background colour
  for the inventory; if not specified, uses the same colour for both.

(CodePage <number>)
  Define the code page, from 1 to 65535. If not specified, then the
  default code page is used.









(CollisionLayers <userflags...>)
  Define user flags as CollisionLayers bits; the first defined flag is
  bit0. Up to 8 flags can be defined in this way.

(Misc4 <userflags...>)
  Define user flags as Misc4 bits; the first defined flag is bit0. Up to
  32 flags can be defined in this way.







>
>
>
>
>
>
>
>







267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
  can optionally specify a second number, which is the background colour
  for the inventory; if not specified, uses the same colour for both.

(CodePage <number>)
  Define the code page, from 1 to 65535. If not specified, then the
  default code page is used.

(Control <definitions...>)
  Define the control class. The format is the same like other class
  definitions, except that Image and Abstract are not allowed. An
  object of this class is automatically created when initializing the
  level, at X and Y coordinates both zero, and cannot otherwise be
  created, destroyed, or moved. It still receives broadcast messages
  normally, and can also be addressed specifically.

(CollisionLayers <userflags...>)
  Define user flags as CollisionLayers bits; the first defined flag is
  bit0. Up to 8 flags can be defined in this way.

(Misc4 <userflags...>)
  Define user flags as Misc4 bits; the first defined flag is bit0. Up to
  32 flags can be defined in this way.
316
317
318
319
320
321
322
323

324
325
326
327
328
329
330
  the specified dimensions. The maximum number of rows is 64, and the
  maximum number of columns is 1024, and the maximum number of cells in
  all arrays in total is 65534. All elements are initialized to zero when
  the level starts.

(<message> <code...>)
  Defines a default message code for all classes which do not specify
  their own code for this message.


(&<name> <code...>)
  Define a user-defined function. User-defined functions may take any
  number of inputs from the stack and leave any number of outputs on the
  stack, but may not access user-defined local variables. (It may still
  access standard local variables, and all global variables, though.)








|
>







324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
  the specified dimensions. The maximum number of rows is 64, and the
  maximum number of columns is 1024, and the maximum number of cells in
  all arrays in total is 65534. All elements are initialized to zero when
  the level starts.

(<message> <code...>)
  Defines a default message code for all classes which do not specify
  their own code for this message. (It is recommended to not use this
  block, and to use subclassing instead.)

(&<name> <code...>)
  Define a user-defined function. User-defined functions may take any
  number of inputs from the stack and leave any number of outputs on the
  stack, but may not access user-defined local variables. (It may still
  access standard local variables, and all global variables, though.)

1301
1302
1303
1304
1305
1306
1307




1308
1309
1310
1311
1312
1313
1314
  object is in the bizarro world and the other one isn't.

,Coloc  ( obj1 obj2 -- bool )
  True if the two specified objects are in the same place, or false
  otherwise. Always false if the object is destroyed, or if one object
  is in the bizarro world and the other one isn't.





CopyArray  ( src dest -- ) **
  Copy one array to another. It is OK if the two references overlap.

count  ( mark ... -- mark ... count )
  Count how many values are above the mark on the stack.

Create  ( class x y image dir -- obj ) **







>
>
>
>







1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
  object is in the bizarro world and the other one isn't.

,Coloc  ( obj1 obj2 -- bool )
  True if the two specified objects are in the same place, or false
  otherwise. Always false if the object is destroyed, or if one object
  is in the bizarro world and the other one isn't.

Control  ( -- obj )
  Push the control object to the stack. (If no control class is defined,
  then there will be no control object and this will be zero.)

CopyArray  ( src dest -- ) **
  Copy one array to another. It is OK if the two references overlap.

count  ( mark ... -- mark ... count )
  Count how many values are above the mark on the stack.

Create  ( class x y image dir -- obj ) **
2506
2507
2508
2509
2510
2511
2512
2513
2514

2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528






2529
2530
2531
2532
2533
2534
2535
=== Order of execution ===

You can specify the order of execution of objects by class by a global
(Order) block. Inside of this block is a list of sub-lists; each sub-list
is delimited by parentheses.

Each sub-list starts with a flag name, which may be a user flag, or Input,
or Player. This matches only classes that have that flag (changing that
flag at run time has no effect on order of execution). The remaining

elements are optional; if they are present, they are used to break ties.
First, the second item breaks ties if there is one, and then if there is
still a tie then the third item breaks ties, etc. These extra elements
can be one of the following, with or without a comma: Misc1, Misc2, Misc3,
Misc4, Misc5, Misc6, Misc7, Temperature, Density, Xloc, Yloc, Image. If
there is no comma, they are lowest to highest, but a comma reverses the
order to be highest to lowest instead. These values are treated as signed,
and the values after INIT or CREATE message returns is used. If any of
the values is not a number, then it is an error.

The order of execution is then first all objects not listed in the (Order)
block, and then for each sub-list in the (Order) block, the objects that
meet that criteria, in that order. (If it meets multiple criteria, only
the first one that meets that criteria is used.)







Note: If a value used for the criteria changes after the INIT or CREATE
message of that object returns, then it can result in an unstable (but
still fully deterministic) order when new objects are created. For this
reason, you should only use criteria based on values which don't change.









|
|
>
|
|
|
|
|
|
|
|
|





>
>
>
>
>
>







2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
=== Order of execution ===

You can specify the order of execution of objects by class by a global
(Order) block. Inside of this block is a list of sub-lists; each sub-list
is delimited by parentheses.

Each sub-list starts with a flag name, which may be a user flag, or Input,
or Player, or Control. This matches only classes that have that flag
(changing that flag at run time has no effect on order of execution).

The remaining elements are optional; if they are present, they are used to
break ties. First, the second item breaks ties if there is one, and then
if there is still a tie then the third item breaks ties, etc. These extra
elements can be one of the following, with or without a comma: Misc1,
Misc2, Misc3, Misc4, Misc5, Misc6, Misc7, Temperature, Density, Xloc, Yloc,
Image. If there is no comma, they are lowest to highest, but a comma
reverses the order to be highest to lowest instead. These values are
treated as signed, and the values after INIT or CREATE message returns is
used. If any of the values is not a number, then it is an error.

The order of execution is then first all objects not listed in the (Order)
block, and then for each sub-list in the (Order) block, the objects that
meet that criteria, in that order. (If it meets multiple criteria, only
the first one that meets that criteria is used.)

Objects not listed in the (Order) block are executed in the reverse order
of their creation. The control object is created after all objects placed
in the level editor but before any other objects, while objects placed in
the editor are created in the order by their coordinates (which is not
necessarily the same order they were put in by the author).

Note: If a value used for the criteria changes after the INIT or CREATE
message of that object returns, then it can result in an unstable (but
still fully deterministic) order when new objects are created. For this
reason, you should only use criteria based on values which don't change.


Modified exec.c from [484f44c508] to [d3751950c5].

55
56
57
58
59
60
61

62
63
64
65
66
67
68
static Uint8 lastimage_processing,changed,all_flushed;
static Value vstack[VSTACKSIZE];
static int vstackptr;
static const char*traceprefix;
static Uint8 current_key;
static Value quiz_obj;
static Value traced_obj;


#define Throw(x) (my_error=(x),longjmp(my_env,1))
#define StackReq(x,y) do{ if(vstackptr<(x)) Throw("Stack underflow"); if(vstackptr-(x)+(y)>=VSTACKSIZE) Throw("Stack overflow"); }while(0)
#define Push(x) (vstack[vstackptr++]=(x))
#define Pop() (vstack[--vstackptr])

// For arrival/departure masks







>







55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
static Uint8 lastimage_processing,changed,all_flushed;
static Value vstack[VSTACKSIZE];
static int vstackptr;
static const char*traceprefix;
static Uint8 current_key;
static Value quiz_obj;
static Value traced_obj;
static Uint32 control_obj=VOIDLINK;

#define Throw(x) (my_error=(x),longjmp(my_env,1))
#define StackReq(x,y) do{ if(vstackptr<(x)) Throw("Stack underflow"); if(vstackptr-(x)+(y)>=VSTACKSIZE) Throw("Stack overflow"); }while(0)
#define Push(x) (vstack[vstackptr++]=(x))
#define Pop() (vstack[--vstackptr])

// For arrival/departure masks
531
532
533
534
535
536
537




538
539
540
541
542
543
544
  if(!((o->oflags|p->oflags)&(OF_VISUALONLY|OF_DESTROYED))) send_message(y,x,MSG_SUNK,NVALUE(0),NVALUE(0),v);
}

static void change_density(Uint32 n,Sint32 v) {
  Object*o=objects[n];
  Uint32 i;
  if(o->oflags&OF_BIZARRO) return;




  if(v<o->density) {
    o->density=v;
    for(;;) {
      i=o->up;
      if(i==VOIDLINK || objects[i]->density<=v) return;
      sink(i,n);
    }







>
>
>
>







532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
  if(!((o->oflags|p->oflags)&(OF_VISUALONLY|OF_DESTROYED))) send_message(y,x,MSG_SUNK,NVALUE(0),NVALUE(0),v);
}

static void change_density(Uint32 n,Sint32 v) {
  Object*o=objects[n];
  Uint32 i;
  if(o->oflags&OF_BIZARRO) return;
  if(n==control_obj) {
    o->density=v;
    return;
  }
  if(v<o->density) {
    o->density=v;
    for(;;) {
      i=o->up;
      if(i==VOIDLINK || objects[i]->density<=v) return;
      sink(i,n);
    }
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
static Uint32 create(Uint32 from,Uint16 c,Uint32 x,Uint32 y,Uint32 im,Uint32 d) {
  Uint32 m,n;
  int i,xx,yy;
  Object*o;
  Object*p;
  Value v;
  if(d>7) d=0;
  if(x<1 || y<1 || x>pfwidth || y>pfheight) return VOIDLINK;
  if(!(classes[c]->oflags&OF_BIZARRO) && (i=classes[c]->collisionLayers) && (xx=collisions_at(x,y)&i)) {
    if(collide_with(xx,VOIDLINK,x,y,c)&0x01) return VOIDLINK;
  }
  n=objalloc(c);
  if(n==VOIDLINK) Throw("Error creating object");
  o=objects[n];
  o->x=x;







|







798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
static Uint32 create(Uint32 from,Uint16 c,Uint32 x,Uint32 y,Uint32 im,Uint32 d) {
  Uint32 m,n;
  int i,xx,yy;
  Object*o;
  Object*p;
  Value v;
  if(d>7) d=0;
  if(x<1 || y<1 || x>pfwidth || y>pfheight || c==control_class) return VOIDLINK;
  if(!(classes[c]->oflags&OF_BIZARRO) && (i=classes[c]->collisionLayers) && (xx=collisions_at(x,y)&i)) {
    if(collide_with(xx,VOIDLINK,x,y,c)&0x01) return VOIDLINK;
  }
  n=objalloc(c);
  if(n==VOIDLINK) Throw("Error creating object");
  o=objects[n];
  o->x=x;
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
}

static Value destroy(Uint32 from,Uint32 to,Uint32 why) {
  Object*o;
  Value v;
  int i,x,y,xx,yy;
  Uint32 n;
  if(to==VOIDLINK) return NVALUE(0);
  o=objects[to];
  // EKS Hero Mesh doesn't check if it already destroyed.
  v=why==8?NVALUE(0):send_message(from,to,MSG_DESTROY,NVALUE(0),NVALUE(0),NVALUE(why));
  if(!v_bool(v)) {
    if(!(o->oflags&OF_DESTROYED)) {
      if(firstobj==to) firstobj=o->next;
      if(lastobj==to) lastobj=o->prev;







|







843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
}

static Value destroy(Uint32 from,Uint32 to,Uint32 why) {
  Object*o;
  Value v;
  int i,x,y,xx,yy;
  Uint32 n;
  if(to==VOIDLINK || to==control_obj) return NVALUE(0);
  o=objects[to];
  // EKS Hero Mesh doesn't check if it already destroyed.
  v=why==8?NVALUE(0):send_message(from,to,MSG_DESTROY,NVALUE(0),NVALUE(0),NVALUE(why));
  if(!v_bool(v)) {
    if(!(o->oflags&OF_DESTROYED)) {
      if(firstobj==to) firstobj=o->next;
      if(lastobj==to) lastobj=o->prev;
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889

static int move_to(Uint32 from,Uint32 n,Uint32 x,Uint32 y) {
  Uint32 m;
  int i,xx,yy;
  Object*o;
  Object*p;
  Value v;
  if(n==VOIDLINK || (objects[n]->oflags&OF_DESTROYED)) return 0;
  o=objects[n];
  if(lastimage_processing) Throw("Can't move during animation processing");
  if(x<1 || y<1 || x>pfwidth || y>pfheight) return 0;
  if(v_bool(send_message(from,n,MSG_MOVING,NVALUE(x),NVALUE(y),NVALUE(0)))) return 0;
  if(classes[o->class]->cflags&CF_PLAYER) {
    m=lastobj;
    while(m!=VOIDLINK) {







|







880
881
882
883
884
885
886
887
888
889
890
891
892
893
894

static int move_to(Uint32 from,Uint32 n,Uint32 x,Uint32 y) {
  Uint32 m;
  int i,xx,yy;
  Object*o;
  Object*p;
  Value v;
  if(n==VOIDLINK || (objects[n]->oflags&OF_DESTROYED) || n==control_obj) return 0;
  o=objects[n];
  if(lastimage_processing) Throw("Can't move during animation processing");
  if(x<1 || y<1 || x>pfwidth || y>pfheight) return 0;
  if(v_bool(send_message(from,n,MSG_MOVING,NVALUE(x),NVALUE(y),NVALUE(0)))) return 0;
  if(classes[o->class]->cflags&CF_PLAYER) {
    m=lastobj;
    while(m!=VOIDLINK) {
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210

static int defer_move(Uint32 obj,Uint32 dir,Uint8 plus) {
  Object*o;
  Object*q;
  Uint32 n;
  Value v;
  if(StackProtection()) Throw("Call stack overflow during movement");
  if(obj==VOIDLINK) return 0;
  o=objects[obj];
  if(o->oflags&(OF_DESTROYED|OF_BIZARRO)) return 0;
  dir=resolve_dir(obj,dir);
  if(plus) {
    if(o->oflags&OF_MOVING) {
      if(o->dir==dir) return 1;
      v=send_message(VOIDLINK,obj,MSG_CONFLICT,NVALUE(dir),NVALUE(0),NVALUE(0));







|







1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215

static int defer_move(Uint32 obj,Uint32 dir,Uint8 plus) {
  Object*o;
  Object*q;
  Uint32 n;
  Value v;
  if(StackProtection()) Throw("Call stack overflow during movement");
  if(obj==VOIDLINK || obj==control_obj) return 0;
  o=objects[obj];
  if(o->oflags&(OF_DESTROYED|OF_BIZARRO)) return 0;
  dir=resolve_dir(obj,dir);
  if(plus) {
    if(o->oflags&OF_MOVING) {
      if(o->dir==dir) return 1;
      v=send_message(VOIDLINK,obj,MSG_CONFLICT,NVALUE(dir),NVALUE(0),NVALUE(0));
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
  if(current_key) all_flushed=255;
  flush_class(0);
}

static void set_bizarro(Uint32 n,Uint32 v) {
  Object*o;
  Uint8 b;
  if(n==VOIDLINK) return;
  o=objects[n];
  if(o->oflags&OF_DESTROYED) return;
  if(v) {
    if(o->oflags&OF_BIZARRO) return;
    pfunlink(n);
    o->oflags|=OF_BIZARRO;
    pflink(n);







|







1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
  if(current_key) all_flushed=255;
  flush_class(0);
}

static void set_bizarro(Uint32 n,Uint32 v) {
  Object*o;
  Uint8 b;
  if(n==VOIDLINK || n==control_obj) return;
  o=objects[n];
  if(o->oflags&OF_DESTROYED) return;
  if(v) {
    if(o->oflags&OF_BIZARRO) return;
    pfunlink(n);
    o->oflags|=OF_BIZARRO;
    pflink(n);
1860
1861
1862
1863
1864
1865
1866

1867
1868
1869
1870
1871
1872
1873
  Uint8 d=objects[obj]->dir;
  Uint32 n=VOIDLINK;
  Uint32 m;
  Uint16 g;
  Value v;
  static ChoicePoint cp[MAXCHOICE];
  Uint8 cpi=0;

  cp->depth=vstackptr;
  again: switch(code[ptr++]) {
    case 0 ... 7:
      n=VOIDLINK;
      x+=x_delta[code[ptr-1]];
      y+=y_delta[code[ptr-1]];
      if(x<1 || x>pfwidth || y<1 || y>pfheight) goto fail;







>







1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
  Uint8 d=objects[obj]->dir;
  Uint32 n=VOIDLINK;
  Uint32 m;
  Uint16 g;
  Value v;
  static ChoicePoint cp[MAXCHOICE];
  Uint8 cpi=0;
  if(!x) return VOIDLINK;
  cp->depth=vstackptr;
  again: switch(code[ptr++]) {
    case 0 ... 7:
      n=VOIDLINK;
      x+=x_delta[code[ptr-1]];
      y+=y_delta[code[ptr-1]];
      if(x<1 || x>pfwidth || y<1 || y>pfheight) goto fail;
1909
1910
1911
1912
1913
1914
1915

1916
1917
1918
1919
1920
1921
1922
          if(v.u==1) goto fail;
          else if(v.u==2) break;
          else if(v.u) Throw("Invalid return value from message in pattern matching");
        } else if(v.t>TY_MAXTYPE) {
          n=v_object(v);
          x=objects[n]->x;
          y=objects[n]->y;

        } else {
          Throw("Type mismatch");
        }
        m=objects[m]->up;
      }
      break;
    case OP_ADD:







>







1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
          if(v.u==1) goto fail;
          else if(v.u==2) break;
          else if(v.u) Throw("Invalid return value from message in pattern matching");
        } else if(v.t>TY_MAXTYPE) {
          n=v_object(v);
          x=objects[n]->x;
          y=objects[n]->y;
          if(!x) return VOIDLINK;
        } else {
          Throw("Type mismatch");
        }
        m=objects[m]->up;
      }
      break;
    case OP_ADD:
1993
1994
1995
1996
1997
1998
1999

2000
2001
2002
2003
2004
2005
2006
        d=v.u&7;
      } else if(v.t==TY_MARK) {
        goto fail;
      } else if(v.t>TY_MAXTYPE) {
        n=v_object(v);
        x=objects[n]->x;
        y=objects[n]->y;

      } else {
        Throw("Type mismatch");
      }
      break;
    case OP_HEIGHT:
      if(playfield[x+y*64-65]==VOIDLINK || height_at(x,y)<=objects[obj]->climb) goto fail;
      break;







>







2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
        d=v.u&7;
      } else if(v.t==TY_MARK) {
        goto fail;
      } else if(v.t>TY_MAXTYPE) {
        n=v_object(v);
        x=objects[n]->x;
        y=objects[n]->y;
        if(!x) return VOIDLINK;
      } else {
        Throw("Type mismatch");
      }
      break;
    case OP_HEIGHT:
      if(playfield[x+y*64-65]==VOIDLINK || height_at(x,y)<=objects[obj]->climb) goto fail;
      break;
2468
2469
2470
2471
2472
2473
2474

2475
2476
2477
2478
2479
2480
2481
    case OP_CLIMB_EC16: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) o->climb=t1.u&0xFFFF; break;
    case OP_COLLISIONLAYERS: StackReq(0,1); Push(NVALUE(classes[o->class]->collisionLayers)); break;
    case OP_COLLISIONLAYERS_C: StackReq(1,1); i=v_object(Pop()); if(i==VOIDLINK) Push(NVALUE(0)); else Push(NVALUE(classes[objects[i]->class]->collisionLayers)); break;
    case OP_COLOC: StackReq(1,1); t1=Pop(); i=colocation(obj,v_object(t1)); Push(NVALUE(i)); break;
    case OP_COLOC_C: StackReq(2,1); t1=Pop(); t2=Pop(); i=colocation(v_object(t1),v_object(t2)); Push(NVALUE(i)); break;
    case OP_COMPATIBLE: StackReq(0,1); if(classes[o->class]->cflags&CF_COMPATIBLE) Push(NVALUE(1)); else Push(NVALUE(0)); break;
    case OP_COMPATIBLE_C: StackReq(1,1); GetClassFlagOf(CF_COMPATIBLE); break;

    case OP_COPYARRAY: NoIgnore(); StackReq(2,0); t2=Pop(); t1=Pop(); v_copy_array(t1,t2); break;
    case OP_COUNT: StackReq(1,2); i=v_count(); Push(NVALUE(i)); break;
    case OP_CREATE: NoIgnore(); StackReq(5,1); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_create(obj,t1,t2,t3,t4,t5)); break;
    case OP_CREATE_D: NoIgnore(); StackReq(5,0); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); v_create(obj,t1,t2,t3,t4,t5); break;
    case OP_DATA: StackReq(2,1); t2=Pop(); t1=Pop(); v_data(t1,t2); break;
    case OP_DELINVENTORY: StackReq(2,0); t2=Pop(); t1=Pop(); v_delete_inventory(t1,t2); break;
    case OP_DELTA: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u>t2.u?t1.u-t2.u:t2.u-t1.u)); break;







>







2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
    case OP_CLIMB_EC16: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) o->climb=t1.u&0xFFFF; break;
    case OP_COLLISIONLAYERS: StackReq(0,1); Push(NVALUE(classes[o->class]->collisionLayers)); break;
    case OP_COLLISIONLAYERS_C: StackReq(1,1); i=v_object(Pop()); if(i==VOIDLINK) Push(NVALUE(0)); else Push(NVALUE(classes[objects[i]->class]->collisionLayers)); break;
    case OP_COLOC: StackReq(1,1); t1=Pop(); i=colocation(obj,v_object(t1)); Push(NVALUE(i)); break;
    case OP_COLOC_C: StackReq(2,1); t1=Pop(); t2=Pop(); i=colocation(v_object(t1),v_object(t2)); Push(NVALUE(i)); break;
    case OP_COMPATIBLE: StackReq(0,1); if(classes[o->class]->cflags&CF_COMPATIBLE) Push(NVALUE(1)); else Push(NVALUE(0)); break;
    case OP_COMPATIBLE_C: StackReq(1,1); GetClassFlagOf(CF_COMPATIBLE); break;
    case OP_CONTROL: StackReq(0,1); Push(OVALUE(control_obj)); break;
    case OP_COPYARRAY: NoIgnore(); StackReq(2,0); t2=Pop(); t1=Pop(); v_copy_array(t1,t2); break;
    case OP_COUNT: StackReq(1,2); i=v_count(); Push(NVALUE(i)); break;
    case OP_CREATE: NoIgnore(); StackReq(5,1); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_create(obj,t1,t2,t3,t4,t5)); break;
    case OP_CREATE_D: NoIgnore(); StackReq(5,0); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); v_create(obj,t1,t2,t3,t4,t5); break;
    case OP_DATA: StackReq(2,1); t2=Pop(); t1=Pop(); v_data(t1,t2); break;
    case OP_DELINVENTORY: StackReq(2,0); t2=Pop(); t1=Pop(); v_delete_inventory(t1,t2); break;
    case OP_DELTA: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u>t2.u?t1.u-t2.u:t2.u-t1.u)); break;
2913
2914
2915
2916
2917
2918
2919

2920
2921
2922
2923
2924
2925
2926
  gameover=0;
  clear_inventory();
  for(i=0;i<nlevelstrings;i++) free(levelstrings[i]);
  nlevelstrings=0;
  free(deadanim);
  deadanim=0;
  ndeadanim=0;

}

static inline int try_sharp(Uint32 n1,Uint32 n2) {
  Object*o=objects[n1];
  Object*p=objects[n2];
  if((o->oflags|p->oflags)&OF_DESTROYED) return 0;
  if(o->dir&1) return 0;







>







2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
  gameover=0;
  clear_inventory();
  for(i=0;i<nlevelstrings;i++) free(levelstrings[i]);
  nlevelstrings=0;
  free(deadanim);
  deadanim=0;
  ndeadanim=0;
  control_obj=VOIDLINK;
}

static inline int try_sharp(Uint32 n1,Uint32 n2) {
  Object*o=objects[n1];
  Object*p=objects[n2];
  if((o->oflags|p->oflags)&OF_DESTROYED) return 0;
  if(o->dir&1) return 0;
3301
3302
3303
3304
3305
3306
3307




3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
  changed=0;
  key_ignored=0;
  all_flushed=0;
  lastimage_processing=0;
  vstackptr=0;
  move_number=0;
  current_key=0;




  n=lastobj;
  while(n!=VOIDLINK && !(objects[n]->oflags&OF_ORDERED)) {
    send_message(VOIDLINK,n,MSG_INIT,NVALUE(0),NVALUE(0),NVALUE(0));
    if(classes[objects[n]->class]->order && !(objects[n]->oflags&OF_DESTROYED)) set_order(n);
    n=objects[n]->prev;
  }
  broadcast(VOIDLINK,0,MSG_POSTINIT,NVALUE(0),NVALUE(0),NVALUE(0),0);
  if(gameover) return 0;
  return execute_turn(0);
}







>
>
>
>










3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
  changed=0;
  key_ignored=0;
  all_flushed=0;
  lastimage_processing=0;
  vstackptr=0;
  move_number=0;
  current_key=0;
  if(control_class) {
    control_obj=objalloc(control_class);
    if(control_obj==VOIDLINK) Throw("Error creating object");
  }
  n=lastobj;
  while(n!=VOIDLINK && !(objects[n]->oflags&OF_ORDERED)) {
    send_message(VOIDLINK,n,MSG_INIT,NVALUE(0),NVALUE(0),NVALUE(0));
    if(classes[objects[n]->class]->order && !(objects[n]->oflags&OF_DESTROYED)) set_order(n);
    n=objects[n]->prev;
  }
  broadcast(VOIDLINK,0,MSG_POSTINIT,NVALUE(0),NVALUE(0),NVALUE(0),0);
  if(gameover) return 0;
  return execute_turn(0);
}

Modified heromesh.h from [c5f496bb05] to [390cfc3e4a].

174
175
176
177
178
179
180

181
182
183
184
185
186
187
extern Uint8 back_color,inv_back_color;
extern char**stringpool;
extern AnimationSlot anim_slot[8];
extern Uint8 keymask[256/8];
extern Uint16 array_size;
extern Uint16*orders;
extern Uint8 norders;


Uint16 get_message_ptr(int c,int m);
void load_classes(void);

// == bindings ==

typedef struct {







>







174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
extern Uint8 back_color,inv_back_color;
extern char**stringpool;
extern AnimationSlot anim_slot[8];
extern Uint8 keymask[256/8];
extern Uint16 array_size;
extern Uint16*orders;
extern Uint8 norders;
extern Uint16 control_class;

Uint16 get_message_ptr(int c,int m);
void load_classes(void);

// == bindings ==

typedef struct {

Modified instruc from [6d667df7de] to [578644b1e9].

192
193
194
195
196
197
198
199
200
201
202
203



204
205
206
207
208
209
210
=Arg1
=Arg2
=Arg3
=MoveNumber
Level
Key
=Finished

; Class definitions
-Background ; used at top level only; not in a class
-CodePage ; used at top level only; not in a class
-Order ; used at top level only; not in a class



-Input
-Quiz
-InPlace
-DefaultImage
-Help
-EditorHelp
-Others








|
|
|
|
>
>
>







192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
=Arg1
=Arg2
=Arg3
=MoveNumber
Level
Key
=Finished

; Top level definitions
-Background
-CodePage
-Order
Control

; Class definitions
-Input
-Quiz
-InPlace
-DefaultImage
-Help
-EditorHelp
-Others

Modified instruc.h from [b557069e88] to [a3d7764239].

285
286
287
288
289
290
291

292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312

313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530

531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
#define OP_LEVEL 32896
#define OP_KEY 32897
#define OP_FINISHED 32898
#define OP_FINISHED_E 36994
#define OP_BACKGROUND 32899
#define OP_CODEPAGE 32900
#define OP_ORDER 32901

#define OP_INPUT 32902
#define OP_QUIZ 32903
#define OP_INPLACE 32904
#define OP_DEFAULTIMAGE 32905
#define OP_HELP 32906
#define OP_EDITORHELP 32907
#define OP_OTHERS 32908
#define OP_SUBS 32909
#define OP_ANIMATE 32910
#define OP_ANIMATE_E 37006
#define OP_ANIMATEDEAD 32911
#define OP_ANIMATEDEAD_E 37007
#define OP_ASSASSINATE 32912
#define OP_ASSASSINATE_C 34960
#define OP_BROADCAST 32913
#define OP_BROADCAST_D 41105
#define OP_BROADCASTAND 32914
#define OP_BROADCASTANDEX 32915
#define OP_BROADCASTCLASS 32916
#define OP_BROADCASTEX 32917
#define OP_BROADCASTEX_D 41109

#define OP_BROADCASTLIST 32918
#define OP_BROADCASTLISTEX 32919
#define OP_BROADCASTSUM 32920
#define OP_BROADCASTSUMEX 32921
#define OP_CHAIN 32922
#define OP_CHEBYSHEV 32923
#define OP_CHEBYSHEV_C 34971
#define OP_COLOC 32924
#define OP_COLOC_C 34972
#define OP_CREATE 32925
#define OP_CREATE_D 41117
#define OP_DATA 32926
#define OP_DELINVENTORY 32927
#define OP_DELTA 32928
#define OP_DESTROY 32929
#define OP_DESTROY_C 34977
#define OP_DESTROY_D 41121
#define OP_DESTROY_CD 43169
#define OP_FLUSHCLASS 32930
#define OP_FLUSHOBJ 32931
#define OP_FLUSHOBJ_C 34979
#define OP_GETINVENTORY 32932
#define OP_HEIGHTAT 32933
#define OP_HITME 32934
#define OP_IGNOREKEY 32935
#define OP_INTMOVE 32936
#define OP_INTMOVE_C 34984
#define OP_INTMOVE_D 41128
#define OP_INTMOVE_CD 43176
#define OP_JUMPTO 32937
#define OP_JUMPTO_C 34985
#define OP_JUMPTO_D 41129
#define OP_JUMPTO_CD 43177
#define OP_LOC 32938
#define OP_LOC_C 34986
#define OP_LOCATEME 32939
#define OP_LOCATEME_C 34987
#define OP_LOSELEVEL 32940
#define OP_MANHATTAN 32941
#define OP_MANHATTAN_C 34989
#define OP_MAXINVENTORY 32942
#define OP_MOVE 32943
#define OP_MOVE_C 34991
#define OP_MOVE_D 41135
#define OP_MOVE_CD 43183
#define OP_MOVEPLUS 32944
#define OP_MOVEPLUS_C 34992
#define OP_MOVEPLUS_D 41136
#define OP_MOVEPLUS_CD 43184
#define OP_MOVETO 32945
#define OP_MOVETO_C 34993
#define OP_MOVETO_D 41137
#define OP_MOVETO_CD 43185
#define OP_PLUSMOVE 32946
#define OP_PLUSMOVE_C 34994
#define OP_PLUSMOVE_D 41138
#define OP_PLUSMOVE_CD 43186
#define OP_MINUSMOVE 32947
#define OP_MINUSMOVE_C 34995
#define OP_MINUSMOVE_D 41139
#define OP_MINUSMOVE_CD 43187
#define OP_NEWX 32948
#define OP_NEWXY 32949
#define OP_NEWY 32950
#define OP_OBJABOVE 32951
#define OP_OBJABOVE_C 34999
#define OP_OBJBELOW 32952
#define OP_OBJBELOW_C 35000
#define OP_OBJBOTTOMAT 32953
#define OP_OBJCLASSAT 32954
#define OP_OBJDIR 32955
#define OP_OBJDIR_C 35003
#define OP_OBJLAYERAT 32956
#define OP_OBJMOVINGTO 32957
#define OP_OBJTOPAT 32958
#define OP_POPUP 32959
#define OP_POPUPARGS 32960
#define OP_REL 32961
#define OP_REL_C 35009
#define OP_SEEK 32962
#define OP_SEEK_C 35010
#define OP_SEND 32963
#define OP_SEND_C 35011
#define OP_SEND_D 41155
#define OP_SEND_CD 43203
#define OP_SENDEX 32964
#define OP_SENDEX_C 35012
#define OP_SENDEX_D 41156
#define OP_SENDEX_CD 43204
#define OP_SETINVENTORY 32965
#define OP_SOUND 32966
#define OP_SWEEP 32967
#define OP_SWEEPEX 32968
#define OP_SYNCHRONIZE 32969
#define OP_TARGET 32970
#define OP_TARGET_C 35018
#define OP_TRACE 32971
#define OP_TRIGGER 32972
#define OP_TRIGGERAT 32973
#define OP_VOLUMEAT 32974
#define OP_WINLEVEL 32975
#define OP_XDIR 32976
#define OP_XDIR_C 35024
#define OP_XYDIR 32977
#define OP_YDIR 32978
#define OP_YDIR_C 35026
#define OP_MARK 32979
#define OP_TMARK 32980
#define OP_IN 32981
#define OP_NIN 32982
#define OP_MBEGIN 32983
#define OP_FLIP 32984
#define OP_COUNT 32985
#define OP_CLEAR 32986
#define OP_UNIQ 32987
#define OP_ARRAY 32988
#define OP_GETARRAY 32989
#define OP_INITARRAY 32990
#define OP_SETARRAY 32991
#define OP_ARRAYCELL 32992
#define OP_ARRAYSLICE 32993
#define OP_COPYARRAY 32994
#define OP_DOTPRODUCT 32995
#define OP_PATTERN 32996
#define OP_PATTERN_C 35044
#define OP_PATTERN_E 37092
#define OP_PATTERN_EC 39140
#define OP_PATTERNS 32997
#define OP_PATTERNS_C 35045
#define OP_PATTERNS_E 37093
#define OP_PATTERNS_EC 39141
#define OP_ROOK 32998
#define OP_BISHOP 32999
#define OP_QUEEN 33000
#define OP_CUT 33001
#define OP_BIZARRO 33002
#define OP_BIZARRO_C 35050
#define OP_BIZARRO_E 37098
#define OP_BIZARRO_EC 39146
#define OP_BIZARROSWAP 33003
#define OP_BIZARROSWAP_D 41195
#define OP_SWAPWORLD 33004
#define OP_ABSTRACT 33005
#define OP_SUPER 33006
#define OP_SUPER_C 35054
#define OP_FUNCTION 33007
#define OP_LOCAL 33008
#define OP_LABEL 33009
#define OP_STRING 33010
#define OP_INT16 33011
#define OP_INT32 33012
#define OP_DISPATCH 33013
#define OP_USERFLAG 33014
#ifdef HEROMESH_CLASS
static const Op_Names op_names[]={
{"*",8486940},
{"+",8421402},
{"+Move",10584242},
{"-",8421403},
{"-Move",10584243},
{"-rot",8421382},
{".",10518528},
{"/",8486941},
{"ANHH",8389394},
{"ARRIVED",8389124},
{"Abstract",8683757},
{"Animate",8552590},
{"AnimateDead",8552591},
{"Arg1",8552572},
{"Arg2",8552573},
{"Arg3",8552574},
{"Array",8683740},
{"ArrayCell",8421600},
{"ArraySlice",8421601},
{"Arrivals",8618089},
{"Arrived",8618087},
{"Assassinate",8487056},
{"B",9437196},
{"BANG",8389380},
{"BEDOINGNG",8389406},
{"BEEDEEP",8389404},
{"BEGIN_TURN",8389123},
{"BLOCKED",8389144},
{"BOOOM",8389410},
{"BOUNCE",8389415},
{"BRRREEET",8389396},
{"BRRRT",8389395},
{"BUZZER",8389420},
{"BWEEP",8389397},
{"Background",8683651},
{"Bishop",8683751},
{"Bizarro",8618218},
{"BizarroSwap",10518763},
{"Broadcast",10518673},
{"BroadcastAnd",8421522},
{"BroadcastAndEx",8421523},
{"BroadcastEx",10518677},
{"BroadcastList",8421526},
{"BroadcastListEx",8421527},
{"BroadcastSum",8421528},
{"BroadcastSumEx",8421529},
{"Busy",8618091},
{"CHEEP",8389393},
{"CHYEW",8389392},
{"CLICK",8389388},
{"COLLIDE",8389142},
{"COLLIDEBY",8389141},
{"COLLIDING",8389143},
{"CONFLICT",8389140},
{"CREATE",8389121},
{"CREATED",8389137},
{"Chebyshev",8487067},
{"Class",8486973},
{"Climb",9142353},
{"CodePage",8683652},
{"CollisionLayers",8487032},
{"Coloc",8487068},
{"Compatible",8487031},

{"CopyArray",8421602},
{"Create",10518685},
{"DEEP_POP",8389417},
{"DEPARTED",8389125},
{"DESTROY",8389122},
{"DESTROYED",8389136},
{"DINK",8389390},
{"DOOR",8389378},
{"DRLRLRINK",8389398},
{"DYUPE",8389413},
{"Data",8421534},
{"DefaultImage",8683657},
{"DelInventory",8421535},
{"Delta",8421536},
{"Density",9142345},
{"Departed",8618088},
{"Departures",8618090},
{"Destroy",10584225},
{"Destroyed",8487029},
{"Dir",8618051},
{"Distance",9142343},
{"Done",8618100},
{"DotProduct",8421603},
{"E",9437184},
{"END_TURN",8389139},
{"EditorHelp",8683659},
{"F",9437192},
{"FAROUT",8389421},
{"FFFFTT",8389399},
{"FLOATED",8389132},
{"FROG",8389383},
{"Finished",8552578},
{"FlushClass",8421538},
{"FlushObj",8487075},
{"From",8421499},
{"GLASS",8389379},
{"GLISSANT",8389419},
{"GetArray",8421597},
{"GetInventory",8421540},
{"HAWK",8389425},
{"HEARTBEAT",8389407},
{"HIT",8389134},
{"HITBY",8389135},
{"Hard",8618069},
{"Height",9142351},
{"HeightAt",8421541},
{"Help",8683658},
{"HitMe",8421542},
{"INIT",8389120},
{"IgnoreKey",8421543},
{"Image",8618052},
{"InPlace",8683656},
{"Inertia",9142341},
{"InitArray",8421598},
{"Input",8683654},
{"IntMove",10584232},
{"Invisible",8618092},
{"JAYAYAYNG",8389416},
{"JUMPED",8389128},
{"JumpTo",10584233},
{"KEWEL",8389422},
{"KEY",8389129},
{"KLECK",8389387},
{"KLINKK",8389385},
{"Key",8421505},
{"KeyCleared",8618093},
{"L",9437194},
{"LASTIMAGE",8389126},
{"LB",9437195},
{"LF",9437193},
{"LOCK",8389408},
{"LOOP",8388610},
{"Level",8421504},
{"Loc",8487082},
{"LocateMe",8487083},
{"LoseLevel",8421548},
{"MOVED",8389127},
{"MOVING",8389130},
{"Manhattan",8487085},
{"MaxInventory",8421550},
{"Misc1",9142361},
{"Misc2",9142363},
{"Misc3",9142365},
{"Misc4",9142367},
{"Misc5",9142369},
{"Misc6",9142371},
{"Misc7",9142373},
{"Move",10584239},
{"Move+",10584240},
{"MoveNumber",8552575},
{"MoveTo",10584241},
{"Moved",8618098},
{"Moving",8618099},
{"Msg",8421498},
{"N",9437186},
{"NE",9437185},
{"NW",9437187},
{"NewX",8421556},
{"NewXY",8421557},
{"NewY",8421558},
{"OLDPHONE",8389402},
{"ONCE",8388609},
{"OSC",8388616},
{"OSCLOOP",8388618},
{"ObjAbove",8487095},
{"ObjBelow",8487096},
{"ObjBottomAt",8421561},
{"ObjClassAt",8421562},
{"ObjDir",8487099},
{"ObjLayerAt",8421564},
{"ObjMovingTo",8421565},
{"ObjTopAt",8421566},
{"Order",8683653},
{"Others",8683660},
{"P",8880356},
{"P*",8880357},
{"PLAYERMOVING",8389133},
{"POSTINIT",8389138},
{"POUR",8389377},
{"POWER",8389386},
{"Player",8487030},
{"PopUp",8421567},
{"Queen",8683752},
{"Quiz",8683655},
{"R",9437198},
{"RATCHET1",8389418},
{"RATCHET2",8389412},
{"RATTLE",8389403},
{"RB",9437197},
{"RF",9437199},
{"Rel",8487105},
{"Rook",8683750},
{"S",9437190},
{"SE",9437191},
{"SMALL_POP",8389389},
{"SPLASH",8389376},
{"STEAM",8389424},
{"STOP",8388608},
{"SUBS",8683661},
{"SUNK",8389131},
{"SW",9437189},
{"Seek",8487106},
{"Self",8421497},
{"Send",10584259},
{"SendEx",10584260},
{"SetArray",8421599},
{"SetInventory",8421573},
{"Shape",8618048},
{"ShapeDir",8618071},
{"Sharp",8618070},
{"Shovable",8618072},
{"Sound",8421574},
{"Stealthy",8618097},
{"Strength",9142355},
{"Super",8487150},
{"SwapWorld",8421612},
{"Sweep",8421575},
{"SweepEx",8421576},
{"Synchronize",8421577},
{"TAHTASHH",8389409},
{"THMP_thmp",8389405},
{"THWIT",8389384},
{"TICK",8389391},
{"Target",8487114},
{"Temperature",9142334},
{"Trace",8421579},
{"Trigger",8421580},
{"TriggerAt",8421581},
{"UH_OH",8389382},
{"UNCORK",8389414},
{"UNHH",8389381},
{"UserSignal",8618094},
{"UserState",8618095},
{"VACUUM",8389411},
{"VisualOnly",8618096},
{"Volume",9142347},
{"VolumeAt",8421582},
{"W",9437188},
{"WAHOO",8389400},
{"WHACK",8389423},
{"Weight",9142349},
{"WinLevel",8421583},
{"XDir",8487120},
{"XYDir",8421585},
{"Xloc",8486977},
{"YDir",8487122},
{"YEEHAW",8389401},
{"Yloc",8486978},
{"_",8421587},
{"a?",8421436},
{"again",8683533},
{"and",8683544},
{"band",8421412},
{"begin",8683532},
{"bit",8683560},
{"bit0",8388609},







>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|




|

|





|
|
|



|
|
|


|













|
|
|
|
|
|
|
|
|
|
|










|




|

>
|
|








|
|
|
|



|




|


|






|
|



|
|






|
|
|

|

|

|
|
|



|













|
|
|


|
|







|
|

|






|
|
|




|
|
|
|
|
|
|
|

|
|
|





|
|
|






|
|






|


|

|
|
|
|




|


|
|
|
|
|




|

|
|
|








|




|
|
|

|


|







285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312

313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
#define OP_LEVEL 32896
#define OP_KEY 32897
#define OP_FINISHED 32898
#define OP_FINISHED_E 36994
#define OP_BACKGROUND 32899
#define OP_CODEPAGE 32900
#define OP_ORDER 32901
#define OP_CONTROL 32902
#define OP_INPUT 32903
#define OP_QUIZ 32904
#define OP_INPLACE 32905
#define OP_DEFAULTIMAGE 32906
#define OP_HELP 32907
#define OP_EDITORHELP 32908
#define OP_OTHERS 32909
#define OP_SUBS 32910
#define OP_ANIMATE 32911
#define OP_ANIMATE_E 37007
#define OP_ANIMATEDEAD 32912
#define OP_ANIMATEDEAD_E 37008
#define OP_ASSASSINATE 32913
#define OP_ASSASSINATE_C 34961
#define OP_BROADCAST 32914
#define OP_BROADCAST_D 41106
#define OP_BROADCASTAND 32915
#define OP_BROADCASTANDEX 32916
#define OP_BROADCASTCLASS 32917
#define OP_BROADCASTEX 32918

#define OP_BROADCASTEX_D 41110
#define OP_BROADCASTLIST 32919
#define OP_BROADCASTLISTEX 32920
#define OP_BROADCASTSUM 32921
#define OP_BROADCASTSUMEX 32922
#define OP_CHAIN 32923
#define OP_CHEBYSHEV 32924
#define OP_CHEBYSHEV_C 34972
#define OP_COLOC 32925
#define OP_COLOC_C 34973
#define OP_CREATE 32926
#define OP_CREATE_D 41118
#define OP_DATA 32927
#define OP_DELINVENTORY 32928
#define OP_DELTA 32929
#define OP_DESTROY 32930
#define OP_DESTROY_C 34978
#define OP_DESTROY_D 41122
#define OP_DESTROY_CD 43170
#define OP_FLUSHCLASS 32931
#define OP_FLUSHOBJ 32932
#define OP_FLUSHOBJ_C 34980
#define OP_GETINVENTORY 32933
#define OP_HEIGHTAT 32934
#define OP_HITME 32935
#define OP_IGNOREKEY 32936
#define OP_INTMOVE 32937
#define OP_INTMOVE_C 34985
#define OP_INTMOVE_D 41129
#define OP_INTMOVE_CD 43177
#define OP_JUMPTO 32938
#define OP_JUMPTO_C 34986
#define OP_JUMPTO_D 41130
#define OP_JUMPTO_CD 43178
#define OP_LOC 32939
#define OP_LOC_C 34987
#define OP_LOCATEME 32940
#define OP_LOCATEME_C 34988
#define OP_LOSELEVEL 32941
#define OP_MANHATTAN 32942
#define OP_MANHATTAN_C 34990
#define OP_MAXINVENTORY 32943
#define OP_MOVE 32944
#define OP_MOVE_C 34992
#define OP_MOVE_D 41136
#define OP_MOVE_CD 43184
#define OP_MOVEPLUS 32945
#define OP_MOVEPLUS_C 34993
#define OP_MOVEPLUS_D 41137
#define OP_MOVEPLUS_CD 43185
#define OP_MOVETO 32946
#define OP_MOVETO_C 34994
#define OP_MOVETO_D 41138
#define OP_MOVETO_CD 43186
#define OP_PLUSMOVE 32947
#define OP_PLUSMOVE_C 34995
#define OP_PLUSMOVE_D 41139
#define OP_PLUSMOVE_CD 43187
#define OP_MINUSMOVE 32948
#define OP_MINUSMOVE_C 34996
#define OP_MINUSMOVE_D 41140
#define OP_MINUSMOVE_CD 43188
#define OP_NEWX 32949
#define OP_NEWXY 32950
#define OP_NEWY 32951
#define OP_OBJABOVE 32952
#define OP_OBJABOVE_C 35000
#define OP_OBJBELOW 32953
#define OP_OBJBELOW_C 35001
#define OP_OBJBOTTOMAT 32954
#define OP_OBJCLASSAT 32955
#define OP_OBJDIR 32956
#define OP_OBJDIR_C 35004
#define OP_OBJLAYERAT 32957
#define OP_OBJMOVINGTO 32958
#define OP_OBJTOPAT 32959
#define OP_POPUP 32960
#define OP_POPUPARGS 32961
#define OP_REL 32962
#define OP_REL_C 35010
#define OP_SEEK 32963
#define OP_SEEK_C 35011
#define OP_SEND 32964
#define OP_SEND_C 35012
#define OP_SEND_D 41156
#define OP_SEND_CD 43204
#define OP_SENDEX 32965
#define OP_SENDEX_C 35013
#define OP_SENDEX_D 41157
#define OP_SENDEX_CD 43205
#define OP_SETINVENTORY 32966
#define OP_SOUND 32967
#define OP_SWEEP 32968
#define OP_SWEEPEX 32969
#define OP_SYNCHRONIZE 32970
#define OP_TARGET 32971
#define OP_TARGET_C 35019
#define OP_TRACE 32972
#define OP_TRIGGER 32973
#define OP_TRIGGERAT 32974
#define OP_VOLUMEAT 32975
#define OP_WINLEVEL 32976
#define OP_XDIR 32977
#define OP_XDIR_C 35025
#define OP_XYDIR 32978
#define OP_YDIR 32979
#define OP_YDIR_C 35027
#define OP_MARK 32980
#define OP_TMARK 32981
#define OP_IN 32982
#define OP_NIN 32983
#define OP_MBEGIN 32984
#define OP_FLIP 32985
#define OP_COUNT 32986
#define OP_CLEAR 32987
#define OP_UNIQ 32988
#define OP_ARRAY 32989
#define OP_GETARRAY 32990
#define OP_INITARRAY 32991
#define OP_SETARRAY 32992
#define OP_ARRAYCELL 32993
#define OP_ARRAYSLICE 32994
#define OP_COPYARRAY 32995
#define OP_DOTPRODUCT 32996
#define OP_PATTERN 32997
#define OP_PATTERN_C 35045
#define OP_PATTERN_E 37093
#define OP_PATTERN_EC 39141
#define OP_PATTERNS 32998
#define OP_PATTERNS_C 35046
#define OP_PATTERNS_E 37094
#define OP_PATTERNS_EC 39142
#define OP_ROOK 32999
#define OP_BISHOP 33000
#define OP_QUEEN 33001
#define OP_CUT 33002
#define OP_BIZARRO 33003
#define OP_BIZARRO_C 35051
#define OP_BIZARRO_E 37099
#define OP_BIZARRO_EC 39147
#define OP_BIZARROSWAP 33004
#define OP_BIZARROSWAP_D 41196
#define OP_SWAPWORLD 33005
#define OP_ABSTRACT 33006
#define OP_SUPER 33007
#define OP_SUPER_C 35055
#define OP_FUNCTION 33008
#define OP_LOCAL 33009
#define OP_LABEL 33010
#define OP_STRING 33011
#define OP_INT16 33012
#define OP_INT32 33013
#define OP_DISPATCH 33014
#define OP_USERFLAG 33015
#ifdef HEROMESH_CLASS
static const Op_Names op_names[]={
{"*",8486940},
{"+",8421402},
{"+Move",10584243},
{"-",8421403},
{"-Move",10584244},
{"-rot",8421382},
{".",10518528},
{"/",8486941},
{"ANHH",8389394},
{"ARRIVED",8389124},
{"Abstract",8683758},
{"Animate",8552591},
{"AnimateDead",8552592},
{"Arg1",8552572},
{"Arg2",8552573},
{"Arg3",8552574},
{"Array",8683741},
{"ArrayCell",8421601},
{"ArraySlice",8421602},
{"Arrivals",8618089},
{"Arrived",8618087},
{"Assassinate",8487057},
{"B",9437196},
{"BANG",8389380},
{"BEDOINGNG",8389406},
{"BEEDEEP",8389404},
{"BEGIN_TURN",8389123},
{"BLOCKED",8389144},
{"BOOOM",8389410},
{"BOUNCE",8389415},
{"BRRREEET",8389396},
{"BRRRT",8389395},
{"BUZZER",8389420},
{"BWEEP",8389397},
{"Background",8683651},
{"Bishop",8683752},
{"Bizarro",8618219},
{"BizarroSwap",10518764},
{"Broadcast",10518674},
{"BroadcastAnd",8421523},
{"BroadcastAndEx",8421524},
{"BroadcastEx",10518678},
{"BroadcastList",8421527},
{"BroadcastListEx",8421528},
{"BroadcastSum",8421529},
{"BroadcastSumEx",8421530},
{"Busy",8618091},
{"CHEEP",8389393},
{"CHYEW",8389392},
{"CLICK",8389388},
{"COLLIDE",8389142},
{"COLLIDEBY",8389141},
{"COLLIDING",8389143},
{"CONFLICT",8389140},
{"CREATE",8389121},
{"CREATED",8389137},
{"Chebyshev",8487068},
{"Class",8486973},
{"Climb",9142353},
{"CodePage",8683652},
{"CollisionLayers",8487032},
{"Coloc",8487069},
{"Compatible",8487031},
{"Control",8421510},
{"CopyArray",8421603},
{"Create",10518686},
{"DEEP_POP",8389417},
{"DEPARTED",8389125},
{"DESTROY",8389122},
{"DESTROYED",8389136},
{"DINK",8389390},
{"DOOR",8389378},
{"DRLRLRINK",8389398},
{"DYUPE",8389413},
{"Data",8421535},
{"DefaultImage",8683658},
{"DelInventory",8421536},
{"Delta",8421537},
{"Density",9142345},
{"Departed",8618088},
{"Departures",8618090},
{"Destroy",10584226},
{"Destroyed",8487029},
{"Dir",8618051},
{"Distance",9142343},
{"Done",8618100},
{"DotProduct",8421604},
{"E",9437184},
{"END_TURN",8389139},
{"EditorHelp",8683660},
{"F",9437192},
{"FAROUT",8389421},
{"FFFFTT",8389399},
{"FLOATED",8389132},
{"FROG",8389383},
{"Finished",8552578},
{"FlushClass",8421539},
{"FlushObj",8487076},
{"From",8421499},
{"GLASS",8389379},
{"GLISSANT",8389419},
{"GetArray",8421598},
{"GetInventory",8421541},
{"HAWK",8389425},
{"HEARTBEAT",8389407},
{"HIT",8389134},
{"HITBY",8389135},
{"Hard",8618069},
{"Height",9142351},
{"HeightAt",8421542},
{"Help",8683659},
{"HitMe",8421543},
{"INIT",8389120},
{"IgnoreKey",8421544},
{"Image",8618052},
{"InPlace",8683657},
{"Inertia",9142341},
{"InitArray",8421599},
{"Input",8683655},
{"IntMove",10584233},
{"Invisible",8618092},
{"JAYAYAYNG",8389416},
{"JUMPED",8389128},
{"JumpTo",10584234},
{"KEWEL",8389422},
{"KEY",8389129},
{"KLECK",8389387},
{"KLINKK",8389385},
{"Key",8421505},
{"KeyCleared",8618093},
{"L",9437194},
{"LASTIMAGE",8389126},
{"LB",9437195},
{"LF",9437193},
{"LOCK",8389408},
{"LOOP",8388610},
{"Level",8421504},
{"Loc",8487083},
{"LocateMe",8487084},
{"LoseLevel",8421549},
{"MOVED",8389127},
{"MOVING",8389130},
{"Manhattan",8487086},
{"MaxInventory",8421551},
{"Misc1",9142361},
{"Misc2",9142363},
{"Misc3",9142365},
{"Misc4",9142367},
{"Misc5",9142369},
{"Misc6",9142371},
{"Misc7",9142373},
{"Move",10584240},
{"Move+",10584241},
{"MoveNumber",8552575},
{"MoveTo",10584242},
{"Moved",8618098},
{"Moving",8618099},
{"Msg",8421498},
{"N",9437186},
{"NE",9437185},
{"NW",9437187},
{"NewX",8421557},
{"NewXY",8421558},
{"NewY",8421559},
{"OLDPHONE",8389402},
{"ONCE",8388609},
{"OSC",8388616},
{"OSCLOOP",8388618},
{"ObjAbove",8487096},
{"ObjBelow",8487097},
{"ObjBottomAt",8421562},
{"ObjClassAt",8421563},
{"ObjDir",8487100},
{"ObjLayerAt",8421565},
{"ObjMovingTo",8421566},
{"ObjTopAt",8421567},
{"Order",8683653},
{"Others",8683661},
{"P",8880357},
{"P*",8880358},
{"PLAYERMOVING",8389133},
{"POSTINIT",8389138},
{"POUR",8389377},
{"POWER",8389386},
{"Player",8487030},
{"PopUp",8421568},
{"Queen",8683753},
{"Quiz",8683656},
{"R",9437198},
{"RATCHET1",8389418},
{"RATCHET2",8389412},
{"RATTLE",8389403},
{"RB",9437197},
{"RF",9437199},
{"Rel",8487106},
{"Rook",8683751},
{"S",9437190},
{"SE",9437191},
{"SMALL_POP",8389389},
{"SPLASH",8389376},
{"STEAM",8389424},
{"STOP",8388608},
{"SUBS",8683662},
{"SUNK",8389131},
{"SW",9437189},
{"Seek",8487107},
{"Self",8421497},
{"Send",10584260},
{"SendEx",10584261},
{"SetArray",8421600},
{"SetInventory",8421574},
{"Shape",8618048},
{"ShapeDir",8618071},
{"Sharp",8618070},
{"Shovable",8618072},
{"Sound",8421575},
{"Stealthy",8618097},
{"Strength",9142355},
{"Super",8487151},
{"SwapWorld",8421613},
{"Sweep",8421576},
{"SweepEx",8421577},
{"Synchronize",8421578},
{"TAHTASHH",8389409},
{"THMP_thmp",8389405},
{"THWIT",8389384},
{"TICK",8389391},
{"Target",8487115},
{"Temperature",9142334},
{"Trace",8421580},
{"Trigger",8421581},
{"TriggerAt",8421582},
{"UH_OH",8389382},
{"UNCORK",8389414},
{"UNHH",8389381},
{"UserSignal",8618094},
{"UserState",8618095},
{"VACUUM",8389411},
{"VisualOnly",8618096},
{"Volume",9142347},
{"VolumeAt",8421583},
{"W",9437188},
{"WAHOO",8389400},
{"WHACK",8389423},
{"Weight",9142349},
{"WinLevel",8421584},
{"XDir",8487121},
{"XYDir",8421586},
{"Xloc",8486977},
{"YDir",8487123},
{"YEEHAW",8389401},
{"Yloc",8486978},
{"_",8421588},
{"a?",8421436},
{"again",8683533},
{"and",8683544},
{"band",8421412},
{"begin",8683532},
{"bit",8683560},
{"bit0",8388609},
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
{"bit8",8423400},
{"bit9",8423401},
{"bnot",8421415},
{"bor",8421413},
{"bxor",8421414},
{"c?",8421430},
{"case",8683542},
{"chain",8421530},
{"clear",8421594},
{"count",8421593},
{"cut",8683753},
{"cz?",8421431},
{"dup",8421377},
{"else",8683530},
{"eq",8421421},
{"eq2",8421422},
{"flip",8421592},
{"for",8683537},
{"fork",8683545},
{"ge",8486962},
{"gt",8486960},
{"if",8683529},
{"in",8421589},
{"is",8421428},
{"land",8421417},
{"le",8486963},
{"lnot",8421420},
{"lor",8421418},
{"lsh",8421410},
{"lt",8486961},
{"lxor",8421419},
{"m?",8421432},
{"max",8486945},
{"mbegin",8683735},
{"min",8486944},
{"mod",8486942},
{"n?",8421429},
{"ne",8421423},
{"neg",8421407},
{"next",8683538},
{"nin",8421590},
{"nip",8421379},
{"o?",8421434},
{"or",8683543},
{"over",8421384},
{"oz?",8421435},
{"pick",8421383},
{"repeat",8683536},
{"ret",8421397},
{"rot",8421381},
{"rsh",8486947},
{"s?",8421433},
{"swap",8421378},
{"then",8683531},
{"tmark",8421588},
{"tuck",8421380},
{"uniq",8421595},
{"until",8683534},
{"while",8683535},
};
#define N_OP_NAMES 347
#endif







|
|
|
|





|





|










|






|













|

|



|

758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
{"bit8",8423400},
{"bit9",8423401},
{"bnot",8421415},
{"bor",8421413},
{"bxor",8421414},
{"c?",8421430},
{"case",8683542},
{"chain",8421531},
{"clear",8421595},
{"count",8421594},
{"cut",8683754},
{"cz?",8421431},
{"dup",8421377},
{"else",8683530},
{"eq",8421421},
{"eq2",8421422},
{"flip",8421593},
{"for",8683537},
{"fork",8683545},
{"ge",8486962},
{"gt",8486960},
{"if",8683529},
{"in",8421590},
{"is",8421428},
{"land",8421417},
{"le",8486963},
{"lnot",8421420},
{"lor",8421418},
{"lsh",8421410},
{"lt",8486961},
{"lxor",8421419},
{"m?",8421432},
{"max",8486945},
{"mbegin",8683736},
{"min",8486944},
{"mod",8486942},
{"n?",8421429},
{"ne",8421423},
{"neg",8421407},
{"next",8683538},
{"nin",8421591},
{"nip",8421379},
{"o?",8421434},
{"or",8683543},
{"over",8421384},
{"oz?",8421435},
{"pick",8421383},
{"repeat",8683536},
{"ret",8421397},
{"rot",8421381},
{"rsh",8486947},
{"s?",8421433},
{"swap",8421378},
{"then",8683531},
{"tmark",8421589},
{"tuck",8421380},
{"uniq",8421596},
{"until",8683534},
{"while",8683535},
};
#define N_OP_NAMES 348
#endif