mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
## What is this fixing or adding? Adds Bombless Start option, along with proper bomb logic. This involves updating `can_kill_most_things` to include checking how many bombs can be held. Many places where the ability to kill enemies was assumed, now have logic. This fixes some possible existing logic issues, for example: Mini Moldorm cave checks currently are always in logic despite the fact that on expert enemy health it would require 12 bombs to kill each mini moldorm. Overhauls options, pulling them out of core and in particular making large changes to how the shop options work. Co-authored-by: espeon65536 <81029175+espeon65536@users.noreply.github.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: Bondo <38083232+BadmoonzZ@users.noreply.github.com> Co-authored-by: espeon65536 <espeon65536@gmail.com> Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
45 lines
3.0 KiB
Python
45 lines
3.0 KiB
Python
from worlds.alttp.Dungeons import create_dungeons
|
|
from worlds.alttp.EntranceShuffle import connect_entrance, Inverted_LW_Entrances, Inverted_LW_Dungeon_Entrances, Inverted_LW_Single_Cave_Doors, Inverted_Old_Man_Entrances, Inverted_DW_Entrances, Inverted_DW_Dungeon_Entrances, Inverted_DW_Single_Cave_Doors, \
|
|
Inverted_LW_Entrances_Must_Exit, Inverted_LW_Dungeon_Entrances_Must_Exit, Inverted_Bomb_Shop_Multi_Cave_Doors, Inverted_Bomb_Shop_Single_Cave_Doors, Blacksmith_Single_Cave_Doors, Inverted_Blacksmith_Multi_Cave_Doors
|
|
from worlds.alttp.InvertedRegions import create_inverted_regions
|
|
from worlds.alttp.ItemPool import difficulties
|
|
from worlds.alttp.Rules import set_inverted_big_bomb_rules
|
|
from worlds.alttp.test import LTTPTestBase
|
|
|
|
|
|
class TestInvertedBombRules(LTTPTestBase):
|
|
|
|
def setUp(self):
|
|
self.world_setup()
|
|
self.multiworld.difficulty_requirements[1] = difficulties['normal']
|
|
self.multiworld.mode[1].value = 2
|
|
create_inverted_regions(self.multiworld, 1)
|
|
self.multiworld.worlds[1].create_dungeons()
|
|
|
|
#TODO: Just making sure I haven't missed an entrance. It would be good to test the rules make sense as well.
|
|
def testInvertedBombRulesAreComplete(self):
|
|
entrances = list(Inverted_LW_Entrances + Inverted_LW_Dungeon_Entrances + Inverted_LW_Single_Cave_Doors + Inverted_Old_Man_Entrances + Inverted_DW_Entrances + Inverted_DW_Dungeon_Entrances + Inverted_DW_Single_Cave_Doors)
|
|
must_exits = list(Inverted_LW_Entrances_Must_Exit + Inverted_LW_Dungeon_Entrances_Must_Exit)
|
|
for entrance_name in (entrances + must_exits):
|
|
if entrance_name not in ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)']:
|
|
entrance = self.multiworld.get_entrance(entrance_name, 1)
|
|
connect_entrance(self.multiworld, entrance_name, 'Inverted Big Bomb Shop', 1)
|
|
set_inverted_big_bomb_rules(self.multiworld, 1)
|
|
entrance.connected_region.entrances.remove(entrance)
|
|
entrance.connected_region = None
|
|
|
|
def testInvalidEntrancesAreNotUsed(self):
|
|
entrances = list(Inverted_Blacksmith_Multi_Cave_Doors + Blacksmith_Single_Cave_Doors + Inverted_Bomb_Shop_Multi_Cave_Doors + Inverted_Bomb_Shop_Single_Cave_Doors)
|
|
invalid_entrances = ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)', 'Pyramid Fairy']
|
|
for invalid_entrance in invalid_entrances:
|
|
self.assertNotIn(invalid_entrance, entrances)
|
|
|
|
def testInvalidEntrances(self):
|
|
for entrance_name in ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)']:
|
|
entrance = self.multiworld.get_entrance(entrance_name, 1)
|
|
connect_entrance(self.multiworld, entrance_name, 'Inverted Big Bomb Shop', 1)
|
|
with self.assertRaises(Exception):
|
|
set_inverted_big_bomb_rules(self.multiworld, 1)
|
|
entrance.connected_region.entrances.remove(entrance)
|
|
entrance.connected_region = None
|