Adding my planet Mod to Final Frontier Plus

1740860064322.png

I don't know what do you name 'prism array'.

1.01 fix doesn't fix buildings. I've modified file that caused problems and attached it here : https://forums.civfanatics.com/thre...d-to-final-frontier-plus.693776/post-16787734
 
Last edited:
Here are files from my c++ development folder with last edit date later than 2021.
You can turn game on (if all other files are present) and see the solar systems and bonuses, but nothing else about solar systems (except turning game off) works.
p.s. I can see you meant espionage array. Here is what is shown in older versions in pedia:
1740945226426.png

2 things about your mod: your technologies are in isolation era, while some should be in either exploration or galactic era.
There is also a grapical error(I mean this citizen picture when you enter town screen)
1740945543180.png
.
 

Attachments

Last edited:
There is also a grapical error(I mean this citizen picture when you enter town screen)
I had that problem once. I couldn't figure it out, so I reinstalled and carefully installed each patch at a time 1.83 -1.84 - 1.9 beta - ff+ and finally terraformer and it disappeared
I think someone should provide whole final frontier plus as one file because installing newest version is getting long and complicated.
I second this!
I must have made a mistake with my versions, so I will have go back and start again from the base installation, adding my buildings and finalfrontiergameutils entries slowly. I think I was using the wrong buildingschema so caused the confusion with the building infos. The version I have is stable, but crashes to desktop when I build the prism array or panoptican.
2 things about your mod: your technologies are in isolation era, while some should be in either exploration or galactic era.
My tech entries need reordering as well; the lines are overlapping.
 
I've just found this old thread:
I think this could be better than my solution. I think bombing routes is much more useful (and makes more sense) than in vanilla game.
I hadn't known about that when I had implemented my version.

I've made planet information screen work (it looks like there is something wrong in name):
1741204838946.png
 
Last edited:
Latest version attached hopefully with fewer bugs!
Fixed citizen in bottom corner (I was using incorrect CvMaininterface.py)
Buildings have better descriptions
Solar system generating code improved so fewer duplicate planets
 

Attachments

hmm.not getting that bug specificaly. I deliberately removed all hab extensions because I think the planets in my mod have enough max pop, hope that's not what caused the error... I do get error in aibuildcallback, but the game continues. I have noticed the ai building the gray resource management complex on the wrong planets though.
 
Am I (and my friend) the only persons playing this mod?
I am going to and offered to rework slavery into cloning/even better - material biosynthesis (maybe both with more than 1 granary replacement?). Would need a new tag or few from you guys, though - the only existing one (for Kremlin) can't be used to balance whipping alone, though, hmm, maybe it's reasonable if you can produce crews and materials cheaply, you also money rush cheaply. Already advertised the mod for acquaintances that played regular FFP. Guess I'll do this on discord servers, too. Was kinda waiting for it to reach some good milestone. Or maybe @Blake00 should announce it then, he has more coverage.

Once you guys are done with new features, AI could also use some love, it's nice to have K-mod through Kek-mod for FFP, but AI there still was lacklustre for me. Is current version based on Kek-mod?
 
