Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Minecraft updates #13

Merged
merged 77 commits into from
May 15, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
c59267e
Minecraft locations, items, and generation without logic
Apr 12, 2021
ef2a067
added id lookup for minecraft
Apr 12, 2021
96cf422
typing import fix in minecraft/Items.py
Apr 12, 2021
6b21400
fix 2
Apr 12, 2021
1fe67c1
implementing Minecraft options and hard/postgame advancement exclusion
Apr 13, 2021
e209053
first logic pass (75/80)
Apr 13, 2021
5830182
logic pass 2 and proper completion conditions
Apr 13, 2021
2e149c4
added insane difficulty pool, modified method of excluding item pools…
Apr 13, 2021
8879c27
bump network_data_package version
Apr 13, 2021
959ec03
minecraft testing framework
espeon65536 Apr 13, 2021
f0bdc3e
switch Ancient Debris to Netherite Scrap to avoid advancement trigger…
espeon65536 Apr 13, 2021
332c6ea
Testing now functions, split tests up by advancement pane, added some…
espeon65536 Apr 14, 2021
1f7092e
Newer testing framework: every advancement gets its own function, for…
espeon65536 Apr 14, 2021
36171dc
fixed logic for The End... Again...
espeon65536 Apr 14, 2021
08c6a6d
changed option names to "include_hard_advancements" etc.
espeon65536 Apr 14, 2021
576f5e0
village/pillager-related advancements now require can_adventure: weap…
espeon65536 Apr 14, 2021
2799493
a few minecraft tests
espeon65536 Apr 14, 2021
7b702a4
rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
espeon65536 Apr 14, 2021
6bcd7f2
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 Apr 15, 2021
e9ab15b
additional MC tests
espeon65536 Apr 15, 2021
e4fcb34
more tests, mostly nether-related tests
espeon65536 Apr 15, 2021
303ecc3
more tests, removed anvil path for Two Birds One Arrow
espeon65536 Apr 17, 2021
de97a5f
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 Apr 17, 2021
d351564
include Minecraft slot data, and a world seed for each Minecraft play…
espeon65536 Apr 17, 2021
51e407a
Added new items: ender pearls, lapis, porkchops
espeon65536 Apr 18, 2021
b8b63d4
All remaining Minecraft tests
espeon65536 Apr 18, 2021
c55f810
formatting of Minecraft tests and logic for better readability
espeon65536 Apr 18, 2021
d440b03
require Wither kill for Monsters Hunted
espeon65536 Apr 18, 2021
f1da6e6
properly removed 8 Emeralds item from item pool
espeon65536 Apr 18, 2021
d77eb51
enchanting required for wither; fishing rod required for water breath…
espeon65536 Apr 19, 2021
60bd580
Added 12 new advancements (ported from old achievement system)
espeon65536 Apr 19, 2021
c23053a
renamed "On a Rail" for consistency with modern advancements
espeon65536 Apr 19, 2021
4c6c996
tests for the new advancements
espeon65536 Apr 19, 2021
979cbc3
moved slot_data generation for minecraft into worlds/minecraft/__init…
espeon65536 Apr 20, 2021
ac05fe0
output minecraft options in the spoiler log
espeon65536 Apr 20, 2021
3f21d5e
modified advancement goal values for new advancements
espeon65536 Apr 23, 2021
939a887
make non-native Minecraft items appear as Shovel in ALttP, and unknow…
espeon65536 Apr 24, 2021
d9b86ec
fixed glowstone block logic for Not Quite Nine Lives
espeon65536 Apr 25, 2021
9d9706e
setup for shuffling MC structures: building ER world and shuffling re…
espeon65536 Apr 25, 2021
22395b7
ensured Nether Fortresses can't be placed in the End
espeon65536 Apr 25, 2021
6cdae20
finished logic for structure randomization
espeon65536 Apr 25, 2021
7964ac5
fixed nonnative items always showing up as Hammers in ALttP shops
espeon65536 Apr 25, 2021
9288245
output minecraft structure info in the spoiler
espeon65536 Apr 25, 2021
d7a8c99
generate .apmc file for communication with MC client
espeon65536 Apr 26, 2021
e6a7797
fixed structure rando always using the same seed
espeon65536 Apr 26, 2021
c65fe90
move stuff to worlds/minecraft/Regions.py
espeon65536 Apr 26, 2021
b5fb0dc
make output apmc file have consistent name with other files
espeon65536 Apr 26, 2021
d4dc71e
added minecraft bottle macro; fixed tests imports
espeon65536 Apr 26, 2021
d601e23
generalizing MC region generation
espeon65536 Apr 28, 2021
984c66c
restructured structure shuffling in preparation for structure plando
espeon65536 Apr 29, 2021
7df81bc
only output structure rando info in spoiler if they are shuffled
espeon65536 Apr 29, 2021
857d7ec
Force structure rando to always be off, for the stable release
espeon65536 Apr 29, 2021
6406460
added Minecraft options to player settings
espeon65536 Apr 29, 2021
a6aaabd
formally added combat_difficulty as an option
espeon65536 Apr 29, 2021
734cd80
Added Ender Dragon into playthrough, cleaned up goal map
espeon65536 Apr 29, 2021
fcc67cb
Added new difficulties: Easy, Normal, Hard combat
espeon65536 Apr 29, 2021
3808357
moved .apmc generation time to prevent outputs on failed generation
espeon65536 Apr 29, 2021
4df7edf
updated tests for new combat logic
espeon65536 Apr 29, 2021
64610b9
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 Apr 29, 2021
5ed09ac
Fixed bug causing generation to fail; removed Nether Fortress event s…
espeon65536 Apr 29, 2021
0250133
moved all MC-specific functions into gen_minecraft
espeon65536 Apr 30, 2021
436ae77
renamed "logic_version" to "client_version"
espeon65536 Apr 30, 2021
79ca072
bug fixes
espeon65536 May 1, 2021
e488eb2
moved link_minecraft_regions into minecraft init, left create_regions…
espeon65536 May 1, 2021
d7f9146
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 May 2, 2021
62233f3
added seed_name, player_name, client_version to apmc file
espeon65536 May 4, 2021
beca1fc
reenabled structure shuffle
espeon65536 May 4, 2021
4b8425b
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 May 5, 2021
d955a27
added entrance tests for minecraft
espeon65536 May 5, 2021
8871a2a
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 May 10, 2021
2501774
Minecraft logic updates
espeon65536 May 13, 2021
ce0ac4d
embed all apmc info into slot_data
espeon65536 May 13, 2021
391a917
updated MC tests for logic changes
espeon65536 May 13, 2021
182c736
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 May 14, 2021
80251be
put apmc into zipfile
espeon65536 May 14, 2021
6c590c7
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 May 15, 2021
d5bfd6d
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
espeon65536 May 15, 2021
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
Prev Previous commit
Next Next commit
finished logic for structure randomization
  • Loading branch information
