Overview
Comment: | Implementation of order of execution overriding is probably corrected now. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
2b0b74d47a60f0a1c3f0cedee583c905 |
User & Date: | user on 2022-07-10 00:55:02 |
Other Links: | manifest | tags |
Context
2022-07-10
| ||
21:51 | Allow the (Order) list to contain class names and message names. check-in: 874c691fca user: user tags: trunk | |
00:55 | Implementation of order of execution overriding is probably corrected now. check-in: 2b0b74d47a user: user tags: trunk | |
2022-07-09
| ||
22:20 | Add a paragraph in PORTING file, about alternative implementations that do not use SQLite and X resource manager. check-in: 80ab5a543a user: user tags: trunk | |
Changes
Modified TODO from [8666aa5000] to [a0896e1a69].
︙ | ︙ | |||
45 46 47 48 49 50 51 | * Option to auto display level titles * Option to use a separate solution file * Multiuser scoring within one computer system (optional capability) * Testing * Bizarro world * Connection movement (it is partially tested, already) * Sweep, SweepEx, HitMe | | | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | * Option to auto display level titles * Option to use a separate solution file * Multiuser scoring within one computer system (optional capability) * Testing * Bizarro world * Connection movement (it is partially tested, already) * Sweep, SweepEx, HitMe * Overriding order of execution (partially tested) * Conversion from other games * DOS Hero Hearts * Berusky * PC Wanderer * Escape * Chroma * Xsok |
︙ | ︙ |
Modified class.c from [23e8cf302b] to [cc0a42cded].
︙ | ︙ | |||
2207 2208 2209 2210 2211 2212 2213 | } 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; | < | 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 | } 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(); |
︙ | ︙ |
Modified exec.c from [4c5452cf58] to [259ff81012].
︙ | ︙ | |||
721 722 723 724 725 726 727 | return r; } static void set_order(Uint32 obj) { // To avoid confusing order of execution at the wrong time, // calling this function is limited to only certain times. Object*o=objects[obj]; | | | | > | 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 | return r; } static void set_order(Uint32 obj) { // To avoid confusing order of execution at the wrong time, // calling this function is limited to only certain times. Object*o=objects[obj]; Uint8 ord=classes[o->class]->order; Uint8 u; Sint32 v0,v1; Uint16 p; Uint32 n=firstobj; for(;;) { if(n==obj || n==VOIDLINK) goto notfound; u=classes[objects[n]->class]->order; if(u<ord || !(objects[n]->oflags&OF_ORDERED)) goto found; if(u==ord) { p=orders[ord]+1; criteria: switch(orders[p]) { case OP_RET: goto found; case OP_DENSITY: v0=o->density; v1=objects[n]->density; goto compare; case OP_DENSITY_C: v1=o->density; v0=objects[n]->density; goto compare; case OP_IMAGE: v0=o->image; v1=objects[n]->image; goto compare; case OP_IMAGE_C: v1=o->image; v0=objects[n]->image; goto compare; case OP_MISC1: |
︙ | ︙ | |||
800 801 802 803 804 805 806 | } } n=objects[n]->next; } found: // Now it has been found; insert this object previous to the found object, removing from its existing slot. // (Objects are executed in reverse order, so previous in the linked list means executed next) | | | | < < | < | 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 | } } n=objects[n]->next; } found: // Now it has been found; insert this object previous to the found object, removing from its existing slot. // (Objects are executed in reverse order, so previous in the linked list means executed next) if(o->prev==VOIDLINK) firstobj=o->next; else objects[o->prev]->next=o->next; if(o->next==VOIDLINK) lastobj=o->prev; else objects[o->next]->prev=o->prev; o->next=n; o->prev=objects[n]->prev; objects[n]->prev=obj; if(o->prev==VOIDLINK) firstobj=obj; else objects[o->prev]->next=obj; notfound: objects[obj]->oflags|=OF_ORDERED; } static Uint32 create(Uint32 from,Uint16 c,Uint32 x,Uint32 y,Uint32 im,Uint32 d) { Uint32 m,n; int i,xx,yy; |
︙ | ︙ |