XML vs Lua for certain tasks

Maxis2K

Chieftain
Joined
Aug 13, 2014
Messages
5
Hello all. I certainly hope I'm asking this in the right place. I've been perusing this forum for a long time and have a basic civilization up and running with all the tutorials and help from this forum. All the actual text, art and units are working just fine. But so far, they are just placeholders.

As of now, I have run into a few issues trying to create the actual Unique abilities for my civilization. And the more I read and research, the more I'm starting to think that simple editing of the existing XML script isn't going to make them work.

I guess I just want to throw out a few of my concepts and ask the community if they can be done through XML scripting or if I need to start learning something more like Lua to make them a reality.

Unique Ability:
'After researching Theology, generate a Great Prophet every 100 years'. Much like the Mayan Long Count, this would happen every 100 years (not turns). But since it is a different rate than the Mayan Long Count (every 394 years), I'm pretty sure I have to come up with a whole new script for this. Do you think Lua is the best for this? Do you think there's a way to do it just in XML?

Unique Unit:
'Replacement for the Scout: Gains +1 movement on Tundra, Snow and Hill tiles. Can also cross over Mountains'. I've tried for about two days now to find a way through XML to give a normal Scout unit a way to gain an extra movement when on certain terrain. From using "Update" tags with Tundra exceptions to even trying to jimmy rig the Inca UA to the unit. Obviously, my knowledge of coding is very limited, but I'm willing to keep trying if someone tells me it can be done in XML. I'm also encouraged by recently seeing that someone here named JFD made a very similar unit in his Kingdom of Norway mod. But he used a format called SQL which I'm not familiar with at all and most tutorials (including the original Kaels) barely had one paragraph on.

In closing, I just want to emphasize that I'm not asking anyone to do any of this work for me. I am just asking if someone can confirm wither these can be done in XML or if I have to switch over to something else like Lua. But if you could point me to some helpful tag in XML that I'm overlooking, I certainly wouldn't ignore it.
 
UA: Would need lua. "If ( Game.GetGameTurn() % 100 ) == 0 then" will fire on every 100th turn. If you want it to be every 100 turns from a specific moment, you'll have to keep track of what turn it first fired (and probably store it with SaveUtils or something).

UU: I think you can just give the unit a promotion with the <CanMoveImpassable>true</CanMoveImpassable> tag. The unit should still be restricted to its domain.
 
The UA will definitely require Lua to do. XML isn't a script or coding any way you look at it. It's a markup language and it's used to modify the Civ V database. The database has a ton of links to functions written mostly in the compiled .dll code; the Mayan UA for example. Most of what can be done in the C++ .dll code can be done in Lua (in some ridiculously contrived "driving through Alaska to get from Florida to California" way). There's really a ton to learn with Lua as most anything you'd want to do is going to rely on learning the functions and calls that can be accessed through it. Your best bet here is to A) use a "find in files" query such as the one available in Notepad++ on the source Lua code that comes with the game B) ask here.

One simple example I can give you is Player:IsAlive(). This function (which is tied to Player objects) requires you input a Player ID and it will output whether or not that player has been defeated. There's literally tons of these. Another example is GameEvents.PlayerDoTurn.Add(myFunction). This is actually a "Lua event" and it allows you to attach a script to certain functions built into the compiled .dll. This particular event will most likely be required to implement the UA you want to implement as it attaches to the "PlayerDoTurn" sequence.

Onto your UU. I believe it may be possible to do this with just XML though don't hold me to that as I'm not 100% sure. SQL is just another way to manipulate the Civ V database. It has some more powerful options available to it than XML but at the same time is more difficult to use and more prone to problems from typos etc. Everything JFD is doing with his unit in the Kingdom of Norway mod (that pertains to your UU at least) should be relatively simple to implement in XML. You're going to have to sit down and take the time to break down what JFD is doing in his SQL file. Part of why SQL is so much more finnicky than XML is that if you want to leave a row as default you have to explicitly write that (which means there's a ton of useless stuff to trudge through in his file), finding the "not useless" stuff where he's actually changing or assigning a non-default value may be the key; In XML all rows required under a tag automatically default to the default setting without you having to write a thing. Again, a good search program turned towards the game's XML files could be quite useful to you. Maybe a file pertaining to unit promotions or something along those lines already has XML flags that map to the movement bonii you're trying to achieve.