espeon65536 committed Apr 25, 2021
commit 6cdae20937e537c2e9ca45f67f0b09acf47a230c
33 changes: 18 additions & 15 deletions BaseClasses.py
Original file line number Diff line number Diff line change
Expand Up @@ -814,6 +814,9 @@ def can_get_glitched_speed_dw(self, player: int):
def has_iron_ingots(self, player: int):
return self.has('Progressive Tools', player) and self.has('Ingot Crafting', player)

def has_gold_ingots(self, player: int):
return self.has('Ingot Crafting', player) and (self.has('Progressive Tools', player, 2) or self.can_reach('The Nether', 'Region', player))

def has_diamond_pickaxe(self, player: int):
return self.has('Progressive Tools', player, 3) and self.has_iron_ingots(player)

Expand All @@ -826,32 +829,32 @@ def can_enchant(self, player: int):
def can_use_anvil(self, player: int):
return self.has('Enchanting', player) and self.has('Resource Blocks', player) and self.has_iron_ingots(player)

def can_adventure(self, player: int):
return self.has('Progressive Weapons', player) and (self.has('Ingot Crafting', player) or self.has('Campfire', player)) # logic for finding villages and pillager outposts
def can_adventure(self, player: int): # kill basic enemies, cook food
return self.has('Progressive Weapons', player) and (self.has('Ingot Crafting', player) or self.has('Campfire', player))

