Overview
Comment: | Improve compatibility (by testing the behaviours), add ObjLayerAt and Done instructions, implement collisions, implement MoveTo and JumpTo and Assassinate |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b323d9054c47d4ea9eba24b06f2d8142 |
User & Date: | user on 2020-12-14 07:27:11 |
Other Links: | manifest | tags |
Context
2020-12-14
| ||
08:24 | Implement the tuck instruction check-in: 7f3d502de0 user: user tags: trunk | |
07:27 | Improve compatibility (by testing the behaviours), add ObjLayerAt and Done instructions, implement collisions, implement MoveTo and JumpTo and Assassinate check-in: b323d9054c user: user tags: trunk | |
2020-12-13
| ||
21:28 | Implement the CollisionLayers and Inertia instructions. check-in: c08f797ece user: user tags: trunk | |
Changes
Modified exec.c from [2f75954b21] to [936158aec5].
︙ | ︙ | |||
54 55 56 57 58 59 60 61 62 63 64 65 66 67 | // For arrival/departure masks #define Xbit(a) ((a)%5-2) #define Ybit(a) (2-(a)/5) static Value send_message(Uint32 from,Uint32 to,Uint16 msg,Value arg1,Value arg2,Value arg3); static Uint32 broadcast(Uint32 from,int c,Uint16 msg,Value arg1,Value arg2,Value arg3,int s); static const Sint8 x_delta[8]={1,1,0,-1,-1,-1,0,1}; static const Sint8 y_delta[8]={0,-1,-1,-1,0,1,1,1}; const char*value_string_ptr(Value v) { switch(v.t) { case TY_STRING: return stringpool[v.u]; | > | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | // For arrival/departure masks #define Xbit(a) ((a)%5-2) #define Ybit(a) (2-(a)/5) static Value send_message(Uint32 from,Uint32 to,Uint16 msg,Value arg1,Value arg2,Value arg3); static Uint32 broadcast(Uint32 from,int c,Uint16 msg,Value arg1,Value arg2,Value arg3,int s); static Value destroy(Uint32 from,Uint32 to,Uint32 why); static const Sint8 x_delta[8]={1,1,0,-1,-1,-1,0,1}; static const Sint8 y_delta[8]={0,-1,-1,-1,0,1,1,1}; const char*value_string_ptr(Value v) { switch(v.t) { case TY_STRING: return stringpool[v.u]; |
︙ | ︙ | |||
151 152 153 154 155 156 157 | } #define animfree free void objtrash(Uint32 n) { Object*o=objects[n]; if(!o) return; | < < < < < < < < < | 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | } #define animfree free void objtrash(Uint32 n) { Object*o=objects[n]; if(!o) return; animfree(o->anim); if(o->down==VOIDLINK) playfield[o->x+o->y*64-65]=o->up; else objects[o->down]->up=o->up; if(o->up!=VOIDLINK) objects[o->up]->down=o->down; o->down=o->up=VOIDLINK; if(firstobj==n) firstobj=o->next; if(lastobj==n) lastobj=o->prev; |
︙ | ︙ | |||
230 231 232 233 234 235 236 237 238 239 240 241 242 243 | i=playfield[x+y*64-65]; while(i!=VOIDLINK) { if(objects[i]->class==c && !(objects[i]->oflags&OF_DESTROYED)) return i; i=objects[i]->up; } return VOIDLINK; } static Uint32 obj_top_at(Uint32 x,Uint32 y) { Uint32 i,r; if(x<1 || x>pfwidth || y<1 || y>pfheight) return VOIDLINK; i=playfield[x+y*64-65]; r=VOIDLINK; while(i!=VOIDLINK) { | > > > > > > > > > > > | 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | i=playfield[x+y*64-65]; while(i!=VOIDLINK) { if(objects[i]->class==c && !(objects[i]->oflags&OF_DESTROYED)) return i; i=objects[i]->up; } return VOIDLINK; } static Uint32 obj_layer_at(Uint8 b,Uint32 x,Uint32 y) { Uint32 i; if(x<1 || x>pfwidth || y<1 || y>pfheight) return VOIDLINK; i=playfield[x+y*64-65]; while(i!=VOIDLINK) { if(!(objects[i]->oflags&OF_DESTROYED) && (classes[objects[i]->class]->collisionLayers&b)) return i; i=objects[i]->up; } return VOIDLINK; } static Uint32 obj_top_at(Uint32 x,Uint32 y) { Uint32 i,r; if(x<1 || x>pfwidth || y<1 || y>pfheight) return VOIDLINK; i=playfield[x+y*64-65]; r=VOIDLINK; while(i!=VOIDLINK) { |
︙ | ︙ | |||
260 261 262 263 264 265 266 267 268 269 270 271 | objects[n]->shape=v; } static void sink(Uint32 x,Uint32 y) { // Before, x(o) was above y(p); now make y(p) above x(o) Object*o=objects[x]; Object*p=objects[y]; Value v; p->up=o->up; o->down=p->down; o->up=y; p->down=x; | > > > | | | 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | objects[n]->shape=v; } static void sink(Uint32 x,Uint32 y) { // Before, x(o) was above y(p); now make y(p) above x(o) Object*o=objects[x]; Object*p=objects[y]; int i=o->x+o->y*64-65; Value v; p->up=o->up; o->down=p->down; o->up=y; p->down=x; if(o->down==VOIDLINK && !(o->oflags&OF_BIZARRO)) playfield[i]=x; if(p->down==VOIDLINK && !(p->oflags&OF_BIZARRO)) playfield[i]=y; v=send_message(x,y,MSG_FLOATED,NVALUE(0),NVALUE(0),NVALUE(0)); 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(v<o->density) { o->density=v; |
︙ | ︙ | |||
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 | return x.s>y.s; } static inline int v_unsigned_greater(Value x,Value y) { if(x.t!=TY_NUMBER || y.t!=TY_NUMBER) Throw("Type mismatch"); return x.u>y.u; } 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; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | 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 | return x.s>y.s; } static inline int v_unsigned_greater(Value x,Value y) { if(x.t!=TY_NUMBER || y.t!=TY_NUMBER) Throw("Type mismatch"); return x.u>y.u; } static Uint8 collisions_at(Uint32 x,Uint32 y) { Uint8 c=0; Uint32 n; if(x<1 || y<1 || x>pfwidth || y>pfheight) return 0; n=playfield[x+y*64-65]; while(n!=VOIDLINK) { if(!(objects[n]->oflags&OF_DESTROYED)) c|=classes[objects[n]->class]->collisionLayers; n=objects[n]->up; } return c; } static Uint8 collide_with(Uint8 b,Uint32 n,Uint8 x,Uint8 y,Uint16 c) { int i,j; Uint8 r=0; Uint32 e[8]={VOIDLINK,VOIDLINK,VOIDLINK,VOIDLINK,VOIDLINK,VOIDLINK,VOIDLINK,VOIDLINK}; Uint8 re[8]={0,0,0,0,0,0,0,0}; Value v; if(StackProtection()) Throw("Call stack overflow"); for(i=0;i<8;i++) if(b&(1<<i)) e[i]=obj_layer_at(1<<i,x,y); for(i=0;i<7;i++) for(j=i;j<8;j++) if(e[i]==e[j]) e[j]=VOIDLINK; if(n!=VOIDLINK) v=send_message(VOIDLINK,n,MSG_COLLIDE,NVALUE(x),NVALUE(y),NVALUE(b)); if(v.t) Throw("Type mismatch in COLLIDE"); r=v.u; for(i=0;i<8;i++) if(e[i]!=VOIDLINK && !(r&0x02)) { v=send_message(n,e[i],MSG_COLLIDEBY,NVALUE(n==VOIDLINK?0:objects[n]->x),NVALUE(n==VOIDLINK?0:objects[n]->y),CVALUE(c)); if(v.t) Throw("Type mismatch in COLLIDEBY"); r|=re[i]=v.u; } if(!(r&0x01)) { // See if we can destroy some objects to make room b=classes[c]->collisionLayers; if(obj_layer_at(b,x,y)==VOIDLINK) return r; n=playfield[x+y*64-65]; while(n!=VOIDLINK) { if(!(objects[n]->oflags&OF_DESTROYED)) { if(i=classes[objects[n]->class]->collisionLayers) { i=__builtin_ctz(i); if(e[i]!=n || !(re[i]&0x10)) return r|0x01; } } n=objects[n]->up; } for(i=0;i<8;i++) { if(e[i]!=VOIDLINK && (re[i]&0x10) && objects[e[i]]->x==x && objects[e[i]]->y==y && !(objects[e[i]]->oflags&OF_DESTROYED)) { destroy(n,e[i],3); } } if(obj_layer_at(b,x,y)!=VOIDLINK) r|=0x01; } return r; } 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) return VOIDLINK; o=objects[n]; o->x=x; o->y=y; o->image=im; o->dir=d; |
︙ | ︙ | |||
365 366 367 368 369 370 371 | while(m!=VOIDLINK) { p=objects[m]; if(p->arrivals&(1<<i)) send_message(n,m,MSG_CREATED,NVALUE(x),NVALUE(y),v); m=p->up; } } if(o->oflags&OF_DESTROYED) return VOIDLINK; | | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | while(m!=VOIDLINK) { p=objects[m]; if(p->arrivals&(1<<i)) send_message(n,m,MSG_CREATED,NVALUE(x),NVALUE(y),v); m=p->up; } } if(o->oflags&OF_DESTROYED) return VOIDLINK; m=objects[n]->up; if(m!=VOIDLINK) { v=send_message(VOIDLINK,n,MSG_SUNK,NVALUE(0),NVALUE(0),v); while(m!=VOIDLINK) { send_message(n,m,MSG_FLOATED,NVALUE(0),NVALUE(0),v); m=objects[m]->up; } } if(o->oflags&OF_DESTROYED) return VOIDLINK; return n; } 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)) { o->oflags|=OF_DESTROYED; if(firstobj==to) firstobj=o->next; if(lastobj==to) lastobj=o->prev; if(o->prev!=VOIDLINK) objects[o->prev]->next=o->next; if(o->next!=VOIDLINK) objects[o->next]->prev=o->prev; if(why!=8 && !(o->oflags&OF_VISUALONLY)) { // Not checking for stealth; stealth only applies to movement, not destruction xx=o->x; yy=o->y; for(i=25;i>=0;i--) { x=xx+Xbit(i); y=yy+Ybit(i); if(x<1 || x>pfwidth || y<1 || y>pfheight) continue; n=playfield[x+y*64-65]; while(n!=VOIDLINK) { o=objects[n]; if(o->departures&(1<<i)) send_message(to,n,MSG_DESTROYED,NVALUE(0),NVALUE(0),NVALUE(why)); n=o->up; } } } } return v; } 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 && (classes[o->class]->cflags&CF_COMPATIBLE)) 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) { if(v_bool(send_message(n,m,MSG_PLAYERMOVING,NVALUE(x),NVALUE(y),OVALUE(from)))) return 0; m=objects[m]->prev; } } if(!(o->oflags&OF_BIZARRO) && (i=classes[o->class]->collisionLayers) && (xx=collisions_at(x,y)&i)) { if((i=collide_with(xx,VOIDLINK,x,y,o->class))&0x01) return i&0x04?1:0; } if(!(o->oflags&((classes[o->class]->cflags&CF_COMPATIBLE?OF_VISUALONLY:0)|OF_STEALTHY))) { for(i=25;i>=0;i--) { xx=o->x+Xbit(i); yy=o->y+Ybit(i); if(xx<1 || xx>pfwidth || yy<1 || yy>pfheight) continue; m=playfield[xx+yy*64-65]; while(m!=VOIDLINK) { p=objects[m]; if(p->departures&(1<<i)) p->departed|=1<<i; m=p->up; } } } pfunlink(n); o->distance+=abs(x-o->x)+abs(y-o->y); o->x=x; o->y=y; pflink(n); if(!(o->oflags&((classes[o->class]->cflags&CF_COMPATIBLE?OF_VISUALONLY:0)|OF_STEALTHY))) { for(i=25;i>=0;i--) { xx=x+Xbit(i); yy=y+Ybit(i); if(xx<1 || xx>pfwidth || yy<1 || yy>pfheight) continue; m=playfield[xx+yy*64-65]; while(m!=VOIDLINK) { p=objects[m]; if(p->arrivals&(1<<i)) p->arrived|=1<<i; m=p->up; } } } if(!(o->oflags&OF_VISUALONLY)) { m=objects[n]->up; if(m!=VOIDLINK) { v=send_message(VOIDLINK,n,MSG_SUNK,NVALUE(0),NVALUE(0),v); while(m!=VOIDLINK) { send_message(n,m,MSG_FLOATED,NVALUE(0),NVALUE(0),v); m=objects[m]->up; } } } // The OF_MOVED flag is set elsewhere, not here return 1; } static int jump_to(Uint32 from,Uint32 n,Uint32 x,Uint32 y) { int xx,yy; if(n==VOIDLINK) return 0; xx=objects[n]->x; yy=objects[n]->y; if(!move_to(from,n,x,y)) return 0; send_message(VOIDLINK,n,MSG_JUMPED,NVALUE(xx),NVALUE(yy),OVALUE(from)); return 1; } static void trace_stack(Uint32 obj) { Value t2=Pop(); Value t1=Pop(); Value t0=Pop(); Object*o; if(!main_options['t']) return; |
︙ | ︙ | |||
578 579 580 581 582 583 584 585 586 587 588 589 590 591 | case OP_ARRIVALS_C: StackReq(1,1); Push(GetVariableOrAttributeOf(arrivals&0x1FFFFFF,NVALUE)); break; case OP_ARRIVALS_E: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); o->arrivals=t1.u; break; case OP_ARRIVALS_EC: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->arrivals=t1.u; break; case OP_ARRIVED: StackReq(0,1); Push(NVALUE(o->arrived&0x1FFFFFF)); break; case OP_ARRIVED_C: StackReq(1,1); Push(GetVariableOf(arrived&0x1FFFFFF,NVALUE)); break; case OP_ARRIVED_E: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); o->arrived=t1.u; break; case OP_ARRIVED_EC: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->arrived=t1.u; break; case OP_BAND: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u&t2.u)); break; case OP_BNOT: StackReq(1,1); t1=Pop(); Numeric(t1); Push(NVALUE(~t1.u)); break; case OP_BOR: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u|t2.u)); break; case OP_BROADCAST: StackReq(4,1); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_broadcast(obj,t1,t2,t3,t4,NVALUE(0),0)); break; case OP_BROADCAST_D: StackReq(4,0); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); v_broadcast(obj,t1,t2,t3,t4,NVALUE(0),0); break; case OP_BROADCASTCLASS: StackReq(3,1); t4=Pop(); t3=Pop(); t2=Pop(); Push(v_broadcast(obj,CVALUE(code[ptr++]),t2,t3,t4,NVALUE(0),0)); break; case OP_BROADCASTEX: StackReq(5,1); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_broadcast(obj,t1,t2,t3,t4,t5,0)); break; | > > | 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 | case OP_ARRIVALS_C: StackReq(1,1); Push(GetVariableOrAttributeOf(arrivals&0x1FFFFFF,NVALUE)); break; case OP_ARRIVALS_E: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); o->arrivals=t1.u; break; case OP_ARRIVALS_EC: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->arrivals=t1.u; break; case OP_ARRIVED: StackReq(0,1); Push(NVALUE(o->arrived&0x1FFFFFF)); break; case OP_ARRIVED_C: StackReq(1,1); Push(GetVariableOf(arrived&0x1FFFFFF,NVALUE)); break; case OP_ARRIVED_E: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); o->arrived=t1.u; break; case OP_ARRIVED_EC: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->arrived=t1.u; break; case OP_ASSASSINATE: NoIgnore(); destroy(obj,obj,8); break; case OP_ASSASSINATE_C: NoIgnore(); StackReq(1,0); i=v_object(Pop()); destroy(obj,i,8); break; case OP_BAND: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u&t2.u)); break; case OP_BNOT: StackReq(1,1); t1=Pop(); Numeric(t1); Push(NVALUE(~t1.u)); break; case OP_BOR: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u|t2.u)); break; case OP_BROADCAST: StackReq(4,1); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_broadcast(obj,t1,t2,t3,t4,NVALUE(0),0)); break; case OP_BROADCAST_D: StackReq(4,0); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); v_broadcast(obj,t1,t2,t3,t4,NVALUE(0),0); break; case OP_BROADCASTCLASS: StackReq(3,1); t4=Pop(); t3=Pop(); t2=Pop(); Push(v_broadcast(obj,CVALUE(code[ptr++]),t2,t3,t4,NVALUE(0),0)); break; case OP_BROADCASTEX: StackReq(5,1); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_broadcast(obj,t1,t2,t3,t4,t5,0)); break; |
︙ | ︙ | |||
638 639 640 641 642 643 644 645 646 647 648 649 650 651 | case OP_DIR_EC: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->dir=resolve_dir(i,t1.u); break; case OP_DISTANCE: StackReq(0,1); Push(NVALUE(o->distance)); break; case OP_DISTANCE_C: StackReq(1,1); Push(GetVariableOf(distance,NVALUE)); break; case OP_DISTANCE_E: StackReq(1,0); t1=Pop(); Numeric(t1); o->distance=t1.u; break; case OP_DISTANCE_EC: StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->distance=t1.u; break; case OP_DIV: StackReq(2,1); t2=Pop(); DivideBy(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u/t2.u)); break; case OP_DIV_C: StackReq(2,1); t2=Pop(); DivideBy(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.s/t2.s)); break; case OP_DROP: StackReq(1,0); Pop(); break; case OP_DROP_D: StackReq(2,0); Pop(); Pop(); break; case OP_DUP: StackReq(1,2); t1=Pop(); Push(t1); Push(t1); break; case OP_EQ: StackReq(2,1); t2=Pop(); t1=Pop(); Push(NVALUE(v_equal(t1,t2)?1:0)); break; case OP_FOR: NoIgnore(); StackReq(3,1); t3=Pop(); t2=Pop(); t1=Pop(); ptr=v_for(code,ptr,t1,t2,t3); break; case OP_FROM: StackReq(0,1); Push(OVALUE(msgvars.from)); break; case OP_GE: StackReq(2,1); t2=Pop(); t1=Pop(); Push(NVALUE(v_unsigned_greater(t2,t1)?0:1)); break; | > > > > | 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 | case OP_DIR_EC: NoIgnore(); StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->dir=resolve_dir(i,t1.u); break; case OP_DISTANCE: StackReq(0,1); Push(NVALUE(o->distance)); break; case OP_DISTANCE_C: StackReq(1,1); Push(GetVariableOf(distance,NVALUE)); break; case OP_DISTANCE_E: StackReq(1,0); t1=Pop(); Numeric(t1); o->distance=t1.u; break; case OP_DISTANCE_EC: StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->distance=t1.u; break; case OP_DIV: StackReq(2,1); t2=Pop(); DivideBy(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u/t2.u)); break; case OP_DIV_C: StackReq(2,1); t2=Pop(); DivideBy(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.s/t2.s)); break; case OP_DONE: StackReq(0,1); if(o->oflags&OF_DONE) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_DONE_C: StackReq(1,1); GetFlagOf(OF_DONE); break; case OP_DONE_E: StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_DONE; else o->oflags&=~OF_BUSY; break; case OP_DONE_EC: StackReq(2,0); SetFlagOf(OF_DONE); break; case OP_DROP: StackReq(1,0); Pop(); break; case OP_DROP_D: StackReq(2,0); Pop(); Pop(); break; case OP_DUP: StackReq(1,2); t1=Pop(); Push(t1); Push(t1); break; case OP_EQ: StackReq(2,1); t2=Pop(); t1=Pop(); Push(NVALUE(v_equal(t1,t2)?1:0)); break; case OP_FOR: NoIgnore(); StackReq(3,1); t3=Pop(); t2=Pop(); t1=Pop(); ptr=v_for(code,ptr,t1,t2,t3); break; case OP_FROM: StackReq(0,1); Push(OVALUE(msgvars.from)); break; case OP_GE: StackReq(2,1); t2=Pop(); t1=Pop(); Push(NVALUE(v_unsigned_greater(t2,t1)?0:1)); break; |
︙ | ︙ | |||
676 677 678 679 680 681 682 683 684 685 686 687 688 689 | case OP_INERTIA_EC16: StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->inertia=t1.u&0xFFFF; break; case OP_INT16: StackReq(0,1); Push(NVALUE(code[ptr++])); break; case OP_INT32: StackReq(0,1); t1=UVALUE(code[ptr++]<<16,TY_NUMBER); t1.u|=code[ptr++]; Push(t1); break; case OP_INVISIBLE: StackReq(0,1); if(o->oflags&OF_INVISIBLE) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_INVISIBLE_C: StackReq(1,1); GetFlagOf(OF_INVISIBLE); break; case OP_INVISIBLE_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_INVISIBLE; else o->oflags&=~OF_INVISIBLE; break; case OP_INVISIBLE_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_INVISIBLE); break; case OP_KEY: StackReq(0,1); Push(NVALUE(current_key)); break; case OP_KEYCLEARED: StackReq(0,1); if(o->oflags&OF_KEYCLEARED) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_KEYCLEARED_C: StackReq(1,1); GetFlagOf(OF_KEYCLEARED); break; case OP_KEYCLEARED_E: StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_KEYCLEARED; else o->oflags&=~OF_KEYCLEARED; break; case OP_KEYCLEARED_EC: StackReq(2,0); SetFlagOf(OF_KEYCLEARED); break; case OP_LAND: StackReq(2,1); t1=Pop(); t2=Pop(); if(v_bool(t1) && v_bool(t2)) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_LE: StackReq(2,1); t2=Pop(); t1=Pop(); Push(NVALUE(v_unsigned_greater(t1,t2)?0:1)); break; | > > > > | 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 | case OP_INERTIA_EC16: StackReq(2,0); t1=Pop(); Numeric(t1); i=v_object(Pop()); if(i!=VOIDLINK) objects[i]->inertia=t1.u&0xFFFF; break; case OP_INT16: StackReq(0,1); Push(NVALUE(code[ptr++])); break; case OP_INT32: StackReq(0,1); t1=UVALUE(code[ptr++]<<16,TY_NUMBER); t1.u|=code[ptr++]; Push(t1); break; case OP_INVISIBLE: StackReq(0,1); if(o->oflags&OF_INVISIBLE) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_INVISIBLE_C: StackReq(1,1); GetFlagOf(OF_INVISIBLE); break; case OP_INVISIBLE_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_INVISIBLE; else o->oflags&=~OF_INVISIBLE; break; case OP_INVISIBLE_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_INVISIBLE); break; case OP_JUMPTO: NoIgnore(); StackReq(2,1); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); Push(NVALUE(jump_to(obj,obj,t2.u,t3.u))); break; case OP_JUMPTO_C: NoIgnore(); StackReq(3,1); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); i=v_object(Pop()); Push(NVALUE(jump_to(obj,i,t2.u,t3.u))); break; case OP_JUMPTO_D: NoIgnore(); StackReq(2,0); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); jump_to(obj,obj,t2.u,t3.u); break; case OP_JUMPTO_CD: NoIgnore(); StackReq(3,0); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); i=v_object(Pop()); jump_to(obj,i,t2.u,t3.u); break; case OP_KEY: StackReq(0,1); Push(NVALUE(current_key)); break; case OP_KEYCLEARED: StackReq(0,1); if(o->oflags&OF_KEYCLEARED) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_KEYCLEARED_C: StackReq(1,1); GetFlagOf(OF_KEYCLEARED); break; case OP_KEYCLEARED_E: StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_KEYCLEARED; else o->oflags&=~OF_KEYCLEARED; break; case OP_KEYCLEARED_EC: StackReq(2,0); SetFlagOf(OF_KEYCLEARED); break; case OP_LAND: StackReq(2,1); t1=Pop(); t2=Pop(); if(v_bool(t1) && v_bool(t2)) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_LE: StackReq(2,1); t2=Pop(); t1=Pop(); Push(NVALUE(v_unsigned_greater(t1,t2)?0:1)); break; |
︙ | ︙ | |||
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 | case OP_LXOR: StackReq(2,1); t1=Pop(); t2=Pop(); if(v_bool(t1)?!v_bool(t2):v_bool(t2)) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_MOD: StackReq(2,1); t2=Pop(); DivideBy(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u%t2.u)); break; case OP_MOD_C: StackReq(2,1); t2=Pop(); DivideBy(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.s%t2.s)); break; case OP_MOVED: StackReq(0,1); if(o->oflags&OF_MOVED) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_MOVED_C: StackReq(1,1); GetFlagOf(OF_MOVED); break; case OP_MOVED_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_MOVED; else o->oflags&=~OF_MOVED; break; case OP_MOVED_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_MOVED); break; case OP_MSG: StackReq(0,1); Push(MVALUE(msgvars.msg)); break; case OP_MUL: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u*t2.u)); break; case OP_MUL_C: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.s*t2.s)); break; case OP_NE: StackReq(2,1); t2=Pop(); t1=Pop(); Push(NVALUE(v_equal(t1,t2)?0:1)); break; case OP_NEG: StackReq(1,1); t1=Pop(); Numeric(t1); t1.s=-t1.s; Push(t1); break; case OP_NEXT: StackReq(0,1); ptr=v_next(code,ptr); break; case OP_NIP: StackReq(2,1); t1=Pop(); Pop(); Push(t1); break; case OP_OBJABOVE: StackReq(0,1); i=obj_above(obj); Push(OVALUE(i)); break; case OP_OBJABOVE_C: StackReq(1,1); i=obj_above(v_object(Pop())); Push(OVALUE(i)); break; case OP_OBJBELOW: StackReq(0,1); i=obj_below(obj); Push(OVALUE(i)); break; case OP_OBJBELOW_C: StackReq(1,1); i=obj_below(v_object(Pop())); Push(OVALUE(i)); break; case OP_OBJBOTTOMAT: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); i=obj_bottom_at(t1.u,t2.u); Push(OVALUE(i)); break; case OP_OBJCLASSAT: StackReq(3,1); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_obj_class_at(t1,t2,t3)); break; case OP_OBJDIR: StackReq(1,1); t2=Pop(); Numeric(t2); i=obj_dir(obj,t2.u); Push(OVALUE(i)); break; case OP_OBJDIR_C: StackReq(2,1); t2=Pop(); Numeric(t2); i=obj_dir(v_object(Pop()),t2.u); Push(OVALUE(i)); break; case OP_OBJTOPAT: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); i=obj_top_at(t1.u,t2.u); Push(OVALUE(i)); break; case OP_PLAYER: StackReq(0,1); if(classes[o->class]->cflags&CF_PLAYER) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_PLAYER_C: StackReq(1,1); GetClassFlagOf(CF_PLAYER); break; case OP_RET: return; case OP_RSH: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t2.u&~31?0:t1.u>>t2.u)); break; case OP_RSH_C: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t2.u&~31?(t1.s<0?-1:0):t1.s>>t2.u)); break; case OP_SELF: StackReq(0,1); Push(OVALUE(obj)); break; | > > > > > | 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 | case OP_LXOR: StackReq(2,1); t1=Pop(); t2=Pop(); if(v_bool(t1)?!v_bool(t2):v_bool(t2)) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_MOD: StackReq(2,1); t2=Pop(); DivideBy(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u%t2.u)); break; case OP_MOD_C: StackReq(2,1); t2=Pop(); DivideBy(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.s%t2.s)); break; case OP_MOVED: StackReq(0,1); if(o->oflags&OF_MOVED) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_MOVED_C: StackReq(1,1); GetFlagOf(OF_MOVED); break; case OP_MOVED_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_MOVED; else o->oflags&=~OF_MOVED; break; case OP_MOVED_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_MOVED); break; case OP_MOVETO: NoIgnore(); StackReq(2,1); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); Push(NVALUE(move_to(obj,obj,t2.u,t3.u))); break; case OP_MOVETO_C: NoIgnore(); StackReq(3,1); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); i=v_object(Pop()); Push(NVALUE(move_to(obj,i,t2.u,t3.u))); break; case OP_MOVETO_D: NoIgnore(); StackReq(2,0); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); move_to(obj,obj,t2.u,t3.u); break; case OP_MOVETO_CD: NoIgnore(); StackReq(3,0); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); i=v_object(Pop()); move_to(obj,i,t2.u,t3.u); break; case OP_MSG: StackReq(0,1); Push(MVALUE(msgvars.msg)); break; case OP_MUL: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u*t2.u)); break; case OP_MUL_C: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.s*t2.s)); break; case OP_NE: StackReq(2,1); t2=Pop(); t1=Pop(); Push(NVALUE(v_equal(t1,t2)?0:1)); break; case OP_NEG: StackReq(1,1); t1=Pop(); Numeric(t1); t1.s=-t1.s; Push(t1); break; case OP_NEXT: StackReq(0,1); ptr=v_next(code,ptr); break; case OP_NIP: StackReq(2,1); t1=Pop(); Pop(); Push(t1); break; case OP_OBJABOVE: StackReq(0,1); i=obj_above(obj); Push(OVALUE(i)); break; case OP_OBJABOVE_C: StackReq(1,1); i=obj_above(v_object(Pop())); Push(OVALUE(i)); break; case OP_OBJBELOW: StackReq(0,1); i=obj_below(obj); Push(OVALUE(i)); break; case OP_OBJBELOW_C: StackReq(1,1); i=obj_below(v_object(Pop())); Push(OVALUE(i)); break; case OP_OBJBOTTOMAT: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); i=obj_bottom_at(t1.u,t2.u); Push(OVALUE(i)); break; case OP_OBJCLASSAT: StackReq(3,1); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_obj_class_at(t1,t2,t3)); break; case OP_OBJDIR: StackReq(1,1); t2=Pop(); Numeric(t2); i=obj_dir(obj,t2.u); Push(OVALUE(i)); break; case OP_OBJDIR_C: StackReq(2,1); t2=Pop(); Numeric(t2); i=obj_dir(v_object(Pop()),t2.u); Push(OVALUE(i)); break; case OP_OBJLAYERAT: StackReq(3,1); t3=Pop(); Numeric(t3); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); i=obj_layer_at(t1.u,t2.u,t3.u); Push(OVALUE(i)); break; case OP_OBJTOPAT: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); i=obj_top_at(t1.u,t2.u); Push(OVALUE(i)); break; case OP_PLAYER: StackReq(0,1); if(classes[o->class]->cflags&CF_PLAYER) Push(NVALUE(1)); else Push(NVALUE(0)); break; case OP_PLAYER_C: StackReq(1,1); GetClassFlagOf(CF_PLAYER); break; case OP_RET: return; case OP_RSH: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t2.u&~31?0:t1.u>>t2.u)); break; case OP_RSH_C: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t2.u&~31?(t1.s<0?-1:0):t1.s>>t2.u)); break; case OP_SELF: StackReq(0,1); Push(OVALUE(obj)); break; |
︙ | ︙ | |||
814 815 816 817 818 819 820 | if(!traceprefix) { optionquery[1]=Q_tracePrefix; traceprefix=xrm_get_resource(resourcedb,optionquery,optionquery,2); if(!traceprefix) traceprefix=""; } if(msgvars.msg<256) s=standard_message_names[msgvars.msg]; else s=messages[msgvars.msg-256]; o=msgvars.from==VOIDLINK?0:objects[msgvars.from]; | | | 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 | if(!traceprefix) { optionquery[1]=Q_tracePrefix; traceprefix=xrm_get_resource(resourcedb,optionquery,optionquery,2); if(!traceprefix) traceprefix=""; } if(msgvars.msg<256) s=standard_message_names[msgvars.msg]; else s=messages[msgvars.msg-256]; o=msgvars.from==VOIDLINK?0:objects[msgvars.from]; printf("%s%d : %s%s : %d : %u %u",traceprefix,move_number,msgvars.msg<256?"":"#",s,vstackptr,o?o->generation:0,msgvars.from); if(o) printf(" [$%s %d %d]",classes[o->class]->name,o->x,o->y); o=objects[obj]; printf(" : %u %u [$%s %d %d]",o->generation,obj,classes[o->class]->name,o->x,o->y); printf(" : %u %u : %u %u : %u %u\n",msgvars.arg1.t,msgvars.arg1.u,msgvars.arg2.t,msgvars.arg2.u,msgvars.arg3.t,msgvars.arg3.u); } static Value send_message(Uint32 from,Uint32 to,Uint16 msg,Value arg1,Value arg2,Value arg3) { |
︙ | ︙ |
Modified instruc from [3180b06075] to [0f72cf4b56].
︙ | ︙ | |||
156 157 158 159 160 161 162 163 164 165 166 167 168 169 | ,=Invisible ,=KeyCleared ,=UserSignal ,=UserState ,=VisualOnly ,=Stealthy ,=Moved ,Destroyed ,Player ,Compatible ,CollisionLayers Self Msg From | > | 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | ,=Invisible ,=KeyCleared ,=UserSignal ,=UserState ,=VisualOnly ,=Stealthy ,=Moved ,=Done ,Destroyed ,Player ,Compatible ,CollisionLayers Self Msg From |
︙ | ︙ | |||
213 214 215 216 217 218 219 220 221 222 223 224 225 226 | NewX NewY ,ObjAbove ,ObjBelow ObjBottomAt ObjClassAt ,ObjDir ObjTopAt PopUp *PopUpArgs ; for (PopUp [number]) QueueTurn ; queue another turn that automatically occurs after this one .,Send .,SendEx ; send with three arguments SetInventory | > | 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | NewX NewY ,ObjAbove ,ObjBelow ObjBottomAt ObjClassAt ,ObjDir ObjLayerAt ObjTopAt PopUp *PopUpArgs ; for (PopUp [number]) QueueTurn ; queue another turn that automatically occurs after this one .,Send .,SendEx ; send with three arguments SetInventory |
︙ | ︙ |
Modified instruc.h from [a04f6d3aa7] to [5e92866556].
︙ | ︙ | |||
232 233 234 235 236 237 238 | #define OP_STEALTHY_C 34911 #define OP_STEALTHY_E 36959 #define OP_STEALTHY_EC 39007 #define OP_MOVED 32864 #define OP_MOVED_C 34912 #define OP_MOVED_E 36960 #define OP_MOVED_EC 39008 | > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | | | | | | | | | | | | | | | | | 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 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 | #define OP_STEALTHY_C 34911 #define OP_STEALTHY_E 36959 #define OP_STEALTHY_EC 39007 #define OP_MOVED 32864 #define OP_MOVED_C 34912 #define OP_MOVED_E 36960 #define OP_MOVED_EC 39008 #define OP_DONE 32865 #define OP_DONE_C 34913 #define OP_DONE_E 36961 #define OP_DONE_EC 39009 #define OP_DESTROYED 32866 #define OP_DESTROYED_C 34914 #define OP_PLAYER 32867 #define OP_PLAYER_C 34915 #define OP_COMPATIBLE 32868 #define OP_COMPATIBLE_C 34916 #define OP_COLLISIONLAYERS 32869 #define OP_COLLISIONLAYERS_C 34917 #define OP_SELF 32870 #define OP_MSG 32871 #define OP_FROM 32872 #define OP_ARG1 32873 #define OP_ARG1_E 36969 #define OP_ARG2 32874 #define OP_ARG2_E 36970 #define OP_ARG3 32875 #define OP_ARG3_E 36971 #define OP_MOVENUMBER 32876 #define OP_LEVEL 32877 #define OP_KEY 32878 #define OP_BACKGROUND 32879 #define OP_INPUT 32880 #define OP_QUIZ 32881 #define OP_INPLACE 32882 #define OP_DEFAULTIMAGE 32883 #define OP_HELP 32884 #define OP_EDITORHELP 32885 #define OP_SUBS 32886 #define OP_ANIMATE 32887 #define OP_ASSASSINATE 32888 #define OP_ASSASSINATE_C 34936 #define OP_BROADCAST 32889 #define OP_BROADCAST_D 41081 #define OP_BROADCASTCLASS 32890 #define OP_BROADCASTEX 32891 #define OP_BROADCASTEX_D 41083 #define OP_BROADCASTSUM 32892 #define OP_BROADCASTSUMEX 32893 #define OP_CREATE 32894 #define OP_CREATE_D 41086 #define OP_DELINVENTORY 32895 #define OP_DELTA 32896 #define OP_DESTROY 32897 #define OP_DESTROY_C 34945 #define OP_DESTROY_D 41089 #define OP_DESTROY_CD 43137 #define OP_FLUSHCLASS 32898 #define OP_FLUSHOBJ 32899 #define OP_GETINVENTORY 32900 #define OP_HEIGHTAT 32901 #define OP_IGNOREKEY 32902 #define OP_INTMOVE 32903 #define OP_INTMOVE_C 34951 #define OP_INTMOVE_D 41095 #define OP_INTMOVE_CD 43143 #define OP_JUMPTO 32904 #define OP_JUMPTO_C 34952 #define OP_JUMPTO_D 41096 #define OP_JUMPTO_CD 43144 #define OP_LOC 32905 #define OP_LOC_C 34953 #define OP_LOCATEME 32906 #define OP_LOSELEVEL 32907 #define OP_MAXINVENTORY 32908 #define OP_MOVE 32909 #define OP_MOVE_C 34957 #define OP_MOVE_D 41101 #define OP_MOVE_CD 43149 #define OP_MOVEPLUS 32910 #define OP_MOVEPLUS_C 34958 #define OP_MOVEPLUS_D 41102 #define OP_MOVEPLUS_CD 43150 #define OP_MOVETO 32911 #define OP_MOVETO_C 34959 #define OP_MOVETO_D 41103 #define OP_MOVETO_CD 43151 #define OP_NEWX 32912 #define OP_NEWY 32913 #define OP_OBJABOVE 32914 #define OP_OBJABOVE_C 34962 #define OP_OBJBELOW 32915 #define OP_OBJBELOW_C 34963 #define OP_OBJBOTTOMAT 32916 #define OP_OBJCLASSAT 32917 #define OP_OBJDIR 32918 #define OP_OBJDIR_C 34966 #define OP_OBJLAYERAT 32919 #define OP_OBJTOPAT 32920 #define OP_POPUP 32921 #define OP_POPUPARGS 32922 #define OP_QUEUETURN 32923 #define OP_SEND 32924 #define OP_SEND_C 34972 #define OP_SEND_D 41116 #define OP_SEND_CD 43164 #define OP_SENDEX 32925 #define OP_SENDEX_C 34973 #define OP_SENDEX_D 41117 #define OP_SENDEX_CD 43165 #define OP_SETINVENTORY 32926 #define OP_SOUND 32927 #define OP_TRACE 32928 #define OP_VOLUMEAT 32929 #define OP_WINLEVEL 32930 #define OP_XDIR 32931 #define OP_XDIR_C 34979 #define OP_YDIR 32932 #define OP_YDIR_C 34980 #define OP_FUNCTION 32933 #define OP_LOCAL 32934 #define OP_LABEL 32935 #define OP_STRING 32936 #define OP_INT16 32937 #define OP_INT32 32938 #ifdef HEROMESH_CLASS static const Op_Names op_names[]={ {"*",8486933}, {"+",8421395}, {"-",8421396}, {".",10518528}, {"/",8486934}, {"ANHH",8389394}, {"ARRIVED",8389124}, {"Animate",8421495}, {"Arg1",8552553}, {"Arg2",8552554}, {"Arg3",8552555}, {"Arrivals",8618071}, {"Arrived",8618069}, {"Assassinate",8487032}, {"B",9437196}, {"BANG",8389380}, {"BEDOINGNG",8389406}, {"BEEDEEP",8389404}, {"BEGIN_TURN",8389123}, {"BIZARRO_SWAP",8389143}, {"BOOOM",8389410}, {"BOUNCE",8389415}, {"BRRREEET",8389396}, {"BRRRT",8389395}, {"BUZZER",8389420}, {"BWEEP",8389397}, {"Background",8683631}, {"Broadcast",10518649}, {"BroadcastEx",10518651}, {"BroadcastSum",8421500}, {"BroadcastSumEx",8421501}, {"Busy",8618073}, {"CHEEP",8389393}, {"CHYEW",8389392}, {"CLEANUP",8389140}, {"CLICK",8389388}, {"COLLIDE",8389142}, {"COLLIDEBY",8389141}, {"CREATE",8389121}, {"CREATED",8389137}, {"Class",8486955}, {"Climb",9142335}, {"CollisionLayers",8487013}, {"Compatible",8487012}, {"Create",10518654}, {"DEEP_POP",8389417}, {"DEPARTED",8389125}, {"DESTROY",8389122}, {"DESTROYED",8389136}, {"DINK",8389390}, {"DOOR",8389378}, {"DRLRLRINK",8389398}, {"DYUPE",8389413}, {"DefaultImage",8683635}, {"DelInventory",8421503}, {"Delta",8421504}, {"Density",9142327}, {"Departed",8618070}, {"Departures",8618072}, {"Destroy",10584193}, {"Destroyed",8487010}, {"Dir",8618033}, {"Distance",9142325}, {"Done",8618081}, {"E",9437184}, {"END_TURN",8389139}, {"EditorHelp",8683637}, {"F",9437192}, {"FAROUT",8389421}, {"FFFFTT",8389399}, {"FLOATED",8389132}, {"FROG",8389383}, {"FlushClass",8421506}, {"FlushObj",8421507}, {"From",8421480}, {"GLASS",8389379}, {"GLISSANT",8389419}, {"GetInventory",8421508}, {"HAWK",8389425}, {"HEARTBEAT",8389407}, {"HIT",8389134}, {"HITBY",8389135}, {"Hard",8618051}, {"Height",9142333}, {"HeightAt",8421509}, {"Help",8683636}, {"INIT",8389120}, {"IgnoreKey",8421510}, {"Image",8618034}, {"InPlace",8683634}, {"Inertia",9142323}, {"Input",8683632}, {"IntMove",10584199}, {"Invisible",8618074}, {"JAYAYAYNG",8389416}, {"JUMPED",8389128}, {"JumpTo",10584200}, {"KEWEL",8389422}, {"KEY",8389129}, {"KLECK",8389387}, {"KLINKK",8389385}, {"Key",8421486}, {"KeyCleared",8618075}, {"L",9437194}, {"LASTIMAGE",8389126}, {"LB",9437195}, {"LF",9437193}, {"LOCK",8389408}, {"LOOP",8388610}, {"Level",8421485}, {"Loc",8487049}, {"LocateMe",8421514}, {"LoseLevel",8421515}, {"MOVED",8389127}, {"MOVING",8389130}, {"MaxInventory",8421516}, {"Misc1",9142343}, {"Misc2",9142345}, {"Misc3",9142347}, {"Misc4",9142349}, {"Misc5",9142351}, {"Misc6",9142353}, {"Misc7",9142355}, {"Move",10584205}, {"Move+",10584206}, {"MoveNumber",8421484}, {"MoveTo",10584207}, {"Moved",8618080}, {"Msg",8421479}, {"N",9437186}, {"NE",9437185}, {"NW",9437187}, {"NewX",8421520}, {"NewY",8421521}, {"OLDPHONE",8389402}, {"ONCE",8388609}, {"OSC",8388616}, {"OSCLOOP",8388618}, {"ObjAbove",8487058}, {"ObjBelow",8487059}, {"ObjBottomAt",8421524}, {"ObjClassAt",8421525}, {"ObjDir",8487062}, {"ObjLayerAt",8421527}, {"ObjTopAt",8421528}, {"PLAYERMOVING",8389133}, {"POSTINIT",8389138}, {"POUR",8389377}, {"POWER",8389386}, {"Player",8487011}, {"PopUp",8421529}, {"QueueTurn",8421531}, {"Quiz",8683633}, {"R",9437198}, {"RATCHET1",8389418}, {"RATCHET2",8389412}, {"RATTLE",8389403}, {"RB",9437197}, {"RF",9437199}, {"S",9437190}, {"SE",9437191}, {"SMALL_POP",8389389}, {"SPLASH",8389376}, {"STEAM",8389424}, {"STOP",8388608}, {"SUBS",8683638}, {"SUNK",8389131}, {"SW",9437189}, {"Self",8421478}, {"Send",10584220}, {"SendEx",10584221}, {"SetInventory",8421534}, {"Shape",8618030}, {"ShapeDir",8618053}, {"Sharp",8618052}, {"Shovable",8618054}, {"Sound",8421535}, {"Stealthy",8618079}, {"Strength",9142337}, {"TAHTASHH",8389409}, {"THMP_thmp",8389405}, {"THWIT",8389384}, {"TICK",8389391}, {"Temperature",9142316}, {"Trace",8421536}, {"UH_OH",8389382}, {"UNCORK",8389414}, {"UNHH",8389381}, {"UserSignal",8618076}, {"UserState",8618077}, {"VACUUM",8389411}, {"VisualOnly",8618078}, {"Volume",9142329}, {"VolumeAt",8421537}, {"W",9437188}, {"WAHOO",8389400}, {"WHACK",8389423}, {"Weight",9142331}, {"WinLevel",8421538}, {"XDir",8487075}, {"Xloc",8486959}, {"YDir",8487076}, {"YEEHAW",8389401}, {"Yloc",8486960}, {"again",8683530}, {"band",8421403}, {"begin",8683529}, {"bit",8683551}, {"bit0",8388609}, |
︙ | ︙ | |||
618 619 620 621 622 623 624 | {"rsh",8486938}, {"swap",8421378}, {"then",8683527}, {"tuck",8421380}, {"until",8683531}, {"while",8683532}, }; | | | 625 626 627 628 629 630 631 632 633 | {"rsh",8486938}, {"swap",8421378}, {"then",8683527}, {"tuck",8421380}, {"until",8683531}, {"while",8683532}, }; #define N_OP_NAMES 272 #endif |