Thread Tools
Old July 16, 2002, 13:55   #1
ahenobarb
Prince
 
ahenobarb's Avatar
 
Local Time: 04:26
Local Date: November 1, 2010
Join Date: Nov 2001
Posts: 437
Limits of modding
I'm trying to get a sense of the limits to the ability to mod CTP2 and have a few questions:

1) can you make government types that expire? Meaning can you make it so that a civilization cannot have a "city-state" government after the discovery of a certain advance (giving a new government type, for instance) or after a certain date in the game?

2) Is there an equivalent to the events.txt in Civ II? so that you could tell the game/scenario: on x turn, [DoSomething1] happens?

3) In a scenario, could you edit the territory borders around a city?

Thanks in advance.
ahenobarb is offline  
Old July 16, 2002, 19:59   #2
Peter Triggs
CTP2 Source Code ProjectCivilization IV Creators
King
 
Local Time: 04:26
Local Date: November 1, 2010
Join Date: Jan 2000
Location: Gone Fishin, Canada
Posts: 1,059
Quote:
2) Is there an equivalent to the events.txt in Civ II? so that you could tell the game/scenario: on x turn, [DoSomething1] happens?
I'll try to answer this one. In Civ2 you could have:

Code:
@IF
CityTaken
city=New York
attacker=English
defender=Americans
@THEN
Text
New York captured by the Redcoats! Enraged local citizens join the fight for liberty!
EndText
CreateUnit
unit=Militia
owner=Americans
veteran=false
homecity=none
locations
84,22
84,23
79,31
endlocations
@ENDIF
In CTP2 this could be done, pretty well literally, as:

Code:
HandleEvent(CaptureCity) 'SampleHandler' pre {

    if (PlayerCivilization(player[0]) == CivilizationIndex("English") 
        && PlayerCivilization(city[0].owner) == CivilizationIndex("American")
	  && city[0].location==NewYorkLoc ){
	   
         message(city[0].owner,'NewYorkCaptured');
         event:CreateUnit(city[0].owner,UnitDB(UNIT_MILITIA),SpawnRebelsLoc,0);

    }
}


messagebox 'NewYorkCaptured' {
    Show();
    Text (ID_NewYorkCapturedMessage);
    // NewYorkCapturedMessage "New York captured by the Redcoats!
    // Enraged local citizens join the fight for liberty!"
}
where:

i) NewYorkLoc is a (global) location variable that you've set to be New York's location,

ii) SpawnRebelsLoc is a (global) location variable that you've set to be the place where you want the Militia to appear,

and,

iii) the outcommented lines appear in the .txt file that you're using to save your text in.

The "CaptureCity" event occurs whenever a city is captured: player[0] is the capturing player and city[0] is the city (so city[0].owner is it's owner and city[0].location is it's location).

The only thing I've left out is a mechanism to check that SpawnRebelsLoc is a valid location to create a new unit on. There's more than one way to do this and no point on going off on a tangent.

Although I haven't looked into it in detail (the above is just the example on p32 of the Conflicts in Civilization Instruction Manual) it would appear to be a very straightforward matter to convert any of your existing triggers into SLIC.
(What would be very very tedious would be making the maps and units and all that kind of stuff.)

