Files
source/Strategic/UndergroundInit.cpp
T
Wanne 09ad70f868 *************************************************************************
** Merged source code from development (MP+BMP) trunk (Revision: 3352) **
** https://81.169.133.124/source/ja2/branches/Wanne/JA2%201.13%20MP    **
*************************************************************************

1 (Rev. 3343)
Changes:
	Control hardcoded list of unclickable ("bad") sectors via XML file. (by Realist)
	On the strategic map, the player cannot click or highlight specific
	sectors (e.g. A4, A5). Introduce a <BadSector> tag in MovementCosts.xml
	that flags a sector as "bad". (<BadSector>1</BadSector>)
Files:
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Map Screen Interface Map.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic Movement Costs.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/mapscreen.cpp
	/branches/Wanne/JA2 1.13 MP/GameDir/Data/TableData/Map
	/branches/Wanne/JA2 1.13 MP/GameDir/Data/TableData/Map/MovementCosts.xml
	/branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/TableData/Map
	/branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/TableData/Map/MovementCosts.xml

2 (Rev. 3344)
Changes:
	Move hardcoded underground sectors initialization to Lua script file. (by Realist)
	Locate "initunderground.lua" at data-xyz\scripts ("xyz" subject to change).
	Lua script allows easily adding underground sectors at arbitrary locations and defining enemy garrisons and creature population.
	Also enables underground bloodcat population.
Files:
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Campaign Init.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Campaign Types.h
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Queen Command.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic AI.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic_2005Express.vcproj
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic_VS2008.vcproj
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/UndergroundInit.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/UndergroundInit.h
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/strategicmap.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Soldier Init List.cpp
	/branches/Wanne/JA2 1.13 MP/GameDir/Data/Scripts
	/branches/Wanne/JA2 1.13 MP/GameDir/Data/Scripts/initunderground.lua
	/branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/Scripts
	/branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/Scripts/initunderground.lua

3 (Rev. 3345)
Changes:
	Bugfix: In Method CreateDestroyMouseRegionsForFacilityAssignmentMenu() (by Headrock)
Files:
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Assignments.cpp

4 (Rev. 3346)
Changes:
	Changed order of properties in GameSettings.cpp (by Headrock)
	HAM 3.6 fixes (by Headrock)
	Sorted Data-1.13\ja2_options.ini (by Headrock)
Files:
	/branches/Wanne/JA2 1.13 MP/Build/GameSettings.cpp
	/branches/Wanne/JA2 1.13 MP/Build/GameSettings.h
	/branches/Wanne/JA2 1.13 MP/Build/Laptop/BobbyRGuns.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Assignments.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/MilitiaSquads.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Strategic Mines.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Strategic/Town Militia.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Campaign.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Interface Enhanced.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Interface Items.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Items.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Items.h
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Overhead.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Soldier Control.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Soldier Profile.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Weapons.cpp
	/branches/Wanne/JA2 1.13 MP/Build/TileEngine/Explosion Control.cpp
	/branches/Wanne/JA2 1.13 MP/GameDir/Data-1.13/Ja2_Options.INI
	/branches/Wanne/JA2 1.13 MP/GameDir/INIEditorJA2Options.xml

5 (Rev. 3347)
Changes:
	Bugfix: Turns out that the program is saving the number of used Placement Slots to the temp file fine, 
	but if that number is equal to the limit of how many enemies/civvies are allowed in a sector by the INI settings, 
	it leads to an assertion error instead when trying to re-load that sector. (by Headrock)
	Re-ordered Data/Ja2_Options.INI (by Headrock)
Files:
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Enemy Soldier Save.cpp
	/branches/Wanne/JA2 1.13 MP/GameDir/Data/Ja2_Options.INI

6 (Rev. 3348)
Changes:
	Translated missing HAM 3.6 German Texts (by systemfehler)
Files:
	/branches/Wanne/JA2 1.13 MP/Build/Utils/_GermanText.cpp

7 (Rev. 3351)
Changes:
	PlusAI 1.0 Patch (by Headrock)
Files:
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Points.cpp
	/branches/Wanne/JA2 1.13 MP/Build/Tactical/Points.h
	/branches/Wanne/JA2 1.13 MP/Build/TacticalAI/Attacks.cpp
	/branches/Wanne/JA2 1.13 MP/Build/TacticalAI/DecideAction.cpp
	/branches/Wanne/JA2 1.13 MP/Build/TacticalAI/FindLocations.cpp
	/branches/Wanne/JA2 1.13 MP/Build/TacticalAI/ai.h