def basic_combat(self, player: int):
return self.has('Progressive Weapons', player) and self.has('Progressive Armor', player) and self.has_iron_ingots(player)

def enter_nether(self, player: int):
return self.has("Flint and Steel", player) and (self.has("Bucket", player) or self.has("Progressive Tools", player, 3)) and self.has_iron_ingots(player)
def complete_raid(self, player: int):
return self.can_reach('Village', 'Region', player) and self.can_reach('Pillager Outpost', 'Region', player) and self.basic_combat(player) and self.has('Progressive Weapons', player, 2)

def enter_fortress(self, player: int):
return self.enter_nether(player) and self.has('Progressive Armor', player) and self.has('Progressive Weapons', player)
def fortress_loot(self, player: int): # saddles, blaze rods, wither skulls
return self.has('Nether Fortress Entry', player) and self.basic_combat(player) # needs an event because this is part of End Portal access logic

def can_brew_potions(self, player: int):
return self.enter_fortress(player) and self.has('Brewing', player) and self.has('Bottles', player)
return self.fortress_loot(player) and self.has('Brewing', player) and self.has('Bottles', player) and self.has('Ingot Crafting', player)

def can_piglin_trade(self, player: int):
return self.enter_nether(player) and self.has('Ingot Crafting', player)
return self.has_gold_ingots(player) and (self.can_reach('The Nether', 'Region', player) or self.can_reach('Bastion Remnant', 'Region', player))

def can_kill_wither(self, player: int):
return self.enter_fortress(player) and self.has("Progressive Weapons", player, 3) and self.has("Progressive Armor", player, 2) and self.can_brew_potions(player) and self.can_enchant(player)
def can_kill_wither(self, player: int): # need skulls and soul sand
return self.fortress_loot(player) and (self.can_reach('The Nether', 'Region', player) or self.can_piglin_trade(player)) and self.has("Progressive Weapons", player, 3) and self.has("Progressive Armor", player, 2) and self.can_brew_potions(player) and self.can_enchant(player)

def enter_stronghold(self, player: int):
return self.enter_fortress(player) and self.has('Brewing', player) and self.has('3 Ender Pearls', player)

def enter_end(self, player: int):
return self.enter_stronghold(player) and self.has('3 Ender Pearls', player, 4)
return self.fortress_loot(player) and self.has('Brewing', player) and self.has('3 Ender Pearls', player)

def can_kill_ender_dragon(self, player: int):
return self.enter_end(player) and self.has('Progressive Weapons', player, 2) and self.has('Archery', player)
return self.has('Progressive Weapons', player, 2) and self.has('Progressive Armor', player) and self.has('Archery', player)


def collect(self, item: Item, event: bool = False, location: Location = None) -> bool:
Expand Down
37 changes: 23 additions & 14 deletions test/minecraft/TestAdvancements.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def test_42005(self):
'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor',
'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']],
["Free the End", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools',
'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor',
'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor',
'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']],
])

Expand Down Expand Up @@ -189,10 +189,12 @@ def test_42014(self):
["Hot Tourist Destinations", False, [], ['Ingot Crafting']],
["Hot Tourist Destinations", False, [], ['Flint and Steel']],
["Hot Tourist Destinations", False, [], ['Progressive Tools']],
["Hot Tourist Destinations", False, [], ['Progressive Weapons']],
["Hot Tourist Destinations", False, [], ['Progressive Armor']],
["Hot Tourist Destinations", False, [], ['Fishing Rod']],
["Hot Tourist Destinations", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']],
["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Fishing Rod']],
["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Fishing Rod']],
["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Bucket', 'Fishing Rod']],
["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Fishing Rod']],
])

def test_42015(self):
Expand All @@ -201,10 +203,12 @@ def test_42015(self):
["This Boat Has Legs", False, [], ['Ingot Crafting']],
["This Boat Has Legs", False, [], ['Flint and Steel']],
["This Boat Has Legs", False, [], ['Progressive Tools']],
["This Boat Has Legs", False, [], ['Progressive Weapons']],
["This Boat Has Legs", False, [], ['Progressive Armor']],
["This Boat Has Legs", False, [], ['Fishing Rod']],
["This Boat Has Legs", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']],
["This Boat Has Legs", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Fishing Rod']],
["This Boat Has Legs", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Fishing Rod']],
["This Boat Has Legs", True, ['Ingot Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Bucket', 'Fishing Rod']],
["This Boat Has Legs", True, ['Ingot Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Fishing Rod']],
])

def test_42016(self):
Expand Down Expand Up @@ -434,9 +438,11 @@ def test_42034(self):
["War Pigs", False, [], ['Ingot Crafting']],
["War Pigs", False, [], ['Flint and Steel']],
["War Pigs", False, [], ['Progressive Tools']],
["War Pigs", False, [], ['Progressive Weapons']],
["War Pigs", False, [], ['Progressive Armor']],
["War Pigs", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']],
["War Pigs", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']],
["War Pigs", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']],
["War Pigs", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor']],
["War Pigs", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor']],
])

def test_42035(self):
Expand Down Expand Up @@ -626,9 +632,10 @@ def test_42050(self):
self.run_location_tests([
["Voluntary Exile", False, []],
["Voluntary Exile", False, [], ['Progressive Weapons']],
["Voluntary Exile", False, [], ['Campfire', 'Ingot Crafting']],
["Voluntary Exile", True, ['Progressive Weapons', 'Campfire']],
["Voluntary Exile", True, ['Progressive Weapons', 'Ingot Crafting']],
["Voluntary Exile", False, [], ['Progressive Armor']],
["Voluntary Exile", False, [], ['Progressive Tools']],
["Voluntary Exile", False, [], ['Ingot Crafting']],
["Voluntary Exile", True, ['Progressive Tools', 'Progressive Armor', 'Progressive Weapons', 'Ingot Crafting']],
])

def test_42051(self):
Expand Down Expand Up @@ -717,9 +724,10 @@ def test_42058(self):
["Those Were the Days", False, [], ['Ingot Crafting']],
["Those Were the Days", False, [], ['Flint and Steel']],
["Those Were the Days", False, [], ['Progressive Tools']],
["Those Were the Days", False, [], ['Progressive Weapons']],
["Those Were the Days", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']],
["Those Were the Days", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']],
["Those Were the Days", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']],
["Those Were the Days", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons']],
["Those Were the Days", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons']],
])

def test_42059(self):
Expand Down Expand Up @@ -875,9 +883,10 @@ def test_42071(self):
["A Terrible Fortress", False, [], ['Ingot Crafting']],
["A Terrible Fortress", False, [], ['Flint and Steel']],
["A Terrible Fortress", False, [], ['Progressive Tools']],
["A Terrible Fortress", False, [], ['Progressive Weapons']],
["A Terrible Fortress", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']],
["A Terrible Fortress", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']],
["A Terrible Fortress", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']],
["A Terrible Fortress", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons']],
["A Terrible Fortress", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons']],
])

def test_42072(self):
Expand Down
4 changes: 3 additions & 1 deletion test/minecraft/TestMinecraft.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from test.TestBase import TestBase
from BaseClasses import MultiWorld
from worlds.minecraft import minecraft_create_regions, minecraft_gen_item_pool
from worlds.minecraft import minecraft_create_regions, minecraft_gen_item_pool, link_minecraft_structures
from worlds.minecraft.Rules import set_rules
from worlds.minecraft.Items import MinecraftItem, item_table
from Options import AdvancementGoal
Expand Down Expand Up @@ -31,7 +31,9 @@ def setUp(self):
for pool in exclusion_pools:
setattr(self.world, f"include_{pool}_advancements", [False, False])
setattr(self.world, "advancement_goal", [0, AdvancementGoal(value=1)])
setattr(self.world, "shuffle_structures", [False, False])
minecraft_create_regions(self.world, 1)
link_minecraft_structures(self.world, 1)
minecraft_gen_item_pool(self.world, 1)
set_rules(self.world, 1)

Expand Down
5 changes: 3 additions & 2 deletions worlds/minecraft/Items.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ def __init__(self, name: str, progression: bool, code: int, player: int):
"16 Porkchops": ItemData(45031, False),
"8 Gold Ore": ItemData(45032, False),
"Rotten Flesh": ItemData(45033, False),
"Single Arrow": ItemData(45034, False)
"Single Arrow": ItemData(45034, False),
"Nether Fortress Entry": ItemData(0, True)
}

# If not listed here then has frequency 1
Expand All @@ -69,4 +70,4 @@ def __init__(self, name: str, progression: bool, code: int, player: int):
"Single Arrow": 0
}

lookup_id_to_name: typing.Dict[int, str] = {data.code: item_name for item_name, data in item_table.items()}
lookup_id_to_name: typing.Dict[int, str] = {data.code: item_name for item_name, data in item_table.items() if data.code}
17 changes: 12 additions & 5 deletions worlds/minecraft/Locations.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ def __init__(self, player: int, name: str, address: int, parent):
super().__init__(player, name, address, parent)

advancement_table = {
"Who is Cutting Onions?": AdvData(42000, 'The Nether'), # nether or bastion?
"Oh Shiny": AdvData(42001, 'The Nether'), # nether or bastion?
"Who is Cutting Onions?": AdvData(42000, 'Overworld'),
"Oh Shiny": AdvData(42001, 'Overworld'),
"Suit Up": AdvData(42002, 'Overworld'),
"Very Very Frightening": AdvData(42003, 'Village'),
"Hot Stuff": AdvData(42004, 'Overworld'),
Expand Down Expand Up @@ -74,7 +74,7 @@ def __init__(self, player: int, name: str, address: int, parent):
"Hidden in the Depths": AdvData(42060, 'The Nether'),
"Beaconator": AdvData(42061, 'Nether Fortress'),
"Withering Heights": AdvData(42062, 'Nether Fortress'),
"A Balanced Diet": AdvData(42063, 'Overworld'),
"A Balanced Diet": AdvData(42063, 'Village'),
"Subspace Bubble": AdvData(42064, 'The Nether'),
"Husbandry": AdvData(42065, 'Overworld'),
"Country Lode, Take Me Home": AdvData(42066, 'The Nether'),
Expand Down Expand Up @@ -102,7 +102,9 @@ def __init__(self, player: int, name: str, address: int, parent):
"When Pigs Fly": AdvData(42088, 'Overworld'),
"Overkill": AdvData(42089, 'Nether Fortress'),
"Librarian": AdvData(42090, 'Overworld'),
"Overpowered": AdvData(42091, 'Overworld')
"Overpowered": AdvData(42091, 'Overworld'),

"Nether Fortress Entry": AdvData(0, 'Nether Fortress')
}

exclusion_table = {
Expand Down Expand Up @@ -131,4 +133,9 @@ def __init__(self, player: int, name: str, address: int, parent):
}


lookup_id_to_name: typing.Dict[int, str] = {loc_data.id: loc_name for loc_name, loc_data in advancement_table.items()}
events_table = {
"Nether Fortress Entry": "Nether Fortress Entry"
}


lookup_id_to_name: typing.Dict[int, str] = {loc_data.id: loc_name for loc_name, loc_data in advancement_table.items() if loc_data.id}
Loading