Skip to content

Commit b54b795

Browse files
committed
Rob and Kirox's Extended Save Context Adventure
1 parent efd6b94 commit b54b795

7 files changed

Lines changed: 31371 additions & 8498 deletions

File tree

ASM/c/file_icons.c

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "hud_colors.h"
55
#include "triforce.h"
66
#include "ocarina_buttons.h"
7+
#include "save.h"
78

89
#define ICON_SIZE 0x0C
910
#define MUSIC_WIDTH 0x06
@@ -172,6 +173,7 @@ static const variable_tile_data_t variable_tile_positions[NUM_VARIABLE] = {
172173
{0, {0x4E, 0x2A}}, // Strength
173174
{0, {0x5A, 0x2A}}, // Scale
174175
};
176+
static uint8_t bronze_scale_marker = 0;
175177

176178
typedef struct {
177179
colorRGB8_t color;
@@ -380,8 +382,9 @@ static void populate_child_trade(const z64_file_t* file, variable_tile_t* tile);
380382
static void populate_adult_trade(const z64_file_t* file, variable_tile_t* tile);
381383
static void populate_magic(const z64_file_t* file, variable_tile_t* tile);
382384
static void populate_upgrade_equip(const z64_file_t* file, variable_tile_t* tile, uint8_t value, uint8_t max, uint8_t base_tile);
385+
static void populate_upgrade_scale(const z64_file_t* file, variable_tile_t* tile, uint8_t value, uint8_t base_tile);
383386

384-
static void populate_variable(const z64_file_t* file, variable_tile_info_t* info) {
387+
void populate_variable(const z64_file_t* file, variable_tile_info_t* info) {
385388
variable_tile_t* tile = info->tiles;
386389

387390
populate_upgrade_item( file, tile++, Z64_SLOT_OCARINA, Z64_ITEM_FAIRY_OCARINA);
@@ -390,7 +393,8 @@ static void populate_variable(const z64_file_t* file, variable_tile_info_t* info
390393
populate_adult_trade( file, tile++);
391394
populate_magic( file, tile++);
392395
populate_upgrade_equip(file, tile++, file->strength_upgrade, 3, Z64_ITEM_GORONS_BRACELET);
393-
populate_upgrade_equip(file, tile++, file->diving_upgrade, 2, Z64_ITEM_SILVER_SCALE);
396+
extended_savecontext_static_t* extended = &(((extended_sram_file_t*)file)->additional_save_data.extended);
397+
populate_upgrade_scale(file, tile++, extended->extended_scale, Z64_ITEM_SILVER_SCALE);
394398
}
395399

396400

@@ -519,6 +523,11 @@ static void draw_variable(z64_disp_buf_t* db, const variable_tile_info_t* info,
519523
color = WHITE;
520524
color.a = color_product(color.a, alpha);
521525
}
526+
if (bronze_scale_marker) {
527+
sprite_load(db, &item_digit_sprite, 0, 1);
528+
sprite_draw(db, &item_digit_sprite, 0, get_left(variable_tile_positions[NUM_VARIABLE - 1].pos) + 4,
529+
get_top(variable_tile_positions[NUM_VARIABLE - 1].pos) + 3, 6, 6);
530+
}
522531
}
523532

524533

@@ -934,3 +943,22 @@ static void populate_upgrade_equip(const z64_file_t* file, variable_tile_t* tile
934943
tile->tile_index = base_tile + (value - 1);
935944
}
936945
}
946+
947+
static void populate_upgrade_scale(const z64_file_t* file, variable_tile_t* tile, uint8_t value, uint8_t base_tile) {
948+
tile->tile_index = base_tile;
949+
bronze_scale_marker = 0;
950+
if (value == 0) {
951+
bronze_scale_marker = 1;
952+
tile->enabled = 0;
953+
}
954+
if (value == 1) {
955+
tile->enabled = 0;
956+
}
957+
if (value == 2) {
958+
tile->enabled = 1;
959+
}
960+
if (value == 3) {
961+
tile->enabled = 1;
962+
tile->tile_index++;
963+
}
964+
}

ASM/c/item_effects.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,14 +287,14 @@ void unlock_ocarina_note(z64_file_t* save, int16_t arg1, int16_t arg2) {
287287
void give_progressive_scale(z64_file_t* save, int16_t arg1, int16_t arg2) {
288288
switch(arg1) {
289289
case 0: // Bronze scale
290-
extended_savectx.extended_scale[0] = 1;
290+
extended_savectx.extended_scale = 1;
291291
break;
292292
case 1:
293-
extended_savectx.extended_scale[0] = 2;
293+
extended_savectx.extended_scale = 2;
294294
save->diving_upgrade = 1;
295295
break;
296296
case 2:
297-
extended_savectx.extended_scale[0] = 3;
297+
extended_savectx.extended_scale = 3;
298298
save->diving_upgrade = 2;
299299
break;
300300
}

ASM/c/item_upgrades.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,10 @@ uint16_t wallet_upgrade(z64_file_t* save, override_t override) {
8585
}
8686

8787
uint16_t scale_upgrade(z64_file_t* save, override_t override) {
88-
switch ((override.value.base.player == PLAYER_ID || !MW_PROGRESSIVE_ITEMS_ENABLE) ? save->diving_upgrade : MW_PROGRESSIVE_ITEMS_STATE[override.value.base.player].scale) {
89-
case 0: return GI_SCALE_SILVER; // Silver Scale
90-
default: return GI_SCALE_GOLDEN; // Gold Scale
88+
switch ((override.value.base.player == PLAYER_ID || !MW_PROGRESSIVE_ITEMS_ENABLE) ? extended_savectx.extended_scale : MW_PROGRESSIVE_ITEMS_STATE[override.value.base.player].scale) {
89+
case 0: return 0x119; // Bronze Scale
90+
case 1: return 0x37; // Silver Scale
91+
default: return 0x38; // Gold Scale
9192
}
9293
}
9394

ASM/c/save.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ typedef struct {
99
bool collected_dungeon_rewards[8];
1010
override_t incoming_queue[3];
1111
uint8_t password[6];
12-
uint8_t extended_scale[0x2];
12+
uint8_t extended_scale;
13+
uint8_t pad;
1314
} extended_savecontext_static_t __attribute__ ((aligned (8)));
1415

1516

ASM/c/swim.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void set_new_respawn() {
5252
void manage_swim() {
5353

5454
// We found the first scale.
55-
if (extended_savectx.extended_scale[0] > 0) {
55+
if (extended_savectx.extended_scale > 0) {
5656
return;
5757
}
5858

@@ -62,11 +62,14 @@ void manage_swim() {
6262
}
6363

6464
// Always allow to swim out of water temple to avoid softlocks.
65-
if (z64_game.scene_index == 5 && z64_link.common.pos_world.z > 700.0) {
65+
if (z64_game.scene_index == 5 &&
66+
z64_game.room_index == 0 &&
67+
z64_link.common.pos_world.z > 700.0) {
6668
return;
6769
}
6870

6971
if (z64_link.state_flags_1 & 0x08000000) { // Swimming state flag.
72+
PlaySFX(0x28CD); // NA_SE_EV_WATER_CONVECTION
7073
set_new_respawn();
7174
}
7275
}

0 commit comments

Comments
 (0)