94:9515 checks blocks to see what to do whenever Samus runs into them. JSR ($94D5,X) (X = block type*2) 0 = Air 1 = Slope 2 = XRay Air 3 = Treadmill 4 = Shootable Air 5 = Horizontal extension 6 = Air??? 7 = Bombable Air 8 = Solid 9 = Door A = Spike B = Crumble C = Shot D = Vertical extension E = Grapple F = Bomb block Jump table at 94:94D5 for horizontal collisions 8F47 8FBB 9018 906F 8F47 9411 8F47 92F9 8F49 938B 904B 90CB 8F49 9447 8F49 932D Jump table at 94:94F5 for vertical collisions 8F47 8FDA 901A 909D 8F47 9411 8F47 9313 8F82 93CE 905D 9102 8F82 9447 8F82 934C 8F47: CLC and RTS - always unsolid 8FBB: Load the BTS AND #$001F. If greater than 5, load the full BTS, put it into $1E77, and JMP $84D6. If it's less than 5, just JMP $8D2B (with the BTS AND #$001F in A) 84D6: If BTS is negative or Samus is moving vertically, just CLC and RTS. Get the distance ($12.$15) in A, and $8588,((BTS AND #$001F)*4) in Y, and JSL $8082D6. Use 05F1 and 05F3 as new distances. BASICALLY: Multiply Samus's movement by (94:8588,X)/(100), X = 4*BTS. The multiplier is, obviously, usually less than 100. 8D2B: BTS AND #$001F into $0DD4. BTS X/Y flip into $0DD6. Other stuff I'm not going to bother figuring out. BASICALLY: 94:8E54 is a table of 4-byte entries for the first 5 special 'slope' blocks. 80 = solid, 00 = air, organized topleft, topright, bottomleft, bottomright. 90CB: Check BTS. If positive, make a PLM from the table at 9139,X (X=2*BTS, max BTS is 4F). If negative, make a region-indexed PLM (91D9 + 20*Area + 2*BTS, max BTS is 0F). If PLM fails to be made, JMP $8F49 (normal solid). 9102: Check BTS. If positive, make a PLM from the table at 9139,X (X=2*BTS, max BTS is 4F). If negative, make a region-indexed PLM (91D9 + 20*Area + 2*BTS, max BTS is 0F). If PLM fails to be made, JMP $8F82 (normal solid).