And one last note for the record. 20-30 Great Prophets is hela-OP man. One every hundred years after Theology probably needs to be toned down a bit.
 
Part of why SQL is so much more finnicky than XML is that if you want to leave a row as default you have to explicitly write that (which means there's a ton of useless stuff to trudge through in his file), finding the "not useless" stuff where he's actually changing or assigning a non-default value may be the key

I think I understand what you're trying to say (and also why you're saying it, based on many of the examples posted to this site), but it's just not true. You don't have to specify all of the column names (in fact, you'll notice the primary column [ID or rowID] is conspicuously absent in nearly all of the examples, allowing the database to assign one automatically).

To wit:
Code:
INSERT INTO Units (Type) VALUES ('MY_UNIT');
is the same as
Code:
<GameData>
    <Units>
        <Row>
            <Type>MY_UNIT</Type>
        </Row>
    </Units>
</GameData>
...where I would argue the former is less susceptible of typos.
[Oops, forgot the Row tag at first! That'd be a typo...]

EDIT: The reason you see all of the columns specified so often is that people are instead using a SELECT statement to do something you can't do with XML, i.e., copying the values from an existing unit to your new one. Because it's possible the unit has been modded by another mod, or is changed by a Firaxis patch, you want to provide all of the columns to ensure the results are consistent (but then you would run into issues when Firaxis deletes columns or adds new ones that apply to that unit). Since Firaxis isn't likely to issue any further patches, the argument to do it that way carries somewhat less force.
 
...where I would argue the former is less susceptible of typos.

Oh the irony :mischief:

Code:
INSERT INTO Units (Type) VALUES ([B][COLOR="red"]'[/COLOR][/B]MY_UNIT[B][COLOR="Red"]'[/COLOR][/B]);
 
Another way to create a new unit based on an existing one is to create a temporary table, copy the unit into into there, alter what you need to, delete the ID and reinsert into the original table. It saves having insane long SQL INSERT rows.

Here's how I've been doing it (I use the same tmp_units table to add multiple units at once; if you're only adding one unit you can condense it a bit):

Code:
CREATE TABLE tmp_units AS SELECT * FROM Units;
DELETE FROM tmp_units;

...

INSERT INTO tmp_units
SELECT * FROM Units WHERE Type='UNIT_KNIGHT';
UPDATE tmp_units 
SET Type='UNIT_MA_MONSTER_BLACKKNIGHT', [COLOR="Red"]**change other settings here**[/COLOR]
WHERE Type='UNIT_KNIGHT';

...

UPDATE tmp_units SET ID=null,
	Description = 'TXT_KEY_' || Type,
	Help = 'TXT_KEY_' || Type || '_HELP',
	Civilopedia = 'TXT_KEY_' || Type || '_HELP',
	Strategy = 'TXT_KEY_' || Type || '_HELP';

INSERT INTO Units SELECT * FROM tmp_units;
DROP TABLE tmp_units;


ETA: Here's what it would look like for a single unit:
Code:
CREATE TABLE tmp_units AS SELECT * FROM Units WHERE Type='UNIT_KNIGHT';
UPDATE tmp_units 
SET ID=null, Type='UNIT_MA_MONSTER_BLACKKNIGHT', [COLOR="Red"]**change other settings here**[/COLOR];

INSERT INTO Units SELECT * FROM tmp_units;
DROP TABLE tmp_units;
 
Wow, what a great response. It sounds like I have a lot of options to try, at least for the Unique Unit. But it also sounds like I may have my work cut out for me in trying to get the Unique Ability to work.

Onto your UU. I believe it may be possible to do this with just XML though don't hold me to that as I'm not 100% sure. SQL is just another way to manipulate the Civ V database. It has some more powerful options available to it than XML but at the same time is more difficult to use and more prone to problems from typos etc. Everything JFD is doing with his unit in the Kingdom of Norway mod (that pertains to your UU at least) should be relatively simple to implement in XML. You're going to have to sit down and take the time to break down what JFD is doing in his SQL file. Part of why SQL is so much more finnicky than XML is that if you want to leave a row as default you have to explicitly write that (which means there's a ton of useless stuff to trudge through in his file), finding the "not useless" stuff where he's actually changing or assigning a non-default value may be the key; In XML all rows required under a tag automatically default to the default setting without you having to write a thing. Again, a good search program turned towards the game's XML files could be quite useful to you. Maybe a file pertaining to unit promotions or something along those lines already has XML flags that map to the movement bonii you're trying to achieve.

When it comes to using XML tags, that's the method I've been trying so far. Following the Kael's Modders Guide, I've been using the SQLite Mozilla addon to view the database. But I'm kind of just randomly running through the database looking for tags and hoping I find something relevant to what I'm trying to do. But if XML is simply about manipulating existing functions, I don't think there is any existing function like 'TUNDRA_MOVEMENT' or 'SNOW_MOVES'. And even if I do find something, I don't know if I'm implementing it properly. Do I use a 'Unit_FreePromotions' tag? And even if I did, what kind of promotions do I use under that to give the unit bonuses for Tundra and Snow (which as far as I can see, no existing unit in the game has a bonus for).

I don't think there's a way to create a unique tag for your own unit...is there? Because that's essentially what I'm trying to do. Just create a 'SNOW_UNIT' tag and then somehow manually put in all the movement variables under it. That's how I assume people are doing it. But somehow I don't think XML works like that.

For the record, I was going to cleverly reverse engineer JFDs Kingdom of Norway mod to see how he overcame this problem. But apparently you can't open a SQL file in Mod Buddy the same way you can a XML. So maybe if someone can tell me how to open those files that'll solve everything.

And one last note for the record. 20-30 Great Prophets is hela-OP man. One every hundred years after Theology probably needs to be toned down a bit.

Yeah, it definitely may be overpowered. That's why me and a friend are going to play test it a bunch. Once I actually figure out how to implement it all into a working mod.
 
For the record, I was going to cleverly reverse engineer JFDs Kingdom of Norway mod to see how he overcame this problem. But apparently you can't open a SQL file in Mod Buddy the same way you can a XML. So maybe if someone can tell me how to open those files that'll solve everything.

SQL is text just like XML or Lua, so there's no reason that ModBuddy won't open it. (ModBuddy will even open an image file, just not in a productive way...)

If JFD is specifying every column (as suggested by Bobert13's post above) then it is probably not a good example to follow. If you understand how to correctly modify the DB with XML, then you are 90% of the way to understanding SQL. The reason is that all that XML code you generate for manipulating the DB is actually translated into SQL by the game engine to do the job. So using SQL is basically just eliminating the middleman.
Code:
UPDATE Buildings SET BuildingProductionModifier = 10 WHERE Type = 'BUILDING_WORKSHOP';
I've actually forgotten how the above looks in Firaxis "XML pseudo-SQL", but I know you would have to specify the table (Buildings), what you were setting (BuildingProductionModifier) and for what rows (WHERE Type = 'BUILDING_WORKSHOP'). If you omit the WHERE then it will update all rows. And no you don't have to do anything with default values. In all these ways DB manipulation by SQL is the same as XML. However, as hazel16's post above shows, there is a lot of SQL that simply can't be generated by Firaxis XML->SQL translator, so that limits XML.

There aren't many tutorials for SQL here but the reference site is good and there is a lot of SQLite code floating around on the internets. And since you've already got a DB viewer installed and have looked at the DB, then you are now ready to try SQL by simply learning how to change the DB without ever starting Civ5 (I haven't used the particular application you are using but I'm sure it has an "execute SQL statement" tab or window somewhere). I did write a tutorial here but it's kind of targeted at wholesale conversion modding.


Oh the irony :mischief:

Code:
INSERT INTO Units (Type) VALUES ([B][COLOR="red"]'[/COLOR][/B]MY_UNIT[B][COLOR="Red"]'[/COLOR][/B]);
The real irony here is that MY_UNIT would work, just like "MY_UNIT", even though they are both horribly incorrect. Single quotes is the correct way to specify a string literal in SQL. But SQLite bends over backward to try to figure out what you want even when you are badly abusing the rules. Hence, you will see a lot of very bad SQL around here.
 
The real irony here is that MY_UNIT would work, just like "MY_UNIT", even though they are both horribly incorrect. Single quotes is the correct way to specify a string literal in SQL. But SQLite bends over backward to try to figure out what you want even when you are badly abusing the rules. Hence, you will see a lot of very bad SQL around here.

Luckily, I paid attention to that when first getting used to it :D

I usually copy the values of each - relevant - column from the database, so that I don't have to look up the values myself everytime, and so that mods can freely edit them without conflict, like so:

Code:
INSERT INTO UnitGameplay2DScripts 	
			(UnitType, 						SelectionSound, FirstSelectionSound)
SELECT		('UNIT_JFD_BIRKEBEINER'), 		SelectionSound, FirstSelectionSound
FROM UnitGameplay2DScripts WHERE (UnitType = 'UNIT_SWORDSMAN');

But, to the OP's problem, this:

Code:
INSERT INTO UnitPromotions_Terrains		
			(PromotionType, 				TerrainType, 		DoubleMove, Attack, Defense)
VALUES		('PROMOTION_JFD_BIRKEBEINER', 	'TERRAIN_SNOW', 	1, 			20, 	20),
			('PROMOTION_JFD_BIRKEBEINER', 	'TERRAIN_TUNDRA', 	1, 			20, 	20),
			('PROMOTION_JFD_BIRKEBEINER', 	'TERRAIN_HILL', 	1, 			20, 	20);

looks like this in XML:

Code:
<UnitPromotions_Terrains>
		<Row>
			<PromotionType>PROMOTION_JFD_BIRKEBEINER</PromotionType>
			<TerrainType>TERRAIN_SNOW</TerrainType>
			<DoubleMove>true</DoubleMove>
			<Attack>20</Attack>
			<Defense>20</Defense>
		</Row>
		<Row>
			<PromotionType>PROMOTION_JFD_BIRKEBEINER</PromotionType>
			<TerrainType>TERRAIN_TUNDRA</TerrainType>
			<DoubleMove>true</DoubleMove>
			<Attack>20</Attack>
			<Defense>20</Defense>
		</Row>
		<Row>
			<PromotionType>PROMOTION_JFD_BIRKEBEINER</PromotionType>
			<TerrainType>TERRAIN_HILL</TerrainType>
			<Attack>20</Attack>
			<Defense>20</Defense>
		</Row>
	</UnitPromotions_Terrains>

This is for the specific function of the promotion that'll go to your unique unit. Which has, incidentally, highlighted something I've forgotten; the HillsDoubleMove tag... Anyway, if you have the Denmark DLC, take a look at the UnitPromotions.xml file; that's basically the exact same thing as what I have here.

But yes, my civs are probably not the best example for someone unfamiliar with XML.
 
Ah, my mistake then. I may have been remembering the opposite where I've seen columns mis-specified as string literals (and still working). Or something like that. I know that Firaxis sometimes specifies numbers as string literals (e.g., in art def tables for units), but SQL sorts that out depending on type affinity specified in table creation.

And JFD's sql above is a great example.
 
This is for the specific function of the promotion that'll go to your unique unit. Which has, incidentally, highlighted something I've forgotten; the HillsDoubleMove tag... Anyway, if you have the Denmark DLC, take a look at the UnitPromotions.xml file; that's basically the exact same thing as what I have here.

But yes, my civs are probably not the best example for someone unfamiliar with XML.

Wow, thanks a ton for the help. But actually before reading your post I was able to open your SQL file in Mod Buddy (turns out Mod Buddy was having a fit with me trying to put your files into a separate folder).

Anyway, I actually figured out how you did everything. At least I think I did. Creating a unique promotion type ('PROMOTION_JFD_BIRKEBEINER') then creating a separate SQL file Promotions where you linked the 'PROMOTION_JFD_BIRKEBEINER' attribute to the Terrain types SNOW, TUNDRA and HILL. This is exactly what I was trying to do in XML, but just didn't know the first step. How to create a unique promotion tied to the unit. Which, with your example, I'm pretty sure I know how to now.

And your example you provided me gives me a real good head start. Gonna go do the work and test it out. Thanks again.
 
(Unfortunately) SQLite lets you abuse column names and integers.
 
This would be in terms of XML, and should (unless I've forgotten something) be everything you would need to create a new promotion called "PROMOTION_SNOW_SCOUT", assign the promotion to a unique unit called a "UNIT_SNOW_SCOUT" while dis-allowing any other unit to get it's hands on the promotion, and add-in the code for the extra moves through Snow, Tundra, and Hills. Also how to add the pedia and other TXT_KEYS into the English language database. Doesn't do anything for the mountain-passing thing. Compare and/or contrast against SQL bits to see which way would be easier (SQL or XML) to write the lines needed, but this should at least give you starting code that ought to work.

[edit]I've fixed the goofs JFD caught in the text below. Anyone reading through this thread in future needs a clean version to look at, I think.
Code:
<GameData>

	<!-- CREATE THE BASIC PROMOTION -->

	<UnitPromotions>
		<Row>
			<Type>PROMOTION_SNOW_SCOUT</Type>
			<Description>TXT_KEY_PROMOTION_SNOW_SCOUT</Description>
			<Help>TXT_KEY_PROMOTION_SNOW_SCOUT_HELP</Help>
			<CannotBeChosen>true</CannotBeChosen>
			[COLOR="Blue"]<HillsDoubleMove>true</HillsDoubleMove>[/COLOR]
			<Sound>AS2D_IF_LEVELUP</Sound>
			<PortraitIndex>59</PortraitIndex>
			<IconAtlas>ABILITY_ATLAS</IconAtlas>
			<PediaType>PEDIA_ATTRIBUTES</PediaType>
			<PediaEntry>TXT_KEY_PEDIA_PROMOTION_SNOW_SCOUT</PediaEntry>
		</Row>
	</UnitPromotions>

	<!-- ADD THE EXTRA TERRAIN MOVES -->

	<UnitPromotions_Terrains>
		<Row>
			<PromotionType>PROMOTION_SNOW_SCOUT</PromotionType>
			<TerrainType>TERRAIN_SNOW</TerrainType>
			<DoubleMove>true</DoubleMove>
		</Row>
		<Row>
			<PromotionType>PROMOTION_SNOW_SCOUT</PromotionType>
			<TerrainType>TERRAIN_TUNDRA</TerrainType>
			<DoubleMove>true</DoubleMove>
		</Row>
	</UnitPromotions_Terrains>

	<!-- ASSIGN THE PROMOTION TO THE SPECIAL SCOUT UNIT -->

	<Unit_FreePromotions>
		<Row>
			<UnitType>UNIT_SNOW_SCOUT</UnitType>
			<PromotionType>PROMOTION_SNOW_SCOUT</PromotionType>
		</Row>
	</Unit_FreePromotions>


	<!-- ADD THE PROMOTION PEDIA STUFF -->

	<Language_en_US>
		<Row Tag="TXT_KEY_PROMOTION_SNOW_SCOUT" >
			<Text>Snow Scout</Text>
		</Row>
		<Row Tag="TXT_KEY_PROMOTION_SNOW_SCOUT_HELP" >
			<Text>Double moves in Snow, Tundra, Hills</Text>
		</Row>
	</Language_en_US>
</GameData>
 
This would be in terms of XML, and should (unless I've forgotten something) be everything you would need to create a new promotion called "PROMOTION_SNOW_SCOUT", assign the promotion to a unique unit called a "UNIT_SNOW_SCOUT" while dis-allowing any other unit to get it's hands on the promotion, and add-in the code for the extra moves through Snow, Tundra, and Hills. Also how to add the pedia and other TXT_KEYS into the English language database. Doesn't do anything for the mountain-passing thing. Compare and/or contrast against SQL bits to see which way would be easier (SQL or XML) to write the lines needed, but this should at least give you starting code that ought to work.
Code:
<GameData>

	<!-- CREATE THE BASIC PROMOTION -->

	<UnitPromotions>
		<Row>
			<Type>PROMOTION_SNOW_SCOUT</Type>
			<Description>TXT_KEY_PROMOTION_SNOW_SCOUT</Description>
			<Help>TXT_KEY_PROMOTION_SNOW_SCOUT_HELP</Help>
			<CannotBeChosen>true</CannotBeChosen>
			<Sound>AS2D_IF_LEVELUP</Sound>
			<PortraitIndex>59</PortraitIndex>
                        [B]<HillsDoubleMove>true</HillsDoubleMove>[/B]
			<IconAtlas>ABILITY_ATLAS</IconAtlas>
			<PediaType>PEDIA_ATTRIBUTES</PediaType>
			<PediaEntry>TXT_KEY_PEDIA_PROMOTION_SNOW_SCOUT</PediaEntry>
		</Row>
	</UnitPromotions>

	<!-- ADD THE EXTRA TERRAIN MOVES -->

	<UnitPromotions_Terrains>
		<Row>
			<PromotionType>PROMOTION_SNOW_SCOUT</PromotionType>
			<TerrainType>TERRAIN_SNOW</TerrainType>
			<DoubleMove>true</DoubleMove>
		</Row>
		<Row>
			<PromotionType>PROMOTION_SNOW_SCOUT</PromotionType>
			<TerrainType>TERRAIN_TUNDRA</TerrainType>
			<DoubleMove>true</DoubleMove>
		</Row>
		<Row>
			<PromotionType>PROMOTION_SNOW_SCOUT</PromotionType>
			<TerrainType>TERRAIN_HILL</TerrainType>
			<DoubleMove>true</DoubleMove>
		</Row>
	</UnitPromotions_Terrains>

	<!-- ASSIGN THE PROMOTION TO THE SPECIAL SCOUT UNIT -->

	<Unit_FreePromotions>
		<Row>
			<UnitType>UNIT_SNOW_SCOUT</UnitType>
			<PromotionType>PROMOTION_SNOW_SCOUT</PromotionType>
		</Row>
	</Unit_FreePromotions>


	<!-- ADD THE PROMOTION PEDIA STUFF -->

	<Language_en_US>
		<Row Tag="TXT_KEY_PROMOTION_SNOW_SCOUT" >
			<Text>Snow Scout</Text>
		</Row>
		<Row Tag="TXT_KEY_PROMOTION_SNOW_SCOUT_HELP" >
			<Text>Double moves in Snow, Tundra, Hills</Text>
		</Row>
	</Language_en_US>
</GameData>

You'll need to add the tag <HillsDoubleMove> to the main promotion, as <DoubleMove>true</DoubleMove> doesn't work in the UnitPromotions_Terrains table.
 
You'll need to add the tag <HillsDoubleMove> to the main promotion, as <DoubleMove>true</DoubleMove> doesn't work in the UnitPromotions_Terrains table.
Yeah, you're right of course. duh.:(

I edited that post so that anyone looking at this thread in future will see the correct code
 
(turns out Mod Buddy was having a fit with me trying to put your files into a separate folder).

I'm not sure if this was your problem, but just as a hint: Don't ever drag-and-drop files in ModBuddy to move files between folders. Instead right-click and then choose Cut, then right-click and Paste. Otherwise it's liable to add a bunch of extra nested folders. You won't see it in ModBuddy, but the folder structure will look like this:
..\My Mod\XML\
..\My Mod\UI\
..\My Mod\Lua\
..\My Mod\Lua\Lua\
..\My Mod\Lua\Lua\Lua\
..\My Mod\Lua\Lua\Lua\Lua\
..\My Mod\Lua\Lua\Lua\Lua\Lua\
...etc. until it hits the maximum filepath length and fails.
 
You'll need to add the tag <HillsDoubleMove> to the main promotion, as <DoubleMove>true</DoubleMove> doesn't work in the UnitPromotions_Terrains table.

Actually DoubleMove in UnitPromotions_Terrains table works fine, the problem is that Hills is not really a terrain (it's only a fake terrain used in civilopedia), so nothing you put in the UnitPromotions_Terrains table will work for Hills. Instead, you should use HillsAttack, HillsDefense and HillsDoubleMove in the main UnitPromotions table.
 
I'm not sure if this was your problem, but just as a hint: Don't ever drag-and-drop files in ModBuddy to move files between folders. Instead right-click and then choose Cut, then right-click and Paste. Otherwise it's liable to add a bunch of extra nested folders. You won't see it in ModBuddy, but the folder structure will look like this:
..\My Mod\XML\
..\My Mod\UI\
..\My Mod\Lua\
..\My Mod\Lua\Lua\
..\My Mod\Lua\Lua\Lua\
..\My Mod\Lua\Lua\Lua\Lua\
..\My Mod\Lua\Lua\Lua\Lua\Lua\
...etc. until it hits the maximum filepath length and fails.

Thanks for the tip. I'll stop dragging stuff into my project then.

And I'm happy to report that using everyones advice, my Unique Unit is working perfectly and gaining extra movement on the appropriate types of terrain. Now I'm just trying to find the tag to make the unit avoid 'TERRAIN_MOUNTAINS'. So far simple tags like <Passable>True</Passable> and <Impassable>False</Impassable> didn't work. Had a feeling it wouldn't be that simple. And now I wonder if there's some way to use the Carthage Unique Ability while removing the requirement for a Great General.
 
Top Bottom