DragonflySotS 6 years ago
parent
commit
4d43d2d66d
4 changed files with 82 additions and 37 deletions
  1. 1
    1
      g3headers
  2. 76
    33
      src/pokedex/pokedex.c
  3. 3
    1
      src/pokedex/pokedex_common.h
  4. 2
    2
      src/pokedex/pokedex_detail.c

+ 1
- 1
g3headers

1
-Subproject commit 2f9b41afbceba16f5270691c2b7531529853efb5
1
+Subproject commit 9f790f1f0ac16ed8f80556e8f74e824836fc1950

+ 76
- 33
src/pokedex/pokedex.c View File

33
 extern const pchar pdex_str_empty[];
33
 extern const pchar pdex_str_empty[];
34
 
34
 
35
 static const u8 pdex_y_offset[] = {19, 35, 51, 67, 83, 99, 115, 131};
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
 struct TextboxTemplate pdex_boxes[] = {
38
 struct TextboxTemplate pdex_boxes[] = {
39
     {.bg_id = 0, .x = 11, .y = 0, .width = 10, .height = 2, .pal_id = 15, .charbase = 1},
39
     {.bg_id = 0, .x = 11, .y = 0, .width = 10, .height = 2, .pal_id = 15, .charbase = 1},
113
     rboxid_update_tilemap_and_tileset(TB_SEEN);
113
     rboxid_update_tilemap_and_tileset(TB_SEEN);
114
     rboxid_update_tilemap_and_tileset(TB_CAUGHT);
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
 void pdex_pokemon_load(u16 species) {
146
 void pdex_pokemon_load(u16 species) {
118
     /* this is very temporary */
147
     /* this is very temporary */
120
     u32 twidth = font_get_width_of_string(FONT_DEX_STD, &pokemon_names[species][0], 0x0000);
149
     u32 twidth = font_get_width_of_string(FONT_DEX_STD, &pokemon_names[species][0], 0x0000);
121
     rboxid_print(TB_PKMN, FONT_DEX_STD, TB_STD_CENTER(twidth, TB_STD_LEN_PX), 3, &pdex_text_color, 0,
150
     rboxid_print(TB_PKMN, FONT_DEX_STD, TB_STD_CENTER(twidth, TB_STD_LEN_PX), 3, &pdex_text_color, 0,
122
                  &pokemon_names[species][0]);
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
     rboxid_update_tilemap_and_tileset(TB_PKMN);
155
     rboxid_update_tilemap_and_tileset(TB_PKMN);
149
 }
156
 }
150
 
157
 
350
             pokedex_context->cursor_position_top--;
357
             pokedex_context->cursor_position_top--;
351
             pdex_hardware_scroll(true);
358
             pdex_hardware_scroll(true);
352
             m4aSongNumStart(600);
359
             m4aSongNumStart(600);
360
+        } else {
361
+            return;
353
         }
362
         }
354
     } else {
363
     } else {
355
         if (pokedex_context->cursor_position_internal < 7) {
364
         if (pokedex_context->cursor_position_internal < 7) {
360
             pokedex_context->cursor_position_top++;
369
             pokedex_context->cursor_position_top++;
361
             pdex_hardware_scroll(false);
370
             pdex_hardware_scroll(false);
362
             m4aSongNumStart(600);
371
             m4aSongNumStart(600);
372
+        } else {
373
+            return;
363
         }
374
         }
364
     }
375
     }
365
 
376
 
366
     u16 pkIndexToLoad = pokedex_context->cursor_position_internal + pokedex_context->cursor_position_top;
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
     pdex_update_balls();
401
     pdex_update_balls();
372
 }
402
 }
373
 
403
 
388
 
418
 
389
         pdex_pokeballs_init();
419
         pdex_pokeballs_init();
390
         pdex_load_scroll_ui();
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
         pdex_load_sc();
437
         pdex_load_sc();
395
         pdex_update_page_full();
438
         pdex_update_page_full();
396
 
439
 

+ 3
- 1
src/pokedex/pokedex_common.h View File

27
 #define TB_STD_CENTER(t,w) (((w - t) >> 1) + 2)
27
 #define TB_STD_CENTER(t,w) (((w - t) >> 1) + 2)
28
 #define TB_STD_RIGHT(t,w) ((w - t))
28
 #define TB_STD_RIGHT(t,w) ((w - t))
29
 
29
 
30
-#define DEX_PKMN_TAG 0x1300
30
+#define DEX_PKMN_TAG_ONE 0x1300
31
+#define DEX_PKMN_TAG_TWO 0x1310
32
+#define DEX_PKMN_TAG_THREE 0x1311
31
 #define DEX_BALL_TAG 0x1301
33
 #define DEX_BALL_TAG 0x1301
32
 #define DEX_CURSOR_TAG 0x1302
34
 #define DEX_CURSOR_TAG 0x1302
33
 #define DEX_ARROW_TAG 0x1303
35
 #define DEX_ARROW_TAG 0x1303

+ 2
- 2
src/pokedex/pokedex_detail.c View File

98
     pstrcat(string_buffer, pdex_str_weight_unit);
98
     pstrcat(string_buffer, pdex_str_weight_unit);
99
     u16 weightTwidth = font_get_width_of_string(FONT_DEX_STD, string_buffer, 0x0000);
99
     u16 weightTwidth = font_get_width_of_string(FONT_DEX_STD, string_buffer, 0x0000);
100
 
100
 
101
-    rboxid_print(TB_PKSIZE, FONT_DEX_STD, TB_STD_RIGHT(weightTwidth, TB_SW_W * 8) - 6, 1, &pdex_text_color, 0,
101
+    rboxid_print(TB_PKSIZE, FONT_DEX_STD, TB_STD_RIGHT(weightTwidth, TB_SW_W * 8) - 6, 14, &pdex_text_color, 0,
102
                  string_buffer);
102
                  string_buffer);
103
 
103
 
104
     u16 sizeNumber = pokedex_data[dexindex].height / 10;
104
     u16 sizeNumber = pokedex_data[dexindex].height / 10;
109
     pstrcat(string_buffer, buffer);
109
     pstrcat(string_buffer, buffer);
110
     pstrcat(string_buffer, pdex_str_size_unit);
110
     pstrcat(string_buffer, pdex_str_size_unit);
111
 
111
 
112
-    rboxid_print(TB_PKSIZE, FONT_DEX_STD, TB_STD_RIGHT(weightTwidth, TB_SW_W * 8) - 6, 14, &pdex_text_color, 0,
112
+    rboxid_print(TB_PKSIZE, FONT_DEX_STD, TB_STD_RIGHT(weightTwidth, TB_SW_W * 8) - 6, 1, &pdex_text_color, 0,
113
                  string_buffer);
113
                  string_buffer);
114
 
114
 
115
     rboxid_print(TB_DESC, FONT_DEX_STD, 3, 2, &pdex_text_color, 0, pokedex_data[dexindex].description1);
115
     rboxid_print(TB_DESC, FONT_DEX_STD, 3, 2, &pdex_text_color, 0, pokedex_data[dexindex].description1);