Free Hero Mesh

Check-in [a50cf8eac3]
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:Begin implementation of (Order) block (currently incomplete and doesn't work).
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: a50cf8eac3ce033fd8e9d4302921dd9366b49c76
User & Date: user on 2021-10-08 02:27:25
Other Links: manifest | tags
Context
2021-10-08
04:26
More (still incomplete) implementation of (Order) block; also make a correction for the user flag blocks. check-in: df0935b0a3 user: user tags: trunk
02:27
Begin implementation of (Order) block (currently incomplete and doesn't work). check-in: a50cf8eac3 user: user tags: trunk
2021-10-07
05:51
Implement three new instructions: HitMe Sweep SweepEx check-in: a9bed7792c user: user tags: trunk
Changes

Modified TODO from [cf8d84517b] to [3998dd2b71].

44
45
46
47
48
49
50

44
45
46
47
48
49
50
51







+
* Composite puzzle set format (implemented)
  * Optional hypertext help
  * Compressed class definitions (?)
* Option to auto display level titles
* Testing
  * Bizarro world
  * Deferred movement
  * Sweep, SweepEx, HitMe

Modified class.c from [197962d870] to [5acd447fb3].

46
47
48
49
50
51
52


53
54
55
56
57
58
59
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61







+
+







Sint32 max_volume=10000;
Uint8 back_color=1;
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;
252
253
254
255
256
257
258
259

260
261
262
263
264
265
266
254
255
256
257
258
259
260

261
262
263
264
265
266
267
268







-
+







  if(!cl->name) fatal("Allocation failed\n");
  cl->edithelp=cl->gamehelp=0;
  cl->codes=cl->messages=cl->images=0;
  cl->height=cl->weight=cl->climb=cl->density=cl->volume=cl->strength=cl->arrivals=cl->departures=0;
  cl->temperature=cl->misc4=cl->misc5=cl->misc6=cl->misc7=0;
  cl->uservars=cl->hard[0]=cl->hard[1]=cl->hard[2]=cl->hard[3]=cl->nmsg=0;
  cl->oflags=cl->sharp[0]=cl->sharp[1]=cl->sharp[2]=cl->sharp[3]=0;
  cl->shape=cl->shovable=cl->collisionLayers=cl->nimages=0;
  cl->shape=cl->shovable=cl->collisionLayers=cl->nimages=cl->order=0;
  cl->cflags=f;
  if(undef_class<=n) undef_class=n+1;
}

Uint16 get_message_ptr(int c,int m) {
  if(!classes[c]) return 0xFFFF;
  if(classes[c]->nmsg<=m) return 0xFFFF;
2100
2101
2102
2103
2104
2105
2106

































































2107
2108
2109
2110
2111
2112
2113
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







    if(i==size && data[i-1]) fatal("Malformed CLASS.DEF lump\n");
    if(messages[n]) fatal("Duplicate message number %d\n",n+256);
    messages[n]=strdup(p);
    if(!messages[n]) fatal("Allocation failed\n");
  }
  free(data);
}

static void parse_order_block(void) {
  // OP_MISC1, OP_MISC1_C, etc = properties (_C=reverse)
  // 0x1000...0x10FF = Have flag
  // OP_RET = end of block
  Uint16 beg,ptr;
  orders=malloc(0x4000*sizeof(Uint16));
  if(!orders) fatal("Allocation failed\n");
  nxttok();
  if(tokent==TF_INT) {
    if(tokenv<1 || tokenv>254) ParseError("Order number out of range\n");
    beg=ptr=tokenv;
    nxttok();
  } else {
    beg=ptr=128;
  }
  while(tokent!=TF_CLOSE) {
    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");
    if(norders==beg) ParseError("Too many orders\n");
    orders[norders++]=ptr;
    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;
      default: ParseError("Unexpected token in (Order) block\n");
    }
    nxttok();
    while(tokent!=TF_CLOSE) {
      if(Tokenf(TF_MACRO|TF_EQUAL) || !Tokenf(TF_NAME)) ParseError("Unexpected token in (Order) block\n");
      if(ptr>=0x3FFE) ParseError("Out of order memory\n");
      switch(tokenv) {
        case OP_MISC1: case OP_MISC1_C:
        case OP_MISC2: case OP_MISC2_C:
        case OP_MISC3: case OP_MISC3_C:
        case OP_MISC4: case OP_MISC4_C:
        case OP_MISC5: case OP_MISC5_C:
        case OP_MISC6: case OP_MISC6_C:
        case OP_MISC7: case OP_MISC7_C:
        case OP_TEMPERATURE: case OP_TEMPERATURE_C:
        case OP_DENSITY: case OP_DENSITY_C:
        case OP_XLOC: case OP_XLOC_C:
        case OP_YLOC: case OP_YLOC_C:
        case OP_IMAGE: case OP_IMAGE_C:
          orders[ptr++]=tokenv;
          break;
      }
      nxttok();
    }
    orders[ptr++]=OP_RET;
  }
  if(!norders) ParseError("Empty (Order) block\n");
  orders=realloc(orders,ptr*sizeof(Uint16))?:orders;
}

