Skip to content

Instantly share code, notes, and snippets.

@StoddardOXC
Created September 2, 2016 10:21
Embed
What would you like to do?
green NV patch
diff --git a/src/Battlescape/BattlescapeState.cpp b/src/Battlescape/BattlescapeState.cpp
index 9945818..0affc7f 100644
--- a/src/Battlescape/BattlescapeState.cpp
+++ b/src/Battlescape/BattlescapeState.cpp
@@ -461,6 +461,8 @@ BattlescapeState::BattlescapeState() : _reserve(0), _xBeforeMouseScrolling(0), _
_btnStats->onKeyboardPress((ActionHandler)&BattlescapeState::btnReloadClick, Options::keyBattleReload);
_btnStats->onKeyboardPress((ActionHandler)&BattlescapeState::btnPersonalLightingClick, Options::keyBattlePersonalLighting);
+ _btnStats->onKeyboardPress((ActionHandler)&BattlescapeState::btnNightVisionClick, Options::keyNightVisionToggle);
+
SDLKey buttons[] = {Options::keyBattleCenterEnemy1,
Options::keyBattleCenterEnemy2,
Options::keyBattleCenterEnemy3,
@@ -1300,6 +1302,15 @@ void BattlescapeState::btnPersonalLightingClick(Action *)
}
/**
+ * Toggles map-wide night vision (purely cosmetic).
+ * @param action Pointer to an action.
+ */
+void BattlescapeState::btnNightVisionClick(Action *action)
+{
+ _map->toggleNightVision();
+}
+
+/**
* Determines whether a playable unit is selected. Normally only player side units can be selected, but in debug mode one can play with aliens too :)
* Is used to see if stats can be displayed and action buttons will work.
* @return Whether a playable unit is selected.
diff --git a/src/Battlescape/BattlescapeState.h b/src/Battlescape/BattlescapeState.h
index 15f6073..776f2d3 100644
--- a/src/Battlescape/BattlescapeState.h
+++ b/src/Battlescape/BattlescapeState.h
@@ -167,6 +167,8 @@ public:
void btnReloadClick(Action *action);
/// Handler for clicking the lighting button.
void btnPersonalLightingClick(Action *action);
+ /// Handler for toggling the "night vision" mode.
+ void btnNightVisionClick(Action *action);
/// Determines whether a playable unit is selected.
bool playableUnitSelected();
/// Updates soldier name/rank/tu/energy/health/morale.
diff --git a/src/Battlescape/Map.cpp b/src/Battlescape/Map.cpp
index ec64c89..5c34cf9 100644
--- a/src/Battlescape/Map.cpp
+++ b/src/Battlescape/Map.cpp
@@ -108,6 +108,12 @@ Map::Map(Game *game, int width, int height, int x, int y, int visibleMapHeight)
_scrollMouseTimer->onTimer((SurfaceHandler)&Map::scrollMouse);
_scrollKeyTimer = new Timer(SCROLL_INTERVAL);
_scrollKeyTimer->onTimer((SurfaceHandler)&Map::scrollKey);
+ _fadeTimer = new Timer(FADE_INTERVAL);
+ _fadeTimer->onTimer((SurfaceHandler)&Map::fadeShade);
+ _fadeTimer->start();
+ _fadeShade = 16;
+ _nightVisionOn = false;
+ _nvColor = 0;
_camera->setScrollTimer(_scrollMouseTimer, _scrollKeyTimer);
_txtAccuracy = new Text(24, 9, 0, 0);
@@ -124,6 +130,7 @@ Map::~Map()
{
delete _scrollMouseTimer;
delete _scrollKeyTimer;
+ delete _fadeTimer;
delete _arrow;
delete _message;
delete _camera;
@@ -174,6 +181,7 @@ void Map::think()
{
_scrollMouseTimer->think(0, this);
_scrollKeyTimer->think(0, this);
+ _fadeTimer->think(0, this);
}
/**
@@ -417,7 +425,7 @@ void Map::drawTerrain(Surface *surface)
if (tile->isDiscovered(2))
{
- tileShade = tile->getShade();
+ tileShade = reShade(tile->getShade());
}
else
{
@@ -429,7 +437,7 @@ void Map::drawTerrain(Surface *surface)
// Draw floor
tmpSurface = tile->getSprite(O_FLOOR);
if (tmpSurface)
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_FLOOR)->getYOffset(), tileShade);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_FLOOR)->getYOffset(), tileShade, false, _nvColor);
unit = tile->getUnit();
// Draw cursor back
@@ -469,7 +477,7 @@ void Map::drawTerrain(Surface *surface)
int tileNorthShade, tileTwoNorthShade, tileWestShade, tileNorthWestShade, tileSouthWestShade;
if (tileNorth->isDiscovered(2))
{
- tileNorthShade = tileNorth->getShade();
+ tileNorthShade = reShade(tileNorth->getShade());
}
else
{
@@ -508,7 +516,7 @@ void Map::drawTerrain(Surface *surface)
Tile *tileTwoNorth = _save->getTile(mapPosition - Position(0,2,0));
if (tileTwoNorth->isDiscovered(2))
{
- tileTwoNorthShade = tileTwoNorth->getShade();
+ tileTwoNorthShade = reShade(tileTwoNorth->getShade());
}
else
{
@@ -517,7 +525,7 @@ void Map::drawTerrain(Surface *surface)
tmpSurface = tileTwoNorth->getSprite(O_OBJECT);
if (tmpSurface && tileTwoNorth->getMapData(O_OBJECT)->getBigWall() == 6)
{
- tmpSurface->blitNShade(surface, screenPosition.x + tileOffset.x*2, screenPosition.y - tileTwoNorth->getMapData(O_OBJECT)->getYOffset() + tileOffset.y*2, tileTwoNorthShade);
+ tmpSurface->blitNShade(surface, screenPosition.x + tileOffset.x*2, screenPosition.y - tileTwoNorth->getMapData(O_OBJECT)->getYOffset() + tileOffset.y*2, tileTwoNorthShade, false, _nvColor);
}
}
@@ -529,7 +537,7 @@ void Map::drawTerrain(Surface *surface)
Tile *tileNorthWest = _save->getTile(mapPosition - Position(1,1,0));
if (tileNorthWest->isDiscovered(2))
{
- tileNorthWestShade = tileNorthWest->getShade();
+ tileNorthWestShade = reShade(tileNorthWest->getShade());
}
else
{
@@ -538,7 +546,7 @@ void Map::drawTerrain(Surface *surface)
tmpSurface = tileNorthWest->getSprite(O_OBJECT);
if (tmpSurface && tileNorthWest->getMapData(O_OBJECT)->getBigWall() == 7)
{
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tileNorthWest->getMapData(O_OBJECT)->getYOffset() + tileOffset.y*2, tileNorthWestShade);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tileNorthWest->getMapData(O_OBJECT)->getYOffset() + tileOffset.y*2, tileNorthWestShade, false, _nvColor);
}
}
@@ -549,7 +557,7 @@ void Map::drawTerrain(Surface *surface)
{
tmpSurface = tileNorth->getSprite(O_OBJECT);
if (tmpSurface)
- tmpSurface->blitNShade(surface, screenPosition.x + tileOffset.x, screenPosition.y - tileNorth->getMapData(O_OBJECT)->getYOffset() + tileOffset.y, tileNorthShade);
+ tmpSurface->blitNShade(surface, screenPosition.x + tileOffset.x, screenPosition.y - tileNorth->getMapData(O_OBJECT)->getYOffset() + tileOffset.y, tileNorthShade, false, _nvColor);
}
if (mapPosition.x > 0)
{
@@ -563,7 +571,7 @@ void Map::drawTerrain(Surface *surface)
Tile *tileSouthWest = _save->getTile(mapPosition + Position(-1, 1, 0));
if (tileSouthWest->isDiscovered(2))
{
- tileSouthWestShade = tileSouthWest->getShade();
+ tileSouthWestShade = reShade(tileSouthWest->getShade());
}
else
{
@@ -572,7 +580,7 @@ void Map::drawTerrain(Surface *surface)
tmpSurface = tileSouthWest->getSprite(O_OBJECT);
if (tmpSurface)
{
- tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x * 2, screenPosition.y - tileSouthWest->getMapData(O_OBJECT)->getYOffset(), tileSouthWestShade, true);
+ tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x * 2, screenPosition.y - tileSouthWest->getMapData(O_OBJECT)->getYOffset(), tileSouthWestShade, true, _nvColor);
}
}
@@ -583,7 +591,7 @@ void Map::drawTerrain(Surface *surface)
BattleUnit *westUnit = tileWest->getUnit();
if (tileWest->isDiscovered(2))
{
- tileWestShade = tileWest->getShade();
+ tileWestShade = reShade(tileWest->getShade());
}
else
{
@@ -595,31 +603,31 @@ void Map::drawTerrain(Surface *surface)
{
if ((tileWest->getMapData(O_WESTWALL)->isDoor() || tileWest->getMapData(O_WESTWALL)->isUFODoor())
&& tileWest->isDiscovered(0))
- wallShade = tileWest->getShade();
+ wallShade = reShade(tileWest->getShade());
else
wallShade = tileWestShade;
- tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y - tileWest->getMapData(O_WESTWALL)->getYOffset() + tileOffset.y, wallShade, true);
+ tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y - tileWest->getMapData(O_WESTWALL)->getYOffset() + tileOffset.y, wallShade, true, _nvColor);
}
tmpSurface = tileWest->getSprite(O_NORTHWALL);
if (tmpSurface)
{
if ((tileWest->getMapData(O_NORTHWALL)->isDoor() || tileWest->getMapData(O_NORTHWALL)->isUFODoor())
&& tileWest->isDiscovered(1))
- wallShade = tileWest->getShade();
+ wallShade = reShade(tileWest->getShade());
else
wallShade = tileWestShade;
- tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y - tileWest->getMapData(O_NORTHWALL)->getYOffset() + tileOffset.y, wallShade, true);
+ tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y - tileWest->getMapData(O_NORTHWALL)->getYOffset() + tileOffset.y, wallShade, true, _nvColor);
}
tmpSurface = tileWest->getSprite(O_OBJECT);
if (tmpSurface && (tileWest->getMapData(O_OBJECT)->getBigWall() < 6 || tileWest->getMapData(O_OBJECT)->getBigWall() == 9) && tileWest->getMapData(O_OBJECT)->getBigWall() != 3)
{
- tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y - tileWest->getMapData(O_OBJECT)->getYOffset() + tileOffset.y, tileWestShade, true);
+ tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y - tileWest->getMapData(O_OBJECT)->getYOffset() + tileOffset.y, tileWestShade, true, _nvColor);
// if the object in the tile to the west is a diagonal big wall, we need to cover up the black triangle at the bottom
if (tileWest->getMapData(O_OBJECT)->getBigWall() == 2)
{
tmpSurface = tile->getSprite(O_FLOOR);
if (tmpSurface)
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_FLOOR)->getYOffset(), tileShade);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_FLOOR)->getYOffset(), tileShade, false, _nvColor);
}
}
// draw an item on top of the floor (if any)
@@ -677,13 +685,13 @@ void Map::drawTerrain(Surface *surface)
frameNumber += halfAnimFrame + tileWest->getAnimationOffset();
}
tmpSurface = _game->getMod()->getSurfaceSet("SMOKE.PCK")->getFrame(frameNumber);
- tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y + tileOffset.y, shade, true);
+ tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y + tileOffset.y, shade, true, _nvColor);
}
// Draw object
if (tileWest->getMapData(O_OBJECT) && tileWest->getMapData(O_OBJECT)->getBigWall() >= 6 && tileWest->getMapData(O_OBJECT)->getBigWall() != 9)
{
tmpSurface = tileWest->getSprite(O_OBJECT);
- tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y - tileWest->getMapData(O_OBJECT)->getYOffset() + tileOffset.y, tileWestShade, true);
+ tmpSurface->blitNShade(surface, screenPosition.x - tileOffset.x, screenPosition.y - tileWest->getMapData(O_OBJECT)->getYOffset() + tileOffset.y, tileWestShade, true, _nvColor);
}
}
}
@@ -699,10 +707,10 @@ void Map::drawTerrain(Surface *surface)
{
if ((tile->getMapData(O_WESTWALL)->isDoor() || tile->getMapData(O_WESTWALL)->isUFODoor())
&& tile->isDiscovered(0))
- wallShade = tile->getShade();
+ wallShade = reShade(tile->getShade());
else
wallShade = tileShade;
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_WESTWALL)->getYOffset(), wallShade);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_WESTWALL)->getYOffset(), wallShade, false, _nvColor);
}
// Draw north wall
tmpSurface = tile->getSprite(O_NORTHWALL);
@@ -710,16 +718,16 @@ void Map::drawTerrain(Surface *surface)
{
if ((tile->getMapData(O_NORTHWALL)->isDoor() || tile->getMapData(O_NORTHWALL)->isUFODoor())
&& tile->isDiscovered(1))
- wallShade = tile->getShade();
+ wallShade = reShade(tile->getShade());
else
wallShade = tileShade;
if (tile->getMapData(O_WESTWALL))
{
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_NORTHWALL)->getYOffset(), wallShade, true);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_NORTHWALL)->getYOffset(), wallShade, true, _nvColor);
}
else
{
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_NORTHWALL)->getYOffset(), wallShade);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_NORTHWALL)->getYOffset(), wallShade, false, _nvColor);
}
}
// Draw object
@@ -727,7 +735,7 @@ void Map::drawTerrain(Surface *surface)
{
tmpSurface = tile->getSprite(O_OBJECT);
if (tmpSurface)
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_OBJECT)->getYOffset(), tileShade);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_OBJECT)->getYOffset(), tileShade, false, _nvColor);
}
// draw an item on top of the floor (if any)
BattleItem* item = tile->getTopItem();
@@ -815,7 +823,7 @@ void Map::drawTerrain(Surface *surface)
_camera->convertVoxelToScreen(voxelPos, &bulletPositionScreen);
bulletPositionScreen.x -= tmpSurface->getWidth() / 2;
bulletPositionScreen.y -= tmpSurface->getHeight() / 2;
- tmpSurface->blitNShade(surface, bulletPositionScreen.x, bulletPositionScreen.y, 16);
+ tmpSurface->blitNShade(surface, bulletPositionScreen.x, bulletPositionScreen.y, 16, false, _nvColor);
}
// draw bullet itself
@@ -828,7 +836,7 @@ void Map::drawTerrain(Surface *surface)
_camera->convertVoxelToScreen(voxelPos, &bulletPositionScreen);
bulletPositionScreen.x -= tmpSurface->getWidth() / 2;
bulletPositionScreen.y -= tmpSurface->getHeight() / 2;
- tmpSurface->blitNShade(surface, bulletPositionScreen.x, bulletPositionScreen.y, 0);
+ tmpSurface->blitNShade(surface, bulletPositionScreen.x, bulletPositionScreen.y, 0, false, _nvColor);
}
}
}
@@ -866,7 +874,7 @@ void Map::drawTerrain(Surface *surface)
offset.y += (22 - unit->getHeight());
if (tmpSurface)
{
- tmpSurface->blitNShade(surface, offset.x, offset.y - 30, tileShade);
+ tmpSurface->blitNShade(surface, offset.x, offset.y - 30, tileShade, false, _nvColor);
}
}
if (isAltPressed)
@@ -897,7 +905,7 @@ void Map::drawTerrain(Surface *surface)
tunit, part,
offset.x,
offset.y,
- ttile->getShade()
+ reShade(ttile->getShade())
);
}
}
@@ -930,7 +938,7 @@ void Map::drawTerrain(Surface *surface)
frameNumber += halfAnimFrame + tile->getAnimationOffset();
}
tmpSurface = _game->getMod()->getSurfaceSet("SMOKE.PCK")->getFrame(frameNumber);
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y, shade);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y, shade, false, _nvColor);
}
//draw particle clouds
@@ -979,7 +987,7 @@ void Map::drawTerrain(Surface *surface)
{
tmpSurface = tile->getSprite(O_OBJECT);
if (tmpSurface)
- tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_OBJECT)->getYOffset(), tileShade, false);
+ tmpSurface->blitNShade(surface, screenPosition.x, screenPosition.y - tile->getMapData(O_OBJECT)->getYOffset(), tileShade, false, _nvColor);
}
}
// Draw cursor front
@@ -1251,18 +1259,18 @@ void Map::drawTerrain(Surface *surface)
if ((*i)->getCurrentFrame() >= 0)
{
tmpSurface = _game->getMod()->getSurfaceSet("X1.PCK")->getFrame((*i)->getCurrentFrame());
- tmpSurface->blitNShade(surface, bulletPositionScreen.x - (tmpSurface->getWidth() / 2), bulletPositionScreen.y - (tmpSurface->getHeight() / 2), 0);
+ tmpSurface->blitNShade(surface, bulletPositionScreen.x - (tmpSurface->getWidth() / 2), bulletPositionScreen.y - (tmpSurface->getHeight() / 2), 0, false, _nvColor);
}
}
else if ((*i)->isHit())
{
tmpSurface = _game->getMod()->getSurfaceSet("HIT.PCK")->getFrame((*i)->getCurrentFrame());
- tmpSurface->blitNShade(surface, bulletPositionScreen.x - 15, bulletPositionScreen.y - 25, 0);
+ tmpSurface->blitNShade(surface, bulletPositionScreen.x - 15, bulletPositionScreen.y - 25, 0, false, _nvColor);
}
else
{
tmpSurface = _game->getMod()->getSurfaceSet("SMOKE.PCK")->getFrame((*i)->getCurrentFrame());
- tmpSurface->blitNShade(surface, bulletPositionScreen.x - 15, bulletPositionScreen.y - 15, 0);
+ tmpSurface->blitNShade(surface, bulletPositionScreen.x - 15, bulletPositionScreen.y - 15, 0, false, _nvColor);
}
}
}
@@ -1325,6 +1333,25 @@ void Map::keyboardPress(Action *action, State *state)
}
/**
+ * Handles map vision toggle mode.
+ */
+
+void Map::toggleNightVision()
+{
+ _nightVisionOn = not _nightVisionOn;
+}
+
+/**
+ * Handles fade-in and fade-out shade modification
+ * @param original tile/item/unit shade
+ */
+
+int Map::reShade(const int shade)
+{
+ return shade > _fadeShade ? _fadeShade : shade;
+}
+
+/**
* Handles keyboard releases on the map.
* @param action Pointer to an action.
* @param state State that the action handlers belong to.
@@ -1626,6 +1653,30 @@ void Map::scrollKey()
}
/**
+ * Modify the fade shade level if fade's in progress.
+ */
+void Map::fadeShade()
+{
+ bool hold = SDL_GetKeyState(NULL)[Options::keyNightVisionHold];
+ if (_nightVisionOn xor hold )
+ {
+ _nvColor = 5;
+ if (_fadeShade > 4)
+ {
+ --_fadeShade;
+ }
+ }
+ else
+ {
+ _nvColor = 0;
+ if (_fadeShade < _save->getGlobalShade())
+ {
+ ++_fadeShade;
+ }
+ }
+}
+
+/**
* Gets a list of waypoints on the map.
* @return A list of waypoints.
*/
diff --git a/src/Battlescape/Map.h b/src/Battlescape/Map.h
index ea2bd22..9667270 100644
--- a/src/Battlescape/Map.h
+++ b/src/Battlescape/Map.h
@@ -46,8 +46,13 @@ class Map : public InteractiveSurface
{
private:
static const int SCROLL_INTERVAL = 15;
+ static const int FADE_INTERVAL = 23;
static const int BULLET_SPRITES = 35;
Timer *_scrollMouseTimer, *_scrollKeyTimer;
+ Timer *_fadeTimer;
+ int _fadeShade;
+ bool _nightVisionOn;
+ int _nvColor;
Game *_game;
SavedBattleGame *_save;
Surface *_arrow;
@@ -121,6 +126,8 @@ public:
void scrollMouse();
/// Keyboard-scrolls the camera.
void scrollKey();
+ /// fades in/out
+ void fadeShade();
/// Get waypoints vector.
std::vector<Position> *getWaypoints();
/// Set mouse-buttons' pressed state.
@@ -147,6 +154,11 @@ public:
void setBlastFlash(bool flash);
/// Check if the screen is flashing this.
bool getBlastFlash();
+ /// Modify shade for fading
+ int reShade(const int shade);
+ /// toggle the night-vision mode
+ void toggleNightVision();
+
};
}
diff --git a/src/Engine/Options.cpp b/src/Engine/Options.cpp
index 4537766..5b35eb9 100644
--- a/src/Engine/Options.cpp
+++ b/src/Engine/Options.cpp
@@ -296,6 +296,9 @@ void create()
_info.push_back(OptionInfo("keyBattleActionItem5", &keyBattleActionItem5, SDLK_5, "STR_ACTION_ITEM_5", "STR_OXCE"));
_info.push_back(OptionInfo("keyToggleQuickSearch", &keyToggleQuickSearch, SDLK_q, "STR_TOGGLE_QUICK_SEARCH", "STR_OXCE"));
+ _info.push_back(OptionInfo("keyNightVisionToggle", &keyNightVisionToggle, SDLK_SCROLLOCK, "STR_TOGGLE_NIGHT_VISION", "STR_OXCE"));
+ _info.push_back(OptionInfo("keyNightVisionHold", &keyNightVisionHold, SDLK_BACKQUOTE, "STR_HOLD_NIGHT_VISION", "STR_OXCE"));
+
#ifdef __MORPHOS__
_info.push_back(OptionInfo("FPS", &FPS, 15, "STR_FPS_LIMIT", "STR_GENERAL"));
_info.push_back(OptionInfo("FPSInactive", &FPSInactive, 15, "STR_FPS_INACTIVE_LIMIT", "STR_GENERAL"));
diff --git a/src/Engine/Options.inc.h b/src/Engine/Options.inc.h
index 3fc086c..53a7780 100644
--- a/src/Engine/Options.inc.h
+++ b/src/Engine/Options.inc.h
@@ -52,6 +52,8 @@ OPT bool showAllCommendations;
OPT bool removeWoundedFromTraining;
OPT bool autoAssignPilots;
+OPT SDLKey keyNightVisionToggle, keyNightVisionHold;
+
// Flags and other stuff that don't need OptionInfo's.
OPT bool mute, reload, newOpenGL, newScaleFilter, newHQXFilter, newXBRZFilter;
OPT int newDisplayWidth, newDisplayHeight, newBattlescapeScale, newGeoscapeScale;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment