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

New Game Implementation: Wargroove 2 #3730

Open
wants to merge 114 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
8dafcda
KDL3: fix invalid inno_setup components and deathlink messages (#2922)
FlySniper Aug 3, 2024
3a3fd19
Wargroove 2: Squash commit. Update to main.
FlySniper Aug 3, 2024
aab96bb
Wargroove 2: Updated README.md and CODEOWNERS to include Wargroove 2.
FlySniper Aug 3, 2024
2f09b58
Wargroove 2: Fixed erroneous adjustments to BaseClasses.py
FlySniper Aug 3, 2024
8f60ee0
Update worlds/wargroove2/Items.py
FlySniper Aug 8, 2024
79e2c92
Update worlds/wargroove2/__init__.py
FlySniper Aug 8, 2024
b9af82a
Update worlds/wargroove2/__init__.py
FlySniper Aug 8, 2024
8208d15
Update worlds/wargroove2/Rules.py
FlySniper Aug 8, 2024
ea9ddb0
Update worlds/wargroove2/docs/en_Wargroove 2.md
FlySniper Aug 8, 2024
746cdf5
Update worlds/wargroove2/docs/wargroove2_en.md
FlySniper Aug 8, 2024
4e8d13a
Wargroove 2: implemented PR changes
FlySniper Aug 8, 2024
9f2000b
Wargroove 2: Fixed tests. Removed debug line.
FlySniper Aug 8, 2024
89be9fb
Update worlds/wargroove2/Levels.py
FlySniper Aug 9, 2024
28ab661
Update worlds/wargroove2/Levels.py
FlySniper Aug 9, 2024
44c81d7
Update worlds/wargroove2/Levels.py
FlySniper Aug 9, 2024
ad718fb
Update worlds/wargroove2/Levels.py
FlySniper Aug 9, 2024
a0e8b4c
Update worlds/wargroove2/Locations.py
FlySniper Aug 9, 2024
d24f573
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
6baf1b9
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
72890d0
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
168f619
Update worlds/wargroove2/Locations.py
FlySniper Aug 9, 2024
3711650
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
f5d50d6
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
e7a5ec8
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
e22621c
Update worlds/wargroove2/Regions.py
FlySniper Aug 9, 2024
a4ee924
Update worlds/wargroove2/Rules.py
FlySniper Aug 9, 2024
a8a0ca7
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
6498e6b
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
1735e4e
Update worlds/wargroove2/__init__.py
FlySniper Aug 9, 2024
876e5e3
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
FlySniper Aug 9, 2024
e736be0
Wargroove 2: Many more PR fixes. Tested by generating several WG2 gam…
FlySniper Aug 9, 2024
1e3bbbd
Wargroove 2: Build fixes.
FlySniper Aug 9, 2024
c511b70
Merge branch 'main' into wargroove2
FlySniper Aug 11, 2024
24fcb0f
Merge branch 'main' into wargroove2
FlySniper Aug 13, 2024
121a74a
Merge branch 'main' into wargroove2
FlySniper Aug 16, 2024
9849245
Merge branch 'main' into wargroove2
FlySniper Aug 20, 2024
79c5e07
Wargroove 2: Fixed python 3.8 tests again?!
FlySniper Aug 20, 2024
7def399
Merge branch 'main' into wargroove2
FlySniper Aug 23, 2024
01be6c2
Wargroove 2: Options for Multiple Locations per Check
FlySniper Sep 2, 2024
f626cbc
Various suggestions/changes
Exempt-Medic Sep 2, 2024
1540017
Forgot a newline
Exempt-Medic Sep 2, 2024
dbf8bcc
Merge pull request #5 from Exempt-Medic/wargroove2
FlySniper Sep 2, 2024
9f33abe
Update README.md
FlySniper Sep 2, 2024
57d334c
Wargroove 2: removed _get_slot_data method since most of it's values …
FlySniper Sep 2, 2024
7d893df
Merge branch 'wargroove2' of https://github.com/FlySniper/Archipelago…
FlySniper Sep 2, 2024
3171c72
Update worlds/wargroove2/docs/en_Wargroove 2.md
FlySniper Sep 2, 2024
89792f8
Update worlds/wargroove2/docs/en_Wargroove 2.md
FlySniper Sep 2, 2024
f7379ef
Update worlds/wargroove2/docs/en_Wargroove 2.md
FlySniper Sep 2, 2024
c6eb49a
Update worlds/wargroove2/docs/wargroove2_en.md
FlySniper Sep 2, 2024
d88a929
Wargroove 2: Documentation updates.
FlySniper Sep 2, 2024
98cd4d7
Update worlds/wargroove2/docs/wargroove2_en.md
FlySniper Sep 3, 2024
ab9451c
Update worlds/wargroove2/docs/wargroove2_en.md
FlySniper Sep 3, 2024
ce84725
Merge branch 'main' into wargroove2
FlySniper Sep 3, 2024
705694c
Wargroove 2: Eliminated a bunch of warnings from client.py
FlySniper Sep 3, 2024
78c94c9
Wargroove 2: Refactored level lists to be static instead of per Wargr…
FlySniper Sep 3, 2024
5fbcbb8
Update worlds/wargroove2/Regions.py
FlySniper Sep 3, 2024
14eae24
Update worlds/wargroove2/Rules.py
FlySniper Sep 3, 2024
4146b74
Wargroove 2: Fixed several warnings with the WG2 client.
FlySniper Sep 3, 2024
0f58bc1
Merge branch 'wargroove2' of https://github.com/FlySniper/Archipelago…
FlySniper Sep 3, 2024
7d21172
Wargroove 2: Fixed an issue where the level seed option would produce…
FlySniper Sep 4, 2024
461e202
Merge branch 'main' into wargroove2
FlySniper Sep 5, 2024
1e46141
Wargroove 2: Merge PR changes into 1.1
FlySniper Sep 5, 2024
618e39e
Wargroove 2: 1.1 working with the new PR changes.
FlySniper Sep 5, 2024
ef456ac
Merge branch 'ArchipelagoMW:main' into wargroove2-1.1
FlySniper Oct 4, 2024
861c332
Wargroove 2: 4 new maps. Random terrain generation in mod.
FlySniper Oct 11, 2024
118877d
Wargroove 2: Adjusted several levels
FlySniper Oct 14, 2024
04c2a9b
Merge branch 'ArchipelagoMW:main' into wargroove2-1.1
FlySniper Nov 15, 2024
996bcf7
Wargroove 2: Updated doc to match 1.1 changes.
FlySniper Nov 15, 2024
48e2177
Merge branch 'wargroove2-1.1' into wargroove2
FlySniper Nov 15, 2024
1c2a84a
Wargroove 2: Removed unnecessary RegionFilter method. Changed Objecti…
FlySniper Nov 16, 2024
542fca5
Merge branch 'main' into wargroove2
FlySniper Nov 16, 2024
42b4e19
Merge branch 'main' into wargroove2
FlySniper Nov 19, 2024
cbd04af
Wargroove 2: Merge main and fix conflicts in README.md
FlySniper Dec 14, 2024
1b246a5
Wargroove 2: Fix merge conflicts in README.md
FlySniper Jan 4, 2025
39cea5e
Remove redundant region access checks from location rules
Mysteryem Jan 6, 2025
e0eac16
Create player-specific location rules once instead of on every call
Mysteryem Jan 6, 2025
8f72f4b
Re-use the same rule for a location and its extras
Mysteryem Jan 6, 2025
79d579e
Only combine rules when there is a rule to combine
Mysteryem Jan 6, 2025
440ee47
Rename confusing `extras` variables to `total_locations`
Mysteryem Jan 6, 2025
4e26d04
Pass Wargroove2World to `define_region` for better options type hints
Mysteryem Jan 6, 2025
67ce340
Remove unused `operator` argument from `set_region_exit_rules`
Mysteryem Jan 6, 2025
16699e4
Replace exit_rule lambda and generate with function and for loop
Mysteryem Jan 6, 2025
12a4736
Replace mutable default argument in Wargroove2Level.__init__
Mysteryem Jan 6, 2025
816f55d
Add type hints for `Wargroove2Level.location_rules`
Mysteryem Jan 6, 2025
7280086
Replace lists in rules with tuples
Mysteryem Jan 6, 2025
d9fd0a5
Don't add rules when there are none
Mysteryem Jan 6, 2025
d24bc91
Remove unused `victory_locations` argument
Mysteryem Jan 6, 2025
2701c17
Crash on trying to get the ID for a non-existent location
Mysteryem Jan 6, 2025
8ba3788
Refactor use of `loc_id` in creation and rule setting of Extra locations
Mysteryem Jan 6, 2025
dc34062
Cleanup: Use list comprehension instead of list(generator)
Mysteryem Jan 6, 2025
47018c3
Prefer self.random to self.multiworld.random
Mysteryem Jan 6, 2025
2526dda
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago i…
FlySniper Jan 8, 2025
c964972
Wargroove 2: PR suggestions
FlySniper Jan 8, 2025
2cbfbba
Update worlds/wargroove2/client.py
FlySniper Jan 8, 2025
b54b04c
Update worlds/wargroove2/client.py
FlySniper Jan 8, 2025
2c6f180
Update worlds/wargroove2/client.py
FlySniper Jan 8, 2025
49a1b59
Update worlds/wargroove2/Rules.py
FlySniper Jan 9, 2025
1d94e5d
Update worlds/wargroove2/client.py
FlySniper Jan 9, 2025
2e078b9
Update worlds/wargroove2/__init__.py
FlySniper Jan 9, 2025
abcc648
Update worlds/wargroove2/client.py
FlySniper Jan 9, 2025
e0a5d63
Update worlds/wargroove2/client.py
FlySniper Jan 9, 2025
fa23d08
Update worlds/wargroove2/client.py
FlySniper Jan 9, 2025
1e62367
Update worlds/wargroove2/client.py
FlySniper Jan 9, 2025
8805921
Wargroove 2: PR fixes
FlySniper Jan 9, 2025
e5e4989
Wargroove 2: PR fixes
FlySniper Jan 9, 2025
806de64
Wargroove 2: PR fixes
FlySniper Jan 9, 2025
d8dd35c
Wargroove 2: PR fixes
FlySniper Jan 9, 2025
00a9f26
Wargroove 2: PR Fixes
FlySniper Jan 9, 2025
91e1b7f
Wargroove 2: PR Fixes
FlySniper Jan 10, 2025
c5d170f
Merge branch 'main' into wargroove2
FlySniper Jan 10, 2025
10eeb68
Merge branch 'main' into wargroove2
FlySniper Jan 15, 2025
4520271
Wargroove 2: Removed client from root. script_name removed when start…
FlySniper Jan 15, 2025
0871462
Wargroove 2: Rename extras to total_locations.
FlySniper Jan 20, 2025
7b9ebef
Merge branch 'ArchipelagoMW:main' into wargroove2
FlySniper Feb 12, 2025
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
1 change: 1 addition & 0 deletions README.md
FlySniper marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ Currently, the following games are supported:
* Yu-Gi-Oh! Ultimate Masters: World Championship Tournament 2006
* A Hat in Time
* Old School Runescape
* Wargroove 2
FlySniper marked this conversation as resolved.
Show resolved Hide resolved

For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/).
Downloads can be found at [Releases](https://github.com/ArchipelagoMW/Archipelago/releases), including compiled
Expand Down
11 changes: 11 additions & 0 deletions Wargroove2Client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from __future__ import annotations

import ModuleUpdate
ModuleUpdate.update()

from worlds.wargroove2.client import launch
import Utils

if __name__ == "__main__":
Utils.init_logging("Wargroove2Client", exception_logger="Client")
launch()
3 changes: 3 additions & 0 deletions docs/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,9 @@
# Wargroove
/worlds/wargroove/ @FlySniper

# Wargroove 2
/worlds/wargroove2/ @FlySniper

# The Witness
/worlds/witness/ @NewSoupVi @blastron

Expand Down
138 changes: 138 additions & 0 deletions worlds/wargroove2/Items.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
from BaseClasses import Item, ItemClassification
from typing import Dict, List, NamedTuple, Optional

PROGRESSION = ItemClassification.progression
PROGRESSION_SKIP_BALANCING = ItemClassification.progression_skip_balancing
USEFUL = ItemClassification.useful
FILLER = ItemClassification.filler


class ItemData(NamedTuple):
code: Optional[int]
type: str
classification: ItemClassification = PROGRESSION


item_table: Dict[str, ItemData] = {
# Units
'Spearman': ItemData(252000, 'Unit'),
'Wagon': ItemData(252001, 'Unit'),
'Mage': ItemData(252002, 'Unit'),
'Archer': ItemData(252003, 'Unit'),
'Knight': ItemData(252004, 'Unit'),
'Ballista': ItemData(252005, 'Unit'),
'Trebuchet': ItemData(252006, 'Unit'),
'Golem': ItemData(252007, 'Unit'),
'Air Trooper': ItemData(252008, 'Unit'),
'Harpy': ItemData(252009, 'Unit'),
'Witch': ItemData(252010, 'Unit'),
'Dragon': ItemData(252011, 'Unit'),
'Balloon': ItemData(252012, 'Unit'),
'Barge': ItemData(252013, 'Unit'),
'River Boat': ItemData(252014, 'Unit'),
'Merfolk': ItemData(252015, 'Unit'),
'Turtle': ItemData(252016, 'Unit'),
'Harpoon Ship': ItemData(252017, 'Unit'),
'Warship': ItemData(252018, 'Unit'),
'Frog': ItemData(252019, 'Unit'),
'Kraken': ItemData(252020, 'Unit'),
'Thief': ItemData(252021, 'Unit'),
'Rifleman': ItemData(252022, 'Unit'),

# Map Triggers
'Bridges Event': ItemData(252023, 'Trigger'),
'Walls Event': ItemData(252024, 'Trigger'),
'Landing Event': ItemData(252025, 'Trigger'),
'Airstrike Event': ItemData(252026, 'Trigger'),
'Final North': ItemData(252027, 'Trigger', PROGRESSION_SKIP_BALANCING),
'Final East': ItemData(252028, 'Trigger', PROGRESSION_SKIP_BALANCING),
'Final South': ItemData(252029, 'Trigger', PROGRESSION_SKIP_BALANCING),
'Final West': ItemData(252030, 'Trigger', PROGRESSION_SKIP_BALANCING),
'Final Center': ItemData(252031, 'Trigger', PROGRESSION_SKIP_BALANCING),

# Player Buffs
'Income Boost': ItemData(252032, 'Boost', FILLER),

'Commander Defense Boost': ItemData(252033, 'Boost', FILLER),
'Groove Boost': ItemData(252041, 'Boost', FILLER),

# Factions
'Cherrystone Commanders': ItemData(252034, 'Faction', USEFUL),
'Felheim Commanders': ItemData(252035, 'Faction', USEFUL),
'Floran Commanders': ItemData(252036, 'Faction', USEFUL),
'Heavensong Commanders': ItemData(252037, 'Faction', USEFUL),
'Requiem Commanders': ItemData(252038, 'Faction', USEFUL),
'Pirate Commanders': ItemData(252039, 'Faction', USEFUL),
'Faahri Commanders': ItemData(252040, 'Faction', USEFUL),

# Event Items
'Wargroove 2 Victory': ItemData(None, 'Goal')

}

item_id_name: {int, str} = {}
FlySniper marked this conversation as resolved.
Show resolved Hide resolved
for name in item_table.keys():
id = item_table[name].code
if id is not None:
item_id_name[id] = name


class CommanderData(NamedTuple):
name: str
internal_name: str
alt_name: str = None
FlySniper marked this conversation as resolved.
Show resolved Hide resolved


faction_table: Dict[str, List[CommanderData]] = {
'Starter': [
CommanderData('Mercival', 'commander_mercival', 'Mercival II')
],
'Cherrystone': [
CommanderData('Mercia', 'commander_mercia'),
CommanderData('Emeric', 'commander_emeric'),
CommanderData('Caesar', 'commander_caesar'),
],
'Felheim': [
CommanderData('Valder', 'commander_valder'),
CommanderData('Ragna', 'commander_ragna'),
CommanderData('Sigrid', 'commander_sigrid')
],
'Floran': [
CommanderData('Greenfinger', 'commander_greenfinger', 'Zawan'),
CommanderData('Sedge', 'commander_sedge'),
CommanderData('Nuru', 'commander_nuru')
],
'Heavensong': [
CommanderData('Tenri', 'commander_tenri'),
CommanderData('Koji', 'commander_koji'),
CommanderData('Ryota', 'commander_ryota')
],
'Requiem': [
CommanderData('Elodie', 'commander_elodie'),
CommanderData('Dark Mercia', 'commander_darkmercia')
],
'Pirate': [
CommanderData('Wulfar', 'commander_wulfar_pirate'),
CommanderData('Twins', 'commander_twins', 'Errol & Orla'),
CommanderData('Vesper', 'commander_vesper'),
CommanderData('Nadia', 'commander_nadia')
],
'Faahri': [
CommanderData('Lytra', 'commander_lytra'),
CommanderData('Pistil', 'commander_pistil'),
CommanderData('Rhomb', 'commander_rhomb')
]
}


class Wargroove2Item(Item):
game = "Wargroove 2"

def __init__(self, name, player: int = None):
FlySniper marked this conversation as resolved.
Show resolved Hide resolved
item_data = item_table[name]
super(Wargroove2Item, self).__init__(
name,
item_data.classification,
item_data.code,
player
)
Loading
Loading