︙ | | | ︙ | |
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
|
while(objE!=VOIDLINK) {
if(o->oflags&(OF_DESTROYED|OF_VISUALONLY)) break;
oE=objects[objE];
if(oE->height>0) {
hit&=0xFC287000;
v=send_message(objE,obj,MSG_HIT,NVALUE(oE->x),NVALUE(oE->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[o->class]->cflags&CF_COMPATIBLE?0xF0098F7F:-1);
if(hit&8) goto fail;
if(!(hit&0x11)) {
v=send_message(obj,objE,MSG_HITBY,NVALUE(o->x),NVALUE(o->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[oE->class]->cflags&CF_COMPATIBLE?0xF0098F7F:-1);
if(hit&8) goto fail;
}
}
objE=obj_below(objE);
}
if((hit&0x200000) && !(hit&0x402008)) {
if(hit&0x20000) goto success;
|
|
|
|
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
|
while(objE!=VOIDLINK) {
if(o->oflags&(OF_DESTROYED|OF_VISUALONLY)) break;
oE=objects[objE];
if(oE->height>0) {
hit&=0xFC287000;
v=send_message(objE,obj,MSG_HIT,NVALUE(oE->x),NVALUE(oE->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[o->class]->cflags&CF_COMPATIBLE?0xC0098F7F:-1);
if(hit&8) goto fail;
if(!(hit&0x11)) {
v=send_message(obj,objE,MSG_HITBY,NVALUE(o->x),NVALUE(o->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[oE->class]->cflags&CF_COMPATIBLE?0xC0098F7F:-1);
if(hit&8) goto fail;
}
}
objE=obj_below(objE);
}
if((hit&0x200000) && !(hit&0x402008)) {
if(hit&0x20000) goto success;
|
︙ | | | ︙ | |
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
|
if(o->oflags&(OF_DESTROYED|OF_VISUALONLY)) break;
oE=objects[objE];
if(oE->height>0) {
hit&=~7;
// HIT/HITBY messages
v=send_message(objE,obj,MSG_HIT,NVALUE(oE->x),NVALUE(oE->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[o->class]->cflags&CF_COMPATIBLE?0xF0098F7F:-1);
if(hit&8) goto fail;
if(!(hit&0x11)) {
v=send_message(obj,objE,MSG_HITBY,NVALUE(o->x),NVALUE(o->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[oE->class]->cflags&CF_COMPATIBLE?0xF0098F7F:-1);
}
if(hit&0x108) goto fail;
// Hardness/sharpness
if(!(hit&0x22)) {
if(o->sharp[dir>>1]>oE->hard[(dir^4)>>1] && !v_bool(destroy(obj,objE,2))) hit|=0x8004;
if(oE->sharp[(dir^4)>>1]>o->hard[dir>>1] && !v_bool(destroy(objE,obj,1))) hit|=0x4C;
}
|
|
|
|
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
|
if(o->oflags&(OF_DESTROYED|OF_VISUALONLY)) break;
oE=objects[objE];
if(oE->height>0) {
hit&=~7;
// HIT/HITBY messages
v=send_message(objE,obj,MSG_HIT,NVALUE(oE->x),NVALUE(oE->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[o->class]->cflags&CF_COMPATIBLE?0xC0098F7F:-1);
if(hit&8) goto fail;
if(!(hit&0x11)) {
v=send_message(obj,objE,MSG_HITBY,NVALUE(o->x),NVALUE(o->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[oE->class]->cflags&CF_COMPATIBLE?0xC0098F7F:-1);
}
if(hit&0x108) goto fail;
// Hardness/sharpness
if(!(hit&0x22)) {
if(o->sharp[dir>>1]>oE->hard[(dir^4)>>1] && !v_bool(destroy(obj,objE,2))) hit|=0x8004;
if(oE->sharp[(dir^4)>>1]>o->hard[dir>>1] && !v_bool(destroy(objE,obj,1))) hit|=0x4C;
}
|
︙ | | | ︙ | |
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
|
if(o->oflags&(OF_DESTROYED|OF_VISUALONLY)) break;
oE=objects[objE];
if(oE->height>0) {
hit&=~7;
// HIT/HITBY messages
v=send_message(objE,obj,MSG_HIT,NVALUE(oE->x),NVALUE(oE->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[o->class]->cflags&CF_COMPATIBLE?0xF0098F7F:-1);
if(hit&8) goto otherside;
if(!(hit&0x11)) {
v=send_message(obj,objE,MSG_HITBY,NVALUE(o->x),NVALUE(o->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[oE->class]->cflags&CF_COMPATIBLE?0xF0098F7F:-1);
}
if(hit&0x108) goto otherside;
// Hardness/sharpness
if(!(hit&0x22)) {
if(o->sharp[dir>>1]>oE->hard[(dir^4)>>1] && !v_bool(destroy(obj,objE,2))) hit|=0x8004;
if(oE->sharp[(dir^4)>>1]>o->hard[dir>>1] && !v_bool(destroy(objE,obj,1))) hit|=0x4C;
}
|
|
|
|
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
|
if(o->oflags&(OF_DESTROYED|OF_VISUALONLY)) break;
oE=objects[objE];
if(oE->height>0) {
hit&=~7;
// HIT/HITBY messages
v=send_message(objE,obj,MSG_HIT,NVALUE(oE->x),NVALUE(oE->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[o->class]->cflags&CF_COMPATIBLE?0xC0098F7F:-1);
if(hit&8) goto otherside;
if(!(hit&0x11)) {
v=send_message(obj,objE,MSG_HITBY,NVALUE(o->x),NVALUE(o->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[oE->class]->cflags&CF_COMPATIBLE?0xC0098F7F:-1);
}
if(hit&0x108) goto otherside;
// Hardness/sharpness
if(!(hit&0x22)) {
if(o->sharp[dir>>1]>oE->hard[(dir^4)>>1] && !v_bool(destroy(obj,objE,2))) hit|=0x8004;
if(oE->sharp[(dir^4)>>1]>o->hard[dir>>1] && !v_bool(destroy(objE,obj,1))) hit|=0x4C;
}
|
︙ | | | ︙ | |
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
|
if(o->oflags&(OF_DESTROYED|OF_VISUALONLY)) break;
oE=objects[objE];
if(oE->height>0) {
hit&=~7;
// HIT/HITBY messages
v=send_message(objE,obj,MSG_HIT,NVALUE(oE->x),NVALUE(oE->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[o->class]->cflags&CF_COMPATIBLE?0xF0098F7F:-1);
if(hit&8) goto fail;
if(!(hit&0x11)) {
v=send_message(obj,objE,MSG_HITBY,NVALUE(o->x),NVALUE(o->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[oE->class]->cflags&CF_COMPATIBLE?0xF0098F7F:-1);
}
if(hit&0x108) goto fail;
// Hardness/sharpness
if(!(hit&0x22)) {
if(o->sharp[dir>>1]>oE->hard[(dir^4)>>1] && !v_bool(destroy(obj,objE,2))) hit|=0x8004;
if(oE->sharp[(dir^4)>>1]>o->hard[dir>>1] && !v_bool(destroy(objE,obj,1))) hit|=0x4C;
}
|
|
|
|
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
|
if(o->oflags&(OF_DESTROYED|OF_VISUALONLY)) break;
oE=objects[objE];
if(oE->height>0) {
hit&=~7;
// HIT/HITBY messages
v=send_message(objE,obj,MSG_HIT,NVALUE(oE->x),NVALUE(oE->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[o->class]->cflags&CF_COMPATIBLE?0xC0098F7F:-1);
if(hit&8) goto fail;
if(!(hit&0x11)) {
v=send_message(obj,objE,MSG_HITBY,NVALUE(o->x),NVALUE(o->y),NVALUE(hit));
if(v.t) Throw("Type mismatch in HIT/HITBY");
hit|=v.u&(classes[oE->class]->cflags&CF_COMPATIBLE?0xC0098F7F:-1);
}
if(hit&0x108) goto fail;
// Hardness/sharpness
if(!(hit&0x22)) {
if(o->sharp[dir>>1]>oE->hard[(dir^4)>>1] && !v_bool(destroy(obj,objE,2))) hit|=0x8004;
if(oE->sharp[(dir^4)>>1]>o->hard[dir>>1] && !v_bool(destroy(objE,obj,1))) hit|=0x4C;
}
|
︙ | | | ︙ | |