Skip to content

Commit 5a7b2c9

Browse files
committed
more split speed cross-room requirements
1 parent 17f2424 commit 5a7b2c9

2 files changed

Lines changed: 21 additions & 12 deletions

File tree

rust/maprando-game/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,7 @@ pub enum MainEntranceCondition {
10761076
direction: TemporaryBlueDirection,
10771077
},
10781078
ComeInSpinning {
1079+
speed_booster: Option<bool>,
10791080
unusable_tiles: Float,
10801081
min_extra_run_speed: Float,
10811082
max_extra_run_speed: Float,
@@ -3858,6 +3859,7 @@ impl GameData {
38583859
direction: parse_temporary_blue_direction(value["direction"].as_str())?,
38593860
},
38603861
"comeInSpinning" => MainEntranceCondition::ComeInSpinning {
3862+
speed_booster: parse_speed_booster(value["speedBooster"].as_str()),
38613863
unusable_tiles: Float::new(value["unusableTiles"].as_f32().unwrap_or(0.0)),
38623864
min_extra_run_speed: Float::new(parse_hex(&value["minExtraRunSpeed"], 0.0)?),
38633865
max_extra_run_speed: Float::new(parse_hex(&value["maxExtraRunSpeed"], 7.0)?),

rust/maprando/src/randomize.rs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,7 @@ impl<'a> Preprocessor<'a> {
940940
self.get_come_in_with_temporary_blue_reqs(exit_condition, *direction)
941941
}
942942
MainEntranceCondition::ComeInSpinning {
943+
speed_booster,
943944
unusable_tiles,
944945
min_extra_run_speed,
945946
max_extra_run_speed,
@@ -948,6 +949,7 @@ impl<'a> Preprocessor<'a> {
948949
unusable_tiles.get(),
949950
min_extra_run_speed.get(),
950951
max_extra_run_speed.get(),
952+
*speed_booster,
951953
),
952954
MainEntranceCondition::ComeInBlueSpinning {
953955
unusable_tiles,
@@ -1528,7 +1530,17 @@ impl<'a> Preprocessor<'a> {
15281530
unusable_tiles: f32,
15291531
entrance_min_extra_run_speed: f32,
15301532
entrance_max_extra_run_speed: f32,
1533+
speed_booster: Option<bool>,
15311534
) -> Option<Requirement> {
1535+
let mut reqs: Vec<Requirement> = vec![];
1536+
if speed_booster == Some(true) {
1537+
reqs.push(Requirement::blue_booster());
1538+
}
1539+
if speed_booster == Some(false) {
1540+
reqs.push(Requirement::Tech(
1541+
self.game_data.tech_isv.index_by_key[&TECH_ID_CAN_DISABLE_EQUIPMENT],
1542+
));
1543+
}
15321544
match exit_condition {
15331545
ExitCondition::LeaveSpinning {
15341546
remote_runway_length,
@@ -1542,7 +1554,6 @@ impl<'a> Preprocessor<'a> {
15421554
let max_extra_run_speed = max_extra_run_speed.get();
15431555
let runway_max_speed = get_max_extra_run_speed(remote_runway_length);
15441556

1545-
let mut reqs: Vec<Requirement> = vec![];
15461557
if min_extra_run_speed > 0.0 || entrance_min_extra_run_speed > 0.0 {
15471558
reqs.push(Requirement::NoBlueSuit);
15481559
}
@@ -1569,7 +1580,6 @@ impl<'a> Preprocessor<'a> {
15691580
from_exit_node,
15701581
} => {
15711582
let effective_length = effective_length.get();
1572-
let mut reqs: Vec<Requirement> = vec![];
15731583
if min_extra_run_speed.get() > 0.0 || entrance_min_extra_run_speed > 0.0 {
15741584
reqs.push(Requirement::NoBlueSuit);
15751585
}
@@ -1613,6 +1623,8 @@ impl<'a> Preprocessor<'a> {
16131623
entrance_min_extra_run_speed: f32,
16141624
entrance_max_extra_run_speed: f32,
16151625
) -> Option<Requirement> {
1626+
let mut reqs: Vec<Requirement> = vec![];
1627+
reqs.push(Requirement::blue_booster());
16161628
match exit_condition {
16171629
ExitCondition::LeaveSpinning {
16181630
remote_runway_length,
@@ -1621,8 +1633,6 @@ impl<'a> Preprocessor<'a> {
16211633
min_extra_run_speed,
16221634
max_extra_run_speed,
16231635
} => {
1624-
let mut reqs: Vec<Requirement> = vec![];
1625-
16261636
if min_extra_run_speed.get() > 0.0 || entrance_min_extra_run_speed > 0.0 {
16271637
reqs.push(Requirement::NoBlueSuit);
16281638
}
@@ -1654,8 +1664,6 @@ impl<'a> Preprocessor<'a> {
16541664
from_exit_node,
16551665
} => {
16561666
let effective_length = effective_length.get();
1657-
let mut reqs: Vec<Requirement> = vec![];
1658-
16591667
if min_extra_run_speed.get() > 0.0 || entrance_min_extra_run_speed > 0.0 {
16601668
reqs.push(Requirement::NoBlueSuit);
16611669
}
@@ -1738,6 +1746,7 @@ impl<'a> Preprocessor<'a> {
17381746
remote_runway_length.get(),
17391747
*heated,
17401748
));
1749+
reqs.push(Requirement::blue_booster());
17411750
reqs.push(Requirement::Tech(
17421751
self.game_data.tech_isv.index_by_key
17431752
[&TECH_ID_CAN_SIDE_PLATFORM_CROSS_ROOM_JUMP],
@@ -1968,6 +1977,8 @@ impl<'a> Preprocessor<'a> {
19681977
min_landing_tiles: f32,
19691978
entrance_movement_type: BounceMovementType,
19701979
) -> Option<Requirement> {
1980+
let mut reqs: Vec<Requirement> = vec![];
1981+
reqs.push(Requirement::blue_booster());
19711982
match exit_condition {
19721983
ExitCondition::LeaveWithMockball {
19731984
remote_runway_length,
@@ -1988,7 +1999,6 @@ impl<'a> Preprocessor<'a> {
19881999
if landing_runway_length < min_landing_tiles {
19892000
return None;
19902001
}
1991-
let mut reqs: Vec<Requirement> = vec![];
19922002
reqs.push(Requirement::NoBlueSuit);
19932003

19942004
if !self.add_run_speed_reqs(
@@ -2009,7 +2019,6 @@ impl<'a> Preprocessor<'a> {
20092019
reqs.push(Requirement::Tech(
20102020
self.game_data.tech_isv.index_by_key[&TECH_ID_CAN_SPRING_BALL_BOUNCE],
20112021
));
2012-
reqs.push(Requirement::blue_booster());
20132022
reqs.push(Requirement::Item(Item::Morph as ItemId));
20142023
reqs.push(Requirement::Item(Item::SpringBall as ItemId));
20152024
Some(Requirement::make_and(reqs))
@@ -2037,7 +2046,6 @@ impl<'a> Preprocessor<'a> {
20372046
{
20382047
return None;
20392048
}
2040-
let mut reqs: Vec<Requirement> = vec![];
20412049
reqs.push(Requirement::NoBlueSuit);
20422050

20432051
if !self.add_run_speed_reqs(
@@ -2062,7 +2070,6 @@ impl<'a> Preprocessor<'a> {
20622070
reqs.push(Requirement::Tech(
20632071
self.game_data.tech_isv.index_by_key[&TECH_ID_CAN_SPRING_BALL_BOUNCE],
20642072
));
2065-
reqs.push(Requirement::blue_booster());
20662073
reqs.push(Requirement::Item(Item::Morph as ItemId));
20672074
reqs.push(Requirement::Item(Item::SpringBall as ItemId));
20682075
Some(Requirement::make_and(reqs))
@@ -2075,7 +2082,6 @@ impl<'a> Preprocessor<'a> {
20752082
from_exit_node,
20762083
} => {
20772084
let effective_length = effective_length.get();
2078-
let mut reqs: Vec<Requirement> = vec![];
20792085
reqs.push(Requirement::NoBlueSuit);
20802086

20812087
if !self.add_run_speed_reqs(
@@ -2110,7 +2116,6 @@ impl<'a> Preprocessor<'a> {
21102116
reqs.push(Requirement::Tech(
21112117
self.game_data.tech_isv.index_by_key[&TECH_ID_CAN_SPRING_BALL_BOUNCE],
21122118
));
2113-
reqs.push(Requirement::blue_booster());
21142119
reqs.push(Requirement::Item(Item::Morph as ItemId));
21152120
reqs.push(Requirement::Item(Item::SpringBall as ItemId));
21162121
Some(Requirement::make_and(reqs))
@@ -2364,6 +2369,7 @@ impl<'a> Preprocessor<'a> {
23642369
Some(Requirement::make_and(vec![
23652370
Requirement::NoFlashSuit,
23662371
Requirement::NoBlueSuit,
2372+
Requirement::blue_booster(),
23672373
Requirement::Tech(
23682374
self.game_data.tech_isv.index_by_key[&TECH_ID_CAN_TEMPORARY_BLUE],
23692375
),
@@ -2381,6 +2387,7 @@ impl<'a> Preprocessor<'a> {
23812387
reqs.push(Requirement::Tech(
23822388
self.game_data.tech_isv.index_by_key[&TECH_ID_CAN_TEMPORARY_BLUE],
23832389
));
2390+
reqs.push(Requirement::blue_booster());
23842391
reqs.push(Requirement::make_shinecharge(effective_length, *heated));
23852392
if *physics != Some(Physics::Air) {
23862393
reqs.push(Requirement::Item(Item::Gravity as ItemId));

0 commit comments

Comments
 (0)