But anyway, SLIC is FAR more powerful than the triggers mechanism of Civ2. For one thing, the latter had seven events: CityTaken, Negotiation, RandomTurn, ScenarioLoaded, Turn, TurnInterval, and UnitKilled. SLIC has something like 238 events (if I counted them right, they're not numbered). Not all of them are interesting, nor even all that usable, but each of them is a 'hook' into the executable: they (and the ones in Civ2 for that matter) allow you to change the actual game's program.

'Actions' Once you've set your hook, Civ2 gave you 9 types of 'action' that you can perform: ChangeMoney, CreateUnit, DontPlayWonders, JustOnce, MakeAgression, MoveUnit, PlayCDTrack, PlayWaveFile, and Text/EndText. With SLIC what corresponds to an action is just any acceptable block of SLIC code. From this point of view there are literally infinitely many types of SLIC 'actions' because as a proper scripting language SLIC has all sorts of resources that enable you to specify what it is that you want the computer to do.

For example, in Civ3 you can get 'Generals'. But, on the one hand, I've read complaints that you don't get enough of them, and on the other, big deal: Immortal Wombat had already implemented a similar idea in Cradle before Civ3 was released. Hexagonian describes it as follows:

Quote:
There is also a set of Wonder Units that are tied into the creation of certain Wonders. I tried to align them to a theme within the Wonder - hence the selection of certain leaders. They will grant veteran status to any units underneath them. They also operate as ranged units, so they will not be sitting on the front lines taking the early hits - and are generally stronger than their counterparts. There is a happiness penalty if the unit is disbanded or lost.

To do this, Immortal Wombat wrote a whole bunch of little handlers: a pair for each of the special Wonder units. Here's the pair for Hammurabi with my comments trying to explain what each line is doing:

Code:
HandleEvent(CreateWonder) 'Hammurabi' post {//this triggers whenever a Wonder is created

	tmpWonder = value[0];//set tmpWonder equal to the Data Base value of the Wonder that was just created

	if(tmpWonder == WonderDB(WONDER_CODE_OF_HAMMURABI)) {//if this wonder was the CODE_OF_HAMMURABI
		tmpCity = city[0]; // set tmpCity equal to the city the wonder was created in 
		tmpPlayer = tmpCity.owner;//and tmpPlayer equal to the owner of that city
		CreateUnit(tmpPlayer, UnitDB(UNIT_HAMMURABI), city[0].location, 0);//give HAMMURABI to tmpPlayer in the city
		DisableTrigger('Hammurabi');//do this once, i.e., only allow one HAMMURABI unit to be created
	}
}

HandleEvent(BeginTurn) 'UnhappinessChecker1' pre {
	foundHim = 0;//set foundHim to false
	if(PlayerHasWonder(Player[0], WonderDB(WONDER_CODE_OF_HAMMURABI))) {
      //if the player whose turn is beginning has the CODE_OF_HAMMURABI Wonder
		for(i = 0; i < player[0].units; i = i + 1) {// look through his units
			GetUnitByIndex(player[0], i, tmpUnit);//   "
			if(tmpUnit.type == UnitDB(UNIT_HAMMURABI)) {//if one of them is HAMMURABI
				foundHim = 1; //set foundHim to true
			}
		}
		if (!foundHim) {//if we didn't find him (i.e. he just got killed or disbanded)
			for(j = 0; j < player[0].cities; j = j + 1) {//look through his cities
				GetCityByIndex(player[0], j, tmpCity); // "
				Event:AddHappyTimer(tmpCity, 3, -1, 12);// and make each of them unhappy
				DisableTrigger('UnhappinessChecker1'); // do this once, i.e. just when HAMMURABI is       
                                                               // killed/disbanded
 
			}
		}
	}
}
Details aside, the real point here is to notice the incredible flexibility of what you can do with SLIC.
Peter Triggs is offline  
Old July 17, 2002, 00:03   #3
Pedrunn
Call to Power II Democracy Game
King
 
Pedrunn's Avatar
 
Local Time: 01:26
Local Date: November 1, 2010
Join Date: Jul 2001
Location: of Natal, Brazil
Posts: 2,555
Re: Limits of modding
Quote:
Originally posted by ahenobarb
I'm trying to get a sense of the limits to the ability to mod CTP2 and have a few questions:

1) can you make government types that expire? Meaning can you make it so that a civilization cannot have a "city-state" government after the discovery of a certain advance (giving a new government type, for instance) or after a certain date in the game?
I've heard that you can add the line ObsoleteAdvance in the government.txt inside the brackets of the gov you aim at.
but i never tested it myself
Ex
Code:
ObsoleteAdvance ADVANCE_HUMAN_RIGHTS
Quote:
Originally posted by ahenobarb
3) In a scenario, could you edit the territory borders around a city?
Trick one. But i am almost 100% sure that you cant in a easy way .
The best way that comes to my mind is to create another player cities in the territory you dont want to have boders and them disband them right after. the territory wich the disbanded city occupied becomes neutral.
__________________
"Kill a man and you are a murder.
Kill thousands and you are a conquer.
Kill all and you are a God!"
-Jean Rostand
Pedrunn is offline  
Old July 17, 2002, 02:12   #4
Lou Wigman
Warlord
 
Lou Wigman's Avatar
 
Local Time: 14:26
Local Date: November 1, 2010
Join Date: Jun 2001
Location: Newcastle,Australia
Posts: 137
It is quite easy to make governments obsolete by using the flag in government.txt. This eliminates that government from the 'pick list' after the enabling advance has been achieved. The problem is that if the player is running an 'obsolete' government at the changeover event then that civ will remain in that government. There appears to be no easy way to automatically kick the player out of the obsolete government.
Lou Wigman is offline  
Old July 17, 2002, 04:21   #5
Locutus
Apolytoners Hall of FameCiv4 SP Democracy GameCiv4 InterSite DG: Apolyton TeamBtS Tri-LeagueC4BtSDG TemplarsC4WDG Team ApolytonCivilization IV CreatorsCTP2 Source Code ProjectPolyCast Team
Deity
 
Locutus's Avatar
 
Local Time: 06:26
Local Date: November 1, 2010
Join Date: Nov 1999
Location: De Hel van Enschede
Posts: 11,702
As far as borders go, you can create tile improvements similar to the Fortress, that make the border expand. The radius of the expansion is determined by a variable that can be set, so you could simply create 1 (invisible) tile imp for every radius you would like and place them with SLIC (make sure cities themselves have a border radius of 0 or 1 then, or things could get screwed up). I've successfully tested this myself to simulate the expanding borders concept of Civ3. Only down-sides are shrinking borders and city radius. Making borders shrink properly is tricky, the 'real' border will shrink but some sort of remnant of the old border is left, which looks ugly on the map and causes a number of weird bugs; I haven't succeeded in making this work properly yet (but Pedrunn's trick is a good one, hadn't considered that yet - but it would be better to use tile imps rather than cities). The second problem is that the city radius *always* falls within the borders of a civ. If you edit cities so they have a border radius of 0 and then place a tile-imp with radius 1 through SLIC, it will work fine for 1-radius cities but when the city expands to size 9 (size 7 in the original game, IIRC), the city radius expands to 2 and the borders expand with it, whether you want to or not.

BTW, excellent explanation/comparison by Peter, that's one for the archives
__________________
Administrator of WePlayCiv -- Civ5 Info Centre | Forum | Gallery

Last edited by Locutus; July 17, 2002 at 04:28.
Locutus is offline  
Old July 17, 2002, 11:02   #6
Immortal Wombat
Apolytoners Hall of Fame
Prince
 
Immortal Wombat's Avatar
 
Local Time: 05:26
Local Date: November 1, 2010
Join Date: Dec 2000
Location: in perpetuity
Posts: 4,962
Just what I was thinking...

The one real pain translating Civ2 code to SLIC is the locations, which are bound to be different in the two games. God help whoever does Red Front.
__________________
Concrete, Abstract, or Squoingy?
"I don't believe in giving scripting languages because the only additional power they give users is the power to create bugs." - Mike Breitkreutz, Firaxis
Immortal Wombat is offline  
Old July 17, 2002, 12:04   #7
ahenobarb
Prince
 
ahenobarb's Avatar
 
Local Time: 04:26
Local Date: November 1, 2010
Join Date: Nov 2001
Posts: 437
Thanks everybody!

Great explanation Peter, I went through it line by line and now have a much better sense how to do things like this with .slc files. Great example BTW, I am playing the Cradle Mod and have Hammurabi, it's nice to look at some of the code, so I can see how this works out in the game.

From everything that I've gathered today, it looks like the Civ III mod that I shelved while I waited for improvements to the game to come out, will be coming off the shelf and into a CTP2 environment. CTP2 can do about 95% of the things I wanted to do in the mod, now to make time to acutally do it.
ahenobarb is offline  
Old July 17, 2002, 13:26   #8
Locutus
Apolytoners Hall of FameCiv4 SP Democracy GameCiv4 InterSite DG: Apolyton TeamBtS Tri-LeagueC4BtSDG TemplarsC4WDG Team ApolytonCivilization IV CreatorsCTP2 Source Code ProjectPolyCast Team
Deity
 
Locutus's Avatar
 
Local Time: 06:26
Local Date: November 1, 2010
Join Date: Nov 1999
Location: De Hel van Enschede
Posts: 11,702
Hey, that's great to hear Don't restrain yourself in providing us with juicy details, we love juicy details
__________________
Administrator of WePlayCiv -- Civ5 Info Centre | Forum | Gallery
Locutus is offline  
Old July 18, 2002, 01:41   #9
Pedrunn
Call to Power II Democracy Game
King
 
Pedrunn's Avatar
 
Local Time: 01:26
Local Date: November 1, 2010
Join Date: Jul 2001
Location: of Natal, Brazil
Posts: 2,555

Just let us know about the other 5%. We probably can help you get those
__________________
"Kill a man and you are a murder.
Kill thousands and you are a conquer.
Kill all and you are a God!"
-Jean Rostand

Last edited by Pedrunn; July 18, 2002 at 01:47.
Pedrunn is offline  
 

Bookmarks

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On

Forum Jump


All times are GMT -4. The time now is 00:26.


Design by Vjacheslav Trushkin, color scheme by ColorizeIt!.
Powered by vBulletin® Version 3.8.2
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Apolyton Civilization Site | Copyright © The Apolyton Team