WoC Lite(made for merging)

Sorry guys for being MIA. I could repeat the story, but it would take too long. I hope I will be back in a few months. I am really interested in BUG being in modules. To summarize what I think I remember correctly... zmodular could run python from modules, and anyway I was hoping that everything could run out of modules.

Now with the screens I know sections of screens can not be modular, but I was thinking about multiple screens files not sections. Then have a menu in game to select which screen you want. Basically it would be larger but python files are not that big. Just thought make a screen for each combination possible which will take some time. And then reload the mod and presto you have it. I was hoping to see these all in modules and some way for the python to recognize the python files just be dragging and dropping. I got the idea after looking how zmodular python could recognize them.

I was also hoping this could apply to Revolution and any other python modules in the future. But again I am usually get really big ideas that can never be finished. Well sorry again. I'll be back.
 
BUG, as it is, is already heavily "modular" in a sense, with the fact that any option can be turned on and off at will. Making several copies of files would be backwards in comparison, so really, the WoC/Rev settings should be worked into the BUG standard, not the other way round, in my opinion.

Good to hear you'll be coming back, johny. :D Good luck with whatever's keeping you busy.
 
BUG, as it is, is already heavily "modular" in a sense, with the fact that any option can be turned on and off at will. Making several copies of files would be backwards in comparison, so really, the WoC/Rev settings should be worked into the BUG standard, not the other way round, in my opinion.

Good to hear you'll be coming back, johny. :D Good luck with whatever's keeping you busy.

RevoltionDCM's python is already modular, AFAIK. ;)
 
The modular I'm talking about here is the ability for a user to copy a single folder into their Modules folder and have it work without doing anything else.

In BUG right now you have to create a configuration XML and <load> it from init.xml (or put your changes directly into that file). You also have to put your Python files under the Python/ folder somewhere, your graphics under Art/, XML files under XML/, etc.

I would like to make this all disappear. The module author would still have to create a configuration XML file, but it wouldn't have to be moved or added to init.xml.
 
Single folder should be fine, and thank you.

Only thing I would like extra on top of BUG would be a simple way to add more advisor screen buttons in the future. If people add too many you have to readjust the great person bars, the tech space, and the blue dressing( or whatever it is called under the advisors).

I mean it is no big deal really. Just would be nice if some way of saving some work. If there is a known way to readjust it based on how many advisor buttons are on the maininterface.py.

Again nothing important really. May not be worth it for how many people will use it. Thanks again though I am looking forward to just dropping BUG in modules.
 
Thanks again though I am looking forward to just dropping BUG in modules.

Um, I think there's a bit of a disconnect here. My goal is to make it so that adding things to BUG would work like adding WoC modules do now--not so that adding BUG to WoC would work by placing BUG's folder into the Modules folder. I don't think that would even be possible with a lot of work.

1. Rewrite all the places that BUG changes an existing BTS file to make it inject itself on-the-fly. Would be cool, and I wish I had done it from the start, but not an easy task. I also don't know 100% if that would be possible. I could get 95% of the work done and find a module that won't allow it to happen. :(

2. Still need a way for BUG to take over the initialization process. For that you'd have to at a minimum replace CvAppInterface with BUG's file, and I don't know how to do that. There is hope because files in CustomAssets get loaded before those in Assets, but BUG's Python folder would need to be injected before those files start loading. I don't see a way to do that. I'm open to suggestions. BTS can do it because BTS starts the Python interpreter; it must set up its folders before the interpreter starts loading modules (CvAppInterface).

3. Wow, that's a lot of work. Are people really going to want to swap BUG in and out like that? Given that you can turn everything off in BUG, I'd rather just have someone maintain a merge of BUG and WoC Lite that people can start from.

To be clear, I'm not at all opposed to having BUG work that way. I am doubtful of finding the time to do that much work for what I see as little benefit. As it is I have a long list of useful features I'd like to add to BUG but cannot due to time constraints.
 
EF, you forgot #4,

4.) Why on earth would you want to remove BUG!?

BUG is fine just the way it is, making it modular would be a waste of time and effort.
 
I wish I could help more with all these ideas, but I am concentrating on getting Revolutions working in multiplayer. Once that is done, I will help in any way I can.
Cheers
 
