Gestion_sprites: ; degré 1 ld hl,Table_sprite+8 ld de,7 ld b,spritemax-1 GS_chchersprite: ld a,(hl) inc hl or (hl) call nz,Sprite_trouvé add hl,de djnz GS_chchersprite ret Sprite_trouvé: ; degré 2 push bc push de push hl dec hl push hl ld de,sprite_var ld bc,8 ldir ld bc,Fin_sprite push bc ld a,(spritetype) srl a sub nbre_spriteamis ld d,0 ld e,a ld (spritetype16),de ld a,(spriteloc+1) bit 7,a jr z,ST_suite add a,30 bit 7,a jp nz,Effacer_sprite ST_suite: ld a,(spriteloc) bit 7,a jr z,ST_suite2 add a,60 bit 7,a jp nz,Effacer_sprite ST_suite2: ld a,(spritestat) and %11110000 ret nz ld a,(spritetype) cp 10 jp c,IA_1 sub 10 ld hl,table_spriteIA ld d,0 ld e,a add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl jp (hl) Fin_sprite: ld a,(spritetype) ld d,0 ld e,a ld hl,table_spritimg add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl ld c,(hl) inc hl ld b,(hl) inc hl ld e,(hl) inc hl ld d,(hl) inc hl ld a,(timer) and %100000 ld a,(spritestat) jr z,Pas_spriteimg2 bit 0,a jr z,Pas_spriteimg2 add hl,bc add hl,bc Pas_spriteimg2: bit 1,a jr z,Pas_spriteimg4 add hl,bc Pas_spriteimg4: ld bc,(spriteloc) and %11110000 jr nz,Sprite_inverse call gba_drawsprite jr Finsprite2 Sprite_inverse: ld a,(timer) bit 2,a jr nz,Finsprite2 call gba_drawinverted ld a,(spritestat) add a,%00010000 ld (spritestat),a Finsprite2: pop de ld hl,sprite_var ld bc,8 ldir pop hl pop de pop bc ret Nouveau_sprite: srl a ld b,0 ld c,a ld hl,table_spritestat add hl,bc ld a,(hl) ld (de),a inc de xor a ld (de),a inc de ld hl,table_spritevie-nbre_spriteamis add hl,bc ld a,(hl) ld (de),a ret Effacer_sprite: ld hl,(spriteid) dec (hl) Tuer_sprite: ld bc,0 ld (spriteid),bc ret Verif_sprite_fouet: ld a,(spritestat) and %11110000 ret nz ld a,(arme_compteur) cp arme_phase2 ret c ld a,(fouetx) ld hl,persox add a,(hl) ld b,a ld a,(cheat_flag) or a ld a,(persoy) jr z,VerifSPR_suite add a,6 VerifSPR_suite: add a,4 ld c,a ld a,(fouetlongueur) add a,a add a,a add a,a ld h,a ld l,3 call Collision_sprite_rectangle ret nc ld hl,spritestat set 4,(hl) ld a,(num_fouet) ld d,0 ld e,a ld hl,table_fouetdommages add hl,de ld a,(spritevie) sub (hl) ld (spritevie),a ret nc pop de Sprite_mort: ld a,(spritetype) cp 36 jr nc,Boss_mort ld a,r ld b,a and %1 jp nz,Effacer_sprite ld hl,spritestat ld (hl),0 ld hl,spritetype ld (hl),10 ; petit coeur ld a,b and %111 ret nz ld (hl),12 ret ; gros coeur Boss_mort: sub 36 jr nz,Boss2_mort ld hl,bossflag set 0,(hl) call Tremble ld hl,Txt_energie call Texte_normal ld a,(energiemax) add a,16 ld (energiemax),a ld (energie),a call Afficher_barredevie ld sp,(sp_0) ld hl,Devant_Berkeley_table3 ld (pointeur_carte),hl jp Nouvelle_carte Boss2_mort: sub 2 jr nz,Boss3_mort ld hl,bossflag set 1,(hl) call Tremble ld hl,Txt_energie call Texte_normal ld a,(energiemax) add a,16 ld (energiemax),a ld (energie),a call Afficher_barredevie ld sp,(sp_0) ld hl,DevantDaruba_table2 ld (pointeur_carte),hl jp Nouvelle_carte Boss3_mort: sub 2 jr nz,Fin_du_jeu ld hl,bossflag set 2,(hl) call Tremble ld hl,Txt_invincibility call Texte_normal ld hl,equipement set 1,(hl) ld sp,(sp_0) ld hl,Deadwoods1_table4 ld (pointeur_carte),hl jp Nouvelle_carte Fin_du_jeu: ; end of the game ld bc,(Table_sprite+11) ; Dracula loc ld hl,Dracula_img+4 ld de,$0328 call gba_drawsprite ld hl,(Table_sprite+11) ; " " ld bc,$180c add hl,bc ld b,h ld c,l ld hl,Dracula_main ld de,$0105 call gba_drawsprite ld hl,Argh_txt call Texte_normal call Battement2 call copier_APDGM call Afficher_Perso ld hl,GRAPH_MEM ld de,APD_BUF ld bc,756 ldir ld b,1 AplusDracula_boucle: push bc push bc call copier_APDGM pop bc ld a,b ld hl,Dracula_img+4 ld bc,(spriteloc) AplusDracula_boucle2: push af push hl push af push bc push af ld de,$0301 call gba_drawsprite pop af pop bc add a,c ld c,a pop af add a,a ld e,a add a,a add a,e ld e,a ld d,0 pop hl pop af add hl,de ld de,Dracula_img+240 call CP_HL_DE jr c,AplusDracula_boucle2 call CR_GRBCopy call Battement2 pop bc inc b ld a,12 cp b jr nz,AplusDracula_boucle ld hl,Run_txt call Texte_normal ld hl,12 ld (map_width),hl ld hl,Bloc_normal2 ld (Findujeu_repere),hl ld hl,Findujeu_carte ld b,12 ld de,APD_BUF call Initcarte_ligne ld hl,gba_find_tile ld (Findujeu_repere),hl ld hl,APD_BUF ld de,GRAPH_MEM ld bc,768 ldir ld bc,60*256+32 ld (persoloc),bc ld a,%10 ; look to the left, waiting ld (persostat),a xor a ld (arme_compteur),a call Afficher_Perso ld bc,3*256+25 ld hl,GRAPH_MEM+(28*12)+1 Apluschateau_boucle: push bc push hl ld de,Castlevania_img call Affimage_boucle ld b,26 Battement3: push bc ld a,%10 and b ld bc,756 jr z,Batt3_suite ld hl,GRAPH_MEM+12 ld de,GRAPH_MEM ldir jr Batt3_suite2 Batt3_suite: ld hl,GRAPH_MEM+767-12 ld de,GRAPH_MEM+767 lddr Batt3_suite2: call CR_GRBCopy halt pop bc djnz Battement3 pop hl ld bc,12 add hl,bc pop bc dec c jr nz,Apluschateau_boucle res 3,(iy+$05) ld hl,Endofthegame_txt call Scroll_txt ld hl,Endofthegame_txt2 call Scroll_txt ld hl,Credits_txt call Scroll_txt ld hl,Theend_txt call Scroll_txt ld sp,(sp_0) set 3,(iy+$05) ret Verif_sprite_arme2: ld a,(spritestat) and %11110000 ret nz ld a,(arme2num) or a ret z cp 6 ret nc ld bc,(arme2loc) ld a,(arme2largeur) ld h,a ld l,5 call Collision_sprite_rectangle ret nc ld hl,spritestat set 4,(hl) ld a,(spritevie) ld hl,arme2dommages sub (hl) ld (spritevie),a ret nc pop de jp Sprite_mort Verif_sprite_perso: ld a,(persostat) and %11110000 ret nz Verif_sprite_perso2: ld bc,(persoloc) ld hl,$0810 ld a,(persostat) bit 2,a jr z,VSP_suite ld l,13 VSP_suite: call Collision_sprite_rectangle ret nc ld a,(spritetype) cp 10 jp z,Coeurinc cp 12 jp z,Coeurinc ld a,3 ld (saut_compteur),a ld hl,persostat set 4,(hl) set 0,(hl) set 2,(hl) res 1,(hl) res 3,(hl) ld a,(spriteloc+1) ld b,a ld a,(persox) sub b jr nc,VSP_suite2 set 1,(hl) VSP_suite2: ld hl,table_spritedmg ld de,(spritetype16) add hl,de ld a,(energie) sub (hl) ld (energie),a push af call Afficher_barredevie pop af jr z,Perso_mort ret nc Perso_mort: ld sp,(sp_0) ld a,(vies) dec a ld (vies),a jp nz,Nouvelle_vie ld hl,GRAPH_MEM+(31*12)+5 ld (temp4),hl Gameover_menu: ld hl,GRAPH_MEM ld de,GRAPH_MEM+1 ld bc,767 ld (hl),%11111111 ldir ld hl,(temp4) call Afficher_Curseur call CR_GRBCopy Gameover_menu2: ld bc,16*256+30 ld (GRAF_CURS),bc ld hl,Gameover_txt call D_ZM_STR2 ld bc,22*256+14 ld (GRAF_CURS),bc ld hl,Choixalj_txt call D_ZM_STR2 ld bc,30*256+48 ld (GRAF_CURS),bc ld hl,YesNo_txt call D_ZM_STR2 ld bc,36*256+48 ld (GRAF_CURS),bc call D_ZM_STR2 call GET_KEY cp G_UP jr nz,GOM_suite ld hl,GRAPH_MEM+(31*12)+5 ld (temp4),hl jr Gameover_menu GOM_suite: cp G_DOWN jr nz,GOM_suite2 ld hl,GRAPH_MEM+(37*12)+5 ld (temp4),hl jr Gameover_menu GOM_suite2: cp G_ENTER jr nz,Gameover_menu2 ld hl,(temp4) ld de,GRAPH_MEM+(31*12)+5 or a sbc hl,de jp z,Nouvelle_partie ld hl,Aljiba_table1 ld (pointeur_carte),hl jp Nouvelle_partie Coeurinc: ld hl,coeur sub 9 add a,a add a,(hl) jp c,Tuer_sprite ld (hl),a call Actualiser_nbrecoeur pop hl jp Tuer_sprite Routine_boss1: ld a,(bossflag) and %1 jr z,RB1_suite ld sp,(sp_0) ld hl,Devant_Berkeley_table3 ld (pointeur_carte),hl jp Nouvelle_carte RB1_suite: ld hl,Table_sprite+8 xor a cp (hl) ret nz ld bc,Sprite_id ld (hl),c inc hl ld (hl),b inc hl ld a,36 ld (hl),a inc hl ld (hl),0 inc hl ld (hl),8 inc hl ex de,hl call Nouveau_sprite ld hl,Boss1_txt1 call Texte_normal ld hl,Boss1_txt2 call Texte_normal ret Routine_boss2: ld a,(bossflag) and %10 jr z,RB2_suite ld sp,(sp_0) ld hl,Daruba1_table1 ld (pointeur_carte),hl jp Nouvelle_carte RB2_suite: ld hl,Table_sprite+8 xor a cp (hl) ret nz ld bc,Sprite_id ld (hl),c inc hl ld (hl),b inc hl ld a,38 ; Gargoyle num ld (hl),a inc hl ld (hl),16 inc hl ld (hl),8 inc hl ex de,hl call Nouveau_sprite ld hl,Boss2_txt1 call Texte_normal ret Routine_cristalnoir: ld a,(num_arme2) cp 2 ret nz ld a,(persoloc) cp 20 ret nz ld a,(mask_y) cp 7 ret nz ld sp,(sp_0) ld hl,Wilhelmsdeep2_table1 ld (pointeur_carte),hl jp Nouvelle_carte+3 Routine_boss3: ld hl,LostMansion2_table2 ld (pointeur_carte),hl ld a,(bossflag) and %100 jr z,RB3_suite ld sp,(sp_0) jp Nouvelle_carte RB3_suite: ld hl,Table_sprite+8 xor a cp (hl) ret nz ld bc,Sprite_id ld (hl),c inc hl ld (hl),b inc hl ld a,40 ; Grim Reaper num ld (hl),a inc hl ld (hl),0 inc hl ld (hl),64 inc hl ex de,hl call Nouveau_sprite ld hl,Boss3_txt call Texte_normal ret Routine_dernierboss: ld a,(persostat) bit 1,a ret z ld hl,Table_sprite+8 xor a cp (hl) ret nz ld bc,$0808 ld hl,Dracula_img+4 ld de,$0328 call gba_drawsprite ld hl,Dracula_main ld de,$0105 ld bc,$2014 call gba_drawsprite ld hl,Sprite_Img ld bc,(persoloc) ld de,$0110 call gba_drawsprite call CR_GRBCopy call Battement2 ld hl,DernierBoss_txt1 call Texte_normal ld hl,DernierBoss_txt2 call Texte_normal ld hl,Table_sprite+8 ld bc,Sprite_id ld (hl),c inc hl ld (hl),b inc hl ld a,42 ld (hl),a inc hl ld (hl),8 inc hl ld (hl),8 inc hl ex de,hl call Nouveau_sprite ret