static void set_class_orders(void) {
  //TODO
}

void load_classes(void) {
  int i;
  int gloptr=0;
  Hash*glolocalhash;
  char*nam=sqlite3_mprintf("%s.class",basefilename);
  sqlite3_stmt*vst=0;
2244
2245
2246
2247
2248
2249
2250




2251
2252
2253
2254
2255
2256
2257
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328







+
+
+
+







        case OP_CODEPAGE:
          nxttok();
          if(tokent!=TF_INT || tokenv<1 || tokenv>65535) ParseError("Number from 1 to 65535 expected\n");
          set_code_page(tokenv);
          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");
    }
  }
2284
2285
2286
2287
2288
2289
2290

2291
2292
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364







+


  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");
}

Modified heromesh.h from [e898c0efa3] to [66fec90ead].

153
154
155
156
157
158
159
160

161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177


178
179
180
181
182
183
184
153
154
155
156
157
158
159

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186







-
+

















+
+







  Uint16*messages; // use 0xFFFF if no such message block
  Uint16*images; // high bit is set if available to editor; not present if CF_GROUP
  Sint32 height,weight,climb,density,volume,strength,arrivals,departures;
  Sint32 temperature,misc4,misc5,misc6,misc7;
  Uint16 uservars,oflags,nmsg;
  Uint16 sharp[4];
  Uint16 hard[4];
  Uint8 cflags,shape,shovable,collisionLayers,nimages;
  Uint8 cflags,shape,shovable,collisionLayers,nimages,order;
} Class;

typedef struct {
  Uint8 length,speed,vtime,frame;
} AnimationSlot;