Honestly, what would be most useful for me at this point would be to hear from more modmodders about how they use WoC Lite, RevDCM, BUG, etc. to do their modding. Afforess so far is the only one who has spoken directly on this topic.

When I created BUG's Core, I built it solely thinking about what would make it easiest for me to continue merging in modcomps to BUG wholesale. That work became BUG 3.0. The main thrust was moving all of the glue that was in Python to XML, alleviating the need to modify the core BTS (CvEventManager mostly) and BUG Python files.

But what's easy for me to do isn't necessarily easy for others to do (I've been programming in many languages since '82, so I have a bit of experience ;)). Moreso, I really should have made BUG autoload the configuration XML files from the start--I was just lazy and burnt out and wanted to get 3.0 out the door. It's time to correct that error, but without hearing what my intended audience will find actually useful, I'm afraid I'll just create some other version of what would work for me.

How can I reach the wider modmodder audience to solicit their feedback? As it is I don't even know all the mods that contain BUG.
 
Honestly, what would be most useful for me at this point would be to hear from more modmodders about how they use WoC Lite, RevDCM, BUG, etc. to do their modding. Afforess so far is the only one who has spoken directly on this topic.

When I created BUG's Core, I built it solely thinking about what would make it easiest for me to continue merging in modcomps to BUG wholesale. That work became BUG 3.0. The main thrust was moving all of the glue that was in Python to XML, alleviating the need to modify the core BTS (CvEventManager mostly) and BUG Python files.

But what's easy for me to do isn't necessarily easy for others to do (I've been programming in many languages since '82, so I have a bit of experience ;)). Moreso, I really should have made BUG autoload the configuration XML files from the start--I was just lazy and burnt out and wanted to get 3.0 out the door. It's time to correct that error, but without hearing what my intended audience will find actually useful, I'm afraid I'll just create some other version of what would work for me.

How can I reach the wider modmodder audience to solicit their feedback? As it is I don't even know all the mods that contain BUG.

I dont know how usefull you would find my comments, Im more of a casual modder that just picks stuff that take my interest.

I love bug, but because the python is not easy to merge I choose to not play with it and mod with it. I've also found it rather tedious and vastly time consuming trying to merge modcomps into BuG it just gives too many errors. Even though its a great mod, I'd rather stick to standard bts python files and be able to merge all the other modcomps and modules which add gameplay features that are available in the civfanatics download center.

Like it would be cool BuG was in modules, so i could just drop it into my mod without it affecting anything else. Or if that isn't possible for all BuG features, just having small modular folders for advanced scoreboards, sevopedia etc would be great.
 
I dont know how usefull you would find my comments, Im more of a casual modder that just picks stuff that take my interest.

I love bug, but because the python is not easy to merge I choose to not play with it and mod with it. I've also found it rather tedious and vastly time consuming trying to merge modcomps into BuG it just gives too many errors. Even though its a great mod, I'd rather stick to standard bts python files and be able to merge all the other modcomps and modules which add gameplay features that are available in the civfanatics download center.

Like it would be cool BuG was in modules, so i could just drop it into my mod without it affecting anything else. Or if that isn't possible for all BuG features, just having small modular folders for advanced scoreboards, sevopedia etc would be great.

That is what I was going to say.

@EmperorFool

It is non-friendly to add more python features. Not that it is impossible, but certainly is a royal pain in the butt to add new features that I want to put in. Now how many people really are going to add those features? I do not know. And as well as BUG states as its moto "BTS Unaltered Gameplay".

I am more concerned with altering gameplay so usually what information I am getting extra is just like little bells to me. Extra bells are nice but not the most important thing to me. I could apply this to many other things in the modding community that only apply graphical enhancements as well for example.

Only thing I could suggest would be to make it as least intrusive to python files as possible so that it easier for others to add new features, or either hijack the entire python folder and make it lot easier to add anything possible to BUG. Does not matter really which way. Just in the last state that I saw it was hard to add things I want to add to a mod.

If you can get some of the work done to convert it to a modules and had somethings that could not be done. Well it would still help others to continue work on it. Anything will help I mean. For example WoC Lite. WoC has been around for a while. Anyone could of done something to include modular loading from it in their mods, but they choose not to because of all work it was decipher so much stuff.

Now BUG is the same case to me. Sure it is nice, but I want to add pieces of it. The present extra folders in BUG is like trying to untangle a ball of yarn. I would like it untangled so I can minimize what is be adding to the mod. I know there are good reasons for them. If it was not that way having files independent from one or another would be make it much easier to see what is happening.

