IA_squelette: ; degré 2 ld de,$0810 ; skeleton AI call Verif_sprite_fouet ld de,$0810 call Verif_sprite_perso ld de,$0810 call Verif_sprite_arme2 IA_1: ld a,(timer) and %111 ret nz ld a,(spritestat) bit 1,a ld bc,(spriteloc) jr z,AI1_droite ld bc,(spriteloc) push bc call Sprite_collision_gauche pop bc jr z,AI1_changerdir dec b \ dec b \ dec b call Sprite_collision_bas jr nz,AI1_changerdir ld hl,spriteloc+1 dec (hl) ret AI1_droite: ld bc,(spriteloc) push bc call Sprite_collision_droite pop bc jr z,AI1_changerdir inc b \ inc b \ inc b call Sprite_collision_bas jr nz,AI1_changerdir ld hl,spriteloc+1 inc (hl) ret AI1_changerdir: ld a,(spritestat) xor %00000010 ld (spritestat),a ret IA_Loupgarou: ; degré 2 ld de,$0810 ; werewolf AI call Verif_sprite_fouet ld de,$0810 call Verif_sprite_perso ld de,$0810 call Verif_sprite_arme2 ld a,(spritestat) bit 3,a jr nz,Loupsaut ld a,(persoloc+1) ld hl,spriteloc+1 sub (hl) cp 24 jr c,Loup_IA2 neg cp 24 jr nc,IA_1 Loup_IA2: ld a,255 ld (spritestat2),a ld hl,spritestat set 3,(hl) res 1,(hl) ld a,(spriteloc+1) ld b,a ld a,(persoloc+1) sub b jr nc,Loupsaut set 1,(hl) Loupsaut: ld a,(timer) and %1 ret nz ld a,(spritestat) bit 1,a push af call z,Loup_sautdroit pop af call nz,Loup_sautgauche ld a,(spritestat2) cp 20 jr z,Loupsaut_suite inc a Loupsaut_suite: ld (spritestat2),a ld d,0 ld e,a ld hl,table_saut add hl,de ld a,(hl) or a ret z ld b,a ld a,e cp 11 jr nc,Loup_descendant Loup_ascendant: push bc ld bc,(spriteloc) call Sprite_collision_haut jr z,IA_finascendant ld hl,spriteloc dec (hl) pop bc djnz Loup_ascendant ret Loup_sautdroit: ld bc,(spriteloc) call Sprite_collision_droite ret z ld hl,spriteloc+1 inc (hl) ret Loup_sautgauche: ld bc,(spriteloc) call Sprite_collision_gauche ret z ld hl,spriteloc+1 dec (hl) ret Loup_descendant: push bc ld bc,(spriteloc) call Sprite_collision_bas jr z,IA_finsaut ld hl,spriteloc inc (hl) pop bc djnz Loup_descendant ret IA_finascendant: pop bc ld a,10 ld (spritestat2),a ret IA_finsaut: pop bc ld hl,spritestat res 3,(hl) ret IA_coeur1: ; small heart AI ld de,$0505 call Verif_sprite_perso2 ld a,(timer) and %1111 ret nz ld bc,(spriteloc) push bc ld a,5 add a,c ld c,a inc b \ inc b call gba_collision call Bloc_type2 pop bc ret z inc b ld a,(timer) bit 5,a jr nz,IAc1_suite dec b \ dec b IAc1_suite: inc c ld (spriteloc),bc ret IA_coeur2: ; big hearts AI ld de,$0707 call Verif_sprite_perso2 ld a,(timer) and %1111 ret nz ld bc,(spriteloc) push bc ld a,7 add a,c ld c,a inc b \ inc b \ inc b call gba_collision call Bloc_type2 pop bc ret z inc b ld a,(timer) bit 5,a jr nz,IAc2_suite dec b \ dec b IAc2_suite: inc c ld (spriteloc),bc ret IA_Oeilflottant: ; Floating eye AI ld de,$0b0a call Verif_sprite_fouet ld de,$0b0a call Verif_sprite_perso ld de,$0b0a call Verif_sprite_arme2 ld a,(timer) and %11 ret nz ld hl,spritestat res 1,(hl) ld hl,spriteloc+1 inc (hl) ld a,(persoloc+1) sub (hl) bit 7,a jr z,IAOF_suite dec (hl) dec (hl) ld hl,spritestat set 1,(hl) IAOF_suite: ld a,(timer) and %111 ret nz ld hl,spriteloc inc (hl) ld a,(persoloc) sub (hl) bit 7,a ret z dec (hl) dec (hl) ret IA_Plateforme: ld hl,spritestat res 1,(hl) ld a,(num_arme2) or a ret z cp 3 ret nc set 1,(hl) ret IA_Main: ; Hand AI ld de,$070a call Verif_sprite_fouet ld de,$070a call Verif_sprite_perso ld de,$070a call Verif_sprite_arme2 ld a,(timer) and %111 ret nz ld hl,spriteloc inc (hl) ld a,(spritestat2) inc a ld (spritestat2),a and %1000 ret z dec (hl) dec (hl) ret IA_Chevalier: ; knight AI ld de,$1010 call Verif_sprite_fouet ld de,$1010 call Verif_sprite_perso ld de,$1010 call Verif_sprite_arme2 ld a,(timer) and %1 ret nz ld hl,spritestat res 1,(hl) ld hl,persoloc+1 ld a,(spriteloc+1) sub (hl) jr c,IAC_suite ld hl,spritestat set 1,(hl) IAC_suite: cp 20 call z,IAC_Charger_gauche cp 228 call z,IAC_Charger_droite ld a,(spritestat2) bit 7,a jr nz,IAC_suite3 ld a,(timer) and %111 ret nz IAC_suite3: ld a,(spritestat2) inc a res 5,a ld (spritestat2),a and %1111 jr nz,IAC_suite2 ld a,(spritestat2) res 7,a ld (spritestat2),a IAC_suite2: ld a,(spritestat2) bit 4,a jr z,IAC_droite IAC_gauche: ld bc,(spriteloc) push bc call Sprite_collision_gauche pop bc ret z dec b \ dec b \ dec b call Sprite_collision_bas ret nz ld hl,spriteloc+1 dec (hl) ret IAC_droite: ld bc,(spriteloc) ld a,8 add a,b ld b,a push bc call Sprite_collision_droite pop bc ret z inc b \ inc b \ inc b call Sprite_collision_bas ret nz ld hl,spriteloc+1 inc (hl) ret IAC_Charger_gauche: ld a,%10010000 ld (spritestat2),a ret IAC_Charger_droite: ld a,%10000000 ld (spritestat2),a ret IA_Slime: ; Slime AI ld de,$0807 call Verif_sprite_fouet ld de,$0807 call Verif_sprite_perso ld de,$0807 call Verif_sprite_arme2 ld a,(timer) and %11 ret nz ld a,(spritestat) bit 3,a jr nz,Slimesaut ld a,r and %11 ret nz ld a,2 ld (spritestat2),a ld hl,spritestat set 3,(hl) res 2,(hl) ld hl,persoloc+1 ld a,(spriteloc+1) sub (hl) jr c,Slimesaut ld hl,spritestat set 2,(hl) Slimesaut: ld bc,(spriteloc) ld a,(spritestat) bit 2,a jr z,Slime_droite dec b push bc call gba_collision pop bc call Bloc_type1 jr z,Slime_suite ld a,6 add a,c ld c,a call gba_collision call Bloc_type1 jr z,Slime_suite ld hl,spriteloc+1 dec (hl) jr Slime_suite Slime_droite: ld a,8 add a,b ld b,a push bc call gba_collision pop bc call Bloc_type1 jr z,Slime_suite ld a,6 add a,c ld c,a call gba_collision call Bloc_type1 jr z,Slime_suite ld hl,spriteloc+1 inc (hl) Slime_suite: ld a,(spritestat2) cp 20 jr z,Slimesaut_suite inc a Slimesaut_suite: ld (spritestat2),a ld d,0 ld e,a ld hl,table_saut add hl,de ld a,(hl) or a ret z ld b,a ld a,e cp 11 jr nc,Slime_descendant Slime_ascendant: push bc ld bc,(spriteloc) call Sprite_collision_haut jp z,IA_finascendant ld hl,spriteloc dec (hl) pop bc djnz Slime_ascendant ret Slime_descendant: push bc ld bc,(spriteloc) ld a,9 sub c neg ld c,a call Sprite_collision_bas jp z,IA_finsaut ld hl,spriteloc inc (hl) pop bc djnz Slime_descendant ret IA_Dragon: ld de,$0b10 call Verif_sprite_fouet ld de,$0b10 call Verif_sprite_perso ld de,$0b10 call Verif_sprite_arme2 ld a,(spritestat) res 1,a ld hl,(spriteloc) ld bc,(persoloc) or a sbc hl,bc jr c,IAD_suite set 1,a IAD_suite: ld (spritestat),a ld a,(timer) and %111111 ret nz ld de,$0403 Creer_bouledefeu: ; create a fireball push de call gba_findsprite pop de ret nz ld bc,Sprite_id ld (hl),c inc hl ld (hl),b inc hl ld (hl),30 ; boule de feu inc hl ld bc,(spriteloc) ld a,e add a,c ld c,a ld a,d add a,b ld b,a ld (hl),c inc hl ld (hl),b inc hl ld (hl),0 ; spritestat ld a,(spritestat) bit 1,a jr z,Creer_bdf ld (hl),%1000 Creer_bdf: inc hl inc hl ld (hl),0 ; spritevie ret IA_boule_de_feu: ; fireball AI ld de,$0404 ld a,(num_fouet) cp 2 call nc,Verif_sprite_fouet ld de,$0404 call Verif_sprite_perso ld hl,spriteloc+1 inc (hl) ld a,(spritestat) bit 3,a jr z,IABDF_suite dec (hl) dec (hl) IABDF_suite: ld bc,(spriteloc) call gba_collision call Bloc_type1 ret nz ld bc,0 ld (spriteid),bc ret IA_Corbeau: ; raven AI ld de,$0808 call Verif_sprite_fouet ld de,$0808 call Verif_sprite_perso ld de,$0808 call Verif_sprite_arme2 ld a,(spritestat2) or a jr nz,IACorb_suite inc a ld (spritestat2),a ld a,(spritestat) res 1,a ld (spritestat),a ld hl,(spriteloc) ld de,(persoloc) or a sbc hl,de jr c,IACorb_suite set 1,a ld (spritestat),a IACorb_suite: ld bc,(spriteloc) inc b ld a,(spritestat) bit 1,a jr z,IACorb_suite2 dec b dec b IACorb_suite2: ld (spriteloc),bc ld a,r and %1 ret nz inc c ld (spriteloc),bc ret ;**************************** IA BOSS IA_Ghost_pirate: ld de,$101f call Verif_sprite_fouet ld de,$101f call Verif_sprite_perso ld de,$101f call Verif_sprite_arme2 ld a,(spritevie) cp 10 jr c,IAGP_rapide ld a,(timer) and %11 ret nz IAGP_rapide: ld a,(spritestat2) or a jr nz,IAGP_suite xor a ld (spritestat2),a IAGP_suite: ld bc,(spriteloc) and %1 jr nz,IAGP_gauche ld a,16 add a,b ld b,a call gba_collision dec a jr nz,IAGP_droiteok ld a,(spritestat2) set 0,a ld (spritestat2),a jr IAGP_suite2 IAGP_droiteok: ld hl,spriteloc+1 inc (hl) jr IAGP_suite2 IAGP_gauche: dec b call gba_collision dec a jr nz,IAGP_gaucheok ld a,(spritestat2) res 0,a ld (spritestat2),a jr IAGP_suite2 IAGP_gaucheok: ld hl,spriteloc+1 dec (hl) IAGP_suite2: ld a,(spritestat2) ld bc,(spriteloc) and %10000 jr nz,IAGP_haut ld a,31 add a,c ld c,a call gba_collision dec a jr nz,IAGP_basok ld a,(spritestat2) set 4,a ld (spritestat2),a ret IAGP_basok: ld hl,spriteloc inc (hl) ret IAGP_haut: dec c ld a,b add a,15 ld b,a call gba_collision dec a jr nz,IAGP_hautok ld a,(spritestat2) res 4,a ld (spritestat2),a ret IAGP_hautok: ld hl,spriteloc dec (hl) ret IA_Gargouille: ; Gargoyle AI ld de,$1820 call Verif_sprite_fouet ld de,$1820 call Verif_sprite_perso ld de,$1820 call Verif_sprite_arme2 ld a,(timer) and %1 ret nz ld a,(timer) and %111111 jr nz,Pasbouledefeu ld de,$1818 call Creer_bouledefeu Pasbouledefeu: ld a,(spritestat) bit 3,a jr nz,Gargouille_saut ld a,r bit 7,a jr z,Garg_initsaut ld a,(persoloc+1) ld hl,spriteloc+1 sub (hl) ld bc,(spriteloc) jr nc,Garg_droit dec b ld a,32 add a,c ld c,a call gba_collision dec a ret z ld hl,spriteloc+1 dec (hl) ret Garg_droit: ld a,24 add a,b ld b,a call gba_collision dec a ret z ld hl,spriteloc+1 inc (hl) ret Garg_initsaut: ld hl,spritestat set 3,(hl) inc hl ld a,(persoloc+1) ld b,a ld a,(spriteloc+1) sub b ld (hl),1 jr nc,Gargouille_saut ld (hl),0 Gargouille_saut: ld a,(spritestat2) and %1 jr nz,Garg_sautgauche ld bc,(spriteloc) ld a,24 add a,b ld b,a call gba_collision dec a jr z,Garg_sautsuite ld hl,spriteloc+1 inc (hl) Garg_sautsuite: ld a,(spritestat2) cp 40 jr nc,Garg_sautsuite2 inc a inc a Garg_sautsuite2: ld (spritestat2),a srl a dec a ld d,0 ld e,a ld hl,table_saut add hl,de ld a,(hl) or a ret z ld b,a ld a,e cp 11 jr nc,Garg_descendant ld hl,spriteloc Garg_ascendant: dec (hl) djnz Garg_ascendant ret Garg_descendant: push bc ld bc,(spriteloc) ld a,32 add a,c ld c,a call gba_collision dec a jp z,IA_finsaut ld hl,spriteloc inc (hl) pop bc djnz Garg_descendant ret Garg_sautgauche: ld bc,(spriteloc) dec b ld a,32 add a,c ld c,a call gba_collision dec a jr z,Garg_sautsuite ld hl,spriteloc+1 dec (hl) jr Garg_sautsuite IA_GrimReaper: ld de,$2029 call Verif_sprite_perso ld de,$2029 ld a,(spritestat) bit 2,a call z,Verif_sprite_fouet ld de,$2029 ld a,(spritestat) bit 2,a call z,Verif_sprite_arme2 ld a,(timer) or a jr nz,IAGR_suite ld a,(spritestat2) add a,%10000 ld (spritestat2),a and %11110000 jr nz,IAGR_suite ld hl,spritestat res 2,(hl) IAGR_suite: ld a,(spritestat) bit 3,a jr z,Creer_Slime ld a,64 grimreaperlocx =$-1 cp -20 jr nz,IAGR_suite3 ld hl,spritestat2 inc (hl) \ inc (hl) ld hl,spriteloc ld (hl),30 ld a,97 IAGR_suite3: cp 64 jr nz,IAGR_suite2 ld a,(spritestat2) and %00001111 ld a,64 jr z,IAGR_suite2 ld bc,$4000 ld (spriteloc),bc ld hl,spritestat res 3,(hl) ret IAGR_suite2: dec a ld (grimreaperlocx),a ld (spriteloc+1),a ld a,r srl a ld a,(spriteloc) sbc a,0 ld (spriteloc),a ret Creer_Slime: ld a,r ld b,a xor a srl b adc a,63 ld (spriteloc+1),a ld a,(timer) and %111111 ret nz ld a,(spritestat2) inc a \ inc a ld (spritestat2),a and %1111 jr nz,CS_suite ld hl,spritestat set 3,(hl) ret CS_suite: call gba_findsprite ret nz ld bc,Sprite_id ld (hl),c inc hl ld (hl),b inc hl ld (hl),26 inc hl ld a,(spriteloc) add a,15 ld (hl),a inc hl ld a,(spriteloc+1) dec a ld (hl),a inc hl ld (hl),%1100 inc hl ld (hl),0 inc hl ld (hl),4 ret IA_Dracula: ld hl,(spriteloc) ld bc,$180c add hl,bc ld b,h ld c,l ld hl,Dracula_main ld de,$0105 call gba_drawsprite ld hl,spritestat bit 3,(hl) jr nz,Dracula_est_invincible ld de,$1828 call Verif_sprite_fouet ld de,$1828 call Verif_sprite_perso ld de,$1828 call Verif_sprite_arme2 Dracula_est_invincible: ld a,(spritestat) bit 2,a jr nz,Dracula_se_cache bit 3,a jr nz,Dracula_apparait call Dracula_compteur2 ret nc ld hl,spritestat set 2,(hl) ret Dracula_se_cache: call Dracula_compteur ret nc ld hl,spritestat res 2,(hl) set 3,(hl) ld bc,(persoloc) ld a,b sub 10 ld b,a ld a,c sub 5 ld c,a ld (Ou_il_apparait),bc ret Dracula_apparait: call Dracula_compteur jr nc,Dracapparait_suite ld bc,(Ou_il_apparait) ld (spriteloc),bc ld de,24*256+20 call Creer_bouledefeu ld hl,spritestat set 1,(hl) ld de,-1*256+10 call Creer_bouledefeu ld de,-1*256+30 call Creer_bouledefeu ld hl,spritestat res 1,(hl) ld hl,spritestat res 3,(hl) ret Dracapparait_suite: and %10 ret nz ld bc,$0000 Ou_il_apparait = $-2 ld (spriteloc),bc ret Dracula_compteur: ld bc,5*256+80 ; b=5, c=80 ld (spriteloc),bc Dracula_compteur2: ld a,(spritestat2) add a,5 ld (spritestat2),a ret