Jump to content

46 posts in this topic Last Reply

Highlighted Posts

Posted:
Last Online:  
 

Here it is! Great to see this come to fruition.

As we know, SimCity 4 includes lots of numerical data since it all revolves around a statistically-driven engine. Many values are calculated in the background, or displayed in consolidated form on data views, advice messages and graphs. But here The C.O.R.I. Reports™ opens up a new perspective into what goes on within a city behind the scenes. Featuring population totals, RCI demand, financial info, along with counts of buildings, networks & zones (and many more). Allowing a plethora of info to be extracted on demand from any of the 3 game menus, then instantly saved as a local text file (using the customisable path option).

I believe there's endless potential here. For a way to explore more about the simulation, establishing exactly how cities can be improved, striving towards balance and stability. Even if simply curious to see a bit more info about the inner-workings, this data allows development to be conveniently tracked at any stage.


In summary, there are currently over 360 variables recorded.

To help with readability, these are grouped into 14 main categories and 45 further sub-categories as follows:

Spoiler
  • Geography
    • Location and Sim Date
    • City Tile Characteristics
    • Sim Opinion Poll
       
  • Population
    • Total
    • Residential
    • Commercial
    • Industrial
    • Regional
       
  • Zone and Building Counts
    • Residential
    • Commercial
    • Industrial
    • Buildings Dynamics
       
  • Active Demand
    • Residential
    • Commercial
    • Industrial
       
  • Extrapolated Demand
    • Residential
    • Commercial
    • Industrial
       
  • Regional Demand  (Possibly?)
    • Residential
    • Commercial
       
  • Caps
    • Residential
    • Commercial
    • Industrial
       
  • Transportation Networks
    • Network Tile Counts
    • Neighbor Connection Counts
    • Congestion Tile Counts
    • Trips Completed or Failed
    • Network Building Counts
    • Network Building Usage Counts
    • Airports
    • Seaports
       
  • Civics  (And Utilities)
    • Education
    • Health
    • Parks
    • Crime
    • Fire
    • Pollution
    • Power
    • Water
    • Garbage
       
  • Finance
    • Budget
    • Loans
       
  • Tax rates
    • Residential
    • Commercial
    • Industrial
       
  • Funding
     
  • Neighbor Deals
     
  • Disasters


Note: The above categorization and ordering is subject to change prior to the main STEX release.


Basically, each report serves as a snapshot of the current open tile, captured at that precise moment in time (marked with a timestamp). Then it's possible to look back through previously saved reports and perform comparisons. There's potential scope here for using the data to diagnose gameplay issues, or even pre-empt future growth and project trends of expansion. I've personally made use of a program called WinMerge which is very useful for this. Highlighting the contents of two reports using differential recognition. In due course I'll be posting a tutorial explaining how to use this as a useful companion and analysis tool.

In the meantime though as @CorinaMarie said, this has been marked as a "beta" release. So I'm sure any feedback or suggestions will be greatly appreciated. *:)

  • Like 7

Quick Links

“SimCity 4 is not just a game, but a tool driven by our own imagination and creativity.”

Buy me a coffee

Share this post


Link to post
Share on other sites
Posted:
Last Online:  
 

This is precious indeed. Thanks a million for it.

  • Like 2

« Try to learn something about everything and everything about something. »
« Essayez d’apprendre quelque chose sur tout et tout sur quelque chose. »

— Thomas Henry Huxley

Paris Skyline
From left to right : the Business Center with the "Arche" in the middle, then the Eiffel tower,
followed by Napoleon's tomb in the "Invalides", next is the cathedral of "Notre Dame"
and the church of "Sacré Coeur", after it is the "Arc de Triomphe" and last is the Bastille column.

Share this post


Link to post
Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

    Beta version 02b now available. See the bottom of post # 1.

    • Like 3

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    So if I am reading this right, I can spawn a text dump when I want, but the report is not visible in-game like the census report is. Do I understand correctly?

    I'm amazed, but at the same time I want to make this easier to use. I have two suggestions (please tell me what obstacles you'd face if they're not dirt-easy):

    1) Instead of txt file output, give csv file output (comma-separated-values, which when rigidly formatted can be read into a spreadsheet program such as Excel)

    2) Let me view the dump in-game while paused and then let me decide whether or not to save it to the csv file.

    I am a programmer by trade, so I may be able to help if an obstacle is technically possible but tricky.


    -- Jeff Fisher ><> Vancouver WA
    "I may be pissing into the wind, but if I keep my enemies behind me and aim carefully, I can still rain on their parade."

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

     

    17 hours ago, jeffryfisher said:

    So if I am reading this right, I can spawn a text dump when I want

    Yep. That's exactly what it does.

     

    17 hours ago, jeffryfisher said:

    csv file output

    That is indeed possible to do. It would simply be time consuming to code it. Not particularly difficult, but 368ish lines of code would need to be altered. I'd suggest a separate Lua module within the .dat file and a new clickable linky in the LText to access it. You can, ofc, peek at my Lua code in the file when you open it in Reader. Here's a typical line for outputting to the text file as I do:

    cmWriteLine(2,"Workforce population = ",PrettyNumber(game.g_city_workforce_population,0),1)

    The cmWriteLine is a simple function that takes that first parameter to decide how many spaces to indent the line and builds a temporary string with that number of spaces in it  (local cmIndent = string.rep(" ",Indent)). The next parameter (in quotes) is just the text for the human readable description. The third one is a function which checks the requested format of the number it's getting ready to print (raw, comma, round, or both) and its parameter is the number of decimal places to round to. The last parameter is the number of "\n"'s to do (that's the code for a new line). Then the cmWriteLine does the Lua io.write using the formatted information.

    I imagine Excel (or other programs) reading a comma delimited file would want the numbers in raw format without the added comma separators that I add to the numbers . Tho they may want them pre-rounded. (For example even if you have your tax rate set to 9.1% the Maxis internal value might be 9.10000038754 for some odd reason.)

    So for CSV, you could replace my entire line with: io.write(TheMaxisVariableName,[[,]])

    The [[ ]] part tells Lua to output the comma as a character not treating it as a separator of parameters. Notice there's no "\n" in that io.write which means the next written data would go immediately after what was written previously. So yes, I believe it'd be quite doable. It would just take the time for someone to actually code it.

     

    17 hours ago, jeffryfisher said:

    view the dump in-game

    This too should be possible. Instead of io.writing-ing the variables one would have to trigger a popup window and then display the values in that. (That part I have no idea how to do, but if you look at RippleJet's amazing Census Repository you can see it can be done quite professionally.

     

    I do believe we need to figure out which of the raw global values are of use and which are wrong (like the Number of Patients) and which never contain any information ever before embarking on other methods to display or output the data.

     

    Edit: I've been chatting with CB and I believe there may be an easy, valid option for the CSV file. I propose when the text file writing is done I could just re-open it and read it line by line and use the string.find function looking for the position of the equal sign. Then for the data value names I'd take everything from position 3 to the equal sign position minus 2 and for the data value from the equal sign plus 2 to the end of the line. These would be read into separate Lua tables and then the text output as line one with comma separators and then the second line would be values with comma separators. Tables would be set back to nil when done.

    • Like 5
    • Thanks 2

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    18 hours ago, CorinaMarie said:

    Not particularly difficult, but 368ish lines of code would need to be altered. I'd suggest a separate Lua module within the .dat file and a new clickable linky in the LText to access it. You can, ofc, peek at my Lua code in the file when you open it in Reader.

    First I should play with the mod as written and see what kinds of data are in it. I might see clusters that would do well to be spread across several columns.

    18 hours ago, CorinaMarie said:

    I imagine Excel (or other programs) reading a comma delimited file would want the numbers in raw format without the added comma separators that I add to the numbers . Tho they may want them pre-rounded. (For example even if you have your tax rate set to 9.1% the Maxis internal value might be 9.10000038754 for some odd reason.)

    So for CSV, you could replace my entire line with: io.write(TheMaxisVariableName,[[,]])

    There are many possibilities. Now that I think on it, I realize that a program such as Excel might be able to import your text file as-is if I tell it to treat the equals sign as its delimiter (and not any commas). Then I'd get a column of labels plus a column of decimal values, which would be a good start for analyses. For example, importing on a regular basis (e.g. once per game year) could give me time-series data to make graphs not offered in game.

    Rounding is nice, but a spreadsheet column can told to display a fixed format, so it's no problem. The odd reason for the imprecision is the binary to decimal conversion. Floating point numbers are necessarily imprecise. The sum of halves, quarters, eighths etc will never add up to exactly .1, hence the "noise" in the insignificant digits. Only whole numbers and the sums of two's fractions will align exactly.

    18 hours ago, CorinaMarie said:

    we need to figure out which of the raw global values are of use and which are wrong (like the Number of Patients) and which never contain any information

    Agreed. Also: I have always wondered if there is hidden meaning in reports like llama spitting and towels stolen. The labels given in-game are obviously non-sense, but the numbers might pertain to real things if we can figure out how they're generated.

    • Like 5

    -- Jeff Fisher ><> Vancouver WA
    "I may be pissing into the wind, but if I keep my enemies behind me and aim carefully, I can still rain on their parade."

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    8 minutes ago, jeffryfisher said:

    Now that I think on it, I realize that a program such as Excel might be able to import your text file as-is if I tell it to treat the equals sign as its delimiter

    I believe my idea is going to work and would save you the trouble of doing that. What I've done so far is to add another option for the CoriReport.ini of CreateCSV as a toggle. If present, it'll then create the additional file. Atm it recognizes that flag and creates a new file name. So:

    • C:\Users\Owner\Documents\SimCity 4\Test\Corillion (E1) 0256-04-17 - City Report.txt
      • becomes:
    • C:\Users\Owner\Documents\SimCity 4\Test\CSV - Corillion (E1) 0256-04-17 - City Report.csv

    @Cyclone Boom suggested inserting the CSV at the beginning (as well as changing the file extension) so they will sort together alphabetically. I'm writing the code now to close, re-open the .txt file, read it building the two tables of data, close it, create the .csv one, and write that info out to it. Hopefully it'll all go well.

    • Like 3
    • Thanks 1

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

    @jeffryfisher

    Here's a sample output: CSV - Corillion (E1) 0402-02-20 - City Report.csv and the corresponding human readable version: Corillion (E1) 0402-02-20 - City Report.txt

    Let me know if that works out alright. My Libre Office opened it ok. I just told it the only delimiter was comma.

    • Like 2
    • Thanks 2

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    Confirmed working in Excel 2010. *:)


    By having the .csv extension, it recognised Excel as the associated program and displayed this on the download dialog (in Firefox):

    01-Download Corillion CSV Test Report.png

     

    Then I simply opened the file and the data was displayed perfectly:

    02-Excel CSV Preview.png

    With each row in the CSV file corresponding to a new row in the spreadsheet, and the commas being recognised automatically to format the columns.


    From this point once the file is open, a consideration for the next step is to save as the native workbook format.

    In Excel the two most common are either an .xls or .xlsx extension. The former is more backwards-compatible with very old versions of the program, whereas the newer allows more fancy functions and formatting to be saved. The reason being, since CSV files are plain text they don't have the capability to store data which Excel uses for a spreadsheet. So that includes any calculations, customised cells, or even if creating graphs. Saving the CSV though will preserve the format as is.

    Excel is quite helpful since there's a warning popup which makes this known:

    03-Excel CSV Format Warning.png

     

    Ideally for keeping track of any given region, I'd imagine a good way is to store each city's data as a new sheet in a workbook. So then the tabs at the bottom could be named according to the city. Each new report could be added as a new row with the column headings at the top (which can be frozen to preserve it upon scrolling).

    It's possible to use the "Text Import Wizard" which provides a few other options, but for this with a single row I believe the simplest way is as follows:

    1. Open the new CSV report in a separate instance of Excel.
    2. Select and copy the entire A2 row containing the data values.
    3. Select the next empty row and paste the data in.
    4. Repeat as necessary.


    To simulate this, I've created some sample data with some quick table and conditional formatting:

    04-Excel Sample Data.png

     

    So as I'm sure @jeffryfisher can confirm, I'd say all is looking good with the option for CSV report exports.

    • Like 3
    • Thanks 2

    Quick Links

    “SimCity 4 is not just a game, but a tool driven by our own imagination and creativity.”

    Buy me a coffee

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

    New beta version v02c available. See the bottom of post # 1. The attached files were created on my XP comp using this as my CoriReport.ini:

    NumbersFormat=Both
    HideGibberish
    HideFileName
    HideTimeStamp
    HideIniContents
    HideVersion
    HideEOF
    CreateCSV
    
    CustomTitle=Using INI in Documents\SimCity 4 and can output CSV files

    Corillion (E1) 0416-02-20 - City Report.txt

    CSV - Corillion (E1) 0416-02-20 - City Report.csv

    • Like 3
    • Thanks 1

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

    I've added the City Tile Size to the CSV file now which brings up a question of what numerical value do you want for Small, Medium, and Large city tiles? Here's the code where I convert it from the Maxis number:

    -- City Tile Size
        cmHeader("City Tile Characteristics",2)
        local cmTileSize
        if game.g_city_tile_size == 1048576 then
          cmTileSize = "Small (4,096 cells)"
        elseif game.g_city_tile_size == 4194304 then
          cmTileSize = "Medium (16,384 cells)"
        elseif game.g_city_tile_size == 16777216 then
          cmTileSize = "Large (65,536 cells)"
        else
          cmTileSize = "Unknown"
        end
    
        cmWriteLine(2,"City tile size: ",cmTileSize,1)
    

    What you'll notice is they are listed as their cubic size (width * depth * 256 for height). I can pass that number along, but it seems silly. Arbitrarily I've coded it this way for the CSV conversion:

        local found
        found = string.find(line,"City tile size:")
        
        if (found ~= nil) then
          found = string.find(line,"Small")
          if found then
            temp = "  City tile size = 1"
          end
        
          found = string.find(line,"Medium")
          if found then
            temp = "  City tile size = 4"
          end
        
          found = string.find(line,"Large")
          if found then
            temp = "  City tile size = 16"
          end
        end

    ^ (That's prior to running thru the next part where it looks at the temp buffer line and then chops it into the DataName and DataValue that gets written out to the .csv file.)

     

    So, I've picked 1, 4, and 16 as the values to represent the number of pixels each size tile is in config.bmp. I can, however, pass any value you like such a simple 1, 2, 3 or the calculated cells (4,096, 16,384, and 65,536) or whatever works best.

    Which do you prefer?

    • Like 3

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    3 hours ago, CorinaMarie said:

    So, I've picked 1, 4, and 16 as the values to represent the number of pixels each size tile is in config.bmp. I can, however, pass any value you like such a simple 1, 2, 3 or the calculated cells (4,096, 16,384, and 65,536) or whatever works best.

    Personally I quite like the idea of using the total calculated cells as a measure of the tile size. Since this is a numerical representation of the entire area, it could then be used to work out population density within the city. The same also with proportions for the other recorded data values.


    Then in Excel should one wish, it'd be possible to create a separate column adding a function such as:

    =IF(D2=4096,"Small",IF(D2=16384,"Medium",IF(D2=65536,"Large")))

    (To work out whether to describe the tile as Small, Medium or Large.)

    • Like 2

    Quick Links

    “SimCity 4 is not just a game, but a tool driven by our own imagination and creativity.”

    Buy me a coffee

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    1 hour ago, Cyclone Boom said:

    Personally I quite like the idea of using the total calculated cells as a measure of the tile size.

    Alrighty. I did it that way.


    New update available. See the bottom of post # 1.

    • Like 2

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    18 hours ago, CorinaMarie said:

    I've picked 1, 4, and 16 as the values to represent the number of pixels each size tile is in config.bmp

    As a programmer, I'd boil the three possible sizes down to 0, 1 & 2. Those three contiguous values can then be used as column index offsets in a spreadsheet table to lookup any of the other fixed values (even a text name) that anyone may wish to associate with a city-size.

    My second choice would be 1, 2 & 4 (the widths in pixels). Nearly contiguous, these can still be used to offset a spreadsheet cell location, but they can also calculate area directly (64*n*n).

    • Like 2
    • Thanks 1

    -- Jeff Fisher ><> Vancouver WA
    "I may be pissing into the wind, but if I keep my enemies behind me and aim carefully, I can still rain on their parade."

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

    Quick little hotfix to version v02d. I had an else in the wrong place and the non-unique named CSV file wasn't being output. If you downloaded before, please grab it again in post # 1. *:blush:


      Edited by CorinaMarie  

    Added linky to post # 1.
    • Like 2
    • Thanks 1

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    Sorry to bump an old thread but I have to say that this is a unique little tool, something that I will definitely use.  I've read the entire thread and yes most of it was way over my head, and pay grade, but I did get some nice little tidbits from it. 

    Thanks for this and your hard work.

    • Like 4

    No beauty shines brighter than that of a good heart.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    1 hour ago, PaPa-J said:

    Sorry to bump an old thread but I have to say that this is a unique little tool, something that I will definitely use.

    No worries at all about replying to threads which haven't been active in a while.

    We've long since relaxed the hard line rules on such, and now encourage greater freedom of posting. In any case, equally as I'm glad to see this topic make its way up the SC4 Modding forum listings again, I know Cori will be happy to see someone else interested in her Reports project. *:)

    Do post again if you've any questions or would like assistance with getting it running.

    • Like 1
    • Yes 1

    Quick Links

    “SimCity 4 is not just a game, but a tool driven by our own imagination and creativity.”

    Buy me a coffee

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    Are you God? You seem to be everywhere I turn.

    More seriously, in your post you implied the ability to look into the games memory while it is running. Can you id non-text structures and routines? As an example, many moons ago, someone expanded on the list of cheats available via Buggi's Dll. One he specifically mentioned was SetAltitude, parameters unknown. From a Civil Engineering standpoint, being able to set cell altitudes, precisely, via keyboard, as opposed to a hit or miss mouse click is devoutly to be desired. He said he could not make it work. I think he did, but the results where invisible to him, as I found by accident that it does indeed change the altitude of a cell, but did not update the underlying terrain, so that unless you tried to run a network over it, it was invisible. Additionally, I could not determine the correct format for parameters, it seem to only operate on the x & z coordinates, ignoring all attempts to set z @ x,y. My main area of interest is in how the terrain brushes function.

    I expect this may not be in your area of interest, but I'd be interested in knowing if it is possible, and if so, what tools are you using?

    • Like 3

    What? Me, worry?

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    47 minutes ago, doldrum said:

    Are you God? You seem to be everywhere I turn.

    Shhhhhhhhhhhh. Don't tell anyone. I'm incognito. *:P *:lol:

     

    47 minutes ago, doldrum said:

    More seriously, in your post you implied the ability to look into the games memory while it is running

    For the part I perfected it's simply exploring the _G global variables (iirc) which are then accessible by name and those can be output to a text file in my mod via one of the menu choices. One could also then grab the information contained within to make coded choices for what to do with it.

     

    47 minutes ago, doldrum said:

    Can you id non-text structures and routines?

    In other non-published tests, I could see lots of functions only by their hex code names. However, those changed every time the game was loaded. It was like they were just assigned the next one on the stack or something. The commands to convert them to a name are disabled in the game's .exe, but I did experiment with placing hooks on them such that each call could be paused line by line and examined tho I never really pursued that to actually do anything with it.

    Additionally, I was able to set the game into debug mode which then allowed other locked out stuff to be run. There were some things where the code had been removed and I was able to rewrite that to create expanded tables like for the Ordinances. Even tho I could place new ones in the table, I still never figured out how to make the game itself access them. On a separate note, I'd also inserted my own debug code such that I could track the loading order of any of the LUA scripts. That too I never finished.

     

    47 minutes ago, doldrum said:

    what tools are you using?

    Just the basic Reader 0.9.3 to edit the LUA script. I would copy it out to edit in N++ just cause that's easier and then paste it back into Reader before saving.

    • Like 2
    • Haha 1

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    On 9/7/2019 at 11:18 PM, CorinaMarie said:
    doldrum said:

    Are you God? You seem to be everywhere I turn.

     

    On 9/7/2019 at 11:18 PM, CorinaMarie said:

    Shhhhhhhhhhhh. Don't tell anyone. I'm incognito

    Mums the word.

    On 9/7/2019 at 11:18 PM, CorinaMarie said:

    For the part I perfected it's simply exploring the _G global variables (iirc) which are then accessible by name and those can be output to a text file in my mod via one of the menu choices. One could also then grab the information contained within to make coded choices for what to do with it.

    1) I'll return to the C.O.R.I. Report & Lua in a moment, but I have some very, very old info, that might be relevant to you.

    Irregardless of whether you use the TerrainQuery cheat or not, using the '?' query, not the 'ALT?' query, if you follow the correct procedure, a file named 'query.txt' is created in the same folder as the .exe file. This file is overwritten the next time you do the same thing, so you need to ALT-TAB out of the game and rename or copy it elsewhere if you want to save it.

    Do a query on a tile: if you hover the mouse you see this -

    SCQuery1.jpg.f46fb304be20981a46d478e8ed21555e.jpg

    Normally, then (in the case of a lot), you would click to get the following -

    SCQuery2.jpg.3b02db05d99b7bc49fb1380b645b8a4e.jpg

    (I use an expanded query tool, can't remember which one, I think it was incorporated into another mod.) Anyway, if, instead of clicking, you hold down SHIFT-CTRL-ALT & click, your new 'query.txt' file will be written AFTER you close the second UI. (If you are querying blank terrain, or undeveloped zones, not sure when the actual writing is done, may be immediate, I didn't test it.)

    On a Windoze computer, you will go from this -

    Files1.jpg.b8c3e74523984ebfe98c2bae164cf7fb.jpg

    to this -

    Files2.jpg.8038a0c715c26612a837393378ed8500.jpg

    Opening it in Notepad shows this -

    Notepad.jpg.64c8a273ff091590d90380d7bbac4e28.jpg

    Opening in Wordpad or Notepad++ will give you a formatted file like this -

    5d75ed5246a2c_Notepad.jpg.a28436331762dc3ee161b011a5b3b007.jpg

    There is more there in the file related to city-wide specs , etc.

    Thought you might find this interesting, already built-in to the game, no mod required. Might make your LUA programming easier if you can find the necessary bits.

    2) To return to my research,  I have a particular interest in engineering the terrain. I AM NOT A PROGRAMMER! I have looked at LUA a long time ago, with an eye to do things, and am aware that modders have incorporated scripts, but unless I am mistaken, it all has to be oriented towards advisors or automata, and there has been little success in having it perform a direct game action. Anyway LUA has (until now) been at the bottom of my list of things to investigate.

    I have spent time exploring the God-Mode Terrain brushes, and have made changes to strengths, widths, etc. Although there are a number of properties in the brushes, involving particular texture shapes used to create the effects, all are dependent on

    Comp?OperationId as seen below:

    ReaderPic.jpg.4e848bdea815d7aa33a08e63ad7d1ff8.jpg

    Not every terrain brush uses 2 operations, and none seem to use the 3rd & 4th listed in 'Ingred.ini', and though additional actions increment the property hex value by 0x0100, the VALUES for those properties seem to be limited to 0x0 - 0xA. I haven't explored them all, testing is tedious, but all hills and valleys seem to be controlled by a value of 0x0, modified thru op2, by value 0x2; 0x5 is used in the level brushes; 0x4 for animals. I haven't found the value for trees, I have a list buried somewhere years ago.

    Still the values of the Lake, Rain, and Spring (still not functional) are 0x8, 0x9, and 0xA respectively.

    Having said all that, let me give some background. I am not looking to reverse-engineer anything. However, for my own personal use of the .exe, (allowed by law, I know this is a touchy subject), using just a hex editor many years ago, I was able to find the MsgIds for signs and labels, to incorporate into my personal 'KeyCfg.dat' mod. (I have never published that, and only mentioned it twice in 15 yrs. on this site.) (FYI, in the compiled .exe, those addresses are before the text strings, in memory they probably come after.) I suppose what I looking for is some hex, or code fragment that might help me understand how this all works. I don't completely understand what you've done, or what your technique is capable of, but I wonder if you can offer any insight. BTW, though I dabbled in assembly back in DOS days, I was never able to afford the pricey Windoze dis-assemblers, etc. so though I understand Windows in theory, I've never gone beyond. So I don't own debuggers, disassemblers, IDEs, or SDKs. I'm also on an old WinXP machine, so my Java is un-upgradeable, and many new programs won't even install, let alone run.

    BUT, whether you can help or not, thanks for your responses. Applause for both members of the CoriBoom  team.

    • Like 4

    What? Me, worry?

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    1 hour ago, doldrum said:

    Anyway, if, instead of clicking, you hold down SHIFT-CTRL-ALT & click, your new 'query.txt' file will be written AFTER you close the second UI.

    I have used this before and created said file, but it's been long enough ago I'd forgotten the steps. Your tutorial with pictures is welcome here. *:)

     

    1 hour ago, doldrum said:

    there has been little success in having it perform a direct game action.

    Of the things I've tinkered with in LUA, I concur there's no info on how to do direct actions like terrain editing or even to directly access the functions available via the extra cheats. I'm not saying it couldn't be done, but it'd take a lot more research along the lines I'd played with, but abandoned.

     

    1 hour ago, doldrum said:

    However, for my own personal use of the .exe, (allowed by law, I know this is a touchy subject), using just a hex editor many years ago, I was able to find the MsgIds for signs and labels, to incorporate into my personal 'KeyCfg.dat' mod. (I have never published that, and only mentioned it twice in 15 yrs. on this site.)

    I personally don't get all bent out of shape over the mention of peeking and poking around in the game's .exe for one's own use.

     

    1 hour ago, doldrum said:

    I don't completely understand what you've done, or what your technique is capable of, but I wonder if you can offer any insight.

    Basically what this mod does is read a bunch of game variables and formats them into a text file. (Prolly a sample of same in my first post.) There is still a lot of tweaking it needs for renaming stuff as I figured out what it really meant, but since there was essentially no interest in the project I've not gotten back to it. For the more in depth part you are after, I'm not at all certain if it could even be done via LUA coding. I did pursue the other functions I could see a wee bit and the part of attaching hooks to them, but didn't go very far with it and have no useful results.

    My guess is LUA won't be the solution for what you want.

     

    1 hour ago, doldrum said:

    Applause for both members of the CoriBoom  team.

    Thanks! *:D

    • Like 1
    • Thanks 1

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    1 hour ago, CorinaMarie said:

    For the more in depth part you are after, I'm not at all certain if it could even be done via LUA coding. I did pursue the other functions I could see a wee bit and the part of attaching hooks to them, but didn't go very far with it and have no useful results

    Might I then request, respectfully, your LUA script, or at least those portions of it that let you peek into the memory and add hooks in-game? I may have to learn LUA and become a competitor.:evil:

    • Like 1

    What? Me, worry?

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    7 minutes ago, doldrum said:

    Might I then request, respectfully, your LUA script, or at least those portions of it that let you peek into the memory and add hooks in-game?

    Here's what I worked from which I found on StackOverflow: Lua - find out calling function and I remember setting up one test which didn't crash, but that's about it.

     

    10 minutes ago, doldrum said:

    I may have to learn LUA and become a competitor. :evil:

    Sounds good. Any type of programming is best when you have a specific goal in mind.

    • Like 2

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    1 hour ago, doldrum said:

    Might I then request, respectfully, your LUA script...

    Was going thru my SC4 documents last night to see if any of them should be uploaded to the Omnibus and found I had this document on LUA Constants, no idea if its useful or not

    Spoiler

    -----------------------------------------------------------------------------------------
    -- This file contains a single table of application data used by advisors
    -- Perhaps it will need to be split in a number of files.
    --
    dofile("_adv_sys.lua") -- this is for development purposes only
    dofile("_adv_advice.lua") -- this is for development purposes only

    ----------------------------------------------------------------------
    -- Define global storage for data comimg from the game.

    game = {}
    TAG_GAME_DATA = newtag()
    settag(game, TAG_GAME_DATA )

    ------------------------------------------------------------------------------------------
    -- Abbreviations

    -- prefixes ---------------------------------------------
    --          g -- Global value (city-wide).
    --          l  -- Local  value value that has location object associated with it.
    --          a   -- Average value.
    --          t   -- Trend value.

    -- suffixes ---------------------------------------------
    --          p --   Values representing a percentages.
    --          h   -- The highest value in its domain.
    --          l   --  The lowest value in its domain.
    --         subject -- Used for objects associated with variables using
    --                           'l' (local) prefix. This object holds the locality
    --                            data related to that variable. Hence
    --                            game.l_air_pollution_h_subject is a locality
    --                            object for the cell with the highest air pollution value.

    ------------------------------------------------------------------------------------------
    -- Functions

    -- For internal use only ----------------------
    game.advice_info = function () return 0 end -- for testing perposes only

    -- Misc game tools -------------------------
    game.trend_slope = function (trend_type, period_in_months) return 0 end --returns a trand value between from (-100, +100) for the period of time (see game_trends for trend types)
    game.trend_value = function (trend_type, num_months_ago) return 0 end --returns a value the trend variable had 'num_months_ago'
    game.trend_count = function (trend_type, period_in_months) return 0 end --returns a sample count for the period of time
    game.trend_delta = function (trend_type, period_in_months)  --returns a growith percentage
       local past_value = game.trend_value(trend_type, period_in_months) + 0.00001 -- for avoiding the division pbolems
       local present_value = game.trend_value(trend_type, 0)
       local result = (present_value / past_value - 1) * 100
       return result
    end

    game.tool_plop_network = function (network_type) end -- E.g. game.tool_plop_network(network_tool_types.SUBWAY). See more types in network_tool_types.
    game.tool_plop_zone = function (zone_type) end -- E.g. game.tool_plop_zone(zone_tool_types.SUBWAY). See more types in zone_tool_types.
    game.tool_plop_building = function (building_type) end -- E.g. game.tool_plop_building(building_tool_types.LOCALPRECINCT4CAR). See more types in building_tool_types.
    game.tool_plop_flora = function (flora_type) end -- E.g. game.tool_plop_flora(flora_tool_types.OAK_TREE). See more types in flora_tool_types.
    game.tool_button = function (button_type) end -- E.g. game.tool_button(button_tool_types.DEMOLISH). See more types in button_tool_types.

    game.window_budget = function (budget_window_type) end -- E.g. game.window_budget(budget_window_types.TAXES). See more types in budget_window_types.
    game.window_map = function (map_window_type) end -- E.g. game.window_map(map_window_types.***). See more types in map_window_types.
    game.window_data_map = function (map_window_type)  game.window_map(map_window_type) end -- same as above
    game.window_graph = function (graph_window_type) end -- E.g. game.window_graph(graph_window_types.***). See more types in graph_window_types.
    game.window_query = function (subject)  end  -- this will open query window for the subject (school, hospical, fire house, etc.)

    -- Camera ------------------
          -- camera_jump moves the camera to the event or local var subject. If the subject is not given it will attempt to
          -- access the event subject. So for event-related messages you can call this with no parameters
          -- or use      nil      as a parameter like this          game.camera_jump()     or     game.camera_jump(nil).
    game.camera_jump = function (subject) end
    game.camera_zoom = function (zoom_level) end -- set zoom level to 'zoom_level'
    game.camera_jump_and_zoom = function (subject,zoom_level) -- move camera to subject and set zoom level to 'zoom_level'
       game.camera_jump(subject)
       game.camera_zoom(zoom_level)
    end

    -- Ordinances --------------
    game.ordinance_is_on = function (ord_guid) return 0 end -- returns true if the ordinace is in force
    game.ordinance_set_off    = function (ord_guid) end -- repeals the ordinance
    game.ordinance_set_on    = function (ord_guid) end -- enacts the ordinance
    game.ordinance_is_available  = function (ord_guid) return 0 end -- checks if the ordinance is available
    game.ordinance_name    = function (ord_guid) return '***' end -- returns ord text name
    game.ordinance_description  = function (ord_guid) return '***' end -- returns ord text description
    game.ordinance_enact_fee  = function (ord_guid) return 0 end -- the fee charged to enact an ordinance
    game.ordinance_repeal_fee  = function (ord_guid) return 0 end -- the fee charged to repeal an ordinance
    game.ordinance_monthly_cost  = function (ord_guid) return 0 end -- the monthly income/expense associated with the ordinance

    -- Advice specific ------------
    game.event_feedback = function (response)  end  -- Sends a message to the app withe the  event ID as message type and 'response' value (0 in case of error) as a parameter
    game.expire_advice   = function ()  end  --this makes the advice message to expire on the next 'business' day
    game.retire_advice   = function ()  end  --causes the advice message to be removed immediately from the UI
    game.advice_subject = function ()  end  -- returns back the subject associated with the advice message. E.g. camera_jump( game.advice_subject() )
    game.event_subject   = function ()  return game.advice_subject() end -- same as above
    game.building_is_group = function (building_subject, group_id) return 0 end -- only useful during MYSIM_BUILDING_ADD event
    game.is_building_group = function (building_subject, group_id) return game.building_is_group(building_subject, group_id) end -- same as above
    game.event_building_is_group = function (group_id) return game.building_is_group(game.event_subject(), group_id) end -- only useful during MYSIM_BUILDING_ADD event
    game.event_building_distance = function () return 0 end -- only useful during MYSIM_BUILDING_ADD event
    game.event_disaster_distance = function () return 0 end -- only useful during MYSIM disasater events
    game.mysim_distance_to_closest_building = function(group_id) return 0 end -- only useful for My Sims
    game.mysim_distance_to_closest_landmark_or_reward = function(guid) return 0 end -- only useful for My Sims
    game.mysim_local_school_grade = function(group_id) return 0 end -- only useful for My Sims
    game.mysim_local_hospital_grade = function(group_id) return 0 end -- only useful for My Sims
    game.mysim_trip_check_destination_groups = function(...) return 0 end -- only useful for My Sims. Can be called with multiple grou IDs. E.g. game.mysim_trip_check_destination_groups(hex2dec('4001'), hex2dec('4107'), hex2dec('4102'))
    game.mysim_get_idle_animation_offset = function(mysim) return 0 end -- this is called by the app to compute the offset for idle animation.
    game.mysim_select_car_style = function() sc4game.mysims_ui.pop_select_car_dialog() end -- pops a car style selection dialog for current current mysim
    game.mysim_select_pedestrian_style = function() sc4game.mysims_ui.pop_select_pedestrian_dialog() end -- pops a pedestrian style selection dialog for current current mysim
    game.mysim_dispatch_tool = function() error"Hello!" end -- Creates my sim dispatch tool

    game.random_chance = function (percentage) return 0 end -- useful if you want to give a trigger a percentage change of occuring; e.g. game.random_chance(5) will have a 5% chance of being true
    game.nd_cancel = function () end -- cancels a neighbor deal set as an advice susbject (game.advice_subject())
    game.reward_instance_count = function (reward_guid) return 0 end -- returns the count for reward buildings by that building's  GUID
    game.is_tutorial = function (tutorial_guid) return 0 end -- if tutorial guid is not specified it will check if current city is a tutorial city

    -- City Situations ------------
    game.trigger_event = function(eventGUID) end                   -- triggers one of the events in game_events, to trigger advisor msg
    game.unlock_reward_building = function(buildingGUID) end       -- makes a conditional (reward) building available to the player.  Use special_buildings GUIDs in adv_const.lua
    game.get_reward_building_state = function(buildingGUID) return reward_state.HIDDEN end    -- returns reward_state constant for the given building
    game.difficulty_level = function () return -1 end

     

    ------------------------------------------------------------------------------------------
    -- Game Data Registry ------------

    if (sc4game == nil) then

    sc4game = {}

    sc4game.mysims = {}
       sc4game.mysims.get_sim = function(simIndex) end
       sc4game.mysims.get_count = function() end

    sc4game.automata = {}
       sc4game.automata.create_automaton = function(autoGroup, x, y, z, flags, modelType, modelGroup, modelInstance, priority) end
       sc4game.automata.create_controller = function(controllerName, x, y, z) end
       sc4game.automata.attach_controller = function(controllerName, occupantTarget) end
       sc4game.automata.attach_controller_group = function(groupName, occupantTarget) end
       sc4game.automata.detach_controller = function(controllerName, occupantTarget) end
       sc4game.automata.detach_controller_group = function(groupName, occupantTarget) end

       -- IMPORTANT: This function will ONLY work for groups that are listed in the table
       -- called "tracked_buildings" inside the file Automata\_constants.lua!
       sc4game.automata.get_source_building_count = function(groupGuid) return 0 end

    sc4game.sitmgr = {}
       sc4game.sitmgr.get_success_count = function(missionGUID) return 0 end
       sc4game.sitmgr.activate_situation = function(missionGUID) end
       sc4game.sitmgr.get_current_target = function() end
       sc4game.sitmgr.get_active_auto = function() end
       sc4game.sitmgr.num_targets = function() return 0 end
       sc4game.sitmgr.cur_target_index = function() return 0 end
       sc4game.sitmgr.get_target_name = function() return "" end
       sc4game.sitmgr.show_CSI = function(bShow) end
       sc4game.sitmgr.num_targets_remaining = function() return 0 end
       
    sc4game.effects = {}
       sc4game.effects.create_effect = function(effectName, x, y, z) end

    sc4game.aura = {}
       sc4game.aura.add_transient_effect = function(x, z, radius, magnitude) end
       sc4game.aura.end_strike = function(department) end

    sc4game.budget = {}
       sc4game.budget.total_funds = function() end
       sc4game.budget.deposit_funds = function(simoleons) end

    sc4game.mysims_ui = {}
       sc4game.mysims_ui.pop_select_car_dialog = function() end
       sc4game.mysims_ui.pop_select_pedestrian_dialog = function() end

    -- NOTE: UNRELIABLE!  Use sc4game.automata.get_source_building_count(building_groups.LANDMARK) instead!
    sc4game.civic = {}
       sc4game.civic.get_landmark_count = function() return 0 end

    end


    ------------------------------------------------------------------------------------------
    -- Helper functions

    -- returns "true" if all of the missions in the guidTable have been completed, false
    -- if not.
    -- example:
    --    if (missions_completed( { 'abcdef00', '01234567', '18675309' } )
    --
    function missions_completed( guidTable )
       local i,guid
       local bResult

       if (type(guidTable) == "table") then
          bResult = true
          for i,guid in guidTable do
             if (sc4game.sitmgr.get_success_count(guid) == 0) then
                bResult = false
             end
          end
       else
          bResult = true
          if (sc4game.sitmgr.get_success_count(guidTable) == 0) then
             bResult = false
          end
       end

       return bResult
    end

    ------------------------------------------------------------------------------------------
    -- Safety

    -- Fire-related ----------

    game. g_fire_funding_p = 0
    game. g_fire_station_count = 0
    game. ga_flammability = 0
    game. ga_fire_coverage = 0 -- average level of protection for all zoned cells. (0,100)
    game.g_fire_coverage_p = 0 -- percentage of all zoned cells whose f. voverage is > 0
    game.g_fire_strike = 0 -- set to non-zero if there a fire strike is going
    game.g_fire_strike_chance = 0 -- % chance a strike will start this month
    game.g_fire_repath_attempts = 0

    game.l_flammability_h = 0 -- the hot spot value
    game.l_flammability_h_subject = 0 -- the hot spot location
    game.l_fire_funding_p = 0 -- for the fire station with the minimum funding
    game.l_fire_funding_p_subject = 0 -- the fire station for the value above
    game.l_fire_station_no_roads = 0 -- non-zero if there is a fire station with no access
    game.l_fire_station_no_roads_subject = 0 -- the fire station object above


    -- Police-realted
    game.g_police_funding_p = 0
    game.ga_crime = 0
    game.g_jail_capacity = 0
    game.g_inmate_count = 0
    game.g_criminal_count = 0
    game.g_crime_commited_count = 0
    game.g_arrest_count = 0
    game.g_police_station_count = 0
    game.g_jail_count = 0
    game.g_police_strike = 0
    game.g_police_strike_chance = 0
    game.ga_police_coverage = 0
    game.g_police_coverage_p = 0
    game.g_jailbreak = 0
    game.g_police_repath_attempts = 0

    game.l_crime_h = 0 -- crime hot spot
    game.l_crime_h_subject = 0 -- the map location for the value above
    game.l_police_no_roads = 0 -- non zero if there is a police station with no road access
    game.l_police_no_roads_subject = 0 -- the police station for the above case
    game.l_police_funding_p = 0 -- minimum amount of funding among all police stations
    game.l_police_funding_p_subject  = 0 -- the police station for the above case

    -- Disaster-related
    game.g_disasters_in_progress = 0
    game.g_disasters_damage_cost = 0
    game.g_disasters_damage_building_count = 0
    game.g_disasters_police_dispatch_effectiveness = 0
    game.g_disasters_fire_dispatch_effectiveness = 0
    game.g_disasters_riot_ended = 0
    game.g_disasters_riot_started = 0
    game.g_disasters_fire_ended = 0
    game.g_disasters_fire_started = 0
    game.g_disasters_fire_cause_arson = 0
    game.g_disasters_fire_cause_effects = 0
    game.g_disasters_fire_cause_flammability = 0

    ------------------------------------------------------------------------------------------
    -- Utility

    -- Power ---------------
    game.g_power_funding_p = 0
    game.g_power_plant_count = 0
    game.g_power_plant_count_coal = 0
    game.g_power_plant_count_gas = 0
    game.g_power_plant_count_oil = 0
    game.g_power_plant_count_wind = 0
    game.g_power_plant_count_solar = 0
    game.g_power_plant_count_nuclear = 0
    game.g_power_plant_count_waste = 0
    game.g_power_plant_count_fusion = 0
    game.g_aged_power_plant_count = 0 -- those over 80% or their life
    game.g_power_pole_count = 0
    game.g_power_production_capacity = 0
    game.g_power_consumed = 0
    game.g_power_imported = 0
    game.g_power_exported = 0
    game.g_overworked_power_plant_count = 0 -- for those working over their capacity
    game.g_unpowered_building_count = 0
    game.g_power_strike = 0
    game.g_power_strike_chance = 0
    game.l_power_plant_funding_pl = 0
    game.l_power_plant_funding_pl_subject = 0
    game.l_power_plant_age_h = 0
    game.l_power_plant_age_h_subject = 0

    -- Plumbing ---------------
    game.g_water_funding_p = 0
    game.g_water_source_count = 0
    game.g_water_production_capacity = 0
    game.g_water_consumed = 0
    game.g_water_imported = 0
    game.g_water_exported = 0
    game.g_water_pipe_count = 0
    game.g_water_distressed_pipe_count = 0
    game.g_water_burst_pipe_count = 0
    game.g_watered_building_count = 0
    game.g_unwatered_building_count = 0
    game.g_water_pollution_pump_shutdown_count = 0 -- the count for pump shutdowns for pollution reasons
    game.l_water_building_funding_pl = 0
    game.l_water_building_funding_pl_subject = 0
    game.l_water_building_age_h = 0
    game.l_water_building_age_h_subject = 0

    -- Pollution ---------------

    game.g_pollution_funding_p = 0
    game.g_incinerator_count = 0
    game.g_waste_to_energy_building_count = 0
    game.g_water_treatment_plant_count = 0
    game.g_recycling_center_count = 0
    game.g_incinerator_capacity_daily = 0
    game.g_waste_to_energy_capacity_daily = 0
    game.g_recycling_center_effect_p = 0 -- % effect of recycling centers
    game.ga_air_pollution = 0
    game.ga_water_pollution = 0
    game.ga_garbage_pollution = 0
    game.g_uncollected_garbage = 0
    game.g_landfill_capacity = 0
    game.g_available_landfill_capacity = 0

    game.g_garbage_produced = 0
    game.g_garbage_imported = 0
    game.g_garbage_exported = 0
    game.g_garbage_recycled = 0
    game.g_garbage_to_energy = 0 -- garbage converted to energy this month
    game.g_garbage_to_landfill = 0 -- garbage sent to landfill this month

    game.l_air_pollution_h = 0 -- local air pollution
    game.l_air_pollution_h_subject = 0 -- location object for the above value
    game.l_water_pollution_h = 0 -- local water pollution
    game.l_water_pollution_h_subject = 0 -- location object for the above value
    game.l_uncollected_garbage_h = 0 --local garbage pollution
    game.l_uncollected_garbage_h_subject = 0 -- location object for the above value

    -- Neighbor deals -------------
    game.g_nd_count_buy_water = 0
    game.g_nd_count_sell_water = 0
    game.g_nd_count_buy_power = 0
    game.g_nd_count_sell_power = 0
    game.g_nd_count_export_garbage = 0
    game.g_nd_count_import_garbage = 0

    game.g_nd_connection_present_water = 0
    game.g_nd_connection_present_power = 0
    game.g_nd_connection_present_garbage = 0

    game.g_nd_can_buy_water = 0
    game.g_nd_can_buy_power = 0
    game.g_nd_can_export_garbage = 0
    game.g_nd_can_sell_water = 0
    game.g_nd_can_sell_power = 0
    game.g_nd_can_import_garbage = 0

    ------------------------------------------------------------------------------------------------
    -- Transportation

    -- Traffic -------------------
    game.g_pothole_count = 0
    game.g_road_funding_p = 0
    game.g_masstransit_funding_p = 0
    game.g_transit_strike = 0
    game.g_transit_strike_chance = 0
    game.ga_freight_trip_length = 0

    game.g_bus_station_count = 0
    game.ga_bus_station_utilization_p = 0
    game.l_bus_station_utilization_pl = 0
    game.l_bus_station_utilization_pl_subject = 0

    game.g_monorail_station_count = 0
    game.ga_monorail_station_utilization_p = 0
    game.l_monorail_station_utilization_pl = 0
    game.l_monorail_station_utilization_pl_subject = 0

    game.g_monorail_station_count = 0
    game.ga_monorail_station_utilization_p = 0
    game.l_monorail_station_utilization_pl = 0
    game.l_monorail_station_utilization_pl_subject = 0

    game.g_train_station_count = 0
    game.ga_train_station_utilization_p = 0
    game.l_train_station_utilization_pl = 0
    game.l_train_station_utilization_pl_subject = 0
     
    game.g_subway_station_count = 0
    game.ga_subway_station_utilization_p = 0
    game.l_subway_station_utilization_pl = 0
    game.l_subway_station_utilization_pl_subject = 0
     
    game.g_road_tile_count = 0
    game.g_rail_tile_count = 0
    game.g_subway_tile_count = 0
    game.g_highway_tile_count = 0
    game.g_street_tile_count = 0
     
    game.ga_road_congestion = 0 -- from 0 and up. Values under about 100 (duh!) indicate no congestion.
    game.g_road_congestion_tile_count = 0
    game.l_road_congestion_h = 0
    game.l_road_congestion_h_subject = 0

    game.ga_rail_congestion = 0 -- from 0 and up. Values under about 100 (duh!) indicate no congestion.
    game.g_rail_congestion_tile_count = 0
    game.l_rail_congestion_h = 0
    game.l_rail_congestion_h_subject = 0

    game.ga_subway_congestion = 0 -- from 0 and up. Values under about 100 (duh!) indicate no congestion.
    game.g_subway_congestion_tile_count = 0
    game.l_subway_congestion_h = 0
    game.l_subway_congestion_h_subject = 0

    -- Ports -------------------
    game.ga_airport_efficiency = 0
    game.ga_seaport_efficiency = 0

    game.g_medium_airport_count = 0 -- all stages
    game.g_small_airport_count = 0
    game.g_large_airport_count = 0
    game.g_medium_airport_s1_count = 0 -- stage 1
    game.g_small_airport_s1_count = 0
    game.g_large_airport_s1_count = 0
    game.g_medium_airport_s2_count = 0 -- stage 2
    game.g_small_airport_s2_count = 0
    game.g_large_airport_s2_count = 0
    game.g_medium_airport_s3_count = 0 -- stage 2
    game.g_small_airport_s3_count = 0
    game.g_large_airport_s3_count = 0

    game.g_seaport_count = 0 -- all stages
    game.g_seaport_s1_count = 0 -- stage 1
    game.g_seaport_s2_count = 0 -- stage 2
    game.g_seaport_s3_count = 0 -- stage 3

    ------------------------------------------------------------------------------------------------
    -- Finances

    -- Budget
    game.g_funds = 0

    game.g_income_monthly = 0
    game.g_expense_monthly = 0

    game.g_tax_rate_r_low = 0
    game.g_tax_rate_r_med = 0
    game.g_tax_rate_r_high = 0

    game.g_tax_rate_cs_low = 0
    game.g_tax_rate_cs_med = 0
    game.g_tax_rate_cs_high = 0

    game.g_tax_rate_co_med = 0
    game.g_tax_rate_co_high = 0

    game.g_tax_rate_i_resource = 0
    game.g_tax_rate_i_dirty = 0
    game.g_tax_rate_i_manufacturing = 0
    game.g_tax_rate_i_hightech = 0

    game.g_tax_income = 0

    game.g_borrowed = 0
    game.g_borrowing_limit = 0
    game.g_bond_payments_monthly = 0

    game.g_nd_income = 0
    game.g_nd_expense = 0

    ------------------------------------------------------------------------------------------------
    -- City planning

    game.ga_mayor_rating    = 0 -- all mayor ratings range from -100 to +100
    game.l_mayor_rating_l= 0
    game.l_mayor_rating_l_subject = 0
    game.l_mayor_rating_h = 0
    game.l_mayor_rating_h_subject = 0

    Citywide Industrial Population: #game.g_city_i_population#
    Citywide Commercial Population: #game.g_city_c_population#
    Citywide Workforce Population: #game.g_city_workforce_population#
    Citywide Residential Population: #game.g_city_r_population#

    game.g_population = 0
    game.g_city_rci_population    = 0
    game.g_city_r_population    = 0
    game.g_city_c_population    = 0
    game.g_city_i_population    = 0
    game.g_city_r1_population    = 0
    game.g_city_r2_population    = 0
    game.g_city_r3_population    = 0
    game.g_city_ir_population    = 0
    game.g_city_id_population    = 0
    game.g_city_im_population    = 0
    game.g_city_iht_population    = 0
    game.g_city_co2_population    = 0
    game.g_city_co3_population    = 0
    game.g_city_cs1_population    = 0
    game.g_city_cs2_population    = 0
    game.g_city_cs3_population    = 0
    game.g_region_rci_population    = 0
    game.g_region_r_population    = 0
    game.g_region_c_population    = 0
    game.g_region_i_population    = 0
    game.g_city_workforce_population    = 0
    game.g_region_workforce_population    = 0
    game.g_r1_demand    = 0
    game.g_r2_demand    = 0
    game.g_r3_demand    = 0
    game.g_co2_demand    = 0
    game.g_co3_demand    = 0
    game.g_r1_active_demand    = 0
    game.g_r2_active_demand    = 0
    game.g_r3_active_demand    = 0
    game.g_co2_active_demand    = 0
    game.g_co3_active_demand    = 0
    game.g_id_active_demand    = 0
    game.g_im_active_demand    = 0
    game.g_iht_active_demand    = 0
    game.g_workforce_demand    = 0
    game.g_workforce_active_demand    = 0
    game.g_current_id_cap    = 0
    game.g_current_im_cap    = 0
    game.g_current_iht_cap    = 0
    game.g_current_co2_cap    = 0
    game.g_current_co3_cap    = 0
    game.g_current_r1_cap    = 0
    game.g_current_r2_cap    = 0
    game.g_current_r3_cap    = 0
    game.g_tax_rate_neutral    = 0
    game.g_num_rzone_ld_tiles    = 0
    game.g_num_rzone_md_tiles    = 0
    game.g_num_rzone_hd_tiles    = 0
    game.g_num_czone_ld_tiles    = 0
    game.g_num_czone_md_tiles    = 0
    game.g_num_czone_hd_tiles    = 0
    game.g_num_izone_r_tiles    = 0
    game.g_num_izone_l_tiles    = 0
    game.g_num_izone_h_tiles    = 0
    game.g_num_rail_neighbors    = 0
    game.g_num_road_neighbors    = 0
    game.g_num_avenue_neighbors    = 0
    game.g_num_cities_connected        = 0
    game.g_num_cities_adjacent    = 0
    game.g_num_cities_connected_indirectly    = 0
    game.g_city_has_sea    = 0

    -- Extrapolated ----------------------
    game.g_r1_demand_extrap = 0
    game.g_r2_demand_extrap = 0
    game.g_r3_demand_extrap = 0
    game.g_r_demand_extrap = 0

    game.g_cs1_demand_extrap = 0
    game.g_cs2_demand_extrap = 0
    game.g_cs3_demand_extrap = 0
    game.g_co2_demand_extrap = 0
    game.g_co3_demand_extrap = 0
    game.g_c_demand_extrap = 0

    game.g_ir_demand_extrap = 0
    game.g_id_demand_extrap = 0
    game.g_im_demand_extrap = 0
    game.g_ih_demand_extrap = 0
    game.g_i_demand_extrap = 0

    -- Misc -----------------------------
    game.g_num_buildings = 0
    game.g_num_parks = 0
    game.g_num_recreation = 0

    game.g_parks_funding_p = 0
    game.g_landmarks_funding_p = 0
    --------------------------------------------------------------------------------------------------
    -- EQ ----------------------------

    -- Health ----------------------
    g=citywide

    game.g_health_funding_p = 0 -- --Budget sim
    game.g_num_hospitals = 0 -- --cISC4ResidentialSimulator::GetHospitalSystemTotals
    game.g_num_clinics = 0 -- --cISC4ResidentialSimulator::GetHospitalSystemTotals
    game.l_hospital_funding_l = 0 -- Budget sim or cISC4ResidentialSimulator::GetHospitalQueryData
    game.l_hospital_funding_l_subject = 0 --
    game.l_clinic_funding_l = 0 -- Budget sim or cISC4ResidentialSimulator::GetHospitalQueryData
    game.l_clinic_funding_l_subject = 0 --
    game.g_health_strike = 0 -- cISC4ResidentialSimulator::HealthIsOnStrike
    game.g_health_strike_chance = 0 -- cISC4ResidentialSimulator::ChanceOfHealthStrike
    game.g_health_coverage_p = 0 -- cISC4ResidentialSimulator::GetHospitalSystemTotals & cISC4ResidentialSimulator::GetPopulation
    game.ga_health_grade = 0 -- cISC4ResidentialSimulator::GetHealthSystemRating
    game.l_hospital_grade_l = 0 -- cISC4ResidentialSimulator::GetHospitalQueryData
    game.l_hospital_grade_l_subject = 0 --
    game.l_clinic_grade_l = 0 -- cISC4ResidentialSimulator::GetHospitalQueryData
    game.l_clinic_grade_l_subject = 0 --
    game.ga_life_exp = 0 -- cISC4ResidentialSimulator::GetGlobalLE
    game.ga_health = 0 -- cISC4ResidentialSimulator::GetGlobalHQ
    game.ga_education = 0 -- cISC4ResidentialSimulator::GetGlobalEQ
    game.l_tract_life_exp_l = 0 -- LE is directly tied to HQ.  Therefore, the tract with the highest
    game.l_tract_life_exp_l_subject = 0 -- LE is directly tied to HQ.  Therefore, the tract with the highest
    game.l_tract_life_exp_h = 0 --     HQ will always be the tract with the highest LE.
    game.l_tract_life_exp_h_subject = 0 --     HQ will always be the tract with the highest LE.
    game.l_tract_hq_l = 0 -- cISC4ResidentialSimulator:: GetHQMinAndMaxTractCoords
    game.l_tract_hq_l_subject = 0 -- cISC4ResidentialSimulator:: GetHQMinAndMaxTractCoords
    game.l_tract_hq_h = 0 -- cISC4ResidentialSimulator:: GetHQMinAndMaxTractCoords
    game.l_tract_hq_h_subject = 0 -- cISC4ResidentialSimulator:: GetHQMinAndMaxTractCoords
    game.g_num_treated_patients = 0 -- cISC4ResidentialSimulator::GetHospitalSystemTotals
    game.g_health_capacity = 0 -- ?    cISC4ResidentialSimulator::GetHospitalSystemTotals

    -- Education    --------------------

    game.g_education_funding_p = 0 -- Budget sim    
    game.l_school_funding_l = 0 -- ?    Budget sim or cISC4ResidentialSimulator::GetSchoolQueryData
    game.l_school_funding_l_subject = 0 -- ?    Budget sim or cISC4ResidentialSimulator::GetSchoolQueryData
    game.g_school_strike = 0 -- cISC4ResidentialSimulator::SchoolIsOnStrike
    game.g_school_strike_chance = 0 -- cISC4ResidentialSimulator::ChanceOfSchoolStrike
    game.g_education_coverage_p = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals & cISC4ResidentialSimulator::GetPopulation
    game.ga_school_grade = 0 -- cISC4ResidentialSimulator::GetSchoolSystemRating or GetSchoolSystemTotals
    game.l_school_grade_l = 0 -- cISC4ResidentialSimulator::GetSchoolQueryData
    game.l_school_grade_l_subject = 0 -- cISC4ResidentialSimulator::GetSchoolQueryData
    game.g_num_educational_buildings = 0 -- ?    cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.g_num_schools = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.g_num_elem_schools = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.g_num_high_schools = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.g_num_colleges = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.g_num_libraries = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.g_num_museums = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.g_num_library_served = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.g_num_museum_served = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.l_museum_grade_l = 0 --     cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.l_museum_grade_l_subject = 0 --
    game.l_library_grade_l = 0 --     cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.l_library_grade_l_subject = 0 --
    game.ga_museum_grade = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.ga_library_grade = 0 -- cISC4ResidentialSimulator::GetSchoolSystemTotals
    game.l_tract_eq_l = 0 -- cISC4ResidentialSimulator:: GetEQMinAndMaxTractCoords
    game.l_tract_eq_l_subject = 0 -- cISC4ResidentialSimulator:: GetEQMinAndMaxTractCoords
    game.l_tract_eq_h = 0 -- cISC4ResidentialSimulator:: GetEQMinAndMaxTractCoords
    game.l_tract_eq_h_subject = 0 -- cISC4ResidentialSimulator:: GetEQMinAndMaxTractCoords

    ---------------------------------------------------------------------
    -- Time --------------------

    game.g_day = 0
    game.g_month = 0
    game.g_year = 0 -- some constant-based year count. At this point the initial (for a new city) year is 2000.
    game.g_year_count = 0 -- zero-based year count. For new cities this is set to zero, increasing by 1 every game year.
    game.g_date = 0

    ----------------------------------------------------------------------
    -- EP1

    game.ga_bridge_congestion = 0 --    average bridge tiles congestion
    game.ga_road_congestion = 0 --    confirm that this measures roads ONLY - no streets included
    game.ga_street_congestion     = 0 --    the average congestion of streets ONLY in the city
    game.ga_avenue_congestion     = 0 --    the average congestion of streets ONLY in the city
    game.ga_elevated_congestion     = 0 --    the average congestion of streets ONLY in the city
    game.ga_monorail_congestion     = 0 --    the average congestion of streets ONLY in the city
    game.ga_freight_trip_length     = 0 --    the average trip length of all freight trips in the city

    game.ga_elevated_station_utilization_p     = 0 --    the average utilzation of elevated rapid transit stations in the city (see existing subway station utilization)
    game.g_elevated_station_count     = 0 --    count the number of elevated rapid transit station in the city
    game.l_elevated_station_utilization_pl = 0
    game.l_elevated_station_utilization_pl_subject = 0

    game.ga_bus_station_utilization_p     = 0 --    the average utilzation of elevated rapid transit stations in the city (see existing subway station utilization)
    game.g_bus_station_count     = 0 --    count the number of elevated rapid transit station in the city
    game.l_bus_station_utilization_pl = 0
    game.l_bus_station_utilization_pl_subject = 0

    game.ga_monorail_station_utilization_p     = 0 --    the average utilzation of elevated rapid transit stations in the city (see existing subway station utilization)
    game.g_monorail_station_count     = 0 --    count the number of elevated rapid transit station in the city
    game.l_monorail_station_utilization_pl = 0
    game.l_monorail_station_utilization_pl_subject = 0

    game.g_train_freight_depot_count     = 0 --    count the number of rail freight depots plopped in the city
    game.g_seaport_count     = 0 --    count the number of seaports plopped in the city
    game.g_car_ferry_count     = 0 --    count the number of car ferry terminals in the city'
    game.g_passenger_ferry_count     = 0 --    count the number of passenger ferry terminals in the city

    game.l_road_congestion_h     = 0 --    confirm that this looks for congestion on roads ONLY - no streets
    game.l_street_congestion_h     = 0 --    the congestion level of the most congested street in the city
    game.l_avenue_congestion_h     = 0 --    the congestion level of the most congested avenue in the city

    game.l_road_congestion_h_subject     = 0 --    confirm that this looks for congestion on roads ONLY - no streets
    game.l_street_congestion_h_subject     = 0 --    the location of the most congested street tile in the city
    game.l_avenue_congestion_h_subject     = 0 --    the location of the most congested avenue in the city

    game.l_bridge_congestion_h     = 0 --    the congestion level of the most congested bridge tile in the city
    game.l_road_connection_congestion_h     = 0 --    the congestion level of the the most congested road neighbor connection in the city
    game.l_avenue_connection_congestion_h     = 0 --    the congestion level of the most congested avenue neighbor connection in the city

    game.l_bridge_congestion_h_subject     = 0 --    the location of the most congested bridge tile in the city
    game.l_road_connection_congestion_h_subject     = 0 --    the location of the most congested road neighbor connection in the city
    game.l_avenue_connection_congestion_h_subject     = 0 --    the location of the most congested avenue neighbor connection in the city

    game.g_dirtroad_tile_count     = 0 --    count then number of tiles with dirt road occupants in the city
    game.g_avenue_tile_count     = 0 --    count the number of tiles with avenue occupants in the city
    game.g_street_tile_count     = 0 --    count the number of tiles with street occupants in the city
    game.g_city_tile_size     = 0 --    the size of the city in tiles: i.e. 4096, 16384, or 65536
    game.g_water_tile_count     = 0 --    the number of tiles in a city that are occupied by water
    game.g_groundhighway_tile_count     = 0 --    count the number of tiles with ground-level highway occupants in the city
    game.g_elevated_rail_tile_count     = 0 --    count the number of tiles with elevated rapid transit occupants in the city
    game.g_monorail_tile_count     = 0 --    count the number of tiles with monorail transit occupants in the city
    game.g_bridge_tile_count     = 0 --    total bridge tile count

    game.g_num_rapidtransit_transitions     = 0 --    count the number of subway-to-elevated rapid transit track transitions in the city
    game.g_num_tollbooths     = 0 --    count then number of tollbooths plopped in the city
    game.g_seaport_volume     = 0 --    count the number of freght trips that reach all seaports in the city

    game.g_car_ferry_trip_completed     = 0 --    a car ferry terminal completes a test trip
    game.g_passnger_ferry_trip_completed     = 0 --    a passnger ferry terminal completes a test trip
    game.g_return_trip_failed_count     = 0 --    the number of commute return trips that could not find their destination
    game.g_car_ferry_trip_failed     = 0 --    a car ferry terminal cannot complete a test trip to another car ferry terminal nor find a car ferry neighbor connection
    game.g_passnger_ferry_trip_failed     = 0 --    a passnger ferry terminal cannot complete a test trip to another car ferry terminal nor find a car ferry neighbor connection

    game.l_seaport_water_edge_no_access     = 0 --    a seaport cannot complete a test trip to a water edge of the city
    game.l_seaport_water_edge_no_access_subject     = 0 --    location of the seaport that cannot complete test trip

    game.g_car_zot_count     = 0 --    count the number of car zots (can't complete trip) appearing in the city

    game.l_ferry_no_road_access     = 0 --    a car ferry terminal has a car zot
    game.l_shuttle_no_road_access     = 0 --    a passenger ferryterminal has a car zot
    game.g_seaport_no_road_access     = 0 --    a seaport has a car zot
    game.g_airport_no_road_access     = 0 --    an airport has a car zot

    game.l_ferry_no_road_access_subject     = 0 --    location of the car ferry terminal with a car zot
    game.l_shuttle_no_road_access_subject     = 0 --    location of the passnger ferry terminal with a car zot
    game.g_seaport_no_road_access_subject     = 0 --    location of the seaport with a car zot
    game.g_airport_no_road_access_subject     = 0 --    location of airport with a car zot

    game.g_rail_neighbor_connection_count     = 0 --    count the number of neighbor city rail connections in the city

     

     

     

     

    game_trends = {}

       game_trends.G_RESIDENTIAL_POPULATION = hex2dec('2a4e2003')
       game_trends.G_COMMERCIAL_CAPACITY = hex2dec('0a4e2056')
       game_trends.G_INDUSTRIAL_CAPACITY = hex2dec('4a4e206b')

       game_trends.G_FIRE_PROTECTION_COVERAGE_P = hex2dec('2A11D203')
       game_trends.GA_FIRE_PROTECTION         = hex2dec('2A11D204')
       game_trends.GA_FLAMMABILITY = hex2dec('2A11CB48')

       game_trends.G_POLICE_PROTECTION_COVERAGE_P = hex2dec('4A11D354')
       game_trends.GA_POLICE_PROTECTION         = hex2dec('4A11D355')
       game_trends.G_NUM_CRIMES = hex2dec('0a5cc155')
       game_trends.G_NUM_ARRESTS = hex2dec('0a5cc156')
       game_trends.GA_CRIME = hex2dec('aa662693')
       game_trends.FIRE_DISASTER = hex2dec('49d15b74')
       game_trends.RIOT_DISASTER = hex2dec('aa8c87c7')

       game_trends.G_WATER_PRODUCED        = hex2dec('0A14EBB4')
       game_trends.G_WATER_IMPORTED        = hex2dec('0A14EBB5')
       game_trends.G_WATER_EXPORTED        = hex2dec('CA14EBC6')
       game_trends.G_WATER_CONSUMED        = hex2dec('CA14EBD0')
       game_trends.G_WATER_PIPES_COUNT           = hex2dec('CA14EBFE')
       game_trends.G_WATER_PIPES_COUNT_DISTRESSED = hex2dec('CA14EC19')
       game_trends.G_WATERED_BUILDING_COUNT = hex2dec('ca78a955')
       game_trends.G_UNWATERED_BUILDING_COUNT = hex2dec('8a78ab06')
       
       game_trends.G_TOTAL_AIR_POLLUTION          = hex2dec('0A1100E8')
       game_trends.G_TOTAL_WATER_POLLUTION        = hex2dec('EA110130')
       game_trends.G_TOTAL_GARBAGE_POLLUTION      = hex2dec('EA110134')
       game_trends.G_TOTAL_RADIATION_POLLUTION    = hex2dec('EA110137')

       game_trends.G_GARBAGE_PRODUCED            = hex2dec('EA110158')
       game_trends.G_GARBAGE_IMPORTED            = hex2dec('EA11017B')
       game_trends.G_GARBAGE_EXPORTED            = hex2dec('EA11017E')
       game_trends.G_GARBAGE_RECYCLED            = hex2dec('EA11016F')
       game_trends.G_GARBAGE_INCINERATED         = hex2dec('EA110197')
       game_trends.G_GARBAGE_TO_ENERGY            = hex2dec('EA1101A1')
       game_trends.G_GARBAGE_TO_LANDFILL          = hex2dec('EA1101AA')
       
       game_trends.G_POWER_PRODUCED              = hex2dec('AA11F7CE')
       game_trends.G_POWER_IMPORTED              = hex2dec('AA11F837')
       game_trends.G_POWER_EXPORTED              = hex2dec('AA11F83A')
       game_trends.G_POWER_CONSUMED              = hex2dec('AA11F7D2')
       game_trends.G_POWER_DEMANDED              = hex2dec('AA11F7D5')
       game_trends.G_POWER_UNUSED                = hex2dec('AA11F7D8')
       game_trends.G_POWER_BUILDING_AVERAGE_AGE    = hex2dec('AA11F7DA')
       game_trends.G_POWER_COST                  = hex2dec('AA11F7DC')
       game_trends.G_POWER_BLACKOUT_P = hex2dec('AA11FB59')
       game_trends.G_POWER_CONSUMED_COAL          = hex2dec('AA120D5E')
       game_trends.G_POWER_CONSUMED_FUSION        = hex2dec('AA120D61')
       game_trends.G_POWER_CONSUMED_GAS           = hex2dec('AA120D63')
       game_trends.G_POWER_CONSUMED_MICROWAVE     = hex2dec('AA120D65')
       game_trends.G_POWER_CONSUMED_NUCLEAR       = hex2dec('AA120D66')
       game_trends.G_POWER_CONSUMED_OIL           = hex2dec('AA120D68')
       game_trends.G_POWER_CONSUMED_SOLAR         = hex2dec('AA120D6A')
       game_trends.G_POWER_CONSUMED_WASTE         = hex2dec('AA120D6B')
       game_trends.G_POWER_CONSUMED_WIND          = hex2dec('AA120D6D')
       
       game_trends.GA_EQ                        = hex2dec('AA1A2864')
       game_trends.GA_HQ                        = hex2dec('AA1A2866')
       game_trends.G_POPULATION_HEALTH_COVERAGE         = hex2dec('AA1A2C9F')
       game_trends.G_POPULATION_SCHOOL_COVERAGE         = hex2dec('AA1A2CA6')
       game_trends.G_POPULATION                  = hex2dec('AA1A2CCA')
       game_trends.G_POPULATION_DEMOGRAPHIC_BASE        = hex2dec('CA545CAB')
       game_trends.G_EQ_DEMOGRAPHIC_BASE                = hex2dec('CA545CCA')

       game_trends.GA_EFFICIENCY_SEAPORTS = hex2dec('EA3E904A')
       
       game_trends.G_R_POPULATION = hex2dec('2A4E2003')
       game_trends.G_RL_POPULATION = hex2dec('4A5E9485')
       game_trends.G_RM_POPULATION = hex2dec('EA5E948A')
       game_trends.G_RH_POPULATION = hex2dec('2A5E948E')
       game_trends.G_C_POPULATION = hex2dec('0A4E2056')
       game_trends.G_CO_POPULATION = game_trends.G_C_POPULATION
       game_trends.G_COSL_POPULATION = hex2dec('8A5E950E')
       game_trends.G_COSM_POPULATION = hex2dec('0A5E9515')
       game_trends.G_COSH_POPULATION = hex2dec('8A5E954A')
       game_trends.G_COOM_POPULATION = hex2dec('8A5E9552')
       game_trends.G_COOH_POPULATION = hex2dec('EA5E9557')
       game_trends.G_I_POPULATION = hex2dec('4A4E206B')
       game_trends.G_IR_POPULATION = hex2dec('2A5E95A1')
       game_trends.G_ID_POPULATION = hex2dec('6A5E95A7')
       game_trends.G_IM_POPULATION = hex2dec('0A5E95AC')
       game_trends.G_IHT_POPULATION = hex2dec('AA5E95B1')
     
       game_trends.G_R_EXTRAP_OUT = hex2dec('aa772f1d')
       game_trends.G_C_EXTRAP_OUT = hex2dec('6a774f64')
       game_trends.G_I_EXTRAP_OUT = hex2dec('ca774f69')
     
       game_trends.G_FUNDS = hex2dec('4a5ba3d0')
       game_trends.G_INCOME = hex2dec('6a51178b')
       game_trends.G_EXPENSES = hex2dec('ca5ba3fb')

    make_table_const(game_trends)

        
        --REWARD TRIGGERS
        tuning_constants.MAYOR_HOUSE_POP = 500
        tuning_constants.MAYOR_HOUSE_MR = 20
        tuning_constants.BIGLIBRARY_POP  = 34000
        tuning_constants.BIGLIBRARY_MR = 37
        tuning_constants.BIGLIBRARY_NUM_LIBRARIES = 5
        tuning_constants.BIGLIBRARY_LIBRARY_GRADE = 85
        tuning_constants.RADIO_POP = 18000
        tuning_constants.RADIO_MR = 30
        tuning_constants.TOURISTTRAP_REGION_POP = 40000
        tuning_constants.TOURISTTRAP_NUM_CITIES_CONNECTED = 4
        tuning_constants.TOURISTTRIP_NUM_CITIES_REGION = 6
        tuning_constants.ARTMUSEUM_POP_RH_AND_RM = 12000
        tuning_constants.ARTMUSEUM_MR = 45
        tuning_constants.ARTMUSEUM_NUM_MUSEUMS = 4
        tuning_constants.ARTMUSEUM_MUSEUM_GRADE = 85
        tuning_constants.COURTHOUSE_POP = 40000
        tuning_constants.COURTHOUSE_MR = 33
        tuning_constants.UNIV_POP_RH_AND_RM = 15000
        tuning_constants.UNIV_MR = 42
        tuning_constants.UNIV_SCHOOL_GRADE = 95
        tuning_constants.OPERA_POP_RM_RH = 48000
        tuning_constants.OPERA_MR = 52
        tuning_constants.CITYHALL1_POP = 12500
        tuning_constants.CITYHALL_MR = 20
        tuning_constants.BOFB_POP = 39000
        tuning_constants.BOFB_MR = 30
        --tuning_constants.BOFB_H_AND_E_FUNDING_P = 103
        tuning_constants.MINORSTAD_POP = 22500
        tuning_constants.MINORSTAD_MR = 20
        tuning_constants.MINORSTAD_NUM_REC_PARK = 16
        tuning_constants.MAJORSTAD_POP = 85000
        tuning_constants.MAJORSTAD_MR = 30
        tuning_constants.FARMERSMKT_POP = 3000
        tuning_constants.FARMERSMKT_MR = 34
        tuning_constants.FARMERSMKT_IR_POP = 600
        tuning_constants.MEDRESCENTER_POP = 56000
        tuning_constants.MEDRESCENTER_MR = 45
        tuning_constants.MEDRESCENTER_NUM_HOSP = 3
        tuning_constants.COUNTRYCLUB_RH_POP = 2000
        tuning_constants.COUNTRYCLUB_MR = 55
        tuning_constants.TVSTUDIO_POP = 65000
        tuning_constants.TVSTUDIO_MR = 50
        tuning_constants.ADVRESCENTER_IHT_POP = 2000
        tuning_constants.ADVRESCENTER_MR = 54
        tuning_constants.STOCKXCHNG_CO_POP = 25000
        tuning_constants.STOCKXCHNG_MR = 45
        tuning_constants.CONVCENTER_C_POP = 25000
        tuning_constants.CONVCENTER_MR = 40
        tuning_constants.MOVIESTUDIO_POP = 110000
        tuning_constants.MOVIESTUDIO_MR = 52
        tuning_constants.ZOO_POP = 80000
        tuning_constants.ZOO_MR = 68
        tuning_constants.ZOO_NUM_PARKS = 25
        tuning_constants.STATEFAIR_IR_POP = 1200
        tuning_constants.STATEFAIR_POP = 3500
        tuning_constants.STATEFAIR_MR = 48
        tuning_constants.RESORT_RM_RH_REGION_POP = 50000
        tuning_constants.RESORT_NUM_CITIES_CONNECTED = 2
        tuning_constants.RESORT_NUM_CITIES_REGION = 4
        tuning_constants.RESORT_AIRPOLLUTION = 20
        tuning_constants.RESORT_MR = 52
        tuning_constants.SOLAR_RH_POP = 3000
        tuning_constants.SOLAR_MR = 55
        tuning_constants.NUKE_CITY_POP = 85000
        tuning_constants.NUKE_ENERGY_DEMAND = 25000
        tuning_constants.FUSION_IHT_POP = 4000
        tuning_constants.FUSION_ENERGY_DEMAND = 30000
        tuning_constants.MAYOR1_POP = 5000
        tuning_constants.MAYOR2_POP = 30000
        tuning_constants.MAYOR3_POP = 60000
        tuning_constants.MAYOR4_POP = 120000
        --EP1 Reward tuning contstants
         tuning_constants.SPACE_PORT_IHT_JOBS = 25000
        tuning_constants.CRUISE_PORT_C_JOBS = 15000
        tuning_constants.CRUISE_PORT_PARKS = 15
        tuning_constants.CRUISE_CITY_WATER_PCT = 35
        tuning_constants.DELUXE_POLICE_STATION_POP = 41000
        tuning_constants.DELUXE_FIRE_STATION_POP = 31000
        tuning_constants.GRAND_RAIL_STATION_POP = 172000
        tuning_constants.GRAND_RAIL_STATION_UTILIZATION = 4000
        tuning_constants.GRAND_RAIL_STATION_STATIONS = 2
        tuning_constants.LARGE_ELEM_SCHOOL_POP = 4000
        tuning_constants.LARGE_ELEM_SCHOOL_SCHOOLS = 12
        tuning_constants.LARGE_HIGH_SCHOOL_POP = 6000
        tuning_constants.LARGE_ELEM_SCHOOL_SCHOOLS = 8
        tuning_constants.LARGE_WATER_PUMP_CITY_CAPACITY = 40000
        tuning_constants.LARGE_WATER_PUMP_POP = 10000
        tuning_constants.MARINA_CITY_WATER_PCT = 20
        tuning_constants.MARINA_POP = 18000
        tuning_constants.MARINA_MR = 53

        -- the following values represent various cap values for unscaled (from 0-100) variables.
        tuning_constants.MAX_EQ = 200
        tuning_constants.MAX_HQ = 200
        tuning_constants.MAX_FLAMMABILITY = 256
        tuning_constants.MAX_POLICE_COVERAGE = 256
        tuning_constants.MAX_FIRE_COVERAGE = 256
        tuning_constants.MAX_CRIME = 256
        tuning_constants.MAX_AIR_POLLUTION = hex2dec("0x00000400") -- from the Utilities exemplar.
        tuning_constants.MAX_WATER_POLLUTION = hex2dec("0x00000400")  -- from the Utilities exemplar
        tuning_constants.MAX_GARBAGE_POLLUTION = hex2dec("0x00007d00")  -- from the Utilities exemplar
        -- all effectiveness, percent and chance values are supposed to be in range between 0-100
        tuning_constants.MAX_FREIGHT_TRIP_LENGTH = 256
       
    make_table_const(tuning_constants)

     

     

     special_buildings = {}  --landmarks and rewards
     --REWARDS     

       special_buildings.MajorLeagueStadium        = hex2dec('03280000')
       special_buildings.Country_Club         = hex2dec('03270000')
       special_buildings.OperaHouse            = hex2dec('032B0000')
       special_buildings.FarmerMarket        = hex2dec('032C0000')
       special_buildings.MayorStatue        = hex2dec('03210000')
       special_buildings.CourtHouse            = hex2dec('03220000')
       special_buildings.TouristTrap        = hex2dec('032D0000')
       special_buildings.AdvResearchCenter        = hex2dec('032F0000')
       special_buildings.BureauofBureaucracy    = hex2dec('03310000')
       special_buildings.StockExchange        = hex2dec('03320000')
       special_buildings.HouseofWorship        = hex2dec('031E0000')
       special_buildings.MayorHouse            = hex2dec('031F0000')
       special_buildings.CityHall1            = hex2dec('03C00000')
       special_buildings.CityHall2            = hex2dec('03C10000')
       special_buildings.CityHall3            = hex2dec('03C20000')
       special_buildings.RadioStation        = hex2dec('03330000')
       special_buildings.TV_Station            = hex2dec('03340000')
       special_buildings.StateFair            = hex2dec('03360000')
       special_buildings.Prison            = hex2dec('03380000')
       special_buildings.Zoo            = hex2dec('03390000')
       special_buildings.Casino            = hex2dec('033A0000')
       special_buildings.MajorArtMuseum        = hex2dec('033C0000')
       special_buildings.UnivAdmin             = hex2dec('033D0000')
       special_buildings.MovieStudio        = hex2dec('033E0000')
       special_buildings.CenterForDisease        = hex2dec('033F0000')
       special_buildings.ResortHotel        = hex2dec('03810000')
       special_buildings.ToxicWasteDunp        = hex2dec('03410000')
       special_buildings.MissleTestingRange        = hex2dec('03420000')
       special_buildings.ConventionCenter        = hex2dec('03430000')
       special_buildings.MinorLeagueStadium        = hex2dec('03440000')
       special_buildings.ArmyBase            = hex2dec('03460000')
       special_buildings.Cemetery            = hex2dec('03470000')

    --UnivHumanitiesHall                = hex2dec(03480000
    --UnivScienceHall                = hex2dec(03490000
    --UnivLibrary                    = hex2dec(034A0000
    --UnivStudentBldg                = hex2dec(034B0000
    --UnivBoilerFacilities                = hex2dec(034C0000

       special_buildings.PrivateSchool        = hex2dec('03180000')
       special_buildings.MayorStatue1        = hex2dec('03750000')
       special_buildings.MayorStatue2        = hex2dec('03740000')
       special_buildings.MayorStatue3        = hex2dec('03730000')
       special_buildings.PrivateSchool2        = hex2dec('03790000')
       special_buildings.PrivateSchool3        = hex2dec('037A0000')
       special_buildings.HouseofWorship1        = hex2dec('03760000')
       special_buildings.HouseofWorship2        = hex2dec('03770000')
       special_buildings.HouseofWorship3        = hex2dec('03780000')
       special_buildings.Cemetery1            = hex2dec('037B0000')
       special_buildings.Cemetery2            = hex2dec('037C0000')

       --LANDMARKS
       special_buildings.GreatPyramid        = hex2dec('04CB0000')
       special_buildings.TajMahal            = hex2dec('04CC0000')
       special_buildings.BigBen            = hex2dec('04CD0000')
       special_buildings.Basils            = hex2dec('04CE0000')
       special_buildings.BostonFaneuilHall        = hex2dec('04CF0000')
       special_buildings.JohnHancockCenter        = hex2dec('04D00000')
       special_buildings.Sphynx            = hex2dec('04D10000')
       special_buildings.Hollywoodsign        = hex2dec('04D20000')
       special_buildings.ChryslerBuilding        = hex2dec('04D30000')
       special_buildings.EmpireStateBuilding    = hex2dec('04D40000')
       special_buildings.Guggenhiem            = hex2dec('04D50000')
       special_buildings.StatueofLiberty        = hex2dec('04D60000')
       special_buildings.IndependenceHall        = hex2dec('04D70000')
       special_buildings.SmithTower            = hex2dec('04D80000')
       special_buildings.GatewayArch        = hex2dec('04D90000')
       special_buildings.Alamo            = hex2dec('04DA0000')
       special_buildings.CNtower            = hex2dec('04DB0000')
       special_buildings.CaliforniaPlaza        = hex2dec('04DC0000')
       special_buildings.JeffersonMemorial        = hex2dec('04DD0000')
       special_buildings.LincolnMemorial        = hex2dec('04DE0000')
       special_buildings.USCapitol            = hex2dec('04DF0000')
       special_buildings.WashingtonMonument        = hex2dec('04E00000')
       special_buildings.WhiteHouse            = hex2dec('04E10000')
       special_buildings.PalaceofFineArts        = hex2dec('10020000')
       special_buildings.BankofAmericaTower        = hex2dec('10030000')
       special_buildings.Fernsehturm        = hex2dec('04C60000')
       special_buildings.RotesRathaus        = hex2dec('04C70000')
       special_buildings.PalacioReal        = hex2dec('04C80000')
       special_buildings.HagiaSofia            = hex2dec('04C90000')
       special_buildings.TokyoTower            = hex2dec('04CA0000')
       
       special_buildings.ARC_TRIOMPHE         = hex2dec('04C10000')
       special_buildings.WORLD_CUP_FOOTBALL_STADIUM = hex2dec('04C20000')
       special_buildings.SEOUL_CITYHALL_SQUARE     = hex2dec('04C30000')
       special_buildings. BANK_OF_CHINA_TOWER     = hex2dec('04C40000')
       special_buildings. AMALIENBORG         = hex2dec('04BF0000')

       -- EP1 buildings
       special_buildings.DeluxePoliceStation    = hex2dec('03860000')
       special_buildings.SpacePort             = hex2dec('03840000')
       special_buildings.CruiseShipPier         = hex2dec('03BC0000')
       special_buildings.AerialFireFightingStrip    = hex2dec('038E0000')
       special_buildings.GrandRailRoadStation     = hex2dec('03980000')
       special_buildings.LargeElementarySchool     = hex2dec('03850000')
       special_buildings.LargeHighSchool         = hex2dec('03890000')
       special_buildings.LargeWaterPump         = hex2dec('03870000')
       special_buildings.Marina             = hex2dec('03970000')
       special_buildings.Area51             = hex2dec('03960000')
       special_buildings.Lighthouse         = hex2dec('03950000')
     
    make_table_const(special_buildings)

    :read:

    • Like 4
    • Thanks 3

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    7 minutes ago, catty-cb said:

    LUA Constants, no idea if its useful or not

    Posting a copy here is convenient for those who've not extracted if from SimCity_1.dat. I'm sure it was originally posted for peeps who weren't familiar with Reader back in the day.

    In the game data, it's ca63e2a3-4a5e8ef6-ffbf9ccf (T-G-I)

    • Like 4

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    13 minutes ago, CorinaMarie said:

    ...I'm sure it was originally posted for peeps who weren't familiar with Reader back in the day....

    Probably explains why I've also got this information as well

    Spoiler

    <?xml version="1.0" encoding="utf-8" ?>
    <?xml-stylesheet type="text/xsl" href="properties.xslt"?>
    <exemplars>
        <properties>
            <group name="Common">
                <property num="0x00000010" type="Uint32" lengthtype="fixed" length="1" value="0x00000000" name="Exemplar Type" desc="Used by property editors to group exemplars and filter properties"></property>
                <property num="0x00000011" type="Uint32" lengthtype="fixed" length="1" value="0x00000000" name="Exemplar Interface ID" desc="A GZGUID that identifies a class interface"></property>
                <property num="0x00000012" type="Uint32" lengthtype="fixed" length="1" value="0x00000000" name="Exemplar Class ID" desc="A GZCLSID that identifies a class implementation"></property>
                <property num="0x00000020" type="String" lengthtype="fixed" length="1" value="" name="Exemplar Name" desc="Identifies this exemplar in property editors"></property>
                <property num="0x00000021" type="Uint32" lengthtype="fixed" length="1" value="0x00000000" name="Exemplar ID" desc="Identifies this exemplar so that C++ code and other exemplars can refer to it"></property>
                <property num="0x6a871b82" type="Uint32" lengthtype="fixed" length="1" value="1" name="PluginPackID" desc="ID of the plugin pack to which the data belongs"></property>
                <property num="0x8a416a99" type="Uint32" lengthtype="fixed" length="3" value="0,0,0" name="User Visible Name Key" desc="Resource key of the name of what this exemplar represents"></property>
                <property num="0xcaa9ab92" type="Bool" lengthtype="fixed" length="1" value="true" name="Hover Query Only" desc="If present, the occupant will respond to hover queries but not to click-queries"></property>
                <property num="0x2c8f8746" type="Uint32" lengthtype="fixed" length="1" value="0x00000000" name="Exemplar Category" desc="Categorizes this exemplar; for debug and exemplar editors use only"></property>
            </group>
            <group name="Resource Keys">
                <property num="0x27812820" type="Uint32" lengthtype="fixed" length="3" value="0,0,0" name="Resource Key Type 0" desc="Specifies 1 model key for all Z/R"></property>
                <property num="0x27812821" type="Uint32" lengthtype="fixed" length="3" value="0,0,0" name="Resource Key Type 1" desc="Specifies 1 model key for each Z/R"></property>
                <property num="0x27812822" type="Uint32" lengthtype="fixed" length="20" value="0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" name="Resource Key Type 2" desc="A unique instance ID for each zoom and rotation."></property>
                <property num="0x27812823" type="Uint32" lengthtype="fixed" length="7" value="0,0,0,0,0,0,0" name="Resource Key Type 3" desc="A unique instance ID for each zoom"></property>
                <property num="0x27812824" type="Uint32" lengthtype="variable" length="8" value="0,0,0,0,0,0,0,0" name="Resource Key Type 4" desc="Multi-model, multi state (see tuning docs)"></property>
                <property num="0x27812825" type="Uint32" lengthtype="fixed" length="3" value="0,0,0" name="Resource Key Type 5" desc="Specifies 1 model key for each Z/R/state"></property>
                <property num="0x27812921" type="Uint32" lengthtype="fixed" length="3" value="0,0,0" name="Resource Key Type 1xm" desc="Specifies 1 model key for each Z/R"></property>
                <property num="0x27812922" type="Uint32" lengthtype="fixed" length="20" value="0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" name="Resource Key Type 2xm" desc="A unique instance ID for each zoom and rotation."></property>
                <property num="0x27812923" type="Uint32" lengthtype="fixed" length="7" value="0,0,0,0,0,0,0" name="Resource Key Type 3xm" desc="A unique instance ID for each zoom"></property>
                <property num="0x27812924" type="Uint32" lengthtype="variable" length="8" value="0,0,0,0,0,0,0,0" name="Resource Key Type 4xm" desc="Multi-model, multi state (see tuning docs)"></property>
                <property num="0x27812925" type="Uint32" lengthtype="fixed" length="3" value="0,0,0" name="Resource Key Type 5xm" desc="Specifies 1 model key for each Z/R/state"></property>
            </group>
            <group name="Weather Tuning">
                <property num="0xa7607d70" type="Sint32" lengthtype="fixed" length="1" value="1" name="mnWeeksForCompleteTemperatureSimulation" desc="mnWeeksForCompleteTemperatureSimulation"></property>
                <property num="0xa7607d71" type="Sint32" lengthtype="fixed" length="1" value="1" name="mnWeeksForCompleteMoistureSimulation" desc="mnWeeksForCompleteMoistureSimulation"></property>
                <property num="0xa7607d72" type="Sint32" lengthtype="fixed" length="1" value="1" name="mnSimulationSpreadWritingRadius" desc="mnSimulationSpreadWritingRadius"></property>
                <property num="0xa7607d73" type="Float32" lengthtype="fixed" length="1" value="65" name="mfYearlyAmbientTemperature" desc="mfYearlyAmbientTemperature"></property>
                <property num="0xa7607d74" type="Float32" lengthtype="fixed" length="1" value="0.5" name="mfYearlyAmbientTemperatureVariation" desc="mfYearlyAmbientTemperatureVariation"></property>
                <property num="0xa7607d75" type="Float32" lengthtype="fixed" length="1" value="0.5" name="mfYearlyAmbientTemperatureVariationFactor" desc="mfYearlyAmbientTemperatureVariationFactor"></property>
                <property num="0xa7607d76" type="Sint32" lengthtype="fixed" length="1" value="10" name="mnSeaModerationRadius" desc="mnSeaModerationRadius"></property>
                <property num="0xa7607d77" type="Float32" lengthtype="fixed" length="1" value="0.9" name="mfSeaModerationFactor" desc="mfSeaModerationFactor"></property>
                <property num="0xa7607d78" type="Float32" lengthtype="fixed" length="1" value="0.082" name="mfAltitudeTemperatureFactor" desc="mfAltitudeTemperatureFactor"></property>
                <property num="0xa7607d79" type="Float32" lengthtype="fixed" length="1" value="0.25" name="mfWindChillTemperatureFactor" desc="mfWindChillTemperatureFactor"></property>
                <property num="0xa7607d86" type="Float32" lengthtype="fixed" length="1" value="3" name="mfYearlyAmbientWindSpeed" desc="mfYearlyAmbientWindSpeed"></property>
                <property num="0xa7607d87" type="Float32" lengthtype="fixed" length="1" value="1" name="mfYearlyAmbientWindDirection[0]" desc="mfYearlyAmbientWindDirection[0]"></property>
                <property num="0xa7607d88" type="Float32" lengthtype="fixed" length="1" value="0" name="mfYearlyAmbientWindDirection[1]" desc="mfYearlyAmbientWindDirection[1]"></property>
                <property num="0xa7607d89" type="Float32" lengthtype="fixed" length="1" value="60" name="mfWindPerturbationRange" desc="Angular window for periodic variation of ambient wind direction (0-90 degrees)"></property>
                <property num="0xa7607d7a" type="Float32" lengthtype="fixed" length="1" value="0.5" name="mfYearlyAmbientMoisture" desc="mfYearlyAmbientMoisture"></property>
                <property num="0xa7607d7b" type="Float32" lengthtype="fixed" length="1" value="0.2" name="mfYearlyAmbientMoistureVariation" desc="mfYearlyAmbientMoistureVariation"></property>
                <property num="0xa7607d7c" type="Float32" lengthtype="fixed" length="1" value="0.2" name="mfYearlyAmbientMoistureVariationFactor" desc="mfYearlyAmbientMoistureVariationFactor"></property>
                <property num="0xa7607d7d" type="Float32" lengthtype="fixed" length="1" value="0.50" name="mfMoistureHillFactor" desc="Wind effect on hill moisture (H20 fractional units per m/s of perpendicular wind penetration)"></property>
                <property num="0xa7607d7e" type="Float32" lengthtype="fixed" length="1" value="0.12" name="mfValleyMoistureBoost" desc="Moisture boost for areas detected as valleys (0-1)"></property>
                <property num="0xa7607d7f" type="Float32" lengthtype="fixed" length="1" value="4.0" name="mfMoistureValleySlopeThreshold" desc="Minimum concavity required to detect area as valley (linear height deviation in meters)"></property>
                <property num="0xa7607d80" type="Uint32" lengthtype="fixed" length="1" value="64" name="mMoistureVariationScale" desc="Amplitude of plasma-based noise in moisture map (map creation only)"></property>
                <property num="0xa7607d81" type="Uint32" lengthtype="fixed" length="1" value="15" name="mMoistureDitherScale" desc="Amplitude of high-freq. dithering noise in moisture map (map creation only)"></property>
            </group>
            <group name="Fog Effects Tuning">
                <property num="0x09b00b2b" type="Float32" lengthtype="fixed" length="1" value="30000.0" name="Particle Life" desc="Total lifetime of fog particle (ms)"></property>
                <property num="0x09b00b2c" type="Float32" lengthtype="fixed" length="1" value="0.12" name="Wind Factor" desc="Wind power coefficient (v = wind * c)"></property>
                <property num="0x09b00b2d" type="Float32" lengthtype="fixed" length="1" value="0.30" name="Terrain Factor" desc="Terrain gradient coefficient (effect of hills)"></property>
                <property num="0x09b00b2e" type="Float32" lengthtype="fixed" length="1" value="13.3" name="Max Particle Rate" desc="Max fog creation rate (particles/sec)"></property>
                <property num="0x09b00b2f" type="Float32" lengthtype="fixed" length="1" value="57.0" name="Particle FOV" desc="Angular window centered around anti-wind direction in which fog appears (degrees)"></property>
                <property num="0x09b00b30" type="Float32" lengthtype="fixed" length="1" value="50.0" name="Float Altitude" desc="Floating distance of fog above terrain"></property>
                <property num="0x09b00b31" type="Float32" lengthtype="fixed" length="1" value="128.0" name="Max Opacity" desc="Maximum alpha value for particles (0-255)"></property>
                <property num="0x09b00b32" type="Float32" lengthtype="fixed" length="1" value="5000.0" name="Fade-in Time" desc="Initial portion of particle life for fade-in (ms)"></property>
                <property num="0x09b00b33" type="Float32" lengthtype="fixed" length="1" value="5000.0" name="Fade-out Time" desc="Terminal portion of particle life for fade-out (ms)"></property>
                <property num="0x09b00b34" type="Uint32" lengthtype="fixed" length="1" value="200" name="Particle Count" desc="Maximum number of fog particles"></property>
                <property num="0x09b00b35" type="Float32" lengthtype="variable" length="2" value="0.0,1.0" name="Fog Rate by Hour" desc="Fraction (0-1) of maximum particle rate by hour of the clock"></property>
            </group>
            <group name="Cloud Effects Tuning">
                <property num="0x66fbf7a9" type="Float32" lengthtype="fixed" length="1" value="500.0" name="MtnCloudsHeight" desc="Height that clouds float at"></property>
                <property num="0x66fbf7aa" type="Float32" lengthtype="fixed" length="1" value="200.0" name="MtnCloudsFormHeight" desc="Lowest terrain height that clouds form over"></property>
                <property num="0x66fbf7ab" type="Float32" lengthtype="fixed" length="1" value="250.0" name="MtnCloudsFadeInHeight" desc="Lowest terrain height that clouds have max opacity"></property>
                <property num="0x66fbf7ac" type="Float32" lengthtype="fixed" length="1" value="425.0" name="MtnCloudsFadeOutHeight" desc="Terrain height above which clouds begin to fade"></property>
                <property num="0x66fbf7ad" type="Float32" lengthtype="fixed" length="1" value="450.0" name="MtnCloudsDisperseHeight" desc="Terrain height above which clouds fade completely"></property>
                <property num="0x66fbf7ae" type="Float32" lengthtype="fixed" length="1" value="425.0" name="MtnCloudsSlowDownHeight" desc="Terrain height above which clouds begin to slow"></property>
                <property num="0x66fbf7af" type="Float32" lengthtype="fixed" length="1" value="445.0" name="MtnCloudsStopHeight" desc="Terrain height above which clouds stop completely"></property>
                <property num="0x66fbf7b0" type="Float32" lengthtype="fixed" length="2" value="80.0,200.0" name="MtnCloudsSizeRange" desc="Min and Max of cloud size variation (meters)"></property>
                <property num="0x66fbf7b1" type="Float32" lengthtype="fixed" length="2" value="0.8,1.0" name="MtnCloudsAspectRange" desc="Min and Max of cloud aspect ratio variation (0-1)"></property>
                <property num="0x66fbf7b2" type="Float32" lengthtype="fixed" length="2" value="0.7,0.9" name="MtnCloudsOpacityRange" desc="Min and Max of cloud opacity variation (0-1)"></property>
                <property num="0x66fbf7b3" type="Float32" lengthtype="fixed" length="2" value="0.9,1.0" name="MtnCloudsIntensityRange" desc="Min and Max of cloud intensity variation (0-1)"></property>
                <property num="0x66fbf7b4" type="Float32" lengthtype="fixed" length="2" value="0.015,0.025" name="MtnCloudsSpeedRange" desc="Min and Max of cloud speed variation (meters/msec)"></property>
                <property num="0x66fbf7b5" type="Float32" lengthtype="fixed" length="2" value="0.8,1.2" name="MtnCloudsShadeOffsetRange" desc="Min and Max scale factors for ShadeOffsetDir"></property>
                <property num="0x66fbf7b6" type="Float32" lengthtype="fixed" length="2" value="300.0,650.0" name="MtnCloudsCursorHideRange" desc="Min and Max radii in world units where clouds are hidden by cursor."></property>
                <property num="0x66fbf7b8" type="Float32" lengthtype="fixed" length="1" value="0.35" name="MtnCloudsShadeIntensity" desc="brightness of shadow quad as % of highlight (0-1)"></property>
                <property num="0x66fbf7ba" type="Float32" lengthtype="fixed" length="4" value="1,1,1,1" name="MtnCloudsSimSpeedFactor" desc="Multiplier for cloud speed based on sim speed. Slow Med Fast Paused"></property>
                <property num="0x66fbf7bb" type="Float32" lengthtype="fixed" length="2" value="0.25,-0.125" name="MtnCloudsShadeOffsetDir" desc="X and Y(Z) offset of shade quad as a ratio of particle size (0-1)"></property>
                <property num="0x66fbf7bc" type="Uint32" lengthtype="fixed" length="1" value="1" name="MtnCloudsMaxParticles" desc="Max # of cloud particles that can exist at once"></property>
                <property num="0x66fbf7bd" type="Float32" lengthtype="fixed" length="1" value="1500.0" name="MtnCloudsMinFadeInTime" desc="Min time for particles to fade in when they spawn visible, or to fade out when they die due to age. (Milliseconds)"></property>
                <property num="0x66fbf7be" type="Float32" lengthtype="fixed" length="1" value="45000.0" name="MtnCloudsParticleMaxAge" desc="Max particle lifetime (Milliseconds)"></property>
                <property num="0x66fbf7bf" type="Float32" lengthtype="fixed" length="1" value="45000.0" name="MtnCloudsParticleGenRate" desc="Particle spawning rate (Particles per second)"></property>
                <property num="0x66fbf7c0" type="Bool" lengthtype="fixed" length="1" value="true" name="MtnCloudsAllowHiddenParticles" desc="if true, particles are still simulated outside of regions where clouds are visible"></property>
                <property num="0x66fbf7c1" type="Float32" lengthtype="fixed" length="5" value="1,1,1,1,1" name="MtnCloudsZoomFade" desc="Percent of normal opacity by zoom level. Set to 0 to disable a particular zoom. Top is zoom 1 bottom is zoom 5"></property>
            </group>
            <group name="Neighbor Deal Tuning">
                <property num="0xca46931f" type="Float32" name="NDa_MinTermToSustainSellDealCost (months)" desc="Min term required for the neighbor to be able to sustain sell deal cost"></property>
                <property num="0xea46932c" type="Float32" name="NDb_MinDealAmountPower" desc="Min deal amount for power deal"></property>
                <property num="0xea46934f" type="Float32" name="NDd_MaxDealTerm (years)" desc="Max term a deal can be had before renewal."></property>
                <property num="0x6a469337" type="Float32" name="NDb_MinDealAmountWater" desc="Min deal amount for water deal"></property>
                <property num="0x6a469342" type="Float32" name="NDc_MinDealProfitFactor" desc="Min deal profit factor (1 + NDc_MinDealProfitFactor)"></property>
                <property num="0x8a46933d" type="Float32" name="NDb_MinDealAmountGarbage" desc="Min deal amount for garbage deal"></property>
                <property num="0xca469346" type="Float32" name="NDc_MaxDealProfitFactor" desc="Max deal profit factor (1 + NDc_MinDealProfitFactor)"></property>
                <property num="0xaa46934b" type="Float32" name="NDd_MinDealTerm (years)" desc="Min term a deal can be had before renewal."></property>
                <property num="0x0a469353" type="Float32" name="NDe_ProfitResponseCurve" desc="Maps supply-over-demand to profit factor"></property>
                <property num="0xea4ad2ff" type="Float32" name="NDa_MaxOverDemandFactorForBuyer" desc="buyer_demand * NDa_MaxOverDemandFactorForBuyer is the maximum amount the buyer can buy."></property>
                <property num="0xea4ae9ef" type="Float32" name="NDa_MinBudgetForBuyDeals" desc="Budget level below which new buy deals become prohibited."></property>
                <property num="0x6b588fad" type="Float32" name="NDd_SuspensionPeriod" desc="Defaulted deals get suspended for this number of days."></property>
                <property num="0x8b58c59e" type="Float32" name="NDd_UnsuspensionPeriod" desc="If after suspension period the deal's at default during this number of days it will get killed without being re-suspended."></property>
                <property num="0x4b61ffc9" type="Float32" name="NDe_MaxUnitCostForGarbageDealsRCurve" desc="Maps true simulation cost to synthetic cost value used by garbage deals."></property>
            </group>
            <group name="Background Loader Tuning">
                <property num="0x0b579c21" type="Uint32" name="MicroSecsPerTimeSlice" desc="uSecs of active time for background thread"></property>
                <property num="0x0b579c22" type="Uint32" name="SleepMicroSecsAfterTimeSlice" desc="uSecs of sleep time for background thread"></property>
                <property num="0x0b579c23" type="Uint32" name="ProcessCellsMaxTimeSliceMicroSecs" desc="uSec budget for processing cells in main thread"></property>
                <property num="0x0b579c24" type="Float32" name="mOperationQuantaForOccupiedCell" desc=""></property>
                <property num="0x0b579c25" type="Float32" name="mOperationQuantaForEmptyCell" desc=""></property>
                <property num="0x0b579c26" type="Float32" name="mOperationQuantaBeforeTimerCall" desc=""></property>
                <property num="0x0b579c27" type="Bool" name="DisableBackgroundLoader" desc="if true, background loader is disabled"></property>
                <property num="0x0b579c28" type="Uint32" name="MinLoadRadius" desc="Mininum extra radius to load (by zoom level)"></property>
                <property num="0x0b579c29" type="Float32" name="ExtraLoadRadiusPerMeg" desc="extra radius to load per free meg (by zoom level)"></property>
            </group>
            <group name="Lot Configuration">
                <property num="0x4a4a88f0" type="UInt8" name="LotConfigPropertyRoadRequirement" desc="The road corner requirements of the lot. Values: 0C = right corner, 09 = left corner, 08 = normal"/>
                <property num="0x88edc789" type="Uint8" name="LotConfigPropertyVersion" desc="Lot Config Property Version"></property>
                <property num="0x88edc790" type="Uint8" name="LotConfigPropertySize" desc="LotConfigPropertySize"></property>
                <property num="0x88edc791" type="Uint32" name="LotConfigPropertyFamily" desc="LotConfigPropertyFamily"></property>
                <property num="0x88edc792" type="Float32" name="LotConfigPropertyMaxSlopeBeforeLotFoundation" desc="The slope at which it switches to using a Lot foundation"></property>
                <property num="0x88edc793" type="Uint8" name="LotConfigPropertyZoneTypes" desc="LotConfigPropertyZoneTypes"></property>
                <property num="0x88edc794" type="Uint8" name="LotConfigPropertyZoneDensityTypes" desc="LotConfigPropertyZoneDensityTypes" />
                <property num="0x88edc795" type="Uint8" name="LotConfigPropertyWealthTypes" desc="LotConfigPropertyWealthTypes"></property>
                <property num="0x88edc796" type="Uint8" name="LotConfigPropertyPurposeTypes" desc="LotConfigPropertyPurposeTypes"></property>
                <property num="0x88edc797" type="Uint32" name="LotConfigPropertyFenceDefinition" desc="LotConfigPropertyFenceDefinition"></property>
                <property num="0x88edc798" type="Uint32" name="LotConfigPropertyRetainingWallTypes" desc="LotConfigPropertyRetainingWallTypes"></property>
                <property num1="0x88edc900" num2="0x88EDCDFF" type="Uint32" name="LotConfigPropertyLotObject" desc="LotConfigPropertyLotObject"></property>
                <property num="0x89136440" type="Uint8" name="LotConfigPropertyWaterCompatibility" desc="LotConfigPropertyWaterCompatibility"></property>
                <property num="0xe99b068c" type="Float32" name="LotConfigPropertyMaxSlopeAllowed" desc="The Max slope this lot will develop on"></property>
                <property num="0xe99b068d" type="Uint8" name="LotConfigPropertyDoConstruction" desc="If non-zero, buildings on the lot will construct, otherwise they will be fully constructed when plopped"></property>
                <property num="0x699b08a4" type="Float32" name="LotConfigPropertyMinSlopeAllowed" desc="The Min slope this lot will develop on"></property>
                <property num="0x27812837" type="Uint8" name="Growth Stage" desc="Similar to density, but with more granularity. The smallest (1) is the first to appear"></property>
            </group>
            <group name="Advice Properties">
                <property num="0xc918a80e" type="String" name="Advice Title Text" desc="An advice title text" />
                <property num="0x8918aa96" type="String" name="Advice Body Text" desc="An advice body text" />
                <property num="0xe918aba5" type="String" name="Advice Ticker Text" desc="An advice ticker text" />
                <property num="0xa918ac75" type="Bool" name="Is ticker clickable?" desc="Is the ticker line a hyper-link" />
            </group>
            <group name="Flora Tuning">
                <group name="Flora Occupant">
                    <property num="0x083dc35b" type="Float32" name="kSC4FloraParametersProperty" desc="kSC4FloraParametersProperty"></property>
                    <property num="0x083dc487" type="Float32" name="kSC4FloraPreferencesProperty" desc="kSC4FloraPreferencesProperty"></property>
                    <property num="0x083de16f" type="Uint32" name="kSC4FloraCursorProperty" desc="kSC4FloraCursorProperty"></property>
                    <property num="0xa8f149c5" type="Uint32" name="kSC4FloraFamilyProperty" desc="kSC4FloraFamilyProperty"></property>
                    <property num="0x2a0348ba" type="Uint32" name="Flora: Cluster type" desc="Flora type that results when combining this type and one of equal or lesser value."></property>
                    <property num="0x2a0348bb" type="Float32" name="Flora: Cluster max radius" desc="Maximum plane distance for this flora to cluster with others."></property>
                    <property num="0x2a0348bc" type="Float32" name="Flora: Cluster max height" desc="Maximum altitude differential for this flora to cluster with others."></property>
                    <property num="0xea346888" type="Bool" name="kPropertyID_WaterFlora" desc="If this property is present, then the given flora is a water flora and its elevation preference table entries are interpreted as depth below sea level instead of altitude above sea level"></property>
                    <property num="0x6a37ebb6" type="Bool" name="Flora: Wild" desc="Controls whether the flora appears in landscape mode (wild) or mayor mode (domestic)."></property>
                </group>
                <property num="0x8761abd0" type="Uint32" name="mnMonthsBetweenCellCoverage" desc="mnMonthsBetweenCellCoverage"></property>
                <property num="0x085489c7" type="Uint32" name="mnRandomSeedingCellsPerMonth" desc="mnRandomSeedingCellsPerMonth"></property>
                <property num="0xc9dbdd00" type="Float32" name="Flora: burnt sweep interval" desc="Days between sweeps for burnt stumps (may be fractional)"></property>
                <property num="0xc9dbdd01" type="Float32" name="Flora: burnt sweep size" desc="Maximum number of burnt stumps removed per sweep (may be fractional)"></property>
                <property num="0xc9dbdd02" type="Float32" name="Flora: elevation scale range" desc="Meters from sea level over which to distribute the 16 elevation rows"></property>
            </group>
            <group name="Prop">
                <property num="0xe82b68eb" type="Uint32" name="PropType" desc="If assigned to an occupant, this property denotes it as a prop. Must use a valid prop ID as a property value. See SC4PropOccupant.h"></property>
                <property num="0x49a1e05a" type="Uint32" name="Requester Satisfaction" desc="What prop requester this prop satisfies."></property>
                <property num="0xe9a316eb" type="Uint8" name="Prop Wealth" desc="What wealth level this prop will appear at"></property>
                <property num="0x49c9c93c" type="Uint8" name="Nighttime State Change" desc="How this prop reacts to night"></property>
                <property num="0xc98204b8" type="String" name="Visual effect name" desc="If present, indicates an effect by string name. If not present, then 'kExemplarPropertyID_ExemplarName' is used."></property>
                <property num="0xa977a86b" type="Uint32" name="Prop occupant class ID" desc="Uint32: The class ID of the prop occupant to create. If not present, then 'kGZCLSID_cSC4PropOccupant' is used."></property>
                <property num="0x09f00e59" type="Bool" name="Ignore lot state effects" desc="If set to true, specifies that the prop should ignore lot state effects (distressed, abandoned, etc.)."></property>
                <property num="0xe9f0fa86" type="Bool" name="Self-illuminated" desc="If set to true, specifies that the prop should be treated as self-lit"></property>
                <property num="0x4a149631" type="Float32" name="Prop Time of Day" desc="Range of hours on 24-hour clock (0-23) when prop will be at state 0 (visible).  If start and end times are both 0, always visible."></property>
                <property num="0x6a3fcc37" type="Uint32" name="Global Effect Trigger" desc="Trigger ID for script-defined global effect that turns this prop on (state 0) and off (state 1)."></property>
                <property num="0x6a5e0727" type="Uint8" name="Active Lot State" desc="What lot state this prop is active in.  Don't add the property if the prop is active in all lot states."></property>
                <property num="0x8a5e5db8" type="Bool" name="Is Ground Model" desc="Present if this prop is a ground-based model suitable for demolish fx, shadows, and collision avoidance"></property>
                <property num="0x4a70d491" type="Bool" name="States as Frames" desc="Add this property only if prop states are visually depicted by different frames in an animated model instance"></property>
                <property num="0xca7515cc" type="Uint8" name="Simulator Date Start" desc="Simulator MONTH (1-12) and DAY (1-31) to start this prop's date interval"></property>
                <property num="0x0a751675" type="Uint32" name="Simulator Date Interval" desc="How often this prop becomes active, in days."></property>
                <property num="0x4a751ad5" type="Uint8" name="Prop Random Chance" desc="Random chance (0-100) of this prop appearing according to time-of-day and simulator date"></property>
                <property num="0x4a764564" type="Uint32" name="Simulator Date Duration" desc="How long in simulator days the prop will stay active once triggered"></property>
                <property num="0x2a89b677" type="Bool" name="Prop Destroys Lot" desc="Whether or not prop destroys entire lot when it burns down.  Default is true for flammable props."></property>
                <property num="0x4a89fcf3" type="Bool" name="Previewable" desc="If set to true, the prop will appear in the building plop preview"></property>
                <property num="0x6a95e503" type="Bool" name="Query as main building" desc="If set to true, when the prop is hover queried it will highlight both itself and the main building (and give the same hover data)"></property>
                <property num="0x6a959e71" type="Bool" name="Requires Power to Appear" desc="Prop only appears if lot is powered"></property>
                <property num="0x69f14d33" type="Bool" name="Orient To Slope" desc="Prop rotates x/z to match slope"></property>
                <property num="0x4a9f188b" type="Bool" name="Light" desc="Set if prop has a light mask and should light up at night with the lot building."></property>
                <property num="0x6a9edd07" type="Uint8" name="Animated Prop Play Mode" desc="Whether animated props should be looped, ping-pong, or one-shot. If not present, the default is Loop."></property>
                <property num="0x8aa864d5" type="Uint32" name="Crime Incident ID" desc="Which crime simulator incident this prop represents, or 0 if it's a generic crime prop."></property>
                <property num="0xabb90e58" type="Uint8" name="Helipad Type" desc="Indicate what kind of helicopter should appear on this helipad"></property>
                <property num="0x0bfa15a5" type="Uint8" name="Airplane Hanger Type" desc="Indicate what kind of airplane should appear at this point"></property>
                <property num="0x8bfb1072" type="Uint8" name="Runway End Number" desc="Indicate the location of the end of a runway. Must come in pairs."></property>
                <group name="OBSOLETE">
                    <property num="0x699b327e" type="Float32" name="GarbageFilterResponse" desc="(Deprecated) Response for GarbageFilter" />
                    <property num="0xe999cc32" type="Float32" name="WealthFilterResponse" desc="(Deprecated) Response for WealthFilter" />
                    <property num="0xe99af514" type="Float32" name="CrimeFilterResponse" desc="(Deprecated) Response for CrimeFilter" />
                    <property num="0xc82b6cb7" type="Float32" name="PropPlacement" desc="Intended to control Z/R-dependent prop placement. Not implemented yet." />
                    <property num="0x6a91b499" type="Bool" name="Removable Stoplight Prop" desc="This is an intersection stoplight prop that can be removed by the engine if necessary." />
                </group>
            </group>
            <group name="Occupant">
                <property num="0x29244db5" type="Uint8" name="Flammability" desc="Flammability rating of this occupant"></property>
                <property num="0x49beda31" type="Uint8" name="MaxFireStage" desc="(0-5) highest fire stage this occupant can reach"></property>
                <property num="0xe9d117c3" type="Bool" name="Special case only" desc="If set, occupant is never chosen based on user action or normal simulation."></property>
                <property num="0x8a1c3e72" type="Sint64" name="Worth" desc="If e.g., the occupant gets destroyed by a disaster, this is the reported damage amount"></property>
                <property num="0xea5393ed" type="Bool" name="Requires power to animate" desc="Set this to true if the occupant requires power to animate"></property>
                <property num="0x8a5f88e3" type="Uint32" name="MinForPurposeFundingPercentageToAnimate" desc="(PurposeId, funding)The occupant needs to be funded by at least this much for the specified purpose, for it to animate"></property>
            </group>
            <group name="Catalog View">
                <property num="0x899afbad" type="String" name="Item Name" desc="The item name that will be visible to the player"></property>
                <property num="0x8a2602a9" type="String" name="Item Description" desc="Human-readable description of this item"></property>
                <property num="0x8a2602b8" type="Uint32" name="Item Icon" desc="Resource instance ID of Menu Icon for this item"></property>
                <property num="0x8a2602b9" type="Uint32" name="Item Order" desc="Controls position in menu"></property>
                <property num="0x8a2602ba" type="Uint32" name="Item Submenu" desc="If needed: which sub menu this item belongs to"></property>
                <property num="0x8a2602bb" type="Uint32" name="Item Button ID" desc="If needed: the button id this item corresponds to"></property>
                <property num="0x6ad54804" type="Sint32" name="Catalog Monthly Cost" desc="Value for displaying monthly cost in the catalog - not simulated"></property>
                <property num="0x8a94eee0" type="Float32" name="Catalog Monthly Cost (float)" desc="Float value for displaying monthly cost in the catalog - not simulated"></property>
                <property num="0x4aa60ebc" type="Uint32" name="Catalog Capacity" desc="Value for displaying capacity in the catalog - not simulated"></property>
                <property num="0xca416ab5" type="Uint32" name="Item Description Key" desc="Resource key of the string resource of the description"></property>
            </group>
            <group name="Building">
                <property num="0xaa230baf" type="Uint8" name="Industrial Building Type" desc="Which type of Industrial (Anchor/Out/Mech)"></property>
                <property num="0x499afa38" type="Uint8" name="Construction Time" desc="Construction time in Sim-days"></property>
                <property num="0x099afacd" type="Sint64" name="Bulldoze Cost" desc="Bulldoze cost to delete the building, in Simoleans(tm)"></property>
                <property num="0x49cac341" type="Sint64" name="Plop Cost" desc="Cost to plop this building, in Simoleans(tm)"></property>
                <property num="0x27812810" type="Float32" name="Occupant Size" desc="In meters: Width Height Depth"></property>
                <property num="0x27812832" type="Uint8" name="Wealth" desc="Wealth represented by the building"></property>
                <property num="0x27812833" type="Uint8" name="Purpose" desc="Function of building"></property>
                <property num="0x27812834" type="Uint32" name="Capacity Satisfied" desc="paired values-developer ID, and how much capacity this building offers to that developer"></property>
                <property num="0x27812836" type="Bool" name="Allow Joint Occupancy" desc="if true, different types can occupy the building simultaneously"></property>
                <property num="0x2781283f" type="Bool" name="Monopoly Piece" desc="If true, this building is for debug and tuning use only"></property>
                <property num="0x27812840" type="Uint32" name="Demand Satisfied" desc="paired values-demand ID, and how much plopping this building supplies the resource"></property>
                <property num="0x27812841" type="Uint32" name="Demand Created" desc="paired values-demand ID, and how much plopping this building increases the demand for the resource"></property>
                <property num="0x27812842" type="Float32" name="Demand Satisfied (float)" desc="IDs from Demand Satisfied are associated to these values instead of the Uint32 values"></property>
                <property num="0x27812843" type="Float32" name="Demand Created (float)" desc="IDs from Demand Created are associated to these values instead of the Uint32 values"></property>
                <property num="0x27812844" type="Bool" name="Demand Is Variable" desc="if true, the demand simulator ignores demand created and demand satisfied until instructed"></property>
                <property num="0x2781284f" type="Sint32" name="Landmark Effect" desc="magnitude, radius"></property>
                <property num="0x27812850" type="Sint32" name="Park Effect" desc="magnitude, radius"></property>
                <property num="0x27812851" type="Sint32" name="Pollution at center" desc="Pollution generated: air, water, garbage, radiation (at center of the area of effect)"></property>
                <property num="0x0abfc024" type="Uint32" name="AppearanceZoomsFlag" desc="Flag specifying the zooms in which the model should appear"></property>
                <property num="0xca5b9305" type="Sint32" name="Mayor Rating Effect" desc="Mayor rating effect: magnitude, radius"></property>
                <property num="0xca5b9306" type="Uint8" name="Crime Effect" desc="Crime effect: magnitude, radius. Doesn't increase overall crime, but can negate effects of police stations"></property>
                <property num="0xaa5832f3" type="Sint32" name="Pollution at outer edge of circle" desc="Pollution generated: air, water, garbage, radiation (at outer radius of area of effect)"></property>
                <property num="0x68ee9764" type="Float32" name="Pollution radii" desc="Radii for pollution generated: air, water, garbage, radiation"></property>
                <property num="0x27812852" type="Uint32" name="Power Generated" desc="Amount of power generated"></property>
                <property num="0x27812853" type="Uint32" name="Power Plant Type" desc="Type of power plant"></property>
                <property num="0x27812854" type="Uint32" name="Power Consumed" desc="Amount of power consumed"></property>
                <property num="0x6a43150f" type="Uint32" name="Hard Failure Type" desc="Explosion type at end of life"></property>
                <property num="0x09132de8" type="Sint64" name="Power pole monthly upkeep" desc="Cost of maintaining this power pole"></property>
                <property num="0xa9132ef9" type="Float32" name="Power line monthly upkeep" desc="Cost of maintaining each cell of wire connected to this power pole"></property>
                <property num="0xc8ebd131" type="Uint32" name="Water Treatment monthly capacity" desc="Amount of water treated per month"></property>
                <property num="0xa8ebcf0c" type="Uint32" name="Incinerator monthly capacity" desc="Amount of trash burned per month"></property>
                <property num="0x48ebd0b1" type="Uint32" name="Waste to energy monthly Capacity" desc="Amount of trash converted to energy per month"></property>
                <property num="0x88ed1059" type="Uint32" name="Recycling center percent reduction" desc="Percentage by which recycling center reduces trash"></property>
                <property num="0x68ed1736" type="Uint32" name="Recycling center population served" desc="Number of people that can be served by this recycling center"></property>
                <property num="0xc8ed2d84" type="Uint32" name="Water Consumed" desc="Amount of water consumed"></property>
                <property num="0x88ed3303" type="Uint32" name="Water Produced" desc="Amount of water produced"></property>
                <property num="0x48ee7a44" type="Uint32" name="Garbage Capacity" desc="Amount of garbage the building can store in a month"></property>
                <property num="0x48f23a7e" type="Uint8" name="Water Source" desc="Where this water producer gets its water"></property>
                <property num="0x27812870" type="Uint32" name="Building/prop Family" desc="The family that this building or prop is a member of"></property>
                <property num="0xe90e25a1" type="Uint8" name="Transit Switch Point" desc="Paired entries indicating this building allows a travelling Sim to switch between transit types"></property>
                <property num="0xe90e25a2" type="Float32" name="Transit Switch Entry Cost" desc="Step cost to enter this transit switch"></property>
                <property num="0xe90e25a3" type="Float32" name="Transit Switch Traffic Capacity" desc="Amount of traffic the switch can handle without increasing travel time"></property>
                <property num="0x0bfc0a4c" type="Float32" name="Transit Switch Fare" desc="Simoleon charge per traveller to enter the switch"></property>
                <property num="0x4bfc47b0" type="Bool" name="Transit Switch Capacity Effect" desc="If true, this building radiates capacity reduction like intersections"></property>
                <property num="0xe91a0b5f" type="Sint64" name="Building value" desc="Base value in simoleons of this building"></property>
                <property num="0xc910b4ce" type="Float32" name="Power plant energy conversion cost" desc="Cost to produce one unit of electricity, not including infrastructure maintenance"></property>
                <property num="0xea1cf220" type="Float32" name="Age degradation rate" desc="How fast this plant degrades over time"></property>
                <property num="0xea1cf221" type="Float32" name="Soft failure threshold" desc="Threshold at which soft failure occurs"></property>
                <property num="0xea1cf222" type="Float32" name="Hard failure threshold" desc="Threshold at which hard failure occurs"></property>
                <property num="0x0911e2e7" type="Float32" name="Age to maintenance cost multiplier response curve" desc="Converts the current age degradation of the plant to a multiplier for maintenance cost"></property>
                <property num="0x8a1e07ee" type="Float32" name="Age to output level response curve" desc="Converts the current age degradation of the plant to a multiplier for production level"></property>
                <property num="0xea1e3c53" type="Float32" name="Water building pumping cost" desc="Cost to produce one unit of water, not including infrastructure maintenance"></property>
                <property num="0xea260589" type="Uint32" name="Lot Resource Key" desc="For ploppable buildings: Resource instance ID of lot exemplar for this building"></property>
                <property num="0x6a19f6b5" type="Float32" name="Health effect radius" desc="Radius of generic health effect of this building"></property>
                <property num="0xaa19f6ea" type="Float32" name="Health effect strength" desc="Strength of generic health effect of this building (positive or negative)"></property>
                <property num="0xea2e078b" type="Uint32" name="City Exclusion Group" desc="For ploppable buildings: No more than one building within the specified group can be built in a single city."></property>
                <property num="0xea2e078c" type="Uint32" name="Regional Exclusion Group" desc="For ploppable buildings: No more than one building within the specified group can be built in a single region." />
                <property num="0xea3209f8" type="Bool" name="Conditional Building" desc="If true, building will appear ghosted in the menu until triggered by a script condition"></property>
                <property num="0xaa5c04c5" type="Float32" name="Radiation Spew Intensity" desc="Intensity of radiation spew when power plant blows up"></property>
                <property num="0xaa5c04c8" type="Float32" name="Radiation Spew Radius" desc="Radius of radiation spew when power plant blows up"></property>
                <property num="0x091b42a2" type="Float32" name="Hospital Coverage Radius" desc="Radius of this hospital's coverage, in meters"></property>
                <property num="0x69220415" type="Uint32" name="Hospital Patient Capacity" desc="Maximum number of patients served by this hospital"></property>
                <property num="0x2921a9cc" type="Float32" name="Hospital Population vs. Distance" desc="Maps distance from hospital to a % of population covered"></property>
                <property num="0xc9299659" type="Float32" name="Hospital HQ boost" desc="Inherent HQ boost of this hospital"></property>
                <property num="0xa92ae3bd" type="Float32" name="Hospital Effectiveness vs. Average Age" desc="Maps Average age of a tract to the % HQ boost the hospital gives the tract"></property>
                <property num="0xa92d9fcd" type="Float32" name="Hosptial Effectiveness vs. Wealth" desc="Maps wealth level to HQ boost %"></property>
                <property num="0x292d8f9b" type="Uint32" name="Hospital Type ID List" desc="Variable length list of type IDs for this hospital"></property>
                <property num="0x691b42b3" type="Float32" name="School Coverage Radius" desc="Radius of a school's coverage, in meters"></property>
                <property num="0x8922041b" type="Uint32" name="School Student Capacity" desc="Maximum number of students served by this school"></property>
                <property num="0xe921a936" type="Float32" name="School Population vs. Distance" desc="Maps distance from school to a % of population covered"></property>
                <property num="0xa92ae446" type="Float32" name="School EQ boost" desc="The EQ boost the school gives at it's origin"></property>
                <property num="0xc9299662" type="Float32" name="School Effectiveness vs. Average Age" desc="Maps Average age of a tract to the % EQ boost the school gives the tract"></property>
                <property num="0xc92d7ec0" type="Float32" name="School Effectiveness vs. Wealth" desc="Maps wealth level to EQ boost %"></property>
                <property num="0xa92d8e40" type="Uint32" name="School Type ID List" desc="Variable length list of type IDs for this school"></property>
                <property num="0x0bd86fd3" type="Uint8" name="Ferry Terminal Type" desc="Type of ferry terminal"></property>
                <property num="0x88fcd877" type="Uint32" name="Building foundation" desc="Foundation type ID for this building or lot. Absent for none."></property>
                <property num="0xe83a081d" type="Bool" name="kSC4BuildingModelRotationProperty" desc="If property is present (regardless of value), then the model can be rotated and contains 'full geometry'."></property>
                <property num="0xe9822d62" type="Bool" name="kSC4BuildingNoModelProperty" desc="If present, then there are no building-style models for this building and if there are any, they should be ignored."></property>
                <property num="0xea123cef" type="Uint32" name="kSC4BuildingModelClassProperty" desc="If present, specifies a GZCLSID (class id) for the model class to use. Otherwise, just use the default kGZCLSID_cS3DModelInstance."></property>
                <property num="0xea3209f9" type="Bool" name="No Shadows" desc="If true, building will not draw shadows"></property>
                <property num="0xe9aee3da" type="Uint32" name="Response vehicle type" desc="Group(s) of vehicle automata that will be created when this building is constructed or plopped."></property>
                <property num="0xe9aee3db" type="Uint8" name="Response vehicle count" desc="How many of each type (in Response Vehicle Type property) will be created when building is constructed or plopped."></property>
                <property num="0xe9aee3dc" type="Uint32" name="Response pedestrian type" desc="Group(s) of pedestrian automata that will be created when this building is constructed or plopped."></property>
                <property num="0xe9aee3dd" type="Uint8" name="Response pedestrian count" desc="How many of each type (in Response Pedestrian Type property) will be created when building is constructed or plopped."></property>
                <property num="0x29b55f73" type="Uint32" name="Field Lots" desc="A list of IDs of 1x1 lots that describe a field tile associated with this building (will choose 1 randomly)"></property>
                <property num="0x8a0b4103" type="Uint32" name="Freight Receiving Capacity" desc="Freight traffic that can arrive at this building"></property>
                <property num="0xc9b93a56" type="Uint32" name="SFX:Default Plop Sound" desc="GUID of sound played when building is plopped"></property>
                <property num="0xca19d7ca" type="Uint32" name="SFX:Ambience Good Sound" desc="GUID of sound played when building is around and in good working order"></property>
                <property num="0x0a4c13cb" type="Uint32" name="SFX:Ambience Decayed Sound" desc="GUID of sound played when building is around and damaged or decayed"></property>
                <property num="0x4a4c132e" type="Uint32" name="SFX:Activate Sound" desc="GUID of sound played when building goes online"></property>
                <property num="0x0a36afa2" type="Uint32" name="SFX:AlarmSoundId" desc="GUID of sound played when alarm goes off"></property>
                <property num="0x6a36afab" type="Float32" name="SFX:AlarmTime" desc="24hour times i.e. 15.5"></property>
                <property num="0x6a36afac" type="Uint32" name="SFX:Occupant Instance Sound" desc="GUID of sound played for the occupant. There will be one instance per occupant."></property>
                <property num="0x2a53be13" type="Uint32" name="SFX:Alarm Ambience Sound" desc="GUID of sound. Plays between alarm times."></property>
                <property num="0xaa1dd397" type="Uint32" name="SFX:Query Sound" desc="GUID of the sound to play when the occupant is clicked on with query tool"></property>
                <property num="0x0a902434" type="Uint32" name="SFX:Query Sound Abandoned" desc="GUID of the sound to play when the occupant is clicked on with query tool and is abandoned."></property>
                <property num="0xaa905ab9" type="Uint32" name="SFX:Query Sound decayed" desc="GUID of the sound to play when the occupant is clicked on with query tool and is decayed."></property>
                <property num="0xaa87817a" type="Uint32" name="SFX:Intersection Sound" desc="GUID of the sound to play when the occupant approaches an intersection"></property>
                <property num="0x0a93036f" type="Uint32" name="SFX:Demolition Sound" desc="GUID of the sound to play when an occupant is demolished"></property>
                <property num="0x6c044bb5" type="Uint32" name="SFX:ActiveSound" desc="GUID array of sounds to play (per zoom) when occupant is 'active'"></property>
                <property num="0xea54d283" type="Uint32" name="Budget Item: Department" desc="GUID(s) of department ID for this budget item"></property>
                <property num="0xea54d284" type="Uint32" name="Budget Item: Line" desc="GUID(s) of line item ID for this budget item"></property>
                <property num="0xea54d285" type="Uint32" name="Budget Item: Purpose" desc="GUID(s) of purpose ID for this budget item"></property>
                <property num="0xea54d286" type="Sint64" name="Budget Item: Cost" desc="Cost(s) in Simoleans for this budget item"></property>
                <property num="0x2a499f85" type="Uint32" name="Query exemplar GUID" desc="GUID for this building's Query exemplar"></property>
                <property num="0xaa5c23fa" type="Uint32" name="Landmark Homage Key" desc="Resource key of string to be displayed in the landmark's query dialog"></property>
                <property num="0x4a5f7c4b" type="Uint32" name="Desirability Effect IDs" desc="Growth Developer IDs to go with next property"></property>
                <property num="0x4a5f7315" type="Float32" name="Desirability Effect Values" desc="Radius in cells, Max effect, and min effect for each developer"></property>
                <property num="0xaa60e745" type="Float32" name="Goofy Stat Response Curve" desc="Response curve for the Goofy Stat field in query dialogs"></property>
                <property num="0xaa83558f" type="Uint8" name="Crane Hints" desc="What kind of crane to use"></property>
                <group name="OBSOLETE">
                    <property num="0x68e94a50" type="Sint32" name="(Obs) kSC4BuildingPropertyCrimeEffectCenterStrength" desc="Strength of the crime in the area near the building. This number is in some imaginary units." />
                    <property num="0x68e94a51" type="Sint32" name="(Obs) kSC4BuildingPropertyCrimeEffectExteriorStrength" desc="Strength of the police in the area at the radius of effect. This number is in some imaginary units." />
                    <property num="0x68e94a52" type="Float32" name="(Obs) kSC4BuildingPropertyCrimeEffectRadius" desc="A measurement of the radius, in meters, of the effect of this building." />
                    <property num="0x68e94a53" type="Float32" name="(Obs) kSC4BuildingPropertyCrimeEffectFactor" desc="A dynamic property which is normally 1.0, but can be roughly -2.0 to +2.0." />
                    <property num="0x2921e147" type="Sint64" name="(Obs)Mass Transit monthly upkeep" desc="Cost of maintaining this building to mass transit budget" />
                    <property num="0x27812830" type="Uint8" name="Obsolete! (Supported Zones)" desc="Specifies zones compatible with building" />
                    <property num="0x27812831" type="Uint8" name="Obsolete! (Density)" desc="Density of population represented by the building" />
                    <property num="0x27812835" type="Uint32" name="Capacity (secondary)" desc="paired values-developer ID, and how much capacity this building offers to that developer" />
                    <property num="0xc910b4cd" type="Sint64" name="(Obs)Utility building monthly upkeep" desc="Cost of maintaining this utility building" />
                    <property num="0x2a4174aa" type="Sint64" name="(Obs)Landmark Monthly Maintenance" desc="Cost of maintaining this to the landmark budget" />
                    <property num="0x499afb52" type="String" name="Style" desc="Building Art Style (Chi,Dal,NYC,etc...)" />
                    <property num="0xe918a73f" type="Sint64" name="(Obs)Hospital Staff Budget" desc="Cost of paying the staff for this hospital" />
                    <property num="0x2921f718" type="Sint64" name="(Obs)Hospital Ambulance Budget" desc="Cost of operating ambulances for this hospital" />
                    <property num="0xc921c9c7" type="Sint64" name="(Obs)School Staff Budget" desc="Cost of paying the staff for this school" />
                    <property num="0xa921c9d3" type="Sint64" name="(Obs)School Bus Budget" desc="Cost of operating buses for this hospital" />
                    <property num="0xc7e16a90" type="Bool" name="kSC4BuildingFoundationDisabledProperty" desc="If property is present (regardless of value), then no foundation is ever made for the building." />
                    <property num="0xc7e16a91" type="Bool" name="kSC4BuildingBuiltInFoundationProperty" desc="If property is present (regardless of value), then the building has a built-in foundation. If so, then the kSC4BuildingBaseAltitudeProperty should usually (always?) be present." />
                    <property num="0xc7e16a92" type="Float32" name="kSC4BuildingBaseAltitudeProperty" desc="If present, then the building's coordinate origin is above the base by this many units and you'll need to calculate bounding boxes a little differently. Usually found with kSC4BuildingBuiltInFoundationProperty." />
                    <property num="0x891b42ab" type="Float32" name="Hospital Effectiveness vs. Distance" desc="Maps % of coverage distance from a hospital to HQ boost %" />
                    <property num="0x491b42af" type="Float32" name="Hospital Population vs. Average Age" desc="Maps average age to a % of population covered" />
                    <property num="0x491b42b9" type="Float32" name="School Effectiveness vs. Distance" desc="Maps % of coverage distance from a school to EQ boost %" />
                    <property num="0xe91b42bd" type="Float32" name="School Population vs. Average Age" desc="Maps average age to a % of population covered" />
                    <property num="0x883a0724" type="Bool" name="kSC4BuildingNoOrientationProperty" desc="If property is present (regardless of value), then the building cannot be oriented (e.g. to face a road)." />
                </group>
            </group>
            <group name="Foundation">
                <property num="0x68fcff37" type="Uint32" name="kSC4FoundationPropertySideTextures" desc="Texture IDs for each zoom level. Mutally exclusive with building model properties."></property>
                <property num="0x68fcff38" type="Uint32" name="kSC4FoundationPropertyTopTextures" desc="Texture IDs for each zoom level. Mutally exclusive with building model properties."></property>
                <property num="0xc911eda0" type="Float32" name="kSC4FoundationPropertySideTextureSize" desc="Size of a texture in meters. Defaults to standard city cell size."></property>
                <property num="0xc911eda1" type="Float32" name="kSC4FoundationPropertyTopTextureSize" desc="Size of a texture in meters. Defaults to standard city cell size."></property>
                <property num="0x88fcc3e3" type="Float32" name="kSC4FoundationPropertyMaxHeight" desc="The height a foundation can lift an occupant (usually a building or lot)."></property>
            </group>
            <group name="Lot Retaining Wall">
                <property num="0x295961f2" type="Uint32" name="kSC4RetainingWallPropertyWallTextures" desc="Texture IDs for each zoom level."></property>
                <property num="0x295961f3" type="Float32" name="kSC4RetainingWallPropertyWallTextureSize" desc="Size of a texture in meters. Defaults to standard city cell size."></property>
            </group>
            <group name="RCI">
                <property num="0x47bb3f10" type="Sint32" name="Minimum Value" desc="Minimum active demand, use 0x80000000 for none"></property>
                <property num="0x47bb3f11" type="Sint32" name="Maximum Value" desc="Maximum active demand, use 0x7fffffff for none"></property>
                <property num="0x47bb3f20" type="Sint32" name="Initial Supply" desc="Initial supply of this resource, [min, max]"></property>
                <property num="0x47bb3f21" type="Sint32" name="Initial Demand" desc="Initial demand for this resource, [min, max]"></property>
                <property num="0x47bb3f30" type="Uint32" name="Drives" desc="Demands increased by this resource (demandID, percentage)"></property>
                <property num="0x47bb3f31" type="Uint32" name="Satisfies" desc="Resources created by this resource (demandID, percentage)"></property>
                <property num="0x47bb3f32" type="Uint32" name="Contributes" desc="Demands increased by this demand (demandID, percentage)"></property>
                <property num="0x47bb3f41" type="Uint32" name="Caps demand" desc="Demand IDs capped by this resource, based on % depleted"></property>
                <property num="0x47bb3f50" type="Uint32" name="Sums" desc="List of demand IDs summed by this one"></property>
                <property num="0x47bb3f60" type="Uint8" name="Region Use" desc="Which part of the regional index is added to the local index"></property>
                <group name="OBSOLETE">
                    <property num="0x47bb3f40" type="Uint32" name="Limits growth" desc="Supply limited by this resource (demandID, percentage)" />
                </group>
            </group>
            <group name="Growth Developer">
                <group name="Landfill Developer">
                    <property num="0x4a280510" type="Float32" name="Landfill: Garbage Decay Rate" desc="The rate at which garbage decays in units per month"></property>
                    <property num="0x4a280513" type="Float32" name="Landfill: Level Tolerance Threshold" desc="The altitude variance of the landfill zone before levelling will take place"></property>
                    <property num="0x4a677e5b" type="Uint32" name="Landfill: Total Max Garbage Monthly" desc="The max total amount of garbage units taken in by landfills monthly"></property>
                    <property num="0x4a677e5c" type="Uint32" name="Landfill: Monthly Max Garbage per Landfill" desc="The max amount of garbage units taken in by each landfill monthly"></property>
                    <property num="0x4a677e5d" type="Bool" name="Landfill: Move Landfill Tiles with Terrain" desc="Flag indicating whether or not to move landfill tiles with terrain"></property>
                    <property num="0x4a677e5e" type="Uint32" name="Landfill: Monthly Max Garbage Decayed per Landfill" desc="The max amount of garbage units to decay in each landfill monthly"></property>
                    <property num="0x4a677e5f" type="Sint64" name="Landfill: Default Landfill Cell Maintenance Cost" desc="Monthly maintenance cost of a landfill cell (can be overridden by the model budghet cost property)"></property>
                    <property num="0x2aa00fe7" type="Sint64" name="Landfill: Cost for Altitude Change" desc="When zoning, the additional cost per cell for each meter of altitude changed"></property>
                </group>
                <group name="Port Developer">
                    <property num="0x8a270fc3" type="Uint32" name="Port Type Exemplar IDs" desc="List of instance IDs for exemplars containing the properties for each distinct airport/seaport type"></property>
                    <property num="0xca271780" type="Uint32" name="Num Growth Stages" desc="Number of growth stages (i.e. number of lots) for this particular airport type"></property>
                    <property num="0xca271781" type="Uint32" name="Lot stage template IDs" desc="List of template IDs for each growth stage"></property>
                    <property num="0xca271782" type="Float32" name="Obsolete! (Demand Thresholds List)" desc="List of demand thresholds for each growth stage. What this value refers to is zone type specific."></property>
                    <property num="0xca271783" type="Sint64" name="Budget Requirements List" desc="List of budget requirements for each growth stage - in Simoleans (tm)"></property>
                    <property num="0xca271784" type="Uint32" name="Trip Capacity List" desc="List of trip capacities for each growth stage for airport or seaport"></property>
                    <property num="0xca271785" type="Float32" name="Efficiency Distress Threshold" desc="Efficiency percentage under which the port lot distresses"></property>
                    <property num="0xca271786" type="Sint64" name="Stage Upgrade Cost" desc="List of costs in Simoleans (tm) associated with each growth stage"></property>
                    <property num="0xca271787" type="Uint8" name="Port Size" desc="Port Size identifier. 1=small, 2=medium, 3=large"></property>
                    <property num="0xca271788" type="Uint8" name="Port Width" desc="Width of the port lot (in North rotation)"></property>
                    <property num="0xca271789" type="Uint8" name="Port Height" desc="Height of the port lot (in North rotation)"></property>
                    <property num="0xca271800" type="Float32" name="Height Map" desc="Optional list of vertex altitude values corresponding to each cell in the lot for airport or seaport"></property>
                </group>
                <group name="Park Manager">
                    <property num="0xca480830" type="Float32" name="Efficiency Distress Threshold" desc="Efficiency value under which the lot begins to distress"></property>
                    <property num="0x4a6676ad" type="Float32" name="Zoo Escape Chance Curve" desc="Input: park efficiency (0-100)  Output: Chance of zoo escape each month (0-100)"></property>
                </group>
                <property num="0x87cd6300" type="Uint8" name="Target Zone" desc="The type of zone that is developed"></property>
                <property num="0x87cd6301" type="Uint32" name="Demand Source Index" desc="Demand comes from this index OR source zone"></property>
                <property num="0x87cd6310" type="Uint8" name="Tract Size" desc="Power of 2; determines the size of the demand grid"></property>
                <property num="0x87cd6330" type="Uint8" name="Wealth Type" desc="Specifies (source and target) wealth type"></property>
                <property num="0x87cd6332" type="Uint8" name="Purpose Type" desc="Specifies type of building created by this developer"></property>
                <property num="0x87cd6333" type="Uint8" name="Land Value Range" desc="Specifies acceptable land values (0, 0 disables)"></property>
                <property num="0x87cd633f" type="Bool" name="Land Value Use Intrinsic" desc="True means use total land value"></property>
                <property num="0x87cd6340" type="Float32" name="Land Value Effect" desc="How much land value is a factor in desirability"></property>
                <property num="0x87cd6341" type="Float32" name="Park Effect" desc="How much park proximity affects desirability"></property>
                <property num="0x87cd6343" type="Float32" name="R$ Proximity Effect" desc="How much proximity to R$ is a factor in desirability"></property>
                <property num="0x87cd6344" type="Float32" name="R$$ Proximity Effect" desc="How much proximity to R$$ is a factor in desirability"></property>
                <property num="0x87cd6345" type="Float32" name="R$$$ Proximity Effect" desc="How much proximity to R$$$ is a factor in desirability"></property>
                <property num="0x87cd6346" type="Float32" name="Traffic Effect" desc="How much traffic volume is a factor in desirability"></property>
                <property num="0x87cd6347" type="Float32" name="Trip Length Effect" desc="How much travel time is a factor in desirability"></property>
                <property num="0x87cd6348" type="Float32" name="School Effect" desc="How much school grade is a factor in desirability"></property>
                <property num="0x87cd6349" type="Float32" name="Hospital Effect" desc="How much hospital grade is a factor in desirability"></property>
                <property num="0x87cd634a" type="Float32" name="Crime Effect" desc="How much crime is a factor in desirability"></property>
                <property num="0x87cd634b" type="Float32" name="Pollution Effect Air" desc="How much air pollution proximity affects desirability"></property>
                <property num="0x87cd634c" type="Float32" name="Pollution Effect Water" desc="How much water pollution proximity affects desirability"></property>
                <property num="0x87cd634d" type="Float32" name="Pollution Effect Garbage" desc="How much garbage pollution proximity affects desirability"></property>
                <property num="0x87cd634e" type="Float32" name="Pollution Effect Radiation" desc="How much radiation pollution proximity affects desirability"></property>
                <property num="0x87cd6354" type="Sint32" name="Desirability Threshold Decline" desc="Tracts with desirability greater than this value never abandon."></property>
                <property num="0x87cd6355" type="Sint32" name="Desirability Threshold Growth" desc="Tracts with desirability less than this value never develop. Tested before pruning."></property>
                <property num="0x87cd6356" type="Bool" name="Phantom Demand" desc="If true, unhappy sims will create a demand for new growth, which results in migration"></property>
                <property num="0x87cd6357" type="Sint32" name="Baseline Desirability" desc="Value for desirability, if no other effects are applicable"></property>
                <property num="0x87cd6360" type="Uint8" name="Stage Count" desc="Number of growth stages"></property>
                <property num="0x87cd6361" type="Float32" name="Stage 1 vs. Size" desc="Percentage of growth which should be of type 1, as a function of the population of the city"></property>
                <property num="0x87cd6362" type="Float32" name="Stage 2 vs. Size" desc="Percentage of growth which should be of type 2, as a function of the population of the city"></property>
                <property num="0x87cd6363" type="Float32" name="Stage 3 vs. Size" desc="Percentage of growth which should be of type 3, as a function of the population of the city"></property>
                <property num="0x87cd6364" type="Float32" name="Stage 4 vs. Size" desc="Percentage of growth which should be of type 4, as a function of the population of the city"></property>
                <property num="0x87cd6365" type="Float32" name="Stage 5 vs. Size" desc="Percentage of growth which should be of type 5, as a function of the population of the city"></property>
                <property num="0x87cd6366" type="Float32" name="Stage 6 vs. Size" desc="Percentage of growth which should be of type 6, as a function of the population of the city"></property>
                <property num="0x87cd6367" type="Float32" name="Stage 7 vs. Size" desc="Percentage of growth which should be of type 7, as a function of the population of the city"></property>
                <property num="0x87cd6368" type="Float32" name="Stage 8 vs. Size" desc="Percentage of growth which should be of type 8, as a function of the population of the city"></property>
                <property num="0x87cd6370" type="Uint8" name="Water Supply Cap" desc="Maximum density allowed without water service"></property>
                <property num="0x87cd6371" type="Uint8" name="Fire Coverage Cap" desc="Maximum density allowed without fire protection"></property>
                <property num="0x87cd6372" type="Uint8" name="Park Cap" desc="Maximum density allowed without a nearby park"></property>
                <property num="0x87cd6373" type="Uint8" name="Power Supply Cap" desc="Maximum density allowed without power service"></property>
                <property num="0x87cd6381" type="Uint8" name="Use Monopoly Pieces" desc="Specifies building selection mode"></property>
                <property num="0x87cd6391" type="Float32" name="Co$$ Proximity Effect" desc="How much proximity to Co$$ is a factor in desirability"></property>
                <property num="0x87cd6392" type="Float32" name="Co$$$ Proximity Effect" desc="How much proximity to Co$$$ is a factor in desirability"></property>
                <property num="0x87cd6397" type="Float32" name="Transient Aura Effect" desc="How much transient aura effects (-128, 127) affect desirability"></property>
                <property num="0x87cd6398" type="Float32" name="Slope Effect" desc="How much slope is a factor in desirability"></property>
                <property num="0x87cd6399" type="Float32" name="Landmark Effect" desc="How much landmark proximity affects desirability"></property>
                <property num="0x87cd63a0" type="Uint32" name="Style Percentages" desc="Pairs of occupant group IDs and percentages showing how often they should be used"></property>
                <group name="OBSOLETE">
                    <property num="0x87cd6331" type="Uint8" name="Obsolete! (Density Type)" desc="Specifies density" />
                    <property num="0x87cd6342" type="Float32" name="Obsolete! (Pollution Effect)" desc="How much (air, water, garbage, radiation) pollution proximity affects desirability" />
                    <property num="0x87cd6380" type="Float32" name="Obsolete! (Abandonment Thresholds)" desc="Min occupancy rate [0,1]: low, medium, high density" />
                </group>
            </group>
            <group name="Simulator">
                <group name="Main Simulator">
                    <property num="0x89590e6d" type="Uint32" name="Simulator Speeds" desc="Milliseconds per day for slow, medium, fast"></property>
                    <property num="0x897e709f" type="Float32" name="24 Hour Clock speed (time magnification)" desc="Specifies a multiplier from real time to the 24 hour clock's time."></property>
                    <property num="0x09b73421" type="Uint32" name="k24HourClockNightBeginProperty" desc="Specifies the time (0-23) that night time graphically begins."></property>
                    <property num="0x09b73422" type="Uint32" name="k24HourClockNightEndProperty" desc="Specifies the time (0-23) that night time graphically ends."></property>
                    <property num="0x89590e6e" type="Float32" name="kAnimationTimeDilationProperty" desc="Time dilation factor to apply to animations based on sim speed (paused,slow,med,fast,emergency/drive)"></property>
                </group>
                <group name="Land Value Simulator">
                    <property num="0x47e2c300" type="Uint8" name="Land Value Intrinsic Min/Max" desc="Minimum &gt; 0, Maximum"></property>
                    <property num="0x47e2c301" type="Uint8" name="Land Value Wealth Boundaries" desc="Low/Medium boundary, Medium/High boundary"></property>
                    <property num="0x47e2c310" type="Uint8" name="Land Value Water Effect" desc="Effect of water on land value: size, radius"></property>
                    <property num="0x47e2c320" type="Float32" name="Land Value Altitude Effect" desc="Maps altitude to land value"></property>
                    <property num="0x47e2c330" type="Uint32" name="Land Value Desirability IDs" desc="Growth Developer IDs (see Effects)"></property>
                    <property num="0x47e2c331" type="Float32" name="Land Value Desirability Factors" desc="Size of effects (see IDs)"></property>
                    <property num="0x47e2c332" type="Float32" name="Land Value Desirability Curve" desc="Maps desirability to land value"></property>
                </group>
                <group name="Building Development Simulator">
                    <property num="0x47e2c380" type="Uint32" name="Construction Resources Min/Max" desc="Amount of capacity that can be under construction at any one time"></property>
                    <property num="0x47e2c381" type="Float32" name="Construction Resources per Resident" desc="Factor applied to population to calculate construction resources"></property>
                    <property num="0x47e2c382" type="Uint32" name="Construction Type Selection Bias" desc="Improves that chance that low-demand types will have opportunity to build"></property>
                    <property num="0x47e2c383" type="Float32" name="Stage Popluation Multiplier" desc="Values &gt;1 allow big stage buildings sooner. Indexed by difficulty level"></property>
                    <property num="0x47e2c400" type="Uint32" name="Lot Developer Stay New Time" desc="Number of days before a building can distress"></property>
                    <property num="0x47e2c401" type="Float32" name="Lot Developer Occupancy Thresholds" desc="When to abandon, distress, and renew. Values 0-1"></property>
                    <property num="0x47e2c500" type="Float32" name="Tract Developer Overbuild" desc="Factor applied to desired capacity when growing buildings in a tract"></property>
                    <property num="0x47e2c501" type="Float32" name="Tract Developer Reoccupy Thresholds" desc="Start and Stop percentage of desired capacity that can be fulfilled by abandoned buildings"></property>
                    <property num="0x47e2c502" type="Float32" name="Tract Developer Redevelop Size Threshold" desc="What percentage of the existing capacity must be demanded before we redevelop"></property>
                    <property num="0x47e2c510" type="Float32" name="Tract Developer Demolition Costs" desc="for occupied/abandoned buildings&quot;"></property>
                    <property num="0x47e2c511" type="Float32" name="Tract Developer New Lot Costs" desc="Fictional cost to aggregate a lot/subdivide a lot"></property>
                    <property num="0x47e2c530" type="Float32" name="Tract Developer Occupancy Variation" desc="Building occupancy rate +/- variation from tract rate"></property>
                    <property num="0x47e2c531" type="Float32" name="Tract Developer Min Vacancy Range" desc="When 100% full, subtract a little from the occupancy rate"></property>
                    <property num="0x47e2c540" type="Bool" name="Tract Developer Kick Out Lower Wealth" desc="If true, higher wealth buildings can replace non-empty lower wealth buildings"></property>
                    <property num="0x47e2c550" type="Uint32" name="Tract Developer Available Styles" desc="List of available (R and C) building styles"></property>
                    <property num="0x47e2c551" type="Sint32" name="Tract Developer Years Between Styles" desc="How often to change (R and C) building styles"></property>
                    <property num="0xe900ea24" type="Float32" name="kMaxCellAltitudeDeltaForFlatnessProperty" desc="kMaxCellAltitudeDeltaForFlatnessProperty"></property>
                    <property num="0xe900ea25" type="Float32" name="kMaxSlopeForFlatnessProperty" desc="kMaxSlopeForFlatnessProperty"></property>
                    <property num="0xe900ea26" type="Uint32" name="kDefaultLotFoundationTypeProperty" desc="kDefaultLotFoundationTypeProperty"></property>
                    <property num="0xe900ea27" type="Uint32" name="kShouldAttemptLotLevellingProperty" desc="kShouldAttemptLotLevellingProperty"></property>
                    <property num="0xe900ea28" type="Uint32" name="kShouldAttemptInternalLotLevellingProperty" desc="kShouldAttemptInternalLotLevellingProperty"></property>
                    <property num="0xe900ea29" type="Float32" name="kLotAutoLevelInternalAltitudeDeltaProperty" desc="kLotAutoLevelInternalAltitudeDeltaProperty"></property>
                    <property num="0xe900ea2a" type="Float32" name="MaxAreaSlopeAllowedForLevellingProperty" desc="MaxAreaSlopeAllowedForLevellingProperty"></property>
                    <property num="0xe900ea2b" type="Uint32" name="Lot Developer: Night Update Interval" desc="Update interval in milliseconds for toggling building lights."></property>
                    <property num="0xe900ea2c" type="Uint32" name="Lot Developer: Night Update Count" desc="Number of buildings to toggle lights on per update interval (integer)."></property>
                    <property num="0x2a2d7824" type="Float32" name="Lot Developer: Cost Multiplier vs lot slope" desc="Cost to plop a lot is building + area x this response curve"></property>
                    <property num="0x2ab845e7" type="Uint32" name="Lot Developer: Cost to Demolish Destroyed Tile" desc="Cost to demolish a tile on a lot that has been destroyed"></property>
                </group>
                <group name="Demand Simulator">
                    <property num="0x4a1f38b5" type="Float32" name="Demand: Neutral Tax Rate vs. Population" desc="What is the highest tax rate you can set before demand suffers?"></property>
                    <property num="0x4a1f38b6" type="Float32" name="Demand: Tax Modifier vs. Rate Variance" desc="How much is demand impacted by tax rates above or below neutral?"></property>
                    <property num="0x4a1f38b7" type="Uint32" name="Demand: Days of Tax Penalty" desc="How long a high tax rate depresses demand (even after it is lowered)"></property>
                    <property num="0x4a1f38c5" type="Float32" name="Demand: Commercical Cap Relief for Connections" desc="Relief for first connection (more have diminishing returns)"></property>
                    <property num="0x4a1f38c6" type="Float32" name="Demand: Commercical Cap Relief for Airports" desc="Relief per connected Co population"></property>
                    <property num="0x4a1f38c7" type="Float32" name="Demand: Commercical Cap Relief for Seaports" desc="Relief per industrial trip"></property>
                    <property num="0x4a1f38c8" type="Float32" name="Demand: Industrial Cap Relief for Trips" desc="Relief per neighbor trip"></property>
                    <property num="0x4a1f38c9" type="Float32" name="Demand: Industrial Cap Relief for Airports" desc="Relief per connected Co population"></property>
                    <property num="0x4a1f38ca" type="Float32" name="Demand: Industrial Cap Relief for Seaports" desc="Relief per industrial trip"></property>
                    <property num="0x8a63f2a1" type="Uint32" name="Average Salary for Demographic" desc="The average salary for each of the three wealth levels and four education levels (12 total)"></property>
                </group>
                <group name="National Economy Simulator">
                    <property num="0x4a1f629f" type="Uint32" name="Nation: Demand ID list" desc="List of IDs corresponding to Demand Modifiers"></property>
                    <property num="0x4a1f62a0" type="Float32" name="Nation: Default Demand Modifier vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a1" type="Float32" name="Nation: Demand Modifier 1 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a2" type="Float32" name="Nation: Demand Modifier 2 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a3" type="Float32" name="Nation: Demand Modifier 3 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a4" type="Float32" name="Nation: Demand Modifier 4 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a5" type="Float32" name="Nation: Demand Modifier 5 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a6" type="Float32" name="Nation: Demand Modifier 6 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a7" type="Float32" name="Nation: Demand Modifier 7 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a8" type="Float32" name="Nation: Demand Modifier 8 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62a9" type="Float32" name="Nation: Demand Modifier 9 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62b0" type="Float32" name="Nation: Demand Modifier 10 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62b1" type="Float32" name="Nation: Demand Modifier 11 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f62b2" type="Float32" name="Nation: Demand Modifier 12 vs. Month" desc="Demand boost over time"></property>
                    <property num="0x4a1f6300" type="Float32" name="Nation: Difficulty Demand Modifier" desc="Demand boost, indexed by difficulty"></property>
                </group>
                <group name="Utility Simulator">
                    <property num="0x6911e2df" type="Float32" name="Power Funding To Efficiency Curve" desc="Maps difference between actual % funding and % ideal funding to % of a utility output"></property>
                    <property num="0x0911e2e6" type="Float32" name="Utility Strike Response Curve" desc="Maps difference between actual % funding and % ideal funding to % chance of a utility strike"></property>
                    <property num="0x29121e8b" type="Float32" name="Power Min Acceptable Funding %" desc="Minimum acceptable percentage for Utility department funding"></property>
                    <property num="0x09122027" type="Float32" name="Utility Strike Efficiency %" desc="Efficiency of utility buildings will drop to this % during a strike"></property>
                    <property num="0x2912202e" type="Uint32" name="Utility Strike Duration" desc="Maximum duration of a Utility strike, in months"></property>
                    <property num="0x49122036" type="Float32" name="Utility Min Funding to End Strike" desc="Minimum funding percentage that must be restored to end a utility strike"></property>
                    <property num="0xe911e2d1" type="Float32" name="Power max allowed funding" desc="Maximum allowed funding percentage for utilities"></property>
                    <property num="0xa911e2f1" type="Uint32" name="Power radiation radius" desc="Number of cells surrounding buildings and zones that will also be powered"></property>
                    <property num="0xe911e2fc" type="Float32" name="Power plant max production ratio" desc="Maximum allowed percentage for power plant production"></property>
                    <property num="0x49134bd4" type="Uint32" name="Max garbage value for UI" desc="Maximum number of garbage units reported to the UI, must be less than 32767"></property>
                    <property num="0x49134bdd" type="Uint32" name="Max air pollution value for UI" desc="Maximum air pollution value reported to the UI, must be less than 32767"></property>
                    <property num="0x09134be2" type="Uint32" name="Max water pollution value for UI" desc="Maximum water pollution value reported to the UI, must be less than 32767"></property>
                    <property num="0x89135044" type="Uint32" name="Max radiation pollution value for UI" desc="Maximum radiaiton pollution value reported to the UI, must be less than 32767"></property>
                    <property num="0x0913519b" type="Uint32" name="Garbage Pollution Threshold" desc="When a cell has this much garbage, it's considered polluted"></property>
                    <property num="0xa91351a6" type="Uint32" name="Air Pollution Threshold" desc="When a cell has this much air pollution, it's considered polluted"></property>
                    <property num="0x091351ae" type="Uint32" name="Water Pollution Threshold" desc="When a cell has this much water pollution, it's considered polluted"></property>
                    <property num="0x291351b5" type="Uint32" name="Radiation Pollution Threshold" desc="When a cell has this much radiation, it's considered polluted"></property>
                    <property num="0x09135479" type="Uint32" name="Garbage decompostion amount" desc="Number of garbage units that decompose (i.e., disappear) each month"></property>
                    <property num="0x09135482" type="Float32" name="Garbage UI scaling factor" desc="Scaling factor to convert simulator garbage units to whatever units the UI displays (tons, Kgs)"></property>
                    <property num="0x68f5436a" type="Uint32" name="Water pipe effect radius" desc="Number of cells surrounding water pipes that will also be watered"></property>
                    <property num="0xaa161f81" type="Uint32" name="Max acceptable pumped water pollution level" desc="Water pumps will not function if water pollution higher than this level"></property>
                    <property num="0x68f5436b" type="Uint32" name="Fresh water pump reach" desc="Number of cells away from fresh water a water pump can be placed"></property>
                    <property num="0x68f5436c" type="Uint32" name="Salt water pump reach" desc="Number of cells away from salt water a water pump can be placed"></property>
                    <property num="0x68f5436d" type="Uint32" name="Fresh water distance loss" desc="Percentace by which water production is reduced when not within range of fresh water source"></property>
                    <property num="0x69501944" type="Float32" name="Traffic air pollution factor" desc="Affects how traffic density equates to air pollution"></property>
                    <property num="0x098b25c8" type="Uint32" name="Max cells between power poles" desc="The maximum number of cells allowed between power poles"></property>
                    <property num="0x098b27d0" type="Float32" name="Minimum power line height" desc="The minimum distance allowed between a power line and the terrain"></property>
                    <property num="0xe9a18d3f" type="Float32" name="Power line control max horiz. distance" desc="Max horizontal distance from the center of the line at which the control points are placed"></property>
                    <property num="0x49a1e8c4" type="Float32" name="Power line control horiz. %" desc="Percent of line length at which to place control points, horizontally"></property>
                    <property num="0x89a18fc4" type="Float32" name="Power line control max vertical distance" desc="Max vertical distance from the center of the line at which the control points are placed"></property>
                    <property num="0xe9a1e8d4" type="Float32" name="Power line control vertical %" desc="Percent of line length at which to place control points, vertically"></property>
                    <property num="0x49a195c0" type="Float32" name="Power line curve distance between points" desc="Distance between the points generated for power line curves"></property>
                    <property num="0x4a5f5953" type="Uint32" name="Power pole placement cost" desc="Cost to place a power pole using the power line tool"></property>
                    <property num="0x0a5f596b" type="Float32" name="Power line placement cost" desc="Cost of placing each cell of wire"></property>
                    <property num="0x89a1e8fb" type="Uint32" name="Minimum number of curve points" desc="Minimum number of points to generate on power line Bezier curve"></property>
                    <property num="0x69a437f6" type="Float32" name="Garbage Prop Request Curve" desc="Shares of garbage props requested vs. garbage percentage of max"></property>
                    <property num="0x0a10c772" type="Float32" name="Water Pollution Effect Strength Curve" desc="Water Pollution Average Level to Water Pollution Decal Alpha curve"></property>
                    <property num="0x0a10c773" type="Float32" name="Air Pollution Effect Strength Curve" desc="Air Pollution Average Level to Air Pollution Particle Emission Rage curve"></property>
                    <property num="0x0a10c774" type="Float32" name="Radiation Pollution Effect Strength Curve" desc="Radiation Pollution Average Level to Radiation Effect Strength curve"></property>
                    <property num="0x0a10c775" type="Float32" name="Garbage Pollution Effect Strength Curve" desc="Radiation Pollution Average Level to Radiation Effect Strength curve"></property>
                    <property num="0xe9ac43e7" type="Float32" name="Power line scaling factor" desc="Array of scaling factors for the width of the power lines, one per zoom level."></property>
                    <property num="0x0911e2e8" type="Float32" name="Funding percentage to decay rate multiplier response curve" desc="Multiples the rate of aging based on funding level"></property>
                    <property num="0x0911e2e9" type="Float32" name="Usage percentage to decay rate multiplier response curve" desc="Multiples the rate of aging based on usage level"></property>
                    <property num="0xaa1f8ab7" type="Float32" name="Garbage service cost per unit of garbage" desc="Cost per unit of garbage sent to landfill, incinerator or w2e"></property>
                    <property num="0x8a235c56" type="Float32" name="Pipe burst probability" desc="Likelihood per month that a distressed pipe will burst"></property>
                    <property num="0x0a2eced8" type="Float32" name="Power Pole Demolition Cost" desc="Cost to demolish a power pole. Lines are ignored"></property>
                    <property num="0x6a406201" type="Uint32" name="Air Pollution Delta" desc="Maximum amount of air pollution that can be added to/subtracted from each cell per month."></property>
                    <property num="0x8a40620b" type="Uint32" name="Water Pollution Delta" desc="Maximum amount of water pollution that can be added to/subtracted from each cell per month."></property>
                    <property num="0xea4025a9" type="Float32" name="Water Department Max Funding" desc="Max funding percentage for the water department"></property>
                    <property num="0x6a410bf2" type="Float32" name="Water Funding To Efficiency Curve" desc="Maps difference between actual % funding and % ideal funding to % of a utility output"></property>
                    <property num="0x4a652679" type="Uint32" name="Max Garbage on Valve" desc="Maximum amount of garbage units the valve can hold"></property>
                    <property num="0x4a65267a" type="Uint32" name="Landfill Tile Capacity" desc="Amount of garbage units each landfill tile can hold"></property>
                    <property num="0x8c19c3e9" type="Float32" name="Garbage Transport Versus Landfill Tiles" desc="How much garbage can be delivered to the landfill each month"></property>
                    <property num="0xaa713782" type="Float32" name="Funding percentage to power pole decay/repair" desc="Converts a funding level (percentage) into a decay rate (negative numbers) or repair rate (positive numbers)"></property>
                    <property num="0xca7138c4" type="Float32" name="Funding percentage to pipe decay/repair" desc="Converts a funding level (percentage) into a decay rate (negative numbers) or repair rate (positive numbers)"></property>
                    <property num="0x8a84778f" type="Float32" name="Monthly Cost Per Pipe" desc="Maintenance cost for each pipe occupant"></property>
                </group>
                <group name="Traffic Simulator">
                    <property num="0x491332e6" type="Float32" name="Traffic Volume Per Population" desc="Traffic volume generated per point of population in a building"></property>
                    <property num="0x491332e7" type="Float32" name="Max speed by Network for walking" desc="Speed to walk through rd, rl, hwy, st, x, x, ave, sub, lr, mo, ow, dr, gh"></property>
                    <property num="0x491332e8" type="Float32" name="Max speed by Network for driving" desc="Speed to drive through rd, rl, hwy, st, x, x, ave, sub, lr, mo, ow, dr, gh"></property>
                    <property num="0x491332e9" type="Float32" name="Max speed by Network for a bus" desc="Speed to bus travel through rd, rl, hwy, st, x, x, ave, sub, lr, mo, ow, dr, gh"></property>
                    <property num="0x491332ea" type="Float32" name="Max speed by Network for a train" desc="Speed to train travel through rd, rl, hwy, st, x, x, ave, sub, lr, mo, ow, dr, gh"></property>
                    <property num="0x491332eb" type="Float32" name="Max speed by Network for a truck" desc="Speed to truck travel through rd, rl, hwy, st, x, x, ave, sub, lr, mo, ow, dr, gh"></property>
                    <property num="0x491332ec" type="Float32" name="Max speed by Network for a frt train" desc="Speed to train travel through rd, rl, hwy, st, x, x, ave, sub, lr, mo, ow, dr, gh"></property>
                    <property num="0x491332ed" type="Float32" name="Max speed by Network for subways" desc="Speed to subway travel. Set the eighth value."></property>
                    <property num="0x491332ee" type="Float32" name="Max speed by Network for el train" desc="Speed to ride el train.  Set the eighth value."></property>
                    <property num="0x491332ef" type="Float32" name="Max speed by Network for monorail" desc="Speed to ride monorail.  Set the ninth value."></property>
                    <property num="0x29136788" type="Float32" name="Monthly Traffic Density Reduction" desc="Traffic density multiplied by this each month"></property>
                    <property num="0x6a84493e" type="Float32" name="Monthly cost for network tile" desc="Upkeep cost per tile of each network type (rd, rl, hwy, st, x, x, ave, sub, lr)"></property>
                    <property num="0xa92356ae" type="Float32" name="Max roads funding percent" desc="Maximum allowed funding percentage for roads"></property>
                    <property num="0xa92356af" type="Float32" name="Max mass transit funding percent" desc="Maximum allowed funding percentage for mass transit"></property>
                    <property num="0xa92356b0" type="Float32" name="Damaged road extra step cost" desc="Additional cost to travel on a damaged road tile"></property>
                    <property num="0xa92356b1" type="Float32" name="Income per tile by travel type" desc="Income gained for each tile: walk, car, bus, rail, freight truck, freight train, subway, lt rl"></property>
                    <property num="0xa92356b2" type="Uint8" name="Mass Transit Usage Chance" desc="Percent chance an RCI trip will allow use of mass transit"></property>
                    <property num="0xa92356b3" type="Float32" name="Network Traffic Capacity" desc="Level at which traffic volume becomes uncomfortable to sims (rd, rl, hwy, st, x, x, ave, sub, lr)"></property>
                    <property num="0xa92356b4" type="Bool" name="Travel type generates traffic" desc="Order: walk, car, bus, train, subway, lt rl"></property>
                    <property num="0xa92356b5" type="Bool" name="Travel type can reach destination" desc="Order: walk, car, bus, train, subway, lt rl"></property>
                    <property num="0xa92356b8" type="Uint32" name="Maximum distance from origin to network" desc="How far a trip can jump from its starting zone to a road/rail/etc"></property>
                    <property num="0xa92356b9" type="Float32" name="Congestion vs Speed" desc="Maps speed multiplier as a function of congestion"></property>
                    <property num="0xa92356ba" type="Float32" name="Commute trip max time" desc="Maximum time for a commute trip in minutes"></property>
                    <property num="0xa92356bb" type="Float32" name="Intersection and Turn Capacity Effect" desc="Diminishing effect of an intersection or turn on capacity"></property>
                    <property num="0xa92356bc" type="Float32" name="Trip Starting Cost by travel type" desc="Starting overhead cost in time for each travel type"></property>
                    <property num="0xa92356bd" type="Float32" name="Job Scaling Constant" desc="Multiplies building capacity to determine number of jobs there"></property>
                    <property num="0xa92356be" type="Float32" name="Population Background Traffic" desc="Amount of background (non-trip) traffic volume generated per population point for R, C, and I zones"></property>
                    <property num="0xa92356bf" type="Bool" name="Travel type affected by traffic" desc="Order: walk, car, bus, train, freight truck, freight train, subway, lt rl"></property>
                    <property num="0xea8c3cdb" type="Float32" name="Trip Starting Cost by travel type for Mass Transit" desc="Starting overhead cost in time for each travel type for mass transit preferred trips"></property>
                    <property num="0xcad64136" type="Float32" name="Trip Starting Cost by travel type for Car Pref" desc="Starting overhead cost in time for each travel type for car preferred trips"></property>
                    <property num="0x4953e8a3" type="Uint8" name="Travel strategy percent WealthNone" desc="Odds of selecting each travel strategy"></property>
                    <property num="0x4953e8a4" type="Uint8" name="Travel strategy percent Wealth$" desc="Odds of selecting each travel strategy"></property>
                    <property num="0x4953e8a5" type="Uint8" name="Travel strategy percent Wealth$$" desc="Odds of selecting each travel strategy"></property>
                    <property num="0x4953e8a6" type="Uint8" name="Travel strategy percent Wealth$$$" desc="Odds of selecting each travel strategy"></property>
                    <property num="0x49a2e8be" type="Float32" name="Freight traffic scaling factor" desc="Percentage of industrial bldg. population that will generate freight trips"></property>
                    <property num="0xca5f7821" type="Float32" name="Transit Switch Entry Cost vs. Budget" desc="Maps the budget percent (0-100) to a multiplier on the time cost of using a transit switch"></property>
                    <property num="0x4a678060" type="Float32" name="Nearest Destination Attractiveness" desc="Lower scores means more side explorations but also more CPU time (Pathfinding Heuristic)"></property>
                    <property num="0xca76013b" type="Float32" name="Trip Length to Minutes Display Multiplier" desc="Multiply the trip length map values (0-255, 255 = Max Commute Time) by this value to get a time in minutes for display purposes"></property>
                    <property num="0xea7b5f06" type="Float32" name="Max Mass Transit Strategy Trip Length" desc="Max time in raw trip length that the mass transit preferred strategy will go using mass transit"></property>
                    <property num="0x8c3caef5" type="Float32" name="Ferry Fare" desc="Income per traveller from a ferry trip"></property>
                    <property num="0x4be09ec9" type="Float32" name="Congestion to Accident Probability" desc="Maps congestion to accident probablity"></property>
                    <property num="0x4be09eca" type="Float32" name="Capacity to Accident Probability" desc="Maps capacity to accident probablity"></property>
                    <property num="0x4be09ecb" type="Float32" name="Accident Duration" desc="Time (in seconds) that a traffic accident lasts"></property>
                    <property num="0x4be09ecc" type="Float32" name="Accident Check Period" desc="Period (in seconds) that the traffic sim tests for accidents"></property>
                    <property num="0x0bd86fd4" type="Float32" name="Funding to Damage Acceleration Curve" desc="Maps funding (as percentage) to road/rail damage acceleration"></property>
                    <property num="0x0bd86fd5" type="Float32" name="Rail Damage Accident Factor" desc="Probability (0 to 1.0) that a train going over a rail pothole will cause derailment"></property>
                </group>
                <group name="Residential Simulator">
                    <property num="0x2918949e" type="Float32" name="Health Funding To Efficiency Curve" desc="Maps difference between actual % funding and % ideal funding to % of Health output"></property>
                    <property num="0x691894a4" type="Float32" name="Health Strike Response Curve" desc="Maps difference between actual % funding and % ideal funding to % chance of a Health strike"></property>
                    <property num="0x0a53b2f9" type="Float32" name="Health Funding to Coverage Curve" desc="Maps difference between actual % funding and % ideal funding to % coverage"></property>
                    <property num="0xe918946f" type="Float32" name="(OBS) Health Min Acceptable Funding %" desc="Minimum acceptable percentage for Health department funding"></property>
                    <property num="0xa9189479" type="Float32" name="Health Init/Max Allowed Funding" desc="Initial and Maximum allowed funding percentage for health department"></property>
                    <property num="0x89189482" type="Float32" name="Health Strike Efficiency %" desc="Efficiency of Health buildings will drop to this % during a strike"></property>
                    <property num="0x8918948b" type="Uint32" name="Health Strike Duration" desc="Maximum duration of a Health strike, in months"></property>
                    <property num="0x89189495" type="Float32" name="Health Min Grade to End Strike" desc="Minimum grade that all health buildings must have to end a Health strike"></property>
                    <property num="0x691894c6" type="Float32" name="School Funding To Efficiency Curve" desc="Maps difference between actual % funding and % ideal funding to % of Education output"></property>
                    <property num="0xc91894cb" type="Float32" name="School Strike Response Curve" desc="Maps difference between actual % funding and % ideal funding to % chance of a School strike"></property>
                    <property num="0xea53b30f" type="Float32" name="School Funding to Coverage Curve" desc="Maps difference between actual % funding and % ideal funding to % coverage"></property>
                    <property num="0xc91894a8" type="Float32" name="(OBS) School Min Acceptable Funding %" desc="Minimum acceptable percentage for School department funding"></property>
                    <property num="0x891894ad" type="Float32" name="School Init/Max Allowed Funding" desc="Initial and Maximum allowed funding percentage for schools"></property>
                    <property num="0xa91894bc" type="Uint32" name="School Strike Duration" desc="Maximum duration of a School strike, in months"></property>
                    <property num="0xe91894b3" type="Float32" name="School Strike Efficiency %" desc="Efficiency of School buildings will drop to this % during a strike"></property>
                    <property num="0x691894c0" type="Float32" name="School Min Grade to End Strike" desc="Minimum grade that all schools must have to end a School strike"></property>
                    <property num="0xc929c433" type="Float32" name="EQ Decay" desc="Amount by which EQ decays each month"></property>
                    <property num="0x0929c439" type="Float32" name="HQ Decay" desc="Amount by which HQ decays each month"></property>
                    <property num="0xc929c652" type="Uint8" name="Low Wealth Average Age" desc="Average age assigned to new Low Wealth residents"></property>
                    <property num="0x0929cc30" type="Uint8" name="Medium Wealth Average Age" desc="Average age assigned to new Medium Wealth residents"></property>
                    <property num="0x0929cc36" type="Uint8" name="High Wealth Average Age" desc="Average age assigned to new High Wealth residents"></property>
                    <property num="0xc929cc58" type="Uint8" name="Low Wealth EQ" desc="EQ assigned to new Low Wealth residents"></property>
                    <property num="0x0929cc65" type="Uint8" name="Medium Wealth EQ" desc="EQ assigned to new Medium Wealth residents"></property>
                    <property num="0x2929cc6b" type="Uint8" name="High Wealth EQ" desc="EQ assigned to new High Wealth residents"></property>
                    <property num="0xc929cc8d" type="Uint8" name="Low Wealth HQ" desc="HQ assigned to new Low Wealth residents"></property>
                    <property num="0x6929cc92" type="Uint8" name="Medium Wealth HQ" desc="HQ assigned to new Medium Wealth residents"></property>
                    <property num="0x4929cc97" type="Uint8" name="High Wealth HQ" desc="HQ assigned to new High Wealth residents"></property>
                    <property num="0x6941a67f" type="Float32" name="Health Quotient to Life Expectancy Curve" desc="Maps HQ of a tract to the Life Expectancy of that tract"></property>
                    <property num="0x4941a92b" type="Float32" name="Life Expectancy to Workforce % Curve" desc="Maps Life Expectancy of a tract to the % of that tract that is in the workforce"></property>
                    <property num="0x6941b022" type="Float32" name="Air Pollution to HQ Decay Curve" desc="Maps amount of air pollution in a tract to the rate at which the HQ in that tract decays"></property>
                    <property num="0xa941b028" type="Float32" name="Water Pollution to HQ Decay Curve" desc="Maps amount of water pollution in a tract to the rate at which the HQ in that tract decays"></property>
                    <property num="0xc941b02e" type="Float32" name="Garbage Pollution to HQ Decay Curve" desc="Maps amount of garbage pollution in a tract to the rate at which the HQ in that tract decays"></property>
                    <property num="0xca027307" type="Uint8" name="Average Age reset value" desc="When average age reaches life expectancy in a tract, the tract's average age is set to this value"></property>
                    <property num="0xca027325" type="Float32" name="EQ reset percent" desc="When average age reaches life expectancy in a tract, the tract's EQ is multiplied by this value"></property>
                    <property num="0xca027328" type="Float32" name="HQ reset percent" desc="When average age reaches life expectancy in a tract, the tract's HQ is multiplied by this value"></property>
                    <property num="0xea540621" type="Float32" name="Avg. Age to 1-10 Age Group" desc="How average age translates to the distribution of population into the 1-10 age group"></property>
                    <property num="0xea540622" type="Float32" name="Avg. Age to 11-20 Age Group" desc="How average age translates to the distribution of population into the 11-20 age group"></property>
                    <property num="0xea540623" type="Float32" name="Avg. Age to 21-30 Age Group" desc="How average age translates to the distribution of population into the 21-30 age group"></property>
                    <property num="0xea540624" type="Float32" name="Avg. Age to 31-40 Age Group" desc="How average age translates to the distribution of population into the 31-40 age group"></property>
                    <property num="0xea540625" type="Float32" name="Avg. Age to 41-50 Age Group" desc="How average age translates to the distribution of population into the 41-50 age group"></property>
                    <property num="0xea540626" type="Float32" name="Avg. Age to 51-60 Age Group" desc="How average age translates to the distribution of population into the 51-60 age group"></property>
                    <property num="0xea540627" type="Float32" name="Avg. Age to 61-70 Age Group" desc="How average age translates to the distribution of population into the 61-70 age group"></property>
                    <property num="0xea540628" type="Float32" name="Avg. Age to 71-80 Age Group" desc="How average age translates to the distribution of population into the 71-80 age group"></property>
                    <property num="0xea540629" type="Float32" name="Avg. Age to 81-90 Age Group" desc="How average age translates to the distribution of population into the 81-90 age group"></property>
                    <property num="0x8a891421" type="Uint32" name="School Capacity To Staff Divisor" desc="The school's capacity is divided by this number to determine the number of teachers on staff"></property>
                    <property num="0x8a89142a" type="Uint32" name="Hospital Capacity To Staff Divisor" desc="The hospital's capacity is divided by this number to determine the number of doctors on staff"></property>
                    <property num="0x6a9f6edd" type="Float32" name="Coverage radius slop multiplier" desc="Coverage radii are multiplied by this value when computing tract coverage"></property>
                    <property num="0x4aa84161" type="Float32" name="Maximum EQ Boost" desc="Max EQ boost achievable without reward buildings.  Used to scale values for Sims opinion polls."></property>
                    <property num="0x2aa84164" type="Float32" name="Maximum HQ Boost" desc="Max HQ boost achievable without reward buildings.  Used to scale values for Sims opinion polls."></property>
                    <property num="0x6ab70da7" type="Float32" name="Death's door HQ" desc="If a tract's HQ falls below this number, they're at death's door."></property>
                    <property num="0x4ab70dac" type="Float32" name="Death's door effect chance" desc="Percent chance (0-100.0) that the effect will play for a tract that's at death's door."></property>
                    <property num="0x6ab71654" type="Float32" name="Death's door effect height" desc="Base height above terrain at which the effect will play for a tract that's at death's door."></property>
                    <property num="0x4ab71659" type="Float32" name="Death's door effect height delta" desc="Random height variance for effect for a tract that's at death's door."></property>
                    <property num="0xec43826b" type="Uint32" name="School Capacity Chunk Size" desc="How many people are represented by one unit in the coverage map"></property>
                    <property num="0xac43826d" type="Uint32" name="Hospital Capacity Chunk Size" desc="How many people are represented by one unit in the coverage map"></property>
                </group>
                <group name="Police/Jail Simulator">
                    <group name="Police Station Building">
                        <property num="0x48d71ed0" type="Sint32" name="Police Station, Center Strength" desc="(in Protection units)"></property>
                        <property num="0x48d71ed1" type="Sint32" name="Police Station, Exterior Strength" desc="(in Protection units)"></property>
                        <property num="0x48d71ed2" type="Float32" name="Police Station, Radius" desc="(in meters)"></property>
                        <property num="0x48d71ed5" type="Sint32" name="Police Station, Total Dispatches" desc="(number of trucks this station can send)"></property>
                        <property num="0x48d71ed9" type="Sint32" name="Police Station, Dispatch Center Strength" desc="(in Protection units)"></property>
                        <property num="0x48d71eda" type="Sint32" name="Police Station, Dispatch Exterior Strength" desc="(in Protection units)"></property>
                        <property num="0x48d71edb" type="Float32" name="Police Station, Dispatch Radius" desc="(in meters)"></property>
                        <property num="0xcc0b0705" type="Sint32" name="Police Station, Total Copter Dispatches" desc="(number of police helicopters this station can send)"></property>
                    </group>
                    <group name="Jail Building">
                        <property num="0x48d71ee0" type="Sint32" name="Jail, Inmate Capacity" desc="Jail Inmate Capacity"></property>
                        <property num="0x48d71ee4" type="Sint32" name="Jail, Overcapacity Cost (per person)" desc="Monthly cost, per convict, for every prisoner over regular (100%) capacity"></property>
                    </group>
                    <property num="0x68ddae92" type="Float32" name="Police, Max Jail Overcrowding Percentage" desc="0.0-100.0, See ISC4PoliceSimulator.h"></property>
                    <property num="0x68ddae93" type="Float32" name="Police, Funding To Efficiency Response Curve" desc="See ISC4PoliceSimulator.h"></property>
                    <property num="0x68ddae95" type="Float32" name="Police, Max Allowed Funding Percentage" desc="0.0-100.0, See ISC4PoliceSimulator.h"></property>
                    <property num="0x68ddae97" type="Float32" name="Police, Monthly Criminal Rehabilitation Percent" desc="0.0-100.0, See ISC4PoliceSimulator.h"></property>
                    <property num="0x68ddae9a" type="Float32" name="Police, Strike Efficiency" desc="0.0-100.0, See ISC4PoliceSimulator.h"></property>
                    <property num="0x68ddae9b" type="Uint32" name="Police, Max Strike Duration" desc="In days. See ISC4PoliceSimulator.h"></property>
                    <property num="0x68ddae9c" type="Float32" name="Police, Min Funding To End Strikes" desc="0.0-100.0, See ISC4PoliceSimulator.h"></property>
                    <property num="0x68ddae9e" type="Float32" name="Police, Strike Response Curve" desc="See ISC4PoliceSimulator.h"></property>
                    <property num="0x68ddae9f" type="Uint32" name="Police, Arrest Threshold" desc="If crime is committed in a cell whose police protection value is above this, they'll get arrested"></property>
                    <property num="0xea614f63" type="Float32" name="Jail, Jailbreak Response Curve" desc="Maps REAL jail capacity to jailbreak chance"></property>
                    <property num="0xea614f64" type="Float32" name="Jail, Jailbreak Escapee Percentage" desc="Min/max percentage (0.0-100.0) of jail capacity that will escape during jailbreaks"></property>
                    <property num="0xea614f65" type="Float32" name="Jail, End Jailbreak Capacity" desc="Stop any jailbreak in progress when REAL jail capacity percentage goes below this value"></property>
                    <property num="0x68ddaea0" type="Float32" name="Jail, Funding To Efficiency Response Curve" desc="See ISC4PoliceSimulator.h"></property>
                    <group name="OBSOLETE">
                        <property num="0x68ddae91" type="Uint32" name="Police, Update Period" desc="In days. See ISC4PoliceSimulator.h"></property>
                        <property num="0x68ddae94" type="Float32" name="Police, Min Acceptable Funding Percentage" desc="0.0-100.0, See ISC4PoliceSimulator.h"></property>
                        <property num="0x68ddae96" type="Uint32" name="Police, Max Acceptable Crime Level" desc="See ISC4PoliceSimulator.h"></property>
                        <property num="0x68ddae98" type="Float32" name="Police, Conviction Percentage" desc="0.0-100.0, See ISC4PoliceSimulator.h"></property>
                        <property num="0x68ddae99" type="Float32" name="Police, Unfailed Criminal Efficiency Percentage" desc="0.0-100.0, See ISC4PoliceSimulator.h"></property>
                        <property num="0x68ddae9d" type="Float32" name="Police, Property Crimes Value Ratio" desc="See ISC4PoliceSimulator.h"></property>
                        <property num="0x48d71ed3" type="Sint32" name="(Obs)Police Station, Monthly Upkeep Cost" desc="(in Simoleons)"></property>
                        <property num="0x48d71ee2" type="Sint32" name="(Obs)Jail, Monthly Upkeep Cost" desc="Jail Monthly Upkeep Cost" />
                    </group>
                </group>
                <group name="Crime Simulator">
                    <group name="Crime Types">
                        <property num="0xaa12fcb0" type="String" name="Crime Name" desc=""></property>
                        <property num="0xaa12fcb1" type="Uint32" name="Icon Resource Key" desc="type, group, and instance ID"></property>
                        <property num="0xaa12fcb2" type="Uint8" name="Zone Filter" desc="Zone types compatible with crime (none == can appear in any zone)"></property>
                        <property num="0xaa12fcb3" type="Uint8" name="Wealth Filter" desc="Zone wealth values compatible with crime (none == can appear around any wealth)"></property>
                        <property num="0xaa12fcb4" type="Uint8" name="Zone Purpose Filter" desc="Zone purpose types compatible with crime (none == can appear around any purpose)"></property>
                        <property num="0xaa12fcb5" type="Uint8" name="Crime Grid Value" desc="The crime grid tract value will be increased by this amount"></property>
                        <property num="0xaa12fcb6" type="Uint8" name="Trigger Fire" desc="If set to non-zero value, this will trigger a fire"></property>
                        <property num="0xaa12fcb7" type="Uint8" name="Lot Condition Filter" desc="Lot conditions compatible with crime"></property>
                        <property num="0xaa12fcb8" type="Float32" name="Relative Occurrance" desc="Relative occurance weight of this crime, only has meaning relative to values for other crimes."></property>
                    </group>
                    <property num="0xe8ec2720" type="Uint32" name="Crime Update Period" desc="How often the Crime simulator updates, in days"></property>
                    <property num="0xe8ec2721" type="Float32" name="Crime Police Factor" desc="Crime Police Factor"></property>
                    <property num="0x49a34301" type="Float32" name="Crime Prop Request Curve" desc="Crime level (0-1) vs. Prop Share"></property>
                    <property num="0x8a0cbaa3" type="Float32" name="Crime, Jobless Indicator Smoothing factor" desc=""></property>
                    <property num="0x8a0cbaa4" type="Float32" name="Crime, R$: EQ -&gt; Base Criminality Curve" desc=""></property>
                    <property num="0x8a0cbaa5" type="Float32" name="Crime, R$$: EQ -&gt; Base Criminality Curve" desc=""></property>
                    <property num="0x8a0cbaa6" type="Float32" name="Crime, R$$$: EQ -&gt; Base Criminality Curve" desc=""></property>
                    <property num="0x8a0cbaa7" type="Float32" name="Crime, R$: Jobless ratio -&gt; Criminality Curve" desc=""></property>
                    <property num="0x8a0cbaa8" type="Float32" name="Crime, R$$: Jobless ratio -&gt; Criminality Curve" desc=""></property>
                    <property num="0x8a0cbaa9" type="Float32" name="Crime, R$$$: Jobless ratio -&gt; Criminality Curve" desc=""></property>
                    <property num="0x8a0cbaaa" type="Float32" name="Crime, Criminality -&gt; Crimes Curve" desc=""></property>
                    <property num="0x8a0cbaab" type="Float32" name="Crime, Police Protection -&gt; Crime Attenuation" desc=""></property>
                    <property num="0x8a0cbaac" type="Float32" name="Crime, Crime Grid Decay Factor" desc="Example: 0.5 means values get halved every month"></property>
                    <property num="0x8a0cbaad" type="Float32" name="Crime, Criminal Grid Decay Factor" desc="Fraction (0 to 1.0) of unjailed criminals that will commit crimes next month"></property>
                </group>
                <group name="Fire Protection Simulator">
                    <group name="Fire Station Props">
                        <property num="0x08f55dc0" type="Sint32" name="Fire Station, Center Strength" desc="(in Fire Protection units)"></property>
                        <property num="0x08f55dc1" type="Sint32" name="Fire Station, Exterior Strength" desc="(in Fire Protection units)"></property>
                        <property num="0x08f55dc2" type="Float32" name="Fire Station, Radius" desc="(in meters)"></property>
                        <property num="0x08f55dc5" type="Sint32" name="Fire Station, Total Dispatches" desc="(number of trucks this station can send)"></property>
                        <property num="0x29233e9a" type="Sint32" name="Fire Station, Dispatch Center Strength" desc="(in Fire Protection units)"></property>
                        <property num="0x29233e9b" type="Sint32" name="Fire Station, Dispatch Exterior Strength" desc="(in Fire Protection units)"></property>
                        <property num="0x29233e9c" type="Float32" name="Fire Station, Dispatch Radius" desc="(in meters)"></property>
                        <property num="0x0c0afdd7" type="Sint32" name="Fire Station, Total Plane Dispatches" desc="(number of planes this station can send)"></property>
                    </group>
                    <property num="0x29233e8d" type="Float32" name="FireProtectionSim, Funding Efficiency Curve" desc="See ISC4FireProtectionSimulator.h"></property>
                    <property num="0x29233e8f" type="Float32" name="FireProtectionSim, Max Allowed Funding" desc="100.0+ Maximum percentage you can fund a fire station"></property>
                    <property num="0x29233e94" type="Float32" name="FireProtectionSim, Strike Efficiency Multiplier" desc="0.0-1.0 efficiency multiplier when stations are on strike"></property>
                    <property num="0x29233e95" type="Sint32" name="FireProtectionSim, Max Strike Duration" desc="Maximum number of days a strike can last"></property>
                    <property num="0x29233e96" type="Float32" name="FireProtectionSim, Min Funding To End Strikes" desc="0.0-100.0, See ISC4FireProtectionSimulator.h"></property>
                    <property num="0x29233e98" type="Float32" name="FireProtectionSim, Strike Response Curve" desc="See ISC4FireProtectionSimulator.h&quot;"></property>
                    <property num="0x69b425db" type="Float32" name="FireProtectionSim, StationNoRoad Multiplier" desc="(0.0 - 1.0)"></property>
                    <group name="OBSOLETE">
                        <property num="0x08f55dc3" type="Sint64" name="(Obs)Fire Station, Monthly Upkeep Cost" desc="(in Simoleans)"></property>
                        <property num="0x08f55dc4" type="Float32" name="Fire Station, Funding Percentage" desc="(percentage of funding)"></property>
                    </group>
                </group>
                <group name="Flamability Simulator">
                    <property num="0xc9b40128" type="Float32" name="Flammability multiplier, summer" desc="flammability multiplier during summer"></property>
                    <property num="0x29b40134" type="Float32" name="Flammability multiplier, abandonment" desc="flammability multiplier if building if abandoned"></property>
                    <property num="0x29b4013b" type="Float32" name="Flammability multiplier, no water" desc="flammability multiplier if building is not watered"></property>
                    <property num="0x29b4013c" type="Uint32" name="Flammability, hotspot settings" desc="hotspot settings: threshold value (0-255), radius (in tracts), minimum weight"></property>
                    <property num="0x29b4013d" type="Float32" name="Flammability, hotspot fire probability" desc="maps hotspot weight (# of cells above threshold) to monthly fire probability (in percent 0-100)"></property>
                    <property num="0x29b4013e" type="Float32" name="Flammability, random fire probability" desc="monthly fire probability (in percent 0-100) of random lot fire"></property>
                </group>
                <group name="Aura Simulator">
                    <property num="0xea023270" type="Float32" name="Aura, Park Effect" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023271" type="Float32" name="Aura, Pollution Effect, Air" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023272" type="Float32" name="Aura, Pollution Effect, Water" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023273" type="Float32" name="Aura, Pollution Effect, Garbage" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023274" type="Float32" name="Aura, Pollution Effect, Radiation" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023275" type="Float32" name="Aura, School Effect" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023276" type="Float32" name="Aura, Hospital Effect" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023277" type="Float32" name="Aura, Crime Effect" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023278" type="Float32" name="Aura, Trip Length" desc="Maps grid data to aura effect"></property>
                    <property num="0xea023279" type="Float32" name="Aura, Traffic" desc="Maps grid data to aura effect"></property>
                    <property num="0xea02327a" type="Float32" name="Aura, Long Term Decay Factor" desc="(1.0 means no decay, 0.0 means full decay (no smoothing)"></property>
                    <property num="0xea02327b" type="Float32" name="Aura, Short Term Decay Factor" desc="(1.0 means no decay, 0.0 means full decay (no smoothing)"></property>
                    <property num="0xea02327c" type="Sint32" name="Aura, Base Aura (Low)" desc="Base aura for R$,Cs$,Id occupancy"></property>
                    <property num="0xea02327d" type="Sint32" name="Aura, Base Aura (Med)" desc="Base aura for R$$,Cs$$,Co$$,Ir,Im occupancy"></property>
                    <property num="0xea02327e" type="Sint32" name="Aura, Base Aura (High)" desc="Base aura for R$$$,Cs$$$,Co$$$ occupancy"></property>
                    <property num="0xea02327f" type="Float32" name="Aura, Tax Rate Change Effect" desc="Maps tax rate change (in percent) to aura effect"></property>
                    <property num="0xea023280" type="Float32" name="Aura, Value/Wealth Effect" desc="Maps (value_type-wealth_type) to aura effect"></property>
                    <property num="0xea023290" type="Float32" name="Aura, Transient Effect, Fire" desc="magnitude and radius in meters of transient aura effect"></property>
                    <property num="0xea023291" type="Float32" name="Aura, Transient Effect, Flora" desc="magnitude and radius in meters of transient aura effect"></property>
                    <property num="0xea023292" type="Float32" name="Aura, Transient Effect, Civic Plop" desc="magnitude and radius in meters of transient aura effect"></property>
                    <property num="0xea023293" type="Float32" name="Aura, Transient Effect, Network Plop" desc="magnitude and radius in meters of transient aura effect"></property>
                    <property num="0xea0232a0" type="Sint32" name="Aura, Hotspot Settings" desc="hotspot settings: threshold value (0-255), radius (in tracts), minimum weight"></property>
                    <property num="0xea0232a1" type="Float32" name="Aura, Hotspot Riot Probability" desc="maps hotspot weight (# of cells above threshold) to monthly fire probability (in percent 0-100)"></property>
                </group>
                <property num="0x47e2c200" type="Uint8" name="Tract Size" desc="Power of 2; determines the size of the sim grid"></property>
                <property num="0x68f26014" type="Uint32" name="Map View Unsigned Colors" desc="RGBA color of 3D overlay of 2-color map view"></property>
                <property num="0x68f26015" type="Uint32" name="Map View Signed Colors" desc="RGBA color of 3D overlay of 3-color map view"></property>
            </group>
            <group name="Zone Manager">
                <property num="0xe94825b2" type="Sint32" name="kZM_mZoneMinCellSize" desc="kZM_mZoneMinCellSize"></property>
                <property num="0xe94825b3" type="Sint32" name="kZM_mZoneMaxCellSize" desc="kZM_mZoneMaxCellSize"></property>
                <property num="0xe94825b4" type="Sint64" name="kZM_mZoneCreationCostArray" desc="kZM_mZoneCreationCostArray"></property>
                <property num="0xe94825b5" type="Sint64" name="kZM_mZoneDestructionCostArray" desc="kZM_mZoneDestructionCostArray"></property>
                <property num="0xe94825b6" type="Uint32" name="kZM_mZoneTextureResourceInstanceArray" desc="kZM_mZoneTextureResourceInstanceArray"></property>
                <property num="0xe94825b7" type="Uint8" name="Zone Display Alpha" desc="Replaces drag color alpha after zone placement"></property>
                <property num="0xe94825b8" type="Uint32" name="Zone Drag Color" desc="RGBA color to blend with black and white texture NRRRCCCIIIMASSLP"></property>
                <property num="0xe94825b9" type="Float32" name="Zone Max Slope" desc="Meters per cell must be less than this value NRRRCCCIIIMASSLP"></property>
            </group>
            <group name="Ordinance">
                <property num="0x28ebbc30" type="Uint32" name="Ordinance ID" desc="ID of this ordinance"></property>
                <property num="0x6a416b21" type="Uint32" name="Name Key" desc="Resource key of ordinance name resource"></property>
                <property num="0x28ebbc32" type="String" name="Name String (non-localizable)" desc="Ordinance name"></property>
                <property num="0xca416b2a" type="Uint32" name="Description Key" desc="Resource key of ordinance description"></property>
                <property num="0x28ebbc34" type="String" name="Description String (non-localizable)" desc="Ordinance description string"></property>
                <property num="0x28ebbc35" type="Uint32" name="Year Available" desc="Year this ordinance becomes available"></property>
                <property num="0x28ebbc36" type="Float32" name="Monthly Chance" desc="Monthly chance of this ordinance bemoming available"></property>
                <property num="0x28ebbc37" type="Sint32" name="Enactment Income" desc="Revenue generated by enacting this ordinance"></property>
                <property num="0x28ebbc38" type="Sint32" name="Retractment Income" desc="Cost of retracting this ordinance"></property>
                <property num="0x28ebbc39" type="Sint32" name="Monthly Constant Income" desc="Constant part of monthly income generated by this ordinance"></property>
                <property num="0x28ebbc3a" type="Float32" name="Monthly Income Factor" desc="Factor applied to ordinance cost basis"></property>
                <property num="0x28ebbc3b" type="Uint32" name="Advisor ID" desc="Advisor ID for this ordinance"></property>
                <property num="0x28ebbc3c" type="Bool" name="Income Ordinance" desc="True for ordinances that should appear on income part of budget"></property>
                <property num="0x28ed0380" type="Float32" name="Crime Effect" desc="Crime multiplier"></property>
                <property num="0xaa5b8407" type="Sint32" name="Mayor Rating" desc="This value get added globally to mayor rating"></property>
                <property num="0x08f79b8e" type="Float32" name="Air Effect" desc="Effect (multiplier) this ordinance has on air pollution"></property>
                <property num="0x28f42aa0" type="Float32" name="Flammability Effect" desc="Effect (multiplier) this ordinance has on flammability"></property>
                <property num="0xe8f79c8b" type="Float32" name="Water Effect" desc="Effect (multiplier) this ordinance has on water pollution"></property>
                <property num="0xe8f79c90" type="Float32" name="Garbage Effect" desc="Effect (multiplier) this ordinance has on garbage"></property>
                <property num="0xa8f4eb0c" type="Float32" name="Water Use Reduction" desc="Effect (multiplier) this ordinace has on water use"></property>
                <property num="0x0911e117" type="Float32" name="Power Reduction Effect" desc="Factor by which this ordinance reduces power consumption"></property>
                <property num="0x2a631000" type="Float32" name="Residential Demand Effect" desc="Factor applied to residential demand" />
                <property num="0x2a633000" type="Float32" name="Commercial Demand Effect" desc="Factor applied to commercial demand"></property>
                <property num="0x2a634000" type="Float32" name="Industrial Demand Effect" desc="Factor applied to industrial demand"></property>
                <property num="0x491b3ad5" type="Float32" name="Health Coverage Radius % Effect" desc="Percentage (from 0 to 200) by which this ordinance affects coverage radius of health buildings"></property>
                <property num="0x891b3ae6" type="Float32" name="Health Effectiveness vs. Distance Effect" desc="Maps % of coverage distance from a hospital to HQ boost %"></property>
                <property num="0xe91b3aee" type="Float32" name="Health Quotient Boost Effect" desc="Percentage (from 0 to 200%) by which this ordinance affects all HQ values"></property>
                <property num="0xc92d9c7a" type="Float32" name="Health Quotient Decay Effect" desc="Percentage (from 0 to 200%) by which this ordinance affects the rate at which HQ decays"></property>
                <property num="0x092d909b" type="Float32" name="Health Capacity Effect" desc="Percentage (from 0 to 200%) by which this ordinance affects the capacity of hospitals"></property>
                <property num="0xe92d9db4" type="Float32" name="Health Effectiveness vs. Average Age Effect" desc="Maps average age of a tract to addional HQ boost %"></property>
                <property num="0xa91b3af4" type="Float32" name="School Coverage Radius % Effect" desc="Percentage (from 0 to 200) by which this ordinance affects coverage radius of schools"></property>
                <property num="0xa91b3afa" type="Float32" name="School Effectiveness vs. Distance Effect" desc="Maps % of coverage distance from a school to EQ boost %"></property>
                <property num="0xa92d9d7a" type="Float32" name="School EQ Boost Effect" desc="Percentage (from 0 to 200%) by which this ordinance affects all EQ values"></property>
                <property num="0x692ef65a" type="Float32" name="School EQ Decay Effect" desc="Percentage (from 0 to 200%) by which this ordinance affects the rate at which EQ decays"></property>
                <property num="0x892d9d02" type="Float32" name="School Capacity Effect" desc="Percentage (from 0 to 200%) by which this ordinance affects the capacity of schools"></property>
                <property num="0xc91b3b02" type="Float32" name="School Effectiveness vs. Average Age Effect" desc="Maps average age to EQ boost %"></property>
                <property num="0x8a612fee" type="Sint32" name="Travel Strategy Modifier" desc="For each wealth type ($-$$$), modifies percentage of travelers using each of the three travel strategies"></property>
                <property num="0x8a67e373" type="Float32" name="Air Effect by zone type" desc="Effect (multiplier) this ordinance has on air pollution for each zone type"></property>
                <property num="0x8a67e374" type="Float32" name="Water Effect by zone type" desc="Effect (multiplier) this ordinance has on water pollution for each zone type"></property>
                <property num="0x8a67e376" type="Float32" name="Garbage Effect by zone type" desc="Effect (multiplier) this ordinance has on garbage for each zone type"></property>
                <property num="0x8a67e378" type="Float32" name="Traffic Air Pollution Effect" desc="Effect (multiplier) this ordinance has on air pollution generated by traffic"></property>
                <property num="0x2a654100" type="Float32" name="IR Demand Effect" desc="The effect of this ordinance on Industrial Resource demand, in percent (0.0-100.0)" />
                <property num="0x2a654200" type="Float32" name="ID Demand Effect" desc="The effect of this ordinance on Industrial Dirty demand, in percent (0.0-100.0)" />
                <property num="0x2a654300" type="Float32" name="IM Demand Effect" desc="The effect of this ordinance on Industrial Manufacturing demand, in percent (0.0-100.0)" />
                <property num="0x2a654400" type="Float32" name="IHT Demand Effect" desc="The effect of this ordinance on Industrial High-Tech demand, in percent (0.0-100.0)" />
                <property num="0x2a653320" type="Float32" name="CO$$ Demand Effect" desc="The effect of this ordinance on Commercial Office $$ demand, in percent (0.0-100.0)" />
                <property num="0x2a653330" type="Float32" name="CO$$$ Demand Effect" desc="The effect of this ordinance on Commercial Office $$$ demand, in percent (0.0-100.0)" />
                <property num="0x2a653110" type="Float32" name="CS$ Demand Effect" desc="The effect of this ordinance on Commercial Service $ demand, in percent (0.0-100.0)" />
                <property num="0x2a653120" type="Float32" name="CS$$ Demand Effect" desc="The effect of this ordinance on Comercial Service $$ demand, in percent (0.0-100.0)" />
                <property num="0x2a653130" type="Float32" name="CS$$$ Demand Effect" desc="The effect of this ordinance on Commercial Service $$$ demand, in percent (0.0-100.0)" />
                <group name="OBSOLETE">
                    <property num="0x092d91a3" type="Uint32" name="Health Building types affected" desc="Variable length list of building types affected by this ordinance" />
                    <property num="0x292d91aa" type="Uint32" name="School Building types affected" desc="Variable length list of building types affected by this ordinance" />
                    <property num="0x28ebbc31" type="Uint32" name="Old Name Key (obsolete)" desc="DO NOT USE" />
                    <property num="0x28ebbc33" type="Uint32" name="Old Description Key (obsolete)" desc="DO NOT USE" />
                </group>
            </group>
            <group name="Network">
                <property num="0x4835c6a4" type="Float32" name="PivotPointPosition" desc="Relative to left, bottom, far corner of bounding box (x,y,z meters)"></property>
                <property num="0x4835c6a5" type="Float32" name="BoundingBox" desc="Dist (meters) from the pivot pt to left, right, back, front, bottom, top side of model"></property>
                <property num="0x6a845768" type="Uint32" name="ModelIsPrelit" desc="If this property is present the game will not apply deform and lighting to the model"></property>
                <property num="0xabe1b5a3" type="Bool" name="BridgeObstruction" desc="This property prevents water automata from crossing under the bridge tile."></property>
            </group>
            <group name="Bridge">
                <property num="0x482cb441" type="Float32" name="MinClearance" desc="Min clearance below bridge (meters)"></property>
                <property num="0x482cb442" type="Uint32" name="NumEndPieces" desc="Number of end pieces"></property>
                <property num="0x482cb443" type="Uint32" name="EndPieceExemplars" desc="Exemplar ids for end pieces(in order)"></property>
                <property num="0x482cb444" type="Uint8" name="EndPieceRotations" desc="Model rotations for end pieces"></property>
                <property num="0x482cb445" type="Uint32" name="RepeatPieceExemplar" desc="Exemplar id for the repeat pieces"></property>
                <property num="0x482cb446" type="Uint8" name="RepeatPieceRotation" desc="Model rotation for repeat piece"></property>
                <property num="0x482cb447" type="Uint32" name="SupportInterval" desc="Number of cells between supports"></property>
                <property num="0x482cb448" type="Uint32" name="NumSupportPieces" desc="Number of support pieces(count one side only)"></property>
                <property num="0x482cb449" type="Uint32" name="SupportPieceExemplars" desc="Exemplar ids for support pieces(start at pillar)"></property>
                <property num="0x482cb44a" type="Uint8" name="SupportPieceRotations" desc="Model rotations for support pieces"></property>
                <property num="0x482cb44b" type="Float32" name="EndPieceSpanLocations" desc="Dist from top the two spans of each end piece are"></property>
                <property num="0x482cb44c" type="Float32" name="ColumnTopPosForSupportPieces" desc="Dist from pivot point to the top of concrete column (-ve for no column)"></property>
                <property num="0x482cb44d" type="Float32" name="ColumnTopPosForEndPieces" desc="Dist from pivot point to the top of concrete column (-ve for no column)"></property>
                <property num="0x482cb44e" type="Float32" name="SupportColumnCorners" desc="(x,z) corresponding to the 4 corners of the support column w.r.t column center"></property>
                <property num="0x482cb44f" type="Bool" name="CanWorkAsLandBridge" desc="Set to true if this bridge can work as land bridge"></property>
                <property num="0x482cb450" type="Bool" name="CanWorkAsWaterBridge" desc="Set to true if this bridge can work as water bridge"></property>
                <property num="0x482cb455" type="Float32" name="MinHold" desc="The lowest suspend wire can get in the middle"></property>
                <property num="0x482cb456" type="Float32" name="MinEndHold" desc="The lowest suspend wire can get at the ends (leave it at 0 please)"></property>
                <property num="0x482cb457" type="Float32" name="PylonsHeight" desc="Pylons height (meters)"></property>
                <property num="0x482cb458" type="Uint32" name="MinSpan" desc="The shortest possible bridge of this type (tiles)"></property>
                <property num="0x482cb459" type="Uint32" name="EndSupportInterval" desc="Number of cells between supports at the ends of the bridge"></property>
                <property num="0x482cb45a" type="Uint32" name="MinPylons" desc="Minimal number of pylons"></property>
                <property num="0x482cb45b" type="Uint32" name="MaxPylons" desc="Maximal number of pylons"></property>
                <property num="0x482cb45c" type="Uint32" name="WireMainTexId" desc="Texture ID for suspension wire"></property>
                <property num="0x482cb45d" type="Uint32" name="WireTileTexId" desc="Texture ID for vertical suspension wires"></property>
                <property num="0x482cb45e" type="Float32" name="MainPylonCorners" desc="(x,z) corresponding to the 4 corners of the pylon w.r.t pylon center"></property>
                <property num="0x482cb45f" type="Uint32" name="BridgeWidth" desc="Bridge width in tiles (defaults to 1)"></property>
                <property num="0x482cb467" type="Uint32" name="MaxSpan" desc="The longest possible bridge of this type (tiles)"></property>
                <property num="0x482cb468" type="Float32" name="CeilingHeight" desc="Distance from road top to ceiling of water passage below bridge tiles."></property>
                <property num="0x482cb469" type="Float32" name="CableStayedFrontAnchors" desc="3D start and end (x,y,z) of cable attachments on front side of pylon."></property>
                <property num="0x482cb46a" type="Float32" name="CableStayedRearAnchors" desc="3D start and end (x,y,z) of cable attachments on rear side of pylon."></property>
                <property num="0x482cb46b" type="Uint32" name="CableStayedWireTexture" desc="Instance ID of texture to use for cable-stayed bridge wires."></property>
                <property num="0x482cb46c" type="Float32" name="CableStayedWireThickness" desc="Thickness of cable-stayed wires in meters."></property>
                <property num="0x482cb46d" type="Float32" name="CableStayedSpanAnchors" desc="Start and end positions for cable-stayed bridge wires on the span, relative to the pylon."></property>
                <property num="0x482cb46e" type="Uint32" name="CableStayedWireCount" desc="The number of wires on one side of a pylon on a cable-stayed bridge."></property>
                <property num="0x482cb46f" type="Uint32" name="Bridge Image Key" desc="Group and instance ID for preview image of bridge."></property>
                <property num="0x482cb470" type="Uint32" name="Bridge Costs" desc="One-time and per-tile costs for bridge, in simoleons."></property>
                <property num="0x482cb471" type="Float32" name="WireTilingUnit" desc="Height of a repeating wire tile for suspension bridges."></property>
                <property num="0x482cb472" type="Float32" name="Bridge height bias" desc="Vertical displacement for all models in a bridge."></property>
                <property num="0x482cd460" type="Float32" name="SuspensionWireBase" desc="Offset of suspension wire base"></property>
                <property num="0x482cd461" type="Float32" name="SuspensionWireInside" desc="Offset of suspension wire inside the bridge tile"></property>
                <property num="0x482cd462" type="Float32" name="SupportColumnBase" desc="Offset of pylon base"></property>
                <property num="0x482cd463" type="Float32" name="MinAltitudeAboveWater" desc="Minimum estimated elevation above water"></property>
                <property num="0x482cd464" type="Float32" name="MaxAltitudeAboveWater" desc="Maximum estimated elevation above water"></property>
                <property num="0x482cd465" type="Float32" name="MinEndIntervalFraction" desc="Force pylon-to-end distance to be at least some% of pylon-to-pylon distance."></property>
                <property num="0x482cd466" type="Uint32" name="Bridge Name Key" desc="Group and instance ID for string name of bridge."></property>
            </group>
            <group name="Miscellanious">
                <property num="0x879d12e7" type="Float32" name="MaxSlopeAlongNetwork" desc="Range: [0.0 - 90.0]"></property>
                <property num="0x279d1707" type="Float32" name="MaxSlopeOnNetworkSide" desc="Range: [0.0 - 90.0]"></property>
                <property num="0x07b36c71" type="Float32" name="MaxNetworkSlopeChange" desc="Range: [0.0 - 90.0]"></property>
                <property num="0xc7b36ca4" type="Float32" name="MaxTerrainHtIncrease" desc="How much can terrain be raised during network placement [0.0 - 100000.0]"></property>
                <property num="0xc7b36ca5" type="Float32" name="MaxTerrainHtDecrease" desc="How much can terrain be lowered during network placement [0.0 - 100000.0]"></property>
                <property num="0xc804dd86" type="Float32" name="MaxNetworkHtAdjustment" desc="Range: [0.0 - 100000.0]"></property>
                <property num="0xc804dd87" type="Float32" name="MinTerrainSlopeForTunnelStart" desc="Min terrain slope to trigger tunnel placement"></property>
                <property num="0xc804dd88" type="Float32" name="MaxTunnelSlope" desc="Maximum slope of tunnel (in degrees)"></property>
                <property num="0xc804dd89" type="Float32" name="MaxDisplacementBeyondRefPlane" desc="Maximum amount (in meters) by which a network vertex is allowed to move beyond reference plane"></property>
                <property num="0xc804dd90" type="Bool" name="UseFreehandMode" desc="Use freehand mode of placement (i.e., anchor points freeze)"></property>
                <property num="0xc804dd91" type="Uint32" name="NumFramesBetweenAnchorPtFreeze" desc="[deprecated] Number of frame updates between the freezing of successive anchor points"></property>
                <property num="0xc804dd92" type="Uint32" name="NumCellsBetweenAnchorPtFreeze" desc="Min number of cells between successive anchor points in different zooms"></property>
                <property num="0xc804dd93" type="Float32" name="MaxDistFromTerrain" desc="How far away from the terrain is the network allowed to be [0.0 - 100000.0]"></property>
                <property num="0xc804dd94" type="Float32" name="MaxRetainingWallHt" desc="Max height of the retaining walls [0.0 - 100000.0]"></property>
                <property num="0xc804dd95" type="Float32" name="MaxPylonHt" desc="Max height of the supporting pylons [Reating wall ht - 100000.0]"></property>
                <property num="0xc804dd96" type="Float32" name="MaxHtDiffBetweenLandBridgeEnds" desc="Max allowed terrain height diff between the two ends of land bridges"></property>
                <property num="0xc804dd97" type="Bool" name="SmoothenOnlyConnectedTiles" desc="Smoothen only those tiles that are connected to the segment being placed"></property>
                <property num="0xc804dd98" type="Uint32" name="numSmoothingProgressionSteps" desc="Number of times we attempt expanding the smoothing region before giving up"></property>
                <property num="0xc804dd99" type="Uint32" name="distAddedPerSmoothingProgressionStep" desc="How much (in cells) does the smoothing region expand in each smoothing progression step"></property>
                <property num="0xc804dd9a" type="Float32" name="networkHtChangeThatRequiresFixing" desc="If an existing network moves by less than this, we do not attempt to fix it (for efficiency)"></property>
                <property num="0xc804dd9b" type="Uint32" name="TimeBetweenAnchorPtFreeze" desc="Time in milliseconds between the freezing of successive anchor points"></property>
                <property num="0xa96e5641" type="Float32" name="Underground Trench Floor Depth" desc="Default depth of underground network trench floor below terrain"></property>
                <property num="0x496e564c" type="Float32" name="Underground Piece Depth" desc="Default depth of underground network piece below terrain"></property>
                <property num="0x096e5653" type="Float32" name="Underground Intersection Height" desc="Default height above trench floor to place intersectons"></property>
                <property num="0x496e5a36" type="Bool" name="Use Pipe Depth" desc="If false, normal pipe pieces are placed as per intersections"></property>
                <property num="0xe974eaa1" type="Uint32" name="NetworkTextureId" desc="Id of the network texture for which it is OK to have pylon/retaining wall"></property>
                <property num="0xe974eaa2" type="Uint32" name="ConnectedVerts" desc="Pairs of cell vertices connected by retaining walls / side flaps"></property>
                <property num="0xe974eaa3" type="Float32" name="PylonCornerXZs" desc="(x,z) corresponding to the 4 corners of the pylon w.r.t cell center"></property>
                <property num="0xe974eaa4" type="Uint32" name="TunnelResourceIds" desc="Model resource id(s) for tunnel piece(s)"></property>
                <property num="0xe974eaa5" type="Uint32" name="TunnelModelRotations" desc="Tunnel model rotations"></property>
                <property num="0xe974eaa6" type="Float32" name="TunnelModelHeights" desc="Tunnel piece model heights"></property>
                <property num="0xe974eaa7" type="Uint32" name="Special Pylon Model Id" desc="Pylon model exemplar instance used by some networks (can be single instance or one per zoom)"></property>
                <property num="0x4a270db0" type="Float32" name="Construction Crew Time" desc="Number of seconds the construction crew will spend per tile while building network"></property>
                <property num="0x4a270e94" type="Float32" name="Construction Crew Vehicle Speed" desc="Speed of construction crew vehicles in meters/second"></property>
                <property num="0x4a271248" type="Uint32" name="Construction Crew Lead Vehicle Instance" desc="Instance ID of construction crew lead vehicle"></property>
                <property num="0x4a27124f" type="Uint32" name="Construction Crew Follow Vehicle Instance" desc="Instance ID of construction crew follow vehicle"></property>
                <property num="0x4a275748" type="Uint32" name="Construction Crew Vehicle Path Type" desc="Type of path used by construction crew vehicles (0=None, 1=Auto, 2=Ped, 3=Train, 4=Subway"></property>
                <property num="0x4a2d49b9" type="Uint32" name="Simolean Cost Per Tile" desc="Cost to create a tile of network using this tool"></property>
                <property num="0x8a2d49ea" type="Uint32" name="Simolean Cost Per Bridge Tile" desc="Cost to create a bridge tile of network using this tool"></property>
                <property num="0x8a2d49f0" type="Uint32" name="Simolean Cost Per Tunnel Tile" desc="Cost to create a tunnel tile of network using this tool"></property>
                <property num="0x6a2d49f4" type="Float32" name="Simolean Cost Per Meter Displaced" desc="Cost to raise/lower one vertex one meter when using this tool"></property>
                <property num="0xea86e3b5" type="Uint32" name="Simolean Cost Per Tile to Demolish" desc="Cost to demolish a tile of network using this tool"></property>
            </group>
            <group name="Hidden">
                <property num="0x489b6974" type="Uint32" name="Test res key table" desc="Test for Resource key table editor"></property>
                <property num="0x07af514b" type="Uint32" name="ResMan Registered Groups" desc="Specifies a group id registered with the resource manager"></property>
            </group>
            <group name="Terrain">
                <property num="0x48cd7b20" type="Float32" name="MaxNormalTerrainHeight" desc="Max normal height in fractally generated terrains, for different city size choices"></property>
                <property num="0x48cd7b21" type="Float32" name="SeaLevel" desc="Sea level (meters)"></property>
                <property num="0x48cd7b22" type="Float32" name="MinRegularHtFactor" desc="Factor governing the min ht for regular terrain"></property>
                <property num="0x48cd7b23" type="Float32" name="MaxRegularHtFactor" desc="Factor governing the max ht for regular terrain"></property>
                <property num="0x48cd7b24" type="Float32" name="MinMountainHtFactor" desc="Factor governing the min ht for mountain terrain"></property>
                <property num="0x48cd7b25" type="Float32" name="MaxMountainHtFactor" desc="Factor governing the max ht for mountain terrain"></property>
                <property num="0x48cd7b26" type="Float32" name="MaxTerrainHeight" desc="Maximum altitude of a terrain vertex"></property>
                <property num="0x48cd7b27" type="Float32" name="MinTerrainHeight" desc="Minimum altitude of a terrain vertex"></property>
                <property num="0x48cd7b28" type="Float32" name="ImageImportScaleFactor" desc="How many meters correspond to one unit of gray scale value in image"></property>
                <property num="0x48cd7b2a" type="Float32" name="DefaultTerrainHeight" desc="Default terrain height for new city (meters)"></property>
                <property num="0x48cd7b30" type="Float32" name="TemperatureRangeFactor" desc="Factor governing the max temperature range for texture assignment"></property>
                <property num="0x48cd7b31" type="Float32" name="WaterProximityRangeFactor" desc="Factor governing the max water proxmity range for texture assignment"></property>
                <property num="0x48cd7b40" type="Uint32" name="NumInitialErosionPasses" desc="Number of erosion passes at initial terrain creation time"></property>
                <property num="0x48cd7b41" type="Uint32" name="NumHydraulicIterationsPerInitialErosionPass" desc="Number of hydraulic erosion iterations in each initial erosion pass"></property>
                <property num="0x48cd7b42" type="Uint32" name="NumWindIterationsPerInitialErosionPass" desc="Number of wind erosion iterations in each initial erosion pass"></property>
                <property num="0x48cd7b43" type="Float32" name="SeaLevelChangeDueToWaterSlider" desc="The sea level change range (meters) corresponding to the water slider, for diff city sizes"></property>
                <property num="0x48cd7b50" type="Uint32" name="MinCellsInUsefulFlatArea" desc="do not auto flatten it&quot;"></property>
                <property num="0x48cd7b51" type="Float32" name="MaxHtChangeToFlattenFactor" desc="Controls the extent of height change allowed in auto-flattening"></property>
                <property num="0x48cd7b52" type="Float32" name="MaxTerraceAltitudeFactor" desc="Controls the maximum altitude upto which auto-flattening gets done"></property>
                <property num="0x48cd7b53" type="Float32" name="MinTerraceAltitudeFactor" desc="Controls the lowest altitude at which terraces get created"></property>
                <property num="0x48cd7b54" type="Uint32" name="AutoFlatAreaEdgeSmootheningRadius" desc="To what distance (in cells) around an auto-flattened area we do smoothing"></property>
                <property num="0x48cd7b60" type="Uint32" name="MinShoreCliffSize" desc="Minimum number of shore vertices in a shore cliff"></property>
                <property num="0x48cd7b61" type="Float32" name="MinShoreCliffCandidateHt" desc="Minimum pre-existing ht difference at shore for it to be considered for turning into a cliff"></property>
                <property num="0x48cd7b62" type="Float32" name="MinShoreCliffHt" desc="Minimum ht above sea level at a shore cliff (after cliff creation)"></property>
                <property num="0x48cd7b63" type="Float32" name="MaxShoreCliffHt" desc="Maximum ht above sea level at a shore cliff (after cliff creation)"></property>
                <property num="0x48cd7b64" type="Uint32" name="MaxShoreCliffSize" desc="Maximum number of shore vertices in a shore cliff"></property>
                <property num="0x48cd7b65" type="Float32" name="MaxNormalYForCliff" desc="A face is considered cliff if the y-component of its normal is less than this"></property>
                <property num="0x48cd7b70" type="Float32" name="MinSeaLevel" desc="Minimum sea altitude"></property>
                <property num="0x48cd7b71" type="Float32" name="MaxSeaLevel" desc="Maximum sea altitude"></property>
                <property num="0x48cd7b72" type="Float32" name="SeaRaiseLowerAmount" desc="Extent by which the sea level is raised/lowered for each player click"></property>
                <property num="0x48cd7b73" type="Float32" name="TerrainRaiseLowerAmount" desc="Extent by which the terrain level is raised/lowered each time raise/lower menu is selected"></property>
                <property num="0xa9c283d0" type="Uint8" name="MaxBeachWidth" desc="How far from water (in cells) does the beach extend"></property>
                <property num="0xa9c283d1" type="Float32" name="MaxBeachAltitude" desc="How high above the sea level(meters), does the beach extend"></property>
                <property num="0x48cd7b80" type="Uint8" name="AutoFlattenUponCreation" desc="Run auto-flatten tool upon initial terrain creation"></property>
                <property num="0x48cd7b81" type="Uint8" name="ShoreCliffsUponCreation" desc="Run cliff creation tool upon initial terrain creation"></property>
                <property num="0x48cd7ba0" type="Float32" name="TypicalBrushAngleIncrement" desc="Angle (in degrees) by which the brush rotates between successive applications"></property>
                <property num="0x48cd7bf1" type="Uint32" name="NumFlowStepsPerWaterErosionBrushApplication" desc="Number of water flow steps in each application of water erosion brush"></property>
                <property num="0x48cd7bf2" type="Uint32" name="NumWaterErosionIterationsPerInvocation" desc="Number of water erosion steps in each application of water erosion tool"></property>
                <property num="0x48cd7bf3" type="Uint32" name="NumSmoothingIterationsAfterWaterErosion" desc="Number of smoothing iterations after each application of water erosion tool"></property>
                <property num="0x48cd7c00" type="Float32" name="EdgeReconcilliationSmoothingRadiusVsHeightDiff" desc="Specifiess the smoothing radius as a function of height adjustment needed"></property>
                <property num="0x48cd7c01" type="Uint32" name="EdgeReconcilliationSmoothingIterations" desc="Smoothing iterations for edge reconcilliation"></property>
                <property num="0x48cd7c02" type="Float32" name="EdgeReconcilliationHtDifferenceThreshold" desc="If the height difference is less than this, don't reconcile"></property>
                <property num="0x497f42a4" type="Uint8" name="Unwatered Building Color" desc="RGBA color for unwatered buildings in pipe view"></property>
                <property num="0xe97f42b0" type="Uint8" name="Watered Building Color" desc="RGBA color for watered buildings in pipe view"></property>
                <property num="0xa97f42ce" type="Uint8" name="Watered Terrain Color" desc="RGBA color for watered terrain cells in pipe view"></property>
                <property num="0x097f4c4e" type="Uint8" name="Unwatered Terrain Color" desc="RGBA color for unwatered terrain cells in pipe view"></property>
                <property num="0x297f42b7" type="Bool" name="Draw Unwatered Terrain Cell Color" desc="Determines whether unwatered terrain cells are colored in pipe view"></property>
                <property num="0x89861864" type="Uint32" name="VolcanicAshLifeTime" desc="How long (microsecs) is the volcanic ash visible on screen"></property>
                <property num="0x89a312c0" type="Float32" name="TerrainTexTilingFactor" desc="100 meters of terrain corresponds to this fraction of texture in farthest zoom"></property>
                <property num="0x89a312c2" type="Uint32" name="TextureRandomizationGridSize" desc="Width of the coarse grid (in terrain cells) where we assign the same texture family member"></property>
                <property num="0x69ac5640" type="Float32" name="MinWaterDepthForDeepSeaBedTexture" desc="If the water depth exceeds this, we apply deep seabed texture"></property>
                <property num="0x69ac5641" type="Float32" name="MaxWaterDepthForDeepSeaBedTexture" desc="Upto this water depth we use deep seabed texture for terrain (No texturing beyond that depth)"></property>
                <property num="0x29ab15c0" type="Float32" name="WaterDepthForMaxAlpha" desc="At this depth (meters), water becomes opaque"></property>
                <property num="0x29ab15c1" type="Uint8" name="WaterMinAlpha" desc="Min alpha of water"></property>
                <property num="0x29ab15c2" type="Float32" name="WaterDepthToColorGradientFactor" desc="Number of pixels in the gradient corresponding to each meter of water depth"></property>
                <property num="0x29ab15c3" type="Bool" name="DisplayWaterSurface" desc="Enable/Disable the display of water surface"></property>
                <property num="0x29ab15c4" type="Bool" name="DisplayTerrainSurface" desc="Enable/Disable the display of terrain surface"></property>
                <property num="0x29ab15c5" type="Float32" name="WaterNightColorAdjustment" desc="Modifications to the r,g,b of water at night"></property>
                <property num="0x29ab15c6" type="Float32" name="CityEdgeLayerHeights" desc="Heights (meters) of all but the bottom-most layers on city edge"></property>
                <property num="0x29ab15c7" type="Float32" name="CityEdgeBrightnessKludgeFactor" desc="Multiplication factor to tune the brightness of cliffs on city edges"></property>
                <property num="0x69db8d00" type="Uint32" name="TextureUpdateIntervalForTerrainBrushes" desc="Controls how often terrain texture updates happen while applying terrain brushes"></property>
                <property num="0x69db8d01" type="Float32" name="ModKey1StrengthMultiplier" desc="Controls how the brush strength is modified by the control key"></property>
                <property num="0x69db8d02" type="Float32" name="ModKey1WidthMultiplier" desc="Controls how the brush strength is modified by the control key"></property>
                <property num="0x69db8d03" type="Float32" name="ModKey2StrengthMultiplier" desc="Controls how the brush strength is modified by the shift key"></property>
                <property num="0x69db8d04" type="Float32" name="ModKey2WidthMultiplier" desc="Controls how the brush strength is modified by the shift key"></property>
                <property num="0x69db8d05" type="Float32" name="ApplicationTimeIntervalForFullBrushStrength" desc="Time interval (secs) between applications to get full brush strength"></property>
            </group>
            <group name="Lava">
                <property num="0x69987e60" type="Float32" name="LavaColorGradientMapFactor" desc="Number of pixels in color gradient corresponding to every meter of lava depth"></property>
                <property num="0x69987e61" type="Float32" name="LavaMaxFlowRate" desc="Higher the viscosity, lower should this number be."></property>
                <property num="0x69987e62" type="Float32" name="LavaHtDiffForMaxFlowRate" desc="Lava height differential at which the max flow rate is reached"></property>
                <property num="0x69987e63" type="Float32" name="LavaLiquidToSolidConversionFactor" desc="When unit amount of lava solidifies, it increases the terrain height by this much"></property>
                <property num="0x69987e64" type="Uint8" name="LavaMinAlpha" desc="Min alpha for lava"></property>
                <property num="0x69987e65" type="Float32" name="LavaMinAlphaDepth" desc="When the lava depth is less than this, we set alpha to be LavaMinAlpha"></property>
                <property num="0x69987e66" type="Float32" name="LavaMaxAlphaDepth" desc="If lava depth is more than this, it becomes opaque (i.e., max alpha)"></property>
                <property num="0x69987e67" type="Float32" name="LavaScorchedTerrainDecalSize" desc="Width of scorched terrain decal (meters)"></property>
                <property num="0x69987e68" type="Float32" name="LavaUnderWaterSolidificationMultiple" desc="Solidification rate under water this many times that over land"></property>
                <property num="0x69987e69" type="Float32" name="LavaDepthBurnThreshold" desc="The lava depth at which occupants will catch on fire"></property>
                <property num="0x69987e6a" type="Float32" name="LavaDepthDeepFryThreshold" desc="The lava depth at which occupants will instantly burn down"></property>
                <property num="0x69987e6b" type="Uint32" name="LavaAnimationFrameDuration" desc="Duration of each lava texture animation frame (microsecs)"></property>
                <property num="0x69987e6c" type="Float32" name="LavaMinAmountForDepositToHappen" desc="If lava amount is less than this, we don't deposit it (We simply dry it up!)"></property>
                <property num="0x69987e6d" type="Uint32" name="LavaScorchDecalLifeTime" desc="Life time of scorch decal(microsecs)"></property>
                <property num="0x69987e6e" type="Float32" name="LavaScorchDecalFadeInTime" desc="Fade in time (Secs) of scorch decal"></property>
                <property num="0x69987e6f" type="Float32" name="LavaScorchDecalFadeOutTime" desc="Fade out time (Secs) of scorch decal"></property>
            </group>
            <group name="Water">
                <group name="Water Riples">
                    <property num="0x491c9c00" type="Bool" name="RipplesEnabled" desc="Enable/disable ripples"></property>
                    <property num="0x491c9c01" type="Uint32" name="RippleMinShoreSizeForPlacement" desc="Place ripples only if the shore is these many cells long"></property>
                    <property num="0x491c9c02" type="Float32" name="RippleQuadWidth" desc="Approximate width of the quads along the ribbon axis (meters)"></property>
                    <property num="0x491c9c03" type="Float32" name="RippleLandVertexHtAboveSeaLevel" desc="Land side of the ribbon is keptabove sea level to get ripple washing the beach effect"></property>
                    <property num="0x491c9c04" type="Float32" name="RippleTextureUIncrementPerQuad" desc="What portion of the texture corresponds to each quad"></property>
                    <property num="0x491c9c05" type="Float32" name="RippleWaterSideRibbonWidth" desc="Dist (meters) from ribbon center to the quad edge on water side"></property>
                    <property num="0x491c9c06" type="Float32" name="RippleLandSideRibbonWidth" desc="Dist (meters) from ribbon center to the quad edge on land side"></property>
                    <property num="0x491c9c07" type="Uint32" name="RippleMicroSecsPerFrame" desc="Microseconds spent in each frame of animation"></property>
                    <property num="0x491c9c08" type="Uint8" name="RippleLandVertexAlpha" desc="Alpha values for the ribbon vertices on the land side"></property>
                    <property num="0x491c9c09" type="Uint8" name="RippleWaterVertexAlpha" desc="Alpha values for the ribbon vertices on the water side"></property>
                    <property num="0x491c9c0a" type="Float32" name="RippleWaterSideRibbonWidthVariation" desc="Factor governing the variation of the ribbon width [0-1]"></property>
                    <property num="0x491c9c0b" type="Float32" name="RippleConcavityThresholdAngle" desc="If the variation in ripple tangent direction is more than this, we break the ripple there"></property>
                    <property num="0x491c9c0c" type="Uint32" name="RippleTerrainUpdateAreaThreshold" desc="If the area (square cells) of terrain edits exceeds this, ripples get reevaluated"></property>
                    <property num="0x491c9c0d" type="Uint32" name="RippleAlphaIncrementSteps" desc="On the edges of the ripples, alpha increments over these many steps to reach its max"></property>
                </group>
                <group name="Water Waves">
                    <property num="0x6932dc00" type="Float32" name="DistFromShoreToWaveStartLocation" desc="Distance (meters) from the shore to the starting location of waves"></property>
                    <property num="0x6932dc01" type="Float32" name="WaveMinProductionInterval" desc="Min time (sec) between the production of successive waves"></property>
                    <property num="0x6932dc02" type="Float32" name="WaveMaxProductionInterval" desc="Max time (sec) between the production of successive waves"></property>
                    <property num="0x6932dc03" type="Float32" name="WaveInnerRadius" desc="Inner radius (meter) of the wave arc"></property>
                    <property num="0x6932dc04" type="Float32" name="WaveOuterRadius" desc="Outer radius (meter) of the wave arc"></property>
                    <property num="0x6932dc05" type="Float32" name="WaveArcAngle" desc="Arc angle (degrees) for the wave"></property>
                    <property num="0x6932dc06" type="Float32" name="WaveMinTimeInState" desc="Min time (sec) the wave spends in each of the states"></property>
                    <property num="0x6932dc07" type="Float32" name="WaveMaxTimeInState" desc="Max time (sec) the wave spends in each of the states"></property>
                    <property num="0x6932dc08" type="Float32" name="WaveInitialMoveSpeed" desc="Initial movement speed (meter/sec) of  the wave"></property>
                    <property num="0x6932dc09" type="Float32" name="WaveInitialExpandSpeed" desc="Initial expansion speed (meter/sec) of  the wave"></property>
                    <property num="0x6932dc0a" type="Float32" name="WaveMinMoveSpeed" desc="Min movement speed (meter/sec) of  the wave"></property>
                    <property num="0x6932dc0b" type="Float32" name="WaveMinExpandSpeed" desc="Min expansion speed (meter/sec) of  the wave"></property>
                    <property num="0x6932dc0c" type="Float32" name="WaveMaxMoveSpeed" desc="Max movement speed (meter/sec) of  the wave"></property>
                    <property num="0x6932dc0d" type="Float32" name="WaveMaxExpandSpeed" desc="Max expansion speed (meter/sec) of  the wave"></property>
                    <property num="0x6932dc0e" type="Float32" name="WaveMinExpandAcceleration" desc="Min acceleration of expansion in each of the states"></property>
                    <property num="0x6932dc0f" type="Float32" name="WaveMaxExpandAcceleration" desc="Max acceleration of expansion in each of the states"></property>
                    <property num="0x6932dc10" type="Float32" name="WaveMinMoveAcceleration" desc="Min acceleration of movement in each of the states"></property>
                    <property num="0x6932dc11" type="Float32" name="WaveMaxMoveAcceleration" desc="Max acceleration of movement in each of the states"></property>
                    <property num="0x6932dc12" type="Uint32" name="MaxWaves" desc="Maximum number of waves in the city"></property>
                    <property num="0x6932dc13" type="Float32" name="InterWaveGap" desc="Gap (meters) between two waves"></property>
                    <property num="0x6932dc14" type="Float32" name="WaveMaxOrientationDifference" desc="Maximum difference in the orientation of different waves"></property>
                </group>
                <group name="Water Shimmer">
                    <property num="0xa91cbe00" type="Float32" name="ShimmerMinQuadWidth" desc="Min quad widths (meters) in different zooms"></property>
                    <property num="0xa91cbe01" type="Float32" name="ShimmerMaxQuadWidth" desc="Max quad widths (meters) in different zooms"></property>
                    <property num="0xa91cbe02" type="Uint32" name="ShimmerQuadDensity" desc="Number of shimmer quads to have if all of a 256x256 happenned to be water"></property>
                </group>
            </group>
            <group name="Terrain Textures">
                <property num="0x09c2aef0" type="Float32" name="TextureBlendStrength" desc="Higher this value, the more weightage this texture gets while blending with others"></property>
                <property num="0x09c2aef3" type="Float32" name="Z0_TextureSpreadCurve" desc="Specifiess how does the texture strength fall off with distance"></property>
                <property num="0x09c2aef4" type="Float32" name="Z1_TextureSpreadCurve" desc="Specifiess how does the texture strength fall off with distance"></property>
                <property num="0x09c2aef5" type="Float32" name="Z2_TextureSpreadCurve" desc="Specifiess how does the texture strength fall off with distance"></property>
                <property num="0x09c2aef6" type="Float32" name="Z3_TextureSpreadCurve" desc="Specifiess how does the texture strength fall off with distance"></property>
                <property num="0x09c2aef7" type="Float32" name="Z4_TextureSpreadCurve" desc="Specifiess how does the texture strength fall off with distance"></property>
            </group>
            <group name="Brushes">
                <group name="Brush Categories">
                    <property num="0x8a3143b7" type="Uint32" name="CategoryGodMisc" desc="Brush belongs to god mode, miscellaneous category"></property>
                    <property num="0x2a3143d7" type="Uint32" name="CategoryMayorMisc" desc="Brush belongs to mayor mode, miscellaneous category"></property>
                    <property num="0x6a33d682" type="Uint32" name="CategoryGodMountain" desc="Brush belongs to god mode, mountain category"></property>
                    <property num="0xea33d694" type="Uint32" name="CategoryGodValley" desc="Brush belongs to god mode, valley category"></property>
                </group>
                <group name="Brush UI Elements">
                    <property num="0xaa2ed800" type="Uint32" name="UIActiveEffectID" desc="UI effect in active state"></property>
                    <property num="0xaa2ed801" type="Uint32" name="UIIdleEffectID" desc="UI effect in idle state"></property>
                    <property num="0xaa2ed802" type="Uint32" name="UIActiveIconID" desc="Icon effect in active state"></property>
                    <property num="0xaa2ed803" type="Uint32" name="UIIdleIconID" desc="Icon effect in idle state"></property>
                    <property num="0xaa2ed804" type="Uint32" name="UIActiveCursorId" desc="Hardware cursor ID for active state"></property>
                    <property num="0xaa2ed805" type="Uint32" name="UIIdleCursorId" desc="Hardware cursor ID for idle state"></property>
                </group>
                <group name="Plugin Brushes"></group>
                <group name="Brush Components">
                    <property num="0x8a020200" type="Uint32" name="Comp1TextureId" desc="Component1: Texture id"></property>
                    <property num="0x8a020201" type="Bool" name="Comp1AlignedWithMouseMoveDirection" desc="Component1: should be aligned with the mouse movement direction"></property>
                    <property num="0x8a020202" type="Float32" name="Comp1Width" desc="Component1: zoom specific widths"></property>
                    <property num="0x8a020203" type="Float32" name="Comp1Strength" desc="Component1: zoom specific brush strengths"></property>
                    <property num="0x8a020204" type="Uint8" name="Comp1BaseTextureVal" desc="Component1: Base texture value (Raise/lower if value is more/less than this)"></property>
                    <property num="0x8a020205" type="Uint32" name="Comp1OperationId" desc="Component1: Operation id"></property>
                    <property num="0x8a020206" type="Uint32" name="Comp1DecalTextureId" desc="Component1: Decal texture id for paint brush"></property>
                    <property num="0x8a020207" type="Float32" name="Comp1MaxDecalRotation" desc="Component1: Max rotation of decal texture (degrees)"></property>
                    <property num="0x8a020208" type="Uint32" name="Comp1MaxPlacementsPerCell" desc="Component1: Max # of effects/decals placed in a cell during a scrubbing session"></property>
                    <property num="0x8a020209" type="Uint32" name="Comp1IDOfEffectToPlace" desc="Component1: (group id, instance id) of the effect to place"></property>
                    <property num="0x8a020300" type="Uint32" name="Comp2TextureId" desc="Component2: Texture id"></property>
                    <property num="0x8a020301" type="Bool" name="Comp2AlignedWithMouseMoveDirection" desc="Component2: should be aligned with the mouse movement direction"></property>
                    <property num="0x8a020302" type="Float32" name="Comp2Width" desc="Component2: zoom specific widths"></property>
                    <property num="0x8a020303" type="Float32" name="Comp2Strength" desc="Component2: zoom specific brush strengths"></property>
                    <property num="0x8a020304" type="Uint8" name="Comp2BaseTextureVal" desc="Component2: Base texture value (Raise/lower if value is more/less than this)"></property>
                    <property num="0x8a020305" type="Uint32" name="Comp2OperationId" desc="Component2: Operation id"></property>
                    <property num="0x8a020306" type="Uint32" name="Comp2DecalTextureId" desc="Component2: Decal texture id for paint brush"></property>
                    <property num="0x8a020307" type="Float32" name="Comp2MaxDecalRotation" desc="Component2: Max rotation of decal texture (degrees)"></property>
                    <property num="0x8a020308" type="Uint32" name="Comp2MaxPlacementsPerCell" desc="Component2: Max # of effects/decals placed in a cell during a scrubbing session"></property>
                    <property num="0x8a020309" type="Uint32" name="Comp2IDOfEffectToPlace" desc="Component2: (group id, instance id) of the effect to place"></property>
                    <property num="0x8a020400" type="Uint32" name="Comp3TextureId" desc="Component3: Texture id"></property>
                    <property num="0x8a020401" type="Bool" name="Comp3AlignedWithMouseMoveDirection" desc="Component3: should be aligned with the mouse movement direction"></property>
                    <property num="0x8a020402" type="Float32" name="Comp3Width" desc="Component3: zoom specific widths"></property>
                    <property num="0x8a020403" type="Float32" name="Comp3Strength" desc="Component3: zoom specific brush strengths"></property>
                    <property num="0x8a020404" type="Uint8" name="Comp3BaseTextureVal" desc="Component3: Base texture value (Raise/lower if value is more/less than this)"></property>
                    <property num="0x8a020405" type="Uint32" name="Comp3OperationId" desc="Component3: Operation id"></property>
                    <property num="0x8a020406" type="Uint32" name="Comp3DecalTextureId" desc="Component3: Decal texture id for paint brush"></property>
                    <property num="0x8a020407" type="Float32" name="Comp3MaxDecalRotation" desc="Component3: Max rotation of decal texture (degrees)"></property>
                    <property num="0x8a020408" type="Uint32" name="Comp3MaxPlacementsPerCell" desc="Component3: Max # of effects/decals placed in a cell during a scrubbing session"></property>
                    <property num="0x8a020409" type="Uint32" name="Comp3IDOfEffectToPlace" desc="Component3: (group id, instance id) of the effect to place"></property>
                    <property num="0x8a020500" type="Uint32" name="Comp4TextureId" desc="Component4: Texture id"></property>
                    <property num="0x8a020501" type="Bool" name="Comp4AlignedWithMouseMoveDirection" desc="Component4: should be aligned with the mouse movement direction"></property>
                    <property num="0x8a020502" type="Float32" name="Comp4Width" desc="Component4: zoom specific widths"></property>
                    <property num="0x8a020503" type="Float32" name="Comp4Strength" desc="Component4: zoom specific brush strengths"></property>
                    <property num="0x8a020504" type="Uint8" name="Comp4BaseTextureVal" desc="Component4: Base texture value (Raise/lower if value is more/less than this)"></property>
                    <property num="0x8a020505" type="Uint32" name="Comp4OperationId" desc="Component4: Operation id"></property>
                    <property num="0x8a020506" type="Uint32" name="Comp4DecalTextureId" desc="Component4: Decal texture id for paint brush"></property>
                    <property num="0x8a020507" type="Float32" name="Comp4MaxDecalRotation" desc="Component4: Max rotation of decal texture (degrees)"></property>
                    <property num="0x8a020508" type="Uint32" name="Comp4MaxPlacementsPerCell" desc="Component4: Max # of effects/decals placed in a cell during a scrubbing session"></property>
                    <property num="0x8a020509" type="Uint32" name="Comp4IDOfEffectToPlace" desc="Component4: (group id, instance id) of the effect to place"></property>
                </group>
                <property num="0x8a020101" type="Float32" name="BrushCost" desc="Cost/application at different zoom levels"></property>
                <property num="0x8a020102" type="Float32" name="BrushWiggleAmount" desc="Cost/application at different zoom levels"></property>
                <property num="0x8a020103" type="Uint32" name="BrushActiveSound" desc="Sound Id"></property>
                <property num="0x8a020104" type="Uint32" name="BrushReleaseOneShot" desc="Sound Id"></property>
                <group name="OBSOLETE">
                    <property num="0x48cd7bb2" type="Float32" name="MountainBaseBrushHtFactor" desc="Factor determining the extent of height modification by mountain base brush" />
                    <property num="0x48cd7bb3" type="Float32" name="MountainRidgeBrushHtFactor" desc="Factor determining the extent of height modification by mountain ridge brush" />
                    <property num="0x89861863" type="Float32" name="VolcanoBrushAngleIncrement" desc="Angle (in degrees) by which volcano brush rotates between successive applications" />
                </group>
            </group>
            <group name="Lighting">
                <property num="0x29189beb" type="Float32" name="Texture floor" desc="Brightness floor for terrain textures"></property>
                <property num="0x29189bec" type="Bool" name="Use environment map" desc="Whether to use art-supplied environment map for lighting"></property>
                <property num="0x29189bed" type="Bool" name="Test environment map" desc="Use test environment map to determine orientation"></property>
                <property num="0x29189bee" type="Float32" name="Terrain shadow amount" desc="How much models are shadowed by the terrain"></property>
                <property num="0x29189bef" type="Bool" name="Test terrain shadowing" desc="Test model shadowing by terrain"></property>
                <property num="0x29189bf0" type="Float32" name="Daytime global color" desc="Global lighting value for day time -- everything gets multiplied by this."></property>
                <property num="0x09b6d6ae" type="Float32" name="Nighttime global color" desc="Global lighting value for night time -- everything gets multiplied by this."></property>
                <property num="0x29189bf1" type="Float32" name="Flora terrain shadow amount" desc="How much flora are shadowed by the terrain"></property>
                <property num="0x29189bf2" type="Float32" name="Model terrain shadow amount" desc="How much models (buildings) are shadowed by the terrain"></property>
                <property num="0x29189bf3" type="Float32" name="Automata terrain shadow amount" desc="How much automata are shadowed by the terrain"></property>
                <property num="0x29189bf4" type="Float32" name="Atmospheric scattering colour" desc="The colour the terrain gets tinted by in the distance"></property>
                <property num="0x29189bf5" type="Float32" name="Atmospheric scattering" desc="How much the terrain gets tinted"></property>
                <property num="0x29189bf6" type="Float32" name="LightingUpdateDelta" desc="The required change in brightness before the terrain gets updated"></property>
                <property num="0x29189bf7" type="Float32" name="NightThreshold" desc="The brightness below which night falls"></property>
                <property num="0x085489c8" type="Uint32" name="Shadow Texture ID" desc="ID of FSH texture to use for flora's shadow"></property>
                <property num="0x085489c9" type="Float32" name="Shadow offset" desc="Offset of shadow from object center"></property>
                <property num="0x085489ca" type="Float32" name="Shadow size" desc="Size of shadow"></property>
                <property num="0x085489cb" type="Float32" name="Shadow color" desc="Color of shadow"></property>
                <property num="0x085489cc" type="Float32" name="Shadow strength" desc="Strength of flora shadows"></property>
                <property num="0x085489cd" type="Float32" name="Shadow threshold" desc="Mask threshold of flora shadows"></property>
                <property num="0x085489ce" type="Float32" name="Sun direction" desc="Sun direction in degrees, clockwise from Z axis"></property>
                <property num="0x085489cf" type="Float32" name="Sun pitch" desc="Sun pitch in degrees, up from XZ plane"></property>
                <property num="0x085489d0" type="Float32" name="Hill shadow strength" desc="Strength of hill shadows"></property>
                <property num="0x085489d1" type="Float32" name="Hill shadow warp" desc="Can be used to bend shadows downwards (below 1) or upwards (above 1)"></property>
                <property num="0x085489d2" type="Float32" name="Hill shadow fade distance" desc="Depth below the hill shadow at which object shadows fade to nothingness"></property>
            </group>
            <group name="Budget Tuning">
                <property num="0x6a9c7718" type="Sint64" name="Budget: Initial Funds" desc="Starting funds for a new city, by difficult level"></property>
                <property num="0x890e0a99" type="Float32" name="Budget: MaxTaxRate" desc="Maximum Tax Rate - something like maybe 25%"></property>
                <property num="0x090e0a9f" type="Sint64" name="Budget: MinAllowableFunds" desc="The minimum before you are bankrupt. Usually something like -100,000"></property>
                <property num="0x490e0aa6" type="Sint64" name="Budget: BondIncrement" desc="Bonds are issued in values that are of this increment"></property>
                <property num="0x090e0aac" type="Uint8" name="Budget: MaxBonds" desc="The maximum number of outstanding bonds that is allowed"></property>
                <property num="0x890e0ab4" type="Sint64" name="Budget: MaxBondAmount" desc="The maximum amount of outstanding bond debt that is allowed"></property>
                <property num="0x8a3fb98d" type="Float32" name="Budget: BondInterestRate" desc="Interest applied to principal once and added to total"></property>
                <property num="0x0a3fb9a8" type="Uint32" name="Budget: BondPaybackMonths" desc="Number of months to payback a bond"></property>
                <property num="0xa9188ef5" type="Float32" name="Budget: TaxRateOccWeight_R$" desc="Multiplier to tweak the relative weighting of the R$ occupant type's taxes"></property>
                <property num="0xe918c920" type="Float32" name="Budget: TaxRateOccWeight_R$$" desc="Multiplier to tweak the relative weighting of the R$$ occupant type's taxes"></property>
                <property num="0x4918c925" type="Float32" name="Budget: TaxRateOccWeight_R$$$" desc="Multiplier to tweak the relative weighting of the R$$$ occupant type's taxes"></property>
                <property num="0xa918c929" type="Float32" name="Budget: TaxRateOccWeight_Cs$" desc="Multiplier to tweak the relative weighting of the CS$ occupant type's taxes"></property>
                <property num="0x4918c92c" type="Float32" name="Budget: TaxRateOccWeight_Cs$$" desc="Multiplier to tweak the relative weighting of the CS$$ occupant type's taxes"></property>
                <property num="0x4918c930" type="Float32" name="Budget: TaxRateOccWeight_Cs$$$" desc="Multiplier to tweak the relative weighting of the CS$$$ occupant type's taxes"></property>
                <property num="0x8918c937" type="Float32" name="Budget: TaxRateOccWeight_Co$$" desc="Multiplier to tweak the relative weighting of the CO$$ occupant type's taxes"></property>
                <property num="0x4918c93a" type="Float32" name="Budget: TaxRateOccWeight_Co$$$" desc="Multiplier to tweak the relative weighting of the CO$$$ occupant type's taxes"></property>
                <property num="0x69a36e40" type="Float32" name="Budget: TaxRateOccWeight_IResource" desc="Multiplier to tweak the relative weighting of the IResource occupant type's taxes"></property>
                <property num="0xa918c942" type="Float32" name="Budget: TaxRateOccWeight_IDirty" desc="Multiplier to tweak the relative weighting of the IDirty occupant type's taxes"></property>
                <property num="0x8918c93e" type="Float32" name="Budget: TaxRateOccWeight_IManufacturing" desc="Multiplier to tweak the relative weighting of the IManufacturing occupant type's taxes"></property>
                <property num="0xa9a36e47" type="Float32" name="Budget: TaxRateOccWeight_IHighTech" desc="Multiplier to tweak the relative weighting of the IHighTech occupant type's taxes"></property>
                <property num="0x8a480df7" type="Float32" name="Budget: Waning Wealth Property Tax Multiplier" desc="Multiplier applied to a building tax value for each level of difference in wealth level"></property>
                <property num="0x4ac519b8" type="Float32" name="Budget: Land Value to Simoleans" desc="For each taxable square of the given land value, the number of Simoleans produced"></property>
                <property num="0xebff69e7" type="Float32" name="Budget: Difficulty Tax Multiplier" desc="Multiplier for tax revenue by difficulty type"></property>
                <property num="0x0c032488" type="Float32" name="Budget: Initial Tax Rate" desc="Starting tax rate for all developer types, indexed by difficulty type"></property>
            </group>
            <group name="UI Tuning">
                <property num="0xe90f5de4" type="Uint32" name="IntelliScrollInnerRadiusPixels" desc="When right-click scrolling, this is the number of pixels away from the anchor that the user must move before scrolling begins."></property>
                <property num="0xa90f5dec" type="Uint32" name="IntelliScrollOuterRadiusPixels" desc="When right-click scrolling, this is the number of pixels away from the anchor at which the scrolling speed maxes out."></property>
                <property num="0x4975dd20" type="Float32" name="ScrollingDeceleration" desc="Amount to decelerate scrolling speed per GZPaint tick.  Use with ScrollingDecelerationIsPercentage."></property>
                <property num="0x4975dd25" type="Bool" name="ScrollingDecelerationIsPercentage" desc="True if ScrollingDeceleration should be the percentage (0.0-1.0) to decelerate per GZPaint tick.  False if that amount should be the absolute amount to decrement the speed per tick."></property>
                <property num="0x49e5522f" type="Float32" name="AutoScrollSpeed" desc="Speed of scrolling when cursor hits screen edge."></property>
                <property num="0xa9e581fb" type="Float32" name="KeyboardScrollSpeed" desc="Speed of scrolling when arrow key is held down."></property>
            </group>
            <group name="Region UI Tuning">
                <property num="0xca383ca2" type="Float32" name="ScrollingDeceleration" desc="Percent amount to decelerate scrolling speed per GZPaint tick."></property>
                <property num="0xca383ca3" type="Uint32" name="IntelliScrollOuterRadiusPixels" desc="When right-click scrolling, this is the number of pixels away from the anchor at which the scrolling speed maxes out."></property>
                <property num="0xca383ca4" type="Uint32" name="IntelliScrollInnerRadiusPixels" desc="When right-click scrolling, this is the number of pixels away from the anchor that the user must move before scrolling begins."></property>
                <property num="0xca383ca5" type="Uint32" name="HullHorizontal" desc="Horizontal scroll hull edge in pixels."></property>
                <property num="0xca383ca6" type="Uint32" name="HullVertical" desc="Vertical scroll hull edge in pixels."></property>
                <property num="0xca383ca7" type="Float32" name="ScrollGradient" desc="# of pixels per speed increase (higher is slower)."></property>
                <property num="0xca383ca8" type="Uint32" name="WaterErosionIterations" desc="Auto gen region: water erosion steps."></property>
                <property num="0xca383ca9" type="Uint32" name="FlowStepsForWaterErosion" desc="Auto gen region: water erosion flow steps."></property>
                <property num="0xca383caa" type="Uint32" name="SmoothingStepsForWindErosion" desc="Auto gen region: wind erosion steps."></property>
                <property num="0xca383cab" type="Uint32" name="RegionUI: Grid color" desc="Color of regional grid, in 0xRRGGBB form."></property>
                <property num="0xca383cac" type="Uint32" name="RegionUI: Highlight" desc="Color of regional highlight, in 0xRRGGBB form."></property>
                <property num="0xca383cad" type="Uint8" name="RegionUI: Plains map level" desc="Height map fill value for new cities in plains regions (0-255)."></property>
                <property num="0xca383cae" type="Uint8" name="RegionUI: Water map level" desc="Height map fill value for new cities in water regions (0-255)."></property>
                <property num="0xca383cb1" type="Uint8" name="RegionUI: Cloud opacity range" desc="Range of opacity values for clouds (min,max; 0-255)."></property>
            </group>
            <group name="City Obliteration Tuning">
                <property num="0x6a5a6700" type="Uint32" name="Obliterate_ClusterWindowWidth" desc="Width in cells of each demolition cluster window"></property>
                <property num="0x6a5a6701" type="Float32" name="Obliterate_NumClustersVsTime" desc="Cumulative number of clusters to demolish as a function of time (secs)"></property>
                <property num="0x6a5a6702" type="Float32" name="Obliterate_SmokeScreenFormationTime" desc="Time (secs) between the creation of Finale effect and our last big wipe-out sweep of the ciry"></property>
            </group>
            <group name="Automata Tuning">
                <property num="0x696e88db" type="Uint8" name="Zone Filter" desc="Zone types compatible with automaton (none == can appear in any zone)"></property>
                <property num="0x296e88e9" type="Uint8" name="Wealth Filter" desc="Zone wealth values compatible with automaton (none == can appear around any wealth)"></property>
                <property num="0x496e88f1" type="Uint8" name="Zone Purpose Filter" desc="Zone purpose types compatible with automaton (none == can appear around any purpose)"></property>
                <property num="0xc973c9aa" type="Uint8" name="Layer Filter" desc="Which automata layers this model can appear in"></property>
                <property num="0x09c80416" type="Uint32" name="Model Resource Key" desc="Model type, group, and instance ID"></property>
                <property num="0x09c80417" type="Uint32" name="Auxiliary Model 1 Key (headlights)" desc="Type/Group/Instance ID for headlight/taillight model"></property>
                <property num="0xc9e69af6" type="Uint32" name="Auxiliary Model 2 Key" desc="Type/Group/Instance for additional model (e.g. flashing lights on emerg. vehicles)"></property>
                <property num="0xec214180" type="Uint32" name="Auxiliary Model 3 Key" desc="Type/Group/Instance for additional model"></property>
                <property num="0xcc21420d" type="Uint32" name="Auto-load Auxiliary Models" desc="Index (1,2,3,etc.) of auxiliary model to load automatically on Init"></property>
                <property num="0xaa5a9633" type="Bool" name="Ignore Lighting" desc="Automaton should not be lit by the lighting manager"></property>
                <property num="0x2a62d9f3" type="Uint32" name="Crime Type" desc="Crime sims only - which crime type this model represents"></property>
                <property num="0xea958845" type="Uint8" name="Anim Loop Count Range" desc="For static (one-shot) sims: How many times automaton will loop through its animation before fading out"></property>
                <property num="0x4b733e12" type="String" name="Automaton Display Name" desc="Player-visible name of this automaton during query"></property>
                <property num="0xcbbba52f" type="Uint32" name="Sound Bank ID" desc="Refers to an .abk file with player-drive sounds"></property>
                <property num="0x8bbd735e" type="Bool" name="Conditional Automaton" desc="If true, automaton will be ghosted in the earned vehicle catalog view until an advisor condition is satisfied"></property>
                <property num="0xebfc5e26" type="Uint32" name="My Sim Wealth Level" desc="0 = $, 1 = $$, 2 = $$$"></property>
                <property num="0xebfc5e5e" type="Uint32" name="My Sim Icon Image" desc="Resource ID of the icon to be used in the choose vehicle dialog"></property>
                <property num="0xebfc5fba" type="Sint32" name="My Sim Sort Order" desc="Relative sort ordering in the catalog"></property>
                <property num="0x2c0c922e" type="Uint32" name="MySim Walk Gender" desc="Male=0, Female=1, used by MySim ped chooser"></property>
                <property num="0xec15654a" type="Float32" name="Mayor Limo Money Properties" desc="Cost per second, desirability radius meters, desirability magnitude"></property>
                <property num="0x2c23a3a1" type="Uint32" name="Final Group Id" desc="Automata group ID which controls the creation and driving properties for this automaton"></property>
                <property num="0xac2bc81c" type="Uint32" name="Shadow Model Key" desc="Model type, group, and instance for shadow model"></property>
            </group>
            <group name="Construction Tuning Exemplar">
                <property num="0x8989ec22" type="Float32" name="Segment Height" desc="Height of one growth level"></property>
                <property num="0x8989ec23" type="Float32" name="Post Width" desc="Width of corner posts"></property>
                <property num="0x8989ec24" type="Float32" name="Scaffold Gap" desc="Gap between scaffold and building"></property>
                <property num="0x8989ec25" type="Float32" name="Plank Width" desc="Width of the planks that run around the top of the scaffold"></property>
                <property num="0x8989ec26" type="Float32" name="Plank Texture Scale" desc="How large the plank texture is, in meters"></property>
                <property num="0x8989ec27" type="Float32" name="Scaffold Texture Scale" desc="How large the scaffold texture is, in meters"></property>
                <property num="0x8989ec28" type="Float32" name="Girders Texture Scale" desc="How large the top girders texture is, in meters"></property>
                <property num="0x8989ec29" type="Float32" name="Scaffold Growth Rate" desc="How fast scaffolding goes up in meters per day"></property>
                <property num="0x8989ec2a" type="Float32" name="Scaffold Removal Rate" desc="How fast scaffolding is removed in meters per day"></property>
                <property num="0x8989ec2b" type="Float32" name="Crane Post Width" desc="Width of the post that holds up the crane model"></property>
                <property num="0x8989ec2c" type="Float32" name="Crane Post Gap" desc="Size of gap between the crane post and the scaffold"></property>
                <property num="0x8989ec2d" type="Float32" name="Crane Height Above Scaffold" desc="How far above the scaffold to place the bottom of the crane"></property>
                <property num="0x8989ec2e" type="Float32" name="Crane Rotation Time" desc="Milliseconds to complete one full rotation"></property>
            </group>
            <group name="Automata Tuning Exemplar">
                <property num="0x4998c89c" type="Float32" name="Vehicle Density Curve" desc="Maps city population to a multiplier (0.0-1.0) for vehicle density"></property>
                <property num="0x4998c901" type="Float32" name="Ped Density Curve" desc="Maps city population to a multiplier (0.0-1.0) for ped (sim) density"></property>
                <property num="0x4a511873" type="Float32" name="Bus Density Curve" desc="Maps city population to a multiplier (0.0-1.0) for bus density"></property>
                <property num="0x0a51188a" type="Float32" name="Freight Train Density Curve" desc="Maps city population to a multiplier (0.0-1.0) for freight train density"></property>
                <property num="0x2a511893" type="Float32" name="Commute Train Density Curve" desc="Maps city population to a multiplier (0.0-1.0) for commute train density"></property>
                <property num="0xca51189a" type="Float32" name="Freight Truck Density Curve" desc="Maps city population to a multiplier (0.0-1.0) for freight truck density"></property>
                <property num="0x4998c89e" type="Float32" name="Max Vehicles Per Second" desc="Max number of vehicles to cross a tile per second"></property>
                <property num="0x4998c903" type="Float32" name="Max Peds Per Second" desc="Max number of peds to cross a tile per second"></property>
                <property num="0x8a511dd1" type="Float32" name="Max Buses Per Second" desc="Max number of buses to cross a tile per second"></property>
                <property num="0xea511de0" type="Float32" name="Max Freight Trains Per Second" desc="Max number of freight trains to cross a tile per second"></property>
                <property num="0xca511de6" type="Float32" name="Max Commute Trains Per Second" desc="Max number of commute trains to cross a tile per second"></property>
                <property num="0xca511df2" type="Float32" name="Max Freight Trucks Per Second" desc="Max number of freight trucks to cross a tile per second"></property>
                <property num="0x4998c89f" type="Uint32" name="Max Vehicles" desc="Maximum number of vehicles at one time"></property>
                <property num="0x4998c900" type="Uint32" name="Vehicle Min/Max KPH" desc="Minimum and maximum DEFAULT speed for vehicles, in kilometers per hour"></property>
                <property num="0x4998c904" type="Uint32" name="Max Peds" desc="Maximum number of pedestrianss at one time"></property>
                <property num="0x4998c905" type="Uint32" name="Ped Min/Max KPH" desc="Minimum and maximum DEFAULT speed for pedestrians, in kilometers per hour"></property>
                <property num="0x4998c908" type="Uint32" name="Max Aircraft" desc="Maximum number of aircraft at one time"></property>
                <property num="0x4998c90b" type="Uint32" name="Max Watercraft" desc="Maximum number of watercraft at one time"></property>
                <property num="0x4998c90c" type="Float32" name="Commute clock" desc="Maps time of day on 24-hour clock to a percentage of commute automata generated (0.0 - 1.0)"></property>
                <property num="0x4998c90d" type="Float32" name="Bus clock" desc="Maps time of day on 24-hour clock to a percentage of bus automata generated (0.0 - 1.0)"></property>
                <property num="0x4998c90e" type="Float32" name="Freight train clock" desc="Maps time of day on 24-hour clock to a percentage of freight train automata generated (0.0 - 1.0)"></property>
                <property num="0x4998c90f" type="Float32" name="Commute train clock" desc="Maps time of day on 24-hour clock to a percentage of commute train automata generated (0.0 - 1.0)"></property>
                <property num="0x4998c910" type="Float32" name="Occupant trip clock" desc="Maps time of day on 24-hour clock to a percentage of occupant trip automata generated (0.0 - 1.0)"></property>
                <property num="0x4998c911" type="Float32" name="Freight truck clock" desc="Maps time of day on 24-hour clock to a percentage of freight truck automata generated (0.0 - 1.0)"></property>
                <property num="0x4998c912" type="Float32" name="Stop Sign Delay" desc="How long in seconds an automaton will pause at a stop sign"></property>
                <property num="0x4998c913" type="Float32" name="Street Go Time" desc="How long in seconds traffic coming from secondary streets gets the green light"></property>
                <property num="0x4998c914" type="Float32" name="Road Go Time" desc="How long in seconds traffic coming from main roads gets the green light"></property>
                <property num="0x4998c915" type="Float32" name="Avenue Go Time" desc="How long in seconds traffic coming from avenues/boulevards gets the green light"></property>
                <property num="0x4998c916" type="Float32" name="Fade Time" desc="How long in seconds it takes automata to fade in or out"></property>
                <property num="0x4998c918" type="Uint8" name="Vehicle Min Zoom Visibility" desc="Lowest zoom level at which vehicles are visible"></property>
                <property num="0x4998c919" type="Uint8" name="Pedestrian Min Zoom Visibility" desc="Lowest zoom level at which pedestrians are visible"></property>
                <property num="0x4998c91a" type="Uint8" name="Aircraft Min Zoom Visibility" desc="Lowest zoom level at which aircraft are visible"></property>
                <property num="0x4998c91b" type="Uint8" name="Watercraft Min Zoom Visibility" desc="Lowest zoom level at which watercraft are visible"></property>
                <property num="0x4998c91c" type="Bool" name="Use 24-hour clock" desc="Automata should base traffic levels on 24-hour clock"></property>
                <property num="0x4998c89d" type="Uint8" name="Active Travel Types" desc="Which travel types are currently visible and simulated by the automata system"></property>
                <property num="0x4998c902" type="Uint8" name="Vehicle Lifespan Range" desc="Number of cells that occupant-trip vehicles should travel before disappearing"></property>
                <property num="0x4998c909" type="Uint8" name="Ped Lifespan Range" desc="Number of cells that occupant-trip pedestrians should travel before disappearing"></property>
                <property num="0x4998c90a" type="Float32" name="Occupant Trip Noise Range" desc="Range for random value used to dampen occupancy values when generating occupant trips"></property>
                <property num="0x4998c91d" type="Uint8" name="Occupant Trip Population Radius" desc="How many cells around a road tile the system will check population for occupant trips"></property>
                <property num="0x89aec88b" type="Float32" name="Emergency Vehicle Idle Time" desc="How long in seconds an emergency vehicle will remain idle when repathing or handling event"></property>
                <property num="0x89aec88c" type="Uint8" name="Emergency Vehicle Max Cell Distance" desc="Max distance in cells an emergency vehicle can stop from its dispatch destination"></property>
                <property num="0x89aec88d" type="Uint8" name="Emergency Vehicle Repath Attempts" desc="How many times an emergency vehicle will try to repath to its destination"></property>
                <property num="0x89aec88e" type="Uint32" name="Emergency Vehicle KPH" desc="Default speed for emergency vehicles, in kilometers per hour"></property>
                <property num="0xa9af1e54" type="Uint8" name="Occupant Trip Zone Filter" desc="Which zone types will generate occupant trips"></property>
                <property num="0xa9af1e55" type="Uint8" name="Occupant Trip Purpose Filter" desc="Which zone purpose types will generate occupant trips"></property>
                <property num="0x49be9565" type="Bool" name="Drive on Right" desc="DEBUG ONLY - Sims drive on the right side of the road, like proper Americans"></property>
                <property num="0xc9c18eae" type="Float32" name="Moving Van Frequency" desc="How often (0.0-1.0) a moving van will be created in response to a new residence"></property>
                <property num="0xa9d6cc17" type="Float32" name="Fire Crew Offsets" desc="Offsets (in meters) of fire team from center of engine and director from front of engine"></property>
                <property num="0xa9d6cc18" type="Float32" name="Fire Crew Competence Pct" desc="Min Percentage (0.0-1.0) of fire team efficiency that will give the super, normal, and incompetent animations"></property>
                <property num="0xc9da95d4" type="Float32" name="Attraction Threshold" desc="Magnitude of a repulsor or attractor at which peds will break their paths to get away from or closer to it"></property>
                <property num="0x29dd40c1" type="Float32" name="Path Offset Range for Peds" desc="Minimum (left side) and maximum (right side) range of offset from paths for pedestrians"></property>
                <property num="0x29dd40c2" type="Float32" name="Path Offset Range for Vehicles" desc="Minimum (left side) and maximum (right side) range of offset from paths for vehicles"></property>
                <property num="0xc9ee640a" type="Float32" name="Grade max angle" desc="Maximum angle (in degrees) of network grade that will change the speed of a vehicle"></property>
                <property num="0xc9ee640b" type="Float32" name="Grade speed multiplier" desc="Percentage that will be added to/subtracted from a vehicle's speed when driving up/down a grade at max angle"></property>
                <property num="0xc9ee640c" type="Float32" name="Fire Crew Max Stream Dist" desc="Max distance between fire and crew for the crew to aim its water stream at it"></property>
                <property num="0xc9ee640d" type="Uint8" name="Emergency Vehicle Clear Radius" desc="Number of tiles around emergency vehicles on which traffic will be removed"></property>
                <property num="0x6a09f62f" type="Float32" name="Crime Sim multiplier" desc="Percentage (0.0-1.0) of actual crimes in a cell that will generate a corresponding crime sim"></property>
                <property num="0x6a09f630" type="Uint8" name="Sim Prop anim range" desc="Min and Max number of times a one-shot sim will loop through its animation before fading out"></property>
                <property num="0x6a09f631" type="Float32" name="Crime layer clock" desc="Maps time of day on 24-hour clock to a percentage of crime props generated (0.0 - 1.0)"></property>
                <property num="0xea441c97" type="Uint8" name="Freight Train Length" desc="Min/max length in cars, including engine, of freight trains"></property>
                <property num="0x8a441c9c" type="Uint8" name="Commute Train Length" desc="Min/max length in cars, including engine, of commuter trains"></property>
                <property num="0x6a440d40" type="Uint32" name="Train Min/Max KPH" desc="Min/max speed of trains in kilometers per hour"></property>
                <property num="0x8a4efa75" type="Float32" name="Vehicle Skid" desc="Percentage (0.0 - 1.0) of skid that will be applied to vehicle turns.  0 = clamp to paths"></property>
                <property num="0x2a511cbc" type="Float32" name="Curve speed multiplier" desc="Multiplied by a vehicle's default speed when it goes around a curve"></property>
                <property num="0x0a53fd32" type="Uint32" name="Sims Per Train Car" desc="How many trips are satisfied by each train car.  Determines train length."></property>
                <property num="0xca5545ea" type="Uint32" name="Vehicle Blur Speed KPH" desc="Speed in KPH at which vehicles will draw motion blur effect."></property>
                <property num="0x6b42922c" type="Float32" name="Simulation Speed multiplier" desc="Multiplier for automata speed when sim is in slow, medium, fast, and player-drive mode.  1.0 = default speed"></property>
                <property num="0x4bae8fe0" type="Float32" name="Speed Multiplier by Network" desc="Multiply by default speed on road, rail, highway, street, pipe, powerline, avenue, subway, light rail, monorail, 1-way road, dirt road, ground highway"></property>
                <property num="0x4bae8fe1" type="Float32" name="Lane Switch Cost" desc="Cost to add per vehicle when deciding whether to switch lanes to pass slower-moving vehicles"></property>
                <property num="0x4bae8fe2" type="Float32" name="Lane Switch Max Distance" desc="Max distance in meters that a vehicle will switch lanes on a multi-lane network"></property>
                <property num="0xebfb4a0a" type="Uint8" name="Max CSIs" desc="Maximum number of city-situation-indicators that will be visible"></property>
                <property num="0xcc101142" type="Float32" name="Playerdrive Vehicles Per Second" desc="Desired # of vehicles per second that will be generated on roads during player-drive"></property>
                <property num="0x6c200139" type="Uint32" name="Playerdrive Vehicle Max Count" desc="Desired maximum # of vehicles in the world during player-drive"></property>
                <property num="0x8c3e8185" type="Uint32" name="Travellers per bus" desc="How many travellers it takes to yield a bus automata"></property>
                <property num="0xcba5895b" type="Float32" name="Spawn/Recall for Streets" desc="a% (0.0-1.0) chance of adding/removing automaton from tile when actual auto count is b% (0.0-1.0) lower/higher than desired."></property>
                <property num="0xcba5895c" type="Float32" name="Spawn/Recall for Roads" desc="a% (0.0-1.0) chance of adding/removing automaton from tile when actual auto count is b% (0.0-1.0) lower/higher than desired."></property>
                <property num="0xcba5895d" type="Float32" name="Spawn/Recall for Avenues" desc="a% (0.0-1.0) chance of adding/removing automaton from tile when actual auto count is b% (0.0-1.0) lower/higher than desired."></property>
                <property num="0xcba5895e" type="Float32" name="Spawn/Recall for Highway" desc="a% (0.0-1.0) chance of adding/removing automaton from tile when actual auto count is b% (0.0-1.0) lower/higher than desired."></property>
                <property num="0xcba5895f" type="Float32" name="Spawn/Recall for Rail" desc="a% (0.0-1.0) chance of adding/removing automaton from tile when actual auto count is b% (0.0-1.0) lower/higher than desired."></property>
                <property num="0xcba58a5b" type="Float32" name="Congestion to CPS for Streets" desc="Response curve of congestion vs. expected automata per second on a tile"></property>
                <property num="0xcba58a5c" type="Float32" name="Congestion to CPS for Roads" desc="Response curve of congestion vs. expected automata per second on a tile"></property>
                <property num="0xcba58a5d" type="Float32" name="Congestion to CPS for Avenues" desc="Response curve of congestion vs. expected automata per second on a tile"></property>
                <property num="0xcba58a5e" type="Float32" name="Congestion to CPS for Highway" desc="Response curve of congestion vs. expected automata per second on a tile"></property>
                <property num="0xcba58a5f" type="Float32" name="Congestion to CPS for Rail" desc="Response curve of congestion vs. expected automata per second on a tile"></property>
            </group>
            <group name="Disaster">
                <group name="Earthquake">
                    <property num="0x4a08c500" type="Float32" name="QuakeBrushStrengthAtEpicenterVsQuakeIntensity" desc="Brush strength multiplier at epicenter vs. quake intensity"></property>
                    <property num="0x4a08c501" type="Float32" name="QuakeBrushWidthAtEpicenterVsQuakeIntensity" desc="Brush width multiplier at epicenter vs. quake intensity"></property>
                    <property num="0x4a08c502" type="Float32" name="QuakeBrushStrengthVsDistance" desc="Variation of brush strength with distance from epicenter"></property>
                    <property num="0x4a08c503" type="Float32" name="QuakeBrushWidthVsDistance" desc="Variation of brush width with distance from epicenter"></property>
                    <property num="0x4a08c504" type="Float32" name="QuakeDistBetweenEffects" desc="Distance in meters, specifying how far apart we place effects"></property>
                    <property num="0x4a08c505" type="Float32" name="QuakeFaultLineCurviness" desc="Max deviation from a straight fault line"></property>
                    <property num="0x4a08c506" type="Float32" name="QuakeMaxFaultLineSlopeVariation" desc="Max variation (degrees) in the slope of fault line"></property>
                    <property num="0x4a08c507" type="Float32" name="QuakeBrushTravelSpeed" desc="Speed (meters/sec) with which earthquake brush moves"></property>
                    <property num="0x4a08c508" type="Uint32" name="QuakeMicroSecsBetweenShakeEffects" desc="Microsecs between shake effects"></property>
                    <property num="0x4a08c509" type="Float32" name="QuakeDistBetweenAutomataRepulsors" desc="Distance in meters, specifying how far apart we place automata repulsors"></property>
                </group>
                <group name="Volcano">
                    <property num="0xea4bc6e4" type="Float32" name="VolcanoLavaCurveProductionRate" desc="Production Rate for the Flow of VolcanoLava (Input Time in Fraction from [0, 1])"></property>
                    <property num="0x4a4bc714" type="Float32" name="VolcanoLavaCurveSolidifcationRate" desc="Solidification Rate for the Flow of VolcanoLava (Input Time in Fraction from [0, 1])"></property>
                    <property num="0xaa4bc72a" type="Float32" name="VolcanoLavaScaleIntensityOfProduction" desc="Multiplying Factor to the Response curve so response curve shape preserves"></property>
                    <property num="0x0a4bc742" type="Float32" name="VolcanoLavaTotalLavaTimeInSecs" desc="Time In Seconds until lava flowing and solidification continues"></property>
                    <property num="0x0a4bc752" type="Uint32" name="VolcanoLavaOrificeRadius" desc="Orifice Size of Lava Flow in Metres"></property>
                    <property num="0x6a4bc8ed" type="Bool" name="VolcanoLavaShouldLavaFlow" desc="To Allow the flow of lava flow"></property>
                </group>
                <group name="Pipe-Burst">
                    <property num="0x4a08c600" type="Float32" name="PipeBurstMinLeakTimeBeforeBurst" desc="Min time (secs) from onset of leak until burst happens"></property>
                    <property num="0x4a08c601" type="Float32" name="PipeBurstMaxLeakTimeBeforeBurst" desc="Max time (secs) from onset of leak until burst happens"></property>
                </group>
                <group name="Riot">
                    <property num="0xea400620" type="Uint32" name="Riot, NumStages" desc="Total number of stages"></property>
                    <property num="0xea400621" type="Uint32" name="Riot, SecondsBetweenStages" desc="Number of seconds per stage"></property>
                    <property num="0xea400622" type="Uint32" name="Riot, Controller2Stage" desc="Stage at which second controller gets added"></property>
                    <property num="0xea400623" type="Uint32" name="Riot, SpawnArray" desc="Array of number of new leaders to spawn at each stage"></property>
                    <property num="0xea400624" type="Float32" name="Riot, Protection-vs-Suppression" desc="Maps Police Protection value (0-255) to Riot Suppression( 0=none, 1=riot progression halted, 2+=riot regresses"></property>
                    <property num="0xcadb6b3e" type="Uint32" name="Riot, MaxInstances" desc="Maximum number of simultaneous riot instances"></property>
                    <property num="0x2adb6b6d" type="Uint32" name="Riot, MaxLeaders" desc="Maximum number of riot leaders created per instance"></property>
                </group>
                <group name="Disaster Creation Parameters">
                    <property num="0x4a08c700" type="String" name="Effect Name" desc="Specifies base name of disaster effect"></property>
                    <property num="0x4a08c701" type="Uint32" name="Manager ID" desc="Specifies the id of the disaster manager to use"></property>
                    <property num="0x4a08c702" type="Bool" name="StopPickAtWaterSurface" desc="Mouse pick for disaster trigger should choose water surface instead of terrain bed underneath"></property>
                    <property num="0xca821b8c" type="Uint8" name="Go To Zoom Level" desc="Specifies the camera zoom level to use on disaster go to"></property>
                </group>
                <property num="0xa9b6ecd3" type="Uint32" name="Stage Time" desc="Ticks to next fire stage by stage"></property>
                <property num="0xa9b6ecd4" type="Uint32" name="Spread Time" desc="Ticks between spread attempts per stage"></property>
                <property num="0xa9b6ecd5" type="Uint32" name="Spread Radius" desc="In meters beyond occupant/lot boundaries"></property>
                <property num="0xa9b6ecd6" type="Float32" name="Wind Scalar" desc="Wind effect on spread direction is directly scaled by this"></property>
                <property num="0xa9b6ecd7" type="Float32" name="Fires / Area (Top)" desc="Number of top fires per unit area"></property>
                <property num="0xa9b6ecd8" type="Float32" name="Fires / Area (Side)" desc="Number of side fires per unit area"></property>
                <property num="0xa9b6ecd9" type="Float32" name="Extinguish Rate vs. Protection" desc="The rate at which a fire declines as a function of protection"></property>
                <property num="0xa9b6ecda" type="Float32" name="Percent FireStart vs. Flammability" desc="Maps Flammability(0-255) to percent chance(0-100) of fire starting when ignited"></property>
            </group>
            <group name="Miscellanious Occupant">
                <property num="0xaa1dd396" type="Uint32" name="OccupantGroups" desc="List of groups this occupant belongs to."></property>
            </group>
            <group name="Network Lot">
                <property num="0xaa120972" type="Float32" name="NetworkLotConfigPropertyMaxSlopeAllowed" desc="The Max slope this lot will develop on"></property>
                <property num="0xaa120973" type="Float32" name="NetworkLotConfigPropertyMinSlopeAllowed" desc="The Min slope this lot will develop on"></property>
                <property num="0xc9a5a1be" type="Uint32" name="kPropertyID_LotConfigNetworkTileId" desc="kPropertyID_LotConfigNetworkTileId"></property>
                <property num="0x49d55951" type="Uint8" name="kPropertyID_NetworkPlacementPattern" desc="kPropertyID_NetworkPlacementPattern"></property>
                <property num="0xec3bd470" type="Uint8" name="kPropertyID_RotationsAllowed" desc="kPropertyID_RotationsAllowed"></property>
                <property num="0xcc3e4755" type="Uint8" name="kPropertyID_FlipsAllowed" desc="kPropertyID_FlipsAllowed"></property>
            </group>
            <group name="Data View">
                <property num="0x4a0b47e0" type="Uint32" name="DataView: Type filter" desc="Occupant types to include or exclude (0=unused)."></property>
                <property num="0x4a0b47e1" type="Bool" name="DataView: Invert filter" desc="If true, the occupant filter is exclusive rather than inclusive."></property>
                <property num="0x4a0b47e2" type="Bool" name="DataView: Hide zones" desc="If true, zoning decals are hidden."></property>
                <property num="0x4a0b47e3" type="Uint32" name="DataView: View level" desc="Specifies a surface or underground view to use."></property>
                <property num="0x4a0b47e4" type="Uint32" name="DataView: Color ramp" desc="Color progression to use for data."></property>
                <property num="0x4a0b47e5" type="Uint32" name="DataView: Data source" desc="Data overlay to display."></property>
                <property num="0x4a0b47e6" type="Uint8" name="DataView: Zone opacity" desc="Override value for undeveloped zone opacity (0-255)."></property>
                <property num="0x4a0b47e7" type="Bool" name="DataView: Interpolate data" desc="If true, data map is interpolated to city cell resolution."></property>
                <property num="0x4a0b47e8" type="Uint32" name="DataView: Quantize lots" desc="Force data to be uniform over lots, possibly of a specific type."></property>
                <property num="0x4a0b47e9" type="Uint32" name="DataView: Highlight mode" desc="Selects building types for coverage rings and highlights."></property>
                <property num="0x4a0b47ea" type="String" name="DataView: Coverage effect" desc="Specifies visual effect for coverage rings."></property>
                <property num="0x4a0b47eb" type="Uint32" name="DataView: Custom view" desc="Specifies a CLSID of special code to create a custom view."></property>
                <property num="0x4a0b47ec" type="Uint32" name="DataView: Maximum scale" desc="Specifies a scaling factor for 16-bit maps."></property>
                <property num="0x4a0b47ed" type="Uint32" name="DataView: Demand type" desc="Specifies a layer subtype for development layers (R$, CO$$, etc.)"></property>
                <property num="0x4a0b47ee" type="Uint32" name="DataView: Coverage circle color" desc="Enables coverage circles for current highlight type with given color (0xRRGGBB, HTML-style)."></property>
                <property num="0x4a0b47ef" type="Uint32" name="DataView: Highlight color" desc="Shows highlighted buildings on 2D map with given color (0xAARRGGBB)."></property>
                <property num="0x4a0b47f0" type="Bool" name="DataView: Force zones" desc="If true, developed lots will show up as plain zone coloring."></property>
                <property num="0x4a0b47f1" type="Uint8" name="DataView: Network vislevel" desc="Sets which networks are visible."></property>
                <property num="0x4a0b47f2" type="Uint32" name="DataView: Legends Color" desc="Set Color for legend on Data view"></property>
                <property num="0x4a0b47f3" type="Uint32" name="DataView: Legends GUIDS" desc="GUID for ledgend Text GroupID, GUID"></property>
                <property num="0x4a0b47f4" type="Uint32" name="DataView: Legends Header" desc="Selects building types for coverage rings and highlights."></property>
                <property num="0x4a0b47f5" type="Bool" name="DataView: Show zone map" desc="Displays zone coloring in the 2D map."></property>
                <property num="0x6b7c5cdd" type="Uint32" name="DataView: Travel Types" desc="List of travel types"></property>
            </group>
            <group name="Regional Transport Map">
                <property num="0xab9ec143" type="Uint32" name="DV/RegionalTransport: Color table" desc="Color table for regional transport map: street, rail, road, 1way road, avenue, monorail, elrail, highway, elhighway, airport, seaport, park, rail station, default zone."></property>
            </group>
            <group name="MiniMap">
                <property num="0xea3573af" type="Uint32" name="MiniMap: Terrain ramp" desc="Color progression to use for terrain."></property>
                <property num="0x6b733233" type="Uint32" name="MiniMap: Water ramp" desc="Color progression to use for water."></property>
            </group>
            <group name="Model Highlight">
                <property num="0xea639fb1" type="Float32" name="No highlight" desc="-"></property>
                <property num="0xea639fb2" type="Float32" name="General OK" desc="-"></property>
                <property num="0xea639fb3" type="Float32" name="General Not OK" desc="-"></property>
                <property num="0xea639fb4" type="Float32" name="Create OK" desc="-"></property>
                <property num="0xea639fb5" type="Float32" name="Create Not OK" desc="-"></property>
                <property num="0xea639fb6" type="Float32" name="Destroy OK" desc="-"></property>
                <property num="0xea639fb7" type="Float32" name="Destroy Not OK" desc="-"></property>
                <property num="0xea639fb8" type="Float32" name="Query OK" desc="-"></property>
                <property num="0xea639fb9" type="Float32" name="Query Not OK" desc="-"></property>
            </group>
            <group name="Graphs">
                <property num="0xaa4c0d1b" type="Uint32" name="Graph type" desc="Type of the graph to be shown (line, bar, etc.)"></property>
                <property num="0xea4aedc6" type="Float32" name="Graph minimum Y value" desc="Overrides the automatic minimum Y value."></property>
                <property num="0x6a4aeded" type="Float32" name="Graph maximum Y value" desc="Overrides the automatic maximum Y value."></property>
                <property num="0x6a4aedef" type="Float32" name="Graph Y tick spacing" desc="Overrides the automatic Y tick spacing."></property>
                <property num="0x6a4aee40" type="Uint32" name="Graph Plot data source 1" desc="Array of GUIDs, one per plot, each representing a data source."></property>
                <property num="0x6a4aee5f" type="Uint32" name="Graph Plot data source 2" desc="(Line only) Array of GUIDs, one per plot, each representing a data source."></property>
                <property num="0x6a4aee68" type="Uint32" name="Graph Plot combine op" desc="(Line only) Array of ints, one per plot, each representing how data sources 1 and 2 are combined (none, +, -, *, /)."></property>
                <property num="0x6a4aeedc" type="Uint32" name="Graph Plot label key" desc="Array of ints, one per plot, each representing a localized string key for the label."></property>
                <property num="0x6a4aeedf" type="Uint8" name="Graph Plot color" desc="Array of RGB triplets, 3 integers per plot, each representing a line color."></property>
                <property num="0x6a4aeee2" type="Float32" name="Graph Plot scale" desc="Array of floats, one per plot, which scales the plot by that amount."></property>
                <property num="0x6a4aeee3" type="Uint32" name="Graph Plot series" desc="(Bar only) Array of ints, one per plot, each representing which series that plot should be in."></property>
                <property num="0x6a4aeee4" type="Uint8" name="Graph Plot series fill color" desc="(Bar only) Array of RGB triplets, 3 integers per series, each representing a fill color for a whole series."></property>
                <property num="0x6a4aeee5" type="Uint8" name="Graph Plot series line color" desc="(Bar only) Array of RGB triplets, 3 integers per series, each representing a outline color a whole series."></property>
            </group>
            <group name="Trend Bar">
                <property num="0x6a6564f4" type="Uint32" name="Trend Bar: Data Source" desc="History data source for this trend bar"></property>
                <property num="0x6a6564f6" type="Float32" name="Trend Bar: Response Curve" desc="Converts from input data source range to {0,1}"></property>
            </group>
            <group name="Audio Tuning">
                <property num="0xca359f17" type="Float32" name="Audio:ZoomDistances" desc="Distance above ground or sea for microphone position"></property>
                <property num="0x6a359f22" type="Float32" name="Audio:ZoomDistanceTweaks" desc="Tweak values to nudge each delta"></property>
                <property num="0xea4a7c55" type="Float32" name="Audio:ZoomDistanceCameraPull" desc="Amount of horz dist to camera to pull to camera"></property>
                <property num="0x2a35a25f" type="Float32" name="Audio:ZoomScaleFactor" desc="Scale factor for all zoom levels"></property>
                <property num="0x2a36e3cb" type="Float32" name="Audio:ListenerRolloffFactor" desc="How fast sounds rolloff with distance"></property>
                <property num="0x0a36f410" type="Float32" name="Audio:AmbienceAttentionSpanRadii" desc="Radii for attention per zoom"></property>
                <property num="0x2aa40ccc" type="Float32" name="Audio:ListenerGranularity" desc="Values per zoom controlling update garnularity in meters"></property>
                <property num="0x2a3ff8cd" type="Uint32" name="Audio:AmbienceExemplarIds" desc="Array of exemplars to load"></property>
                <property num="0x6a946a50" type="Float32" name="Audio:VolumeLimitingCurve" desc="Volume limiting curve"></property>
                <property num="0x0a946a57" type="Uint32" name="Audio:Max Playing One-Shots" desc="Max playing one-shots"></property>
                <property num="0xaabaa0d3" type="Uint32" name="Audio:Max Concurrent One-Shots" desc="Max concurrent playing one-shots"></property>
                <property num="0x4a946a5d" type="Uint32" name="Audio:Max Playing Sounds" desc="Max playing sounds"></property>
                <property num="0xea3fbdd7" type="Uint32" name="Audio:FreshScoreKey" desc="Freshness score key without the class id"></property>
                <property num="0x6a3fbdda" type="Uint32" name="Audio:LoopId" desc="Ambient loop id"></property>
                <property num="0x0a25896b" type="Uint8" name="Audio:ZoomScoreEnable" desc="Bitfield describing which zoom levels score is active for"></property>
                <property num="0xaa3fbdde" type="Uint8" name="Audio:ZoomLoopEnable" desc="Bitfield describing which zoom levels loop is active for"></property>
                <property num="0x2a3fbde1" type="Uint32" name="Audio:ANDFilters" desc="Filter GUIDs that MUST be satisfied"></property>
                <property num="0x0a410ba0" type="Uint32" name="Audio:ORFilters" desc="Filter GUIDs any of which must be satisfied"></property>
                <property num="0x2a3fbde5" type="Uint32" name="Audio:NOTFilters" desc="Filter GUIDs that must NOT be satisfied"></property>
                <property num="0xea3fc42a" type="Uint32" name="Audio:LoopVolume" desc="Loop Volume"></property>
                <property num="0xaa3fc48e" type="Uint32" name="Audio:FreshVolume" desc="Freshness Volume"></property>
                <property num="0x6a3fc4c7" type="Uint32" name="Audio:FreshSPL" desc="Sound Pressure Level"></property>
                <property num="0x8a552758" type="Uint32" name="Audio:LayerPositionMode" desc="Layer Position Mode"></property>
                <property num="0x8a70b1a2" type="Uint32" name="Audio:LayerDensityMode" desc="Layer Density Mode"></property>
                <property num="0x8a3fc5dd" type="Float32" name="Audio:LayerWeight" desc="Priority scalar"></property>
                <property num="0xca4132e9" type="Float32" name="Audio:Density2FreshPlayCurve" desc="Density to freshness play percentage curve"></property>
                <property num="0x6a4132f3" type="Float32" name="Audio:Density2FreshVolumeCurve" desc="Density to freshness volume curve"></property>
                <property num="0x6a4132f6" type="Float32" name="Audio:Density2LoopVolumeCurve" desc="Density to loop volume curve"></property>
                <property num="0x0a4168e1" type="Float32" name="Audio:(Occupant)GroupRadius" desc="Size of glob for grouping single layer, or occupant"></property>
                <property num="0x0a56212a" type="Float32" name="Audio:CellGroupRadius" desc="Size of glob for grouping cells"></property>
                <property num="0x2a9590de" type="Float32" name="Audio:VolumeAttackLimit" desc="Max amount of full volume to change up per second"></property>
                <property num="0x0a9599bf" type="Float32" name="Audio:VolumeDecayLimit" desc="Max amount of full volume to change down per second"></property>
                <property num="0x8aa039b7" type="Uint32" name="Audio:LayerPositionSmoothDelta" desc="Layer position smoothing delta limit"></property>
                <property num="0x4aa03db1" type="Uint32" name="Audio:LayerVolumeSmoothDelta" desc="Layer volume smoothing delta limit"></property>
                <property num="0xcbfb03fa" type="Float32" name="Audio:AEMSMaxVolume" desc="Max volume for AEMS systems"></property>
                <property num="0xcbfb03ff" type="Float32" name="Audio:AEMSMasterFxLevel" desc="Master FX level"></property>
                <property num="0xebfb0404" type="Uint32" name="Audio:AEMSMasterFxType" desc="Effect type"></property>
                <property num="0x4bfdd955" type="Float32" name="Audio:AEMSVolumeCurve" desc="AEMS Volume curve"></property>
                <property num="0x8c376d4f" type="Float32" name="Audio:AEMSZoomVolumes" desc="Volume for AEMS system at each zoom level"></property>
                <property num="0x4a7cb3ba" type="Uint32" name="Audio: Min Music Volume Level" desc="Minimum music volume level setting for slider in audio prefs (0-1024)"></property>
                <property num="0x4a7cb3bb" type="Uint32" name="Audio: Min Sound Volume Level" desc="Minimum sound volume level setting for slider in audio prefs (0-1024)"></property>
                <property num="0x4a7cb3bc" type="Uint32" name="Audio: Max Music Volume Level" desc="Max music volume level setting for slider in audio prefs (0-1024)"></property>
                <property num="0x4a7cb3bd" type="Uint32" name="Audio: Max Sound Volume Level" desc="Max sound volume level setting for slider in audio prefs (0-1024)"></property>
                <property num="0x4a7cb3be" type="Uint32" name="Audio: Music Vol Adjustment" desc="Amount by which to adjust music volume such that at 80 percent it matches the sfx volume at full"></property>
                <property num="0x4a7cb3bf" type="Uint32" name="Audio: Music Fadeout Time (ms)" desc="Time (in ms) within which music fades out when switching radio stations"></property>
                <property num="0x8a5e7b50" type="Uint32" name="Audio: Music Playlist Entry 1" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b51" type="Uint32" name="Audio: Music Playlist Entry 2" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b52" type="Uint32" name="Audio: Music Playlist Entry 3" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b53" type="Uint32" name="Audio: Music Playlist Entry 4" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b54" type="Uint32" name="Audio: Music Playlist Entry 5" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b55" type="Uint32" name="Audio: Music Playlist Entry 6" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b56" type="Uint32" name="Audio: Music Playlist Entry 7" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b57" type="Uint32" name="Audio: Music Playlist Entry 8" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b58" type="Uint32" name="Audio: Music Playlist Entry 9" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b59" type="Uint32" name="Audio: Music Playlist Entry 10" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b5a" type="Uint32" name="Audio: Music Playlist Entry 11" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b5b" type="Uint32" name="Audio: Music Playlist Entry 12" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b5c" type="Uint32" name="Audio: Music Playlist Entry 13" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b5d" type="Uint32" name="Audio: Music Playlist Entry 14" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b5e" type="Uint32" name="Audio: Music Playlist Entry 15" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b5f" type="Uint32" name="Audio: Music Playlist Entry 16" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b60" type="Uint32" name="Audio: Music Playlist Entry 17" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b61" type="Uint32" name="Audio: Music Playlist Entry 18" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b62" type="Uint32" name="Audio: Music Playlist Entry 19" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b63" type="Uint32" name="Audio: Music Playlist Entry 20" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b64" type="Uint32" name="Audio: Music Playlist Entry 21" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b65" type="Uint32" name="Audio: Music Playlist Entry 22" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b66" type="Uint32" name="Audio: Music Playlist Entry 23" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b67" type="Uint32" name="Audio: Music Playlist Entry 24" desc="Music playlist entry values (Title, Filename, on/off)"></property>
                <property num="0x8a5e7b68" type="Uint32" name="Audio: Music Playlist Entry 25" desc="Music playlist entry values (Title, Filename, on/off)"></property>
            </group>
            <group name="My Sim Template">
                <property num="0xea296f8d" type="Uint32" name="My Sim: Bitmap ID" desc="Specify ID for bitmap in Select-A-My-Sim dialog."></property>
                <property num="0xea296f8f" type="String" name="My Sim: Default name" desc="Specifies default name for My Sim."></property>
                <property num="0xea296f90" type="Uint8" name="My Sim: Zodiac Sign" desc="Specify default zodiac sign for My Sim."></property>
                <property num="0xea296f91" type="Bool" name="My Sim: Is Male" desc="Specify My Sim gender (true=male, false=female)"></property>
                <property num="0xca416b3f" type="Uint32" name="My Sim: Name res key" desc="My sim default name resource key"></property>
            </group>
            <group name="UDrive-It">
                <property num="0x2BE8FBF3" type="UInt32" name="UDriveIt Vehicle Panel Exemplar Key"/>
                <property num="0x4BE0D7C4" type="UInt32" name="UDriveIt Vehicle Icon Key"/>
            </group>
            <group name="General Properties">
                <property num="0x496e5a36" type="Bool" name="Use Pipe Depth" desc="If false, normal pipe pieces are placed as per intersections"></property>
                <property num="0x6bac0b3e" type="Uint8" name="Path Lookahead Tiles" desc="How many tiles traffic autos should look ahead when determining paths"></property>
                <property num="0x8cb3511f" type="Uint32" lengthtype="variable" length="1" value="0x00000000" name="Occupant Types" desc="Types of occupants"></property>
                <property num="0xcab1ce3a" type="Sint32" name="Subjective Factor Threshold (Min value)" desc="Min value of desirability for subjective factors (pollution,garbage,school,hospital,crime,traffic,triplength)."></property>
                <property num="0xcab1ce3c" type="Sint32" name="Subjective Factor Threshold (Max value)" desc="Max value of desirability for subjective factors (pollution,garbage,school,hospital,crime,traffic,triplength)."></property>
                <property num="0x296E756E" type="Uint32" name="Class ID: Aircraft" desc="Class ID of an aircraft model"/>
                <property num="0x096E7574" type="Uint32" name="Class ID: Watercraft" desc="Class ID of a watercraft model"/>
                <property num="0xc98204b9" type="String" name="Visual effect name 1"/>
                <property num="0x8A3F1505" type="UInt32" name="Submenu Key: Zoning: Residential Menu"/>
                <property num="0x8A3F14DC" type="UInt32" name="Submenu Key: Zoning: Commercial Menu"/>
                <property num="0x8A3F1502" type="UInt32" name="Submenu Key: Zoning: Industrial Menu"/>
                <property num="0x8A3F131B" type="UInt32" name="Submenu Key: Terraforming: CreateFauna Menu"/>
                <property num="0x2BE8E61B" type="Uint32" name="UI Driving Panel" desc="Property is referenced by Instance ID, and points to the User Interface file for the U-Drive-IT Driving Panel"/>
                <property num="0x2BE8E6CB" type="Uint32" name="UI Icons(U-Drive-It)" desc="These are the main Icons/Images on the Driving Panel"/>
                <property num="0xEC1B2361" type="Uint32" name="UI Status Window" desc="Property is referenced by Instance ID, and points to the User Interface file for the Status Window. The Status Window displays the Control Keys for each of the vehicles"/>
                <property num="0x00004005" type="UInt32" name="Submenu Key: Networks: Highway &amp; Ramps Menu"/>
                <property num="0x00004001" type="UInt32" name="Submenu Key: Networks: Rails &amp; Depots Menu"/>
                <property num="0x00004002" type="UInt32" name="Submenu Key: Networks: Miscellaneous Transport Menu"/>
                <property num="0x00004000" type="UInt32" name="Submenu Key: Networks: Road Menu"/>
                <property num="0x00004003" type="UInt32" name="Submenu Key: Utilities: Power Plant Menu"/>
                <property num="0x00004004" type="UInt32" name="Submenu Key: Utilities: Water Plant Menu"/>
            </group>
        </properties>

     

    • Like 3
    • Yes 1

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    @CorinaMarie So I know this is an old(ish) thread, but I downloaded the CORI report mod, and it does not generate anything on my computer. Keep in mind I am running the SC4 MAC version (Aspyr), so I believe it is probably having an issue with finding the path in my computer. If you don't have the time to look into it, I was wondering if I could see your source so I could try and compile it myself? If not it's cool though, I totally get not wanting to disclose your source. I'm sorta new to the forum so if it was posted somewhere and I missed it just let me know!

    • Like 1
    • Yes 1
    • Thanks 1

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    2 hours ago, ebones5 said:

    Keep in mind I am running the SC4 MAC version (Aspyr), so I believe it is probably having an issue with finding the path in my computer.

    That does seem quite likely why my reports don't play nicely with your comp. :O

    In addition to pathing, it could also be the Mac OS doesn't support letting the game write out files from the game. (I don't have a Mac so I'm just guessing.)

     

    2 hours ago, ebones5 said:

    If you don't have the time to look into it,

    For the Mac, I wouldn't even know were to begin. *:blush:

     

    2 hours ago, ebones5 said:

    I was wondering if I could see your source so I could try and compile it myself?

    You may absolutely see it. (There's nothing to compile tho.) It's all plain text Lua Coding which is included in the downloadable .dat file. (If you could run iLive's Reader program you could see it that way.)

    I'm not sure if, or how, it might help, but here's all the text of the code. It's 5 separate modules within the .dat file. (There are also two LTEXT entries which is what displays in the two popup windows in the game if you could see them.)

     

    TGI: CA63E2A3-4A5E8EF6-434F5249

    Spoiler
    
    --#-package:7a76f889# -- package signature
    --
    -- The C.O.R.I. Reports - Main Entry Module - Beta Version 0.2e
    --   Written by CorinaMarie @ Simtropolis
    --
    -- Testing, comments, critiques, and basic hand holding by Cyclone Boom @ Simtropolis (Thanks!)
    --
    
    
    -- Initial Variables (passing of Region and City variables from dialog box and basic file writing learned from Daeley @ Simtropolis
    --  Yes, I know I could put these all on one line. ;)
        cmRegion = nil
        cmCity = nil
        cmReport = nil
        cmIniPath = nil
        cmIniFound = nil
        cmOutputPath = nil
        cmRptDate = nil
    
    -- INI Options
        cmNumbersFormat = nil
        cmHideGibberish = nil
        cmHideFileName = nil
        cmHideTimeStamp = nil
        cmHideIniContents = nil
        cmHideVersion = nil
        cmHideEOF = nil
        cmCustomTitle = nil
        cmCreateCSV = nil
        cmUniqueFilename = nil
    
    -- Build the file name and call the appropriate function
    function cmDataReport(RegionName,CityName,ReportType)
        cmRegion = RegionName
        cmCity = CityName
        cmReport = ReportType
    
    -- Default location if CoriReport.ini not found (now back to Cori's coding)
        local cmUserDir = os.getenv("USERPROFILE")
        cmOutputPath = cmUserDir .. [[\My Documents\SimCity 4\]]
        cmNumbersFormat = "Both"
    
    -- Check for (and read) CoriReport.ini
        cmIni = {}
    
        -- First check the "Start In path set in the player's game shortcut"
        cmIniPath = "CoriReport.ini"
        cmIniFound = io.open(cmIniPath)
    
        -- If not found there, check in Documents\SimCity 4 folder
        if not (cmIniFound) then
          cmIniPath = cmOutputPath .. "CoriReport.ini"
          cmIniFound = io.open(cmIniPath)
        end
    
        if cmIniFound then
          io.input(cmIniPath)
          while true do
            local line = io.read()
            if line == nil then break end
            table.insert(cmIni, line)
            local SmooshedLine = string.lower(line)
            -- Check for custom path
            local p1, p2 = string.find(SmooshedLine,"corireportpath=")
            if (p2 ~= nil and p1 == 1) then
              cmOutputPath = string.sub(line,16) .. [[\]]
            end
            -- Check for custom numbers formatting
            local p1, p2 = string.find(SmooshedLine,"numbersformat=")
            if (p2 ~= nil and p1 == 1) then
              cmNumbersFormat = string.sub(line,15)
            end
            -- Check for Hide Gibberish
            local p1, p2 = string.find(SmooshedLine,"hidegibberish")
            if (p2 ~= nil and p1 == 1) then
              cmHideGibberish = 1
            end
            -- Check for Hide File Name
            local p1, p2 = string.find(SmooshedLine,"hidefilename")
            if (p2 ~= nil and p1 == 1) then
              cmHideFileName = 1
            end
            -- Check for Hide Time Stamp
            local p1, p2 = string.find(SmooshedLine,"hidetimestamp")
            if (p2 ~= nil and p1 == 1) then
              cmHideTimeStamp = 1
            end
            -- Check for Hide INI Contents
            local p1, p2 = string.find(SmooshedLine,"hideinicontents")
            if (p2 ~= nil and p1 == 1) then
              cmHideIniContents = 1
            end
            -- Check for Hide Version line
            local p1, p2 = string.find(SmooshedLine,"hideversion")
            if (p2 ~= nil and p1 == 1) then
              cmHideVersion = 1
            end
            -- Check for Hide EOF line
            local p1, p2 = string.find(SmooshedLine,"hideeof")
            if (p2 ~= nil and p1 == 1) then
              cmHideEOF = 1
            end
            -- Check for custom tile
            local p1, p2 = string.find(SmooshedLine,"customtitle=")
            if (p2 ~= nil and p1 == 1) then
              cmCustomTitle = string.sub(line,13)
            end
            -- Check for CSV creation
            local p1, p2 = string.find(SmooshedLine,"createcsv")
            if (p2 ~= nil and p1 == 1) then
              cmCreateCSV = 1
            end
            -- Check for unique filename option
            local p1, p2 = string.find(SmooshedLine,"uniquefilename")
            if (p2 ~= nil and p1 == 1) then
              cmUniqueFilename = 1
            end
          end
        end
    
    -- Build report date
        local cmYear
        if string.len(game.g_year_count) == 1 then
          cmYear = "000" .. game.g_year_count
        elseif string.len(game.g_year_count) == 2 then
          cmYear = "00" .. game.g_year_count
        elseif string.len(game.g_year_count) == 3 then
          cmYear = "0" .. game.g_year_count
        else
          cmYear = game.g_year_count -- Added 2018.12.25
        end
    
        local cmMonth
        if string.len(game.g_month) == 1 then
          cmMonth = "0" .. game.g_month
        else
          cmMonth = game.g_month
        end
    
        local cmDay
        if string.len(game.g_day) == 1 then
          cmDay = "0" .. game.g_day
        else
          cmDay = game.g_day
        end
        cmRptDate = cmYear .. "-" .. cmMonth .. "-" .. cmDay
    
    -- Squish the file name parts together and run the requested report
        local cmTheFile, cmFileCSV
        if cmReport == "1" then
          if cmUniqueFilename then
            local Unique = os.time()
            cmTheFile = cmOutputPath .. cmRegion .. " (" .. cmCity .. ") " .. cmRptDate .. " - City Report - " .. Unique .. ".txt"
          else
            cmTheFile = cmOutputPath .. cmRegion .. " (" .. cmCity .. ") " .. cmRptDate .. " - City Report.txt"
          end
          pcall(cmCityReport,cmTheFile)
        
          if cmCreateCSV then
            if cmUniqueFilename then
              local Unique = os.time()
              cmFileCSV = cmOutputPath .. "CSV - " .. cmRegion .. " (" .. cmCity .. ") " .. cmRptDate .. " - City Report - " .. Unique .. ".csv"
            else
              cmFileCSV = cmOutputPath .. "CSV - " .. cmRegion .. " (" .. cmCity .. ") " .. cmRptDate .. " - City Report.csv"
            end
            cmOutputCSV(cmFileCSV)
          end
        
        elseif cmReport == "2" then
          if cmUniqueFilename then
            local Unique = os.time()
            cmTheFile = cmOutputPath .. cmRegion .. " (" .. cmCity .. ") " .. cmRptDate .. " - Runtime Report - " .. Unique .. ".txt"
          else
            cmTheFile = cmOutputPath .. cmRegion .. " (" .. cmCity .. ") " .. cmRptDate .. " - Runtime Report.txt"
          end
          cmRuntimeReport(cmTheFile)  
        
        else -- (default to report 3)
          if cmUniqueFilename then
            local Unique = os.time()
            cmTheFile = cmOutputPath .. cmRegion .. " (" .. cmCity .. ") " .. cmRptDate .. " - All Tables Report - " .. Unique .. ".txt"
          else
            cmTheFile = cmOutputPath .. cmRegion .. " (" .. cmCity .. ") " .. cmRptDate .. " - All Tables Report.txt"
          end
          cmAllTablesReport(cmTheFile)
        end
    
    
    -- Clear out variables before exit
        cmRegion = nil
        cmCity = nil
        cmReport = nil
        cmUserDir = nil
        cmIni = {}
        cmIniPath = nil
        cmIniFound = nil
        cmOutputPath = nil
        cmRptDate = nil
        cmNumbersFormat = nil
        cmHideGibberish = nil
        cmHideFileName = nil
        cmHideTimeStamp = nil
        cmHideIniContents = nil
        cmHideVersion = nil
        cmHideEOF = nil
        cmCustomTitle = nil
        cmCreateCSV = nil
        cmUniqueFilename = nil
    
    
    end -- cmDataReport function END
    
    
    --Recursively Serialize Tables written by Luiz Menezes (then minor tweaks by me)
    -- Original public code: https://stackoverflow.com/questions/41942289/display-contents-of-tables-in-lua
    --
    -- Called by the Runtime and All Tables reports
    function tprint (tbl, indent)
      if not indent then indent = 0 end
      local toprint = string.rep(" ", indent) .. "{\n"
      indent = indent + 2 
      for k, v in pairs(tbl) do
        toprint = toprint .. string.rep(" ", indent)
        if (type(k) == "number") then
          toprint = toprint .. "[" .. k .. "] = "
        elseif (type(k) == "string") then
          toprint = toprint  .. k ..  " = "   
        end
        if (type(v) == "number") then
          toprint = toprint .. v .. "\n"
        elseif (type(v) == "string") then
          toprint = toprint .. "\"" .. v .. "\"\n"
        elseif (type(v) == "table") then
          toprint = toprint .. tprint(v, indent + 2) .. "\n"
        else
          toprint = toprint .. "\"" .. tostring(v) .. "\"\n"
        end
      end
      toprint = toprint .. string.rep(" ", indent-2) .. "}"
      return toprint
    end
    
    -- Set up a trigger
    a = create_advice_cityplanning('434f5203')
    a.type = advice_types.CITY_PLANNING
    a.trigger  = "(cmCity == nil)"
    a.frequency = 1825
    a.no_timeout = 1
    a.persist = 1
    a.title = [[text@434f5201]]
    a.message   = [[text@434f5202]]
    a.priority  = 100
    a.mood = advice_moods.GREAT_JOB
    a.once = 0
    a.news_only = 0
    
    -- EOF
    

     

     

    TGI: CA63E2A3-4A5E8EF6-434F52AA

    Spoiler
    
    --#-package:7a76f88C# -- package signature
    --
    -- The C.O.R.I. Reports - All Tables Report
    --  (Called from IID 0x434F5249 Lua package 7A76F889)
    
    function cmAllTablesReport(filename)
    -- Clear unnecessary valriables for this report
        cmIni = {}
        cmIniPath = nil
        cmIniFound = nil
        cmReport = nil
        cmOutputPath = nil
        cmRptDate = nil
        cmNumbersFormat = nil
        cmHideGibberish = nil
        cmHideFileName = nil
        cmHideTimeStamp = nil
        cmHideIniContents = nil
        cmHideVersion = nil
        cmHideEOF = nil
        cmCustomTitle = nil
        cmCreateCSV = nil
        cmUniqueFilename = nil
    
    
    -- Open file and output data
        local cmTheFile = filename
        local exist = io.open(filename) --open file overwritting if exists
        local cmDateTime = os.date()
        io.output(filename)
        io.write("Cori output this with a LUA Script!","\n")
        io.write("-----------------------------------","\n")
        io.write("File output as: ",cmTheFile,"\n")
        io.write("DateTime stamp: ",cmDateTime,"\n")
        io.write("-------------------------------------","\n")
        io.write(" * * * ALL TABLES OUTPUT START * * *\n\n")
    
    --Game Environment
        local TableList
    
        io.write("\nTABLE = _sys","\n---------------------------\n")
        TableList = tprint(_sys)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = _included_files","\n---------------------------\n")
        TableList = tprint(_included_files)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = _LOADED","\n---------------------------\n")
        TableList = tprint(_LOADED)
        io.write(TableList,"\n\n")
    
    
    --Test Area
    
    --x    io.write("\nTABLE = ###","\n---------------------------\n")
    --x    TableList = tprint(###)
    --x    io.write(TableList,"\n\n")
    
    
    
    --x    local Binary = string.dump(tool_plop_zone)
    --x    io.write(Binary,"\n\n")
    
    --lua    io.write("\nTABLE = Debug Table","\n---------------------------\n")
    --lua    TableList = tprint(_G.debug)
    --lua    io.write(TableList,"\n\n")
    
    --Test End
    
    
    --Print global variables and their type
        io.write("\nTABLE = LUA Global Environment _G","\n---------------------------\n")
        for i,v in pairs(_G) do 
          local t = type(v)
          io.write(t,": ")
          io.write(i)
          if (t == "string") then
            io.write(" = ",v,"\n")
          else
            io.write("\n")
          end
        end
        io.write("\n\n")
    
    
    -- Serialize and print tables to file
        io.write("\nTABLE = advisor_heads","\n---------------------------\n")
        TableList = tprint(advisor_heads)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = advice_moods","\n---------------------------\n")
        TableList = tprint(advice_moods)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = advice_priority","\n---------------------------\n")
        TableList = tprint(advice_priority)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = advice_types","\n---------------------------\n")
        TableList = tprint(advice_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = advisor_anim_types","\n---------------------------\n")
        TableList = tprint(advisor_anim_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = advisor_base_template","\n---------------------------\n")
        TableList = tprint(advisor_base_template)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = advisor_genders","\n---------------------------\n")
        TableList = tprint(advisor_genders)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = advisor_ids","\n---------------------------\n")
        TableList = tprint(advisor_ids)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = automata","\n---------------------------\n")
        TableList = tprint(automata)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = automata_groups","\n---------------------------\n")
        TableList = tprint(automata_groups)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = automata_priority","\n---------------------------\n")
    --e    TableList = tprint(automata_priority)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = automata_sfx","\n---------------------------\n")
        TableList = tprint(automata_sfx)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = automata_states","\n---------------------------\n")
        TableList = tprint(automata_states)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = base_advice","\n---------------------------\n")
        TableList = tprint(base_advice)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = base_citysituation_advice","\n---------------------------\n")
        TableList = tprint(base_citysituation_advice)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = BehaviorState","\n---------------------------\n")
    --e    TableList = tprint(BehaviorState)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = budget_window_types","\n---------------------------\n")
        TableList = tprint(budget_window_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = building_conditions","\n---------------------------\n")
        TableList = tprint(building_conditions)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = building_groups","\n---------------------------\n")
        TableList = tprint(building_groups)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = building_tool_types","\n---------------------------\n")
        TableList = tprint(building_tool_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = button_tool_types","\n---------------------------\n")
        TableList = tprint(button_tool_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = camera_zooms","\n---------------------------\n")
        TableList = tprint(camera_zooms)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = department_advisor","\n---------------------------\n")
        TableList = tprint(department_advisor)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = disaster_ids","\n---------------------------\n")
        TableList = tprint(disaster_ids)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = drive_command","\n---------------------------\n")
    --e    TableList = tprint(drive_command)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = effects","\n---------------------------\n")
        TableList = tprint(effects)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = flora_tool_types","\n---------------------------\n")
        TableList = tprint(flora_tool_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = game","\n---------------------------\n")
        TableList = tprint(game)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = game_commands","\n---------------------------\n")
        TableList = tprint(game_commands)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = game_difficulty_level","\n---------------------------\n")
        TableList = tprint(game_difficulty_level)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = game_events","\n---------------------------\n")
        TableList = tprint(game_events)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = game_trends","\n---------------------------\n")
        TableList = tprint(game_trends)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = GeneratorPriority","\n---------------------------\n")
    --e    TableList = tprint(GeneratorPriority)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = hr","\n---------------------------\n")
        TableList = tprint(hr)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = graph_window_types","\n---------------------------\n")
        TableList = tprint(graph_window_types)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = keycode","\n---------------------------\n")
    --e    TableList = tprint(keycode)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = map_window_types","\n---------------------------\n")
        TableList = tprint(map_window_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = mysim","\n---------------------------\n")
        TableList = tprint(mysim)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = mysim_balloons","\n---------------------------\n")
        TableList = tprint(mysim_balloons)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = mysim_idle_animation_ids","\n---------------------------\n")
        TableList = tprint(mysim_idle_animation_ids)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = mysim_trip_types","\n---------------------------\n")
        TableList = tprint(mysim_trip_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = mysim_VOX","\n---------------------------\n")
        TableList = tprint(mysim_VOX)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = neighbor_deal_types","\n---------------------------\n")
        TableList = tprint(neighbor_deal_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = network_types","\n---------------------------\n")
        TableList = tprint(network_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = network_tool_types","\n---------------------------\n")
        TableList = tprint(network_tool_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = ordinance_ids","\n---------------------------\n")
        TableList = tprint(ordinance_ids)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = plugin_002_building_tool_types","\n---------------------------\n")
        TableList = tprint(plugin_002_building_tool_types)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = plugin_002_special_buildings","\n---------------------------\n")
        TableList = tprint(plugin_002_special_buildings)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = PurposeTypes","\n---------------------------\n")
    --e    TableList = tprint(PurposeTypes)
    --e    io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = RateScale","\n---------------------------\n")
    --e    TableList = tprint(RateScale)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = reward_state","\n---------------------------\n")
        TableList = tprint(reward_state)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = s","\n---------------------------\n")
        TableList = tprint(s)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game","\n---------------------------\n")
        TableList = tprint(sc4game)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game.aura","\n---------------------------\n")
        TableList = tprint(sc4game.aura)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game.automata","\n---------------------------\n")
        TableList = tprint(sc4game.automata)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game.budget","\n---------------------------\n")
        TableList = tprint(sc4game.budget)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game.civic","\n---------------------------\n")
        TableList = tprint(sc4game.civic)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game.effects","\n---------------------------\n")
        TableList = tprint(sc4game.effects)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game.mysims","\n---------------------------\n")
        TableList = tprint(sc4game.mysims)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game.mysims_ui","\n---------------------------\n")
        TableList = tprint(sc4game.mysims_ui)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sc4game.sitmgr","\n---------------------------\n")
        TableList = tprint(sc4game.sitmgr)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = SFX","\n---------------------------\n")
    --e    TableList = tprint(SFX)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sit_conditions","\n---------------------------\n")
        TableList = tprint(sit_conditions)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sit_constants","\n---------------------------\n")
        TableList = tprint(sit_constants)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = sit_coverage_type","\n---------------------------\n")
        TableList = tprint(sit_coverage_type)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = special_buildings","\n---------------------------\n")
        TableList = tprint(special_buildings)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = string_table","\n---------------------------\n")
    --e    TableList = tprint(string_table)
    --e    io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = track_buildings","\n---------------------------\n")
    --e    TableList = tprint(track_buildings)
    --e    io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = templates","\n---------------------------\n")
    --e    TableList = tprint(templates)
    --e    io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = TriggerEvent","\n---------------------------\n")
    --e    TableList = tprint(TriggerEvent)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = tuning_constants","\n---------------------------\n")
        TableList = tprint(tuning_constants)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = WealthTypes","\n---------------------------\n")
    --e    TableList = tprint(WealthTypes)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = zodiac","\n---------------------------\n")
        TableList = tprint(zodiac)
        io.write(TableList,"\n\n")
    
    --e    io.write("\nTABLE = ZoneTypes","\n---------------------------\n")
    --e    TableList = tprint(ZoneTypes)
    --e    io.write(TableList,"\n\n")
    
        io.write("\nTABLE = zone_tool_types","\n---------------------------\n")
        TableList = tprint(zone_tool_types)
        io.write(TableList,"\n\n")
    
    
    --TUTORIALS
        io.write("\n * * * TUTORIALS STUFF * * *","\n")
        io.write("\nTABLE = tutorial_buttons","\n---------------------------\n")
        TableList = tprint(tutorial_buttons)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = tutorial_building_type","\n---------------------------\n")
        TableList = tprint(tutorial_building_type)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = tutorial_dispatch_type","\n---------------------------\n")
        TableList = tprint(tutorial_dispatch_type)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = tutorial_file_guids","\n---------------------------\n")
        TableList = tprint(tutorial_file_guids)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = tutorial_function_index","\n---------------------------\n")
        TableList = tprint(tutorial_function_index)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = tutorial_network_type","\n---------------------------\n")
        TableList = tprint(tutorial_network_type)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = tutorialtasks","\n---------------------------\n")
        TableList = tprint(tutorialtasks)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = tutorial_zone_type","\n---------------------------\n")
        TableList = tprint(tutorial_zone_type)
        io.write(TableList,"\n\n")
    
    --    io.write("\nTABLE = object","\n---------------------------\n")
    --    TableList = tprint(object)
    --    io.write(TableList,"\n\n")
    
    --    io.write("\nTABLE = arg","\n---------------------------\n")
    --    TableList = tprint(arg)
    --    io.write(TableList,"\n\n")
    
    
    -- Temp testing cmFullText table for CSV output (now is nilled before getting here)
    --    io.write("\nTABLE = cmFullText","\n---------------------------\n")
    --    TableList = tprint(cmFullText)
    --    io.write(TableList,"\n\n")
    
        io.write("\n----------------------------------EOF","\n")
    
    -- Close out file
        io.flush()
        io.close()
    
    end  -- cmAllTablesReport function END
    

     

     

    TGI: CA63E2A3-4A5E8EF6-434F52A7

    Spoiler
    
    --#-package:7a76f88B# -- package signature
    --
    -- The C.O.R.I. Reports - Runtime Environment Variables Report
    --  This is a subset of the All Tables Report
    --  (Called from IID 0x434F5249 Lua package 7A76F889)
    
    function cmRuntimeReport(filename)
    -- Clear unnecessary valriables for this report
        cmIni = {}
        cmIniPath = nil
        cmIniFound = nil
        cmReport = nil
        cmOutputPath = nil
        cmRptDate = nil
        cmNumbersFormat = nil
        cmHideGibberish = nil
        cmHideFileName = nil
        cmHideTimeStamp = nil
        cmHideIniContents = nil
        cmHideVersion = nil
        cmHideEOF = nil
        cmCustomTitle = nil
        cmCreateCSV = nil
        cmUniqueFilename = nil
    
    
    -- Open file and output data
        local cmTheFile = filename
        local exist = io.open(filename) --open file overwritting if exists
        local cmDateTime = os.date()
        io.output(filename)
        io.write("Cori output this with a LUA Script!","\n")
        io.write("-----------------------------------","\n")
        io.write("File output as: ",cmTheFile,"\n")
        io.write("DateTime stamp: ",cmDateTime,"\n")
        io.write("-------------------------------------","\n")
        io.write(" * * * RUNTIME TABLES OUTPUT START * * *\n\n")
    
    --Game Environment
        local TableList
        io.write("\nTABLE = _sys","\n---------------------------\n")
        TableList = tprint(_sys)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = _included_files","\n---------------------------\n")
        TableList = tprint(_included_files)
        io.write(TableList,"\n\n")
    
        io.write("\nTABLE = _LOADED","\n---------------------------\n")
        TableList = tprint(_LOADED)
        io.write(TableList,"\n\n")
    
    
    --Print global variables and their type
        io.write("\nTABLE = LUA Global Environment _G","\n---------------------------\n")
        for i,v in pairs(_G) do 
          local t = type(v)
          io.write(t,": ")
          io.write(i)
          if (t == "string") then
            io.write(" = ",v,"\n")
          else
            io.write("\n")
          end
        end
        io.write("\n\n")
    
        io.write("\n----------------------------------EOF","\n")
    
    -- Close out file
        io.flush()
        io.close()
    
    end -- cmRuntimeReport function END
    

     

     

    TGI: CA63E2A3-4A5E8EF6-434F52A8

    Spoiler
    
    --#-package:7a76f88D# -- package signature
    --
    -- The C.O.R.I. Reports - City Data Report
    --  (Called from IID 0x434F5249 Lua package 7A76F889)
    
    -- The City Report
    function cmCityReport(filename)
        local exist = io.open(filename) -- Test open file
        local cmDateTime = os.date()
        local cmTheFile = filename
        io.output(filename)
    
    -- Report preliminary output
        -- Hide gibberish?
        if not (cmHideGibberish) then
          io.write("Cori output this with a LUA Script!","\n")
          io.write("-----------------------------------","\n")
        end
        -- Hide file name?
        if not (cmHideFileName) then
          io.write("File output as: ",cmTheFile,"\n")
        end
        -- Hide time stamp?
        if not (cmHideTimeStamp) then
          io.write("DateTime stamp: ",cmDateTime,"\n\n")
        end
    
    -- Check for CoriReport.ini
        if not (cmHideIniContents) then
          if (cmIniFound) then
            io.write("CoriReport.ini contains:\n")
            for k,v in pairs(cmIni) do
              io.write("   ",v,"\n")
            end
            io.write("\n\n")
          else
            io.write("CoriReport.ini not found. (Using default settings.)\n")
            io.write("  The main setting one can use in the INI file is: CoriReportPath=SomeValidPath\n\n")
            io.write("  The path should not include a trailing ",[[\]]," and even if the path has spaces in\n")
            io.write("   the folder names, do not put quotes around it.\n\n")
            io.write("Examples: CoriReportPath=",[[C:\Cori\Tested\This]],"\n")
            io.write("          CoriReportPath=",[[C:\Users\Documents\SimCity 4\My Farms\First 50 Years]],"\n\n")
            io.write("  To use a custom path the INI file must be located in the same folder as SimCity 4.exe\n\n\n")
          end
        end
    
    -- Report Title
        -- Custom tile?
        if not (cmCustomTitle) then
          cmHeader(" * * * The C.O.R.I. City Report * * *",1)
        else
          cmHeader(cmCustomTitle,1)
        end
        cmWriteLine(0," ","",2)
    
        -- Hide version number?
        if not (cmHideVersion) then
          io.write(" - Beta version 0.2e - RAW numbers from game memory variables.\n\n\n")
        end
    
    
    ----------------
    -- GEOGRAPHY  --
    ----------------
        cmHeader("GEOGRAPHY",1)
    
    -- Location
        cmHeader("Location and Sim Date",2)
        cmWriteLine(2,"REGION..: ",cmRegion,1)
        cmWriteLine(2,"CITY....: ",cmCity,1)
    
    -- Sim Date
        local cmYear
        if string.len(game.g_year_count) == 1 then
          cmYear = "000" .. game.g_year_count
        elseif string.len(game.g_year_count) == 2 then
          cmYear = "00" .. game.g_year_count
        elseif string.len(game.g_year_count) == 3 then
          cmYear = "0" .. game.g_year_count
        else
          cmYear = game.g_year_count -- Added 2018.12.25
        end
    
        local cmMonth
        if string.len(game.g_month) == 1 then
          cmMonth = "0" .. game.g_month
        else
          cmMonth = game.g_month
        end
    
        local cmDay
        if string.len(game.g_day) == 1 then
          cmDay = "0" .. game.g_day
        else
          cmDay = game.g_day
        end
    
        cmWriteLine(2,"SIM DATE: ",cmYear,0)
        cmWriteLine(0,"/","",0)
        cmWriteLine(0,"",cmMonth,0)
        cmWriteLine(0,"/","",0)
        cmWriteLine(0,"",cmDay,0)
        cmWriteLine(1,"(yyyy/mm/dd)","",2)
    
    -- City Tile Size
        cmHeader("City Tile Characteristics",2)
        local cmTileSize
        if game.g_city_tile_size == 1048576 then
          cmTileSize = "Small (4,096 cells)"
        elseif game.g_city_tile_size == 4194304 then
          cmTileSize = "Medium (16,384 cells)"
        elseif game.g_city_tile_size == 16777216 then
          cmTileSize = "Large (65,536 cells)"
        else
          cmTileSize = "Unknown"
        end
    
        cmWriteLine(2,"City tile size: ",cmTileSize,1)
    
    -- Check for Sea
        cmWriteLine(2,"City has sea = ",game.g_city_has_sea,1)
    
    -- Neighbors
        cmWriteLine(2,"Number of cities adjacent = ",game.g_num_cities_adjacent,1)
        cmWriteLine(2,"Number of cities connected = ",game.g_num_cities_connected,1)
        cmWriteLine(2,"Number of cities connected indirectly = ",game.g_num_cities_connected_indirectly,2)
    
    -- Mayor rating
        cmHeader("Sim Opinion Poll",2)
        cmWriteLine(2,"Mayor rating Lowest = ",game.l_mayor_rating_l,1)
        cmWriteLine(2,"Mayor rating Highest = ",game.l_mayor_rating_h,1)
        cmWriteLine(2,"Mayor rating overall = ",game.ga_mayor_rating,3)
    
    
    ----------------
    -- POPULATION --
    ----------------
        cmHeader("POPULATION",1)
    
    -- Population
        cmHeader("Total",2)
        cmWriteLine(2,"Population = ",PrettyNumber(game.g_population,0),1)
        cmWriteLine(2,"Workforce population = ",PrettyNumber(game.g_city_workforce_population,0),1)
        cmWriteLine(2,"RCI Capacity = ",PrettyNumber(game.g_city_rci_population),2)
    
    -- Residential
        cmHeader("Residential",2)
        cmWriteLine(2,"Low wealth residential population = ",PrettyNumber(game.g_city_r1_population,0),1)
        cmWriteLine(2,"Medium wealth residential population = ",PrettyNumber(game.g_city_r2_population,0),1)
        cmWriteLine(2,"High wealth residential population = ",PrettyNumber(game.g_city_r3_population,0),2)
        cmWriteLine(2,"Total residential capacity = ",PrettyNumber(game.g_city_r_population,0),2)
    
    -- Commercial
        cmHeader("Commercial",2)
        cmWriteLine(2,"Low wealth commercial service population = ",PrettyNumber(game.g_city_cs1_population,0),1)
        cmWriteLine(2,"Medium wealth commercial service population = ",PrettyNumber(game.g_city_cs2_population,0),1)
        cmWriteLine(2,"High wealth commercial service population = ",PrettyNumber(game.g_city_cs3_population,0),2)
        cmWriteLine(2,"Medium wealth commercial office population = ",PrettyNumber(game.g_city_co2_population,0),1)
        cmWriteLine(2,"High wealth commercial office population = ",PrettyNumber(game.g_city_co3_population,0),2)
        cmWriteLine(2,"Total commercial population = ",PrettyNumber(game.g_city_c_population,0),2)
    
    -- Industrial
        cmHeader("Industrial",2)
        cmWriteLine(2,"Farm population = ",PrettyNumber(game.g_city_ir_population,0),2)
        cmWriteLine(2,"Dirty industrial population = ",PrettyNumber(game.g_city_id_population,0),1)
        cmWriteLine(2,"Manufacturing population = ",PrettyNumber(game.g_city_im_population,0),1)
        cmWriteLine(2,"High tech population = ",PrettyNumber(game.g_city_iht_population,0),2)
        cmWriteLine(2,"Total industrial population = ",PrettyNumber(game.g_city_i_population,0),2)
    
    -- Region
        cmHeader("Regional",2)
        cmWriteLine(2,"Region residential capacity = ",PrettyNumber(game.g_region_r_population,0),1)
        cmWriteLine(2,"Region commercial population = ",PrettyNumber(game.g_region_c_population,0),1)
        cmWriteLine(2,"Region industrial population = ",PrettyNumber(game.g_region_i_population,0),1)
        cmWriteLine(2,"Region RCI capacity = ",PrettyNumber(game.g_region_rci_population,0),2)
        cmWriteLine(2,"Region workforce population = ",PrettyNumber(game.g_region_workforce_population,0),3)
    
    -- Zone Counts
        cmHeader("ZONE and BUILDING COUNTS",1)
    
        cmHeader("Residential",2)
        cmWriteLine(2,"Low density residential zones = ",PrettyNumber(game.g_num_rzone_ld_tiles,0),1)
        cmWriteLine(2,"Medium density residential zones = ",PrettyNumber(game.g_num_rzone_md_tiles,0),1)
        cmWriteLine(2,"High density residential zones = ",PrettyNumber(game.g_num_rzone_hd_tiles,0),2)
    
        cmHeader("Commercial",2)
        cmWriteLine(2,"Low density commercial zones = ",PrettyNumber(game.g_num_czone_ld_tiles,0),1)
        cmWriteLine(2,"Medium density commercial zones = ",PrettyNumber(game.g_num_czone_md_tiles,0),1)
        cmWriteLine(2,"High density commercial zones = ",PrettyNumber(game.g_num_czone_hd_tiles,0),2)
    
        cmHeader("Industrial",2)
        cmWriteLine(2,"Farm zones = ",PrettyNumber(game.g_num_izone_r_tiles,0),1)
        cmWriteLine(2,"Medium density industrial zones = ",PrettyNumber(game.g_num_izone_l_tiles,0),1)
        cmWriteLine(2,"High density industrial zones = ",PrettyNumber(game.g_num_izone_h_tiles,0),2)
    
    -- Building Group Counts
        cmHeader("Buildings Dynamics",2)
        cmWriteLine(2,"Number of buildings = ",PrettyNumber(game.g_num_buildings,0),1)
        cmWriteLine(2,"Unpowered buildings = ",PrettyNumber(game.g_unpowered_building_count,0),1)
        cmWriteLine(2,"Unwatered buildings = ",PrettyNumber(game.g_unwatered_building_count,0),1)
        cmWriteLine(2,"Watered buildings = ",PrettyNumber(game.g_watered_building_count,0),2)
    
    -- Zots
        cmWriteLine(2,"Car zots count = ",PrettyNumber(game.g_car_zot_count,0),3)
    
    ------------
    -- DEMAND --
    ------------
    -- Active Demand
        cmHeader("ACTIVE DEMAND",1)
        cmWriteLine(2," ","",1)
        cmWriteLine(2,"Workforce active demand = ",PrettyNumber(game.g_workforce_active_demand,0),2)
    
        cmHeader("Residential",2)
        cmWriteLine(2,"Low wealth residential active demand = ",PrettyNumber(game.g_r1_active_demand,0),1)
        cmWriteLine(2,"Medium wealth residential active demand = ",PrettyNumber(game.g_r2_active_demand,0),1)
        cmWriteLine(2,"High wealth residential active demand = ",PrettyNumber(game.g_r3_active_demand,0),2)
    
        cmHeader("Commercial",2)
        cmWriteLine(2,"Medium wealth commercial office active demand = ",PrettyNumber(game.g_co2_active_demand,0),1)
        cmWriteLine(2,"High wealth commercial office active demand = ",PrettyNumber(game.g_co3_active_demand,0),2)
    
        cmHeader("Industrial",2)
        cmWriteLine(2,"Dirty industrial active demand = ",PrettyNumber(game.g_id_active_demand,0),1)
        cmWriteLine(2,"Manufacturing active demand = ",PrettyNumber(game.g_im_active_demand,0),1)
        cmWriteLine(2,"High tech active demand = ",PrettyNumber(game.g_iht_active_demand,0),3)
    
    -- Extrapolated Demand
        cmHeader("EXTRAPOLATED DEMAND",1)
        cmHeader("Residential",2)
        cmWriteLine(2,"Low wealth residential extrapolated demand = ",PrettyNumber(game.g_r1_demand_extrap,0),1)
        cmWriteLine(2,"Medium wealth residential extrapolated demand = ",PrettyNumber(game.g_r2_demand_extrap,0),1)
        cmWriteLine(2,"High wealth residential extrapolated demand = ",PrettyNumber(game.g_r3_demand_extrap,0),1)
        cmWriteLine(2,"Total residential extrapolated demand = ",PrettyNumber(game.g_r_demand_extrap,0),2)
    
        cmHeader("Commercial",2)
        cmWriteLine(2,"Low wealth commercial services extrapolated demand = ",PrettyNumber(game.g_cs1_demand_extrap,0),1)
        cmWriteLine(2,"Medium wealth commercial services extrapolated demand = ",PrettyNumber(game.g_cs2_demand_extrap,0),1)
        cmWriteLine(2,"High wealth commercial services extrapolated demand = ",PrettyNumber(game.g_cs3_demand_extrap,0),2)
        cmWriteLine(2,"Medium commercial office extrapolated demand = ",PrettyNumber(game.g_co2_demand_extrap,0),1)
        cmWriteLine(2,"High wealth commercial office extrapolated demand = ",PrettyNumber(game.g_co3_demand_extrap,0),1)
        cmWriteLine(2,"Total commercial extrapolated demand = ",PrettyNumber(game.g_c_demand_extrap,0),2)
    
        cmHeader("Industrial",2)
        cmWriteLine(2,"Farm extrapolated demand = ",PrettyNumber(game.g_ir_demand_extrap,0),2)
        cmWriteLine(2,"Dirty industrial extrapolated demand = ",PrettyNumber(game.g_id_demand_extrap,0),1)
        cmWriteLine(2,"Manufacturing extrapolated demand = ",PrettyNumber(game.g_im_demand_extrap,0),1)
        cmWriteLine(2,"High tech extrapolated demand = ",PrettyNumber(game.g_ih_demand_extrap,0),1)
        cmWriteLine(2,"Total industrial extrapolated demand = ",PrettyNumber(game.g_i_demand_extrap,0),3)
    
    -- Some Other Demand (Regional?)
        cmHeader("? ? ? REGIONAL DEMAND ? ? ?",1)
        cmWriteLine(2," ","",1)
        cmWriteLine(2,"Workforce demand = ",PrettyNumber(game.g_workforce_demand,0),2)
        cmHeader("Residential",2)
        cmWriteLine(2,"Low wealth residential demand = ",PrettyNumber(game.g_r1_demand,0),1)
        cmWriteLine(2,"Medium wealth residential demand = ",PrettyNumber(game.g_r2_demand,0),1)
        cmWriteLine(2,"High wealth residential demand = ",PrettyNumber(game.g_r3_demand,0),2)
        cmHeader("Commercial",2)
        cmWriteLine(2,"Medium wealth commercial office demand = ",PrettyNumber(game.g_co2_demand,0),1)
        cmWriteLine(2,"High wealth commercial office demand = ",PrettyNumber(game.g_co3_demand,0),3)
    
    ----------
    -- CAPS --
    ----------
        cmHeader("CAPS",1)
    
        cmHeader("Residential",2)
        cmWriteLine(2,"Low wealth residential current cap = ",PrettyNumber(game.g_current_r1_cap,2),1)
        cmWriteLine(2,"Medium residential current cap = ",PrettyNumber(game.g_current_r2_cap,2),1)
        cmWriteLine(2,"High wealth residential current cap = ",PrettyNumber(game.g_current_r3_cap,2),2)
    
        cmHeader("Commercial",2)
        cmWriteLine(2,"Medium wealth commercial office current cap = ",PrettyNumber(game.g_current_co2_cap,2),1)
        cmWriteLine(2,"High wealth commercial office current cap = ",PrettyNumber(game.g_current_co3_cap,2),2)
    
        cmHeader("Industrial",2)
        cmWriteLine(2,"  For Farm Cap, see RippleJet's Census Repository Facility","",1)
        cmWriteLine(2,"    https://www.sc4devotion.com/csxlex/lex_filedesc.php?lotGET=1831","",2)
    
        cmWriteLine(2,"Dirty industrial current cap = ",PrettyNumber(game.g_current_id_cap,2),1)
        cmWriteLine(2,"Manufacturing current cap = ",PrettyNumber(game.g_current_im_cap,2),1)
        cmWriteLine(2,"High tech current cap = ",PrettyNumber(game.g_current_iht_cap,2),3)
    
    
    ----------------------------------------
    -- Networks (Roads and Rails and Such --
    ----------------------------------------
        cmHeader("TRANSPORTATION NETWORKS",1)
    
    -- Network Tile Counts
        cmHeader("Network Tile Counts",2)
        cmWriteLine(2,"Street tile count = ",PrettyNumber(game.g_street_tile_count,0),1)
        cmWriteLine(2,"Road tile count = ",PrettyNumber(game.g_road_tile_count,0),1)
        cmWriteLine(2,"Avenue tile count = ",PrettyNumber(game.g_avenue_tile_count,0),1)
        cmWriteLine(2,"Ground highway count = ",PrettyNumber(game.g_groundhighway_tile_count,0),1)
        cmWriteLine(2,"Elevated highway count = ",PrettyNumber(game.g_highway_tile_count,0),1)
        cmWriteLine(2,"Dirt road count = ",PrettyNumber(game.g_dirtroad_tile_count,0),1)
        cmWriteLine(2,"Pothole count = ",PrettyNumber(game.g_pothole_count,0),1)
        cmWriteLine(2,"Bridge tile count = ",PrettyNumber(game.g_bridge_tile_count,0),1)
        cmWriteLine(2,"Rail tile count = ",PrettyNumber(game.g_rail_tile_count,0),1)
        cmWriteLine(2,"Subway tile count = ",PrettyNumber(game.g_subway_tile_count,0),1)
        cmWriteLine(2,"Elevated rail tile count = ",PrettyNumber(game.g_elevated_rail_tile_count,0),1)
        cmWriteLine(2,"Monorail tile count = ",PrettyNumber(game.g_monorail_tile_count,0),2)
    
    -- Neighbor Connections
        cmHeader("Neighbor Connection Counts",2)
        cmWriteLine(2,"Number of road neighbors = ",PrettyNumber(game.g_num_road_neighbors,0),1)
        cmWriteLine(2,"Number of avenue neighbors = ",PrettyNumber(game.g_num_avenue_neighbors,0),1)
        cmWriteLine(2,"Number of rail neighbors = ",PrettyNumber(game.g_num_rail_neighbors,0),1)
        cmWriteLine(2,"Rail neighbor connection count = ",PrettyNumber(game.g_rail_neighbor_connection_count,0),2)
    
    -- Congestion
        cmHeader("Congestion Tile Counts",2)
        cmWriteLine(2,"Street congestion tile count = ",PrettyNumber(game.g_street_congestion_tile_count,0),1)
        cmWriteLine(2,"Street congestion H = ",PrettyNumber(game.l_street_congestion_h,2),1)
        cmWriteLine(2,"Street congestion = ",PrettyNumber(game.ga_street_congestion,2),2)
    
        cmWriteLine(2,"Road congestion tile count = ",PrettyNumber(game.g_road_congestion_tile_count,0),1)
        cmWriteLine(2,"Road congestion H = ",PrettyNumber(game.l_road_congestion_h,2),1)
        cmWriteLine(2,"Road congestion = ",PrettyNumber(game.ga_road_congestion,2),1)
        cmWriteLine(2,"Road connection congestion H = ",PrettyNumber(game.l_road_connection_congestion_h,2),2)
    
        cmWriteLine(2,"Avenue congestion tile count = ",PrettyNumber(game.g_avenue_congestion_tile_count,0),1)
        cmWriteLine(2,"Avenue congestion H = ",PrettyNumber(game.l_avenue_congestion_h,2),1)
        cmWriteLine(2,"Avenue congestion = ",PrettyNumber(game.ga_avenue_congestion,2),1)
        cmWriteLine(2,"Avenue connection congestion H = ",PrettyNumber(game.l_avenue_connection_congestion_h,2),2)
    
        cmWriteLine(2,"Bridge congestion tile count = ",PrettyNumber(game.g_bridge_congestion_tile_count,0),1)
        cmWriteLine(2,"Bridge congestion H = ",PrettyNumber(game.l_bridge_congestion_h,2),1)
        cmWriteLine(2,"Bridge congestion = ",PrettyNumber(game.ga_bridge_congestion,2),2)
    
        cmWriteLine(2,"Rail congestion tile count = ",PrettyNumber(game.g_rail_congestion_tile_count,0),1)
        cmWriteLine(2,"Rail congestion H = ",PrettyNumber(game.l_rail_congestion_h,2),1)
        cmWriteLine(2,"Rail congestion = ",PrettyNumber(game.ga_rail_congestion,2),2)
    
        cmWriteLine(2,"Subway congestion tile count = ",PrettyNumber(game.g_subway_congestion_tile_count,0),1)
        cmWriteLine(2,"Subway congestion H = ",PrettyNumber(game.l_subway_congestion_h,2),1)
        cmWriteLine(2,"Subway congestion = ",PrettyNumber(game.ga_subway_congestion,2),2)
    
        cmWriteLine(2,"Elevated rail congestion tile count = ",PrettyNumber(game.g_elevated_congestion_tile_count,0),1)
        cmWriteLine(2,"Elevated rail congestion H = ",PrettyNumber(game.l_elevated_congestion_h,2),1)
        cmWriteLine(2,"Elevated rail congestion = ",PrettyNumber(game.ga_elevated_congestion,2),2)
    
        cmWriteLine(2,"Monorail congestion tile count = ",PrettyNumber(game.g_monorail_congestion_tile_count,0),1)
        cmWriteLine(2,"Monorail congestion H = ",PrettyNumber(game.l_monorail_congestion_h,2),1)
        cmWriteLine(2,"Monorail congestion = ",PrettyNumber(game.ga_monorail_congestion,2),2)
        cmWriteLine(2,"Freight trip length = ",PrettyNumber(game.ga_freight_trip_length,2),2)
    
    -- Printing Trips Completed or Failed for the beta version (likely to be removed when confirmed not used by the game)
    
        cmHeader("Trips Completed or Failed",2)
        cmWriteLine(2,"Passenger ferry trip completed = ",PrettyNumber(game.g_passnger_ferry_trip_completed,0),1)
        cmWriteLine(2,"Passenger ferry trip failed = ",PrettyNumber(game.g_passnger_ferry_trip_failed,0),1)
        cmWriteLine(2,"Car ferry trip completed = ",PrettyNumber(game.g_car_ferry_trip_completed,0),1)
        cmWriteLine(2,"Car ferry trip failed = ",PrettyNumber(game.g_car_ferry_trip_failed,0),1)
        cmWriteLine(2,"Ferry no road access = ",PrettyNumber(game.l_ferry_no_road_access,0),1)
        cmWriteLine(2,"Shuttle no road access = ",PrettyNumber(game.l_shuttle_no_road_access,0),2)
    
        cmWriteLine(2,"Return trip failed count = ",PrettyNumber(game.g_return_trip_failed_count,0),1)
        cmWriteLine(2,"Transit strike = ",PrettyNumber(game.g_transit_strike,0),1)
        cmWriteLine(2,"Transit strike chance = ",PrettyNumber(game.g_transit_strike_chance,0),2)
    
    -- Network Buildings Counts
        cmHeader("Network Building Counts",2)
        cmWriteLine(2,"Bus station count = ",PrettyNumber(game.g_bus_station_count,0),1)
        cmWriteLine(2,"Subway station count = ",PrettyNumber(game.g_subway_station_count,0),1)
        cmWriteLine(2,"Elevated rail station count = ",PrettyNumber(game.g_elevated_station_count,0),1)
        cmWriteLine(2,"Monorail station count = ",PrettyNumber(game.g_monorail_station_count,0),1)
        -- Next 2 apparently not used by game.
        cmWriteLine(2,"Passenger ferry count = ",PrettyNumber(game.g_passenger_ferry_count,0),1)
        cmWriteLine(2,"Car ferry count = ",PrettyNumber(game.g_car_ferry_count,0),1)
        cmWriteLine(2,"Freight train station count = ",PrettyNumber(game.g_train_freight_depot_count,0),1)
        cmWriteLine(2,"Train station count = ",PrettyNumber(game.g_train_station_count,0),1)
        cmWriteLine(2,"Number of tollbooths = ",PrettyNumber(game.g_num_tollbooths,0),2)
    
    -- Usage
        cmHeader("Network Building Usage Counts",2)
        cmWriteLine(2,"Bus station utilization P = ",PrettyNumber(game.ga_bus_station_utilization_p,2),1)
        cmWriteLine(2,"Bus station utilization PL = ",PrettyNumber(game.l_bus_station_utilization_pl,2),1)
        cmWriteLine(2,"Subway station utilization P = ",PrettyNumber(game.ga_subway_station_utilization_p,2),1)
        cmWriteLine(2,"Subway station utilization PL = ",PrettyNumber(game.l_subway_station_utilization_pl,2),1)
        cmWriteLine(2,"Elevated rail station utilization P = ",PrettyNumber(game.ga_elevated_station_utilization_p,2),1)
        cmWriteLine(2,"Elevated rail station utilization PL = ",PrettyNumber(game.l_elevated_station_utilization_pl,2),1)
        cmWriteLine(2,"Monorail station utilization P = ",PrettyNumber(game.ga_monorail_station_utilization_p,2),1)
        cmWriteLine(2,"Monorail station utilization PL = ",PrettyNumber(game.l_monorail_station_utilization_pl,2),1)
        cmWriteLine(2,"Train station utilization P = ",PrettyNumber(game.ga_train_station_utilization_p,2),1)
        cmWriteLine(2,"Train station utilization PL = ",PrettyNumber(game.l_train_station_utilization_pl,2),2)
    
        cmWriteLine(2,"Rapid transit transactions = ",PrettyNumber(game.g_num_rapidtransit_transitions,0),2)
    
    -- Airports
        cmHeader("Airports",2)
        cmWriteLine(2,"Airport count = ",PrettyNumber(game.g_airport_count,0),1)
        cmWriteLine(2,"Airport efficiency = ",PrettyNumber(game.ga_airport_efficiency,0),1)
        cmWriteLine(2,"Airport no road access G = ",PrettyNumber(game.g_airport_no_road_access,0),1)
        cmWriteLine(2,"Airport no road access L = ",PrettyNumber(game.l_airport_no_road_access,0),2)
    
        cmWriteLine(2,"Small airport s1 count = ",PrettyNumber(game.g_small_airport_s1_count,0),1)
        cmWriteLine(2,"Small airport s2 count = ",PrettyNumber(game.g_small_airport_s2_count,0),1)
        cmWriteLine(2,"Small airport s3 count = ",PrettyNumber(game.g_small_airport_s3_count,0),1)
        cmWriteLine(2,"Small airport count = ",PrettyNumber(game.g_small_airport_count,0),2)
    
        cmWriteLine(2,"Medium airport s1 count = ",PrettyNumber(game.g_medium_airport_s1_count,0),1)
        cmWriteLine(2,"Medium airport s2 count = ",PrettyNumber(game.g_medium_airport_s2_count,0),1)
        cmWriteLine(2,"Medium airport s3 count = ",PrettyNumber(game.g_medium_airport_s3_count,0),1)
        cmWriteLine(2,"Medium airport count = ",PrettyNumber(game.g_medium_airport_count,0),2)
    
        cmWriteLine(2,"Large airport s1 count = ",PrettyNumber(game.g_large_airport_s1_count,0),1)
        cmWriteLine(2,"Large airport s2 count = ",PrettyNumber(game.g_large_airport_s2_count,0),1)
        cmWriteLine(2,"Large airport s3 count = ",PrettyNumber(game.g_large_airport_s3_count,0),1)
        cmWriteLine(2,"Large airport count = ",PrettyNumber(game.g_large_airport_count,0),2)
    
    -- Seaports
        cmHeader("Seaports",2)
        cmWriteLine(2,"Seaport count = ",PrettyNumber(game.g_seaport_count,0),1)
        cmWriteLine(2,"Seaport s1 count = ",PrettyNumber(game.g_seaport_s1_count,0),1)
        cmWriteLine(2,"Seaport s2 count = ",PrettyNumber(game.g_seaport_s2_count,0),1)
        cmWriteLine(2,"Seaport s3 count = ",PrettyNumber(game.g_seaport_s3_count,0),1)
        cmWriteLine(2,"Seaport volume = ",PrettyNumber(game.g_seaport_volume,0),1)
        cmWriteLine(2,"Seaport efficiency = ",PrettyNumber(game.ga_seaport_efficiency,0),1)
        cmWriteLine(2,"Seaport water no edge access = ",PrettyNumber(game.l_seaport_water_edge_no_access,0),1)
        cmWriteLine(2,"Seaport no road access G = ",PrettyNumber(game.g_seaport_no_road_access,0),1)
        cmWriteLine(2,"Seaport no road access L = ",PrettyNumber(game.l_seaport_no_road_access,0),3)
    
    ------------
    -- UTILITIES --
    ------------
        cmHeader("UTILITIES",1)
    
    -- Power
        cmHeader("Power",2)
        cmWriteLine(2,"Power pole count = ",PrettyNumber(game.g_power_pole_count,0),1)
        cmWriteLine(2,"Wind power plant count = ",PrettyNumber(game.g_power_plant_count_wind,0),1)
        cmWriteLine(2,"Gas power plant count = ",PrettyNumber(game.g_power_plant_count_gas,0),1)
        cmWriteLine(2,"Coal power plant = ",PrettyNumber(game.g_power_plant_count_coal,0),1)
        cmWriteLine(2,"Oil power plant count = ",PrettyNumber(game.g_power_plant_count_oil,0),1)
        cmWriteLine(2,"Solar power plant count = ",PrettyNumber(game.g_power_plant_count_solar,0),1)
        cmWriteLine(2,"Nuclear power plant count = ",PrettyNumber(game.g_power_plant_count_nuclear,0),1)
        cmWriteLine(2,"Fusion power plant count = ",PrettyNumber(game.g_power_plant_count_fusion,0),1)
        cmWriteLine(2,"Waste power plant count = ",PrettyNumber(game.g_power_plant_count_waste,0),2)
        cmWriteLine(2,"Total power plant count = ",PrettyNumber(game.g_power_plant_count,0),2)
    
        cmWriteLine(2,"Aged power plant count = ",PrettyNumber(game.g_aged_power_plant_count,0),1)
        cmWriteLine(2,"Overworked power plant count = ",PrettyNumber(game.g_overworked_power_plant_count,0),1)
        cmWriteLine(2,"Power plant age H = ",PrettyNumber(game.l_power_plant_age_h,0),2)
    
        cmWriteLine(2,"Power production capacity = ",PrettyNumber(game.g_power_production_capacity,0),1)
        cmWriteLine(2,"Power consumed = ",PrettyNumber(game.g_power_consumed,0),1)
        cmWriteLine(2,"Power strike = ",PrettyNumber(game.g_power_strike,0),1)
        cmWriteLine(2,"Power strike chance = ",PrettyNumber(game.g_power_strike_chance,2),2)
    
    -- Water
        cmHeader("Water",2)
        cmWriteLine(2,"Water source count = ",PrettyNumber(game.g_water_source_count,0),1)
        cmWriteLine(2,"Water production capacity = ",PrettyNumber(game.g_water_production_capacity,0),1)
        cmWriteLine(2,"Water pipe count = ",PrettyNumber(game.g_water_pipe_count,0),1)
        cmWriteLine(2,"Water tile count = ",PrettyNumber(game.g_water_tile_count,0),1)
        cmWriteLine(2,"Water consumed = ",PrettyNumber(game.g_water_consumed,0),2)
    
        cmWriteLine(2,"Water treatment plant count = ",PrettyNumber(game.g_water_treatment_plant_count,0),1)
        cmWriteLine(2,"Water building age H = ",PrettyNumber(game.l_water_building_age_h,0),2)
    
        cmWriteLine(2,"Water pollution pump shutdown count = ",PrettyNumber(game.g_water_pollution_pump_shutdown_count,0),1)
        cmWriteLine(2,"Water distressed pipe count = ",PrettyNumber(game.g_water_distressed_pipe_count,0),1)
        cmWriteLine(2,"Water burst pipe count = ",PrettyNumber(game.g_water_burst_pipe_count,0),2)
    
    -- Garbage
        cmHeader("Garbage",2)
        cmWriteLine(2,"Garbage produced = ",PrettyNumber(game.g_garbage_produced,0),1)
        cmWriteLine(2,"Uncollected garbage H = ",PrettyNumber(game.l_uncollected_garbage_h,0),1)
        cmWriteLine(2,"Uncollected garbage = ",PrettyNumber(game.g_uncollected_garbage,0),1)
        cmWriteLine(2,"Garbage pollution = ",PrettyNumber(game.ga_garbage_pollution,0),2)
    
        cmWriteLine(2,"Landfill capacity = ",PrettyNumber(game.g_landfill_capacity,0),1)
        cmWriteLine(2,"Available landfill capacity = ",PrettyNumber(game.g_available_landfill_capacity,0),1)
        cmWriteLine(2,"Garbage to landfill = ",PrettyNumber(game.g_garbage_to_landfill,0),2)
    
        cmWriteLine(2,"Recycling center count = ",PrettyNumber(game.g_recycling_center_count,0),1)
        cmWriteLine(2,"Recycling center effect P = ",PrettyNumber(game.g_recycling_center_effect_p,0),1)
        cmWriteLine(2,"Garbage recycled = ",PrettyNumber(game.g_garbage_recycled,0),2)
    
        cmWriteLine(2,"Waste to energy building count = ",PrettyNumber(game.g_waste_to_energy_building_count,0),1)
        cmWriteLine(2,"Waste to energy capacity = ",PrettyNumber(game.g_waste_to_energy_capacity_daily,0),1)
        cmWriteLine(2,"Garbage to energy = ",PrettyNumber(game.g_garbage_to_energy,0),2)
    
        cmWriteLine(2,"Incinerator count = ",PrettyNumber(game.g_incinerator_count,0),1)
        cmWriteLine(2,"Incinerator capacity = ",PrettyNumber(game.g_incinerator_capacity_daily,0),2)
    
    -- Pollution
        cmHeader("Pollution",2)
        cmWriteLine(2,"Air pollution H = ",PrettyNumber(game.l_air_pollution_h,2),1)
        cmWriteLine(2,"Air pollution = ",PrettyNumber(game.ga_air_pollution,2),1)
        cmWriteLine(2,"Water pollution H = ",PrettyNumber(game.l_water_pollution_h,2),1)
        cmWriteLine(2,"Water pollution = ",PrettyNumber(game.ga_water_pollution,2),3)
    
    ------------
    -- CIVICS --
    ------------
        cmHeader("CIVICS",1)
    
    -- Education
        cmHeader("Education",2)
        cmWriteLine(2,"Education = ",PrettyNumber(game.ga_education,2),1)
        cmWriteLine(2,"Tract EQ L = ",PrettyNumber(game.l_tract_eq_l,2),1)
        cmWriteLine(2,"Tract EQ H = ",PrettyNumber(game.l_tract_eq_h,2),1)
        cmWriteLine(2,"School grade L = ",PrettyNumber(game.l_school_grade_l,2),1)
        cmWriteLine(2,"School grade = ",PrettyNumber(game.ga_school_grade,2),1)
        cmWriteLine(2,"School strike = ",PrettyNumber(game.g_school_strike,0),1)
        cmWriteLine(2,"School strike chance = ",PrettyNumber(game.g_school_strike_chance,2),1)
        cmWriteLine(2,"Education coverage = ",PrettyNumber(game.g_education_coverage_p,2),2)
    
        cmWriteLine(2,"Number of elementary schools = ",PrettyNumber(game.g_num_elem_schools,0),1)
        cmWriteLine(2,"Number of high schools = ",PrettyNumber(game.g_num_high_schools,0),1)
        cmWriteLine(2,"Number of schools = ",PrettyNumber(game.g_num_schools,0),1)
        cmWriteLine(2,"Number of colleges = ",PrettyNumber(game.g_num_colleges,0),2)
    
        cmWriteLine(2,"Number of educational buildings = ",PrettyNumber(game.g_num_educational_buildings,0),2)
    
        cmWriteLine(2,"Number of libraries = ",PrettyNumber(game.g_num_libraries,0),1)
        cmWriteLine(2,"Library served = ",PrettyNumber(game.g_num_library_served,0),1)
        cmWriteLine(2,"Library grade L = ",PrettyNumber(game.l_library_grade_l,2),1)
        cmWriteLine(2,"Library grade = ",PrettyNumber(game.ga_library_grade,2),2)
    
        cmWriteLine(2,"Number of museums = ",PrettyNumber(game.g_num_museums,0),1)
        cmWriteLine(2,"Museum served = ",PrettyNumber(game.g_num_museum_served,0),1)
        cmWriteLine(2,"Museum grade L = ",PrettyNumber(game.l_museum_grade_l,2),1)
        cmWriteLine(2,"Museum grade = ",PrettyNumber(game.ga_museum_grade,2),2)
    
    -- Health
        cmHeader("Health",2)
        cmWriteLine(2,"Health = ",PrettyNumber(game.ga_health,2),1)
        cmWriteLine(2,"Tract HQ L = ",PrettyNumber(game.l_tract_hq_l,2),1)
        cmWriteLine(2,"Tract HQ H = ",PrettyNumber(game.l_tract_hq_h,2),1)
        cmWriteLine(2,"Health grade = ",PrettyNumber(game.ga_health_grade,2),1)
        cmWriteLine(2,"Health strike = ",PrettyNumber(game.g_health_strike,0),1)
        cmWriteLine(2,"Health strike chance = ",PrettyNumber(game.g_health_strike_chance,2),1)
        cmWriteLine(2,"Health Coverage = ",PrettyNumber(game.g_health_coverage_p,2),2)
    
        cmWriteLine(2,"Number of clinics = ",PrettyNumber(game.g_num_clinics,0),1)
        cmWriteLine(2,"Clinic grade L = ",PrettyNumber(game.l_clinic_grade_l,2),1)
        cmWriteLine(2,"Number of hospitals = ",PrettyNumber(game.g_num_hospitals,0),1)
        cmWriteLine(2,"Hospital grade L = ",PrettyNumber(game.l_hospital_grade_l,2),1)
        cmWriteLine(2,"Health capacity = ",PrettyNumber(game.g_health_capacity,0),2)
    
        cmWriteLine(2,"Number of treated patients = ",PrettyNumber(game.g_num_treated_patients,0),1)
        cmWriteLine(2," ^Bugged. Patients variable matches landfill capacity after a game month is run.","",2) -- Bug Note
    
        cmWriteLine(2,"Tract life expectancy L = ",PrettyNumber(game.l_tract_life_exp_l,2),1)
        cmWriteLine(2,"Tract life expectancy H = ",PrettyNumber(game.l_tract_life_exp_h,2),1)
        cmWriteLine(2,"Life expectancy = ",PrettyNumber(game.ga_life_exp,2),2)
    
    -- Parks and Recreation
        cmHeader("Parks",2)
        cmWriteLine(2,"Number of parks = ",PrettyNumber(game.g_num_parks,0),1)
        cmWriteLine(2,"Number of recreation = ",PrettyNumber(game.g_num_recreation,0),2)
    
    -- Crime and Police and Jails
        cmHeader("Crime",2)
        cmWriteLine(2,"Crime = ",PrettyNumber(game.ga_crime,0),1)
        cmWriteLine(2,"Crime H = ",PrettyNumber(game.l_crime_h,0),1)
        cmWriteLine(2,"Crime committed count = ",PrettyNumber(game.g_crime_commited_count,0),1)
        cmWriteLine(2,"Criminal count = ",PrettyNumber(game.g_criminal_count,0),2)
    
        cmWriteLine(2,"Police station count = ",PrettyNumber(game.g_police_station_count,0),1)
        cmWriteLine(2,"Police coverage = ",PrettyNumber(game.g_police_coverage_p,2),1)
        cmWriteLine(2,"Police coverage GA = ",PrettyNumber(game.ga_police_coverage,2),1)
        cmWriteLine(2,"Police repath attempts = ",PrettyNumber(game.g_police_repath_attempts,0),1)
        cmWriteLine(2,"Police strike = ",PrettyNumber(game.g_police_strike,0),1)
        cmWriteLine(2,"Police strike chance = ",PrettyNumber(game.g_police_strike_chance,2),1)
        cmWriteLine(2,"Police no roads = ",PrettyNumber(game.l_police_no_roads,0),1)
        cmWriteLine(2,"Arrest count = ",PrettyNumber(game.g_arrest_count,0),2)
    
        cmWriteLine(2,"Jail count = ",PrettyNumber(game.g_jail_count,0),1)
        cmWriteLine(2,"Jail capacity = ",PrettyNumber(game.g_jail_capacity,0),1)
        cmWriteLine(2,"Jailbreak = ",PrettyNumber(game.g_jailbreak,0),1)
        cmWriteLine(2,"Inmate count = ",PrettyNumber(game.g_inmate_count,0),2)
    
    -- Fire
        cmHeader("Fire",2)
        cmWriteLine(2,"Flammability = ",PrettyNumber(game.ga_flammability,2),1)
        cmWriteLine(2,"Flammability H = ",PrettyNumber(game.l_flammability_h,2),2)
    
        cmWriteLine(2,"Fire station count = ",PrettyNumber(game.g_fire_station_count,0),1)
        cmWriteLine(2,"Fire coverage = ",PrettyNumber(game.ga_fire_coverage,2),1)
        cmWriteLine(2,"Fire coverage P = ",PrettyNumber(game.g_fire_coverage_p,2),1)
        cmWriteLine(2,"Fire repath attempts = ",PrettyNumber(game.g_fire_repath_attempts,0),1)
        cmWriteLine(2,"Fire strike = ",PrettyNumber(game.g_fire_strike,0),1)
        cmWriteLine(2,"Fire strike chance = ",PrettyNumber(game.g_fire_strike_chance,2),1)
        cmWriteLine(2,"Fire station no roads = ",PrettyNumber(game.l_fire_station_no_roads,0),2)
    
    -------------
    -- FINANCE --
    -------------
        cmHeader("FINANCE",1)
    
    -- Budget
        cmHeader("Budget",2)
        cmWriteLine(2,"Tax income = ",PrettyNumber(game.g_tax_income,0),1)
        cmWriteLine(2,"Neighbor deals income = ",PrettyNumber(game.g_nd_income,0),1)
        cmWriteLine(2,"Monthly income = ",PrettyNumber(game.g_income_monthly,0),1)
        cmWriteLine(2,"Neighbor deals expense = ",PrettyNumber(game.g_nd_expense,0),1)
        cmWriteLine(2,"Monthly expense = ",PrettyNumber(game.g_expense_monthly,0),1)
        cmWriteLine(2,"Funds = ",PrettyNumber(game.g_funds,0),2)
    
    -- Loans
        cmHeader("Loans",2)
        cmWriteLine(2,"Borrowing limit = ",PrettyNumber(game.g_borrowing_limit,0),1)
        cmWriteLine(2,"Borrowed = ",PrettyNumber(game.g_borrowed,0),1)
        cmWriteLine(2,"Monthly bond payments = ",PrettyNumber(game.g_bond_payments_monthly,0),3)
    
    -- Tax Rates
        cmHeader("TAX RATES",1)
        cmWriteLine(2," ","",1)
        cmWriteLine(2,"Neutral tax rate = ",PrettyNumber(game.g_tax_rate_neutral,2),2)
    
        cmHeader("Residential",2)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_r_low)
        cmWriteLine(2,"Low wealth residential tax rate = ",cmFixTax,1)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_r_med)
        cmWriteLine(2,"Medium wealth residential tax rate = ",cmFixTax,1)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_r_high)
        cmWriteLine(2,"High wealth residential tax rate = ",cmFixTax,2)
    
        cmHeader("Commercial",2)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_cs_low)
        cmWriteLine(2,"Low wealth commercial service tax rate = ",cmFixTax,1)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_cs_med)
        cmWriteLine(2,"Medium wealth commercial service tax rate = ",cmFixTax,1)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_cs_high)
        cmWriteLine(2,"High wealth commercial service tax rate = ",cmFixTax,2)
    
         local cmFixTax = cmTaxCalc(game.g_tax_rate_co_med)
        cmWriteLine(2,"Medium wealth commercial office tax rate = ",cmFixTax,1)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_co_high)
        cmWriteLine(2,"High wealth commercial office tax rate = ",cmFixTax,2)
    
        cmHeader("Industrial",2)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_i_resource)
        cmWriteLine(2,"Farm tax rate = ",cmFixTax,1)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_i_dirty)
        cmWriteLine(2,"Dirty industrial tax rate = ",cmFixTax,1)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_i_manufacturing)
        cmWriteLine(2,"Manufacturing tax rate = ",cmFixTax,1)
         local cmFixTax = cmTaxCalc(game.g_tax_rate_i_hightech)
        cmWriteLine(2,"High tech tax rate = ",cmFixTax,3)
    
    -- Funding
        cmHeader("FUNDING",1)
        cmWriteLine(2," ","",1)
    
        cmWriteLine(2,"Road funding = ",PrettyNumber(game.g_road_funding_p,2),1)
        cmWriteLine(2,"Mass transit funding = ",PrettyNumber(game.g_masstransit_funding_p,2),1)
        cmWriteLine(2,"Fire funding PG = ",PrettyNumber(game.g_fire_funding_p,2),1)
        cmWriteLine(2,"Fire funding PL = ",PrettyNumber(game.l_fire_funding_p,2),1)
        cmWriteLine(2,"Police funding PG = ",PrettyNumber(game.g_police_funding_p,2),1)
        cmWriteLine(2,"Police funding PL = ",PrettyNumber(game.l_police_funding_p,2),1)
        cmWriteLine(2,"Clinic funding = ",PrettyNumber(game.l_clinic_funding_l,2),1)
        cmWriteLine(2,"Hospital funding = ",PrettyNumber(game.l_hospital_funding_l,2),1)
        cmWriteLine(2,"Health funding = ",PrettyNumber(game.g_health_funding_p,2),1)
        cmWriteLine(2,"School funding = ",PrettyNumber(game.l_school_funding_l,2),1)
        cmWriteLine(2,"Library funding = ",PrettyNumber(game.l_library_funding_l,2),1)
        cmWriteLine(2,"Museum funding = ",PrettyNumber(game.l_museum_funding_l,2),1)
        cmWriteLine(2,"Education funding = ",PrettyNumber(game.g_education_funding_p,2),1)
        cmWriteLine(2,"Power funding = ",PrettyNumber(game.g_power_funding_p,2),1)
        cmWriteLine(2,"Power plant funding = ",PrettyNumber(game.l_power_plant_funding_pl,2),1)
        cmWriteLine(2,"Water funding = ",PrettyNumber(game.g_water_funding_p,2),1)
        cmWriteLine(2,"Water building funding = ",PrettyNumber(game.l_water_building_funding_pl,2),1)
        cmWriteLine(2,"Parks funding = ",PrettyNumber(game.g_parks_funding_p,2),1)
        cmWriteLine(2,"Landmarks funding = ",PrettyNumber(game.g_landmarks_funding_p,2),1)
        cmWriteLine(2,"Pollution funding = ",PrettyNumber(game.g_pollution_funding_p,2),3)
    
    -- Neighbor Deals
        cmHeader("NEIGHBOR DEALS",1)
        cmWriteLine(2," ","",1)
    
        cmWriteLine(2,"Neighbor power connection present = ",PrettyNumber(game.g_nd_connection_present_power,0),1)
        cmWriteLine(2,"Neighbor deal can buy power = ",PrettyNumber(game.g_nd_can_buy_power,0),1)
        cmWriteLine(2,"Neighbor deal can sell power = ",PrettyNumber(game.g_nd_can_sell_power,0),1)
        cmWriteLine(2,"Neighbor deal buy power count = ",PrettyNumber(game.g_nd_count_buy_power,0),1)
        cmWriteLine(2,"Neighbor deal sell power count = ",PrettyNumber(game.g_nd_count_sell_power,0),1)
        cmWriteLine(2,"Neighbor power imported = ",PrettyNumber(game.g_power_imported,0),1)
        cmWriteLine(2,"Neighbor power exported = ",PrettyNumber(game.g_power_exported,0),2)
    
        cmWriteLine(2,"Neighbor water connection present = ",PrettyNumber(game.g_nd_connection_present_water,0),1)
        cmWriteLine(2,"Neighbor deal can buy water = ",PrettyNumber(game.g_nd_can_buy_water,0),1)
        cmWriteLine(2,"Neighbor deal can sell water = ",PrettyNumber(game.g_nd_can_sell_water,0),1)
        cmWriteLine(2,"Neighbor buy water count = ",PrettyNumber(game.g_nd_count_buy_water,0),1)
        cmWriteLine(2,"Neighbor sell water count = ",PrettyNumber(game.g_nd_count_sell_water,0),1)
        cmWriteLine(2,"Neighbor water imported = ",PrettyNumber(game.g_water_imported,0),1)
        cmWriteLine(2,"Neighbor water exported = ",PrettyNumber(game.g_water_exported,0),2)
    
        cmWriteLine(2,"Neighbor garbage connection present = ",PrettyNumber(game.g_nd_connection_present_garbage,0),1)
        cmWriteLine(2,"Neighbor deal can export garbage = ",PrettyNumber(game.g_nd_can_export_garbage,0),1)
        cmWriteLine(2,"Neighbor deal can import garbage = ",PrettyNumber(game.g_nd_can_import_garbage,0),1)
        cmWriteLine(2,"Neighbor import garbage count = ",PrettyNumber(game.g_nd_count_import_garbage,0),1)
        cmWriteLine(2,"Neighbor deal export garbage count = ",PrettyNumber(game.g_nd_count_export_garbage,0),1)
        cmWriteLine(2,"Neighbor deal garbage imported = ",PrettyNumber(game.g_garbage_imported,0),1)
        cmWriteLine(2,"Neighbor deal garbage exported = ",PrettyNumber(game.g_garbage_exported,0),3)
    
    -- Disasters
        cmHeader("DISASTERS",1)
        cmWriteLine(2," ","",1)
    
        cmWriteLine(2,"Damage building count = ",PrettyNumber(game.g_disasters_damage_building_count,0),1)
        cmWriteLine(2,"Damage cost = ",PrettyNumber(game.g_disasters_damage_cost,0),1)
        cmWriteLine(2,"Fire cause arson = ",PrettyNumber(game.g_disasters_fire_cause_arson,0),1)
        cmWriteLine(2,"Fire cause effects = ",PrettyNumber(game.g_disasters_fire_cause_effects,0),1)
        cmWriteLine(2,"Fire cause flammability = ",PrettyNumber(game.g_disasters_fire_cause_flammability,0),1)
        cmWriteLine(2,"Fire dispatch effectiveness = ",PrettyNumber(game.g_disasters_fire_dispatch_effectiveness,2),1)
        cmWriteLine(2,"Fire started = ",PrettyNumber(game.g_disasters_fire_started,0),1)
        cmWriteLine(2,"Fire ended = ",PrettyNumber(game.g_disasters_fire_ended,0),1)
        cmWriteLine(2,"Disasters in progress = ",PrettyNumber(game.g_disasters_in_progress,0),1)
        cmWriteLine(2,"Police dispatch effectiveness = ",PrettyNumber(game.g_disasters_police_dispatch_effectiveness,2),1)
        cmWriteLine(2,"Riot started = ",PrettyNumber(game.g_disasters_riot_started,0),1)
        cmWriteLine(2,"Riot ended = ",PrettyNumber(game.g_disasters_riot_ended,0),3)
    
    
    -- Disclaimer
        -- Hide gibberish?
        if not (cmHideGibberish) then
          cmWriteLine(2,"Data as found in the game variables. Information deemed reliable with no guarantee.","",1)
          cmWriteLine(2," If counts don't add up, blame Maxis. :p","",2)
        end
    
    -- All done. Bye, bye.
        -- Hide EOF?
        if not (cmHideEOF) then
          cmWriteLine(0,"----------------------------------------------------------------------------------EOF","",1)
        end
    
    -- Close out file
        io.flush()
        io.close()
    
    
    -- Build a memory table of CSV data if requested
        if (cmCreateCSV) then
          cmFullText = {}
          local TblPos = 1
          local cmTextFound = io.open(filename)
          if cmTextFound then
            io.input(filename)
            while true do
              local line = io.read()
    
              -- These are very specific substitutions. If changing the .txt output corresponding changes must be made here.
              --  Substitutions are to put an = sign in where the report doesn't have one so the next code block can find them
              --  Also, for the Sim Date it chops the string down excluding the (yyyy/mm/dd) text.
              local temp, temp2, found = nil
              found = string.find(line,"REGION..:")
              if (found ~= nil) then
                 temp = string.gsub(line,"REGION..:","Region =")
              else
                found = string.find(line,"CITY....:")
                if (found ~= nil) then
                  temp = string.gsub(line,"CITY....:","City =")
                else
                  found = string.find(line,"SIM DATE:")
                  if (found ~= nil) then
                    temp2 = string.gsub(line,"SIM DATE:","Sim Date =")
                    temp = string.sub(temp2,1,23)
                  else
                    found = string.find(line,"City tile size:")
                    if (found ~= nil) then
                      found = string.find(line,"Small")
                      if found then
                        temp = "  City tile size = 4096"
                      end
                      found = string.find(line,"Medium")
                      if found then
                        temp = "  City tile size = 16384"
                      end
                      found = string.find(line,"Large")
                      if found then
                        temp = "  City tile size = 65536"
                      end
                    else
                      temp = line
                    end
                  end
                end
              end
    
              -- Find lines with the = sign in them and insert the appropriate parts into the table
              local p1,p2 = string.find(temp," = ")
              if (p1 ~= nil) then
                local step1 = [["]] .. string.sub(temp,3,p1 - 1) .. [[",]]
    
                table.insert(cmFullText,TblPos,step1)
                local step2 = string.sub(temp,p2 + 1)
                local step3 = string.gsub(step2,"%,","") .. [[,]] -- Strip commas from string
                table.insert(cmFullText,TblPos + 1,step3)
                TblPos = TblPos + 2
              end
            end
          end
        end
    
    
    -- Clear valriables before exit
        cmIni = {}
        cmIniPath = nil
        cmIniFound = nil
        cmReport = nil
        cmOutputPath = nil
        cmTheFile = nil
        cmRptDate = nil
        cmNumbersFormat = nil
        cmHideGibberish = nil
        cmHideFileName = nil
        cmHideTimeStamp = nil
        cmHideIniContents = nil
        cmHideVersion = nil
        cmHideEOF = nil
        cmCustomTitle = nil
        cmCreateCSV = nil
        cmUniqueFilename = nil
    
    
    end  -- cmCityReport function END
    
    
    -- Headers can be Block or Group
    function cmHeader(Text,Style)
      
    -- Block Heading
      if Style == 1 then
        local TextLength = string.len(Text) + 6
        local Dashes = string.rep("-",TextLength)
        io.write(Dashes,"\n")
        io.write("-- ",Text," --\n")
        io.write(Dashes,"\n")
      end
    
    -- Group Heading
      if Style == 2 then
        io.write("\n  ",Text,"\n")
        local TextLength = string.len(Text)
        local Dashes = string.rep("-",TextLength)
        io.write("  ",Dashes,"\n")
      end
    end
    
    -- Write individual line (CRs is the number of carriage returns aka \n)
    function cmWriteLine(Indent,LineText,DataValue,CRs)
      local cmIndent = string.rep(" ",Indent)
      local cmCRs = string.rep("\n",CRs)
      io.write(cmIndent,LineText,DataValue,cmCRs)
    end
    
    
    -- Format number with commas
    --  From: http://lua-users.org/wiki/FormattingNumbers
    function comma_value(amount)
      local formatted = amount
      while true do  
        formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
        if (k==0) then
          break
        end
      end
      return formatted
    end
    
    -- Round a number
    --  From: http://lua-users.org/wiki/FormattingNumbers
    function round(val, decimal)
      -- Check for weirdly large number, but print if RAW format requested
      local SmooshedString = string.lower(cmNumbersFormat)
      if SmooshedString ~= "raw" then
        if val > 1000000000000 then
          val = 0
        end
      end
      if (decimal) then
        return math.floor( (val * 10^decimal) + 0.5) / (10^decimal)
      else
        return math.floor(val+0.5)
      end
    end
    
    
    -- Format numbers based on selectable choice
    function PrettyNumber(Number,Places)
      local SmooshedString = string.lower(cmNumbersFormat)
      if SmooshedString == "comma" then
        local cmNumber = comma_value(Number)
        return cmNumber
      elseif SmooshedString == "round" then
        local cmNumber = round(Number,Places)
        return cmNumber
      elseif SmooshedString == "raw" then
        cmNumber = Number
        return cmNumber
      else -- "both" is the default
        local cmRound = round(Number,Places)
        local cmNumber = comma_value(cmRound)
        return cmNumber
      end
    end
    
    -- Add rounding bug fix and tack on .0 to integer tax rates
    function cmTaxCalc(TaxRate)
      -- Check for raw or comma only format
      local SmooshedString = string.lower(cmNumbersFormat)
      if SmooshedString == "raw" then
        return TaxRate
      elseif SmooshedString == "comma" then
        return TaxRate
      end
    
      -- Round or both format
      local cmTaxRate = round((TaxRate - 0.01),1)
      local cmString = tostring(cmTaxRate)
    
      -- We know length will be 3 or 4 if a decimal point is already present
      -- Add the .0 if tax rate 10 to 20 as integer
      if (string.len(cmString) == 2) then
        cmString = cmString .. ".0"
      end
    
      -- Add the .0 if tax rate 0 to 9 as integer
      if (string.len(cmString) == 1) then
        cmString = cmString .. ".0"
      end
        return cmString
    end
    
    
    
    
    --
    

     

     

    TGI: CA63E2A3-4A5E8EF6-434F52A9

    Spoiler
    
    --#-package:7a76f88A# -- package signature
    --
    -- The C.O.R.I. Reports - CSV Output
    --  (Called from IID 0x434F5249 Lua package 7A76F889)
    
    function cmOutputCSV(filename)
    -- Clear unnecessary variables for this report
        cmIni = {}
        cmIniPath = nil
        cmIniFound = nil
        cmReport = nil
        cmOutputPath = nil
        cmRptDate = nil
        cmNumbersFormat = nil
        cmHideGibberish = nil
        cmHideFileName = nil
        cmHideTimeStamp = nil
        cmHideIniContents = nil
        cmHideVersion = nil
        cmHideEOF = nil
        cmCustomTitle = nil
        cmCreateCSV = nil
        cmUniqueFilename = nil
    
    
    -- Open file and output data
    --    local cmTheFile = filename
        local exist = io.open(filename) -- See if file can be opened
        io.output(filename) -- Open again, but in output mode
    
    -- Read and Write the cmFullText Table (Text and Numbers are interleaved in the table.)
        local x = 0
        for k,v in pairs(cmFullText) do
          x = not x
          if not x then
            io.write(v) -- Write out the text lables
          end
        end
        io.write("EOL",[[,]],1,"\n")
    
        local x = 0
        for k,v in pairs(cmFullText) do
          x = not x
          if x then
            io.write(v) -- Write out the numeric values
          end
        end
        io.write("EOL",[[,]],1,"\n")
    
    -- Close out file
        io.flush()
        io.close()
    
    -- Clear memory used by this large table
       cmFullText = {}
    
    
    end -- cmOutputCSV function END
    

     

     

    And here's a text version of it it all which you can download: CORI Reports - v02e - Text of Lua Code.zip

    • Like 1
    • Thanks 1

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    Alright so I got iLives Reader running in Crossover (basically a really nice version of WINE) and I'm working on it now! Thanks for your help, I'll be sure to post back if I get it up and running.

    • Like 3

    Share this post


    Link to post
    Share on other sites

    Sign In or register to comment...

    To comment in reply, you must be a community member

    Sign In  

    Already have an account? Sign in here.

    Sign In Now

    Create an Account  

    Sign up to join our friendly community. It's easy!  

    Register a New Account


    ×

    Thank You for the Continued Support!

    Simtropolis depends on donations to fund site maintenance costs.
    Without your support, we just would not be in our 24th year online!  You really help make this a great community. *:thumb:

    But we still need your support to stay online. If you're able to, please consider a donation to help us stay up and running. This helps sustain a platform where we can share our community creations for years to come.

    Make a Donation, Get a Gift!

    Expand your city with the best from the Simtropolis Exchange.
    Make a Donation and get one or all three discs today!

    STEX Collections

    By way of a "Thank You" gift, we'd like to send you our STEX Collector's DVD. It's some of the best buildings, lots, maps and mods collected for you over the years. Check out the STEX Collections for more info.

    Each donation helps keep Simtropolis online, open and free!

    Thank you for reading and enjoy the site!

    More About STEX Collections