extern Value initglobals[0x800];
extern Class*classes[0x4000]; // 0 isn't a real class
extern const char*messages[0x4000]; // index is 256 less than message number
extern Uint16 functions[0x4000];
extern int max_animation; // max steps in animation queue (default 32)
extern Sint32 max_volume; // max total volume to allow moving diagonally (default 10000)
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 {

Modified instruc from [7ec365e6c8] to [4bab268f41].

195
196
197
198
199
200
201

202
203
204
205
206
207
208
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209







+







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

Modified instruc.h from [2667fe2918] to [bb8a1a3c80].

282
283
284
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
282
283
284
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







+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+




-
+

-
+





-
-
-
+
+
+



-
-
-
+
+
+


-
+













-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+










-
+




-
+

-
-
+
+








-
-
-
-
+
+
+
+



-
+




-
+


-
+






-
-
+
+



-
-
+
+






-
-
-
+
+
+

-
+

-
+

-
-
-
+
+
+



-
+













-
-
-
+
+
+


-
-
+
+







-
-
+
+

-
+






-
-
-
+
+
+




-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+





-
-
-
+
+
+






-
-
+
+






-
+


-
+

-
-
-
-
+
+
+
+




-
+


-
-
-
-
-
+
+
+
+
+




-
+

-
-
-
+
+
+








-
+




-
-
-
+
+
+

-
+


-
+







#define OP_MOVENUMBER 32894
#define OP_LEVEL 32895
#define OP_KEY 32896
#define OP_FINISHED 32897
#define OP_FINISHED_E 36993
#define OP_BACKGROUND 32898
#define OP_CODEPAGE 32899
#define OP_ORDER 32900
#define OP_INPUT 32900
#define OP_QUIZ 32901
#define OP_INPLACE 32902
#define OP_DEFAULTIMAGE 32903
#define OP_HELP 32904
#define OP_EDITORHELP 32905
#define OP_OTHERS 32906
#define OP_SUBS 32907
#define OP_ANIMATE 32908
#define OP_ANIMATEDEAD 32909
#define OP_ASSASSINATE 32910
#define OP_ASSASSINATE_C 34958
#define OP_BROADCAST 32911
#define OP_BROADCAST_D 41103
#define OP_BROADCASTAND 32912
#define OP_BROADCASTANDEX 32913
#define OP_BROADCASTCLASS 32914
#define OP_BROADCASTEX 32915
#define OP_BROADCASTEX_D 41107
#define OP_BROADCASTLIST 32916
#define OP_BROADCASTLISTEX 32917
#define OP_BROADCASTSUM 32918
#define OP_BROADCASTSUMEX 32919
#define OP_CHAIN 32920
#define OP_CHEBYSHEV 32921
#define OP_CHEBYSHEV_C 34969
#define OP_COLOC 32922
#define OP_COLOC_C 34970
#define OP_CREATE 32923
#define OP_CREATE_D 41115
#define OP_DATA 32924
#define OP_DELINVENTORY 32925
#define OP_DELTA 32926
#define OP_DESTROY 32927
#define OP_DESTROY_C 34975
#define OP_DESTROY_D 41119
#define OP_DESTROY_CD 43167
#define OP_FLUSHCLASS 32928
#define OP_FLUSHOBJ 32929
#define OP_FLUSHOBJ_C 34977
#define OP_GETINVENTORY 32930
#define OP_HEIGHTAT 32931
#define OP_HITME 32932
#define OP_IGNOREKEY 32933
#define OP_INTMOVE 32934
#define OP_INTMOVE_C 34982
#define OP_INTMOVE_D 41126
#define OP_INTMOVE_CD 43174
#define OP_JUMPTO 32935
#define OP_JUMPTO_C 34983
#define OP_JUMPTO_D 41127
#define OP_JUMPTO_CD 43175
#define OP_LOC 32936
#define OP_LOC_C 34984
#define OP_LOCATEME 32937
#define OP_LOSELEVEL 32938
#define OP_MANHATTAN 32939
#define OP_MANHATTAN_C 34987
#define OP_MAXINVENTORY 32940
#define OP_MOVE 32941
#define OP_MOVE_C 34989
#define OP_MOVE_D 41133
#define OP_MOVE_CD 43181
#define OP_MOVEPLUS 32942
#define OP_MOVEPLUS_C 34990
#define OP_MOVEPLUS_D 41134
#define OP_MOVEPLUS_CD 43182
#define OP_MOVETO 32943
#define OP_MOVETO_C 34991
#define OP_MOVETO_D 41135
#define OP_MOVETO_CD 43183
#define OP_PLUSMOVE 32944
#define OP_PLUSMOVE_C 34992
#define OP_PLUSMOVE_D 41136
#define OP_PLUSMOVE_CD 43184
#define OP_MINUSMOVE 32945
#define OP_MINUSMOVE_C 34993
#define OP_MINUSMOVE_D 41137
#define OP_MINUSMOVE_CD 43185
#define OP_NEWX 32946
#define OP_NEWXY 32947
#define OP_NEWY 32948
#define OP_OBJABOVE 32949
#define OP_OBJABOVE_C 34997
#define OP_OBJBELOW 32950
#define OP_OBJBELOW_C 34998
#define OP_OBJBOTTOMAT 32951
#define OP_OBJCLASSAT 32952
#define OP_OBJDIR 32953
#define OP_OBJDIR_C 35001
#define OP_OBJLAYERAT 32954
#define OP_OBJMOVINGTO 32955
#define OP_OBJTOPAT 32956
#define OP_POPUP 32957
#define OP_POPUPARGS 32958
#define OP_REL 32959
#define OP_REL_C 35007
#define OP_SEEK 32960
#define OP_SEEK_C 35008
#define OP_SEND 32961
#define OP_SEND_C 35009
#define OP_SEND_D 41153
#define OP_SEND_CD 43201
#define OP_SENDEX 32962
#define OP_SENDEX_C 35010
#define OP_SENDEX_D 41154
#define OP_SENDEX_CD 43202
#define OP_SETINVENTORY 32963
#define OP_SOUND 32964
#define OP_SWEEP 32965
#define OP_SWEEPEX 32966
#define OP_SYNCHRONIZE 32967
#define OP_TARGET 32968
#define OP_TARGET_C 35016
#define OP_TRACE 32969
#define OP_TRIGGER 32970
#define OP_TRIGGERAT 32971
#define OP_VOLUMEAT 32972
#define OP_WINLEVEL 32973
#define OP_XDIR 32974
#define OP_XDIR_C 35022
#define OP_XYDIR 32975
#define OP_YDIR 32976
#define OP_YDIR_C 35024
#define OP_MARK 32977
#define OP_TMARK 32978
#define OP_IN 32979
#define OP_NIN 32980
#define OP_MBEGIN 32981
#define OP_FLIP 32982
#define OP_COUNT 32983
#define OP_CLEAR 32984
#define OP_UNIQ 32985
#define OP_ARRAY 32986
#define OP_GETARRAY 32987
#define OP_INITARRAY 32988
#define OP_SETARRAY 32989
#define OP_ARRAYCELL 32990
#define OP_ARRAYSLICE 32991
#define OP_COPYARRAY 32992
#define OP_DOTPRODUCT 32993
#define OP_PATTERN 32994
#define OP_PATTERN_C 35042
#define OP_PATTERN_E 37090
#define OP_PATTERN_EC 39138
#define OP_PATTERNS 32995
#define OP_PATTERNS_C 35043
#define OP_PATTERNS_E 37091
#define OP_PATTERNS_EC 39139
#define OP_ROOK 32996
#define OP_BISHOP 32997
#define OP_QUEEN 32998
#define OP_CUT 32999
#define OP_BIZARRO 33000
#define OP_BIZARRO_C 35048
#define OP_BIZARRO_E 37096
#define OP_BIZARRO_EC 39144
#define OP_BIZARROSWAP 33001
#define OP_BIZARROSWAP_D 41193
#define OP_SWAPWORLD 33002
#define OP_ABSTRACT 33003
#define OP_SUPER 33004
#define OP_SUPER_C 35052
#define OP_FUNCTION 33005
#define OP_LOCAL 33006
#define OP_LABEL 33007
#define OP_STRING 33008
#define OP_INT16 33009
#define OP_INT32 33010
#define OP_DISPATCH 33011
#define OP_USERFLAG 33012
#define OP_INPUT 32901
#define OP_QUIZ 32902
#define OP_INPLACE 32903
#define OP_DEFAULTIMAGE 32904
#define OP_HELP 32905
#define OP_EDITORHELP 32906
#define OP_OTHERS 32907
#define OP_SUBS 32908
#define OP_ANIMATE 32909
#define OP_ANIMATEDEAD 32910
#define OP_ASSASSINATE 32911
#define OP_ASSASSINATE_C 34959
#define OP_BROADCAST 32912
#define OP_BROADCAST_D 41104
#define OP_BROADCASTAND 32913
#define OP_BROADCASTANDEX 32914
#define OP_BROADCASTCLASS 32915
#define OP_BROADCASTEX 32916
#define OP_BROADCASTEX_D 41108
#define OP_BROADCASTLIST 32917
#define OP_BROADCASTLISTEX 32918
#define OP_BROADCASTSUM 32919
#define OP_BROADCASTSUMEX 32920
#define OP_CHAIN 32921
#define OP_CHEBYSHEV 32922
#define OP_CHEBYSHEV_C 34970
#define OP_COLOC 32923
#define OP_COLOC_C 34971
#define OP_CREATE 32924
#define OP_CREATE_D 41116
#define OP_DATA 32925
#define OP_DELINVENTORY 32926
#define OP_DELTA 32927
#define OP_DESTROY 32928
#define OP_DESTROY_C 34976
#define OP_DESTROY_D 41120
#define OP_DESTROY_CD 43168
#define OP_FLUSHCLASS 32929
#define OP_FLUSHOBJ 32930
#define OP_FLUSHOBJ_C 34978
#define OP_GETINVENTORY 32931
#define OP_HEIGHTAT 32932
#define OP_HITME 32933
#define OP_IGNOREKEY 32934
#define OP_INTMOVE 32935
#define OP_INTMOVE_C 34983
#define OP_INTMOVE_D 41127
#define OP_INTMOVE_CD 43175
#define OP_JUMPTO 32936
#define OP_JUMPTO_C 34984
#define OP_JUMPTO_D 41128
#define OP_JUMPTO_CD 43176
#define OP_LOC 32937
#define OP_LOC_C 34985
#define OP_LOCATEME 32938
#define OP_LOSELEVEL 32939
#define OP_MANHATTAN 32940
#define OP_MANHATTAN_C 34988
#define OP_MAXINVENTORY 32941
#define OP_MOVE 32942
#define OP_MOVE_C 34990
#define OP_MOVE_D 41134
#define OP_MOVE_CD 43182
#define OP_MOVEPLUS 32943
#define OP_MOVEPLUS_C 34991
#define OP_MOVEPLUS_D 41135
#define OP_MOVEPLUS_CD 43183
#define OP_MOVETO 32944
#define OP_MOVETO_C 34992
#define OP_MOVETO_D 41136
#define OP_MOVETO_CD 43184
#define OP_PLUSMOVE 32945
#define OP_PLUSMOVE_C 34993
#define OP_PLUSMOVE_D 41137
#define OP_PLUSMOVE_CD 43185
#define OP_MINUSMOVE 32946
#define OP_MINUSMOVE_C 34994
#define OP_MINUSMOVE_D 41138
#define OP_MINUSMOVE_CD 43186
#define OP_NEWX 32947
#define OP_NEWXY 32948
#define OP_NEWY 32949
#define OP_OBJABOVE 32950
#define OP_OBJABOVE_C 34998
#define OP_OBJBELOW 32951
#define OP_OBJBELOW_C 34999
#define OP_OBJBOTTOMAT 32952
#define OP_OBJCLASSAT 32953
#define OP_OBJDIR 32954
#define OP_OBJDIR_C 35002
#define OP_OBJLAYERAT 32955
#define OP_OBJMOVINGTO 32956
#define OP_OBJTOPAT 32957
#define OP_POPUP 32958
#define OP_POPUPARGS 32959
#define OP_REL 32960
#define OP_REL_C 35008
#define OP_SEEK 32961
#define OP_SEEK_C 35009
#define OP_SEND 32962
#define OP_SEND_C 35010
#define OP_SEND_D 41154
#define OP_SEND_CD 43202
#define OP_SENDEX 32963
#define OP_SENDEX_C 35011
#define OP_SENDEX_D 41155
#define OP_SENDEX_CD 43203
#define OP_SETINVENTORY 32964
#define OP_SOUND 32965
#define OP_SWEEP 32966
#define OP_SWEEPEX 32967
#define OP_SYNCHRONIZE 32968
#define OP_TARGET 32969
#define OP_TARGET_C 35017
#define OP_TRACE 32970
#define OP_TRIGGER 32971
#define OP_TRIGGERAT 32972
#define OP_VOLUMEAT 32973
#define OP_WINLEVEL 32974
#define OP_XDIR 32975
#define OP_XDIR_C 35023
#define OP_XYDIR 32976
#define OP_YDIR 32977
#define OP_YDIR_C 35025
#define OP_MARK 32978
#define OP_TMARK 32979
#define OP_IN 32980
#define OP_NIN 32981
#define OP_MBEGIN 32982
#define OP_FLIP 32983
#define OP_COUNT 32984
#define OP_CLEAR 32985
#define OP_UNIQ 32986
#define OP_ARRAY 32987
#define OP_GETARRAY 32988
#define OP_INITARRAY 32989
#define OP_SETARRAY 32990
#define OP_ARRAYCELL 32991
#define OP_ARRAYSLICE 32992
#define OP_COPYARRAY 32993
#define OP_DOTPRODUCT 32994
#define OP_PATTERN 32995
#define OP_PATTERN_C 35043
#define OP_PATTERN_E 37091
#define OP_PATTERN_EC 39139
#define OP_PATTERNS 32996
#define OP_PATTERNS_C 35044
#define OP_PATTERNS_E 37092
#define OP_PATTERNS_EC 39140
#define OP_ROOK 32997
#define OP_BISHOP 32998
#define OP_QUEEN 32999
#define OP_CUT 33000
#define OP_BIZARRO 33001
#define OP_BIZARRO_C 35049
#define OP_BIZARRO_E 37097
#define OP_BIZARRO_EC 39145
#define OP_BIZARROSWAP 33002
#define OP_BIZARROSWAP_D 41194
#define OP_SWAPWORLD 33003
#define OP_ABSTRACT 33004
#define OP_SUPER 33005
#define OP_SUPER_C 35053
#define OP_FUNCTION 33006
#define OP_LOCAL 33007
#define OP_LABEL 33008
#define OP_STRING 33009
#define OP_INT16 33010
#define OP_INT32 33011
#define OP_DISPATCH 33012
#define OP_USERFLAG 33013
#ifdef HEROMESH_CLASS
static const Op_Names op_names[]={
{"*",8486939},
{"+",8421401},
{"+Move",10584240},
{"+Move",10584241},
{"-",8421402},
{"-Move",10584241},
{"-Move",10584242},
{"-rot",8421382},
{".",10518528},
{"/",8486940},
{"ANHH",8389394},
{"ARRIVED",8389124},
{"Abstract",8683755},
{"Animate",8421516},
{"AnimateDead",8421517},
{"Abstract",8683756},
{"Animate",8421517},
{"AnimateDead",8421518},
{"Arg1",8552571},
{"Arg2",8552572},
{"Arg3",8552573},
{"Array",8683738},
{"ArrayCell",8421598},
{"ArraySlice",8421599},
{"Array",8683739},
{"ArrayCell",8421599},
{"ArraySlice",8421600},
{"Arrivals",8618088},
{"Arrived",8618086},
{"Assassinate",8487054},
{"Assassinate",8487055},
{"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",8683650},
{"Bishop",8683749},
{"Bizarro",8618216},
{"BizarroSwap",10518761},
{"Broadcast",10518671},
{"BroadcastAnd",8421520},
{"BroadcastAndEx",8421521},
{"BroadcastEx",10518675},
{"BroadcastList",8421524},
{"BroadcastListEx",8421525},
{"BroadcastSum",8421526},
{"BroadcastSumEx",8421527},
{"Bishop",8683750},
{"Bizarro",8618217},
{"BizarroSwap",10518762},
{"Broadcast",10518672},
{"BroadcastAnd",8421521},
{"BroadcastAndEx",8421522},
{"BroadcastEx",10518676},
{"BroadcastList",8421525},
{"BroadcastListEx",8421526},
{"BroadcastSum",8421527},
{"BroadcastSumEx",8421528},
{"Busy",8618090},
{"CHEEP",8389393},
{"CHYEW",8389392},
{"CLICK",8389388},
{"COLLIDE",8389142},
{"COLLIDEBY",8389141},
{"COLLIDING",8389143},
{"CONFLICT",8389140},
{"CREATE",8389121},
{"CREATED",8389137},
{"Chebyshev",8487065},
{"Chebyshev",8487066},
{"Class",8486972},
{"Climb",9142352},
{"CodePage",8683651},
{"CollisionLayers",8487031},
{"Coloc",8487066},
{"Coloc",8487067},
{"Compatible",8487030},
{"CopyArray",8421600},
{"Create",10518683},
{"CopyArray",8421601},
{"Create",10518684},
{"DEEP_POP",8389417},
{"DEPARTED",8389125},
{"DESTROY",8389122},
{"DESTROYED",8389136},
{"DINK",8389390},
{"DOOR",8389378},
{"DRLRLRINK",8389398},
{"DYUPE",8389413},
{"Data",8421532},
{"DefaultImage",8683655},
{"DelInventory",8421533},
{"Delta",8421534},
{"Data",8421533},
{"DefaultImage",8683656},
{"DelInventory",8421534},
{"Delta",8421535},
{"Density",9142344},
{"Departed",8618087},
{"Departures",8618089},
{"Destroy",10584223},
{"Destroy",10584224},
{"Destroyed",8487028},
{"Dir",8618050},
{"Distance",9142342},
{"Done",8618099},
{"DotProduct",8421601},
{"DotProduct",8421602},
{"E",9437184},
{"END_TURN",8389139},
{"EditorHelp",8683657},
{"EditorHelp",8683658},
{"F",9437192},
{"FAROUT",8389421},
{"FFFFTT",8389399},
{"FLOATED",8389132},
{"FROG",8389383},
{"Finished",8552577},
{"FlushClass",8421536},
{"FlushObj",8487073},
{"FlushClass",8421537},
{"FlushObj",8487074},
{"From",8421498},
{"GLASS",8389379},
{"GLISSANT",8389419},
{"GetArray",8421595},
{"GetInventory",8421538},
{"GetArray",8421596},
{"GetInventory",8421539},
{"HAWK",8389425},
{"HEARTBEAT",8389407},
{"HIT",8389134},
{"HITBY",8389135},
{"Hard",8618068},
{"Height",9142350},
{"HeightAt",8421539},
{"Help",8683656},
{"HitMe",8421540},
{"HeightAt",8421540},
{"Help",8683657},
{"HitMe",8421541},
{"INIT",8389120},
{"IgnoreKey",8421541},
{"IgnoreKey",8421542},
{"Image",8618051},
{"InPlace",8683654},
{"InPlace",8683655},
{"Inertia",9142340},
{"InitArray",8421596},
{"Input",8683652},
{"IntMove",10584230},
{"InitArray",8421597},
{"Input",8683653},
{"IntMove",10584231},
{"Invisible",8618091},
{"JAYAYAYNG",8389416},
{"JUMPED",8389128},
{"JumpTo",10584231},
{"JumpTo",10584232},
{"KEWEL",8389422},
{"KEY",8389129},
{"KLECK",8389387},
{"KLINKK",8389385},
{"Key",8421504},
{"KeyCleared",8618092},
{"L",9437194},
{"LASTIMAGE",8389126},
{"LB",9437195},
{"LF",9437193},
{"LOCK",8389408},
{"LOOP",8388610},
{"Level",8421503},
{"Loc",8487080},
{"LocateMe",8421545},
{"LoseLevel",8421546},
{"Loc",8487081},
{"LocateMe",8421546},
{"LoseLevel",8421547},
{"MOVED",8389127},
{"MOVING",8389130},
{"Manhattan",8487083},
{"MaxInventory",8421548},
{"Manhattan",8487084},
{"MaxInventory",8421549},
{"Misc1",9142360},
{"Misc2",9142362},
{"Misc3",9142364},
{"Misc4",9142366},
{"Misc5",9142368},
{"Misc6",9142370},
{"Misc7",9142372},
{"Move",10584237},
{"Move+",10584238},
{"Move",10584238},
{"Move+",10584239},
{"MoveNumber",8421502},
{"MoveTo",10584239},
{"MoveTo",10584240},
{"Moved",8618097},
{"Moving",8618098},
{"Msg",8421497},
{"N",9437186},
{"NE",9437185},
{"NW",9437187},
{"NewX",8421554},
{"NewXY",8421555},
{"NewY",8421556},
{"NewX",8421555},
{"NewXY",8421556},
{"NewY",8421557},
{"OLDPHONE",8389402},
{"ONCE",8388609},
{"OSC",8388616},
{"OSCLOOP",8388618},
{"ObjAbove",8487093},
{"ObjBelow",8487094},
{"ObjBottomAt",8421559},
{"ObjClassAt",8421560},
{"ObjDir",8487097},
{"ObjLayerAt",8421562},
{"ObjMovingTo",8421563},
{"ObjTopAt",8421564},
{"Others",8683658},
{"P",8880354},
{"P*",8880355},
{"ObjAbove",8487094},
{"ObjBelow",8487095},
{"ObjBottomAt",8421560},
{"ObjClassAt",8421561},
{"ObjDir",8487098},
{"ObjLayerAt",8421563},
{"ObjMovingTo",8421564},
{"ObjTopAt",8421565},
{"Order",8683652},
{"Others",8683659},
{"P",8880355},
{"P*",8880356},
{"PLAYERMOVING",8389133},
{"POSTINIT",8389138},
{"POUR",8389377},
{"POWER",8389386},
{"Player",8487029},
{"PopUp",8421565},
{"Queen",8683750},
{"Quiz",8683653},
{"PopUp",8421566},
{"Queen",8683751},
{"Quiz",8683654},
{"R",9437198},
{"RATCHET1",8389418},
{"RATCHET2",8389412},
{"RATTLE",8389403},
{"RB",9437197},
{"RF",9437199},
{"Rel",8487103},
{"Rook",8683748},
{"Rel",8487104},
{"Rook",8683749},
{"S",9437190},
{"SE",9437191},
{"SMALL_POP",8389389},
{"SPLASH",8389376},
{"STEAM",8389424},
{"STOP",8388608},
{"SUBS",8683659},
{"SUBS",8683660},
{"SUNK",8389131},
{"SW",9437189},
{"Seek",8487104},
{"Seek",8487105},
{"Self",8421496},
{"Send",10584257},
{"SendEx",10584258},
{"SetArray",8421597},
{"SetInventory",8421571},
{"Send",10584258},
{"SendEx",10584259},
{"SetArray",8421598},
{"SetInventory",8421572},
{"Shape",8618047},
{"ShapeDir",8618070},
{"Sharp",8618069},
{"Shovable",8618071},
{"Sound",8421572},
{"Sound",8421573},
{"Stealthy",8618096},
{"Strength",9142354},
{"Super",8487148},
{"SwapWorld",8421610},
{"Sweep",8421573},
{"SweepEx",8421574},
{"Synchronize",8421575},
{"Super",8487149},
{"SwapWorld",8421611},
{"Sweep",8421574},
{"SweepEx",8421575},
{"Synchronize",8421576},
{"TAHTASHH",8389409},
{"THMP_thmp",8389405},
{"THWIT",8389384},
{"TICK",8389391},
{"Target",8487112},
{"Target",8487113},
{"Temperature",9142333},
{"Trace",8421577},
{"Trigger",8421578},
{"TriggerAt",8421579},
{"Trace",8421578},
{"Trigger",8421579},
{"TriggerAt",8421580},
{"UH_OH",8389382},
{"UNCORK",8389414},
{"UNHH",8389381},
{"UserSignal",8618093},
{"UserState",8618094},
{"VACUUM",8389411},
{"VisualOnly",8618095},
{"Volume",9142346},
{"VolumeAt",8421580},
{"VolumeAt",8421581},
{"W",9437188},
{"WAHOO",8389400},
{"WHACK",8389423},
{"Weight",9142348},
{"WinLevel",8421581},
{"XDir",8487118},
{"XYDir",8421583},
{"WinLevel",8421582},
{"XDir",8487119},
{"XYDir",8421584},
{"Xloc",8486976},
{"YDir",8487120},
{"YDir",8487121},
{"YEEHAW",8389401},
{"Yloc",8486977},
{"_",8421585},
{"_",8421586},
{"a?",8421435},
{"again",8683533},
{"and",8683544},
{"band",8421411},
{"begin",8683532},
{"bit",8683559},
{"bit0",8388609},
749
750
751
752
753
754
755
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
751
752
753
754
755
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







-
-
-
-
+
+
+
+





-
+




-
+










-
+






-
+













-
+

-
+



-
+

{"bit8",8423400},
{"bit9",8423401},
{"bnot",8421414},
{"bor",8421412},
{"bxor",8421413},
{"c?",8421429},
{"case",8683542},
{"chain",8421528},
{"clear",8421592},
{"count",8421591},
{"cut",8683751},
{"chain",8421529},
{"clear",8421593},
{"count",8421592},
{"cut",8683752},
{"cz?",8421430},
{"dup",8421377},
{"else",8683530},
{"eq",8421420},
{"eq2",8421421},
{"flip",8421590},
{"flip",8421591},
{"for",8683537},
{"ge",8486961},
{"gt",8486959},
{"if",8683529},
{"in",8421587},
{"in",8421588},
{"is",8421427},
{"land",8421416},
{"le",8486962},
{"lnot",8421419},
{"lor",8421417},
{"lsh",8421409},
{"lt",8486960},
{"lxor",8421418},
{"m?",8421431},
{"max",8486944},
{"mbegin",8683733},
{"mbegin",8683734},
{"min",8486943},
{"mod",8486941},
{"n?",8421428},
{"ne",8421422},
{"neg",8421406},
{"next",8683538},
{"nin",8421588},
{"nin",8421589},
{"nip",8421379},
{"o?",8421433},
{"or",8683543},
{"over",8421384},
{"oz?",8421434},
{"pick",8421383},
{"repeat",8683536},
{"ret",8421397},
{"rot",8421381},
{"rsh",8486946},
{"s?",8421432},
{"swap",8421378},
{"then",8683531},
{"tmark",8421586},
{"tmark",8421587},
{"tuck",8421380},
{"uniq",8421593},
{"uniq",8421594},
{"until",8683534},
{"while",8683535},
};
#define N_OP_NAMES 345
#define N_OP_NAMES 346
#endif