8 (Rev. 3352)
Changes:
	Bugfix: The DEBUG only setting "fEnableInventoryPoolQ" is now only enabled in a DEBUG version. In all other builds it is set to FALSE.
Files:
	/branches/Wanne/JA2 1.13 MP/Build/GameSettings.cpp

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@3354 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2010-03-07 11:37:32 +00:00

162 lines
3.5 KiB
C++

#include <iostream>
#include <string>
#include <sstream>
#include "UndergroundInit.h"
#include "Campaign Init.h"
#include "Campaign Types.h"
#include "FileMan.h"
#include "GameSettings.h"
extern "C" {
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
extern UNDERGROUND_SECTORINFO* NewUndergroundNode( UINT8 ubSectorX, UINT8 ubSectorY, UINT8 ubSectorZ );
static int l_addSector(lua_State *L);
static int lh_getIntegerFromTable(lua_State *L, char * fieldname);
static std::string lh_getStringFromTable(lua_State *L, char * fieldname);
static std::wstring lh_getWStringFromTable(lua_State *L, char * fieldname);
static bool locationStringToCoordinates(std::string loc, UINT8* x, UINT8* y, UINT8* z);
using namespace std;
BOOLEAN LetLuaBuildUndergroundSectorInfoList()
{
char * filename = "scripts\\initunderground.lua";
UINT32 size, bytesRead;
char* buffer;
HWFILE file = FileOpen(filename, FILE_ACCESS_READ, FALSE);
if (!file)
return false;
size = FileSize(filename);
buffer = new char[size+1];
buffer[size] = 0;
FileRead(file, buffer, size, &bytesRead);
FileClose(file);
lua_State *L = lua_open();
luaL_openlibs(L);
lua_register(L, "addSector", l_addSector);
lua_pushinteger(L, gGameOptions.ubDifficultyLevel);
lua_setglobal(L, "difficultyLevel");
lua_pushinteger(L, gGameOptions.ubGameStyle);
lua_setglobal(L, "gameStyle");
if (luaL_dostring(L, buffer))
{
// oh noes, error
// TODO: write to log or something
return false;
}
lua_close(L);
delete[] buffer;
return true;
}
static int l_addSector(lua_State *L)
{
UNDERGROUND_SECTORINFO* curr = NULL;
std::string sector_id = lh_getStringFromTable(L, "location");
UINT8 x, y, z;
if (locationStringToCoordinates(sector_id, &x, &y, &z))
{
curr = NewUndergroundNode(x, y, z);
curr->ubNumAdmins = lh_getIntegerFromTable(L, "numAdmins");
curr->ubNumTroops = lh_getIntegerFromTable(L, "numTroops");
curr->ubNumElites = lh_getIntegerFromTable(L, "numElites");
curr->ubCreatureHabitat = lh_getIntegerFromTable(L, "creatureHabitat");
curr->ubNumCreatures = lh_getIntegerFromTable(L, "numCreatures");
curr->ubNumBloodcats = lh_getIntegerFromTable(L, "numBloodcats");
}
return 0; // number of results
}
static int lh_getIntegerFromTable(lua_State *L, char * fieldname)
{
lua_getfield(L, -1, fieldname);
int i = lua_tointeger(L, -1);
lua_pop(L, 1);
return i;
}
static std::string lh_getStringFromTable(lua_State *L, char * fieldname)
{
lua_getfield(L, -1, fieldname);
string s = lua_tostring(L, -1);
lua_pop(L, 1);
return s;
}
// extract x,y,z from strings like "D13-1"
static bool locationStringToCoordinates(std::string loc, UINT8* x, UINT8* y, UINT8* z)
{
int length = loc.length();
// gather row
if (length < 4 || length > 5)
return false;
char row = loc[0];
if (row >= 'A' && row <= 'P')
*y = row - 'A' + 1;
else if (row >= 'a' && row <= 'p')
*y = row - 'a' + 1;
else
return false;
// gather column
loc = loc.substr(1);
stringstream ss = stringstream();
if (loc[0] >= '0' && loc[0] <= '9')
{
ss << loc[0];
loc = loc.substr(1);
}
if (loc[0] >= '0' && loc[0] <= '9')
{
ss << loc[0];
loc = loc.substr(1);
}
int col;
ss >> col;
if (col >= 1 && col <= 16)
*x = col;
else
return false;
// gather level
char lvl = loc[loc.length() - 1];
if (lvl >= '1' && lvl <= '3')
*z = lvl - '0';
else
return false;
return true;
}