Skip to content

Conversation

@FloPinguin
Copy link
Contributor

@FloPinguin FloPinguin commented Jan 10, 2026

Description:

Discussed that with Lewis.
Fuze liked the Didier map without the real france more...
So here it is. It won't get added to the playlist, the france version stays in the playlist.
(Unrelated: Also quickly changed "Europe (classic)" to Europe (Classic)" to match with "Britannia (Classic)")

Screenshot 2026-01-10 005646 Screenshot 2026-01-10 003335 Screenshot 2026-01-10 003316

Please complete the following:

  • I have added screenshots for all UI updates
  • I process any text displayed to the user through translateText() and I've added it to the en.json file
  • I have added relevant tests to the test directory
  • I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced

Please put your Discord username so you can be contacted if a bug or regression is found:

FloPinguin

@FloPinguin FloPinguin requested a review from a team as a code owner January 10, 2026 00:37
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 10, 2026

Walkthrough

This PR adds a new map variant called "Didier (France)" to the game system. The changes include creating new map asset files and manifests for the variant, registering it in the game configuration, updating player slot settings for both Didier map versions, and adding localization strings for the new map.

Changes

Cohort / File(s) Summary
New Didier (France) Map Assets
map-generator/assets/maps/didierfrance/info.json
New map asset file defining the Didier (France) map with 211 lines of nation/region definitions and coordinates.
New Didier (France) Map Manifest
resources/maps/didierfrance/manifest.json
New manifest file describing Didier (France) map metadata including dimensions, land tile counts, and 226 lines of nation/region data.
Existing Didier Map Refactor
map-generator/assets/maps/didier/info.json, resources/maps/didier/manifest.json
Significant rework of existing Didier map: reduced dimensions, removed many nation entries, replaced with new consolidated nation (Mell Confederation) at different coordinates; map dimensions also reduced.
Game Type Registration & Configuration
map-generator/main.go, src/core/game/Game.ts, src/core/configuration/DefaultConfig.ts
Registered new DidierFrance map type in game registry; added to arcade map category; adjusted player slot configuration from [100, 70, 50] to [50, 40, 30] for original Didier map; set DidierFrance slots to [100, 70, 50].
UI & Localization
src/client/components/Maps.ts, resources/lang/en.json
Added DidierFrance entry to MapDescription mapping; added localization key "didierfrance" with value "Didier (France)"; corrected "Europe (classic)" capitalization to "Europe (Classic)".
Map Playlist Configuration
src/server/MapPlaylist.ts
Renamed map frequency key from Didier to DidierFrance while preserving frequency count of 2.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

Feature - Map, Maps

Suggested reviewers

  • evanpelle
  • TheGiraffe3
  • jrouillard

Poem

🗺️ Didier splits his French domain,
One map becomes a noble twain,
New nations rise with fresh terrain,
The world expands—let conquest reign! 🎮

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Second Didier Map for Fuze 🧸' clearly describes the main change: adding a new Didier map variant, which aligns with the changeset's primary objective.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description check ✅ Passed The pull request description clearly relates to the changeset, explaining the addition of a second Didier map variant and a minor text capitalization fix.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@FloPinguin FloPinguin added this to the v29 milestone Jan 10, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @resources/lang/en.json:
- Line 236: The change to the "europeclassic" translation key alters
capitalization to "Europe (Classic)" which is unrelated to the Didier (France)
map addition; revert this key's value back to its original casing or move the
capitalization change into its own commit/PR so the map addition stays isolated
— locate the "europeclassic" entry in resources/lang/en.json and either restore
the previous value or create a separate commit that standardizes map name
capitalization.
🧹 Nitpick comments (1)
map-generator/assets/maps/didierfrance/info.json (1)

4-193: Consider standardizing field ordering across info.json and manifest.json files.

The field ordering in this file (coordinates, name, flag) differs from the manifest.json file (coordinates, flag, name). While both are valid JSON, consistent ordering improves maintainability.

♻️ Optional standardization to match manifest.json ordering

Consider reordering fields to match the manifest pattern (coordinates, flag, name):

     {
       "coordinates": [120, 680],
-      "name": "Brest",
-      "flag": "fr"
+      "flag": "fr",
+      "name": "Brest"
     },

Apply this pattern to all city entries for consistency with the manifest file.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 848a3a5 and 3eb485b.

⛔ Files ignored due to path filters (8)
  • map-generator/assets/maps/didier/image.png is excluded by !**/*.png
  • map-generator/assets/maps/didierfrance/image.png is excluded by !**/*.png
  • resources/maps/didier/map.bin is excluded by !**/*.bin
  • resources/maps/didier/map16x.bin is excluded by !**/*.bin
  • resources/maps/didier/map4x.bin is excluded by !**/*.bin
  • resources/maps/didierfrance/map.bin is excluded by !**/*.bin
  • resources/maps/didierfrance/map16x.bin is excluded by !**/*.bin
  • resources/maps/didierfrance/map4x.bin is excluded by !**/*.bin
📒 Files selected for processing (12)
  • map-generator/assets/maps/didier/info.json
  • map-generator/assets/maps/didierfrance/info.json
  • map-generator/main.go
  • resources/lang/en.json
  • resources/maps/didier/manifest.json
  • resources/maps/didier/thumbnail.webp
  • resources/maps/didierfrance/manifest.json
  • resources/maps/didierfrance/thumbnail.webp
  • src/client/components/Maps.ts
  • src/core/configuration/DefaultConfig.ts
  • src/core/game/Game.ts
  • src/server/MapPlaylist.ts
🧰 Additional context used
🧠 Learnings (10)
📓 Common learnings
Learnt from: VariableVince
Repo: openfrontio/OpenFrontIO PR: 1655
File: resources/maps/giantworldmap/manifest.json:165-174
Timestamp: 2025-07-31T12:03:08.052Z
Learning: In OpenFrontIO draft PRs, flag names in map manifest files may be placeholders that will be updated to match the actual SVG flag file names when the assets are received. The final naming depends on the actual flag SVG files provided, not code naming conventions.
📚 Learning: 2025-11-12T23:11:34.445Z
Learnt from: MaxHT0x
Repo: openfrontio/OpenFrontIO PR: 2262
File: src/core/configuration/DefaultConfig.ts:806-832
Timestamp: 2025-11-12T23:11:34.445Z
Learning: In src/core/configuration/DefaultConfig.ts, JSDoc documentation for configuration methods should not be added inline, as it was requested that documentation be placed elsewhere in the codebase.

Applied to files:

  • src/core/configuration/DefaultConfig.ts
📚 Learning: 2025-08-12T00:31:50.144Z
Learnt from: scottanderson
Repo: openfrontio/OpenFrontIO PR: 1752
File: src/core/game/Game.ts:750-752
Timestamp: 2025-08-12T00:31:50.144Z
Learning: In the OpenFrontIO codebase, changes to the PlayerInteraction interface (like adding canDonateGold and canDonateTroops flags) do not require corresponding updates to src/core/Schemas.ts or server serialization code.

Applied to files:

  • src/core/configuration/DefaultConfig.ts
📚 Learning: 2025-10-20T20:15:28.858Z
Learnt from: sambokai
Repo: openfrontio/OpenFrontIO PR: 2225
File: src/core/execution/FakeHumanExecution.ts:51-51
Timestamp: 2025-10-20T20:15:28.858Z
Learning: In src/core/execution/FakeHumanExecution.ts, game balance constants like MIRV_COOLDOWN_TICKS, MIRV_HESITATION_ODDS, VICTORY_DENIAL_TEAM_THRESHOLD, VICTORY_DENIAL_INDIVIDUAL_THRESHOLD, and STEAMROLL_CITY_GAP_MULTIPLIER are experimental tuning parameters subject to frequent change during balance testing. Do not flag changes to these values as issues or compare them against previous values.

Applied to files:

  • src/core/configuration/DefaultConfig.ts
📚 Learning: 2025-08-27T08:12:19.610Z
Learnt from: mokizzz
Repo: openfrontio/OpenFrontIO PR: 1940
File: resources/lang/en.json:763-766
Timestamp: 2025-08-27T08:12:19.610Z
Learning: In OpenFrontIO, some country entries in src/client/data/countries.json may have similar names but different codes (e.g., "Empire of Japan" vs "Empire of Japan1"). Each unique code requires its own translation key in resources/lang/en.json after normalization. Always verify against countries.json before suggesting removal of translation keys.

Applied to files:

  • resources/lang/en.json
📚 Learning: 2025-08-19T11:00:55.422Z
Learnt from: TheGiraffe3
Repo: openfrontio/OpenFrontIO PR: 1864
File: resources/maps/arabianpeninsula/manifest.json:13-170
Timestamp: 2025-08-19T11:00:55.422Z
Learning: In OpenFrontIO, nation names in map manifests are displayed directly in the UI without translation. They do not need to be added to resources/lang/en.json or processed through translateText(). This is the established pattern across all existing maps including Europe, World, Asia, Africa, and others.

Applied to files:

  • resources/lang/en.json
  • resources/maps/didierfrance/manifest.json
  • resources/maps/didier/manifest.json
📚 Learning: 2025-07-12T06:35:10.457Z
Learnt from: Aotumuri
Repo: openfrontio/OpenFrontIO PR: 1357
File: resources/lang/ja.json:0-0
Timestamp: 2025-07-12T06:35:10.457Z
Learning: In OpenFrontIO project, "giantworldmap" is the correct localization key name for the giant world map, used consistently across all language files and TypeScript code. Do not suggest renaming this key.

Applied to files:

  • resources/lang/en.json
📚 Learning: 2025-06-02T14:27:37.609Z
Learnt from: andrewNiziolek
Repo: openfrontio/OpenFrontIO PR: 1007
File: resources/lang/de.json:115-115
Timestamp: 2025-06-02T14:27:37.609Z
Learning: For OpenFrontIO project: When localization keys are renamed in language JSON files, the maintainers separate technical changes from translation content updates. They wait for community translators to update the actual translation values rather than attempting to translate in the same PR. This allows technical changes to proceed while ensuring accurate translations from native speakers.

Applied to files:

  • resources/lang/en.json
📚 Learning: 2025-05-30T16:16:27.118Z
Learnt from: VariableVince
Repo: openfrontio/OpenFrontIO PR: 957
File: resources/maps/GatewayToTheAtlantic.json:175-179
Timestamp: 2025-05-30T16:16:27.118Z
Learning: In OpenFrontIO project, flag values in map JSON files (like GatewayToTheAtlantic.json) should match the actual flag file names in the resources directory (e.g., "French foreign legion" corresponds to "French foreign legion.svg"). The naming convention follows the file naming system rather than code naming conventions.

Applied to files:

  • resources/lang/en.json
  • map-generator/assets/maps/didierfrance/info.json
  • resources/maps/didierfrance/manifest.json
📚 Learning: 2025-07-12T08:42:02.109Z
Learnt from: Aotumuri
Repo: openfrontio/OpenFrontIO PR: 1357
File: resources/lang/zh_cn.json:527-539
Timestamp: 2025-07-12T08:42:02.109Z
Learning: In OpenFrontIO project, the territory pattern key "embelem" is the correct spelling used in all language files, not "emblem". This is the technical identifier that appears in en.json and must be consistent across all localization files.

Applied to files:

  • resources/lang/en.json
🔇 Additional comments (9)
map-generator/main.go (1)

68-68: LGTM! Map registry updated correctly.

The new didierfrance entry is added alongside the existing didier entry, allowing both map variants to be processed by the map generator.

resources/lang/en.json (1)

260-260: LGTM! Localization key added correctly.

The new didierfrance key with value "Didier (France)" follows the established pattern for map localization.

src/client/components/Maps.ts (1)

57-57: LGTM! Map description added correctly.

The DidierFrance entry is added to the MapDescription record alongside the existing Didier entry, providing the display label "Didier (France)" for the UI.

src/core/configuration/DefaultConfig.ts (1)

93-94: Slot configuration updated for map variants.

The original Didier slots are reduced from [100, 70, 50] to [50, 40, 30], while the new DidierFrance receives the original slot configuration [100, 70, 50]. This suggests DidierFrance is the larger, full version while Didier is now a smaller variant.

Verify this matches the intended map sizes and player capacity for each variant.

src/server/MapPlaylist.ts (1)

64-64: Verify: Playlist map change requires PR description review.

The code shows DidierFrance: 2, at line 64 with no plain Didier entry in MapPlaylist.ts. However, the contradiction with the PR description cannot be confirmed without access to: (1) the actual PR description text, and (2) what the playlist contained before this change. Please confirm the intended map configuration and clarify whether Didier or DidierFrance should be in the playlist.

src/core/game/Game.ts (1)

117-117: LGTM! Clean enum and category additions.

The DidierFrance map type is correctly added to the enum and categorized as arcade. The implementation follows the existing pattern consistently.

Also applies to: 178-182

map-generator/assets/maps/didier/info.json (1)

1-53: LGTM! Fictional factions correctly replace real locations.

The Didier map now uses fictional faction names (Aywen Enclave, Kumiz Confederation, etc.) instead of real French cities, which aligns with the PR objective to exclude real-France elements from the original Didier map.

resources/maps/didier/manifest.json (1)

1-68: LGTM! Manifest correctly reflects the updated Didier map.

The manifest dimensions and nations list properly match the updated info.json with fictional faction names. The changes successfully transform the original Didier map to exclude real-France elements.

resources/maps/didierfrance/manifest.json (1)

21-21: No issues found. The "fr" flag file exists at resources/flags/fr.svg and correctly matches the value referenced in the manifest.

@evanpelle evanpelle merged commit dc11870 into openfrontio:main Jan 10, 2026
11 of 12 checks passed
ryanbarlow97 pushed a commit that referenced this pull request Jan 10, 2026
## Description:

Discussed that with Lewis.
Fuze liked the Didier map without the real france more...
So here it is. It won't get added to the playlist, the france version
stays in the playlist.
(Unrelated: Also quickly changed "Europe (classic)" to Europe (Classic)"
to match with "Britannia (Classic)")

<img width="934" height="839" alt="Screenshot 2026-01-10 005646"
src="https://github.com/user-attachments/assets/64925635-c15a-4167-a5bc-5cf7b3b140f8"
/>
<img width="1064" height="961" alt="Screenshot 2026-01-10 003335"
src="https://github.com/user-attachments/assets/9b6aa936-2c33-4a24-8076-a74a4704adc4"
/>
<img width="635" height="427" alt="Screenshot 2026-01-10 003316"
src="https://github.com/user-attachments/assets/e2b46db8-ef0b-4b45-8ea7-711b9b8f7524"
/>


## Please complete the following:

- [X] I have added screenshots for all UI updates
- [X] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [X] I have added relevant tests to the test directory
- [X] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

## Please put your Discord username so you can be contacted if a bug or
regression is found:

FloPinguin
ryanbarlow97 pushed a commit that referenced this pull request Jan 10, 2026
## Description:

Discussed that with Lewis.
Fuze liked the Didier map without the real france more...
So here it is. It won't get added to the playlist, the france version
stays in the playlist.
(Unrelated: Also quickly changed "Europe (classic)" to Europe (Classic)"
to match with "Britannia (Classic)")

<img width="934" height="839" alt="Screenshot 2026-01-10 005646"
src="https://github.com/user-attachments/assets/64925635-c15a-4167-a5bc-5cf7b3b140f8"
/>
<img width="1064" height="961" alt="Screenshot 2026-01-10 003335"
src="https://github.com/user-attachments/assets/9b6aa936-2c33-4a24-8076-a74a4704adc4"
/>
<img width="635" height="427" alt="Screenshot 2026-01-10 003316"
src="https://github.com/user-attachments/assets/e2b46db8-ef0b-4b45-8ea7-711b9b8f7524"
/>


## Please complete the following:

- [X] I have added screenshots for all UI updates
- [X] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [X] I have added relevant tests to the test directory
- [X] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

## Please put your Discord username so you can be contacted if a bug or
regression is found:

FloPinguin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants