Mirai's Miscellaneous Misadventures
M18 / test / chapter.c
1
2
3
4#include <mimimi/chapters.h>
5#include <mimimi/senran-kagura/characters.h>
6#include <mimimi/appearances.h>
7#include <mimimi/allocators.h>
8#include <mimimi/ground.h>
9#include <mimimi/compound-behaviors.h>
10#include <mimimi/geometry.h>
11#include <mimimi/assets.h>
12#include <mimimi/engines.h>
13#include <mimimi/controls.h>
14#include <mimimi/sprites.h>
15#include <mimimi/cameras.h>
16#include <mimimi/behaviors.h>
17#include <mimimi/font.h>
18#include <mimimi/fonts.h>
19
20#include <mimimi/test.h>
21
22#include "ground.c"
23
24struct mimimi_chapter *mimimi_test(struct mimimi_allocator *allocator)
25{
26 struct mimimi_behavior *compound = mimimi_compound_behavior(allocator);
27
28 struct mimimi_engine *engine = (*allocator->allocate)(sizeof *engine);
29 mimimi_compound(compound, mimimi_finalizer(engine, allocator->deallocate, allocator));
30
31 struct mimimi_chapter *chapter = (*allocator->allocate)(sizeof *chapter);
32 mimimi_compound(compound, mimimi_finalizer(chapter, allocator->deallocate, allocator));
33 chapter->behavior = compound;
34 chapter->engine = engine;
35
36 struct mimimi_position *camera = (*allocator->allocate)(sizeof *camera);
37 mimimi_compound(compound, mimimi_finalizer(camera, allocator->deallocate, allocator));
38
39 struct mimimi_image *background = (*allocator->allocate)(sizeof *background);
40 mimimi_compound(compound, mimimi_finalizer(background, allocator->deallocate, allocator));
41
42 background->colors = (*allocator->allocate)(mimimi_test_ground.width * 16 * mimimi_test_ground.height * 16);
43 mimimi_compound(compound, mimimi_finalizer(background->colors, allocator->deallocate, allocator));
44
45 static unsigned char ground_colors[] = {0x00, 0x3B, 0x1C, 0x21, 0x82, 0x56, 0x43, 0x25};
46
47 background->width = mimimi_test_ground.width * 16;
48 background->height = mimimi_test_ground.height * 16;
49
50 for (int x = 0 ; x < mimimi_test_ground.width * 16 ; x++)
51 for (int y = 0 ; y < mimimi_test_ground.height * 16 ; y++)
52 {
53 unsigned char color = ground_colors[mimimi_test_ground.tiles[x / 16 + y / 16 * mimimi_test_ground.width]];
54 background->colors[x + y * mimimi_test_ground.width * 16] = color;
55 }
56
57 struct mimimi_history *history = (*allocator->allocate)(sizeof *history);
58 mimimi_compound(compound, mimimi_finalizer(history, allocator->deallocate, allocator));
59 mimimi_compound(compound, mimimi_history(history, chapter, allocator));
60
61 struct mimimi_sprite *mirai = mimimi_sprite(&mimimi_test_ground, 11776, 5248, 80, 250, allocator);
62
63
64
65 struct mimimi_appearance *mirai_appearance = mimimi_appearance(mimimi_mirai_yang, allocator);
66
67
68
69 mimimi_compound(compound, mirai->behavior);
70
71
72
73 struct mimimi_jump *mirai_jump = (*allocator->allocate)(sizeof *mirai_jump);
74 mimimi_compound(compound, mimimi_finalizer(mirai_jump, allocator->deallocate, allocator));
75 struct mimimi_behavior *mirai_jump_behavior = mimimi_jump(mirai_jump, mirai->physics, allocator);
76 mimimi_compound(compound, mimimi_finalizer(mirai_jump_behavior->data, mirai_jump_behavior->finish, allocator));
77
78 struct mimimi_controls *mirai_controls = (*allocator->allocate)(sizeof *mirai_controls);
79 mimimi_compound(compound, mimimi_finalizer(mirai_controls, allocator->deallocate, allocator));
80 mirai->awake_behavior = mimimi_controls(mirai_controls, mirai->walk, history, allocator);
81 mimimi_compound(compound, mimimi_finalizer(mirai->awake_behavior->data, mirai->awake_behavior->finish, allocator));
82 mirai_controls->jump = mirai_jump_behavior;
83
84 mimimi_compound(compound, mimimi_camera(camera, mirai->position, 0, -512, allocator));
85
86 mimimi_compound(compound, mimimi_background(engine, camera, background, 0, allocator));
87
88 mimimi_compound(compound, mimimi_display(engine, camera, mirai, mirai_appearance, allocator));
89
90
91
92 struct mimimi_image *overlay = (*allocator->allocate)(sizeof *overlay);
93 mimimi_compound(compound, mimimi_finalizer(overlay, allocator->deallocate, allocator));
94
95 overlay->colors = (*allocator->allocate)(256 * 64);
96 mimimi_compound(compound, mimimi_finalizer(overlay->colors, allocator->deallocate, allocator));
97
98 overlay->width = 256;
99 overlay->height = 64;
100
101 for (int i = 0 ; i < overlay->width * overlay->height ; i++)
102 overlay->colors[i] = 0;
103
104 struct mimimi_image *glyphs = (*allocator->allocate)(mimimi_font_image_count * sizeof *glyphs);
105 unsigned char *colors = (*allocator->allocate)(mimimi_font_color_count);
106
107 for (int i = 0 ; i < mimimi_font_image_count ; i++)
108 glyphs[i].colors = colors + i * mimimi_font_image_color_count;
109
110 mimimi_glyphs(glyphs, mimimi_font, 0x6C);
111
112 mimimi_text(overlay, glyphs, 16, 16, "Mirai's Miscellaneous Misadventures");
113 mimimi_text(overlay, glyphs, 16, 32, "Milestone 18, March 3 of 2022");
114
115 (*allocator->deallocate)(colors);
116 (*allocator->deallocate)(glyphs);
117
118 mimimi_compound(compound, mimimi_overlay(engine, overlay, 0, 0, allocator));
119
120 return chapter;
121}