Mirai's Miscellaneous Misadventures
M55 / mimimi.h
1
2
3
4#ifndef MIMIMI
5#define MIMIMI
6
7struct mimimi_position {
8 int x, y;
9};
10
11struct mimimi_size {
12 int width, height;
13};
14
15struct mimimi_image {
16 int width, height;
17 unsigned char *colors;
18};
19
20struct mimimi_physics {
21 int dx, dy;
22 unsigned char airborne;
23 int width, height;
24 int gravity;
25 struct mimimi_sprite *sprite;
26};
27
28struct mimimi_walk {
29 int ground_speed;
30 int airborne_speed;
31 int direction;
32};
33
34struct mimimi_ground {
35 int width, height;
36 unsigned int colors[256];
37 unsigned int restitution[256];
38 unsigned char tiles[0x2000];
39};
40
41struct mimimi_sprite {
42 struct mimimi_position position;
43 struct mimimi_physics physics;
44 struct mimimi_walk walk;
45 struct mimimi_ground *ground;
46 struct mimimi_position offset;
47 struct mimimi_model *model;
48 unsigned char animation_time;
49 unsigned char landing_time;
50 int direction;
51 int trailing_y;
52 unsigned char trail;
53};
54
55struct mimimi_positioned_physics {
56 struct mimimi_physics *physics;
57 struct mimimi_physics other;
58 struct mimimi_position transform;
59 struct mimimi_position *position;
60 struct mimimi_position previous;
61 unsigned char was_airborne;
62};
63
64struct mimimi_font {
65 unsigned char glyphs[0x60][0x10];
66};
67
68struct mimimi_pose_layer {
69 int slant;
70 int y_angle;
71 int z_angle;
72 int y;
73};
74
75struct mimimi_pose {
76 int x, y;
77 struct mimimi_pose_layer layers[0x80];
78};
79
80struct mimimi_background {
81 struct mimimi_image image;
82 int x, y, z;
83};
84
85struct mimimi_row {
86 int width;
87 int height;
88 int count;
89 unsigned char colors[0x80];
90};
91
92struct mimimi_layer {
93 int x, y, z;
94 int width;
95 int amplifier;
96 int count;
97 struct mimimi_row rows[0x80];
98};
99
100struct mimimi_model_layer {
101 int parent_index;
102 struct mimimi_layer *layer;
103};
104
105struct mimimi_model {
106 int count;
107 struct mimimi_model_layer layers[0x80];
108};
109
110struct mimimi_history {
111 unsigned char left, right;
112};
113
114struct mimimi_clamped_camera {
115 struct mimimi_position *input;
116 struct mimimi_position output;
117 struct mimimi_position offset;
118 struct mimimi_size size;
119};
120
121struct mimimi_dialogue_paragraph {
122 struct mimimi_model *model;
123 char *name;
124 char *text;
125};
126
127struct mimimi_dialogue {
128 struct mimimi_dialogue_paragraph *paragraphs;
129 int count;
130};
131
132struct mimimi_toast_dialogue {
133 int count;
134 int *delays;
135 int *heights;
136 struct mimimi_image *images;
137 int i, j, k;
138};
139
140struct mimimi_momentum {
141 int x, dx;
142};
143
144struct mimimi_platform {
145 struct mimimi_positioned_physics physics;
146 struct mimimi_ground *ground;
147 struct mimimi_image *image;
148};
149
150struct mimimi_linear_motion {
151 int *value;
152 int origin;
153 int scale;
154};
155
156struct mimimi_angular_motion {
157 struct mimimi_position *value;
158 struct mimimi_position origin;
159 int angle;
160 int scale;
161 int height;
162};
163
164struct mimimi_platform_set {
165
166 struct mimimi_momentum momentum;
167 int balance;
168 int strength;
169 int linear_weight;
170 int angular_weight;
171 int min, max;
172
173 int linear_platform_count;
174 struct mimimi_platform *linear_platforms;
175 struct mimimi_linear_motion *linear_motions;
176
177 int angular_platform_count;
178 struct mimimi_platform *angular_platforms;
179 struct mimimi_angular_motion *angular_motions;
180};
181
182struct mimimi_area {
183 struct mimimi_ground *ground;
184 struct mimimi_position offset;
185 struct mimimi_background *backgrounds;
186 int background_count;
187 struct mimimi_background *foregrounds;
188 int foreground_count;
189};
190
191struct mimimi_note {
192 unsigned char frequency, volume;
193};
194
195struct mimimi_sound {
196 struct mimimi_note notes[10000][16];
197 int count;
198};
199
200struct mimimi_played_sound {
201 struct mimimi_sound sound;
202 int current;
203};
204
205struct mimimi_stage {
206 struct mimimi_sprite *sprites;
207 int sprite_count;
208 struct mimimi_position camera;
209 struct mimimi_clamped_camera clamped_camera;
210 struct mimimi_area *areas;
211 int area_count, area_index;
212 struct mimimi_platform_set *platform_sets;
213 int platform_set_count;
214 struct mimimi_played_sound sounds[16];
215};
216
217struct mimimi_stage_jump {
218 struct mimimi_stage *stage;
219 struct mimimi_sprite *sprite;
220};
221
222struct mimimi_input {
223 struct mimimi_image image;
224 struct mimimi_note notes[256];
225 unsigned char left, right;
226};
227
228extern struct mimimi_font *mimimi_font;
229
230extern struct mimimi_model *mimimi_mango;
231extern struct mimimi_model *mimimi_pepper;
232
233extern struct mimimi_model *mimimi_homura_flash;
234extern struct mimimi_model *mimimi_mirai_flash;
235extern struct mimimi_model *mimimi_haruka_flash;
236
237extern struct mimimi_model *mimimi_ryoubi_flash;
238extern struct mimimi_model *mimimi_ryouna_flash;
239
240extern struct mimimi_model *mimimi_mirai_shinomas;
241
242extern signed char *mimimi_sine;
243extern signed char *mimimi_cosine;
244
245int mimimi_div(int n, int q);
246int mimimi_div_up(int n, int q);
247int mimimi_div_down(int n, int q);
248int mimimi_mod(int n, int q);
249int mimimi_angle(int x, int y);
250
251void mimimi_stamp(struct mimimi_image *target, int x, int y, struct mimimi_image *source);
252
253void mimimi_camera_tick(struct mimimi_position *camera, struct mimimi_position *position, int ox, int oy);
254void mimimi_camera_stamp(struct mimimi_image *target, struct mimimi_position *camera, int x, int y, int z, struct mimimi_image *source);
255void mimimi_clamped_camera_tick(struct mimimi_clamped_camera *camera, int width, int height);
256
257void mimimi_collision_physics_tick(struct mimimi_physics *physics, struct mimimi_position *position, struct mimimi_ground *ground);
258void mimimi_physics_tick(struct mimimi_physics *physics, struct mimimi_position *position, struct mimimi_ground *ground);
259void mimimi_physics(struct mimimi_physics *physics, int width, int height);
260
261void mimimi_sprite(struct mimimi_sprite *sprite, struct mimimi_model *model, struct mimimi_ground *ground, int x, int y, int width, int height);
262void mimimi_sprite_tick(struct mimimi_sprite *sprite);
263
264void mimimi_positioned_physics_tick(struct mimimi_positioned_physics *physics, struct mimimi_ground *ground);
265void mimimi_positioned_physics(struct mimimi_positioned_physics *physics, struct mimimi_physics *other, struct mimimi_position *position);
266
267int mimimi_measure_character(struct mimimi_font *font, char ch);
268int mimimi_draw_character(struct mimimi_font *font, char ch, struct mimimi_image *target, int x, int y, unsigned char color);
269
270int mimimi_measure_segment(struct mimimi_font *font, char *text, int count);
271int mimimi_draw_segment(struct mimimi_font *font, char *text, int count, struct mimimi_image *target, int x, int y, unsigned char color);
272
273char *mimimi_skip_word(char *text);
274int mimimi_count_word(char *text);
275int mimimi_measure_word(struct mimimi_font *font, char *text);
276int mimimi_draw_word(struct mimimi_font *font, char *text, struct mimimi_image *target, int x, int y, unsigned char color);
277
278char *mimimi_skip_paragraph(char *text);
279int mimimi_count_paragraph(char *text);
280int mimimi_measure_paragraph(struct mimimi_font *font, char *text);
281int mimimi_draw_paragraph(struct mimimi_font *font, char *text, struct mimimi_image *target, int x, int y, unsigned char color);
282
283char *mimimi_skip_line(struct mimimi_font *font, char *text, int width);
284int mimimi_count_line(struct mimimi_font *font, char *text, int width);
285int mimimi_measure_line(struct mimimi_font *font, char *text, int width);
286int mimimi_draw_line(struct mimimi_font *font, char *text, int width, struct mimimi_image *target, int x, int y, unsigned char color);
287
288int mimimi_measure_text(struct mimimi_font *font, char *text, int width, int line_height);
289int mimimi_draw_text(struct mimimi_font *font, char *text, int width, int line_height, struct mimimi_image *target, int x, int y, unsigned char color);
290
291void mimimi_pose(struct mimimi_image *image, struct mimimi_model *model, struct mimimi_pose *pose);
292void mimimi_interpolate(struct mimimi_pose *a, struct mimimi_pose *b, int i, int count);
293
294void mimimi_background_tick(struct mimimi_background *background, struct mimimi_image *image, struct mimimi_position *camera, struct mimimi_position *offset);
295void mimimi_display_tick(struct mimimi_image *image, struct mimimi_sprite *sprite, struct mimimi_position *camera);
296
297unsigned char mimimi_ground_tile(struct mimimi_ground *ground, int x, int y);
298
299void mimimi_history_tick(struct mimimi_history *history, unsigned char left, unsigned char right);
300void mimimi_controls_tick(struct mimimi_walk *walk, struct mimimi_history *history, void (*jump)(void *data), void *data);
301void mimimi_jump(void *data);
302
303void mimimi_toast_dialogue(struct mimimi_toast_dialogue *toast_dialogue, struct mimimi_dialogue *dialogue);
304int mimimi_toast_dialogue_tick(struct mimimi_toast_dialogue *dialogue, struct mimimi_image *image);
305
306void mimimi_stage(struct mimimi_stage *stage, struct mimimi_ground **grounds, int count);
307void mimimi_stage_tick(struct mimimi_stage *stage, struct mimimi_input *input);
308struct mimimi_sprite *mimimi_spawn(struct mimimi_stage *stage, struct mimimi_model *model, int x, int y, int width, int height);
309void mimimi_stage_jump(void *data);
310void mimimi_play_sound(struct mimimi_stage *stage, struct mimimi_sound *sound);
311
312void mimimi_linear_propagate(struct mimimi_momentum *momentum, int value, int x0, int scale);
313void mimimi_linear_apply(struct mimimi_momentum *momentum, int *value, int x0, int scale);
314
315void mimimi_angular_propagate(struct mimimi_momentum *momentum, struct mimimi_position *position, int x0, int y0, int a0, int scale);
316void mimimi_angular_apply(struct mimimi_momentum *momentum, struct mimimi_position *position, int x0, int y0, int a0, int scale, int length);
317
318void mimimi_linear_motion_propagate(struct mimimi_linear_motion *motion, struct mimimi_momentum *momentum);
319void mimimi_linear_motion_apply(struct mimimi_linear_motion *motion, struct mimimi_momentum *momentum);
320
321void mimimi_angular_motion_propagate(struct mimimi_angular_motion *motion, struct mimimi_momentum *momentum);
322void mimimi_angular_motion_apply(struct mimimi_angular_motion *motion, struct mimimi_momentum *momentum);
323
324void mimimi_platform_display_tick(struct mimimi_platform *platform, struct mimimi_position *camera, struct mimimi_image *image);
325struct mimimi_platform_set *mimimi_add_platform_set(struct mimimi_stage *stage);
326void mimimi_spawn_linear_platform(struct mimimi_stage *stage, struct mimimi_platform_set *platforms, struct mimimi_ground *ground, struct mimimi_image *image, int x, int y, int scale);
327void mimimi_spawn_angular_platform(struct mimimi_stage *stage, struct mimimi_platform_set *platforms, struct mimimi_ground *ground, struct mimimi_image *image, int x, int y, int a, int scale, int height);
328
329void mimimi_platform_set_tick(struct mimimi_platform_set *platform_set);
330void mimimi_platform_set_display_tick(struct mimimi_platform_set *platforms, struct mimimi_image *image, struct mimimi_position *camera);
331
332void mimimi_unpack_bits(int size, unsigned char *unpacked, unsigned char *packed);
333
334void mimimi_linear_motion(struct mimimi_linear_motion *motion, int *value, int origin, int scale);
335void mimimi_angular_motion(struct mimimi_angular_motion *motion, struct mimimi_position *value, int x0, int y0, int a0, int scale, int height);
336
337void mimimi_background(struct mimimi_image *image, struct mimimi_ground *ground);
338
339void mimimi_boxing(struct mimimi_size *size, struct mimimi_image *image);
340
341void mimimi_scale(struct mimimi_image *target, struct mimimi_image *source);
342
343void mimimi_main(void (*tick)(void *data, struct mimimi_input *input), void *data);
344
345#endif