Mirai's Miscellaneous Misadventures

M17 / include / mimimi / chapters.h

1// copyright 2022 zamfofex
2// license: AGPLv3 or later
3
4#ifndef MIMIMI_CHAPTERS_H
5#define MIMIMI_CHAPTERS_H
6
7// types
8
9struct mimimi_game;
10struct mimimi_sprite;
11struct mimimi_sprite_appearance;
12struct mimimi_image;
13
14enum mimimi_occurrence
15{
16	mimimi_sprite_spawned,
17};
18
19struct mimimi_chapter
20{
21	void *data;
22	void (*start)(struct mimimi_chapter *chapter, struct mimimi_game *game);
23	void (*step)(struct mimimi_chapter *chapter);
24	void (*occurrence)(struct mimimi_chapter *chapter, enum mimimi_occurrence type, void *occurrence);
25};
26
27struct mimimi_physical_attributes
28{
29	int x, y;
30	int width, height;
31	int dx, dy;
32	
33	char airborne;
34	
35	char direction;
36};
37
38struct mimimi_living_attributes
39{
40	int knocked_time;
41	int immunity_time;
42	int pristinity;
43};
44
45struct mimimi_behavior
46{
47	void (*behave)(struct mimimi_sprite *sprite, void *data);
48	void *data;
49};
50
51struct mimimi_physics_data
52{
53	int gravity;
54};
55
56struct mimimi_fall_data
57{
58	int max_speed;
59	int knocked_time;
60};
61
62struct mimimi_live_data
63{
64	int recovery_immunity_time;
65	int max_pristinity;
66};
67
68struct mimimi_walk_data
69{
70	int ground_speed;
71	int airborne_speed;
72};
73
74struct mimimi_camera_data
75{
76	struct mimimi_sprite *target;
77};
78
79struct mimimi_behave_data
80{
81	struct mimimi_behavior *behavior;
82	struct mimimi_physics_data *physics_data;
83	struct mimimi_fall_data *fall_data;
84	struct mimimi_live_data *live_data;
85	struct mimimi_walk_data *walk_data;
86};
87
88// constants
89
90extern struct mimimi_physics_data *mimimi_physics_data_default;
91extern struct mimimi_fall_data *mimimi_fall_data_default;
92extern struct mimimi_live_data *mimimi_live_data_default;
93extern struct mimimi_walk_data *mimimi_walk_data_default;
94extern struct mimimi_behave_data *mimimi_behave_data_default;
95
96extern int mimimi_sprite_size;
97
98extern int mimimi_width;
99extern int mimimi_height;
100
101// functions
102
103void mimimi_jump(struct mimimi_sprite *sprite);
104void mimimi_damage(struct mimimi_sprite *sprite, int damage, int attack_y, int attack_width, int attack_height);
105
106void mimimi_spawn(struct mimimi_game *game, struct mimimi_sprite *sprite, int x, int y, int width, int height, struct mimimi_sprite_appearance *appearance, struct mimimi_behavior *behavior);
107
108void mimimi_physics(struct mimimi_sprite *sprite, void *data);
109void mimimi_controls(struct mimimi_sprite *sprite, void *data);
110void mimimi_enemy_ai(struct mimimi_sprite *sprite, void *data);
111void mimimi_stationary_ai(struct mimimi_sprite *sprite, void *data);
112void mimimi_fall(struct mimimi_sprite *sprite, void *data);
113void mimimi_live(struct mimimi_sprite *sprite, void *data);
114void mimimi_walk(struct mimimi_sprite *sprite, void *data);
115void mimimi_camera(struct mimimi_sprite *sprite, void *data);
116void mimimi_behave(struct mimimi_sprite *sprite, void *data);
117
118void mimimi_physical_attributes(struct mimimi_sprite *sprite, struct mimimi_physical_attributes *attributes);
119void mimimi_living_attributes(struct mimimi_sprite *sprite, struct mimimi_living_attributes *attributes);
120
121void mimimi_camera_sprite(struct mimimi_sprite *sprite);
122
123void mimimi_ground(struct mimimi_game *game, unsigned char *ground, int width, int height);
124void mimimi_background(struct mimimi_game *game, struct mimimi_image *background);
125void mimimi_overlay(struct mimimi_game *game, struct mimimi_image *overlay);
126
127int mimimi_text(struct mimimi_image *image, struct mimimi_image *glyphs, int x, int y, char *text);
128
129#endif