 |
|
JPF_civplayer
|
|
Seattle, WA, USA
Jul 2000 time: 05:13
|
|
The overall idea seems sound to me. Be sure to throw in government effects..obviously under fascism you should be able to act nastier than under democracy before unrest happens.
|
|
|  |
 |
|
Gedrin
|
|
Yes I've been considering that too.
I don't want to unbalance the governements though so such things take a great deal of care and consideration. I've had thoughts like...
Ok a fascist gov may be able to take a city without upsetting their people as much as they would in a democracy. However all govs call out for a similarly larger amount of blood when they do so.
Meaning that while a democracy could not fight an agressive war against anyone it would be particularly good at retribution. "You take one of mine I'll take two of yours".
There's nothing quite like a democracy incited to war.
This is a significant trigger and must not be taken lightly. It will profoundly alter the game.
Gedrin
|
|
|  |
 |
|  |
 |
|
Gedrin
|
|
Hmmm.... I had not thought of that... or realized it really...
This might work though:
INT Preference(prefname)
INT SetPreference(prefname, value)
'Course if you are playing multiple games you will need to swap out userprefs.txt (is that the file name? Can't recall)
And this does rely on the idea that the prefs file is updated or at least can be updated when a value is changed... but I'm unsure of that one either.
Anyone know for sure?
Gedrin
|
|
|  |
 |
|
Gedrin
|
|
As promised some of the other triggers I experiment with:
//Setup
trigger 'Setup' when ((g.player == 0) && (g.year == 0)) {
// This is the value from userprofile.txt that details the number of players that STARTED the game.
// This may of course be very different from the number currently in the game.
numberOfPlayers = Preference("NumPlayers");
}
messagebox 'PopFlees' {
// POP_FLEES must be defined in info_str.txt and reads like:
// POP_FLEES "Refugees from [city.1.name] flee in terror."
Text(ID_POP_FLEES);
MessageType("WARNING");
}
trigger 'Refugees' when (city.captured) {
// This value will rounded down.
popCount = city.1.population / 2;
cityCount = Cities(player.2);
// Skip the last city in a civ. They have nowhere to go.
// Optionaly we could find a Random civ that is still alive and let them flee there.
if (cityCount > 0) {
AddPops(city.1, -popCount);
Message (player.1, 'PopFlees');
Message (player.2, 'PopFlees');
index = 0;
while (index < popCount) {
destCity = Random(Cities(player.2));
SetCityByIndex(2,player.2,destCity);
AddPops(city.2, 1);
index = index + 1;
}
}
}
messagebox 'PopEmmigrates' {
// POP_EMMIGRATES must be defined in info_str.txt and reads like:
// POP_EMMIGRATES "Your authority is questioned in [city.2.name]. Citizens have Emmigrated to [city.3.name]."
Text(ID_POP_EMMIGRATES);
MessageType("INCITE");
}
messagebox 'PopImmigrates' {
// POP_IMMIGRATES must be defined in info_str.txt and reads like:
// POP_IMMIGRATES "Political refugees arrive from [city.2.name] in [city.3.name].
Text(ID_POP_IMMIGRATES);
MessageType("INCITE");
}
// PopMigration and B-Tax merged for speed.
trigger 'AvePopBasedEffects' when ((g.player) && (g.year)) {
cityCount = Cities(g.player);
totalPop = 0;
smallestPop = 100;
index = 0;
// find the total population and smallest city
while (index < cityCount) {
SetCityByIndex(1, g.player, index);
totalPop = totalPop + city.1.population;
// Remember which is the smallest-newest city for PopMigration
if (city.1.population <= smallestPop) {
SetCityByIndex(2,g.player,index);
smallestPop = city.2.population;
}
index = index + 1;
}
// apply the BureaucracyTaxes
surtax = (2*totalPop - cityCount * cityCount) * (600 - g.year) / 200;
AddGold(g.player,surtax);
// Migration becomes more likey as time goes on and while ave pops remain low.
// if ((g.year/30) > (Random(20) + avePop))
if ((cityCount*g.year) > (30*(Random(20)*cityCount + totalPop))) {
recipientPlayer = 0;
cityCount = 1000;
// find the civ with fewest cities
index = 1;
// Exclude player = 0 so the Barbarians do not get them at all.
while (index < numberOfPlayers) {
if ((Cities(index) > 0) && (Cities(index) < cityCount)) {
cityCount = Cities(index);
recipientPlayer = index;
}
index = index + 1;
}
// if it is not me then move 1 pop... yes this does mean the player with
// the fewest cities may ICS with impunity, to catch up of course.
if (recipientPlayer != g.player) {
// This actually produces a number from [0,cityCount) ie not inclusive!!!
index = Random (cityCount);
SetCityByIndex(3,recipientPlayer,index);
Message (g.player,'PopEmmigrates' );
Message (recipientPlayer,'PopImmigrates' );
AddPops(city.2, -1);
AddPops(city.3, 1);
}
}
}
Gedrin
|
|
|  |
 |
|
Gedrin
|
|
I forgot one:
This also requires the setup trigger above to set numberOfPlayers
messagebox 'PopTerrorized' {
// POP_TERRORIZED defined in info_str.txt reads like:
// POP_TERRORIZED "Foreign backed terrorists strike in [city.1.name]. Casualties are high."
Text(ID_POP_TERRORIZED);
MessageType("WARNING");
}
trigger 'AveScoreBasedEffects' when ((g.player) && (g.year)) {
// Player = 0 is the Barbarian who does not suffer from terrorist...
// but we still need the total score since ave = total/number
if (g.player == 0) {
totalScore = 0;
index = 1;
while (index < numberOfPlayers) {
SetPlayer(1,index);
totalScore = totalScore + player.1.score;
}
} else {
cityCount = Cities (g.player);
if (cityCount > 0) {
SetPlayer(1,g.player);
// This equates to [-2,0] + (player.1.score - aveScore)/aveScore
// I multiplied by numberOfPlayers/numberOfPlayers = 1 to clear some divisions
strikes = Random(3) - 2 + (player.1.score * numberOfPlayers - totalScore)/totalScore;
while (strikes > 0) {
destCity = Random (cityCount);
SetCityByIndex(1,g.player,destCity);
AddPops(city.1, -1);
Message(g.player, 'PopTerrorized');
strikes = strikes - 1;
}
}
}
}
Gedrin
|
|
|  |
 |
|
Gedrin
|
|
Arrgg...
Those with a keen eye will notice I have an infinite loop in the trigger above...
The terrorist is currently being tested so I make no garuntees about it yet. :P
the while loop should be:
if (g.player == 0) {
totalScore = 0;
index = 1;
while (index < numberOfPlayers) {
SetPlayer(1,index);
totalScore = totalScore + player.1.score;
index = index + 1;
}
} else {
I forgot that index = index + 1;
Although I have not hit an infinite loop yet so I think I must have changed it already at home :O
Gedrin
|
|
|  |
 |
|  |
 |
|
gemini
|
|
Yes, I have tested to see what it returns with the regardlevel function. If I remember correctly it returns an integer ranging from 1 to 5 (or 0 to 5 can't remember), anyway 1 is low regard and 5 is high.
Btw, I read your other post about storing variables and I read Locutus's response. I can't explain why you have no problems loading your games when you use your trigger. I would be interested in knowing if your variables are retained correctly after loading. Let me know. Thxs.
Anyway, Ctp does remember which triggers have been disabled. And I haven't run into any problems disabling and enabling triggers over and over when loading save games. I did something similar for my on map date display. Any way, maybe you could set ranges for certain triggers and disable other triggers that don't apply.
Eg.
code:
trigger 'ged' when (g.player){
x = 40;
}
trigger 'gad' when (g.player){
x = 50;
}
trigger 'god' when (g.player){
x = 60;
}
trigger 'gcd' when (g.player){
x = 70;
}
trigger 'code' when (g.player){
if(player.cities < 2){
disabletrigger('gcd');
disabletrigger('ged');
disabletrigger('gad');
}
if(player.cities > 1 | | player.cities < 5){
disabletrigger('god');
disabletrigger('ged');
disabletrigger('gad');
}
if(player.cities > 4){
disabletrigger('gad');
disabletrigger('god');
disabletrigger('gcd');
}
}
trigger 'whatyouwanttorun' (g.player){
if(x == 60){
//run the code
}
if(x ==
sorry not worth it for me to go on and on but thats it
}
I know the code above doesn't make much sense but it's the idea that might be useful.
I thought I might throw it at you.
Looking back at your post about the regardlevel function, if I am understanding correctly, you want to store values in the element for the regardlevel function??? Like regardlevel(12,12);
If that's what you want to do I know it won't work. Only the built in player variables work in there.
------------------
Gemini
[This message has been edited by gemini (edited October 03, 2000).]
|
|
|  |
 |
|  |
 |
|
Gedrin
|
|
Locutus:
Have you been able to set the player context with:
player.1 = x;
I thought it crapped out when you tried to write to built in variables. That's what the VOID SetPlayer(index, player) function is for.
Doesn't change the accuracy of your statement though. That is what I had in mind for setting regard.
I imagine since the regard goes from 0 to 5 (vs 1 to 5) and these are War; Angry; Unhappy; Neutral; Happy; Love.
This is a shame since I doubt the function would allow larger values.
However, having said that and having read the thread Locutus pointed me too I do not think it matters.
As you probably know SLIC is not using a true random number generator... or at least I don't think it does. It uses a pseudoRandom function. This means that the nth random number will be x and if you back up to some prior condition it will be x again. I have repeatedly saved games, run a turn, got a disseminated tech, reloaded a game and again got a disseminated tech. In addition I have never failed to get this result. This makes me very confident, although not positive, that the values used in my disseminate trigger are preserved over restarts.
IE:numberOfPlayers and numberWith*some_advance*
I believe quite strongly that the entire SLIC stack would be saved on a savegame.
I do not know why the triggers described [in the thread Locutus pointed to me] crashed on a restart. I suspect actually that some small error was made in typing it in.
Would:
trigger 'move' when (IsHumanPlayer(g.player)){
even load?
trigger 'move' when (IsHumanPlayer(g.player) == 1){
might.
Having noted that and assuming that this was the case then I also have concerns over placing IsHumanPlayer in the trigger conditions. There are warnings about this sort of thing in the SLIC guide.
The reason I suspect this is that (IsHumanPlayer(g.player) == 1) does not provide enough information to determine if it is true or not. You also need to know if g.player is human.
On the other hand something like g.player == 1 does provide enough information since g.player is an integer already. You guys follow me?
I suspect that to be the cause of the crash but would need to know a good deal more about the guts of SLIC to answer it.
Having read over point 2) in the at thread also I think this is the sort of thing you need.
TypeLocation locationvar;
VOID MakeLocation(locationvar, x, y, z)
Set locationvar to (x,y,z)
VOID SetLocation(index, locationvar)
Set location.index to locationvar.
VOID ExtractLocation(location, locationvar)
Get a location from built in variable and put it in locationvar.
These can be used in combination to handle any function arguments depending on if they expect a user defined TypeLocation locationvar; or a built variable in the location container: SetLocation(3, locationvar) and then use location.3 in a function... or gain access to any of the fields on location [which unfortunately are not detailed in the SLIC docs]; or even just a index into the current location context.
Gedrin
And on another note: My Terrorist Trigger 'fully' tested for functionality. I have no idea how well it balances things but it should certainly hamper the runaway civ... Human or AI.
messagebox 'PopTerrorized' {
// POP_TERRORIZED defined in info_str.txt reads like:
// POP_TERRORIZED "Foreign backed terrorists strike in [city.1.name]. Casualties are high."
Text(ID_POP_TERRORIZED);
MessageType("WARNING");
}
trigger 'AveScoreEff' when ((g.player) && (g.year)) {
// Player = 0 is the Barbarian who does not suffer from terrorist attacks
// but we still need the total score since ave = total/number
if (g.player == 0) {
totalScore = 0;
numberPlayersLeft = 1;
index = 1;
while (index < Preference("NumPlayers")) {
if (IsPlayerAlive(index) == 1) {
SetPlayer(1,index);
totalScore = totalScore + player.1.score;
numberPlayersLeft = numberPlayersLeft + 1;
}
index = index + 1;
}
} else {
cityCount = Cities (g.player);
// Note that CityCount > 0 is not the same as IsPlayerAlive. Consider turn 0.
if (cityCount > 0) {
SetPlayer(1,g.player);
// The following = Random(3) - 2 - (player.1.score - average)/average
// where average = totalScore/numberPlayerLeft
strikes = Random(3) - 3 + (player.1.score * numberPlayersLeft / totalScore);
// The chances that a terrorist strike kills a civ's last city is small but not nil
while ((strikes > 0) && (cityCount > 0)) {
destCity = Random (cityCount);
SetCityByIndex(1,g.player,destCity);
// Always message BEFORE reducing pop since it might destroy the city
Message(g.player, 'PopTerrorized');
AddPops(city.1, -1);
cityCount = Cities (g.player);
strikes = strikes - 1;
}
}
}
}
Gedrin
|
|
|  |
 |
|
Locutus
|
|
ACS CTP1/2 Manager & Civ4 Co-Manager
|
 |
Hengelo, The Netherlands
Nov 1999 time: 06:13
|
|
Gedrin,
quote:

Locutus:
Have you been able to set the player context with:
player.1 = x;
I thought it crapped out when you tried to write to built in variables. That's what the VOID SetPlayer(index, player) function is for.
Doesn't change the accuracy of your statement though. That is what I had in mind for setting regard.
 |
Sorry, I made a minor mistake, it should be:
x = 12;
y = 12;
RegardLevel(x, y);
You can't set built-in variables (directly) but you *can* use user-defined variables whenever you would normally have used built-in ones. I don't know what I was thinking when I wrote that down 
quote:

I imagine since the regard goes from 0 to 5 (vs 1 to 5) and these are War; Angry; Unhappy; Neutral; Happy; Love.
This is a shame since I doubt the function would allow larger values.
 |
Hmm, you're probably right. I think I got confused with something else when I said there probably was no limit.
quote:

However, having said that and having read the thread Locutus pointed me too I do not think it matters.
As you probably know SLIC is not using a true random number generator... or at least I don't think it does. It uses a pseudoRandom function. This means that the nth random number will be x and if you back up to some prior condition it will be x again. I have repeatedly saved games, run a turn, got a disseminated tech, reloaded a game and again got a disseminated tech. In addition I have never failed to get this result. This makes me very confident, although not positive, that the values used in my disseminate trigger are preserved over restarts.
IE:numberOfPlayers and numberWith*some_advance*
 |
Yeah, I noticed that the Random function was only pseudo-random as well but didn't draw any conclusions from it. You have a good point there. (Where were you six months ago? )
quote:

I believe quite strongly that the entire SLIC stack would be saved on a savegame.
I do not know why the triggers described [in the thread Locutus pointed to me] crashed on a restart. I suspect actually that some small error was made in typing it in.
 |
It could well be, I must say I'm doubting our theory more and more as well. Oh well, it was nice while it lasted 
quote:

Would:
trigger 'move' when (IsHumanPlayer(g.player)){
even load?
trigger 'move' when (IsHumanPlayer(g.player) == 1){
might.
Having noted that and assuming that this was the case then I also have concerns over placing IsHumanPlayer in the trigger conditions. There are warnings about this sort of thing in the SLIC guide.
The reason I suspect this is that (IsHumanPlayer(g.player) == 1) does not provide enough information to determine if it is true or not. You also need to know if g.player is human.
On the other hand something like g.player == 1 does provide enough information since g.player is an integer already. You guys follow me?
I suspect that to be the cause of the crash but would need to know a good deal more about the guts of SLIC to answer it.
 |
I think the "trigger 'move' when (IsHumanPlayer(g.player)) {" should work.
IsHumanPlayer(g.player) will return either true (but since there is no boolean datatype it will return 1) or false (or 0), so "(IsHumanPlayer(g.player))" and "(IsHumanPlayer(g.player) == 1)" do exactly the same, the logical expression "(1)" is the same as the expression "(1 == 1)" (the last one will evaluate to "(1)" anyway). I hope you can follow this.
Also, I'm pretty confident that I've used it before with succes. In fact, even in Activision's standard script.slc file it's used as trigger condition several times (though always in combination with other conditions, so that doesn't say everything).
I read through the entire SLIC guide but couldn't find the warnings you are referring to.
You say that you don't have enough information and that you need to know if g.player is human, but isn't that exactly what IsHumanPlayer does? I agree though that "g.player == 1" or even better, just "g.player" and check if the player is human later with an if-statement, is safer but using IsHumanPlayer as trigger condition should work as well.
Anyway, most of SLIC 1 looks like it was just hacked together anyway and not at all finished, so I expect and hope that all will be better in SLIC 2.
quote:

Having read over point 2) in the at thread also I think this is the sort of thing you need.
TypeLocation locationvar;
VOID MakeLocation(locationvar, x, y, z)
Set locationvar to (x,y,z)
VOID SetLocation(index, locationvar)
Set location.index to locationvar.
VOID ExtractLocation(location, locationvar)
Get a location from built in variable and put it in locationvar.
These can be used in combination to handle any function arguments depending on if they expect a user defined TypeLocation locationvar; or a built variable in the location container: SetLocation(3, locationvar) and then use location.3 in a function... or gain access to any of the fields on location [which unfortunately are not detailed in the SLIC docs]; or even just a index into the current location context.
Gedrin
 |
I'm not sure what you're trying to tell but if you'd like to know how I eventually implemented the MakeLocation thing, I suggest you have a look at the flatmap version of MedMod 4 
Locutus
BTW, your SLIC triggers look very cool, if I ever reinstall CtPI again I'll try them out 
[This message has been edited by Locutus (edited October 03, 2000).]
|
|
|  |
 |
|  |
 |
|
WesW
|
 |
Florence, Al., USA
Jan 1970 time: 23:13
|
|
I don't get to the creation forum much any more, and so I have just read the entire thread here for the first time. To summarize: Does anyone have any ideas about the Med mod crashes?
Also, Gedrin, I was getting you mixed up with Gemini regarding the Partisan trigger.
Gemini, do you have such a trigger, ala civ2's, for your WWII mod?
You three, Locutus, Gemini and Gedrin, need to get together and list all the triggers that you have developed, either in the same or individual threads. No need for the code, just a brief description of the triggers. I think you may be surprised at what the others have done. Also, you may want to list ideas for triggers that you have, and triggers that you could not get to work, with the code included.
I am mainly looking ahead to CtP2 and its improved slic2 as far as using these lists and ideas. The game will be out before you know it, and it doesn't hurt to start kicking ideas around and comparing notes now. This thread is evidence that you are already doing that some, but putting things out in a detailed and standardized way would be beneficial to everyone, imo.
|
|
|  |
 |
|
Locutus
|
|
ACS CTP1/2 Manager & Civ4 Co-Manager
|
 |
Hengelo, The Netherlands
Nov 1999 time: 06:13
|
|
Gedrin,
quote:

The warning paragraph is on: http://apolyton.net/ctp/modification/slicbuiltin.shtml
Each trigger object you create is only triggered for one type of event, even though it may contain more
than one variable that can be used as a trigger event! See Trigger Priorities for a discussion of how to
determine which events will cause your trigger to be run. A good way to be safe is to just put as little logic
in the when(...) condition as possible, and instead move everything else to an if(...) {} inside the trigger.
 |
I saw that paragraph but I didn't see how applying functions in trigger conditions has anything to do with it. Now you mention it and I rethink it, I know what you mean, but I still don't think it should be a problem (not in this case anyway).
quote:

And you know you want it re-install CTP... it's not CTPII is out yet. 
Oh and yeah Flat Map... just looked over. Seems you knew what I was talking about.
Gedrin
 |
Yeah, I know I want to reinstall it, but if I can is a different matter altogether 
That probably won't be the case before CtPII comes out so I decided to just give CtP up altogether, but I just couldn't resist to at least keep posting here 
Wes,
As far as the crashes go: no, we haven't got a frinnin' clue 
Partisan trigger? Isn't that from the old SLIC group? Or did Gemini make one of his own version?
As far working together goes, I wouldn't mind that at all. In fact, I have already been thinking (and I *think* Don has too) to get a new SLIC group together for SLIC 2. It goes without saying that the people who I have in mind for this, presuming they have the time and energy for it, are Don, Darryl, Chris, you and myself (and one or two more people with SLIC expertise and/or good ideas). Anyway, that's something for the future...
But SLIC 2 will probably be *very* different from SLIC 1 so there's not much point doing an anything but gathering ideas for what should be converted to or implemented in SLIC 2 (and hoping that it will be possible). And gathering ideas is something that anyone can do, whether you have SLIC knowledge or not. Basicly, one could simply go to the CtPII forums and put every suggestion and idea mentioned there on a list and try and implement as much of that list as possible in SLIC 2 once it's available, but that could just as well be done once CtPII is released as well. Maybe even better 'cause we will then have a much better idea of what will be possible and what not. What I'm trying to say is that IMHO we don't have a friggin' clue what SLIC 2 will be like and can't do anything meaningfull until we do.
I do agree that writing down code that we already have (or that we've been working on but what doesn't work yet) would be usefull. That would be put on top of the list with stuff that should be converted to SLIC 2. We might even be able to help each other out if we're stuck with something.
When I get home tonight (I'm at my university now), I'll see if I can find the Leonardo's Workshop code, I started that a long time ago but never finished it because of unexplained bugs and other (non-CtPI) things that came up. Maybe one of the guys has an explanation for the bugs. Any other code that I have (all from the old SLIC group) is either already in your mod (apart from the Guerrilla/Partisan thing, it's basicly done but no-one ever did anyting with it) or not in an advanced enough state to share with others (i.e. more idea then actual code).
Anyway, I'm also leaving town tonight and I'll be gone for a few days (I'm going to Disneyland! ) and when I come back I have exams to study for so I'm not sure if I can actually post the LW code (or anything else for that matter) before the middle of next week.
[This message has been edited by Locutus (edited October 04, 2000).]
|
|
|  |
 |
|
gemini
|
|
Hi guys, Nope, I never made a partisan trigger for anything but my own scenario. And it was designed for the scenario so unfortunately it would be not useful outside of that.
Yes, I am looking forward to slic2. I really can't wait to see what's going to be all added and improved. Hey, I'm sure I can spare some time the the new slic group Locutus so please keep me in mind. Thxs.
Gedrin, that's just what I was thinking. If slic2 allows arrays there is so much more we could do.
The one thing I hope, really hope is in slic2 is the ability to destroy and build improvements.
------------------
Gemini
[This message has been edited by gemini (edited October 06, 2000).]
[This message has been edited by gemini (edited October 06, 2000).]
|
|
|  |
 |
|
Gedrin
|
|
Alright, I'm getting torqued.
I have the following in my Terrorist trigger:
SetPlayer(1,g.player);
// The following = Random(3) - 2 - (player.1.score - average)/average
// where average = totalScore/numberPlayerLeft
strikes = Random(3) - 3 + (player.1.score * numberPlayersLeft / totalScore);
// The chances that a terrorist strike kills a civ's last city is small but not nil
while ((strikes > 0) && (cityCount > 0)) {
And while the comment has an error, is should be:
// The following = Random(3) - 2 + (player.1.score - average)/average
The line in my code is what I really want:
strikes = Random(3) - 3 + (player.1.score * numberPlayersLeft / totalScore);
Now I know the trigger does what I want when the conditions are met because if I use:
strikes = Random(3) + 3 + (player.1.score * numberPlayersLeft / totalScore);
it fires 3 to 5 times a turn but, now matter how big my score gets:
player.1.score * numberPlayersLeft / totalScore = 0
(truncated of course because its an int)
So what the heck am I missing?
This value is supposed to be:
=player.1.score/average
=player.1.score/(totalScore/numberPlayersLeft)
=player.1.score*numberPlayersLeft/totalScore
right?
Is there something more in the human player score not in the AI score? Not that I think that matters because I've had some stupid large scores by virtue of the cheat mode and still the value never exceeds 0.
Does anyone know why?
Ok I just thought of something... does slic do divisions first?
I also tried and failed and display player.1.score in the message.
I've tried reducing scores by g.maxscore - 3600 which is the diff bonus and reducing scores by 75*(numberOfPlayers-1) which is the Opponents bonus.
No change. Grrr... Insights anyone?
Gedrin
|
|
|  |
 |
|
Locutus
|
|
ACS CTP1/2 Manager & Civ4 Co-Manager
|
 |
Hengelo, The Netherlands
Nov 1999 time: 06:13
|
|
Well, I dug into my archives and found a file that contains most, if not all, of the code developped by the SLIC group or me. I put it up on my website, you can download it here. I doubt this file will actually work, a lot of it is incomplete or doesn't work at all. It would be great if anyone could tell me what's wrong with the Leonardo's Workshop code (apart from the fact that it's butt-ugly and probably inefficient code ), that took a lot of time to code but for some reason doesn't seem to work.
The stuff that (should) work:
- Guerrilla/Partisan trigger: creates guerrilla units when a city is captured (should IMHO still be refined but at least it works )
- Check contents of stack: let's you view the contents of an enemy stack
- Flat map code: nothing new, already in MedMod
- Garrison code: nothing new here either.
I know, it ain't much but still...
Gotta run,
Locutus
Edit: Damn, screwed that whole post up and couldn't edit it until now because my Internet connection gave up on me.
[This message has been edited by Locutus (edited October 13, 2000).]
|
|
|  |
 |
|  |
All times are GMT. The time now is 05:13. Apolyton Time is 00:13. |
top of page
|
|
|
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is ON
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|