Index: class.c ================================================================== --- class.c +++ class.c @@ -2169,11 +2169,11 @@ 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; - ParseError("(Not implemented yet)\n"); //TODO: remove this when it is implemented in exec.c too + ParseError("(Not implemented yet)\n"); //TODO: remove this when it is implemented properly in exec.c too 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"); @@ -2217,23 +2217,33 @@ case OP_XLOC: case OP_XLOC_C: case OP_YLOC: case OP_YLOC_C: case OP_IMAGE: case OP_IMAGE_C: orders[ptr++]=tokenv; break; + default: ParseError("Unexpected token in (Order) block\n"); } nxttok(); } orders[ptr++]=OP_RET; } if(!norders) ParseError("Empty (Order) block\n"); orders=realloc(orders,ptr*sizeof(Uint16))?:orders; + nxttok(); } static void set_class_orders(void) { int i,j,k; - for(i=1;inmsg || classes[0]->nmsg) || !(classes[i]->cflags&(CF_GROUP|CF_NOCLASS2))) { - for(j=1;jnmsg || classes[0]->nmsg) && !(classes[i]->cflags&(CF_GROUP|CF_NOCLASS2))) { + for(j=1;j<=norders;j++) { k=orders[orders[j]]; switch(k) { case 0x1000 ... 0x101F: if(classes[i]->misc4&(1UL<<(k&0x1F))) goto found; break; case 0x1020 ... 0x103F: if(classes[i]->misc5&(1UL<<(k&0x1F))) goto found; break; case 0x1040 ... 0x105F: if(classes[i]->misc6&(1UL<<(k&0x1F))) goto found; break; @@ -2242,11 +2252,14 @@ case OP_PLAYER: if(classes[i]->cflags&CF_PLAYER) goto found; break; case OP_INPUT: if(classes[i]->cflags&CF_INPUT) goto found; break; case OP_CONTROL: if(i==control_class) goto found; break; } continue; - found: classes[i]->order=j; break; + found: + classes[i]->order=j; + if(main_options['C']) printf("Order %d : Class %d\n",j,i); + break; } } } static int level_table_code(int ptr,Hash*hash) {