-
Notifications
You must be signed in to change notification settings - Fork 0
/
dialogs.c
127 lines (117 loc) · 2.69 KB
/
dialogs.c
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
#ifndef DIALOGS_C
#define DIALOGS_C
#include <evo.h>
#include "font.c"
#include "engine.c"
#include "sprite_pool.c"
extern static u8 lifes;
extern static u16 score;
#define REIMU_FACE 130
#define MARISA_FACE 146
#define CIRNO_FACE 170
#define MAID_FACE 186
#define PACHU_FACE 202
#define FLAN_FACE 218
#define POSITION_LEFT 1
#define POSITION_RIGHT 0
#define FRAME 162
#define FRAME_BOTTOM 169
#define FRAME_RIGHT_TOP 163
#define FRAME_RIGHT_BOTTOM 166
#define FRAME_VERTICAL_RIGHT 167
#define FRAME_VERTICAL_LEFT 168
#define FRAME_LEFT_BOTTOM 164
#define FRAME_LEFT_TOP 165
void draw_face(u16 start_point)
{
u8 i;
u8 position_x = text_x;
for (i = 0; i < 4; i++)
{
text_x = position_x;
put_char(start_point++);
put_char(start_point++);
put_char(start_point++);
put_char(start_point++);
text_y++;
}
text_y -= 3;
}
void put_slow_str(u8 *str)
{
u8 i;
while (1)
{
i = *str++;
if (!i)
break;
put_char(i);
swap_screen();
}
}
void draw_frame(u8 position, u8 old_text_y)
{
u8 c;
u8 bias = position ? 0 : 5;
u8 right = position ? 35 : 29;
for (c = 5; c < right; c++)
{
text_x = c + bias;
text_y = old_text_y + 4;
put_char(FRAME_BOTTOM);
text_x = c + bias;
text_y = old_text_y;
put_char(FRAME);
}
text_y = old_text_y;
text_x = right + bias;
put_char(FRAME_RIGHT_TOP);
text_x = right + bias;
text_y = old_text_y + 4;
put_char(FRAME_RIGHT_BOTTOM);
for (c = 1; c < 4; c++)
{
text_x = right + bias;
text_y = old_text_y + c;
put_char(FRAME_VERTICAL_RIGHT);
text_x = 4 + bias;
put_char(FRAME_VERTICAL_LEFT);
}
text_x = 4 + bias;
text_y = old_text_y + 4;
put_char(FRAME_LEFT_BOTTOM);
text_x = 4 + bias;
text_y = old_text_y;
put_char(FRAME_LEFT_TOP);
}
// position 1 - left, 0 - right
void put_dialog_string(u16 avatar, u8 *phrase, u8 position)
{
u8 old_text_y = text_y;
left_pad = 0;
text_x = position ? 0 : 35;
draw_face(avatar);
left_pad = position ? 5 : 10;
right_pad = position ? 34 : 34;
draw_frame(position, old_text_y);
text_y = old_text_y + 1;
text_x = position ? 5 : 10;
put_slow_str(phrase);
left_pad = 0;
right_pad = 40;
text_y = old_text_y + 6;
}
void init_dialog()
{
init_text();
player.y = 321;
flush_sprites();
put_str(" Lives: ");
put_num(hp);
text_x = 25;
put_str(" Score: ");
put_num(score);
text_x = 0;
text_y += 2;
}
#endif