mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-19 13:00:11 -07:00
Rewrite vanilla jabu logic (#4603)
* rewrite vanilla jabu logic * cleanup * more cleanup
This commit is contained in:
parent
291561667b
commit
b1d1852655
4 changed files with 137 additions and 91 deletions
|
@ -21,138 +21,140 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
if (ctx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla()) {
|
if (ctx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla()) {
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Region("Jabu Jabus Belly Beginning", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Region("Jabu Jabus Belly Beginning", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return logic->CanUseProjectile();}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN, {[]{return logic->CanUseProjectile();}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_LIFT_MIDDLE] = Region("Jabu Jabus Belly Lift Middle", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
//Combines Lift room middle and lower, 1F holes room, the forked corridor, and it's side rooms
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MAIN] = Region("Jabu Jabus Belly Main", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->JabuRutoInB1, {[]{return true;}}),
|
||||||
|
EventAccess(&logic->JabuWestTentacle, {[]{return logic->JabuRutoIn1F && logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}}),
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku()),
|
||||||
|
//We can kill the Stingers with ruto
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, logic->JabuRutoIn1F),
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->JabuWestTentacle),
|
||||||
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_UPPER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_LOWER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_COMPASS_ROOM, {[]{return logic->JabuWestTentacle;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, {[]{return HasAccessTo(RR_JABU_JABUS_BELLY_LIFT_UPPER) || (ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS));}}),
|
Entrance(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, {[]{return logic->JabuWestTentacle;}}),
|
||||||
});
|
Entrance(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, {[]{return logic->JabuEastTentacle;}}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, {[]{return logic->JabuNorthTentacle;}}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, {[]{return logic->LoweredJabuPath || (ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->CanUse(RG_HOVER_BOOTS));}}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MAIN_UPPER] = Region("Jabu Jabus Belly Main Upper", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
//contains B1 of hole room (aside from the ledge leading to big octo), 2 octorock room and north water switch room
|
||||||
//Exits
|
areaTable[RR_JABU_JABUS_BELLY_B1_NORTH] = Region("Jabu Jabus Belly B1 North", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
//Events
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
EventAccess(&logic->JabuRutoIn1F, {[]{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
EventAccess(&logic->FairyPot, {[]{return logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_HOVER_BOOTS);}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_ROOM, {[]{return Here(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return logic->CanUse(RG_BOOMERANG);});}}),
|
}, {
|
||||||
});
|
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MAIN_LOWER] = Region("Jabu Jabus Belly Main Lower", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, logic->HookshotOrBoomerang()),
|
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, logic->HookshotOrBoomerang()),
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, logic->HookshotOrBoomerang()),
|
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, logic->HookshotOrBoomerang()),
|
||||||
}, {
|
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()),
|
||||||
|
//PUT 2 OCTO ROOM POTS HERE
|
||||||
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_UPPER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_SHABOMB_CORRIDOR, {[]{return true;}}),
|
//there's tricks for getting here with bunny-jumps or just side-hops
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LOWER_SIDE_ROOM, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, {[]{return logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_HOVER_BOOTS);}}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, {[]{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_SHABOMB_CORRIDOR] = Region("Jabu Jabus Belly Shabomb Corridor", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE] = Region("Jabu Jabus Belly Water Switch Room Ledge", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->FairyPot, {[]{return true;}}),
|
EventAccess(&logic->FairyPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, true),
|
//this is the logic for climbing back and forth to use the pots to kill the skull...
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HasItem(RG_BRONZE_SCALE) ||
|
||||||
|
(logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) ||
|
||||||
|
//or killing the skull before climbing to grab the token
|
||||||
|
logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW)),
|
||||||
|
//PUT WATER SWITCH POTS HERE
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return logic->HasItem(RG_BRONZE_SCALE);}}),
|
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_LOWER, {[]{return logic->HasItem(RG_BRONZE_SCALE) && logic->CanUseProjectile();}}),
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_LOWER_SIDE_ROOM] = Region("Jabu Jabus Belly Lower Side Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH] = Region("Jabu Jabus Belly Water Switch Room South", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Events
|
|
||||||
EventAccess(&logic->FairyPot, {[]{return logic->FairyPot || (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_HOVER_BOOTS));}}),
|
|
||||||
}, {}, {
|
|
||||||
//Exits
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
|
||||||
});
|
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_LIFT_LOWER] = Region("Jabu Jabus Belly Lift Lower", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku()),
|
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_SHABOMB_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, {[]{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, {[]{return logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_HOVER_BOOTS);}}),
|
||||||
});
|
Entrance(RR_JABU_JABUS_BELLY_MAIN, {[]{return logic->CanUseProjectile();}}),
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_FORKED_CORRIDOR] = Region("Jabu Jabus Belly Forked Corridor", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
|
||||||
//Exits
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_UPPER, {[]{return true;}}),
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BOOMERANG_ROOM, {[]{return true;}}),
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAP_ROOM, {[]{return true;}}),
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_COMPASS_ROOM, {[]{return Here(RR_JABU_JABUS_BELLY_MAP_ROOM, []{return logic->CanUse(RG_BOOMERANG);});}}),
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, {[]{return Here(RR_JABU_JABUS_BELLY_MAP_ROOM, []{return logic->CanUse(RG_BOOMERANG);});}}),
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, {[]{return Here(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return logic->CanUse(RG_BOOMERANG);});}}),
|
|
||||||
});
|
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BOOMERANG_ROOM] = Region("Jabu Jabus Belly Boomerang Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
|
||||||
//Locations
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, true),
|
|
||||||
}, {
|
|
||||||
//Exits
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
|
||||||
});
|
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MAP_ROOM] = Region("Jabu Jabus Belly Map Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
|
||||||
//Locations
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->CanUse(RG_BOOMERANG)),
|
|
||||||
}, {
|
|
||||||
//Exits
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_COMPASS_ROOM] = Region("Jabu Jabus Belly Compass Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_COMPASS_ROOM] = Region("Jabu Jabus Belly Compass Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_COMPASS_CHEST, logic->CanAttack()),
|
//ruto could theoretically clear this room, but it's hard because of the timer and she doesn't appear with you when you respawn after failing, which would force a savewarp
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_COMPASS_CHEST, logic->CanKillEnemy(RE_SHABOM)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN, {[]{return Here(RR_JABU_JABUS_BELLY_COMPASS_ROOM, []{return logic->CanKillEnemy(RE_SHABOM);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BLUE_TENTACLE] = Region("Jabu Jabus Belly Blue Tentacle", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_BLUE_TENTACLE] = Region("Jabu Jabus Belly Blue Tentacle", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
EventAccess(&logic->JabuEastTentacle, {[]{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}}),
|
||||||
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return Here(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return logic->CanUse(RG_BOOMERANG);});}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN, {[]{return logic->JabuEastTentacle;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_GREEN_TENTACLE] = Region("Jabu Jabus Belly Green Tentacle", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_GREEN_TENTACLE] = Region("Jabu Jabus Belly Green Tentacle", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
EventAccess(&logic->JabuNorthTentacle, {[]{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}}),
|
||||||
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return Here(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return logic->CanUse(RG_BOOMERANG);});}}),
|
//implied logic->CanKillEnemy(RE_BARI)
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MAIN, {[]{return logic->JabuNorthTentacle;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BIGOCTO_ROOM] = Region("Jabu Jabus Belly Bigocto Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE] = Region("Jabu Jabus Belly Bigocto Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
//Only adult can get the token without assistance
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH)),
|
||||||
|
//You can get the LOWER skull token from here as aduly with hovers backwalk and a backflip, but it's trickworthy and not relevant unless you can beat tentacles without rang
|
||||||
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, {[]{return Here(RR_JABU_JABUS_BELLY_BIGOCTO_ROOM, []{return (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_NUTS)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_STICKS));});}}),
|
Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, {[]{return logic->JabuRutoIn1F && Here(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Region("Jabu Jabus Belly Above Bigocto", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Region("Jabu Jabus Belly Above Bigocto", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->FairyPot, {[]{return true;}}),
|
EventAccess(&logic->FairyPot, {[]{return true;}}),
|
||||||
EventAccess(&logic->NutPot, {[]{return true;}}),
|
EventAccess(&logic->NutPot, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {
|
||||||
|
//Locations
|
||||||
|
//PUT AFTER OCTO POTS HERE
|
||||||
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_UPPER, {[]{return logic->CanUse(RG_BOOMERANG);}}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_UPPER, {[]{return logic->CanUse(RG_BOOMERANG);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_LIFT_UPPER] = Region("Jabu Jabus Belly Lift Upper", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_LIFT_UPPER] = Region("Jabu Jabus Belly Lift Upper", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->LoweredJabuPath, {[]{return true;}}),
|
||||||
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_LOWER, {[]{return true;}}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM] = Region("Jabu Jabus Belly Near Boss Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM] = Region("Jabu Jabus Belly Near Boss Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, logic->CanAttack()),
|
LOCATION(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, {[]{return logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && ((logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW))) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT)))) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_EXPLOSIVES) && (logic->CanUse(RG_BOMBCHU_5) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_BOMB_BAG))));}}),
|
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, {[]{return logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_EXPLOSIVES) && (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_BOMB_BAG))));}}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +207,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, {[]{return logic->CanUse(RG_BOOMERANG) && logic->HasExplosives() && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, {[]{return logic->CanUse(RG_BOOMERANG) && logic->HasExplosives() && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, {[]{return logic->JabuNorthTentacle;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, {[]{return logic->JabuNorthTentacle;}}),
|
||||||
|
|
|
@ -415,6 +415,38 @@ namespace Rando {
|
||||||
bool killed = false;
|
bool killed = false;
|
||||||
switch(enemy) {
|
switch(enemy) {
|
||||||
case RE_GOLD_SKULLTULA:
|
case RE_GOLD_SKULLTULA:
|
||||||
|
switch (distance){
|
||||||
|
case ED_CLOSE:
|
||||||
|
//hammer jumpslash cannot damage these, but hammer swing can
|
||||||
|
killed = CanUse(RG_MEGATON_HAMMER);
|
||||||
|
[[fallthrough]];
|
||||||
|
case ED_SHORT_JUMPSLASH:
|
||||||
|
killed = killed || CanUse(RG_KOKIRI_SWORD);
|
||||||
|
[[fallthrough]];
|
||||||
|
case ED_MASTER_SWORD_JUMPSLASH:
|
||||||
|
killed = killed || CanUse(RG_MASTER_SWORD);
|
||||||
|
[[fallthrough]];
|
||||||
|
case ED_LONG_JUMPSLASH:
|
||||||
|
killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS);
|
||||||
|
[[fallthrough]];
|
||||||
|
case ED_BOMB_THROW:
|
||||||
|
killed = killed || CanUse(RG_BOMB_BAG);
|
||||||
|
[[fallthrough]];
|
||||||
|
case ED_BOOMERANG:
|
||||||
|
killed = killed || CanUse(RG_BOOMERANG) || CanUse(RG_DINS_FIRE);
|
||||||
|
[[fallthrough]];
|
||||||
|
case ED_HOOKSHOT:
|
||||||
|
//RANDOTODO test dins and chu range in a practical example
|
||||||
|
killed = killed || CanUse(RG_HOOKSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5));
|
||||||
|
[[fallthrough]];
|
||||||
|
case ED_LONGSHOT:
|
||||||
|
killed = killed || CanUse(RG_LONGSHOT);
|
||||||
|
[[fallthrough]];
|
||||||
|
case ED_FAR:
|
||||||
|
killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return killed;
|
||||||
case RE_GOHMA_LARVA:
|
case RE_GOHMA_LARVA:
|
||||||
case RE_MAD_SCRUB:
|
case RE_MAD_SCRUB:
|
||||||
case RE_DEKU_BABA:
|
case RE_DEKU_BABA:
|
||||||
|
@ -618,8 +650,15 @@ namespace Rando {
|
||||||
case RE_PURPLE_LEEVER:
|
case RE_PURPLE_LEEVER:
|
||||||
//dies on it's own, so this is the conditions to spawn it (killing 10 normal leevers)
|
//dies on it's own, so this is the conditions to spawn it (killing 10 normal leevers)
|
||||||
//Sticks and Ice arrows work but will need ammo capacity logic
|
//Sticks and Ice arrows work but will need ammo capacity logic
|
||||||
//other mothods can damage them but not kill them, and they run when hit, making them impractical
|
//other methods can damage them but not kill them, and they run when hit, making them impractical
|
||||||
return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);
|
return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);
|
||||||
|
case RE_TENTACLE:
|
||||||
|
return CanUse(RG_BOOMERANG);
|
||||||
|
case RE_BARI:
|
||||||
|
return HookshotOrBoomerang() || CanUse(RG_FAIRY_BOW) || HasExplosives() || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_STICKS) || CanUse(RG_DINS_FIRE) || (TakeDamage() && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)));
|
||||||
|
case RE_SHABOM:
|
||||||
|
//RANDOTODO when you add better damage logic, you can kill this by taking hits
|
||||||
|
return CanUse(RG_BOOMERANG) || CanUse(RG_NUTS) || CanJumpslash() || CanUse(RG_DINS_FIRE) || CanUse(RG_ICE_ARROWS);
|
||||||
default:
|
default:
|
||||||
SPDLOG_ERROR("CanKillEnemy reached `default`.");
|
SPDLOG_ERROR("CanKillEnemy reached `default`.");
|
||||||
assert(false);
|
assert(false);
|
||||||
|
@ -2145,6 +2184,7 @@ namespace Rando {
|
||||||
GTGPlatformSilverRupees = false;
|
GTGPlatformSilverRupees = false;
|
||||||
MQJabuHolesRoomDoor = false;
|
MQJabuHolesRoomDoor = false;
|
||||||
JabuWestTentacle = false;
|
JabuWestTentacle = false;
|
||||||
|
JabuEastTentacle = false;
|
||||||
JabuNorthTentacle = false;
|
JabuNorthTentacle = false;
|
||||||
LoweredJabuPath = false;
|
LoweredJabuPath = false;
|
||||||
MQJabuLiftRoomCow = false;
|
MQJabuLiftRoomCow = false;
|
||||||
|
@ -2158,6 +2198,9 @@ namespace Rando {
|
||||||
MQSpiritCrawlBoulder = false;
|
MQSpiritCrawlBoulder = false;
|
||||||
MQSpiritMapRoomEnemies = false;
|
MQSpiritMapRoomEnemies = false;
|
||||||
MQSpirit3SunsEnemies = false;
|
MQSpirit3SunsEnemies = false;
|
||||||
|
Spirit1FSilverRupees = false;
|
||||||
|
JabuRutoInB1 = false;
|
||||||
|
JabuRutoIn1F = false;
|
||||||
|
|
||||||
StopPerformanceTimer(PT_LOGIC_RESET);
|
StopPerformanceTimer(PT_LOGIC_RESET);
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,6 +156,7 @@ class Logic {
|
||||||
bool GTGPlatformSilverRupees = false;
|
bool GTGPlatformSilverRupees = false;
|
||||||
bool MQJabuHolesRoomDoor = false;
|
bool MQJabuHolesRoomDoor = false;
|
||||||
bool JabuWestTentacle = false;
|
bool JabuWestTentacle = false;
|
||||||
|
bool JabuEastTentacle = false;
|
||||||
bool JabuNorthTentacle = false;
|
bool JabuNorthTentacle = false;
|
||||||
bool LoweredJabuPath = false;
|
bool LoweredJabuPath = false;
|
||||||
bool MQJabuLiftRoomCow = false;
|
bool MQJabuLiftRoomCow = false;
|
||||||
|
@ -171,6 +172,8 @@ class Logic {
|
||||||
bool MQSpiritTimeTravelChest = false;
|
bool MQSpiritTimeTravelChest = false;
|
||||||
bool MQSpirit3SunsEnemies = false;
|
bool MQSpirit3SunsEnemies = false;
|
||||||
bool Spirit1FSilverRupees = false;
|
bool Spirit1FSilverRupees = false;
|
||||||
|
bool JabuRutoInB1 = false;
|
||||||
|
bool JabuRutoIn1F = false;
|
||||||
|
|
||||||
/* --- END OF HELPERS AND LOCATION ACCESS --- */
|
/* --- END OF HELPERS AND LOCATION ACCESS --- */
|
||||||
|
|
||||||
|
|
|
@ -568,19 +568,14 @@ typedef enum {
|
||||||
RR_DODONGOS_CAVERN_BOSS_ROOM,
|
RR_DODONGOS_CAVERN_BOSS_ROOM,
|
||||||
|
|
||||||
RR_JABU_JABUS_BELLY_BEGINNING,
|
RR_JABU_JABUS_BELLY_BEGINNING,
|
||||||
RR_JABU_JABUS_BELLY_LIFT_MIDDLE,
|
RR_JABU_JABUS_BELLY_MAIN,
|
||||||
RR_JABU_JABUS_BELLY_MAIN_UPPER,
|
RR_JABU_JABUS_BELLY_B1_NORTH,
|
||||||
RR_JABU_JABUS_BELLY_MAIN_LOWER,
|
RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH,
|
||||||
RR_JABU_JABUS_BELLY_SHABOMB_CORRIDOR,
|
RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE,
|
||||||
RR_JABU_JABUS_BELLY_LOWER_SIDE_ROOM,
|
|
||||||
RR_JABU_JABUS_BELLY_LIFT_LOWER,
|
|
||||||
RR_JABU_JABUS_BELLY_FORKED_CORRIDOR,
|
|
||||||
RR_JABU_JABUS_BELLY_BOOMERANG_ROOM,
|
|
||||||
RR_JABU_JABUS_BELLY_MAP_ROOM,
|
|
||||||
RR_JABU_JABUS_BELLY_COMPASS_ROOM,
|
RR_JABU_JABUS_BELLY_COMPASS_ROOM,
|
||||||
RR_JABU_JABUS_BELLY_BLUE_TENTACLE,
|
RR_JABU_JABUS_BELLY_BLUE_TENTACLE,
|
||||||
RR_JABU_JABUS_BELLY_GREEN_TENTACLE,
|
RR_JABU_JABUS_BELLY_GREEN_TENTACLE,
|
||||||
RR_JABU_JABUS_BELLY_BIGOCTO_ROOM,
|
RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE,
|
||||||
RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO,
|
RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO,
|
||||||
RR_JABU_JABUS_BELLY_LIFT_UPPER,
|
RR_JABU_JABUS_BELLY_LIFT_UPPER,
|
||||||
RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM,
|
RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM,
|
||||||
|
@ -4638,6 +4633,9 @@ typedef enum {
|
||||||
RE_BEAMOS,
|
RE_BEAMOS,
|
||||||
RE_WALLMASTER,
|
RE_WALLMASTER,
|
||||||
RE_PURPLE_LEEVER,
|
RE_PURPLE_LEEVER,
|
||||||
|
RE_TENTACLE,
|
||||||
|
RE_BARI,
|
||||||
|
RE_SHABOM,
|
||||||
} RandomizerEnemy;
|
} RandomizerEnemy;
|
||||||
|
|
||||||
//RANDOTODO compare child long jumpslash range with adult short
|
//RANDOTODO compare child long jumpslash range with adult short
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue