Skip to content

Commit a686d44

Browse files
committed
Logic
Win/Clear could be just Clear & kept simple if bosses were in CanKillEnemy
1 parent 1874ed8 commit a686d44

32 files changed

Lines changed: 311 additions & 174 deletions

soh/soh/Enhancements/randomizer/3drando/item_pool.cpp

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,23 +1083,11 @@ void GenerateItemPool() {
10831083
}
10841084

10851085
if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS)) {
1086-
AddItemToMainPool(RG_GOHMA_SOUL);
1087-
AddItemToMainPool(RG_KING_DODONGO_SOUL);
1088-
AddItemToMainPool(RG_BARINADE_SOUL);
1089-
AddItemToMainPool(RG_PHANTOM_GANON_SOUL);
1090-
AddItemToMainPool(RG_VOLVAGIA_SOUL);
1091-
AddItemToMainPool(RG_MORPHA_SOUL);
1092-
AddItemToMainPool(RG_BONGO_BONGO_SOUL);
1093-
AddItemToMainPool(RG_TWINROVA_SOUL);
1094-
1095-
ctx->possibleIceTrapModels.push_back(RG_GOHMA_SOUL);
1096-
ctx->possibleIceTrapModels.push_back(RG_KING_DODONGO_SOUL);
1097-
ctx->possibleIceTrapModels.push_back(RG_BARINADE_SOUL);
1098-
ctx->possibleIceTrapModels.push_back(RG_PHANTOM_GANON_SOUL);
1099-
ctx->possibleIceTrapModels.push_back(RG_VOLVAGIA_SOUL);
1100-
ctx->possibleIceTrapModels.push_back(RG_MORPHA_SOUL);
1101-
ctx->possibleIceTrapModels.push_back(RG_BONGO_BONGO_SOUL);
1102-
ctx->possibleIceTrapModels.push_back(RG_TWINROVA_SOUL);
1086+
for (int rg = RG_GOHMA_SOUL; rg <= RG_TWINROVA_SOUL; rg++) {
1087+
AddItemToMainPool((RandomizerGet)rg);
1088+
ctx->possibleIceTrapModels.push_back((RandomizerGet)rg);
1089+
}
1090+
11031091
if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON)) {
11041092
AddItemToMainPool(RG_GANON_SOUL);
11051093
ctx->possibleIceTrapModels.push_back(RG_GANON_SOUL);

soh/soh/Enhancements/randomizer/item_list.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ void Rando::StaticData::InitItemTable() {
325325
// NPC souls
326326
itemTable[RG_ANJU_SOUL] = Item(RG_ANJU_SOUL, Text{ "Anju's Soul", "Âme de Anju", "Anjus Seele" }, ITEMTYPE_ITEM, 0xE5, true, LOGIC_CAN_SUMMON_MORPHA, RHT_MORPHA_SOUL, RG_ANJU_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
327327
itemTable[RG_ANJU_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
328-
itemTable[RG_TALON_SOUL] = Item(RG_ANJU_SOUL, Text{ "Talon's Soul" }, ITEMTYPE_ITEM, 0xE5, true, LOGIC_CAN_SUMMON_MORPHA, RHT_MORPHA_SOUL, RG_ANJU_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
328+
itemTable[RG_TALON_SOUL] = Item(RG_TALON_SOUL, Text{ "Talon's Soul" }, ITEMTYPE_ITEM, 0xE5, true, LOGIC_CAN_SUMMON_MORPHA, RHT_MORPHA_SOUL, RG_TALON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
329329
itemTable[RG_TALON_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
330330
itemTable[RG_GROG_SOUL] = Item(RG_GROG_SOUL, Text{ "Grog's Soul" }, ITEMTYPE_ITEM, 0xE5, true, LOGIC_CAN_SUMMON_MORPHA, RHT_MORPHA_SOUL, RG_GROG_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
331331
itemTable[RG_GROG_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);

soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ void RegionTable_Init_DekuTree() {
350350

351351
areaTable[RR_DEKU_TREE_BOSS_ROOM] = Region("Deku Tree Boss Room", "Deku Tree", {}, NO_DAY_NIGHT_CYCLE, {
352352
// Events
353-
EventAccess(&logic->DekuTreeClear, []{return logic->DekuTreeClear || (logic->HasBossSoul(RG_GOHMA_SOUL) && (logic->CanJumpslashExceptHammer() && (logic->CanUse(RG_NUTS) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->HookshotOrBoomerang())));}),
353+
EventAccess(&logic->DekuTreeClear, []{return logic->DekuTreeClear || (logic->HasSoul(RG_GOHMA_SOUL) && (logic->CanJumpslashExceptHammer() && (logic->CanUse(RG_NUTS) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->HookshotOrBoomerang())));}),
354354
}, {
355355
// Locations
356356
LOCATION(RC_QUEEN_GOHMA, logic->DekuTreeClear),

soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ void RegionTable_Init_DodongosCavern() {
528528

529529
areaTable[RR_DODONGOS_CAVERN_BOSS_ROOM] = Region("Dodongos Cavern Boss Room", "Dodongos Cavern", {}, NO_DAY_NIGHT_CYCLE, {
530530
// Events
531-
EventAccess(&logic->DodongosCavernClear, []{return logic->DodongosCavernClear || (logic->HasBossSoul(RG_KING_DODONGO_SOUL) && (Here(RR_DODONGOS_CAVERN_BOSS_ROOM, []{return logic->HasExplosives() || (logic->CanUse(RG_MEGATON_HAMMER) && ctx->GetTrickOption(RT_DC_HAMMER_FLOOR));}) && (logic->CanUse(RG_BOMB_BAG) || logic->HasItem(RG_GORONS_BRACELET)) && logic->CanJumpslashExceptHammer())); /*todo add chu kill to tricks*/}),
531+
EventAccess(&logic->DodongosCavernClear, []{return logic->DodongosCavernClear || (logic->HasSoul(RG_KING_DODONGO_SOUL) && (Here(RR_DODONGOS_CAVERN_BOSS_ROOM, []{return logic->HasExplosives() || (logic->CanUse(RG_MEGATON_HAMMER) && ctx->GetTrickOption(RT_DC_HAMMER_FLOOR));}) && (logic->CanUse(RG_BOMB_BAG) || logic->HasItem(RG_GORONS_BRACELET)) && logic->CanJumpslashExceptHammer())); /*todo add chu kill to tricks*/}),
532532
}, {
533533
// Locations
534534
LOCATION(RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST, true),

soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -705,14 +705,15 @@ void RegionTable_Init_FireTemple() {
705705

706706
areaTable[RR_FIRE_TEMPLE_BOSS_ROOM] = Region("Fire Temple Boss Room", "Fire Temple", {}, NO_DAY_NIGHT_CYCLE, {
707707
// Events
708-
EventAccess(&logic->FireTempleClear, []{return logic->FireTempleClear || (logic->HasBossSoul(RG_VOLVAGIA_SOUL) && (logic->FireTimer() >= 64 && logic->CanUse(RG_MEGATON_HAMMER)));}),
708+
EventAccess(&logic->FireTempleWin, []{return logic->FireTempleWin || (logic->HasSoul(RG_VOLVAGIA_SOUL) && (logic->FireTimer() >= 64 && logic->CanUse(RG_MEGATON_HAMMER)));}),
709+
EventAccess(&logic->FireTempleClear, []{return logic->FireTempleWin && logic->HasSoul(RG_DARUNIA_SOUL);}),
709710
}, {
710711
// Locations
711-
LOCATION(RC_FIRE_TEMPLE_VOLVAGIA_HEART, logic->FireTempleClear),
712+
LOCATION(RC_FIRE_TEMPLE_VOLVAGIA_HEART, logic->FireTempleWin),
712713
LOCATION(RC_VOLVAGIA, logic->FireTempleClear),
713714
}, {
714715
// Exits
715716
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
716-
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, false),
717+
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleWin;}, false),
717718
});
718719
}

soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -600,14 +600,15 @@ void RegionTable_Init_ForestTemple() {
600600

601601
areaTable[RR_FOREST_TEMPLE_BOSS_ROOM] = Region("Forest Temple Boss Room", "Forest Temple", {}, NO_DAY_NIGHT_CYCLE, {
602602
// Events
603-
EventAccess(&logic->ForestTempleClear, []{return logic->ForestTempleClear || (logic->HasBossSoul(RG_PHANTOM_GANON_SOUL) && ((logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))));}),
603+
EventAccess(&logic->ForestTempleWin, []{return logic->ForestTempleWin || (logic->HasSoul(RG_PHANTOM_GANON_SOUL) && ((logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))));}),
604+
EventAccess(&logic->ForestTempleClear, []{return logic->ForestTempleWin && logic->HasSoul(RG_SARIA_SOUL);}),
604605
}, {
605606
// Locations
606-
LOCATION(RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, logic->ForestTempleClear),
607+
LOCATION(RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, logic->ForestTempleWin),
607608
LOCATION(RC_PHANTOM_GANON, logic->ForestTempleClear),
608609
}, {
609610
// Exits
610611
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
611-
Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, false),
612+
Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleWin;}, false),
612613
});
613614
}

soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ void RegionTable_Init_GanonsCastle() {
480480

481481
areaTable[RR_GANONS_TOWER_GANONDORF_LAIR] = Region("Ganondorf's Lair", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
482482
//Locations
483-
LOCATION(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)),
483+
LOCATION(RC_GANONDORF_HINT, logic->HasSoul(RG_GANON_SOUL)),
484484
}, {
485485
//Exits
486486
Entrance(RR_GANONS_CASTLE_ESCAPE, []{return logic->CanKillEnemy(RE_GANONDORF);}),

soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ void RegionTable_Init_JabuJabusBelly() {
2424
//Combines Lift room middle and lower, 1F holes room, the forked corridor, and it's side rooms
2525
areaTable[RR_JABU_JABUS_BELLY_MAIN] = Region("Jabu Jabus Belly Main", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
2626
//Events
27-
EventAccess(&logic->JabuRutoInB1, []{return true;}),
27+
EventAccess(&logic->JabuRutoInB1, []{return logic->HasSoul(RG_RUTO_SOUL);}),
2828
EventAccess(&logic->JabuWestTentacle, []{return logic->JabuRutoIn1F && logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
2929
}, {
3030
//Locations
@@ -46,7 +46,7 @@ void RegionTable_Init_JabuJabusBelly() {
4646
//contains B1 of hole room (aside from the ledge leading to big octo), 2 octorock room and north water switch room
4747
areaTable[RR_JABU_JABUS_BELLY_B1_NORTH] = Region("Jabu Jabus Belly B1 North", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
4848
//Events
49-
EventAccess(&logic->JabuRutoIn1F, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
49+
EventAccess(&logic->JabuRutoIn1F, []{return logic->HasSoul(RG_RUTO_SOUL) && (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE));}),
5050
EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK));}),
5151
}, {
5252
//Locations
@@ -341,7 +341,7 @@ void RegionTable_Init_JabuJabusBelly() {
341341

342342
areaTable[RR_JABU_JABUS_BELLY_BOSS_ROOM] = Region("Jabu Jabus Belly Boss Room", "Jabu Jabus Belly", {}, NO_DAY_NIGHT_CYCLE, {
343343
// Events //todo: add pot kill trick
344-
EventAccess(&logic->JabuJabusBellyClear, []{return logic->JabuJabusBellyClear || (logic->HasBossSoul(RG_BARINADE_SOUL) && (logic->CanUse(RG_BOOMERANG) && logic->CanJumpslashExceptHammer()));}),
344+
EventAccess(&logic->JabuJabusBellyClear, []{return logic->JabuJabusBellyClear || (logic->HasSoul(RG_BARINADE_SOUL) && (logic->CanUse(RG_BOOMERANG) && logic->CanJumpslashExceptHammer()));}),
345345
}, {
346346
// Locations
347347
LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_1, logic->CanBreakPots()),

soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -399,18 +399,19 @@ void RegionTable_Init_ShadowTemple() {
399399

400400
areaTable[RR_SHADOW_TEMPLE_BOSS_ROOM] = Region("Shadow Temple Boss Room", "Shadow Temple", {}, NO_DAY_NIGHT_CYCLE, {
401401
// Events
402-
EventAccess(&logic->ShadowTempleClear, []{
403-
return logic->ShadowTempleClear || (logic->HasBossSoul(RG_BONGO_BONGO_SOUL) && ((logic->CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_BONGO)) &&
402+
EventAccess(&logic->ShadowTempleWin, []{
403+
return logic->ShadowTempleWin || (logic->HasSoul(RG_BONGO_BONGO_SOUL) && ((logic->CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_BONGO)) &&
404404
(logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) &&
405405
(logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || ctx->GetTrickOption(RT_SHADOW_BONGO))));
406406
}),
407+
EventAccess(&logic->ShadowTempleClear, []{ return logic->ShadowTempleWin && logic->HasSoul(RG_IMPA_SOUL); }),
407408
}, {
408409
// Locations
409-
LOCATION(RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, logic->ShadowTempleClear),
410+
LOCATION(RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, logic->ShadowTempleWin),
410411
LOCATION(RC_BONGO_BONGO, logic->ShadowTempleClear),
411412
}, {
412413
// Exits
413414
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
414-
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleClear;}, false),
415+
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleWin;}, false),
415416
});
416417
}

soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -544,14 +544,15 @@ void RegionTable_Init_SpiritTemple() {
544544

545545
areaTable[RR_SPIRIT_TEMPLE_BOSS_ROOM] = Region("Spirit Temple Boss Room", "Spirit Temple", {}, NO_DAY_NIGHT_CYCLE, {
546546
// Events
547-
EventAccess(&logic->SpiritTempleClear, []{return logic->SpiritTempleClear || (logic->HasBossSoul(RG_TWINROVA_SOUL) && (logic->CanUse(RG_MIRROR_SHIELD) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))));}),
547+
EventAccess(&logic->SpiritTempleWin, []{return logic->SpiritTempleWin || (logic->HasSoul(RG_TWINROVA_SOUL) && (logic->CanUse(RG_MIRROR_SHIELD) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))));}),
548+
EventAccess(&logic->SpiritTempleClear, []{return logic->SpiritTempleWin && logic->HasSoul(RG_NABOORU_SOUL);}),
548549
}, {
549550
// Locations
550-
LOCATION(RC_SPIRIT_TEMPLE_TWINROVA_HEART, logic->SpiritTempleClear),
551+
LOCATION(RC_SPIRIT_TEMPLE_TWINROVA_HEART, logic->SpiritTempleWin),
551552
LOCATION(RC_TWINROVA, logic->SpiritTempleClear),
552553
}, {
553554
// Exits
554555
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
555-
Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, false),
556+
Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleWin;}, false),
556557
});
557558
}

0 commit comments

Comments
 (0)