lorom !CustObjClipXL = $7F9340 !CustObjClipXR = $7F934C !CustObjClipXM = $7F9358 !CustObjClipYT = $7F9364 !CustObjClipYB = $7F9370 !CustObjClipYM = $7F937C ; Table data: X1, X2, X3, X4; Y1, Y2, Y3, Y4 ; Coordinates based on which side the sprite is touching the block from: ; - Top point: (X4, Y4) ; - Left point: (X2, Y2) ; - Right point: (X1, Y1) ; - Bottom point: (X3, Y3) ; Note that X3 and X4, as well as Y1 and Y2, always seem to be identical. ; So with this, only 6 sprite tables are necessary: X1, X2, X3/X4, Y1/Y2, Y3, and Y4, ; or X offset of the right point, X offset of the left point, X offset of the top and bottom points, ; Y offset of the left and right points, Y offset of the top point, and Y offset of the bottom point. org $01944D autoclean JML CustObjClip freedata CustObjClip: CMP #$3C BCS .CustomCode LDA $185E INC JML $019451!F .CustomCode AND #$03 BEQ .Case0 DEC BEQ .Case1 CMP #$01 BEQ .Case2 .Case3 LDA !CustObjClipXM,x STA $0A LDA !CustObjClipYT,x STA $0C BRA .Shared .Case2 LDA !CustObjClipXM,x STA $0A LDA !CustObjClipYB,x STA $0C BRA .Shared .Case1 LDA !CustObjClipXL,x STA $0A LDA !CustObjClipYM,x STA $0C BRA .Shared .Case0 LDA !CustObjClipXR,x STA $0A LDA !CustObjClipYM,x STA $0C .Shared LDA $D8,x CLC ADC $0C STA $0C AND #$F0 STA $00 LDA $14D4,x ADC #$00 STA $0D LDA $185E INC AND $5B BNE .VerticalLevel .HorizontalLevel ; $0194BF REP #$20 LDA $0C CMP $13D7 SEP #$20 BCS .OutOfBounds LDA $E4,x CLC ADC $0A JML $0194E3!F .VerticalLevel ; $019455 LDA $0D CMP $5D BCS .OutOfBounds LDA $E4,x CLC ADC $0A JML $019472!F .OutOfBounds JML $0194B4!F