Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions rust/data/presets/full-settings/Community Race Season 5.json
Original file line number Diff line number Diff line change
Expand Up @@ -4267,6 +4267,9 @@
"item_pool_preset": null,
"stop_item_placement_early": false,
"ammo_collect_fraction": 0.7,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
3 changes: 3 additions & 0 deletions rust/data/presets/full-settings/Default.json
Original file line number Diff line number Diff line change
Expand Up @@ -4267,6 +4267,9 @@
"item_pool_preset": "Full",
"stop_item_placement_early": false,
"ammo_collect_fraction": 0.7,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
3 changes: 3 additions & 0 deletions rust/data/presets/full-settings/Mentor Tournament.json
Original file line number Diff line number Diff line change
Expand Up @@ -4267,6 +4267,9 @@
"item_pool_preset": null,
"stop_item_placement_early": false,
"ammo_collect_fraction": 0.7,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4267,6 +4267,9 @@
"item_pool_preset": "Full",
"stop_item_placement_early": false,
"ammo_collect_fraction": 1.0,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
3 changes: 3 additions & 0 deletions rust/data/presets/item-progression/Challenge.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
"item_pool_preset": "Full",
"stop_item_placement_early": false,
"ammo_collect_fraction": 1.0,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
3 changes: 3 additions & 0 deletions rust/data/presets/item-progression/Desolate.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
"item_pool_preset": "Reduced",
"stop_item_placement_early": true,
"ammo_collect_fraction": 1.0,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
3 changes: 3 additions & 0 deletions rust/data/presets/item-progression/Normal.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
"item_pool_preset": "Full",
"stop_item_placement_early": false,
"ammo_collect_fraction": 0.7,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
3 changes: 3 additions & 0 deletions rust/data/presets/item-progression/Technical.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
"item_pool_preset": "Full",
"stop_item_placement_early": false,
"ammo_collect_fraction": 1.0,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
3 changes: 3 additions & 0 deletions rust/data/presets/item-progression/Tricky.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
"item_pool_preset": "Full",
"stop_item_placement_early": false,
"ammo_collect_fraction": 0.7,
"missile_size": 5,
"super_size": 5,
"powerbomb_size": 5,
"item_pool": [
{
"item": "Missile",
Expand Down
9 changes: 6 additions & 3 deletions rust/maprando-logic/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ impl GlobalState {
item: Item,
game_data: &GameData,
ammo_collect_fraction: f32,
missile_size: u16,
super_size: u16,
powerbomb_size: u16,
tech: &[bool],
) {
self.inventory.items[item as usize] = true;
Expand All @@ -54,23 +57,23 @@ impl GlobalState {
let new_max_missiles = (ammo_collect_fraction
* self.inventory.collectible_missile_packs as f32)
.round() as Capacity
* 5;
* (missile_size as Capacity);
self.inventory.max_missiles = new_max_missiles;
}
Item::Super => {
self.inventory.collectible_super_packs += 1;
let new_max_supers = (ammo_collect_fraction
* self.inventory.collectible_super_packs as f32)
.round() as Capacity
* 5;
* (super_size as Capacity);
self.inventory.max_supers = new_max_supers;
}
Item::PowerBomb => {
self.inventory.collectible_power_bomb_packs += 1;
let new_max_power_bombs = (ammo_collect_fraction
* self.inventory.collectible_power_bomb_packs as f32)
.round() as Capacity
* 5;
* (powerbomb_size as Capacity);
self.inventory.max_power_bombs = new_max_power_bombs;
}
Item::ETank => {
Expand Down
6 changes: 6 additions & 0 deletions rust/maprando-web/src/randomize_helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ pub struct SeedHeaderTemplate<'a> {
semi_filler_items: Vec<String>,
early_filler_items: Vec<String>,
item_placement_style: String,
missile_size: i32,
super_size: i32,
powerbomb_size: i32,
difficulty: &'a DifficultyConfig,
quality_of_life_preset: String,
supers_double: bool,
Expand Down Expand Up @@ -423,6 +426,9 @@ pub fn render_seed(
.progression_rate
),
random_tank: seed_data.settings.item_progression_settings.random_tank,
missile_size: seed_data.settings.item_progression_settings.missile_size as i32,
super_size: seed_data.settings.item_progression_settings.super_size as i32,
powerbomb_size: seed_data.settings.item_progression_settings.powerbomb_size as i32,
filler_items: seed_data
.settings
.item_progression_settings
Expand Down
43 changes: 43 additions & 0 deletions rust/maprando-web/templates/generate/item_progression.html
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,49 @@ <h1 class="modal-title fs-5">Item Progression</h1>
id="ammoCollectFraction" value="0.7" min="0.5" max="1.0" step="0.1" onchange="itemProgressionChanged()">
</div>
</div>

<div class="form-group row border rounded-3 m-3 p-0">
<div class="col-lg-3 ml-0 mt-1 mb-1 align-items-center">
<label for="preset">Tank Size Settings</label>
</div>
<div class="accordion m-0 p-0" id="accordionTankSize">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed my-0 d-block text-center customize-button" style="padding-top:10px;padding-bottom:10px;" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTankSize">
Customize
</button>
</h2>
</div>
<div id="collapseTankSize" class="accordion-collapse collapse">
<div class="form-group row m-2">
<label class="col-lg-3 col-form-label text-end" for="tank_size_Missile">Missiles per tank:</label>
<span class="itemIcon itemIconMissile"></span>
<div class="col-lg-2">
<input type="text" class="form-control" name="tank_size_Missile" id="tankSizeMissile"
value="0" onchange="itemPoolChanged()">
</div>
</div>

<div class="form-group row m-2">
<label class="col-lg-3 col-form-label text-end" for="tank_size_Super">Super Missiles per tank:</label>
<span class="itemIcon itemIconSuper"></span>
<div class="col-lg-2">
<input type="text" class="form-control" name="tank_size_Super" id="tankSizeSuper"
value="0" onchange="itemPoolChanged()">
</div>
</div>

<div class="form-group row m-2">
<label class="col-lg-3 col-form-label text-end" for="tank_size_PowerBomb">Power Bombs per tank:</label>
<span class="itemIcon itemIconPowerBomb"></span>
<div class="col-lg-2">
<input type="text" class="form-control" name="tank_size_PowerBomb" id="tankSizePowerBomb"
value="0" onchange="itemPoolChanged()">
</div>
</div>
</div>
</div>
</div>

<div class="form-group row border rounded-3 m-3 p-0">
<div class="col-lg-3 ml-0 mt-1 mb-1 align-items-center">
Expand Down
51 changes: 39 additions & 12 deletions rust/maprando-web/templates/generate/scripts.html
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,9 @@
"starting_items": buildStartingItems(),
"key_item_priority": buildItemPriorities(),
"filler_items": buildFillerItems(),
"missile_size": tryParseInt(formData.get("tank_size_Missile")),
"super_size": tryParseInt(formData.get("tank_size_Super")),
"powerbomb_size": tryParseInt(formData.get("tank_size_PowerBomb")),
},
"quality_of_life_settings": {
"preset": formData.get("quality_of_life_preset"),
Expand Down Expand Up @@ -1134,13 +1137,18 @@
for (x of preset.item_pool) {
let item = x.item;
let cnt = x.count;
let el = document.getElementById(`itemPool${item}`);
if (el.classList.contains("item-pool-input-multiple")) {
el.value = cnt;
} else {
applyRadioValue(`itemPool${item}`, cnt > 0 ? "Yes" : "No");
}
let el = document.getElementById(`itemPool${item}`);
if (el.classList.contains("item-pool-input-multiple")) {
el.value = cnt;
} else {
applyRadioValue(`itemPool${item}`, cnt > 0 ? "Yes" : "No");
}
}

document.getElementById("tankSizeMissile").value = preset.missile_size;
document.getElementById("tankSizeSuper").value = preset.super_size;
document.getElementById("tankSizePowerBomb").value = preset.powerbomb_size;

processItemPoolPreset();
applyRadioValue("startingItemsPreset", preset.starting_items_preset);
for (x of preset.starting_items) {
Expand Down Expand Up @@ -1273,20 +1281,20 @@
}
}
function validateItemPool() {
if (parseInt(document.getElementById("itemPoolMissile").value) > 199) {
document.getElementById("itemPoolMissile").value = "199";
if (parseInt(document.getElementById("itemPoolMissile").value) > 999) {
document.getElementById("itemPoolMissile").value = "999";
}
if (parseInt(document.getElementById("itemPoolETank").value) > 14) {
document.getElementById("itemPoolETank").value = "14";
}
if (parseInt(document.getElementById("itemPoolReserveTank").value) > 4) {
document.getElementById("itemPoolReserveTank").value = "4";
}
if (parseInt(document.getElementById("itemPoolSuper").value) > 19) {
document.getElementById("itemPoolSuper").value = "19";
if (parseInt(document.getElementById("itemPoolSuper").value) > 99) {
document.getElementById("itemPoolSuper").value = "99";
}
if (parseInt(document.getElementById("itemPoolPowerBomb").value) > 19) {
document.getElementById("itemPoolPowerBomb").value = "19";
if (parseInt(document.getElementById("itemPoolPowerBomb").value) > 99) {
document.getElementById("itemPoolPowerBomb").value = "99";
}

if (parseInt(document.getElementById("itemPoolMissile").value) < 0) {
Expand All @@ -1304,6 +1312,25 @@
if (parseInt(document.getElementById("itemPoolPowerBomb").value) < 0) {
document.getElementById("itemPoolPowerBomb").value = "0";
}

if (parseInt(document.getElementById("tankSizeMissile").value) < 1) {
document.getElementById("tankSizeMissile").value = "5";
}
if (parseInt(document.getElementById("tankSizeMissile").value) * parseInt(document.getElementById("itemPoolMissile").value) > 32000) {
document.getElementById("tankSizeMissile").value = "5";
}
if (parseInt(document.getElementById("tankSizeMissile").value) > 99) {
document.getElementById("tankSizeMissile").value = "99";
}
if (parseInt(document.getElementById("tankSizeSuper").value) < 1) {
document.getElementById("tankSizeSuper").value = "5";
}
if (parseInt(document.getElementById("tankSizeSuper").value) > 99) {
document.getElementById("tankSizeSuper").value = "99";
}
if (parseInt(document.getElementById("tankSizePowerBomb").value) < 1) {
document.getElementById("tankSizePowerBomb").value = "5";
}
}
function itemPoolPresetChanged() {
processItemPoolPreset();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
</div>
</div>
{% endif %}
<div class="row">
<div class="col-6 col-sm-5 col-md-4 col-lg-3">Tank Sizes:</div>
<div class="col-6 col-sm-7 col-md-8 col-lg-9">
Missile {{+ missile_size }}, Super {{+ super_size }}, PowerBomb {{+ powerbomb_size }}
</div>
</div>
<div class="row">
<div class="col-6 col-sm-5 col-md-4 col-lg-3">Stop item placement early:</div>
<div class="col-6 col-sm-7 col-md-8 col-lg-9">{% if settings.item_progression_settings.stop_item_placement_early %}Yes{% else %}No{% endif %}</div>
Expand Down
41 changes: 38 additions & 3 deletions rust/maprando/src/patch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -767,6 +767,33 @@ impl Patcher<'_> {
self.rom.write_u16(snes2pc(0xA9FB7B), escape_items)?;
}

if self.settings.item_progression_settings.missile_size != 5 {
let m_sz = self.settings.item_progression_settings.missile_size as isize;

self.rom.write_u16(snes2pc(0x84E0DD), m_sz)?; // PLM EEDB (Missile Tank)
self.rom.write_u16(snes2pc(0x84E4A6), m_sz)?; // PLM EF2F (Missile, Chozo)
self.rom.write_u16(snes2pc(0x84E977), m_sz)?; // PLM EF83 (Missile, Shot Block)
self.rom.write_u16(snes2pc(0x88E71B), m_sz)?; // Credits, Missile Item % Divisor
}

if self.settings.item_progression_settings.super_size != 5 {
let s_sz = self.settings.item_progression_settings.super_size as isize;

self.rom.write_u16(snes2pc(0x84E102), s_sz)?; // PLM EEDF (Super Tank)
self.rom.write_u16(snes2pc(0x84E4D8), s_sz)?; // PLM EF33 (Super, Chozo)
self.rom.write_u16(snes2pc(0x84E9AF), s_sz)?; // PLM EF87 (Super, Shot Block)
self.rom.write_u16(snes2pc(0x88E71D), s_sz)?; // Credits, Super Item % Divisor
}

if self.settings.item_progression_settings.powerbomb_size != 5 {
let p_sz = self.settings.item_progression_settings.powerbomb_size as isize;

self.rom.write_u16(snes2pc(0x84E127), p_sz)?; // PLM EEE3 (PB Tank)
self.rom.write_u16(snes2pc(0x84E50A), p_sz)?; // PLM EF37 (PB, Chozo)
self.rom.write_u16(snes2pc(0x84E9E7), p_sz)?; // PLM EF8B (PB, Shot Block)
self.rom.write_u16(snes2pc(0x88E71F), p_sz)?; // Credits, Power Bomb Item % Divisor
}

Ok(())
}

Expand Down Expand Up @@ -2247,6 +2274,11 @@ impl Patcher<'_> {
let mut starting_reserves = 0;
let mut starting_supers = 0;
let mut starting_powerbombs = 0;

if starting_energy < 1 {
bail!("E-Tank size is too low".to_string());
}

let item_bitmask_map: HashMap<Item, u16> = vec![
(Item::Varia, 0x0001),
(Item::SpringBall, 0x0002),
Expand Down Expand Up @@ -2284,15 +2316,18 @@ impl Patcher<'_> {
} else if beam_bitmask_map.contains_key(&x.item) {
beam_mask |= beam_bitmask_map[&x.item];
} else if x.item == Item::Missile {
starting_missiles += (x.count as isize) * 5;
starting_missiles += (x.count as isize)
* (self.settings.item_progression_settings.missile_size as isize);
} else if x.item == Item::ETank {
starting_energy += (x.count as isize) * 100;
} else if x.item == Item::ReserveTank {
starting_reserves += (x.count as isize) * 100;
} else if x.item == Item::Super {
starting_supers += (x.count as isize) * 5;
starting_supers += (x.count as isize)
* (self.settings.item_progression_settings.super_size as isize);
} else if x.item == Item::PowerBomb {
starting_powerbombs += (x.count as isize) * 5;
starting_powerbombs += (x.count as isize)
* (self.settings.item_progression_settings.powerbomb_size as isize);
}
}
let beam_equipped_mask = if beam_mask & 0x000C == 0x000C {
Expand Down
Loading
Loading