Overview
| Comment: | Fix the logic for sending CREATED and DESTROYED messages |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
00378e2e14f90937b87dc5644356fd53 |
| User & Date: | user on 2021-01-09 01:32:59.020 |
| Other Links: | manifest | tags |
Context
|
2021-01-09
| ||
| 03:03 | Fix a mistake in the solution replay and document that command. check-in: 8524828a0e user: user tags: trunk | |
| 01:32 | Fix the logic for sending CREATED and DESTROYED messages check-in: 00378e2e14 user: user tags: trunk | |
| 00:56 | Implement the solution replay check-in: 3edc879c32 user: user tags: trunk | |
Changes
Modified exec.c
from [790ffffb30]
to [3483fb1cee].
| ︙ | ︙ | |||
604 605 606 607 608 609 610 |
o->dir=d;
pflink(n);
v=send_message(from,n,MSG_CREATE,NVALUE(0),NVALUE(0),NVALUE(0));
if(o->oflags&OF_DESTROYED) return VOIDLINK;
for(y=0;y<5;y++) for(x=0;x<5;x++) {
xx=o->x+x-2; yy=o->y+y-2;
if(xx<1 || xx>pfwidth || yy<1 || yy>pfheight) continue;
| | | 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 |
o->dir=d;
pflink(n);
v=send_message(from,n,MSG_CREATE,NVALUE(0),NVALUE(0),NVALUE(0));
if(o->oflags&OF_DESTROYED) return VOIDLINK;
for(y=0;y<5;y++) for(x=0;x<5;x++) {
xx=o->x+x-2; yy=o->y+y-2;
if(xx<1 || xx>pfwidth || yy<1 || yy>pfheight) continue;
i=x+5*(4-y);
m=playfield[xx+yy*64-65];
while(m!=VOIDLINK) {
p=objects[m];
if(p->arrivals&(1<<i)) if(m!=n) send_message(n,m,MSG_CREATED,NVALUE(o->x),NVALUE(o->y),v);
m=p->up;
}
}
|
| ︙ | ︙ | |||
646 647 648 649 650 651 652 |
if(o->next!=VOIDLINK) objects[o->next]->prev=o->prev;
// This object is not itself removed from the linked list, since it may be destroyed while enumerating all objects
}
o->oflags|=OF_DESTROYED;
if(why!=8 && !(o->oflags&OF_VISUALONLY)) {
// Not checking for stealth; stealth only applies to movement, not destruction
for(yy=0;yy<5;yy++) for(xx=0;xx<5;xx++) {
| | | | 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 |
if(o->next!=VOIDLINK) objects[o->next]->prev=o->prev;
// This object is not itself removed from the linked list, since it may be destroyed while enumerating all objects
}
o->oflags|=OF_DESTROYED;
if(why!=8 && !(o->oflags&OF_VISUALONLY)) {
// Not checking for stealth; stealth only applies to movement, not destruction
for(yy=0;yy<5;yy++) for(xx=0;xx<5;xx++) {
x=objects[to]->x+xx-2; y=objects[to]->y+yy-2;
if(x<1 || x>pfwidth || y<1 || y>pfheight) continue;
i=xx+5*(4-yy);
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;
}
}
|
| ︙ | ︙ |