AnimaEngine  1.0.0
Nintendo DS Pokemon Black, White, Black 2, and White 2 sprite extraction and preview toolchain
sprite_composer.h
Go to the documentation of this file.
1 
10 #ifndef SPRITE_COMPOSER_H
11 #define SPRITE_COMPOSER_H
12 
13 #include "common.h"
14 #include "ppm.h"
15 #include "ncer.h"
16 #include "nanr.h"
17 #include "nmcr.h"
18 #include "nmar.h"
19 #include "ncgr.h"
20 #include "nclr.h"
21 #include "coords.h"
22 
26 typedef struct GlobalOam {
27  int record_x;
28  int record_y;
29  int draw_x;
30  int draw_y;
31  int tile_index;
32  int width;
33  int height;
35  int flip_h;
36  int flip_v;
37  int priority;
39  int rotation;
40  int scale_x;
41  int scale_y;
50 
54 typedef struct ComposerTransform {
55  int rotation;
56  int scale_x;
57  int scale_y;
61 
68 void Composer_ClearPixels(RgbaColor *pixels, int width, int height);
69 
83  const NcerFile *ncer,
84  const NanrFile *nanr,
85  const NmcrMap *map,
86  int tick,
87  int *out_min_x,
88  int *out_min_y,
89  int *out_max_x,
90  int *out_max_y,
91  const CoordFile *coords
92 );
93 
108  const NcerFile *ncer,
109  const NanrFile *nanr,
110  const NmcrMap *map,
111  int tick,
112  int *out_min_x,
113  int *out_min_y,
114  int *out_max_x,
115  int *out_max_y,
116  const CoordFile *coords,
117  const ComposerTransform *parent_transform
118 );
119 
135  const NcerFile *ncer,
136  const NanrFile *nanr,
137  const NmcrMap *map,
138  int start_frame,
139  int frame_count,
140  int *out_min_x,
141  int *out_min_y,
142  int *out_max_x,
143  int *out_max_y,
144  const CoordFile *coords,
145  int delay_cs
146 );
147 
167  const NcerFile *ncer,
168  const NanrFile *nanr,
169  const NmcrMap *map,
170  const NcgrImage *ncgr,
171  const NclrPalette *palette,
172  int tick,
173  int tile_stride,
174  int min_x,
175  int min_y,
176  int width,
177  int height,
178  int margin,
179  u8 *out_indices,
180  const CoordFile *coords
181 );
182 
203  const NcerFile *ncer,
204  const NanrFile *nanr,
205  const NmcrMap *map,
206  const NcgrImage *ncgr,
207  const NclrPalette *palette,
208  int tick,
209  int tile_stride,
210  int min_x,
211  int min_y,
212  int width,
213  int height,
214  int margin,
215  u8 *out_indices,
216  const CoordFile *coords,
217  const ComposerTransform *parent_transform
218 );
219 
237  const NcerFile *ncer,
238  const NanrFile *nanr,
239  const NmcrMap *map,
240  const NcgrImage *ncgr,
241  const NclrPalette *palette,
242  int tick,
243  int tile_stride,
244  const char *label,
245  RgbaColor **out_pixels,
246  int *out_width,
247  int *out_height,
248  const CoordFile *coords
249 );
250 
263  const u8 *frames,
264  int frame_count,
265  int width,
266  int height,
267  u8 **out_frames,
268  int *out_width,
269  int *out_height
270 );
271 
288  const NcerFile *ncer,
289  const NanrFile *nanr,
290  const NmcrMap *map_a,
291  int map_a_frame_count,
292  const NmcrMap *map_b,
293  int map_b_frame_count,
294  int *out_min_x,
295  int *out_min_y,
296  int *out_max_x,
297  int *out_max_y,
298  const CoordFile *coords,
299  int delay_cs
300 );
301 
322  const NcerFile *ncer,
323  const NanrFile *nanr,
324  const NmcrMap *idle_map,
325  const NmcrMap *break_map,
326  const NcgrImage *ncgr,
327  const NclrPalette *palette,
328  int idle_repetitions,
329  int tile_stride,
330  int margin,
331  u8 **out_frames,
332  int *out_frame_count,
333  int *out_width,
334  int *out_height,
335  const CoordFile *coords,
336  int delay_cs
337 );
338 
363  const NcerFile *ncer,
364  const NanrFile *nanr,
365  const NmcrFile *nmcr,
366  const NmarFile *nmar,
367  const NmcrMap *idle_map,
368  const NmcrMap *break_map,
369  int idle_animation_index,
370  int break_animation_index,
371  const NcgrImage *ncgr,
372  const NclrPalette *palette,
373  int idle_repetitions,
374  int tile_stride,
375  int margin,
376  u8 **out_frames,
377  int *out_frame_count,
378  int *out_width,
379  int *out_height,
380  const CoordFile *coords,
381  int delay_cs
382 );
383 
391  const NanrFile *nanr,
392  const NmcrMap *idle_map
393 );
394 
402  const NmarFile *nmar,
403  int animation_index
404 );
405 
406 #endif
Common types, macros, and standard library includes used throughout AnimaEngine.
unsigned char u8
Definition: common.h:14
Coordinates file parsing structures and functions for character offset rendering.
Nintendo Animation Resource (.NANR) structure parsing.
Nintendo Cell Resource (.NCER) parser representing individual 2D sprite composite elements.
Nintendo Character Graphic Resource (.NCGR) 2D tile character graphics structures.
Nintendo Color Resource (.NCLR) palette parser.
Nintendo Multi-Animation Resource (.NMAR) file parser.
Nintendo Multi-Cell Resource (.NMCR) layout mapping parser.
Portable Pixmap (PPM) format writer utilities and color structures.
struct ComposerTransform ComposerTransform
Affine transformation parameters passed down during scene orchestration.
void Composer_ClearPixels(RgbaColor *pixels, int width, int height)
Fills the RGBA canvas with transparent pixels.
Definition: sprite_composer.c:690
int Composer_CropIndexedFrames(const u8 *frames, int frame_count, int width, int height, u8 **out_frames, int *out_width, int *out_height)
Crops transparent margins from index-compiled spritesheet animation loops.
Definition: sprite_composer.c:1076
void Composer_ComputeBoundsWithTransform(const NcerFile *ncer, const NanrFile *nanr, const NmcrMap *map, int tick, int *out_min_x, int *out_min_y, int *out_max_x, int *out_max_y, const CoordFile *coords, const ComposerTransform *parent_transform)
Bounding box calculator with parent timeline transformations.
Definition: sprite_composer.c:702
int Composer_RenderComposedAnimation(const NcerFile *ncer, const NanrFile *nanr, const NmcrMap *idle_map, const NmcrMap *break_map, const NcgrImage *ncgr, const NclrPalette *palette, int idle_repetitions, int tile_stride, int margin, u8 **out_frames, int *out_frame_count, int *out_width, int *out_height, const CoordFile *coords, int delay_cs)
Renders a complete loop merging a base idle animation and a break sequence.
Definition: sprite_composer.c:1486
int Composer_ComputeIdleRepetitions(const NanrFile *nanr, const NmcrMap *idle_map)
Computes optimal number of idle loops before transition so loop length is ~3 seconds.
Definition: sprite_composer.c:1741
int Composer_RenderFrameRgba(const NcerFile *ncer, const NanrFile *nanr, const NmcrMap *map, const NcgrImage *ncgr, const NclrPalette *palette, int tick, int tile_stride, const char *label, RgbaColor **out_pixels, int *out_width, int *out_height, const CoordFile *coords)
Renders a composite frame directly into a 32-bit RGBA pixel array.
Definition: sprite_composer.c:982
int Composer_ComputeNmarIdleRepetitions(const NmarFile *nmar, int animation_index)
Timeline-driven optimal idle loops counter before playing break sequence.
Definition: sprite_composer.c:1781
void Composer_ComputeBounds(const NcerFile *ncer, const NanrFile *nanr, const NmcrMap *map, int tick, int *out_min_x, int *out_min_y, int *out_max_x, int *out_max_y, const CoordFile *coords)
Calculates the extreme bounding box coordinates for a specific animation frame tick.
Definition: sprite_composer.c:798
int Composer_RenderFrameIndexed(const NcerFile *ncer, const NanrFile *nanr, const NmcrMap *map, const NcgrImage *ncgr, const NclrPalette *palette, int tick, int tile_stride, int min_x, int min_y, int width, int height, int margin, u8 *out_indices, const CoordFile *coords)
Composites a frame into an indexed 8-bit color-indexed layout canvas.
Definition: sprite_composer.c:946
void Composer_ComputeBoundsRange(const NcerFile *ncer, const NanrFile *nanr, const NmcrMap *map, int start_frame, int frame_count, int *out_min_x, int *out_min_y, int *out_max_x, int *out_max_y, const CoordFile *coords, int delay_cs)
Calculates bounding box encapsulating a full range of animation frames.
Definition: sprite_composer.c:824
void Composer_ComputeUnionBounds(const NcerFile *ncer, const NanrFile *nanr, const NmcrMap *map_a, int map_a_frame_count, const NmcrMap *map_b, int map_b_frame_count, int *out_min_x, int *out_min_y, int *out_max_x, int *out_max_y, const CoordFile *coords, int delay_cs)
Computes combined bounding box that fits two animation sets sharing a unified canvas space.
Definition: sprite_composer.c:1167
int Composer_RenderFrameIndexedWithTransform(const NcerFile *ncer, const NanrFile *nanr, const NmcrMap *map, const NcgrImage *ncgr, const NclrPalette *palette, int tick, int tile_stride, int min_x, int min_y, int width, int height, int margin, u8 *out_indices, const CoordFile *coords, const ComposerTransform *parent_transform)
Composites a transformed frame into an 8bpp color-indexed layout canvas.
Definition: sprite_composer.c:887
int Composer_RenderComposedAnimationTimeline(const NcerFile *ncer, const NanrFile *nanr, const NmcrFile *nmcr, const NmarFile *nmar, const NmcrMap *idle_map, const NmcrMap *break_map, int idle_animation_index, int break_animation_index, const NcgrImage *ncgr, const NclrPalette *palette, int idle_repetitions, int tile_stride, int margin, u8 **out_frames, int *out_frame_count, int *out_width, int *out_height, const CoordFile *coords, int delay_cs)
Timeline-driven composed loop renderer that applies full parent translation transforms.
Definition: sprite_composer.c:1588
struct GlobalOam GlobalOam
Assembled global OAM record with complete transformations applied.
Affine transformation parameters passed down during scene orchestration.
Definition: sprite_composer.h:54
int scale_y
Definition: sprite_composer.h:57
int rotation
Definition: sprite_composer.h:55
int translate_x
Definition: sprite_composer.h:58
int scale_x
Definition: sprite_composer.h:56
int translate_y
Definition: sprite_composer.h:59
Collection of coordinate records parsed from a coordinates file.
Definition: coords.h:29
Assembled global OAM record with complete transformations applied.
Definition: sprite_composer.h:26
int draw_y
Definition: sprite_composer.h:30
int parent_scale_y
Definition: sprite_composer.h:46
int flip_v
Definition: sprite_composer.h:36
int rotation
Definition: sprite_composer.h:39
int original_index
Definition: sprite_composer.h:38
int scale_y
Definition: sprite_composer.h:41
int translate_x
Definition: sprite_composer.h:42
int parent_translate_x
Definition: sprite_composer.h:47
int flip_h
Definition: sprite_composer.h:35
int record_y
Definition: sprite_composer.h:28
int draw_x
Definition: sprite_composer.h:29
int parent_scale_x
Definition: sprite_composer.h:45
int height
Definition: sprite_composer.h:33
int tile_index
Definition: sprite_composer.h:31
int width
Definition: sprite_composer.h:32
int translate_y
Definition: sprite_composer.h:43
int parent_translate_y
Definition: sprite_composer.h:48
int palette_bank
Definition: sprite_composer.h:34
int scale_x
Definition: sprite_composer.h:40
int parent_rotation
Definition: sprite_composer.h:44
int record_x
Definition: sprite_composer.h:27
int priority
Definition: sprite_composer.h:37
Unpacked representation of a complete .NANR resource file.
Definition: nanr.h:45
Unpacked representation of a complete .NCER resource.
Definition: ncer.h:56
Container representing parsed NCGR image tile graphics.
Definition: ncgr.h:15
Container representing parsed NCLR color palette data.
Definition: nclr.h:17
Unpacked representation of a complete .NMAR resource.
Definition: nmar.h:52
Unpacked representation of a complete .NMCR resource.
Definition: nmcr.h:35
Multi-cell layout composition group containing multiple records.
Definition: nmcr.h:26
32-bit RGBA color representation struct.
Definition: ppm.h:14