1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
|
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
|
+
+
+
|
oE->inertia=o->inertia;
if(move_dir(obj,objE,dir)) {
if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
hit|=0x8000;
if(hit&0x800000) goto restart;
}
}
if((oE->oflags&OF_CRUSH) && !(hit&0x22) && oE->x==o->x+x_delta[dir] && oE->y==o->y+y_delta[dir]) {
if(!v_bool(destroy(obj,objE,4))) hit|=0x8000;
}
objE=obj_below(objE);
}
if((hit&0x48000)==0x8000) goto restart;
if((hit&0x200000) && !(hit&0x402008)) {
if((hit&0x20000) || oF) goto success; else goto fail;
}
} else {
|
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
|
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
|
+
+
+
|
if(!(hit&0x44) && (oE->shovable&(1<<dir)) && o->inertia>=oE->weight && !(oE->oflags&OF_VISUALONLY)) {
oE->inertia=o->inertia;
if(move_dir(obj,objE,dir)) {
if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
hit|=0x8000;
if(hit&0x800000) goto restart;
}
}
if((oE->oflags&OF_CRUSH) && !(hit&0x22) && oE->x==o->x+x_delta[dir] && oE->y==o->y+y_delta[dir]) {
if(!v_bool(destroy(obj,objE,4))) hit|=0x8000;
}
if(hit&0x400) goto fail;
objE=obj_below(objE);
}
if(hit&0x2008) goto fail;
if((hit&0x48000)==0x8000) goto restart;
if((hit&0x200000) && !(hit&0x400000)) goto success;
|
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
|
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
|
+
+
+
|
oE->inertia=o->inertia;
if(move_dir(obj,objE,dir)) {
if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
hit|=0x8000;
if(hit&0x800000) goto restart;
}
}
if((oE->oflags&OF_CRUSH) && !(hit&0x22) && obj==objW && oE->x==o->x+x_delta[dir] && oE->y==o->y+y_delta[dir]) {
if(!v_bool(destroy(obj,objE,4))) hit|=0x8000;
}
}
objE=obj_below(objE);
}
if((hit&0x48000)==0x8000) goto restart;
if((hit&0x200000) && !(hit&0x402008)) {
if(hit&0x20000) goto success;
if(!oF) goto fail;
|
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
|
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
|
+
+
+
|
if(!(hit&0x44) && (oE->shovable&(1<<dir)) && o->inertia>=oE->weight && !(oE->oflags&OF_VISUALONLY)) {
oE->inertia=o->inertia;
if(move_dir(obj,objE,dir)) {
if(!(oE->oflags&OF_DESTROYED)) o->inertia=oE->inertia;
hit|=0x8000;
if(hit&0x800000) goto restart;
}
}
if((oE->oflags&OF_CRUSH) && !(hit&0x22) && obj==objW && oE->x==o->x+x_delta[dir] && oE->y==o->y+y_delta[dir]) {
if(!v_bool(destroy(obj,objE,4))) hit|=0x8000;
}
if(hit&0x400) goto fail;
objE=obj_below(objE);
}
if(hit&0x2008) goto fail;
if((hit&0x48000)==0x8000) goto restart;
if((hit&0x200000) && !(hit&0x400000)) {
|
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
|
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
|
+
+
+
+
|
case OP_CONNECTION_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_CONNECTION; else o->oflags&=~OF_CONNECTION; break;
case OP_CONNECTION_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_CONNECTION); break;
case OP_CONTROL: StackReq(0,1); Push(OVALUE(control_obj)); break;
case OP_COPYARRAY: NoIgnore(); StackReq(2,0); t2=Pop(); t1=Pop(); v_copy_array(t1,t2); break;
case OP_COUNT: StackReq(1,2); i=v_count(); Push(NVALUE(i)); break;
case OP_CREATE: NoIgnore(); StackReq(5,1); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); Push(v_create(obj,t1,t2,t3,t4,t5)); break;
case OP_CREATE_D: NoIgnore(); StackReq(5,0); t5=Pop(); t4=Pop(); t3=Pop(); t2=Pop(); t1=Pop(); v_create(obj,t1,t2,t3,t4,t5); break;
case OP_CRUSH: StackReq(0,1); if(o->oflags&OF_CRUSH) Push(NVALUE(1)); else Push(NVALUE(0)); break;
case OP_CRUSH_C: StackReq(1,1); GetFlagOf(OF_CRUSH); break;
case OP_CRUSH_E: NoIgnore(); StackReq(1,0); if(v_bool(Pop())) o->oflags|=OF_CRUSH; else o->oflags&=~OF_CRUSH; break;
case OP_CRUSH_EC: NoIgnore(); StackReq(2,0); SetFlagOf(OF_CRUSH); break;
case OP_DATA: StackReq(2,1); t2=Pop(); t1=Pop(); v_data(t1,t2); break;
case OP_DELINVENTORY: StackReq(2,0); t2=Pop(); t1=Pop(); v_delete_inventory(t1,t2); break;
case OP_DELTA: StackReq(2,1); t2=Pop(); Numeric(t2); t1=Pop(); Numeric(t1); Push(NVALUE(t1.u>t2.u?t1.u-t2.u:t2.u-t1.u)); break;
case OP_DENSITY: StackReq(0,1); Push(NVALUE(o->density)); break;
case OP_DENSITY_C: StackReq(1,1); Push(GetVariableOrAttributeOf(density,NVALUE)); break;
case OP_DENSITY_E: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); change_density(obj,t1.s); break;
case OP_DENSITY_E16: NoIgnore(); StackReq(1,0); t1=Pop(); Numeric(t1); change_density(obj,t1.s&0xFFFF); break;
|