3 things for example(can not think of more at the moment) that gave problems.

1. The CvEventManager gave me problems adding other python events. Of course I could asked more questions and probably figured it out. But why did I need BUG managing the CvEventManager in the first place?

2. The Maininterface is a headache in a can to figure what other files are being used to modify it. Sure may be nice features. But again I am wanted to added altering gameplay features which then takes a lot of work to find what section to readjust the screen.

3. Generally how many files it used in python like the CvAppInterface. I know it has to be done. But from my prespective. What is so important that needs this? After trying to figure where the things could be changed it is easier settle for all of nothing with BUG.

Whatever you could get in modules would make it easier for future users. If you wanted to call BUG modular Alpha or whatever it would still be useful. That is best suggestion I can think of. I like BUG don't get me wrong. It just is a pain to alter it.
 
That is what I was going to say.

@EmperorFool

It is non-friendly to add more python features. Not that it is impossible, but certainly is a royal pain in the butt to add new features that I want to put in. Now how many people really are going to add those features? I do not know. And as well as BUG states as its moto "BTS Unaltered Gameplay".

I know this is targeted to EF, but I want to respond too.


World of Civilization,

It is non-friendly to add more SDK features. Not that it is impossible, but certainly is a royal pain in the butt to add new features that I want to put in. Now how many people really are going to add those features? I do not know. And as well as WoC Lite states as its motto " to create a better and easier Modular XML Loading system for both players and modders..."

I am more concerned with altering gameplay so usually what information I am getting extra is just like little bells to me. Extra bells are nice but not the most important thing to me. I could apply this to many other things in the modding community that only apply graphical enhancements as well for example.

Only thing I could suggest would be to make it as least intrusive to SDK files as possible so that it easier for others to add new features, or either hijack the entire Source Code folder and make it lot easier to add anything possible to WoC Lite. Does not matter really which way. Just in the last state that I saw it was hard to add things I want to add to a mod.

If you can get some of the work done to make it less cumbersome, it would make life much easier for me and modders. Well it would still help others to continue work on it. Anything will help I mean. For example WoC. WoC has been around for a while. Anyone could of done something to include modular loading from it in their mods, but they choose not to because of all downsides, and it cost so much time and effort.

Now WoC Lite is the same case to me. Sure it is nice, but I want to add to it. The present modular loading in WoC is like trying to untangle a ball of yarn. I would like it untangled so I can minimize what is be adding to the mod. I know there are good reasons for them. If it was not that way having files dependent from one or another would be make it much easier to see what is happening.

3 things for example(can not think of more at the moment) that gave problems.

1. The CvInfos gave me problems adding other ReadPass2's in WoC. Of course I could asked more questions and probably could figure it out. But why did I need WoC managing the CvInfos in the first place?

2. The CvXMLLoadUtilitySet is a headache in a can to figure what other files are being used to modify it. Sure may be nice features. But again I am wanted to added altering gameplay features which then takes a lot of work to find what section to readjust the engine.

3. Generally how many files it used in SDK. I know it has to be done. But from my perspective. What is so important that needs this? After trying to figure where the things could be changed it is easier settle for all of nothing with WoC Lite.

Whatever you could get to work in WoC would make it easier for future users. If you wanted to call WoC Lite x2 or whatever it would still be useful. That is best suggestion I can think of. I like WoC Lite don't get me wrong. It just is a pain to alter it.





Look familiar? As a SDK modder, WoC has caused me headache after headache. It is really useful for dependancies, and I love how I can cut unneeded XML and keep compatibility in modules very easily. I use WoC all the time. I don't know where I would be without WoC, it's ease of use from a XML standpoint is incredible, and how I got modding in the first place.

But from an SDK standpoint, it is a nightmare. If you don't believe me, look at the SDK/Python forum. I have threads there that have 1000's of views! All because WoC breaks ReadPass2's and loads of other SDK loading, the code works perfectly in standard BTS, but breaks to 1000 little pieces in WoC, and I still don't understand why. It has caused me, and will continue to cause me hours and hours wasted looking for a solution.

