|
@@ -33,7 +33,7 @@ extern const pchar pdex_str_caught[];
|
33
|
33
|
extern const pchar pdex_str_empty[];
|
34
|
34
|
|
35
|
35
|
static const u8 pdex_y_offset[] = {19, 35, 51, 67, 83, 99, 115, 131};
|
36
|
|
-static const u16 scroll_speed_delays[] = {20, 20, 20, 20,10, 5, 0};
|
|
36
|
+static const u16 scroll_speed_delays[] = {20, 20, 20, 20, 10, 5, 0};
|
37
|
37
|
|
38
|
38
|
struct TextboxTemplate pdex_boxes[] = {
|
39
|
39
|
{.bg_id = 0, .x = 11, .y = 0, .width = 10, .height = 2, .pal_id = 15, .charbase = 1},
|
|
@@ -113,6 +113,35 @@ void pdex_load_sc(void) {
|
113
|
113
|
rboxid_update_tilemap_and_tileset(TB_SEEN);
|
114
|
114
|
rboxid_update_tilemap_and_tileset(TB_CAUGHT);
|
115
|
115
|
}
|
|
116
|
+void pdex_pokemon_oam_update(u16 species, s8 objid) {
|
|
117
|
+ gpu_pal_apply_compressed(pokemon_palette_normal[species].data, 16 * (objects[objid].final_oam.palette_num + 16),
|
|
118
|
+ 32);
|
|
119
|
+ lz77UnCompVram(pokemon_graphics_front[species].data,
|
|
120
|
+ ((void *)(objects[objid].final_oam.tile_num * 32) + ADDR_VRAM + 0x10000));
|
|
121
|
+}
|
|
122
|
+
|
|
123
|
+s8 pdex_pokemon_oam_load(u16 species, u16 tag) {
|
|
124
|
+ struct SpriteTiles pkmnTiles = {pokemon_graphics_front[species].data, 2048, tag};
|
|
125
|
+ struct SpritePalette pkmnPal = {pokemon_palette_normal[species].data, tag};
|
|
126
|
+ const struct Template pkmnTemplate = {
|
|
127
|
+ .tiles_tag = tag,
|
|
128
|
+ .pal_tag = tag,
|
|
129
|
+ .oam = &pdex_oam_pkmn,
|
|
130
|
+ .animation = &anim_image_empty,
|
|
131
|
+ .graphics = &pkmnTiles,
|
|
132
|
+ .rotscale = &rotscale_empty,
|
|
133
|
+ .callback = oac_nullsub,
|
|
134
|
+ };
|
|
135
|
+ gpu_tile_obj_decompress_alloc_tag_and_upload(&pkmnTiles);
|
|
136
|
+
|
|
137
|
+ gpu_pal_decompress_alloc_tag_and_upload(&pkmnPal);
|
|
138
|
+ s8 objid = (s8)template_instanciate_forward_search(&pkmnTemplate, 10, 10, 0);
|
|
139
|
+
|
|
140
|
+ objects[objid].pos1.x = 55;
|
|
141
|
+ objects[objid].pos1.y = 76;
|
|
142
|
+ OBJID_HIDE(objid);
|
|
143
|
+ return objid;
|
|
144
|
+}
|
116
|
145
|
|
117
|
146
|
void pdex_pokemon_load(u16 species) {
|
118
|
147
|
/* this is very temporary */
|
|
@@ -120,31 +149,9 @@ void pdex_pokemon_load(u16 species) {
|
120
|
149
|
u32 twidth = font_get_width_of_string(FONT_DEX_STD, &pokemon_names[species][0], 0x0000);
|
121
|
150
|
rboxid_print(TB_PKMN, FONT_DEX_STD, TB_STD_CENTER(twidth, TB_STD_LEN_PX), 3, &pdex_text_color, 0,
|
122
|
151
|
&pokemon_names[species][0]);
|
123
|
|
- if (pokedex_context->pokemon_oam != -1) {
|
124
|
|
- lz77UnCompVram(pokemon_graphics_front[species].data,
|
125
|
|
- ((void *)(objects[pokedex_context->pokemon_oam].final_oam.tile_num * 32) + ADDR_VRAM + 0x10000));
|
126
|
|
- gpu_pal_apply_compressed(pokemon_palette_normal[species].data,
|
127
|
|
- 16 * (objects[pokedex_context->pokemon_oam].final_oam.palette_num + 16), 32);
|
128
|
|
- } else {
|
129
|
|
- struct SpriteTiles pkmnTiles = {pokemon_graphics_front[species].data, 2048, DEX_PKMN_TAG};
|
130
|
|
- struct SpritePalette pkmnPal = {pokemon_palette_normal[species].data, DEX_PKMN_TAG};
|
131
|
|
- const struct Template pkmnTemplate = {
|
132
|
|
- .tiles_tag = DEX_PKMN_TAG,
|
133
|
|
- .pal_tag = DEX_PKMN_TAG,
|
134
|
|
- .oam = &pdex_oam_pkmn,
|
135
|
|
- .animation = &anim_image_empty,
|
136
|
|
- .graphics = &pkmnTiles,
|
137
|
|
- .rotscale = &rotscale_empty,
|
138
|
|
- .callback = oac_nullsub,
|
139
|
|
- };
|
140
|
|
- gpu_tile_obj_decompress_alloc_tag_and_upload(&pkmnTiles);
|
141
|
|
-
|
142
|
|
- gpu_pal_decompress_alloc_tag_and_upload(&pkmnPal);
|
143
|
|
- pokedex_context->pokemon_oam = (s8)template_instanciate_forward_search(&pkmnTemplate, 10, 10, 0);
|
144
|
|
-
|
145
|
|
- objects[pokedex_context->pokemon_oam].pos1.x = 55;
|
146
|
|
- objects[pokedex_context->pokemon_oam].pos1.y = 76;
|
147
|
|
- }
|
|
152
|
+
|
|
153
|
+ // pokedex_context->pokemon_oam = pdex_pokemon_oam_load(species, pokedex_context->pokemon_oam);
|
|
154
|
+
|
148
|
155
|
rboxid_update_tilemap_and_tileset(TB_PKMN);
|
149
|
156
|
}
|
150
|
157
|
|
|
@@ -350,6 +357,8 @@ void pdex_try_advance(u8 reverse) {
|
350
|
357
|
pokedex_context->cursor_position_top--;
|
351
|
358
|
pdex_hardware_scroll(true);
|
352
|
359
|
m4aSongNumStart(600);
|
|
360
|
+ } else {
|
|
361
|
+ return;
|
353
|
362
|
}
|
354
|
363
|
} else {
|
355
|
364
|
if (pokedex_context->cursor_position_internal < 7) {
|
|
@@ -360,14 +369,35 @@ void pdex_try_advance(u8 reverse) {
|
360
|
369
|
pokedex_context->cursor_position_top++;
|
361
|
370
|
pdex_hardware_scroll(false);
|
362
|
371
|
m4aSongNumStart(600);
|
|
372
|
+ } else {
|
|
373
|
+ return;
|
363
|
374
|
}
|
364
|
375
|
}
|
365
|
376
|
|
366
|
377
|
u16 pkIndexToLoad = pokedex_context->cursor_position_internal + pokedex_context->cursor_position_top;
|
367
|
|
- if (pdex_lazy_lookup_entry(pkIndexToLoad)->seen || pdex_lazy_lookup_entry(pkIndexToLoad)->caught)
|
368
|
|
- pdex_pokemon_load(pdex_lazy_lookup_entry(pkIndexToLoad)->species);
|
369
|
|
- else
|
370
|
|
- pdex_pokemon_load(pdex_lazy_lookup_entry(pkIndexToLoad)->species); /* debug, just display the mofo */
|
|
378
|
+ u16 speciesToLoad = (pdex_lazy_lookup_entry(pkIndexToLoad)->seen || pdex_lazy_lookup_entry(pkIndexToLoad)->caught)
|
|
379
|
+ ? pdex_lazy_lookup_entry(pkIndexToLoad)->species
|
|
380
|
+ : pdex_lazy_lookup_entry(pkIndexToLoad)->species; /* debug, just display the mofo */
|
|
381
|
+
|
|
382
|
+ pdex_pokemon_load(speciesToLoad);
|
|
383
|
+ if (reverse) {
|
|
384
|
+ s8 oam = pokedex_context->pokemon_oam; // current oam id
|
|
385
|
+ OBJID_HIDE(oam);
|
|
386
|
+ pokedex_context->pokemon_oam = pokedex_context->prev_pokemon_oam;
|
|
387
|
+ OBJID_SHOW(pokedex_context->pokemon_oam);
|
|
388
|
+ pokedex_context->prev_pokemon_oam = pokedex_context->next_pokemon_oam;
|
|
389
|
+ pokedex_context->next_pokemon_oam = oam;
|
|
390
|
+
|
|
391
|
+ pdex_pokemon_oam_update(pdex_lazy_lookup_entry(pkIndexToLoad - 1)->species, pokedex_context->prev_pokemon_oam);
|
|
392
|
+ } else {
|
|
393
|
+ s8 oam = pokedex_context->pokemon_oam;
|
|
394
|
+ OBJID_HIDE(oam);
|
|
395
|
+ pokedex_context->pokemon_oam = pokedex_context->next_pokemon_oam;
|
|
396
|
+ OBJID_SHOW(pokedex_context->pokemon_oam);
|
|
397
|
+ pokedex_context->next_pokemon_oam = pokedex_context->prev_pokemon_oam;
|
|
398
|
+ pokedex_context->prev_pokemon_oam = oam;
|
|
399
|
+ pdex_pokemon_oam_update(pdex_lazy_lookup_entry(pkIndexToLoad + 1)->species, pokedex_context->next_pokemon_oam);
|
|
400
|
+ }
|
371
|
401
|
pdex_update_balls();
|
372
|
402
|
}
|
373
|
403
|
|
|
@@ -388,9 +418,22 @@ void pdex_loop(u8 tid) {
|
388
|
418
|
|
389
|
419
|
pdex_pokeballs_init();
|
390
|
420
|
pdex_load_scroll_ui();
|
391
|
|
- pdex_pokemon_load(
|
392
|
|
- pdex_lazy_lookup_entry(pokedex_context->cursor_position_top + pokedex_context->cursor_position_internal)
|
393
|
|
- ->species);
|
|
421
|
+ u16 currentIndex = pokedex_context->cursor_position_top + pokedex_context->cursor_position_internal;
|
|
422
|
+ pdex_pokemon_load(pdex_lazy_lookup_entry(currentIndex)->species);
|
|
423
|
+
|
|
424
|
+ pokedex_context->pokemon_oam =
|
|
425
|
+ pdex_pokemon_oam_load(pdex_lazy_lookup_entry(currentIndex)->species, DEX_PKMN_TAG_ONE);
|
|
426
|
+ OBJID_SHOW(pokedex_context->pokemon_oam);
|
|
427
|
+
|
|
428
|
+ pokedex_context->next_pokemon_oam =
|
|
429
|
+ pdex_pokemon_oam_load(pdex_lazy_lookup_entry(currentIndex + 1)->species, DEX_PKMN_TAG_TWO);
|
|
430
|
+
|
|
431
|
+ if (currentIndex != pokedex_context->first_seen) {
|
|
432
|
+ pokedex_context->prev_pokemon_oam =
|
|
433
|
+ pdex_pokemon_oam_load(pdex_lazy_lookup_entry(currentIndex - 1)->species, DEX_PKMN_TAG_THREE);
|
|
434
|
+ } else {
|
|
435
|
+ pokedex_context->prev_pokemon_oam = pdex_pokemon_oam_load(0, DEX_PKMN_TAG_THREE);
|
|
436
|
+ }
|
394
|
437
|
pdex_load_sc();
|
395
|
438
|
pdex_update_page_full();
|
396
|
439
|
|