Free Hero Mesh

Check-in [1ed0e6ebf4]
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 ,WinLevel instruction too set the score (currently not used by anything).
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 1ed0e6ebf4f316ca25dcf1da14fdedb713efe7c3
User & Date: user on 2022-03-31 02:12:56
Other Links: manifest | tags
Context
2022-04-02
23:11
Add fileformat.doc check-in: 13c67423df user: user tags: trunk
2022-03-31
02:12
Implement the ,WinLevel instruction too set the score (currently not used by anything). check-in: 1ed0e6ebf4 user: user tags: trunk
2022-03-23
00:46
Some corrections of the logic of making up level tables from title strings containing data entry. check-in: 79b77f8924 user: user tags: trunk
Changes

Modified class.doc from [99fc2e3e3e] to [a0b21321f2].

2001
2002
2003
2004
2005
2006
2007





2008
2009
2010
2011
2012
2013
2014
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019







+
+
+
+
+








WinLevel  ( -- )
  Ends all execution and accepts the input sequence that resulted in the
  current game state as a valid solution. (In other words, the goal of the
  game is to find a sequence of inputs that result in the execution of a
  WinLevel instruction, without causing any errors or executing LoseLevel.)

,WinLevel  ( score -- )
  Same as WinLevel but you can set the score, which is treated as a signed
  number; lower numbers are considered to be a better score. (Currently,
  the score is not used by anything.)

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.

Modified exec.c from [171c864429] to [01a454ca8b].

39
40
41
42
43
44
45

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







+







Uint16 nlevelstrings;
Value*array_data;
Uint16 ndeadanim;
DeadAnimation*deadanim;
Uint8 no_dead_anim;
Uint32 max_trigger;
Uint8 conn_option;
Sint32 gameover_score;

typedef struct {
  Uint16 msg;
  Uint32 from;
  Value arg1,arg2,arg3;
} MessageVars;

3187
3188
3189
3190
3191
3192
3193
3194


3195
3196
3197
3198
3199
3200
3201
3188
3189
3190
3191
3192
3193
3194

3195
3196
3197
3198
3199
3200
3201
3202
3203







-
+
+







    case OP_VOLUMEAT: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(volume_at(t1.u,t2.u))); break;
    case OP_WEIGHT: StackReq(0,1); Push(NVALUE(o->weight)); break;
    case OP_WEIGHT_C: StackReq(1,1); Push(GetVariableOrAttributeOf(weight,NVALUE)); break;
    case OP_WEIGHT_E: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); o->weight=t1.u; break;
    case OP_WEIGHT_E16: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); o->weight=t1.u&0xFFFF; break;
    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_WINLEVEL: key_ignored=0; gameover=1; gameover_score=move_number+1; Throw(0); break;
    case OP_WINLEVEL_C: StackReq(1,0); t1=Pop(); Numeric(t1); key_ignored=0; gameover=1; gameover_score=t1.s; 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;

Modified heromesh.h from [5a98591922] to [1eb8371df6].

301
302
303
304
305
306
307

308
309
310
311
312
313
314
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315







+







extern Uint16 nlevelstrings;
extern Value*array_data;
extern Uint16 ndeadanim;
extern DeadAnimation*deadanim;
extern Uint8 no_dead_anim;
extern Uint32 max_trigger;
extern Uint8 conn_option;
extern Sint32 gameover_score;

const unsigned char*value_string_ptr(Value v);
void pfunlink(Uint32 n);
void pflink(Uint32 n);
Uint32 objalloc(Uint16 c);
void objtrash(Uint32 n);
void annihilate(void);

Modified instruc from [9080651e62] to [916ec56ae6].

285
286
287
288
289
290
291
292

293
294
295
296
297
298
299
285
286
287
288
289
290
291

292
293
294
295
296
297
298
299







-
+







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

; Operations with marks

Modified instruc.h from [67fc3e7eb1] to [d8eb492638].

427
428
429
430
431
432
433

434
435
436
437
438
439
440
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441







+







#define OP_TRACE 32981
#define OP_TRACESTACK 32982
#define OP_TRACESTACK_C 35030
#define OP_TRIGGER 32983
#define OP_TRIGGERAT 32984
#define OP_VOLUMEAT 32985
#define OP_WINLEVEL 32986
#define OP_WINLEVEL_C 35034
#define OP_XDIR 32987
#define OP_XDIR_C 35035
#define OP_XSTEP 32988
#define OP_XSTEP_C 35036
#define OP_XYDIR 32989
#define OP_YDIR 32990
#define OP_YDIR_C 35038
739
740
741
742
743
744
745
746

747
748
749
750
751
752
753
740
741
742
743
744
745
746

747
748
749
750
751
752
753
754







-
+







{"VisualOnly",8618099},
{"Volume",9142350},
{"VolumeAt",8421593},
{"W",9437188},
{"WAHOO",8389400},
{"WHACK",8389423},
{"Weight",9142352},
{"WinLevel",8421594},
{"WinLevel",8487130},
{"XDir",8487131},
{"XStep",8487132},
{"XYDir",8421597},
{"Xloc",8486980},
{"YDir",8487134},
{"YEEHAW",8389401},
{"YStep",8487135},