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