@ -1600,6 +1600,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1600,6 +1600,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
func_8006D0AC ( globalCtx ) ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item > = ITEM_SONG_MINUET ) & & ( item < = ITEM_SONG_STORMS ) ) {
gSaveContext . inventory . questItems | = gBitFlags [ item - ITEM_SONG_MINUET + QUEST_SONG_MINUET ] ;
@ -1611,6 +1612,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1611,6 +1612,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
gBitFlags [ item - ITEM_SONG_MINUET + QUEST_SONG_MINUET ] , gBitFlags [ item - ITEM_SONG_MINUET ] ) ;
osSyncPrintf ( VT_RST ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item > = ITEM_KOKIRI_EMERALD ) & & ( item < = ITEM_ZORA_SAPPHIRE ) ) {
gSaveContext . inventory . questItems | = gBitFlags [ item - ITEM_KOKIRI_EMERALD + QUEST_KOKIRI_EMERALD ] ;
@ -1619,6 +1621,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1619,6 +1621,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
osSyncPrintf ( " 精霊石 = %x \n " , gSaveContext . inventory . questItems ) ; // "Spiritual Stones = %x"
osSyncPrintf ( VT_RST ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item = = ITEM_STONE_OF_AGONY ) | | ( item = = ITEM_GERUDO_CARD ) ) {
gSaveContext . inventory . questItems | = gBitFlags [ item - ITEM_STONE_OF_AGONY + QUEST_STONE_OF_AGONY ] ;
@ -1627,6 +1630,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1627,6 +1630,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
osSyncPrintf ( " アイテム = %x \n " , gSaveContext . inventory . questItems ) ; // "Items = %x"
osSyncPrintf ( VT_RST ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_SKULL_TOKEN ) {
gSaveContext . inventory . questItems | = gBitFlags [ item - ITEM_SKULL_TOKEN + QUEST_SKULL_TOKEN ] ;
@ -1637,6 +1641,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1637,6 +1641,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
osSyncPrintf ( " Nコイン = %x(%d) \n " , gSaveContext . inventory . questItems , gSaveContext . inventory . gsTokens ) ;
osSyncPrintf ( VT_RST ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item > = ITEM_SWORD_KOKIRI ) & & ( item < = ITEM_SWORD_BGS ) ) {
gSaveContext . inventory . equipment | = gBitFlags [ item - ITEM_SWORD_KOKIRI ] < < gEquipShifts [ EQUIP_SWORD ] ;
@ -1660,15 +1665,19 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1660,15 +1665,19 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
Interface_LoadItemIcon1 ( globalCtx , 0 ) ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item > = ITEM_SHIELD_DEKU ) & & ( item < = ITEM_SHIELD_MIRROR ) ) {
gSaveContext . inventory . equipment | = ( gBitFlags [ item - ITEM_SHIELD_DEKU ] < < gEquipShifts [ EQUIP_SHIELD ] ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item > = ITEM_TUNIC_KOKIRI ) & & ( item < = ITEM_TUNIC_ZORA ) ) {
gSaveContext . inventory . equipment | = ( gBitFlags [ item - ITEM_TUNIC_KOKIRI ] < < gEquipShifts [ EQUIP_TUNIC ] ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item > = ITEM_BOOTS_KOKIRI ) & & ( item < = ITEM_BOOTS_HOVER ) ) {
gSaveContext . inventory . equipment | = ( gBitFlags [ item - ITEM_BOOTS_KOKIRI ] < < gEquipShifts [ EQUIP_BOOTS ] ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item = = ITEM_KEY_BOSS ) | | ( item = = ITEM_COMPASS ) | | ( item = = ITEM_DUNGEON_MAP ) ) {
// Boss Key, Compass, and Dungeon Map exceptions for rando.
@ -1683,6 +1692,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1683,6 +1692,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
} else {
gSaveContext . inventory . dungeonItems [ gSaveContext . mapIndex ] | = gBitFlags [ item - ITEM_KEY_BOSS ] ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_KEY_SMALL ) {
// Small key exceptions for rando.
@ -1690,9 +1700,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1690,9 +1700,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
if ( globalCtx - > sceneNum = = 10 ) { // ganon's tower -> ganon's castle
if ( gSaveContext . inventory . dungeonKeys [ 13 ] < 0 ) {
gSaveContext . inventory . dungeonKeys [ 13 ] = 1 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else {
gSaveContext . inventory . dungeonKeys [ 13 ] + + ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
}
@ -1700,9 +1712,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1700,9 +1712,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
if ( globalCtx - > sceneNum = = 92 ) { // Desert Colossus -> Spirit Temple.
if ( gSaveContext . inventory . dungeonKeys [ 6 ] < 0 ) {
gSaveContext . inventory . dungeonKeys [ 6 ] = 1 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else {
gSaveContext . inventory . dungeonKeys [ 6 ] + + ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
}
@ -1710,9 +1724,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1710,9 +1724,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
if ( gSaveContext . inventory . dungeonKeys [ gSaveContext . mapIndex ] < 0 ) {
gSaveContext . inventory . dungeonKeys [ gSaveContext . mapIndex ] = 1 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else {
gSaveContext . inventory . dungeonKeys [ gSaveContext . mapIndex ] + + ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
} else if ( ( item = = ITEM_QUIVER_30 ) | | ( item = = ITEM_BOW ) ) {
@ -1720,6 +1736,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1720,6 +1736,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
Inventory_ChangeUpgrade ( UPG_QUIVER , 1 ) ;
INV_CONTENT ( ITEM_BOW ) = ITEM_BOW ;
AMMO ( ITEM_BOW ) = CAPACITY ( UPG_QUIVER , 1 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else {
AMMO ( ITEM_BOW ) + + ;
@ -1730,24 +1747,29 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1730,24 +1747,29 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
} else if ( item = = ITEM_QUIVER_40 ) {
Inventory_ChangeUpgrade ( UPG_QUIVER , 2 ) ;
AMMO ( ITEM_BOW ) = CAPACITY ( UPG_QUIVER , 2 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_QUIVER_50 ) {
Inventory_ChangeUpgrade ( UPG_QUIVER , 3 ) ;
AMMO ( ITEM_BOW ) = CAPACITY ( UPG_QUIVER , 3 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_BULLET_BAG_40 ) {
Inventory_ChangeUpgrade ( UPG_BULLET_BAG , 2 ) ;
AMMO ( ITEM_SLINGSHOT ) = CAPACITY ( UPG_BULLET_BAG , 2 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_BULLET_BAG_50 ) {
Inventory_ChangeUpgrade ( UPG_BULLET_BAG , 3 ) ;
AMMO ( ITEM_SLINGSHOT ) = CAPACITY ( UPG_BULLET_BAG , 3 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_BOMB_BAG_20 ) {
if ( CUR_UPG_VALUE ( UPG_BOMB_BAG ) = = 0 ) {
Inventory_ChangeUpgrade ( UPG_BOMB_BAG , 1 ) ;
INV_CONTENT ( ITEM_BOMB ) = ITEM_BOMB ;
AMMO ( ITEM_BOMB ) = CAPACITY ( UPG_BOMB_BAG , 1 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else {
AMMO ( ITEM_BOMB ) + + ;
@ -1758,37 +1780,46 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1758,37 +1780,46 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
} else if ( item = = ITEM_BOMB_BAG_30 ) {
Inventory_ChangeUpgrade ( UPG_BOMB_BAG , 2 ) ;
AMMO ( ITEM_BOMB ) = CAPACITY ( UPG_BOMB_BAG , 2 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_BOMB_BAG_40 ) {
Inventory_ChangeUpgrade ( UPG_BOMB_BAG , 3 ) ;
AMMO ( ITEM_BOMB ) = CAPACITY ( UPG_BOMB_BAG , 3 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_BRACELET ) {
Inventory_ChangeUpgrade ( UPG_STRENGTH , 1 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_GAUNTLETS_SILVER ) {
Inventory_ChangeUpgrade ( UPG_STRENGTH , 2 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_GAUNTLETS_GOLD ) {
Inventory_ChangeUpgrade ( UPG_STRENGTH , 3 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_SCALE_SILVER ) {
Inventory_ChangeUpgrade ( UPG_SCALE , 1 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_SCALE_GOLDEN ) {
Inventory_ChangeUpgrade ( UPG_SCALE , 2 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_WALLET_ADULT ) {
Inventory_ChangeUpgrade ( UPG_WALLET , 1 ) ;
if ( gSaveContext . n64ddFlag & & Randomizer_GetSettingValue ( RSK_FULL_WALLETS ) ) {
Rupees_ChangeBy ( 200 ) ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_WALLET_GIANT ) {
Inventory_ChangeUpgrade ( UPG_WALLET , 2 ) ;
if ( gSaveContext . n64ddFlag & & Randomizer_GetSettingValue ( RSK_FULL_WALLETS ) ) {
Rupees_ChangeBy ( 500 ) ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_STICK_UPGRADE_20 ) {
if ( gSaveContext . inventory . items [ slot ] = = ITEM_NONE ) {
@ -1796,6 +1827,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1796,6 +1827,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
Inventory_ChangeUpgrade ( UPG_STICKS , 2 ) ;
AMMO ( ITEM_STICK ) = CAPACITY ( UPG_STICKS , 2 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_STICK_UPGRADE_30 ) {
if ( gSaveContext . inventory . items [ slot ] = = ITEM_NONE ) {
@ -1803,6 +1835,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1803,6 +1835,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
Inventory_ChangeUpgrade ( UPG_STICKS , 3 ) ;
AMMO ( ITEM_STICK ) = CAPACITY ( UPG_STICKS , 3 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_NUT_UPGRADE_30 ) {
if ( gSaveContext . inventory . items [ slot ] = = ITEM_NONE ) {
@ -1810,6 +1843,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1810,6 +1843,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
Inventory_ChangeUpgrade ( UPG_NUTS , 2 ) ;
AMMO ( ITEM_NUT ) = CAPACITY ( UPG_NUTS , 2 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_NUT_UPGRADE_40 ) {
if ( gSaveContext . inventory . items [ slot ] = = ITEM_NONE ) {
@ -1817,6 +1851,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1817,6 +1851,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
Inventory_ChangeUpgrade ( UPG_NUTS , 3 ) ;
AMMO ( ITEM_NUT ) = CAPACITY ( UPG_NUTS , 3 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_LONGSHOT ) {
INV_CONTENT ( item ) = item ;
@ -1844,6 +1879,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1844,6 +1879,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
}
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_STICK ) {
if ( gSaveContext . inventory . items [ slot ] = = ITEM_NONE ) {
@ -1896,34 +1932,40 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1896,34 +1932,40 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
if ( ( AMMO ( ITEM_BOMB ) + = 1 ) > CUR_CAPACITY ( UPG_BOMB_BAG ) ) {
AMMO ( ITEM_BOMB ) = CUR_CAPACITY ( UPG_BOMB_BAG ) ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item > = ITEM_BOMBS_5 ) & & ( item < = ITEM_BOMBS_30 ) ) {
if ( ( AMMO ( ITEM_BOMB ) + = sAmmoRefillCounts [ item - ITEM_BOMBS_5 ] ) > CUR_CAPACITY ( UPG_BOMB_BAG ) ) {
AMMO ( ITEM_BOMB ) = CUR_CAPACITY ( UPG_BOMB_BAG ) ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_BOMBCHU ) {
if ( gSaveContext . inventory . items [ slot ] = = ITEM_NONE ) {
INV_CONTENT ( ITEM_BOMBCHU ) = ITEM_BOMBCHU ;
AMMO ( ITEM_BOMBCHU ) = 10 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else {
AMMO ( ITEM_BOMBCHU ) + = 10 ;
if ( AMMO ( ITEM_BOMBCHU ) > 50 ) {
AMMO ( ITEM_BOMBCHU ) = 50 ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
} else if ( ( item = = ITEM_BOMBCHUS_5 ) | | ( item = = ITEM_BOMBCHUS_20 ) ) {
if ( gSaveContext . inventory . items [ slot ] = = ITEM_NONE ) {
INV_CONTENT ( ITEM_BOMBCHU ) = ITEM_BOMBCHU ;
AMMO ( ITEM_BOMBCHU ) + = sAmmoRefillCounts [ item - ITEM_BOMBCHUS_5 + 8 ] ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else {
AMMO ( ITEM_BOMBCHU ) + = sAmmoRefillCounts [ item - ITEM_BOMBCHUS_5 + 8 ] ;
if ( AMMO ( ITEM_BOMBCHU ) > 50 ) {
AMMO ( ITEM_BOMBCHU ) = 50 ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
} else if ( ( item > = ITEM_ARROWS_SMALL ) & & ( item < = ITEM_ARROWS_LARGE ) ) {
@ -1935,11 +1977,13 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1935,11 +1977,13 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
osSyncPrintf ( " %d本 Item_MaxGet=%d \n " , AMMO ( ITEM_BOW ) , CUR_CAPACITY ( UPG_QUIVER ) ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_BOW ;
} else if ( item = = ITEM_SLINGSHOT ) {
Inventory_ChangeUpgrade ( UPG_BULLET_BAG , 1 ) ;
INV_CONTENT ( ITEM_SLINGSHOT ) = ITEM_SLINGSHOT ;
AMMO ( ITEM_SLINGSHOT ) = 30 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_SEEDS ) {
AMMO ( ITEM_SLINGSHOT ) + = 5 ;
@ -1950,9 +1994,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1950,9 +1994,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
if ( ! ( gSaveContext . itemGetInf [ 1 ] & 8 ) ) {
gSaveContext . itemGetInf [ 1 ] | = 8 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_SEEDS ;
} else if ( item = = ITEM_SEEDS_30 ) {
AMMO ( ITEM_SLINGSHOT ) + = 30 ;
@ -1963,12 +2009,15 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1963,12 +2009,15 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
if ( ! ( gSaveContext . itemGetInf [ 1 ] & 8 ) ) {
gSaveContext . itemGetInf [ 1 ] | = 8 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_SEEDS ;
} else if ( item = = ITEM_OCARINA_FAIRY ) {
INV_CONTENT ( ITEM_OCARINA_FAIRY ) = ITEM_OCARINA_FAIRY ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_OCARINA_TIME ) {
INV_CONTENT ( ITEM_OCARINA_TIME ) = ITEM_OCARINA_TIME ;
@ -1997,6 +2046,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -1997,6 +2046,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
}
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_BEAN ) {
if ( gSaveContext . inventory . items [ slot ] = = ITEM_NONE ) {
@ -2007,17 +2057,21 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -2007,17 +2057,21 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
AMMO ( ITEM_BEAN ) + + ;
BEANS_BOUGHT + + ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( ( item = = ITEM_HEART_PIECE_2 ) | | ( item = = ITEM_HEART_PIECE ) ) {
gSaveContext . inventory . questItems + = 1 < < ( QUEST_HEART_PIECE + 4 ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_HEART_CONTAINER ) {
gSaveContext . healthCapacity + = 0x10 ;
gSaveContext . health + = 0x10 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_HEART ) {
osSyncPrintf ( " 回復ハート回復ハート回復ハート \n " ) ; // "Recovery Heart"
Health_ChangeBy ( globalCtx , 0x10 ) ;
PerformAutosave ( globalCtx , item ) ;
return item ;
} else if ( item = = ITEM_MAGIC_SMALL ) {
if ( gSaveContext . unk_13F0 ! = 10 ) {
@ -2028,9 +2082,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -2028,9 +2082,11 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
if ( ! ( gSaveContext . infTable [ 25 ] & 0x100 ) ) {
gSaveContext . infTable [ 25 ] | = 0x100 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
PerformAutosave ( globalCtx , item ) ;
return item ;
} else if ( item = = ITEM_MAGIC_LARGE ) {
if ( gSaveContext . unk_13F0 ! = 10 ) {
@ -2041,12 +2097,15 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -2041,12 +2097,15 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
if ( ! ( gSaveContext . infTable [ 25 ] & 0x100 ) ) {
gSaveContext . infTable [ 25 ] | = 0x100 ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
PerformAutosave ( globalCtx , item ) ;
return item ;
} else if ( ( item > = ITEM_RUPEE_GREEN ) & & ( item < = ITEM_INVALID_8 ) ) {
Rupees_ChangeBy ( sAmmoRefillCounts [ item - ITEM_RUPEE_GREEN + 10 ] ) ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
} else if ( item = = ITEM_BOTTLE ) {
temp = SLOT ( item ) ;
@ -2054,6 +2113,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -2054,6 +2113,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
for ( i = 0 ; i < 4 ; i + + ) {
if ( gSaveContext . inventory . items [ temp + i ] = = ITEM_NONE ) {
gSaveContext . inventory . items [ temp + i ] = item ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
}
@ -2083,6 +2143,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -2083,6 +2143,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
}
gSaveContext . inventory . items [ temp + i ] = item ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
}
@ -2090,6 +2151,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -2090,6 +2151,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
for ( i = 0 ; i < 4 ; i + + ) {
if ( gSaveContext . inventory . items [ temp + i ] = = ITEM_NONE ) {
gSaveContext . inventory . items [ temp + i ] = item ;
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
}
@ -2111,11 +2173,13 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -2111,11 +2173,13 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
} else {
gSaveContext . equips . buttonItems [ i ] = ITEM_NONE ;
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
}
}
PerformAutosave ( globalCtx , item ) ;
return ITEM_NONE ;
}
@ -2123,52 +2187,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
@@ -2123,52 +2187,7 @@ u8 Item_Give(GlobalContext* globalCtx, u8 item) {
osSyncPrintf ( " Item_Register(%d)=%d %d \n " , slot , item , temp ) ;
INV_CONTENT ( item ) = item ;
// Autosave after getting items by default (cvars are not shown in the UI)
if ( CVar_GetS32 ( " gAutosave " , 0 ) ) {
if ( CVar_GetS32 ( " gAutosaveAllItems " , 1 ) ) {
Gameplay_PerformSave ( globalCtx ) ;
}
else if ( CVar_GetS32 ( " gAutosaveMajorItems " , 1 ) ) {
switch ( item ) {
case ITEM_STICK :
case ITEM_NUT :
case ITEM_BOMB :
case ITEM_BOW :
case ITEM_SEEDS :
case ITEM_FISHING_POLE :
case ITEM_MAGIC_SMALL :
case ITEM_MAGIC_LARGE :
case ITEM_INVALID_4 :
case ITEM_INVALID_5 :
case ITEM_INVALID_6 :
case ITEM_INVALID_7 :
case ITEM_HEART :
case ITEM_RUPEE_GREEN :
case ITEM_RUPEE_BLUE :
case ITEM_RUPEE_RED :
case ITEM_RUPEE_PURPLE :
case ITEM_RUPEE_GOLD :
case ITEM_INVALID_8 :
case ITEM_STICKS_5 :
case ITEM_STICKS_10 :
case ITEM_NUTS_5 :
case ITEM_NUTS_10 :
case ITEM_BOMBS_5 :
case ITEM_BOMBS_10 :
case ITEM_BOMBS_20 :
case ITEM_BOMBS_30 :
case ITEM_ARROWS_SMALL :
case ITEM_ARROWS_MEDIUM :
case ITEM_ARROWS_LARGE :
case ITEM_SEEDS_30 :
break ;
default :
Gameplay_PerformSave ( globalCtx ) ;
break ;
}
}
}
PerformAutosave ( globalCtx , item ) ;
return temp ;
}
@ -2386,6 +2405,52 @@ u8 Item_CheckObtainability(u8 item) {
@@ -2386,6 +2405,52 @@ u8 Item_CheckObtainability(u8 item) {
return gSaveContext . inventory . items [ slot ] ;
}
void PerformAutosave ( GlobalContext * globalCtx , u8 item ) {
if ( CVar_GetS32 ( " gAutosave " , 0 ) ) {
if ( CVar_GetS32 ( " gAutosaveAllItems " , 0 ) ) {
Gameplay_PerformSave ( globalCtx ) ;
} else if ( CVar_GetS32 ( " gAutosaveMajorItems " , 1 ) ) {
switch ( item ) {
case ITEM_STICK :
case ITEM_NUT :
case ITEM_BOMB :
case ITEM_BOW :
case ITEM_SEEDS :
case ITEM_FISHING_POLE :
case ITEM_MAGIC_SMALL :
case ITEM_MAGIC_LARGE :
case ITEM_INVALID_4 :
case ITEM_INVALID_5 :
case ITEM_INVALID_6 :
case ITEM_INVALID_7 :
case ITEM_HEART :
case ITEM_RUPEE_GREEN :
case ITEM_RUPEE_BLUE :
case ITEM_RUPEE_RED :
case ITEM_RUPEE_PURPLE :
case ITEM_RUPEE_GOLD :
case ITEM_INVALID_8 :
case ITEM_STICKS_5 :
case ITEM_STICKS_10 :
case ITEM_NUTS_5 :
case ITEM_NUTS_10 :
case ITEM_BOMBS_5 :
case ITEM_BOMBS_10 :
case ITEM_BOMBS_20 :
case ITEM_BOMBS_30 :
case ITEM_ARROWS_SMALL :
case ITEM_ARROWS_MEDIUM :
case ITEM_ARROWS_LARGE :
case ITEM_SEEDS_30 :
break ;
default :
Gameplay_PerformSave ( globalCtx ) ;
break ;
}
}
}
}
void Inventory_DeleteItem ( u16 item , u16 invSlot ) {
s16 i ;