Free Hero Mesh

Check-in [a6d1d398e5]
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 XStep and YStep instructions.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: a6d1d398e580929c5150e06a49ec425f76df98fa
User & Date: user on 2022-02-13 19:32:54
Other Links: manifest | tags
Context
2022-02-14
08:01
Several minor corrections to documentation. No code changes. check-in: 3a60ccaef6 user: user tags: trunk
2022-02-13
19:32
Implement XStep and YStep instructions. check-in: a6d1d398e5 user: user tags: trunk
2022-02-12
00:59
Fix connection moving so that HIT/HITBY during the second phase are sorted and that even if one fails, it will try all of them in order that shoving etc will be all or nothing. check-in: 28294a20b2 user: user tags: trunk
Changes

Modified class.doc from [72f1aea5b1] to [36fb7b963b].

1965
1966
1967
1968
1969
1970
1971









1972
1973
1974
1975
1976
1977
1978
1979
1980
1981









1982
1983
1984
1985
1986
1987
1988
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006







+
+
+
+
+
+
+
+
+










+
+
+
+
+
+
+
+
+







XDir  ( dir -- newx )
  Finds the X coordinate of the cell in the specified direction.

,XDir  ( obj dir -- newx )
  Finds the X coordinate of the cell in the specified direction of the
  specified object.

XStep  ( dir -- result )
  Will be -1 or 0 or +1 depending on the direction; this is the X step
  difference for the specified direction. If it is a relative direction,
  it is relative to the Self object.

,XStep  ( obj dir -- result )
  Similar to XStep but relative directions are relative to the specified
  object, instead of necessarily Self.

XYDir  ( dir -- newx newy )
  Finds the X and Y coordinates of the cell in the given direction.

YDir  ( dir -- newy )
  Finds the Y coordinate of the cell in the given direction.

,YDir  ( obj dir -- newy )
  Finds the Y coordinate of the cell in the specified direction of the
  specified object.

YStep  ( dir -- result )
  Will be -1 or 0 or +1 depending on the direction; this is the Y step
  difference for the specified direction. If it is a relative direction,
  it is relative to the Self object.

,YStep  ( obj dir -- result )
  Similar to YStep but relative directions are relative to the specified
  object, instead of necessarily Self.


=== Block instructions ===

These are block flow controls. They include bodies of other instructions.

and <body> then  ( any -- any )
  Takes a value from the stack. If it is false, leaves it there and skips the

Modified exec.c from [369c2612d9] to [1fd1cfcc25].

3104
3105
3106
3107
3108
3109
3110


3111
3112
3113
3114
3115


3116
3117
3118
3119
3120
3121
3122
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126







+
+





+
+







    case OP_WEIGHT_EC: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->weight=t1.u; break;
    case OP_WEIGHT_EC16: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->weight=t1.u&0xFFFF; break;
    case OP_WINLEVEL: key_ignored=0; gameover=1; Throw(0); break;
    case OP_XDIR: StackReq(1,1); t1=Pop(); Numeric(t1); Push(NVALUE(o->x+x_delta[resolve_dir(obj,t1.u)])); break;
    case OP_XDIR_C: StackReq(2,1); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i==VOIDLINK) Push(NVALUE(0)); else Push(NVALUE(objects[i]->x+x_delta[resolve_dir(i,t1.u)])); break;
    case OP_XLOC: StackReq(0,1); Push(NVALUE(o->x)); break;
    case OP_XLOC_C: StackReq(1,1); Push(GetVariableOf(x,NVALUE)); break;
    case OP_XSTEP: StackReq(1,1); t1=Pop(); Numeric(t1); Push(NVALUE(x_delta[resolve_dir(obj,t1.u)])); break;
    case OP_XSTEP_C: StackReq(2,1); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i==VOIDLINK) Push(NVALUE(0)); else Push(NVALUE(x_delta[resolve_dir(i,t1.u)])); break;
    case OP_XYDIR: StackReq(1,2); t1=Pop(); Numeric(t1); i=resolve_dir(obj,t1.u); Push(NVALUE(o->x+x_delta[i])); Push(NVALUE(o->y+y_delta[i])); break;
    case OP_YDIR: StackReq(1,1); t1=Pop(); Numeric(t1); Push(NVALUE(o->y+y_delta[resolve_dir(obj,t1.u)])); break;
    case OP_YDIR_C: StackReq(2,1); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i==VOIDLINK) Push(NVALUE(0)); else Push(NVALUE(objects[i]->y+y_delta[resolve_dir(i,t1.u)])); break;
    case OP_YLOC: StackReq(0,1); Push(NVALUE(o->y)); break;
    case OP_YLOC_C: StackReq(1,1); Push(GetVariableOf(y,NVALUE)); break;
    case OP_YSTEP: StackReq(1,1); t1=Pop(); Numeric(t1); Push(NVALUE(y_delta[resolve_dir(obj,t1.u)])); break;
    case OP_YSTEP_C: StackReq(2,1); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i==VOIDLINK) Push(NVALUE(0)); else Push(NVALUE(y_delta[resolve_dir(i,t1.u)])); break;
