diff --git a/data/civilization-artwork.json b/data/civilization-artwork.json index b401eae..c4edf8e 100644 --- a/data/civilization-artwork.json +++ b/data/civilization-artwork.json @@ -16,6 +16,7 @@ "citySheets": { "classic": { "key": "civilization-cities-classic", "path": "assets/images/civilization/civilization-cities-classic.png", "frameWidth": 128, "frameHeight": 96 }, "cyberpunk": { "key": "civilization-cities-cyberpunk", "path": "assets/images/civilization/civilization-cities-cyberpunk.png", "frameWidth": 128, "frameHeight": 96 }, - "japanese": { "key": "civilization-cities-japanese", "path": "assets/images/civilization/civilization-cities-japanese.png", "frameWidth": 128, "frameHeight": 96 } + "japanese": { "key": "civilization-cities-japanese", "path": "assets/images/civilization/civilization-cities-japanese.png", "frameWidth": 128, "frameHeight": 96 }, + "steampunk": { "key": "civilization-cities-steampunk", "path": "assets/images/civilization/civilization-cities-steampunk.png", "frameWidth": 128, "frameHeight": 96 } } } diff --git a/data/opponents.json b/data/opponents.json index 47a7cba..70b27c5 100644 --- a/data/opponents.json +++ b/data/opponents.json @@ -89,7 +89,7 @@ "name": "Victor", "trait": "pioneering", "startingTechs": [], - "citySheet": "cyberpunk", + "citySheet": "steampunk", "bio": "Patient and calculating. Moves are made using ancient technology.", "voice": "Starfield - Vasco", "convo": [ @@ -968,7 +968,7 @@ "ceremonialburial", "horsebackriding" ], - "citySheet": "classic", + "citySheet": "steampunk", "bio": "Ahoy you land lovers!", "voice": "Defiant Calder", "convo": [ @@ -1010,7 +1010,7 @@ "pottery", "thewheel" ], - "citySheet": "classic", + "citySheet": "steampunk", "bio": "Bucky Beaver and I are there to TRAP all the fun and games!", "speech": { "intro": [ diff --git a/src/games/civilization/CivilizationCityScreen.js b/src/games/civilization/CivilizationCityScreen.js index 5fdec0e..9b6fda3 100644 --- a/src/games/civilization/CivilizationCityScreen.js +++ b/src/games/civilization/CivilizationCityScreen.js @@ -393,6 +393,11 @@ export function openCityScreen(scene, rules, state, city, onClose) { Logic.setBuild(rules, state, city, ch.type, ch.id); redraw(); }); + rect.on('wheel', (pointer, _dx, dy) => { + scrollY = Phaser.Math.Clamp(scrollY + dy * 0.5, 0, maxScroll); + tooltip.hide(); + syncRows(); + }); tooltip.attachTo(rect, () => { if (ch.type === 'unit') return describeUnitTooltip(rules, ch.ruleObj); if (ch.type === 'building') return describeBuildingTooltip(rules, ch.ruleObj); @@ -423,7 +428,7 @@ export function openCityScreen(scene, rules, state, city, onClose) { if (thumb) thumb.y = listY + (listH - thumbH) * (scrollY / maxScroll); }; listBg.setInteractive(); - listBg.on('wheel', (pointer, dx, dy) => { + listBg.on('wheel', (pointer, _dx, dy) => { scrollY = Phaser.Math.Clamp(scrollY + dy * 0.5, 0, maxScroll); // A row disabled mid-hover never fires pointerout, so its tooltip would // hang around over the list. diff --git a/src/games/civilization/CivilizationLogic.js b/src/games/civilization/CivilizationLogic.js index fb5a433..befaee3 100644 --- a/src/games/civilization/CivilizationLogic.js +++ b/src/games/civilization/CivilizationLogic.js @@ -916,7 +916,8 @@ export function tryMove(rules, state, unit, dx, dy) { } if (!canOccupy(rules, state, unit, tx, ty)) return { result: 'invalid' }; - if (targetCity && targetCity.civ !== unit.civ) return { result: 'invalid' }; + if (targetCity && targetCity.civ !== unit.civ && !def.flags.includes('caravan')) return { result: 'invalid' }; + if (targetCity && targetCity.civ !== unit.civ && state.civs[unit.civ].relations[targetCity.civ] === 'war') return { result: 'invalid' }; const cost = moveCost(rules, state, unit, unit.x, unit.y, tx, ty); if (!Number.isFinite(cost)) return { result: 'invalid' };