Once you guys are done with new features, AI could also use some love, it's nice to have K-mod through Kek-mod for FFP, but AI there still was lacklustre for me. Is current version based on Kek-mod?
I'm (rather slowly) working on making star systems in c++ so as to improve AI but I haven't touched any AI related code yet. Both versions (mine and planetmaker's) are based on Kek-mod, however the AI code (ff part) is still in python, so it's kind of dumb (at least sometimes).
Adding some more XML tags should be easy but I don't know how to do it.
 
however the AI code (ff part) is still in python
Are you sure? What does it do there? Most of vanilla AI is in the DLL.
Adding some more XML tags should be easy but I don't know how to do it.
It's easy in schema, but in DLL you'd need to add variables, defines and adjust, say, cost calculations. I only ever merged ready components and made small tweaks.
 
Are you sure? What does it do there? Most of vanilla AI is in the DLL.
The part that was in DLL is still there but the part that was added in final frontier is in python (check attached file) and as said here:
The AI in FFP is severely affected by things that behave very differently than in BTS. It can't use BTS/K-Mod DLL code to plan for wars or manage citizens and buildings on planets and the replacement Python code is often very rudimentary. To fix that, one would need to do a lot of work to properly integrate new FFP game mechanics into the DLL. For now, I suggest to simply play on higher difficulty. :)
 

Attachments

It can't use BTS/K-Mod DLL code to plan for wars or manage citizens and buildings on planets and the replacement Python code is often very rudimentary
Dammit, Shafer.

@planetmaker do you already have AI for the new buildings?
 
I have not begun to look at the Ai buildings yet.
Incidentally I know now why there is an error in the Ai building, the extended habitation is defined, and I've deleted it from the building list...
I might put it back in and restrict its use to large terrestrial planets
 
I have not begun to look at the Ai buildings yet.
Well, then it's to early to advertise, then. Multiplayer base is too small for all-human games and AI already sucked before all the additions.
 
So looking at Ai now
the code lists food production and commerce, i'll keep this structure but add a function at the start to get the planet class then add the appropriate buildings to each part. The code will be similar to what I've put in for restricting buildings to planet classes. Some buildings have more than one function and may be listed more than once.
I'm thinking about adding trait functions to the code - eg brotherhood builds the military complexes

I'm trying to create a function definition to quickly get the planet class, rather than duplicating the code each time I need it, but I'm having trouble adding my own def getPlanetClass(self): function in class CvPlanet: see below. The code doesn't like 'if self.bDisabled' any ideas where I'm going wrong?
Spoiler getPlanetClass(self) :

def getPlanetClass(self):
pPlanet = getPlanet(pSystem.getBuildingPlanetRing()
# Gray D is Class 1; Brown L is Class2; Ice P is Class 3; Lava G is Class 4; Toxic Y N is Class 5; Mars H K is Class 6
# Home M is Class 7; Gia Mg is Class 8; Swamp Ms is Class 9; JST are just the gas giant size variants

if self.bDisabled():
iPlanetClass = -1
else:
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray5 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray6 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray7 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray8 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray9 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray10 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray11 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray12 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray13 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray14 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray15 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGray16 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeJovian1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeJovian2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeSaturn1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeBlue or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeNeptune1):
iPlanetClass = 1
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeBrown1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeBrown2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeBrown3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeBrown4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeJovian3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeSaturn2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeNeptune2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeUranian2):
iPlanetClass = 2
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeIce1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeIce2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeIce3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeIce4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeIce5 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeIce6 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeIce7 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeIce8 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeWhite or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeSaturn3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeUranian3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeUranian4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeNeptune3):
iPlanetClass = 3
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeRed or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeLava1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeLava2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeLava3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeLava4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeJovian4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeNeptune4):
iPlanetClass = 4
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeToxic1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeToxic2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeToxic3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeToxic4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeToxic5 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeToxic6 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeToxic7 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeToxic8 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeUranian1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeYellow):
iPlanetClass = 5
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeMars1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeMars2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeMars3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeMars4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeDesert1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeDesert2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeDesert3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeDesert4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeOrange or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeSaturn4):
iPlanetClass = 6
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeHome1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeHome2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeHome3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeHome4 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGreen):
iPlanetClass = 7
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGia1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGia2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGia3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeGia4):
iPlanetClass = 8
if (pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeSwamp1 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeSwamp2 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeSwamp3 or pPlanet.getPlanetType() == CvSolarSystem.iPlanetTypeSwamp4):
iPlanetClass = 9
return iPlanetClass

[/ISPOILER]
 
I'm trying to create a function definition to quickly get the planet class, rather than duplicating the code each time I need it, but I'm having trouble adding my own def getPlanetClass(self): function in class CvPlanet: see below. The code doesn't like 'if self.bDisabled' any ideas where I'm going wrong?
Make sure that your function is in CvPlanet class i.e. check indentation. It should be like this:

Python:
class CvPlanet:
    #(some functions that are in CvPlanet class)
    def GetPlanetClass(self):
        #(your function body)
    #(some other functions)
 
By the way this mod uses kek-mod 0.22 while the newest version is 0.3.1
It looks like there were some changes.
 
Back
Top Bottom