Before you criticize someone else's mod, please, consider the sorry state that your own may be in. BUG and BULL are the best mods, hands down, on CFC. Period. There are tons of top-notch work out there, but if the user can not understand the UI, all hope is lost. That's why every mod worth it's salt uses in part or whole, BUG.

I don't mean to offend anyone, (although I have, I'm sure). Just remember, grandstanding with complaints will get you nowhere. Action will.
 
@Afforess

What planet did you read my comment on? I never said WoC Lite is a super invention. I am was only making the metaphor how worse WoC was to figure out versus WoC Lite. WoC Lite was my first real SDK project. Now BUG has the same thorn as WoC does was only stating. I am saying a Lite version of BUG would make it easier for modders to figure it out. Now I do not know how I offended anyone.

Simple put I am saying the features that BUG needs that is it hindrances to making it modular are features that I think it can go without for making modular at the moment. Later it would be better to try and retain those features. Most people are not modding. BUG as it is should be left alone I believe. I am saying I think these are 2 different projects BUG and BUG Modular.

You have more experience probably than I do with the SDK. I do know how it is pain. Trust me I spent plenty time on it. I did not write the original code. I am not here to offend. BUG has completely altered the game interface so well is the only reason you arguing for it. It is like a different game even.

I just want it simpler even if that requires less that would be a start imo. Now if you want to say WoC Lite has bugs all over the place I am not offended. I just don't understand what you got off my comment. Did I say I am superman or something?
 
Completely off topic, but I don't see that as a bad thing ;):

Instead of having all of your schema look like this:

Code:
    <ElementType name="UnitInfo" content="eltOnly">
        <element type="Class" minOccurs="0"/>
        <element type="Type" minOccurs="0"/>
        <element type="bTypeDependency" minOccurs="0"/>
        <element type="AndDependencyTypes" minOccurs="0"/>
        <element type="OrDependencyTypes" minOccurs="0"/>
        <element type="UniqueNames" minOccurs="0"/>
        <element type="Quotes" minOccurs="0"/>
        <element type="Images" minOccurs="0"/>
        <element type="Special" minOccurs="0"/>
        <element type="Capture" minOccurs="0"/>
        <element type="Combat" minOccurs="0"/>
        <element type="Domain" minOccurs="0"/>
        <element type="DefaultUnitAI" minOccurs="0"/>
        <element type="Invisible" minOccurs="0"/>
        <element type="SeeInvisible" minOccurs="0"/>
        <element type="Description" minOccurs="0"/>
        <element type="Civilopedia" minOccurs="0"/>
        <element type="Strategy" minOccurs="0"/>
        <element type="Help" minOccurs="0"/>
        <element type="Advisor" minOccurs="0"/>
        <element type="bAnimal" minOccurs="0"/>
        <element type="bFood" minOccurs="0"/>
        <element type="bNoBadGoodies" minOccurs="0"/>
        <element type="bOnlyDefensive" minOccurs="0"/>
        <element type="bNoCapture" minOccurs="0"/>
        <element type="bQuickCombat" minOccurs="0"/>
.
.
.

You can get the same effect AND BETTER, like this:

Code:
    <ElementType name="UnitInfo" content="eltOnly" [COLOR="Lime"]order="many"[/COLOR]>
        <element type="Class"/>
        <element type="Type"/>
        <element type="bTypeDependency"/>
        <element type="AndDependencyTypes"/>
        <element type="OrDependencyTypes"/>
        <element type="UniqueNames"/>
        <element type="Quotes"/>
        <element type="Images"/>
        <element type="Special"/>
        <element type="Capture"/>
        <element type="Combat"/>
        <element type="Domain"/>
        <element type="DefaultUnitAI"/>
        <element type="Invisible"/>
        <element type="SeeInvisible"/>
        <element type="Description"/>
        <element type="Civilopedia"/>
        <element type="Strategy"/>
        <element type="Help"/>
        <element type="Advisor"/>
        <element type="bAnimal"/>
        <element type="bFood"/>
        <element type="bNoBadGoodies"/>
        <element type="bOnlyDefensive"/>
        <element type="bNoCapture"/>
        <element type="bQuickCombat"/>
.
.
.

The order="many" addition to the first tagline gives you the same benefit as minOccurs="0" (though also the same effect as maxOccurs="*", that is, you can have as many or as few of each item as you feel like listing), but it also removes the requirement that the XML is listed in any specific order. If I wanted to, I could have <Type> then <Class>, of even have <bNoBadGoodies> listed first for some bizarre reason.

