Prev: 55160 Up: Map Next: 55407
55271: Choose Sea Creature
Used by the routine at Handler_SeaCreatures.
Input
IX Sea creature slot
Fetch a random-ish number.
Handler_SeaCreatures_Chooser 55271 CALL UpdateAnimationCounter Call UpdateAnimationCounter.
55274 AND %00000111 Ensure the number is between 0 to 4.
55276 SUB 2
55278 CP 5
55280 JR C,Handler_SetSeaCreature
55282 LD A,4
Handler_SetSeaCreature 55284 LD E,A Create an offset in DE using A.
55285 LD D,0
This is simply HL=TableDefaultSeaCreatures+(A*24).
55287 SLA E DE*=8.
55289 SLA E
55291 SLA E
55293 PUSH DE HL=DE (using the stack).
55294 POP HL
55295 SLA E HL+=DE*2.
55297 RL D
55299 ADD HL,DE
55300 LD DE,55614 HL+=TableDefaultSeaCreatures.
55303 ADD HL,DE
55304 PUSH IX DE=IX (using the stack).
55306 POP DE
55307 LD BC,24 BC=0024.
55310 LDIR Copy 0024 bytes of data from the chosen creature defaults table to the creature slot.
Fetch a random-ish number.
Handler_SetSeaCreatureYPosition 55312 CALL UpdateAnimationCounter Call UpdateAnimationCounter.
55315 AND %00001111 Keep only bits 0-3.
55317 ADD A,6 A+=6.
55319 CP 17 Jump to Handler_SetSeaCreatureYPosition if A is higher than 17.
55321 JR NC,Handler_SetSeaCreatureYPosition
55323 RES 0,A Reset bit 0 of A.
55325 LD (IX+1),A Write A to *IX+1.
55328 LD (IX+14),A Write A to *IX+14.
55331 PUSH IY Stash IY on the stack.
55333 LD IY,56134 IY=Data_SeaCreatures.
55337 LD L,A L=A.
55338 LD BC,(56728) BC=*56728.
Handler_SeaCreatures_Chooser_0 55342 LD A,(IY+10) Jump to Handler_SeaCreatures_Chooser_1 if *IY+10 is equal to 0.
55345 CP 0
55347 JR Z,Handler_SeaCreatures_Chooser_1
55349 LD A,(IY+1) Jump to Handler_SeaCreatures_Chooser_1 if *IY+1 is not equal to L.
55352 CP L
55353 JR NZ,Handler_SeaCreatures_Chooser_1
55355 LD A,(IY+0) Jump to Handler_SeaCreatures_Chooser_2 if *IY+0 is higher than 15.
55358 CP 15
55360 JP NC,Handler_SeaCreatures_Chooser_2
Handler_SeaCreatures_Chooser_1 55363 LD DE,24 IY+=0024.
55366 ADD IY,DE
55368 DJNZ Handler_SeaCreatures_Chooser_0 Decrease counter by one and loop back to Handler_SeaCreatures_Chooser_0 until counter is zero.
55370 POP IY Restore IY from the stack.
55372 LD A,1 Write 1 to *IX+10.
55374 LD (IX+10),A
55377 LD A,34 A=34+*IX+7.
55379 ADD A,(IX+7)
55382 LD (IX+0),A Write A to *IX+0.
55385 LD (IX+13),A Write A to *IX+13.
55388 LD (IX+2),1 Write 1 to *IX+2.
55392 LD (IX+11),1 Write 1 to *IX+11.
55396 JP Handler_SeaCreatures_Next Jump to Handler_SeaCreatures_Next.
Handler_SeaCreatures_Chooser_2 55399 POP IY Restore IY from the stack.
55401 JP Handler_SeaCreatures_Next Jump to Handler_SeaCreatures_Next.
55404 POP IX Restore IX from the stack.
55406 RET Return.
Prev: 55160 Up: Map Next: 55407