-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcountdown.asm
145 lines (116 loc) · 5.49 KB
/
countdown.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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
section .data
; Yarrgh, even more inefficient data storage
three:
db "═ ═ ╦ ═ ═ ╳ ╗ ╳ ╳ ╳ ║ ╳ ╔ ═ ═ ╗ ╳ ╳ ╔ ═ ═ ═ ═ ═ ╳ ╔ ═ ═ ═ ═ ═ "
three_end:
db "╳ ╳ ║ ╳ ╳ ╳ ║ ╳ ╳ ╳ ║ ╳ ║ ╳ ╳ ╚ ╗ ╳ ║ ╳ ╳ ╳ ╳ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ "
db "╳ ╳ ║ ╳ ╳ ╳ ║ ╳ ╔ ═ ╣ ╳ ║ ╳ ╳ ╔ ╝ ╳ ╠ ═ ═ ╳ ╳ ╳ ╳ ╠ ═ ═ ╳ ╳ ╳ "
db "╳ ╳ ║ ╳ ╳ ╳ ╠ ═ ╝ ╳ ║ ╳ ╠ ═ ╦ ╝ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ "
db "╳ ╳ ║ ╳ ╳ ╳ ║ ╳ ╳ ╳ ║ ╳ ║ ╳ ╚ ╗ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ "
db "╳ ╳ ║ ╳ ╳ ╳ ║ ╳ ╳ ╳ ╚ ╳ ╝ ╳ ╳ ╚ ╗ ╳ ╚ ═ ═ ═ ═ ═ ╳ ╚ ═ ═ ═ ═ ═ "
two:
db "═ ═ ╦ ═ ═ ╳ ╗ ╳ ╳ ╳ ╳ ╳ ╳ ╳ ╳ ╔ ╳ ╳ ╔ ═ ═ ═ ╗ ╳ "
two_end:
db "╳ ╳ ║ ╳ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ ╳ ╳ ╳ ║ ╳ ╔ ╝ ╳ ╳ ╳ ╚ ╗ "
db "╳ ╳ ║ ╳ ╳ ╳ ╚ ╗ ╳ ╳ ╔ ╗ ╳ ╳ ╔ ╝ ╳ ║ ╳ ╳ ╳ ╳ ╳ ║ "
db "╳ ╳ ║ ╳ ╳ ╳ ╳ ║ ╳ ╳ ║ ║ ╳ ╳ ║ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ ║ "
db "╳ ╳ ║ ╳ ╳ ╳ ╳ ╚ ╗ ╔ ╝ ╚ ╗ ╔ ╝ ╳ ╳ ╚ ╗ ╳ ╳ ╳ ╔ ╝ "
db "╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ ╚ ╝ ╳ ╳ ╚ ╝ ╳ ╳ ╳ ╳ ╚ ═ ═ ═ ╝ ╳ "
one:
db "╳ ╔ ═ ═ ═ ╗ ╳ ╳ ╗ ╳ ╳ ╳ ║ ╳ ╔ ═ ═ ═ ═ ═ "
one_end:
db "╔ ╝ ╳ ╳ ╳ ╚ ╗ ╳ ╠ ╗ ╳ ╳ ║ ╳ ║ ╳ ╳ ╳ ╳ ╳ "
db "║ ╳ ╳ ╳ ╳ ╳ ║ ╳ ║ ╚ ╗ ╳ ║ ╳ ╠ ═ ═ ╳ ╳ ╳ "
db "║ ╳ ╳ ╳ ╳ ╳ ║ ╳ ║ ╳ ╚ ╗ ║ ╳ ║ ╳ ╳ ╳ ╳ ╳ "
db "╚ ╗ ╳ ╳ ╳ ╔ ╝ ╳ ║ ╳ ╳ ╚ ╣ ╳ ║ ╳ ╳ ╳ ╳ ╳ "
db "╳ ╚ ═ ═ ═ ╝ ╳ ╳ ║ ╳ ╳ ╳ ╚ ╳ ╚ ═ ═ ═ ═ ═ "
zero:
db "╚ ═ ═ ═ ═ ╗ ╳ ╔ ═ ═ ═ ═ ═ ╳ ╔ ═ ═ ╗ ╳ ╳ ╳ ╔ ═ ═ ═ ╗ ╳ "
zero_end:
db "╳ ╳ ╳ ╳ ╔ ╝ ╳ ║ ╳ ╳ ╳ ╳ ╳ ╳ ║ ╳ ╳ ╚ ╗ ╳ ╔ ╝ ╳ ╳ ╳ ╚ ╗ "
db "╳ ╳ ╳ ╔ ╝ ╳ ╳ ╠ ═ ═ ╳ ╳ ╳ ╳ ║ ╳ ╳ ╔ ╝ ╳ ║ ╳ ╳ ╳ ╳ ╳ ║ "
db "╳ ╳ ╔ ╝ ╳ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ ╳ ╠ ═ ╦ ╝ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ ║ "
db "╳ ╔ ╝ ╳ ╳ ╳ ╳ ║ ╳ ╳ ╳ ╳ ╳ ╳ ║ ╳ ╚ ╗ ╳ ╳ ╚ ╗ ╳ ╳ ╳ ╔ ╝ "
db "╳ ╚ ═ ═ ═ ╗ ╳ ╚ ═ ═ ═ ═ ═ ╳ ╝ ╳ ╳ ╚ ╗ ╳ ╳ ╚ ═ ═ ═ ╝ ╳ "
section .text
global draw_countdown
; Prototype: long draw_countdown( struct LB* game, short width, short height );
draw_countdown:
push rbp
mov rbp, rsp
; Only draw the countdown while it's in state 1
cmp word [rdi - 32], 1
jne draw_countdown.blank
sub rsp, 16
; Get the countdown or whatever
cmp word [rdi - 396], 120
jge draw_countdown.if_3
cmp word [rdi - 396], 80
jge draw_countdown.if_2
cmp word [rdi - 396], 40
jge draw_countdown.if_1
mov r8, zero
mov r9, zero_end
jmp draw_countdown.if_end
draw_countdown.if_1:
mov r8, one
mov r9, one_end
jmp draw_countdown.if_end
draw_countdown.if_2:
mov r8, two
mov r9, two_end
jmp draw_countdown.if_end
draw_countdown.if_3:
mov r8, three
mov r9, three_end
jmp draw_countdown.if_end
draw_countdown.if_end:
mov [rbp - 16], r9
mov [rbp - 8], r8
cmp dword [rdi - 32], 1
jne draw_countdown.blank
movsx r8, word [rdi - 14] ; max x
movsx r9, word [rdi - 16] ; max y
mov r10, [rbp - 16]
sub r10, [rbp - 8]
shr r10, 2
mov r11, r10
shr r11, 1
shr r8, 1
sub r8, r11
shr r9, 1
sub r9, 4
sub rsi, r8
sub rdx, r9
; Now, rsi and rdx should be relative to whatever
cmp rsi, 0
jl draw_countdown.blank
cmp rsi, r10
jge draw_countdown.blank
cmp rdx, 0
jl draw_countdown.blank
cmp rdx, 6
jge draw_countdown.blank
mov rax, rdx
mul r10
add rsi, rax
shl rsi, 2
add rsi, [rbp - 8]
movsx rax, dword [rsi]
cmp eax, "╳ "
je draw_countdown.blank
and eax, 0x00FFFFFF ; Clear the space
mov r10, 0x3932 ; Set it to green
cmp word [rdi - 396], 40
jl draw_countdown.color
mov r10, 0x3931 ; Set it to red
draw_countdown.color:
shl r10, 32
or rax, r10
jmp draw_countdown.end
draw_countdown.blank:
xor rax, rax
draw_countdown.end:
mov rsp, rbp
pop rbp
ret