#define MiscVar(a,b) \
    case a: StackReq(0,1); Push(o->b); break; \
    case a+0x0800: StackReq(1,1); Push(GetVariableOf(b,)); break; \
    case a+0x1000: NoIgnore(); StackReq(1,0); o->b=Pop(); break; \
    case a+0x1001: NoIgnore(); StackReq(1,0); t1=Pop(); if(!t1.t) t1.u&=0xFFFF; o->b=t1; break; \
    case a+0x1800: NoIgnore(); StackReq(2,0); t1=Pop(); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->b=t1; break; \
    case a+0x1801: NoIgnore(); StackReq(2,0); t1=Pop(); if(!t1.t) t1.u&=0xFFFF; i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->b=t1; break;

Modified instruc from [9a205534d1] to [67de8ba826].

284
285
286
287
288
289
290

291
292

293
294
295
296
297
298
299
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301







+


+







,Target
Trace
Trigger
TriggerAt
VolumeAt
WinLevel
,XDir
,XStep
XYDir
,YDir
,YStep

; Operations with marks
mark "_"
tmark
in
nin
-mbegin

Modified instruc.h from [bdabcd4ee7] to [c6eaacfc4c].

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
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







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












-
+





-
-
-
+
+
+
















-
-
-
+
+
+







#define OP_TRACE 32979
#define OP_TRIGGER 32980
#define OP_TRIGGERAT 32981
#define OP_VOLUMEAT 32982
#define OP_WINLEVEL 32983
#define OP_XDIR 32984
#define OP_XDIR_C 35032
#define OP_XSTEP 32985
#define OP_XSTEP_C 35033
#define OP_XYDIR 32985
#define OP_YDIR 32986
#define OP_YDIR_C 35034
#define OP_MARK 32987
#define OP_TMARK 32988
#define OP_IN 32989
#define OP_NIN 32990
#define OP_MBEGIN 32991
#define OP_FLIP 32992
#define OP_COUNT 32993
#define OP_CLEAR 32994
#define OP_UNIQ 32995
#define OP_ARRAY 32996
#define OP_GETARRAY 32997
#define OP_INITARRAY 32998
#define OP_SETARRAY 32999
#define OP_ARRAYCELL 33000
#define OP_ARRAYSLICE 33001
#define OP_COPYARRAY 33002
#define OP_DOTPRODUCT 33003
#define OP_PATTERN 33004
#define OP_PATTERN_C 35052
#define OP_PATTERN_E 37100
#define OP_XYDIR 32986
#define OP_YDIR 32987
#define OP_YDIR_C 35035
#define OP_YSTEP 32988
#define OP_YSTEP_C 35036
#define OP_MARK 32989
#define OP_TMARK 32990
#define OP_IN 32991
#define OP_NIN 32992
#define OP_MBEGIN 32993
#define OP_FLIP 32994
#define OP_COUNT 32995
#define OP_CLEAR 32996
#define OP_UNIQ 32997
#define OP_ARRAY 32998
#define OP_GETARRAY 32999
#define OP_INITARRAY 33000
#define OP_SETARRAY 33001
#define OP_ARRAYCELL 33002
#define OP_ARRAYSLICE 33003
#define OP_COPYARRAY 33004
#define OP_DOTPRODUCT 33005
#define OP_PATTERN 33006
#define OP_PATTERN_C 35054
#define OP_PATTERN_E 37102
#define OP_PATTERN_EC 39148
#define OP_PATTERNS 33005
#define OP_PATTERNS_C 35053
#define OP_PATTERNS_E 37101
#define OP_PATTERNS_EC 39149
#define OP_ROOK 33006
#define OP_BISHOP 33007
#define OP_QUEEN 33008
#define OP_CUT 33009
#define OP_BIZARRO 33010
#define OP_BIZARRO_C 35058
#define OP_BIZARRO_E 37106
#define OP_BIZARRO_EC 39154
#define OP_BIZARROSWAP 33011
#define OP_BIZARROSWAP_D 41203
#define OP_SWAPWORLD 33012
#define OP_ABSTRACT 33013
#define OP_SUPER 33014
#define OP_SUPER_C 35062
#define OP_FUNCTION 33015
#define OP_LOCAL 33016
#define OP_LABEL 33017
#define OP_STRING 33018
#define OP_INT16 33019
#define OP_INT32 33020
#define OP_DISPATCH 33021
#define OP_USERFLAG 33022
#define OP_PATTERN_EC 39150
#define OP_PATTERNS 33007
#define OP_PATTERNS_C 35055
#define OP_PATTERNS_E 37103
#define OP_PATTERNS_EC 39151
#define OP_ROOK 33008
#define OP_BISHOP 33009
#define OP_QUEEN 33010
#define OP_CUT 33011
#define OP_BIZARRO 33012
#define OP_BIZARRO_C 35060
#define OP_BIZARRO_E 37108
#define OP_BIZARRO_EC 39156
#define OP_BIZARROSWAP 33013
#define OP_BIZARROSWAP_D 41205
#define OP_SWAPWORLD 33014
#define OP_ABSTRACT 33015
#define OP_SUPER 33016
#define OP_SUPER_C 35064
#define OP_FUNCTION 33017
#define OP_LOCAL 33018
#define OP_LABEL 33019
#define OP_STRING 33020
#define OP_INT16 33021
#define OP_INT32 33022
#define OP_DISPATCH 33023
#define OP_USERFLAG 33024
#ifdef HEROMESH_CLASS
static const Op_Names op_names[]={
{"*",8486943},
{"+",8421405},
{"+Move",10584250},
{"-",8421406},
{"-Move",10584251},
{"-rot",8421382},
{".",10518528},
{"/",8486944},
{"ANHH",8389394},
{"ARRIVED",8389124},
{"Abstract",8683765},
{"Abstract",8683767},
{"Animate",8552596},
{"AnimateDead",8552597},
{"Arg1",8552576},
{"Arg2",8552577},
{"Arg3",8552578},
{"Array",8683748},
{"ArrayCell",8421608},
{"ArraySlice",8421609},
{"Array",8683750},
{"ArrayCell",8421610},
{"ArraySlice",8421611},
{"Arrivals",8618092},
{"Arrived",8618090},
{"Assassinate",8487062},
{"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",8683655},
{"Bishop",8683759},
{"Bizarro",8618226},
{"BizarroSwap",10518771},
{"Bishop",8683761},
{"Bizarro",8618228},
{"BizarroSwap",10518773},
{"Broadcast",10518679},
{"BroadcastAnd",8421528},
{"BroadcastAndEx",8421529},
{"BroadcastEx",10518683},
{"BroadcastList",8421532},
{"BroadcastListEx",8421533},
{"BroadcastSum",8421534},
542
543
544
545
546
547
548
549

550
551
552
553
554
555
556
546
547
548
549
550
551
552

553
554
555
556
557
558
559
560







-
+







{"CodePage",8683656},
{"CollisionLayers",8487036},
{"Coloc",8487074},
{"Compatible",8487035},
{"Connect",8487075},
{"Connection",8618104},
{"Control",8421514},
{"CopyArray",8421610},
{"CopyArray",8421612},
{"Create",10518692},
{"DEEP_POP",8389417},
{"DEPARTED",8389125},
{"DESTROY",8389122},
{"DESTROYED",8389136},
{"DINK",8389390},
{"DOOR",8389378},
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
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







-
+















-
+















-
+







{"Departed",8618091},
{"Departures",8618093},
{"Destroy",10584232},
{"Destroyed",8487033},
{"Dir",8618054},
{"Distance",9142346},
{"Done",8618103},
{"DotProduct",8421611},
{"DotProduct",8421613},
{"E",9437184},
{"END_TURN",8389139},
{"EditorHelp",8683665},
{"F",9437192},
{"FAROUT",8389421},
{"FFFFTT",8389399},
{"FLOATED",8389132},
{"FROG",8389383},
{"FakeMove",8487081},
{"Finished",8552582},
{"FlushClass",8421546},
{"FlushObj",8487083},
{"From",8421503},
{"GLASS",8389379},
{"GLISSANT",8389419},
{"GetArray",8421605},
{"GetArray",8421607},
{"GetInventory",8421548},
{"HAWK",8389425},
{"HEARTBEAT",8389407},
{"HIT",8389134},
{"HITBY",8389135},
{"Hard",8618072},
{"Height",9142354},
{"HeightAt",8421549},
{"Help",8683664},
{"HitMe",8421550},
{"INIT",8389120},
{"IgnoreKey",8421551},
{"Image",8618055},
{"InPlace",8683662},
{"Inertia",9142344},
{"InitArray",8421606},
{"InitArray",8421608},
{"Input",8683660},
{"IntMove",10584240},
{"Invisible",8618095},
{"JAYAYAYNG",8389416},
{"JUMPED",8389128},
{"JumpTo",10584241},
{"KEWEL",8389422},
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
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







-
-
+
+






-
+








-
+













-
+








-
-
+
+







{"ObjClassAt",8421570},
{"ObjDir",8487107},
{"ObjLayerAt",8421572},
{"ObjMovingTo",8421573},
{"ObjTopAt",8421574},
{"Order",8683657},
{"Others",8683666},
{"P",8880364},
{"P*",8880365},
{"P",8880366},
{"P*",8880367},
{"PLAYERMOVING",8389133},
{"POSTINIT",8389138},
{"POUR",8389377},
{"POWER",8389386},
{"Player",8487034},
{"PopUp",8421575},
{"Queen",8683760},
{"Queen",8683762},
{"Quiz",8683661},
{"R",9437198},
{"RATCHET1",8389418},
{"RATCHET2",8389412},
{"RATTLE",8389403},
{"RB",9437197},
{"RF",9437199},
{"Rel",8487113},
{"Rook",8683758},
{"Rook",8683760},
{"S",9437190},
{"SE",9437191},
{"SMALL_POP",8389389},
{"SPLASH",8389376},
{"STEAM",8389424},
{"STOP",8388608},
{"SUBS",8683667},
{"SUNK",8389131},
{"SW",9437189},
{"Seek",8487114},
{"Self",8421501},
{"Send",10584267},
{"SendEx",10584268},
{"SetArray",8421607},
{"SetArray",8421609},
{"SetInventory",8421581},
{"Shape",8618051},
{"ShapeDir",8618074},
{"Sharp",8618073},
{"Shovable",8618075},
{"Sound",8421582},
{"Stealthy",8618100},
{"Strength",9142358},
{"Super",8487158},
{"SwapWorld",8421620},
{"Super",8487160},
{"SwapWorld",8421622},
{"Sweep",8421583},
{"SweepEx",8421584},
{"Synchronize",8421585},
{"TAHTASHH",8389409},
{"THMP_thmp",8389405},
{"THWIT",8389384},
{"TICK",8389391},
727
728
729
730
731
732
733

734

735
736

737

738
739

740
741
742
743
744
745
746
731
732
733
734
735
736
737
738

739
740

741
742
743
744

745
746
747
748
749
750
751
752







+
-
+

-
+

+

-
+







{"VolumeAt",8421590},
{"W",9437188},
{"WAHOO",8389400},
{"WHACK",8389423},
{"Weight",9142352},
{"WinLevel",8421591},
{"XDir",8487128},
{"XStep",8487129},
{"XYDir",8421593},
{"XYDir",8421594},
{"Xloc",8486980},
{"YDir",8487130},
{"YDir",8487131},
{"YEEHAW",8389401},
{"YStep",8487132},
{"Yloc",8486981},
{"_",8421595},
{"_",8421597},
{"a?",8421439},
{"again",8683533},
{"and",8683544},
{"band",8421415},
{"begin",8683532},
{"bit",8683563},
{"bit0",8388609},
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
820
821
822
823
824
825
826
827
828
829
830
831
832
833

834
835

836
837
838
839

840
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
820
821
822
823

824
825
826
827
828
829
830
831
832
833
834
835
836
837
838

839
840

841
842
843
844

845
846







-
-
-
+
+
+






-
+





-
+











-
+






-
+














-
+

-
+



-
+

{"bit9",8423401},
{"bnot",8421418},
{"bor",8421416},
{"bxor",8421417},
{"c?",8421433},
{"case",8683542},
{"chain",8421536},
{"clear",8421602},
{"count",8421601},
{"cut",8683761},
{"clear",8421604},
{"count",8421603},
{"cut",8683763},
{"cz?",8421434},
{"dup",8421377},
{"else",8683530},
{"eq",8421424},
{"eq2",8421425},
{"exec",8486940},
{"flip",8421600},
{"flip",8421602},
{"for",8683537},
{"fork",8683545},
{"ge",8486965},
{"gt",8486963},
{"if",8683529},
{"in",8421597},
{"in",8421599},
{"is",8421431},
{"land",8421420},
{"le",8486966},
{"link",8683547},
{"lnot",8421423},
{"lor",8421421},
{"lsh",8421413},
{"lt",8486964},
{"lxor",8421422},
{"m?",8421435},
{"max",8486948},
{"mbegin",8683743},
{"mbegin",8683745},
{"min",8486947},
{"mod",8486945},
{"n?",8421432},
{"ne",8421426},
{"neg",8421410},
{"next",8683538},
{"nin",8421598},
{"nin",8421600},
{"nip",8421379},
{"o?",8421437},
{"or",8683543},
{"over",8421384},
{"oz?",8421438},
{"pick",8421383},
{"repeat",8683536},
{"ret",8421397},
{"rot",8421381},
{"rsh",8486950},
{"rtn",8683546},
{"s?",8421436},
{"swap",8421378},
{"then",8683531},
{"tmark",8421596},
{"tmark",8421598},
{"tuck",8421380},
{"uniq",8421603},
{"uniq",8421605},
{"until",8683534},
{"while",8683535},
};
#define N_OP_NAMES 356
#define N_OP_NAMES 358
#endif