-
Notifications
You must be signed in to change notification settings - Fork 0
/
p_moves.asm
127 lines (104 loc) · 2.53 KB
/
p_moves.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
; PROCÉDURE move_player
; Fait bouger le joueur dans le map_buffer
; paramètre : code de la touche appuyée (renvoyé dans AH depuis INT16h AH0)
move_player:
pusha
mov si, sp ; copie de SP dans DI
add si, 12h ; on retrouve le paramètre de touche
mov dx, [si] ; DH = touche appuyée
mov bx, [adresse_pos_perso] ; BX = position perso sur la grille
mov di, bx ; DI = position +1 selon direction (devant à un pas du joueur)
mov si, bx ; SI = position +2 selon direction (devant à deux pas du joueur)
cmp dh, 4Dh
je move_r
cmp dh, 4Bh
je move_l
cmp dh, 48h
je move_u
cmp dh, 50h
je move_d
cmp dh, 20h
je move_r
cmp dh, 1Eh
je move_l
cmp dh, 11h
je move_u
cmp dh, 1Fh
je move_d
jmp move_fin
move_r:
inc di
add si, 2
jmp move_regles
move_l:
dec di
sub si, 2
jmp move_regles
move_u:
sub di, TAILLE_MAP_X
sub si, TAILLE_MAP_X*2
jmp move_regles
move_d:
add di, TAILLE_MAP_X
add si, TAILLE_MAP_X*2
move_regles:
verif_boite_enlevee:
cmp [di], byte C_CAISSE_POSEE
jne verif_boite_ajoutee
cmp [si], byte C_SOL
jne verif_boite_ajoutee
dec byte [nb_boites_placees]
push str_boites_placees
push 2
call dec_strvar
verif_boite_ajoutee:
cmp [di], byte C_CAISSE
jne maj_map_selon_deplacement
cmp [si], byte C_MARQUE
jne maj_map_selon_deplacement
inc byte [nb_boites_placees]
push str_boites_placees
push 2
call inc_strvar
maj_map_selon_deplacement:
mov ah, C_SOL ; caractère effacement par défaut
mov al, C_JOUEUR ; caractère personnage par défaut
cmp [di], byte C_MUR ; mur
je move_fin
cmp [di], byte C_CAISSE ; caisse
je caisse_devant
cmp [di], byte C_CAISSE_POSEE ; caisse posée
je caisse_devant_posee
jmp move_suite
caisse_devant_posee:
mov al, C_JOUEUR_MARQUE ; s'il bouge, le perso sera sur marque
caisse_devant:
cmp [si], byte C_SOL ; vide
je caisse_ok
cmp [si], byte C_MARQUE ; marque
je caisse_posee
jmp move_fin
caisse_ok:
mov [si], byte C_CAISSE
jmp move_suite
caisse_posee:
mov [si], byte C_CAISSE_POSEE
move_suite:
cmp [bx], byte C_JOUEUR_MARQUE
jne verif_marque_devant
mov ah, C_MARQUE
verif_marque_devant:
cmp [di], byte C_MARQUE
jne move_maj_infos
mov al, C_JOUEUR_MARQUE
move_maj_infos:
mov [bx], byte ah
mov [adresse_pos_perso], di
mov [di], byte al
; màj des infos de score
push str_coups
push 5
call inc_strvar
move_fin:
popa
ret 2