Maybe I did already remember to post this hint in here, but recently I thought about it again and couldn't recall sharing it anywhere outside of FfH forums.
 
No worries guys; I am not offended. I am asking for criticism: constructive if possible but critical as well.

@johny - When I completed 3.0 of BUG, I considered releasing the BUG Core as a separate no-feature mod designed solely for what you're talking about. However, due to how BTS is coded it would still have replaced CvEventManager, CvAppInterface, CvScreensInterface, etc. There is just no way around that.

If I had followed the modders' method of modifying CvEventManager directly, the majority of code in the following modules off the top of my head would all be entangled in a single giant Python module:

  • ReminderEventManager
  • autologEventManager
  • FavoriteCivicDetector
  • Civ4lerts
  • MoreCiv4lerts
  • EventSigns
  • CvCustomizableDomesticAdvisor
  • CvTechAdvisor
  • CvStrategyOverlay
  • BugOptions
  • BugOptionsScreen
  • TradeUtil
  • DiplomacyUtil
And a lot of those modules use the same events, meaning their functions would have to be merged together. Total freakin' nightmare! There'd be no way to remove a single feature or copy one into your own BUGless mod. And it would be a :):):):):) for me to maintain. Sure, if you wanted to merge in an old modcomp, it may have been slightly easier, but the cost would be too high.

Instead, everything having to do with Event Signs is in EventSigns.py and EventSigns.xml--save that one line in init.xml to load EventSigns.xml. Most features in BUG are self-contained in such a manner.

