Skip to content
This repository was archived by the owner on Aug 11, 2021. It is now read-only.

Commit 486a469

Browse files
committed
Add more tricks
1 parent 7ae76d2 commit 486a469

File tree

6 files changed

+184
-34
lines changed

6 files changed

+184
-34
lines changed

src/common/data/settingsDetails.ts

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export enum Difficulty {
1414
EASY = 'Easy',
1515
NORMAL = 'Normal',
1616
HARD = 'Hard',
17-
INSANE = 'Insane'
17+
INSANE = 'Insane',
18+
OOB = 'Out of Bounds'
1819
}
1920

2021
export const details: SettingsDetails = {
@@ -136,6 +137,13 @@ export const details: SettingsDetails = {
136137
This can be done with a scan dash off the Red Starburst above the Temple Hall door, or by locking onto a Seedling in Temple Hall and then dashing.`,
137138
difficulty: Difficulty.EASY
138139
},
140+
antechamberWithPowerBombs: {
141+
name: 'Antechamber with Power Bombs',
142+
description: `You can retrieve the item and leave Antechamber without Ice Beam by using a power bomb to open the door, moving to the very back of the room, and then back to the door.
143+
144+
WARNING: If you fail the trick, you will softlock. It is strongly recommended to save at the nearby save station before attempting.`,
145+
difficulty: Difficulty.EASY
146+
},
139147
arborChamberWithoutPlasma: {
140148
name: 'Arbor Chamber without Plasma Beam',
141149
description: `Arbor Chamber can be entered through the ceiling from out of bounds.
@@ -155,6 +163,14 @@ export const details: SettingsDetails = {
155163
This trick is very difficult and not recommended for beginners.`,
156164
difficulty: Difficulty.INSANE
157165
},
166+
chapelOfTheEldersWithPowerBombs: {
167+
name: 'Chapel of the Elders without Power Bombs',
168+
description: `Similar to Antechamber without Power Bombs, but you open the door, lay a power bomb in the middle of the door frame, and `
169+
+ `then immediately roll into Chapel of the Elders.
170+
171+
WARNING: You will softlock if you fail this trick. You are recommended to save first before attempting.`,
172+
difficulty: Difficulty.EASY
173+
},
158174
chozoIceTempleItemWithIS: {
159175
name: 'Chozo Ice Temple Item with Infinite Speed',
160176
description: `Also called Early Sun IS, you can get this item by performing the infinite speed glitch in Chapel of the Elders inbounds.`,
@@ -185,6 +201,11 @@ export const details: SettingsDetails = {
185201
description: `You can abuse standable collision such as the morph track and the scaffolding to access the top of the room without needing Spider Ball.`,
186202
difficulty: Difficulty.EASY
187203
},
204+
climbReflectingPoolWithoutBoostBall: {
205+
name: 'Climb Reflecting Pool without Boost Ball',
206+
description: `You can slope jump off the Stone Toads to reach the top of the room.`,
207+
difficulty: Difficulty.TRIVIAL
208+
},
188209
climbRuinedCourtyardWithoutBoostSpider: {
189210
name: 'Climb Ruined Courtyard without Boost Ball, Spider Ball',
190211
description: `There is standable collision near the lower door that can be used to climb to the top of the room.`,
@@ -197,6 +218,11 @@ export const details: SettingsDetails = {
197218
You still need missiles to reach this room inbounds.`,
198219
difficulty: Difficulty.EASY
199220
},
221+
crashedFrigateGammaElevatorWithoutGravity: {
222+
name: 'Crashed Frigate - Gamma Elevator Item without Gravity Suit',
223+
description: `In-game, there's nothing stopping you from entering (and leaving) the front side of the crashed frigate without Gravity Suit.`,
224+
difficulty: Difficulty.EASY
225+
},
200226
crossMagmaPoolSuitless: {
201227
name: 'Cross Magma Pool Suitless',
202228
description: `Removes the suit requirement to traverse this room and obtain the item in Magma Pool. The item logic will assume you have 2 Energy Tanks.
@@ -225,6 +251,11 @@ export const details: SettingsDetails = {
225251
You can also Space Jump out of the lava to the Twin Fires side if you have Gravity Suit.`,
226252
difficulty: Difficulty.EASY
227253
},
254+
crosswayHpbj: {
255+
name: 'Crossway - Half Pipe Bomb Jump',
256+
description: `You can reach Hall of the Elders by performing a half pipe bomb jump to reach the other side of the room.`,
257+
difficulty: Difficulty.HARD
258+
},
228259
crosswayItemFewerReqs: {
229260
name: 'Crossway Item - Fewer Requirements',
230261
description: `When this is enabled, you are only expected to have Space Jump Boots and Morph Ball to obtain the item.`,
@@ -272,6 +303,11 @@ export const details: SettingsDetails = {
272303
description: `You can climb the Furnace and its spider tracks using Space Jump, reach the top of the room, then bomb jump across to the item.`,
273304
difficulty: Difficulty.NORMAL
274305
},
306+
gatheringHallWithoutSpaceJump: {
307+
name: 'Gathering Hall Item without Space Jump',
308+
description: `You can double bomb jump from the side platform to the grate where the item is.`,
309+
difficulty: Difficulty.TRIVIAL
310+
},
275311
gravityChamberLedgeItemWithoutGrapplePlasma: {
276312
name: 'Gravity Chamber Ledge Item without Grapple, Plasma Beam',
277313
description: `You can R jump to reach the ledge without Grapple and Plasma Beam.`,
@@ -299,11 +335,38 @@ export const details: SettingsDetails = {
299335
description: `You can go out of bounds in Gathering Hall and wallcrawl all the way to Reflecting Pool, skipping some items.`,
300336
difficulty: Difficulty.HARD
301337
},
338+
iceRuinsEastSpiderItemWithoutSpider: {
339+
name: 'Ice Ruins East - Spider Track Item without Spider Ball',
340+
description: `You can hyper bomb jump to reach the tunnel where the item is without Spider Ball.`,
341+
difficulty: Difficulty.HARD
342+
},
343+
lifeGroveSpinnerWithoutBoostBall: {
344+
name: 'Life Grove Spinner without Boost Ball',
345+
description: `With a specific camera angle and control stick angle setup, you can open up the spinner item without Boost Ball.
346+
347+
Requires 'Life Grove Tunnel - Half Pipe Bomb Jump' to also be activated for this trick to be considered in logic.`,
348+
difficulty: Difficulty.NORMAL
349+
},
350+
lifeGroveTunnelHpbj: {
351+
name: 'Life Grove Tunnel - Half Pipe Bomb Jump',
352+
description: `You can half pipe bomb jump to reach either side of Life Grove Tunnel without Boost Ball.`,
353+
difficulty: Difficulty.HARD
354+
},
355+
lowerPhazonMineWithoutSpiderGrapple: {
356+
name: 'Lower Phazon Mines without Spider Ball, Grapple Beam',
357+
description: `Using R jumps, slope jumps, and dashes, you can traverse the entirety of lower Phazon Mines without Spider Ball and Grapple Beam.`,
358+
difficulty: Difficulty.NORMAL
359+
},
302360
magmaPoolItemWithIS: {
303361
name: 'Magma Pool Item with Infinite Speed',
304362
description: `You can use the infinite speed glitch by wedging yourself between the crates and the wall on the Ruined Fountain side of this room.`,
305363
difficulty: Difficulty.NORMAL
306364
},
365+
mainPlazaHpbj: {
366+
name: 'Main Plaza - Half Pipe Bomb Jump',
367+
description: `You can reach the half pipe item by performing a half pipe bomb jump.`,
368+
difficulty: Difficulty.HARD
369+
},
307370
mainPlazaItemsOnlySpaceJump: {
308371
name: 'Main Plaza Items with only Space Jump',
309372
description: `The Grapple Ledge, Locked Door, and Half Pipe items can be reached with only Space Jump equipped.`,
@@ -314,6 +377,11 @@ export const details: SettingsDetails = {
314377
description: `You can slope jump onto the top of the crane and R jump over to the item.`,
315378
difficulty: Difficulty.NORMAL
316379
},
380+
observatoryPuzzleSkip: {
381+
name: 'Observatory Item Puzzle Skip',
382+
description: `This trick expects you to dash to climb Observatory without Boost Ball and Bombs, and then slope jump to the pipes to reach the item.`,
383+
difficulty: Difficulty.EASY
384+
},
317385
outOfBoundsWithoutMorphBall: {
318386
name: 'Out of Bounds without Morph Ball',
319387
description: `Morph Ball and bombs won't be factored in for most out of bounds checks.`,
@@ -406,6 +474,14 @@ export const details: SettingsDetails = {
406474
This trick is extremely difficult and is not recommended for beginners.`,
407475
difficulty: Difficulty.INSANE
408476
},
477+
sunTowerIbj: {
478+
name: 'Sun Tower - Infinite Bomb Jump',
479+
description: `After defeating Flaahgra, you can jump into the left groove, have the Oculus carry you, and then infinite bomb jump `
480+
+ `back to the top door to trigger the Sunchamber Chozo Ghost room layer without needing Spider Ball and Super Missles.
481+
482+
WARNING: If progession is on Sunchamber (Ghosts), you will softlock if you fail this trick. You are advised to save before attempting.`,
483+
difficulty: Difficulty.NORMAL
484+
},
409485
quarantineMonitorDash: {
410486
name: 'Quarantine Monitor Dash',
411487
description: `You can skip the Grapple Beam by scan dashing to the Quarantine Monitor platform from the elevator platform.`,
@@ -426,7 +502,12 @@ export const details: SettingsDetails = {
426502
upperRuinedShrineTowerOfLightFewerAccessReqs: {
427503
name: 'Upper Ruined Shrine and Tower of Light - Fewer Access Requirements',
428504
description: `Upper Ruined Shrine and the door to Tower of Light can be reached with just Space Jump Boots (and Wave Beam for the latter).`,
429-
difficulty: Difficulty.EASY,
505+
difficulty: Difficulty.EASY
506+
},
507+
ventShaftHpbj: {
508+
name: 'Ventilation Shaft - Half Pipe Bomb Jump',
509+
description: `It's possible to return to Elite Control by performing a half pipe bomb jump to reach the Elite Control door.`,
510+
difficulty: Difficulty.HARD
430511
},
431512
warriorShrineWithoutBoost: {
432513
name: 'Warrior Shrine without Boost Ball',

src/electron/models/prime/regions/chozoRuins.ts

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@ export function chozoRuins(): RegionObject[] {
1111
{
1212
name: 'Main Plaza',
1313
locations: {
14-
[PrimeLocation.MAIN_PLAZA_HALF_PIPE]: (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => items.canBoost()
15-
|| (settings.tricks.mainPlazaItemsOnlySpaceJump && items.has(PrimeItem.SPACE_JUMP_BOOTS)),
14+
[PrimeLocation.MAIN_PLAZA_HALF_PIPE]: (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
15+
const boostReqs = items.canBoost() || (settings.tricks.mainPlazaHpbj && items.canLayBombs());
16+
const sjReqs = settings.tricks.mainPlazaItemsOnlySpaceJump && items.has(PrimeItem.SPACE_JUMP_BOOTS);
17+
18+
return boostReqs || sjReqs;
19+
},
1620
[PrimeLocation.MAIN_PLAZA_TREE]: (items: PrimeItemCollection) => items.canFireSuperMissiles() && items.has(PrimeItem.SPACE_JUMP_BOOTS)
1721
},
1822
exits: {
@@ -233,7 +237,11 @@ export function chozoRuins(): RegionObject[] {
233237
name: 'Sunchamber',
234238
locations: {
235239
[PrimeLocation.SUNCHAMBER_FLAAHGRA]: (items: PrimeItemCollection) => items.canLayBombs(),
236-
[PrimeLocation.SUNCHAMBER_GHOSTS]: (items: PrimeItemCollection) => items.canLayBombs() && items.canSpider() && items.canFireSuperMissiles()
240+
[PrimeLocation.SUNCHAMBER_GHOSTS]: (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
241+
const spiderSupersReqs = settings.tricks.sunTowerIbj || (items.canSpider() && items.canFireSuperMissiles());
242+
243+
return items.canLayBombs() && spiderSupersReqs;
244+
}
237245
},
238246
exits: {
239247
[Elevator.CHOZO_NORTH]: (items: PrimeItemCollection) => items.canLayBombs(),
@@ -245,8 +253,9 @@ export function chozoRuins(): RegionObject[] {
245253
name: 'Gathering Hall',
246254
locations: {
247255
[PrimeLocation.GATHERING_HALL]: (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
256+
const sjReqs = items.has(PrimeItem.SPACE_JUMP_BOOTS) || (settings.tricks.gatheringHallWithoutSpaceJump && items.canLayBombs());
248257
const powerBombReqs = settings.tricks.destroyBombCoversWithPowerBombs && items.canLayPowerBombs();
249-
return (items.canLayBombs() || powerBombReqs) && items.has(PrimeItem.SPACE_JUMP_BOOTS);
258+
return (items.canLayBombs() || powerBombReqs) && sjReqs;
250259
}
251260
},
252261
exits: {
@@ -362,8 +371,11 @@ export function chozoRuins(): RegionObject[] {
362371
}
363372
},
364373
exits: {
365-
'Hall of the Elders': (items: PrimeItemCollection) => (items.canBoost() && items.hasMissiles())
366-
|| (items.has(PrimeItem.MORPH_BALL) && items.has(PrimeItem.ICE_BEAM)),
374+
'Hall of the Elders': (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
375+
const boostReqs = items.canBoost || (settings.tricks.crosswayHpbj && items.canLayBombs());
376+
return (boostReqs && items.hasMissiles())
377+
|| (items.has(PrimeItem.MORPH_BALL) && items.has(PrimeItem.ICE_BEAM));
378+
},
367379
'Furnace (Main Room)': (items: PrimeItemCollection) => items.has(PrimeItem.MORPH_BALL)
368380
}
369381
},
@@ -399,18 +411,28 @@ export function chozoRuins(): RegionObject[] {
399411
name: 'Reflecting Pool',
400412
exits: {
401413
'Antechamber': (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
402-
const baseReqs = items.canBoost() && items.canLayBombs() && items.hasMissiles();
414+
const climbReqs = (items.canBoost() && items.canLayBombs())
415+
|| (settings.tricks.climbReflectingPoolWithoutBoostBall && items.has(PrimeItem.SPACE_JUMP_BOOTS));
416+
const baseReqs = climbReqs && items.canLayBombs() && items.hasMissiles();
403417

404418
if (settings.pointOfNoReturnItems !== PointOfNoReturnItems.DO_NOT_ALLOW) {
405419
return baseReqs;
406420
}
407421

408422
return baseReqs && items.has(PrimeItem.ICE_BEAM);
409423
},
410-
[Elevator.CHOZO_EAST]: (items: PrimeItemCollection) => {
411-
return items.canBoost() && items.canLayBombs() && items.hasMissiles();
424+
[Elevator.CHOZO_EAST]: (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
425+
const climbReqs = (items.canBoost() && items.canLayBombs())
426+
|| (settings.tricks.climbReflectingPoolWithoutBoostBall && items.has(PrimeItem.SPACE_JUMP_BOOTS));
427+
428+
return climbReqs && items.canLayBombs() && items.hasMissiles();
429+
},
430+
[Elevator.CHOZO_SOUTH]: (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
431+
const climbReqs = (items.canBoost() && items.canLayBombs())
432+
|| (settings.tricks.climbReflectingPoolWithoutBoostBall && items.has(PrimeItem.SPACE_JUMP_BOOTS));
433+
434+
return climbReqs && items.has(PrimeItem.ICE_BEAM);
412435
},
413-
[Elevator.CHOZO_SOUTH]: (items: PrimeItemCollection) => items.canBoost() && items.canLayBombs() && items.has(PrimeItem.ICE_BEAM),
414436
'Hall of the Elders': (items: PrimeItemCollection) => items.has(PrimeItem.SPACE_JUMP_BOOTS)
415437
}
416438
},
@@ -420,7 +442,8 @@ export function chozoRuins(): RegionObject[] {
420442
[PrimeLocation.ANTECHAMBER]: () => true,
421443
},
422444
exits: {
423-
'Reflecting Pool': (items: PrimeItemCollection) => items.has(PrimeItem.ICE_BEAM)
445+
'Reflecting Pool': (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => items.has(PrimeItem.ICE_BEAM)
446+
|| (settings.tricks.antechamberWithPowerBombs && items.canLayPowerBombs())
424447
}
425448
},
426449
{

src/electron/models/prime/regions/phazonMines.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,10 @@ export function phazonMines(): RegionObject[] {
153153
},
154154
exits: {
155155
'Central Dynamo': (items: PrimeItemCollection) => items.has(PrimeItem.ICE_BEAM),
156-
'Elite Control': (items: PrimeItemCollection) => items.canBoost() && items.has(PrimeItem.ICE_BEAM)
156+
'Elite Control': (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
157+
const boostReqs = items.canBoost() || (settings.tricks.ventShaftHpbj && items.canLayBombs());
158+
return boostReqs && items.has(PrimeItem.ICE_BEAM);
159+
}
157160
}
158161
},
159162
{
@@ -170,14 +173,17 @@ export function phazonMines(): RegionObject[] {
170173
name: 'Metroid Quarantine A',
171174
locations: {
172175
[PrimeLocation.METROID_QUARANTINE_A]: (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
176+
const spiderReqs = settings.tricks.lowerPhazonMineWithoutSpiderGrapple || (items.canSpider());
173177
const xrayReqs = settings.tricks.removeXrayReqs || items.has(PrimeItem.XRAY_VISOR);
174-
return xrayReqs && items.canSpider() && items.canLayPowerBombs() && items.has(PrimeItem.SPACE_JUMP_BOOTS);
178+
179+
return xrayReqs && spiderReqs && items.canLayPowerBombs() && items.has(PrimeItem.SPACE_JUMP_BOOTS);
175180
}
176181
},
177182
exits: {
178183
'Fungal Hall Access': (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
184+
const spiderReqs = settings.tricks.lowerPhazonMineWithoutSpiderGrapple || (items.canSpider());
179185
const xrayReqs = settings.tricks.removeXrayReqs || items.has(PrimeItem.XRAY_VISOR);
180-
return xrayReqs && items.canSpider() && items.has(PrimeItem.SPACE_JUMP_BOOTS) && items.has(PrimeItem.ICE_BEAM) && items.has(PrimeItem.PLASMA_BEAM)
186+
return xrayReqs && spiderReqs && items.has(PrimeItem.SPACE_JUMP_BOOTS) && items.has(PrimeItem.ICE_BEAM) && items.has(PrimeItem.PLASMA_BEAM)
181187
&& items.has(PrimeItem.SCAN_VISOR);
182188
},
183189
'Central Dynamo': (items: PrimeItemCollection) => items.canLayBombs() && items.canLayPowerBombs() && items.has(PrimeItem.WAVE_BEAM) && items.has(PrimeItem.ICE_BEAM)
@@ -196,7 +202,10 @@ export function phazonMines(): RegionObject[] {
196202
{
197203
name: 'Fungal Hall A',
198204
exits: {
199-
'Phazon Mining Tunnel': (items: PrimeItemCollection) => items.has(PrimeItem.GRAPPLE_BEAM) && items.has(PrimeItem.ICE_BEAM) && items.has(PrimeItem.SPACE_JUMP_BOOTS),
205+
'Phazon Mining Tunnel': (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
206+
const grappleReqs = settings.tricks.lowerPhazonMineWithoutSpiderGrapple || items.has(PrimeItem.GRAPPLE_BEAM);
207+
return grappleReqs && items.has(PrimeItem.ICE_BEAM) && items.has(PrimeItem.SPACE_JUMP_BOOTS);
208+
},
200209
'Fungal Hall Access': (items: PrimeItemCollection) => items.has(PrimeItem.ICE_BEAM) && items.has(PrimeItem.SPACE_JUMP_BOOTS)
201210
}
202211
},
@@ -219,14 +228,20 @@ export function phazonMines(): RegionObject[] {
219228
[PrimeLocation.FUNGAL_HALL_B]: (items: PrimeItemCollection) => items.canLayBombsOrPowerBombs()
220229
},
221230
exits: {
222-
'Metroid Quarantine B (Fungal Hall B Side)': (items: PrimeItemCollection) => items.has(PrimeItem.GRAPPLE_BEAM) && items.has(PrimeItem.SPACE_JUMP_BOOTS) && items.has(PrimeItem.PLASMA_BEAM),
231+
'Metroid Quarantine B (Fungal Hall B Side)': (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
232+
const grappleReqs = settings.tricks.lowerPhazonMineWithoutSpiderGrapple || items.has(PrimeItem.GRAPPLE_BEAM);
233+
return grappleReqs && items.has(PrimeItem.SPACE_JUMP_BOOTS) && items.has(PrimeItem.PLASMA_BEAM);
234+
},
223235
'Phazon Mining Tunnel': (items: PrimeItemCollection) => items.has(PrimeItem.PLASMA_BEAM) && items.has(PrimeItem.SPACE_JUMP_BOOTS)
224236
}
225237
},
226238
{
227239
name: 'Metroid Quarantine B (Fungal Hall B Side)',
228240
exits: {
229-
'Metroid Quarantine B (Elite Quarters Side)': (items: PrimeItemCollection) => items.canSpider() && items.has(PrimeItem.GRAPPLE_BEAM) && items.has(PrimeItem.SPACE_JUMP_BOOTS) && items.has(PrimeItem.SCAN_VISOR),
241+
'Metroid Quarantine B (Elite Quarters Side)': (items: PrimeItemCollection, settings: PrimeRandomizerSettings) => {
242+
const spiderGrappleReqs = settings.tricks.lowerPhazonMineWithoutSpiderGrapple || (items.canSpider() && items.has(PrimeItem.GRAPPLE_BEAM));
243+
return spiderGrappleReqs && items.has(PrimeItem.SPACE_JUMP_BOOTS) && items.has(PrimeItem.SCAN_VISOR);
244+
},
230245
'Fungal Hall B': (items: PrimeItemCollection) => items.has(PrimeItem.SPACE_JUMP_BOOTS) && items.has(PrimeItem.PLASMA_BEAM)
231246
}
232247
},

0 commit comments

Comments
 (0)