And then there's CvMainInterface. No matter how you slice it, there's no getting around the way that screen is built. Even if I rewrote it from scratch (I've been tempted), it would still be several interdependent modules. It may make reading the code easier, but it wouldn't be any less spaghetti-like.

As for CvAppInterface, I must initialize BUG during the GameLoad or PreSave stage, but doing it from the events didn't work for PreSave. Thus I had no choice but to modify CvAppInterface. BUG simply would not work without it. For that you'll have to chat up Firaxis.

The main problem is that to make BUG really useful and easy for me to work on, I had to fix the design flaws in BTS. But the only way to do that is to replace the original BTS files. Well, you can't do that and expect modcomps written to use the old method to work without modification. So my choice was crappy functionality and difficult to program, or non-trivial to merge.

Here is where having complete examples really could have helped. I was hoping the features in BUG would have been enough, but it's really hard to know what in BUG you can read in isolation as an example. The docs on our wiki are a good start, but working examples on the wiki are still needed. Believe me, though, it is far easier to add a feature to BUG than to BTS. The only reason you find it easier without BUG is because you already know how to do it with BTS.

For events, as an example, I looked in the community and saw a lot of modcomps using CvCustomEventManager. So I took that as a base case, making BUG work seemlessly with mods written to use CvCEM. I can't help the mods that modify CvEventManager directly. Even Firaxis didn't intend for people to do that. That's the whole reason for the CvXXXInterface modules--to allow the modder to either subclass or replace the original XXX without having to modify it. But Firaxis had even less documentation than I did back when I started. :p

So to bring this back around, I don't think even having what you are asking for would really solve the problem you have. You want to be able to merge modcomps written to use the original Firaxis code without having to modify them beyond merging modules. Well, that's just not gonna happen with BUG. It can't. I've added too many features (not interface features, Python design features) that make it easier to write modcomps for BUG to have it support modcomps written for BTS without modification.

In many cases the modifications are trivial, e.g. if they were written to use CvCEM. In other cases it is very difficult, e.g. if they are CvMainInterface-based mods.

Now, if you have some specific ideas on how I could make it at least a little easier to do that, I'm all ears. This is where I need detailed specifics.

@xienwolf - I didn't spend much time looking at the XML parsing, but my memory is that it depends on the ordering a lot of times. Sometimes it jumps to a child by name, but other times it read field after field expecting that they be present. Or is my memory totally off?

The whole XML parsing engine from BTS required a lot of manual work that you just wouldn't have if it had used a DOM parser and some generic code, but this is tough to do in C++ whereas in Python it is fairly trivial. I think WoC did the best it could given what it had to start from. The same can be said of BUG I think.
 
@EmperorFool

I must just get more familiar with BUG before I can really give a specific suggestion. Perhaps there is a way to replace the base BtS python files but at the same time allow for it not to change until being enabled in modules. I have no clue.

I am not really very helpful. I am sorry. I can not even run Civ4 at the moment. I have an old 32 bit graphics card. I have all of my stuff across the ocean right now. I am only here right now because I finally had some time to try and catch up on the forums.

I know BUG added many very useful python changes. I just do not understand how to use it effectively to further add more without resorting to modify something that is required elsewhere in BUG. If ignorance is bliss then I must be bliss.

Thank you again for your time, and effort on merging in some effective way. I want to make it clear anything you could come up to your liking would still be very useful.

@For anyone and everyone

What I hoping to do is to see faichelle's individual components released with sources just focused on the one component based on RevDCM. Never got much feedback on them really. But to summarize he is getting close to something that is basically the resource system in Colonization added to Civ4. If it gets done I or someone else from the old WoC team will post a thread on it.
 
I've experimented a bit with adding folders that get checked when importing Python modules, and it works. Making this happen is as simple as adding a path (string) to the sys.path list. It has some quirks that suck and a potential problem.

Stack Traces

If there is an error during a call that passes through the module, it shows up as the full path name instead of just the module. Normally you see something like this:

Code:
line 12 in CvScreensInterface.py
line 272 in CvMainInterface.py

Instead you'll see this:

Code:
line 12 in CvScreensInterface.py
[B]line 47 in C:\Documents and Settings\EmperorFool\My Documents\My Games\Beyond the Sword\CustomAssets\Modules\Lucky Charms\Python\LuckyCharms.py[/B]
line 272 in CvMainInterface.py

Ick! I haven't found a way around this yet. Both normal modules and these modules have a __name__ attribute that is the short name. Both have a __file__ attribute that contains either a full or partial (normal, e.g. "assets/python\BUG\SpyUtil.py") path. I don't know why the part of the system that generates the stack trace chooses to use the __file__ for the new ones and __name__ for the old ones. I suspect these are saved into some other variable, but I cannot find it.

File Names

By adding each module's Python folder to the path like this, it requires that every .py file be uniquely named across all modules. You can't put your events into "Events.py". The simple solution is to include the name of your mod in the name of each Python module. This probably isn't a big deal since that's necessary now anyway, but it is annoying.
 
Downloaded WoC Lite mod, placed in BTS\Mods directory. Load it. I get the following traceback...

Traceback (most recent call last):
File "<string>", line 1, in ?
File "<string>", line 52, in load_module
File "CvEventInterface", line 12, in ?
File "<string>", line 52, in load_module
File "CvCustomEventManager", line 24, in ?
File "<string>", line 52, in load_module
File "CvEventManager", line 12, in ?
File "<string>", line 52, in load_module
File "CvScreensInterface", line 12, in ?
File "<string>", line 52, in load_module
File "CvCivicsScreen", line 16, in ?
ImportError
:
No module named CustomFunctions

Failed to load python module CvEventInterface.
ERR: Call function onEvent failed. Can't find module CvEventInterface
ERR: Call function onEvent failed. Can't find module CvEventInterface
ERR: Call function onEvent failed. Can't find module CvEventInterface

Can someone give me a clue which civics screen I am/should be using? There are...
WoC Lite\Assets\Python\Screens\CvCivicsScreen\CvCivicsScreen.py
WoC Lite\Assets\Python\Screens\Copy of CvCivicsScreen.py
WoC Lite\Assets\Python\Screens\Copy of CvCivicsScreen.py.bak
WoC Lite\Assets\Python\Screens\CvCivicsScreen.py
WoC Lite\Assets\Python\Screens\CvCivicsScreen.py.bak
WoC Lite\Assets\Python\Screens\xienwolfCvCivicsScreenedited.rar
WoC Lite\Assets\Python\CvCivicsScreen.py

Thanks,
Eusebius
 
Eh, don't use any of those. IMHO, Woc's Civic screen is lackluster. Grab StrategyOnly's screen (it's in the modcomps). With a few tweaks, it's far superior to BTS's or WoC's screen.
 
Sure, but WoC should be packaged with a single civics screen. If you want multiple options, they should be packaged separately or as modules. That's crazy to have all those copies and edited versions--and two with the same name: CvCivicsScreen.py . How could anyone know which takes precedence!
 
Top Bottom