<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sc2kfix.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AF</id>
	<title>sc2k-reverse - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sc2kfix.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AF"/>
	<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/Special:Contributions/AF"/>
	<updated>2026-04-07T16:25:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=917</id>
		<title>User:AF/SCURK</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=917"/>
		<updated>2026-03-22T10:52:53Z</updated>

		<summary type="html">&lt;p&gt;AF: /* TIL - DOS -&amp;gt; Windows conversion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= SCURK Observations =&lt;br /&gt;
&lt;br /&gt;
Various observations concerning the different versions of SCURK.&lt;br /&gt;
&lt;br /&gt;
This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.&lt;br /&gt;
&lt;br /&gt;
== DOS SCURK ==&lt;br /&gt;
&lt;br /&gt;
* Runway tiles are available for modification and placement.&lt;br /&gt;
* The palette that you get here isn&#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section).&lt;br /&gt;
* Objects are top-aligned to the empty base tile background.&lt;br /&gt;
&lt;br /&gt;
== Macintosh SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The base tileset used here is a special MAC-headered MIF.&lt;br /&gt;
* Saved working tilesets use the standard Windows header.&lt;br /&gt;
* If you do a standard save of the base object set, certain palette indices are not preserved (glaring examples would be the Marina and Load Bay).&lt;br /&gt;
&lt;br /&gt;
== Windows SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The right-most column of pixels on 4x4 objects will end up being partially wiped out upon changing tiles. (This appears to be an underprocessing anomaly when it is rendering the shape to Dib/Graphic)&lt;br /&gt;
* The left-most column of pixels on 4x4 objects will always be wiped out upon changing tiles. (perform a fill operation on a 4x4 tile and then switch to another and back to see this effect) (This occurs within the function that re-scales/shrinks the image - more under-processing)&lt;br /&gt;
* Adding any painted pixels to the top-row will result in the shape being pushed down by one-row upon switching to another and back.&lt;br /&gt;
* Tilesets converted from DOS are off-set downwards by one row (the bottom row of the active tile ends up truncated upon view/change/interaction) (However when used in-game - aside from the bottom row truncation - their Y-position is correct)&lt;br /&gt;
* The Plymouth Arcology suffers from some bizarre clipping cases on both the farthest left and right-hand sides within the top left/right portions of the tile base. (this is a more general problem for 4x4 objects)&lt;br /&gt;
* TILES.DB:&lt;br /&gt;
** Residential Apartment 1 (3x3) is off-set downwards by one row&lt;br /&gt;
** All other tiles vertically align to the tilebase, however this sets up another off-by-one case where said buildings will subtly shift up by one-row when used in the main game.&lt;br /&gt;
* Clipping off-by-one:&lt;br /&gt;
** Right-most one-pixel over-clipping was occurring in non-maxwidth cases - this should only happen once the maximum valid width (what you see when the clipping boundary is enabled on the Macintosh version is correct).&lt;br /&gt;
&lt;br /&gt;
=== TIL - DOS -&amp;gt; Windows conversion ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	BYTE largeArc[12];&lt;br /&gt;
	DWORD dwLargeSize;&lt;br /&gt;
	BYTE largeHed[12];&lt;br /&gt;
	DWORD dwLargeOffset;&lt;br /&gt;
	BYTE otherArc[12];&lt;br /&gt;
	DWORD dwOtherSize;&lt;br /&gt;
	BYTE otherHed[12];&lt;br /&gt;
	DWORD dwOtherOffset;&lt;br /&gt;
	BYTE smallArc[12];&lt;br /&gt;
	DWORD dwSmallSize;&lt;br /&gt;
	BYTE smallHed[12];&lt;br /&gt;
	DWORD dwSmallOffset;&lt;br /&gt;
	BYTE urkTextFile[12];&lt;br /&gt;
	DWORD dwUrkTextOffset;&lt;br /&gt;
	BYTE readOnlyFile[12];&lt;br /&gt;
	DWORD dwReadOnlyOffset;&lt;br /&gt;
} tilHeaderStruct_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that not all TIL containers happen to contain the readOnlyFile; due to that it&#039;s likely best to check for READONLY.XXX specifically if you&#039;re then going to jump to its offset position; otherwise the most common last file will be URKNAME.TXT and then its offset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	DWORD dwOffset;&lt;br /&gt;
	BYTE height;&lt;br /&gt;
	BYTE width;&lt;br /&gt;
	WORD wPad;&lt;br /&gt;
} tilShapInfo_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mac and DOS -&amp;gt; Windows Palette ===&lt;br /&gt;
&lt;br /&gt;
Both Mac and DOS make use of the same palette; if the built-in Mac tileset resource is extracted from MacSCURK it can utilize the generated DOS palette indices in WinSCURK (if programmed to do so - it isn&#039;t by default).&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=916</id>
		<title>User:AF/SCURK</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=916"/>
		<updated>2026-03-22T10:52:17Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= SCURK Observations =&lt;br /&gt;
&lt;br /&gt;
Various observations concerning the different versions of SCURK.&lt;br /&gt;
&lt;br /&gt;
This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.&lt;br /&gt;
&lt;br /&gt;
== DOS SCURK ==&lt;br /&gt;
&lt;br /&gt;
* Runway tiles are available for modification and placement.&lt;br /&gt;
* The palette that you get here isn&#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section).&lt;br /&gt;
* Objects are top-aligned to the empty base tile background.&lt;br /&gt;
&lt;br /&gt;
== Macintosh SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The base tileset used here is a special MAC-headered MIF.&lt;br /&gt;
* Saved working tilesets use the standard Windows header.&lt;br /&gt;
* If you do a standard save of the base object set, certain palette indices are not preserved (glaring examples would be the Marina and Load Bay).&lt;br /&gt;
&lt;br /&gt;
== Windows SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The right-most column of pixels on 4x4 objects will end up being partially wiped out upon changing tiles. (This appears to be an underprocessing anomaly when it is rendering the shape to Dib/Graphic)&lt;br /&gt;
* The left-most column of pixels on 4x4 objects will always be wiped out upon changing tiles. (perform a fill operation on a 4x4 tile and then switch to another and back to see this effect) (This occurs within the function that re-scales/shrinks the image - more under-processing)&lt;br /&gt;
* Adding any painted pixels to the top-row will result in the shape being pushed down by one-row upon switching to another and back.&lt;br /&gt;
* Tilesets converted from DOS are off-set downwards by one row (the bottom row of the active tile ends up truncated upon view/change/interaction) (However when used in-game - aside from the bottom row truncation - their Y-position is correct)&lt;br /&gt;
* The Plymouth Arcology suffers from some bizarre clipping cases on both the farthest left and right-hand sides within the top left/right portions of the tile base. (this is a more general problem for 4x4 objects)&lt;br /&gt;
* TILES.DB:&lt;br /&gt;
** Residential Apartment 1 (3x3) is off-set downwards by one row&lt;br /&gt;
** All other tiles vertically align to the tilebase, however this sets up another off-by-one case where said buildings will subtly shift up by one-row when used in the main game.&lt;br /&gt;
* Clipping off-by-one:&lt;br /&gt;
** Right-most one-pixel over-clipping was occurring in non-maxwidth cases - this should only happen once the maximum valid width (what you see when the clipping boundary is enabled on the Macintosh version is correct).&lt;br /&gt;
&lt;br /&gt;
=== TIL - DOS -&amp;gt; Windows conversion ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	BYTE largeArc[12];&lt;br /&gt;
	DWORD dwLargeSize;&lt;br /&gt;
	BYTE largeHed[12];&lt;br /&gt;
	DWORD dwLargeOffset;&lt;br /&gt;
	BYTE otherArc[12];&lt;br /&gt;
	DWORD dwOtherSize;&lt;br /&gt;
	BYTE otherHed[12];&lt;br /&gt;
	DWORD dwOtherOffset;&lt;br /&gt;
	BYTE smallArc[12];&lt;br /&gt;
	DWORD dwSmallSize;&lt;br /&gt;
	BYTE smallHed[12];&lt;br /&gt;
	DWORD dwSmallOffset;&lt;br /&gt;
	BYTE urkTextFile[12];&lt;br /&gt;
	DWORD dwUrkTextOffset;&lt;br /&gt;
	BYTE readOnlyFile[12];&lt;br /&gt;
	DWORD dwReadOnlyOffset;&lt;br /&gt;
} tilHeaderStruct_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that not all TIL containers happen to contain the readOnlyFile; due to that it&#039;s likely best to check for &amp;lt;pre&amp;gt;READONLY.XXX&amp;lt;/pre&amp;gt; specifically if you&#039;re then going to jump to its offset position; otherwise the most common last file will be &amp;lt;pre&amp;gt;URKNAME.TXT&amp;lt;/pre&amp;gt; and then its offset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	DWORD dwOffset;&lt;br /&gt;
	BYTE height;&lt;br /&gt;
	BYTE width;&lt;br /&gt;
	WORD wPad;&lt;br /&gt;
} tilShapInfo_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mac and DOS -&amp;gt; Windows Palette ===&lt;br /&gt;
&lt;br /&gt;
Both Mac and DOS make use of the same palette; if the built-in Mac tileset resource is extracted from MacSCURK it can utilize the generated DOS palette indices in WinSCURK (if programmed to do so - it isn&#039;t by default).&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=915</id>
		<title>User:AF/SCURK</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=915"/>
		<updated>2026-03-18T04:28:57Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Windows SCURK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= SCURK Observations =&lt;br /&gt;
&lt;br /&gt;
Various observations concerning the different versions of SCURK.&lt;br /&gt;
&lt;br /&gt;
This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.&lt;br /&gt;
&lt;br /&gt;
== DOS SCURK ==&lt;br /&gt;
&lt;br /&gt;
* Runway tiles are available for modification and placement.&lt;br /&gt;
* The palette that you get here isn&#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section).&lt;br /&gt;
* Objects are top-aligned to the empty base tile background.&lt;br /&gt;
&lt;br /&gt;
== Macintosh SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The base tileset used here is a special MAC-headered MIF.&lt;br /&gt;
* Saved working tilesets use the standard Windows header.&lt;br /&gt;
* If you do a standard save of the base object set, certain palette indices are not preserved (glaring examples would be the Marina and Load Bay).&lt;br /&gt;
&lt;br /&gt;
== Windows SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The right-most column of pixels on 4x4 objects will end up being partially wiped out upon changing tiles. (This appears to be an underprocessing anomaly when it is rendering the shape to Dib/Graphic)&lt;br /&gt;
* The left-most column of pixels on 4x4 objects will always be wiped out upon changing tiles. (perform a fill operation on a 4x4 tile and then switch to another and back to see this effect) (This occurs within the function that re-scales/shrinks the image - more under-processing)&lt;br /&gt;
* Adding any painted pixels to the top-row will result in the shape being pushed down by one-row upon switching to another and back.&lt;br /&gt;
* Tilesets converted from DOS are off-set downwards by one row (the bottom row of the active tile ends up truncated upon view/change/interaction) (However when used in-game - aside from the bottom row truncation - their Y-position is correct)&lt;br /&gt;
* The Plymouth Arcology suffers from some bizarre clipping cases on both the farthest left and right-hand sides within the top left/right portions of the tile base. (this is a more general problem for 4x4 objects)&lt;br /&gt;
* TILES.DB:&lt;br /&gt;
** Residential Apartment 1 (3x3) is off-set downwards by one row&lt;br /&gt;
** All other tiles vertically align to the tilebase, however this sets up another off-by-one case where said buildings will subtly shift up by one-row when used in the main game.&lt;br /&gt;
* Clipping off-by-one:&lt;br /&gt;
** Right-most one-pixel over-clipping was occurring in non-maxwidth cases - this should only happen once the maximum valid width (what you see when the clipping boundary is enabled on the Macintosh version is correct).&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=914</id>
		<title>User:AF/SCURK</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=914"/>
		<updated>2026-03-13T12:37:03Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Windows SCURK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= SCURK Observations =&lt;br /&gt;
&lt;br /&gt;
Various observations concerning the different versions of SCURK.&lt;br /&gt;
&lt;br /&gt;
This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.&lt;br /&gt;
&lt;br /&gt;
== DOS SCURK ==&lt;br /&gt;
&lt;br /&gt;
* Runway tiles are available for modification and placement.&lt;br /&gt;
* The palette that you get here isn&#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section).&lt;br /&gt;
* Objects are top-aligned to the empty base tile background.&lt;br /&gt;
&lt;br /&gt;
== Macintosh SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The base tileset used here is a special MAC-headered MIF.&lt;br /&gt;
* Saved working tilesets use the standard Windows header.&lt;br /&gt;
* If you do a standard save of the base object set, certain palette indices are not preserved (glaring examples would be the Marina and Load Bay).&lt;br /&gt;
&lt;br /&gt;
== Windows SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The right-most column of pixels on 4x4 objects will end up being partially wiped out upon changing tiles.&lt;br /&gt;
* The left-most column of pixels on 4x4 objects will always be wiped out upon changing tiles. (perform a fill operation on a 4x4 tile and then switch to another and back to see this effect)&lt;br /&gt;
* Adding any painted pixels to the top-row will result in the shape being pushed down by one-row upon switching to another and back.&lt;br /&gt;
* Tilesets converted from DOS are off-set downwards by one row (the bottom row of the active tile ends up truncated upon view/change/interaction) (However when used in-game - aside from the bottom row truncation - their Y-position is correct)&lt;br /&gt;
* The Plymouth Arcology suffers from some bizarre clipping cases on both the farthest left and right-hand sides within the top left/right portions of the tile base. (this is a more general problem for 4x4 objects)&lt;br /&gt;
* TILES.DB:&lt;br /&gt;
** Residential Apartment 1 (3x3) is off-set downwards by one row&lt;br /&gt;
** All other tiles vertically align to the tilebase, however this sets up another off-by-one case where said buildings will subtly shift up by one-row when used in the main game.&lt;br /&gt;
* Clipping off-by-one:&lt;br /&gt;
** Right-most one-pixel over-clipping was occurring in non-maxwidth cases - this should only happen once the maximum valid width (what you see when the clipping boundary is enabled on the Macintosh version is correct).&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=913</id>
		<title>User:AF/SCURK</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=913"/>
		<updated>2026-03-11T19:21:39Z</updated>

		<summary type="html">&lt;p&gt;AF: sp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= SCURK Observations =&lt;br /&gt;
&lt;br /&gt;
Various observations concerning the different versions of SCURK.&lt;br /&gt;
&lt;br /&gt;
This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.&lt;br /&gt;
&lt;br /&gt;
== DOS SCURK ==&lt;br /&gt;
&lt;br /&gt;
* Runway tiles are available for modification and placement.&lt;br /&gt;
* The palette that you get here isn&#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section).&lt;br /&gt;
* Objects are top-aligned to the empty base tile background.&lt;br /&gt;
&lt;br /&gt;
== Macintosh SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The base tileset used here is a special MAC-headered MIF.&lt;br /&gt;
* Saved working tilesets use the standard Windows header.&lt;br /&gt;
* If you do a standard save of the base object set, certain palette indices are not preserved (glaring examples would be the Marina and Load Bay).&lt;br /&gt;
&lt;br /&gt;
== Windows SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The right-most column of pixels is inaccessible (off-by-one case in various places)&lt;br /&gt;
* Tilesets converted from DOS are off-set downwards by one row (the bottom row of the active tile ends up truncated upon view/change/interaction) (However when used in-game - aside from the bottom row truncation - their Y-position is correct)&lt;br /&gt;
* The Plymouth Arcology suffers from some bizarre clipping cases on both the farthest left and right-hand sides within the top left/right portions of the tile base. (this is a more general problem for 4x4 objects)&lt;br /&gt;
* TILES.DB:&lt;br /&gt;
** Residential Apartment 1 (3x3) is off-set downwards by one row&lt;br /&gt;
** All other tiles vertically align to the tilebase, however this sets up another off-by-one case where said buildings will subtly shift up by one-row when used in the main game.&lt;br /&gt;
* Clipping far-horizontal extent is off-by-one.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=912</id>
		<title>User:AF/SCURK</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=912"/>
		<updated>2026-03-11T19:21:11Z</updated>

		<summary type="html">&lt;p&gt;AF: A bit of formatting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= SCURK Observations =&lt;br /&gt;
&lt;br /&gt;
Various observations concerning the different versions of SCURK.&lt;br /&gt;
&lt;br /&gt;
This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.&lt;br /&gt;
&lt;br /&gt;
== DOS SCURK ==&lt;br /&gt;
&lt;br /&gt;
* Runway tiles are available for modification and placement.&lt;br /&gt;
* The palette that you get here isn&#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section).&lt;br /&gt;
* Objects are top-aligned to the empty base tile background.&lt;br /&gt;
&lt;br /&gt;
== Macintosh SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The base tileset used here is a special MAC-headered MIF.&lt;br /&gt;
* Saved working tilesets use the standard Windows header.&lt;br /&gt;
* If you do a standard save of the base object set, certain palette indices are not preserved (glaring examples would be the Marina and Load Bay).&lt;br /&gt;
&lt;br /&gt;
== Windows SCURK ==&lt;br /&gt;
&lt;br /&gt;
* The right-most column of pixels is inaccessible (off-by-one case in various places)&lt;br /&gt;
* Tilesets converted from DOS are off-set downwards by one row (the bottom row of the active tile ends up truncated upon view/change/interaction) (However when used in-game - aside from the bottom row truncation - their Y-position is correct)&lt;br /&gt;
* The Plymouth Arcology suffers from some bizarre clipping cases on both the farthest left and right-hand sides within the top left/right portions of the tile base. (this is a more general problem for 4x4 objects)&lt;br /&gt;
* TILES.DB:&lt;br /&gt;
** Residential Apartment 1 (3x3) is off-set downwards by one row&lt;br /&gt;
** All other tiles vertically align to the tilebase, however this sets up another off-by-one case where said buildings will subtley shift up by one-row when used in the main game.&lt;br /&gt;
* Clipping far-horizontal extent is off-by-one.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=911</id>
		<title>User:AF/SCURK</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=911"/>
		<updated>2026-03-11T10:43:07Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= SCURK Observations =&lt;br /&gt;
&lt;br /&gt;
Various observations concerning the different versions of SCURK.&lt;br /&gt;
&lt;br /&gt;
This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.&lt;br /&gt;
&lt;br /&gt;
== DOS SCURK ==&lt;br /&gt;
&lt;br /&gt;
- Runway tiles are available for modification and placement.&lt;br /&gt;
- The palette that you get here isn&#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section).&lt;br /&gt;
- Objects are top-aligned to the empty base tile background.&lt;br /&gt;
&lt;br /&gt;
== Macintosh SCURK ==&lt;br /&gt;
&lt;br /&gt;
- The base tileset used here is a special MAC-headered MIF.&lt;br /&gt;
- Saved working tilesets use the standard Windows header.&lt;br /&gt;
- If you do a standard save of the base object set, certain palette indices are not preserved (glaring examples would be the Marina and Load Bay).&lt;br /&gt;
&lt;br /&gt;
== Windows SCURK ==&lt;br /&gt;
&lt;br /&gt;
- The right-most column of pixels is inaccessible (off-by-one case in various places)&lt;br /&gt;
- Tilesets converted from DOS are off-set downwards by one row (the bottom row of the active tile ends up truncated upon view/change/interaction) (However when used in-game - aside from the bottom row truncation - their Y-position is correct)&lt;br /&gt;
- The Plymouth Arcology suffers from some bizarre clipping cases on both the farthest left and right-hand sides within the top left/right portions of the tile base. (this is a more general problem for 4x4 objects)&lt;br /&gt;
- TILES.DB:&lt;br /&gt;
-- Residential Apartment 1 (3x3) is off-set downwards by one row&lt;br /&gt;
-- All other tiles vertically align to the tilebase, however this sets up another off-by-one case where said buildings will subtley shift up by one-row when used in the main game.&lt;br /&gt;
- Clipping far-horizontal extent is off-by-one.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=910</id>
		<title>User:AF/SCURK</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/SCURK&amp;diff=910"/>
		<updated>2026-03-11T10:21:54Z</updated>

		<summary type="html">&lt;p&gt;AF: Created page with &amp;quot;= SCURK Observations =  Various observations concerning the different versions of SCURK.  This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.  == DOS SCURK ==  - Runway tiles are available for modification and placement. - The palette that you get here isn&amp;#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section). - Objects are top-aligned to the empty base tile background.  == Macintosh SCURK ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= SCURK Observations =&lt;br /&gt;
&lt;br /&gt;
Various observations concerning the different versions of SCURK.&lt;br /&gt;
&lt;br /&gt;
This will also highlight certain pitfalls and &amp;quot;gotcha&amp;quot; cases when it comes to WinSCURK.&lt;br /&gt;
&lt;br /&gt;
== DOS SCURK ==&lt;br /&gt;
&lt;br /&gt;
- Runway tiles are available for modification and placement.&lt;br /&gt;
- The palette that you get here isn&#039;t a one-to-one match when it comes to WinSCURK (see more detail under the Windows SCURK section).&lt;br /&gt;
- Objects are top-aligned to the empty base tile background.&lt;br /&gt;
&lt;br /&gt;
== Macintosh SCURK ==&lt;br /&gt;
&lt;br /&gt;
- The base tileset used here is a special MAC-headered MIF.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=909</id>
		<title>User:AF</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=909"/>
		<updated>2026-03-11T10:17:15Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Landing page for information that isn&#039;t yet ready to go into the main sections on the site.&lt;br /&gt;
&lt;br /&gt;
It will mostly account for a naming changes concerning marked down functions during the trawl&lt;br /&gt;
with IDA.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;Subpages:&#039;&#039;&lt;br /&gt;
::::[[User:AF/ClassExtrapolation]]&lt;br /&gt;
&lt;br /&gt;
::::[[User:AF/SCURK]]&lt;br /&gt;
&lt;br /&gt;
== Movie Function References ==&lt;br /&gt;
&lt;br /&gt;
Oh the pain..&lt;br /&gt;
&lt;br /&gt;
Although for now this is a suspicion, the next target is likely going to be the Smacker functions (specifically SmackOpen()).&lt;br /&gt;
&lt;br /&gt;
Confirmed for now, when SmackOpen() is called, amongst other things it is passing the constructed filename.&lt;br /&gt;
&lt;br /&gt;
Working on importing the &amp;quot;needed&amp;quot; functions at present.. and then we&#039;ll see what happens.&lt;br /&gt;
&lt;br /&gt;
As it turns out although the initial failure check had been bypassed with the correct path, the one that&lt;br /&gt;
SmackOpen() got was still the original.&lt;br /&gt;
&lt;br /&gt;
So half-way there.&lt;br /&gt;
&lt;br /&gt;
LPCSTR - const string.&lt;br /&gt;
&lt;br /&gt;
This has long since been reconciled so that the movies are read from the Movies folder inside your SimCity 2000 directory.&lt;br /&gt;
&lt;br /&gt;
=== 1 ===&lt;br /&gt;
Unsure where this is called from, though DATA XREF: .rdata:004DEE68&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401C4E&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48B2E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apparently it is a function within a class. __thiscall&lt;br /&gt;
&lt;br /&gt;
Though this specific case may be a diversion.&lt;br /&gt;
&lt;br /&gt;
=== 2 ===&lt;br /&gt;
Called from GameDoIdleUpkeep()&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401104&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A980&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Movie data directory address: 0x4EAA78&lt;br /&gt;
&lt;br /&gt;
By default it references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
No drive letter by default, so this is touched upon elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== 3 ===&lt;br /&gt;
Called from both GameDoIdleUpKeep and &#039;1&#039; just above&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x402360&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A810&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
== Portability ==&lt;br /&gt;
&lt;br /&gt;
Exploring portability currently, ie storing all relevant registry keys for the sc2kfix module, sc2k and scurk in a specific ini file.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The idea in this case is that the library will create an ini by default with &#039;portability&#039; disabled, so the current behaviour is preserved, however when it is enabled then it will load/save all settings from there.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This will require a few tweaks concerning binary detection so it knows what to touch, load and save.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
At the moment this is an experiment.&lt;br /&gt;
&lt;br /&gt;
Thus far the following has been done:&lt;br /&gt;
* A new &#039;sc2kfix.ini&#039; is created&lt;br /&gt;
* If the internal &#039;[sc2kfix]&#039; section isn&#039;t present it will migrate the previously stored registry entries, otherwise it will resort to the internal defaults.&lt;br /&gt;
* All SimCity 2000 and SCURK entries are similarly migrated if they exist (or it goes through the usual installation process than then adds the necessary sections to the new ini file).&lt;br /&gt;
* The imported used registry functions have been intercepted (this applies to SC2K 1996, 1995 and SCURK 1996)&lt;br /&gt;
* A check has been added early on so if neither the simcity.exe or winscurk.exe binaries are used with this library, it won&#039;t create the sc2kfix.ini file.&lt;br /&gt;
* RegOpenKeyExA rather than RegCreateKeyExA at this point (we no longer want to create the default keys if they&#039;re not present once the defaults have been loaded).&lt;br /&gt;
* Aside from the RegSetValueExA cases, the rest appear to be handled.&lt;br /&gt;
&lt;br /&gt;
== Debug Menu ==&lt;br /&gt;
&lt;br /&gt;
A test has been performed on the following Windows 95 versions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Simcity 2000 Demo&lt;br /&gt;
Simcity 2000 CD Collection&lt;br /&gt;
Simcity 2000 Special Edition&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They all exhibited the same issue with the attempted use of &amp;quot;Add all inventions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
It&#039;s.. most odd.&lt;br /&gt;
&lt;br /&gt;
=== 32908 - 0x808C ===&lt;br /&gt;
Show Version Info...&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402694&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x4120E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on a preliminary analysis, it&#039;s just reading the version.inf and then displaying it in the requester.&lt;br /&gt;
&lt;br /&gt;
=== 32909 - 0x808D ===&lt;br /&gt;
More Money&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402B53&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412280&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 32910 - 0x808E ===&lt;br /&gt;
&lt;br /&gt;
Add All Gifts&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401C0D&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412290&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From what I can see aside from granting all rewards, it also touches the invention years (very likely intentional to account for this function being used if the given gift hasn&#039;t yet been invented).&lt;br /&gt;
&lt;br /&gt;
=== 32911 - 0x808F ===&lt;br /&gt;
&lt;br /&gt;
Add All Inventions (one would hope)&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk:  0x402388&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412320&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Center Tool ==&lt;br /&gt;
&lt;br /&gt;
Thanks to @araxestroy&#039;s implementation of the middle-mouse button center control, there&#039;s a slight chance the case of the &amp;quot;constant scrolling&amp;quot; with the left-mouse button has jumped out.&lt;br /&gt;
&lt;br /&gt;
The function isn&#039;t completely confirmed yet, however these are the address references:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401DFC&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x481780&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WM_LBUTTONDOWN - 0x0201 - 513&lt;br /&gt;
&lt;br /&gt;
Since there are multiple paths, this&#039;ll require a bit of experimentation.&lt;br /&gt;
&lt;br /&gt;
During a drag not too far back the following was highlighted as well:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401406&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x47DD80&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And another (yes this is a scattered approach):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Thunk: 0x402874&lt;br /&gt;
Main: 0x40CFB0&lt;br /&gt;
&lt;br /&gt;
Which then goes --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thunk: 0x4019C4&lt;br /&gt;
Main: 0x40C2B0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Backtracing in-progress: 0x4251D0 -&amp;gt; 0x43F220 -&amp;gt; 0x4106C0&lt;br /&gt;
&lt;br /&gt;
(The following are &#039;Main&#039; not &#039;Thunk&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
Parent: 0x4106C0&amp;lt;br&amp;gt;&lt;br /&gt;
Map Editing: 0x442690&amp;lt;br&amp;gt;&lt;br /&gt;
City Building and scenario: 0x43F220&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the two differing paths, in map editing mode at least if you click and your cursor leaves the valid map area and re-enters, it is far less likely to continue scrolling; while in normal mode if you click, leave the valid map area and re-enter it will pick up right where it left off.&lt;br /&gt;
&lt;br /&gt;
Replicated the function externally by making use of the IDA-generated code, it works identically however it doesn&#039;t resolve the original problem. The next step will likely be the two tool menu functions.&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
== Reconcile Military Base spawning differences between DOS and Windows ==&lt;br /&gt;
&lt;br /&gt;
Thus far the function has been reconstructed in the library, all but &amp;quot;Naval Base&amp;quot; handling is now present.&lt;br /&gt;
&lt;br /&gt;
It has potentially opened the door to be able to hit the &amp;quot;bullseye&amp;quot; each time and spawn a specific base (assuming map conditions allow for it).&lt;br /&gt;
&lt;br /&gt;
There are ways to dangerously get the Missile Silos to spawn, though any forced approach requires a more-general cleaner consideration.&lt;br /&gt;
&lt;br /&gt;
The odd case with the Army Bases having at least one road-tile not quite being right appears to have also been nailed down (more testing still needed).&lt;br /&gt;
&lt;br /&gt;
- The Naval Yard spawning is mostly a one-to-one match against what you&#039;d expect in the DOS game, however a base-level check has been added to avoid tiles being placed on different levels.&lt;br /&gt;
- Army Base quirks have mostly been nailed down. The spawned roads won&#039;t have any impact on your budget (unlike the DOS version). The runway-cross tiles are also flagged as Military zoned.&lt;br /&gt;
- Various overlap and positional checks have been put in-place when it comes to individual Silo spawns to make their spawn-case considerably safer.&lt;br /&gt;
&lt;br /&gt;
== Reconcile differences in &#039;ItemPlacementCheck&#039; - 0x4027F2 ==&lt;br /&gt;
&lt;br /&gt;
The specific purpose here is to understand and hopefully eliminate the portion that results in negative and/or anomalous military zone growth.&lt;br /&gt;
&lt;br /&gt;
This &#039;if&#039; block appears to be the culprit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      if ( (*((_BYTE *)*(&amp;amp;dwMapXZON + v5) + v7) &amp;amp; 0xF) == 7 )&lt;br /&gt;
      {&lt;br /&gt;
        return 0;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The check doesn&#039;t appear to exist in the equivalent-function in the DOS edition, though that&#039;s still being combed-over.&lt;br /&gt;
&lt;br /&gt;
This has long since been accounted for.&lt;br /&gt;
&lt;br /&gt;
== Revisit the Naval Yard placement case ==&lt;br /&gt;
&lt;br /&gt;
At the moment our implementation of the Naval Yard placement only has it occur from the ocean-facing map-edge inwards,&lt;br /&gt;
it won&#039;t try to look for any possible valid placement cases on other water-bearing coasts that are connected to the main&lt;br /&gt;
body of water. At this point it&#039;ll likely mean revisiting the DOS portion once again and combing over the code and certain&lt;br /&gt;
function-level vars that &amp;quot;appear&amp;quot; to be related to the direction as far as I can tell.&lt;br /&gt;
&lt;br /&gt;
This has now been reconciled and completed post-R10.&lt;br /&gt;
&lt;br /&gt;
== Moving Thing Trip/Pathing Investigation ==&lt;br /&gt;
&lt;br /&gt;
Pending task, intermediate calls need to be sought out.&lt;br /&gt;
&lt;br /&gt;
== Rebuild internal classes for better infrastructure flow tracking ==&lt;br /&gt;
&lt;br /&gt;
This interesting task is in-progress. - See: https://wiki.sc2kfix.net/User:AF/ClassExtrapolation&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=908</id>
		<title>User:AF</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=908"/>
		<updated>2026-03-11T10:15:59Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Landing page for information that isn&#039;t yet ready to go into the main sections on the site.&lt;br /&gt;
&lt;br /&gt;
It will mostly account for a naming changes concerning marked down functions during the trawl&lt;br /&gt;
with IDA.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;Subpages:&#039;&#039; [[User:AF/ClassExtrapolation]], [[User:AF/SCURK]]&lt;br /&gt;
&lt;br /&gt;
== Movie Function References ==&lt;br /&gt;
&lt;br /&gt;
Oh the pain..&lt;br /&gt;
&lt;br /&gt;
Although for now this is a suspicion, the next target is likely going to be the Smacker functions (specifically SmackOpen()).&lt;br /&gt;
&lt;br /&gt;
Confirmed for now, when SmackOpen() is called, amongst other things it is passing the constructed filename.&lt;br /&gt;
&lt;br /&gt;
Working on importing the &amp;quot;needed&amp;quot; functions at present.. and then we&#039;ll see what happens.&lt;br /&gt;
&lt;br /&gt;
As it turns out although the initial failure check had been bypassed with the correct path, the one that&lt;br /&gt;
SmackOpen() got was still the original.&lt;br /&gt;
&lt;br /&gt;
So half-way there.&lt;br /&gt;
&lt;br /&gt;
LPCSTR - const string.&lt;br /&gt;
&lt;br /&gt;
This has long since been reconciled so that the movies are read from the Movies folder inside your SimCity 2000 directory.&lt;br /&gt;
&lt;br /&gt;
=== 1 ===&lt;br /&gt;
Unsure where this is called from, though DATA XREF: .rdata:004DEE68&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401C4E&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48B2E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apparently it is a function within a class. __thiscall&lt;br /&gt;
&lt;br /&gt;
Though this specific case may be a diversion.&lt;br /&gt;
&lt;br /&gt;
=== 2 ===&lt;br /&gt;
Called from GameDoIdleUpkeep()&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401104&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A980&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Movie data directory address: 0x4EAA78&lt;br /&gt;
&lt;br /&gt;
By default it references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
No drive letter by default, so this is touched upon elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== 3 ===&lt;br /&gt;
Called from both GameDoIdleUpKeep and &#039;1&#039; just above&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x402360&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A810&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
== Portability ==&lt;br /&gt;
&lt;br /&gt;
Exploring portability currently, ie storing all relevant registry keys for the sc2kfix module, sc2k and scurk in a specific ini file.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The idea in this case is that the library will create an ini by default with &#039;portability&#039; disabled, so the current behaviour is preserved, however when it is enabled then it will load/save all settings from there.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This will require a few tweaks concerning binary detection so it knows what to touch, load and save.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
At the moment this is an experiment.&lt;br /&gt;
&lt;br /&gt;
Thus far the following has been done:&lt;br /&gt;
* A new &#039;sc2kfix.ini&#039; is created&lt;br /&gt;
* If the internal &#039;[sc2kfix]&#039; section isn&#039;t present it will migrate the previously stored registry entries, otherwise it will resort to the internal defaults.&lt;br /&gt;
* All SimCity 2000 and SCURK entries are similarly migrated if they exist (or it goes through the usual installation process than then adds the necessary sections to the new ini file).&lt;br /&gt;
* The imported used registry functions have been intercepted (this applies to SC2K 1996, 1995 and SCURK 1996)&lt;br /&gt;
* A check has been added early on so if neither the simcity.exe or winscurk.exe binaries are used with this library, it won&#039;t create the sc2kfix.ini file.&lt;br /&gt;
* RegOpenKeyExA rather than RegCreateKeyExA at this point (we no longer want to create the default keys if they&#039;re not present once the defaults have been loaded).&lt;br /&gt;
* Aside from the RegSetValueExA cases, the rest appear to be handled.&lt;br /&gt;
&lt;br /&gt;
== Debug Menu ==&lt;br /&gt;
&lt;br /&gt;
A test has been performed on the following Windows 95 versions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Simcity 2000 Demo&lt;br /&gt;
Simcity 2000 CD Collection&lt;br /&gt;
Simcity 2000 Special Edition&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They all exhibited the same issue with the attempted use of &amp;quot;Add all inventions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
It&#039;s.. most odd.&lt;br /&gt;
&lt;br /&gt;
=== 32908 - 0x808C ===&lt;br /&gt;
Show Version Info...&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402694&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x4120E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on a preliminary analysis, it&#039;s just reading the version.inf and then displaying it in the requester.&lt;br /&gt;
&lt;br /&gt;
=== 32909 - 0x808D ===&lt;br /&gt;
More Money&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402B53&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412280&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 32910 - 0x808E ===&lt;br /&gt;
&lt;br /&gt;
Add All Gifts&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401C0D&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412290&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From what I can see aside from granting all rewards, it also touches the invention years (very likely intentional to account for this function being used if the given gift hasn&#039;t yet been invented).&lt;br /&gt;
&lt;br /&gt;
=== 32911 - 0x808F ===&lt;br /&gt;
&lt;br /&gt;
Add All Inventions (one would hope)&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk:  0x402388&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412320&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Center Tool ==&lt;br /&gt;
&lt;br /&gt;
Thanks to @araxestroy&#039;s implementation of the middle-mouse button center control, there&#039;s a slight chance the case of the &amp;quot;constant scrolling&amp;quot; with the left-mouse button has jumped out.&lt;br /&gt;
&lt;br /&gt;
The function isn&#039;t completely confirmed yet, however these are the address references:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401DFC&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x481780&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WM_LBUTTONDOWN - 0x0201 - 513&lt;br /&gt;
&lt;br /&gt;
Since there are multiple paths, this&#039;ll require a bit of experimentation.&lt;br /&gt;
&lt;br /&gt;
During a drag not too far back the following was highlighted as well:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401406&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x47DD80&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And another (yes this is a scattered approach):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Thunk: 0x402874&lt;br /&gt;
Main: 0x40CFB0&lt;br /&gt;
&lt;br /&gt;
Which then goes --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thunk: 0x4019C4&lt;br /&gt;
Main: 0x40C2B0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Backtracing in-progress: 0x4251D0 -&amp;gt; 0x43F220 -&amp;gt; 0x4106C0&lt;br /&gt;
&lt;br /&gt;
(The following are &#039;Main&#039; not &#039;Thunk&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
Parent: 0x4106C0&amp;lt;br&amp;gt;&lt;br /&gt;
Map Editing: 0x442690&amp;lt;br&amp;gt;&lt;br /&gt;
City Building and scenario: 0x43F220&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the two differing paths, in map editing mode at least if you click and your cursor leaves the valid map area and re-enters, it is far less likely to continue scrolling; while in normal mode if you click, leave the valid map area and re-enter it will pick up right where it left off.&lt;br /&gt;
&lt;br /&gt;
Replicated the function externally by making use of the IDA-generated code, it works identically however it doesn&#039;t resolve the original problem. The next step will likely be the two tool menu functions.&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
== Reconcile Military Base spawning differences between DOS and Windows ==&lt;br /&gt;
&lt;br /&gt;
Thus far the function has been reconstructed in the library, all but &amp;quot;Naval Base&amp;quot; handling is now present.&lt;br /&gt;
&lt;br /&gt;
It has potentially opened the door to be able to hit the &amp;quot;bullseye&amp;quot; each time and spawn a specific base (assuming map conditions allow for it).&lt;br /&gt;
&lt;br /&gt;
There are ways to dangerously get the Missile Silos to spawn, though any forced approach requires a more-general cleaner consideration.&lt;br /&gt;
&lt;br /&gt;
The odd case with the Army Bases having at least one road-tile not quite being right appears to have also been nailed down (more testing still needed).&lt;br /&gt;
&lt;br /&gt;
- The Naval Yard spawning is mostly a one-to-one match against what you&#039;d expect in the DOS game, however a base-level check has been added to avoid tiles being placed on different levels.&lt;br /&gt;
- Army Base quirks have mostly been nailed down. The spawned roads won&#039;t have any impact on your budget (unlike the DOS version). The runway-cross tiles are also flagged as Military zoned.&lt;br /&gt;
- Various overlap and positional checks have been put in-place when it comes to individual Silo spawns to make their spawn-case considerably safer.&lt;br /&gt;
&lt;br /&gt;
== Reconcile differences in &#039;ItemPlacementCheck&#039; - 0x4027F2 ==&lt;br /&gt;
&lt;br /&gt;
The specific purpose here is to understand and hopefully eliminate the portion that results in negative and/or anomalous military zone growth.&lt;br /&gt;
&lt;br /&gt;
This &#039;if&#039; block appears to be the culprit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      if ( (*((_BYTE *)*(&amp;amp;dwMapXZON + v5) + v7) &amp;amp; 0xF) == 7 )&lt;br /&gt;
      {&lt;br /&gt;
        return 0;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The check doesn&#039;t appear to exist in the equivalent-function in the DOS edition, though that&#039;s still being combed-over.&lt;br /&gt;
&lt;br /&gt;
This has long since been accounted for.&lt;br /&gt;
&lt;br /&gt;
== Revisit the Naval Yard placement case ==&lt;br /&gt;
&lt;br /&gt;
At the moment our implementation of the Naval Yard placement only has it occur from the ocean-facing map-edge inwards,&lt;br /&gt;
it won&#039;t try to look for any possible valid placement cases on other water-bearing coasts that are connected to the main&lt;br /&gt;
body of water. At this point it&#039;ll likely mean revisiting the DOS portion once again and combing over the code and certain&lt;br /&gt;
function-level vars that &amp;quot;appear&amp;quot; to be related to the direction as far as I can tell.&lt;br /&gt;
&lt;br /&gt;
This has now been reconciled and completed post-R10.&lt;br /&gt;
&lt;br /&gt;
== Moving Thing Trip/Pathing Investigation ==&lt;br /&gt;
&lt;br /&gt;
Pending task, intermediate calls need to be sought out.&lt;br /&gt;
&lt;br /&gt;
== Rebuild internal classes for better infrastructure flow tracking ==&lt;br /&gt;
&lt;br /&gt;
This interesting task is in-progress. - See: https://wiki.sc2kfix.net/User:AF/ClassExtrapolation&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=907</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=907"/>
		<updated>2026-02-28T06:15:17Z</updated>

		<summary type="html">&lt;p&gt;AF: Added a small number of new variables #1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7010 || CSimcityApp || &#039;&#039;&#039;pCSimcityAppThis&#039;&#039;&#039; ||  || this is &amp;quot;the&amp;quot; internal &#039;theApp&#039; class from the program - see https://wiki.sc2kfix.net/User:AF/ClassExtrapolation#CSimcityApp for more information.&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot; (in this case it is m_pMainWnd in pCSimcityAppThis, or pCSimcityAppThis[7])&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A98 || WORD || &#039;&#039;&#039;wCurrentTileCoordinates&#039;&#039;&#039; ||  || Current Tile Coordinates based off of cursor positioning while the left mouse button is down&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AB0 || WORD || &#039;&#039;&#039;wTileCoordinateX&#039;&#039;&#039; ||  || Current Tile X Coordinate (LOBYTE from wCurrentTileCoordinates)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AB4 || WORD || &#039;&#039;&#039;wTileCoordinateY&#039;&#039;&#039; ||  || Current Tile Y Coordinate (HIBYTE from wCurrentTileCoordinates)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC0 || CPoint || &#039;&#039;&#039;gameViewPt&#039;&#039;&#039; ||  || Coordinates stored upon right-clicking a tile - for use with the actions from the right-click game area menu.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD8 || WORD || &#039;&#039;&#039;wGameScreenAreaX&#039;&#039;&#039; ||  || X-axis screen coordinates from the game area (LeftButtonDown/MouseMove)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ADC || WORD || &#039;&#039;&#039;wGameScreenAreaY&#039;&#039;&#039; ||  || Y-axis screen coordinates from the game area (LeftButtonDown/MouseMove)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wCityDevelopedTiles&#039;&#039;&#039; ||  || Total count of developed tiles (calculated when a given tile has the XBIT bit iMark set), needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || CString || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || The city name, loaded/saved as the CNAM chunk (The CString here is CMFC3XString - MFC 3.x version - alignment is important)&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = disaster mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || sprite_header_t* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group (0-17, see &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; for more information)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || budget_t* || &#039;&#039;&#039;pBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]] (needs some reverse engineering and/or documentation work)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD[3] || &#039;&#039;&#039;wCityDemand&#039;&#039;&#039; || 0x0718 || demand (-2000 to +2000) (0 = Residential, 1 = Commercial, 2 = Industrial)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD[15] || &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; ||  || City tool selection array referencing the selected subtool.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=906</id>
		<title>User:AF</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=906"/>
		<updated>2026-02-28T05:56:14Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Movie Function References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Landing page for information that isn&#039;t yet ready to go into the main sections on the site.&lt;br /&gt;
&lt;br /&gt;
It will mostly account for a naming changes concerning marked down functions during the trawl&lt;br /&gt;
with IDA.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;Subpages:&#039;&#039; [[User:AF/ClassExtrapolation]]&lt;br /&gt;
&lt;br /&gt;
== Movie Function References ==&lt;br /&gt;
&lt;br /&gt;
Oh the pain..&lt;br /&gt;
&lt;br /&gt;
Although for now this is a suspicion, the next target is likely going to be the Smacker functions (specifically SmackOpen()).&lt;br /&gt;
&lt;br /&gt;
Confirmed for now, when SmackOpen() is called, amongst other things it is passing the constructed filename.&lt;br /&gt;
&lt;br /&gt;
Working on importing the &amp;quot;needed&amp;quot; functions at present.. and then we&#039;ll see what happens.&lt;br /&gt;
&lt;br /&gt;
As it turns out although the initial failure check had been bypassed with the correct path, the one that&lt;br /&gt;
SmackOpen() got was still the original.&lt;br /&gt;
&lt;br /&gt;
So half-way there.&lt;br /&gt;
&lt;br /&gt;
LPCSTR - const string.&lt;br /&gt;
&lt;br /&gt;
This has long since been reconciled so that the movies are read from the Movies folder inside your SimCity 2000 directory.&lt;br /&gt;
&lt;br /&gt;
=== 1 ===&lt;br /&gt;
Unsure where this is called from, though DATA XREF: .rdata:004DEE68&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401C4E&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48B2E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apparently it is a function within a class. __thiscall&lt;br /&gt;
&lt;br /&gt;
Though this specific case may be a diversion.&lt;br /&gt;
&lt;br /&gt;
=== 2 ===&lt;br /&gt;
Called from GameDoIdleUpkeep()&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401104&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A980&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Movie data directory address: 0x4EAA78&lt;br /&gt;
&lt;br /&gt;
By default it references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
No drive letter by default, so this is touched upon elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== 3 ===&lt;br /&gt;
Called from both GameDoIdleUpKeep and &#039;1&#039; just above&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x402360&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A810&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
== Portability ==&lt;br /&gt;
&lt;br /&gt;
Exploring portability currently, ie storing all relevant registry keys for the sc2kfix module, sc2k and scurk in a specific ini file.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The idea in this case is that the library will create an ini by default with &#039;portability&#039; disabled, so the current behaviour is preserved, however when it is enabled then it will load/save all settings from there.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This will require a few tweaks concerning binary detection so it knows what to touch, load and save.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
At the moment this is an experiment.&lt;br /&gt;
&lt;br /&gt;
Thus far the following has been done:&lt;br /&gt;
* A new &#039;sc2kfix.ini&#039; is created&lt;br /&gt;
* If the internal &#039;[sc2kfix]&#039; section isn&#039;t present it will migrate the previously stored registry entries, otherwise it will resort to the internal defaults.&lt;br /&gt;
* All SimCity 2000 and SCURK entries are similarly migrated if they exist (or it goes through the usual installation process than then adds the necessary sections to the new ini file).&lt;br /&gt;
* The imported used registry functions have been intercepted (this applies to SC2K 1996, 1995 and SCURK 1996)&lt;br /&gt;
* A check has been added early on so if neither the simcity.exe or winscurk.exe binaries are used with this library, it won&#039;t create the sc2kfix.ini file.&lt;br /&gt;
* RegOpenKeyExA rather than RegCreateKeyExA at this point (we no longer want to create the default keys if they&#039;re not present once the defaults have been loaded).&lt;br /&gt;
* Aside from the RegSetValueExA cases, the rest appear to be handled.&lt;br /&gt;
&lt;br /&gt;
== Debug Menu ==&lt;br /&gt;
&lt;br /&gt;
A test has been performed on the following Windows 95 versions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Simcity 2000 Demo&lt;br /&gt;
Simcity 2000 CD Collection&lt;br /&gt;
Simcity 2000 Special Edition&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They all exhibited the same issue with the attempted use of &amp;quot;Add all inventions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
It&#039;s.. most odd.&lt;br /&gt;
&lt;br /&gt;
=== 32908 - 0x808C ===&lt;br /&gt;
Show Version Info...&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402694&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x4120E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on a preliminary analysis, it&#039;s just reading the version.inf and then displaying it in the requester.&lt;br /&gt;
&lt;br /&gt;
=== 32909 - 0x808D ===&lt;br /&gt;
More Money&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402B53&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412280&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 32910 - 0x808E ===&lt;br /&gt;
&lt;br /&gt;
Add All Gifts&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401C0D&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412290&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From what I can see aside from granting all rewards, it also touches the invention years (very likely intentional to account for this function being used if the given gift hasn&#039;t yet been invented).&lt;br /&gt;
&lt;br /&gt;
=== 32911 - 0x808F ===&lt;br /&gt;
&lt;br /&gt;
Add All Inventions (one would hope)&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk:  0x402388&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412320&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Center Tool ==&lt;br /&gt;
&lt;br /&gt;
Thanks to @araxestroy&#039;s implementation of the middle-mouse button center control, there&#039;s a slight chance the case of the &amp;quot;constant scrolling&amp;quot; with the left-mouse button has jumped out.&lt;br /&gt;
&lt;br /&gt;
The function isn&#039;t completely confirmed yet, however these are the address references:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401DFC&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x481780&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WM_LBUTTONDOWN - 0x0201 - 513&lt;br /&gt;
&lt;br /&gt;
Since there are multiple paths, this&#039;ll require a bit of experimentation.&lt;br /&gt;
&lt;br /&gt;
During a drag not too far back the following was highlighted as well:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401406&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x47DD80&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And another (yes this is a scattered approach):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Thunk: 0x402874&lt;br /&gt;
Main: 0x40CFB0&lt;br /&gt;
&lt;br /&gt;
Which then goes --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thunk: 0x4019C4&lt;br /&gt;
Main: 0x40C2B0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Backtracing in-progress: 0x4251D0 -&amp;gt; 0x43F220 -&amp;gt; 0x4106C0&lt;br /&gt;
&lt;br /&gt;
(The following are &#039;Main&#039; not &#039;Thunk&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
Parent: 0x4106C0&amp;lt;br&amp;gt;&lt;br /&gt;
Map Editing: 0x442690&amp;lt;br&amp;gt;&lt;br /&gt;
City Building and scenario: 0x43F220&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the two differing paths, in map editing mode at least if you click and your cursor leaves the valid map area and re-enters, it is far less likely to continue scrolling; while in normal mode if you click, leave the valid map area and re-enter it will pick up right where it left off.&lt;br /&gt;
&lt;br /&gt;
Replicated the function externally by making use of the IDA-generated code, it works identically however it doesn&#039;t resolve the original problem. The next step will likely be the two tool menu functions.&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
== Reconcile Military Base spawning differences between DOS and Windows ==&lt;br /&gt;
&lt;br /&gt;
Thus far the function has been reconstructed in the library, all but &amp;quot;Naval Base&amp;quot; handling is now present.&lt;br /&gt;
&lt;br /&gt;
It has potentially opened the door to be able to hit the &amp;quot;bullseye&amp;quot; each time and spawn a specific base (assuming map conditions allow for it).&lt;br /&gt;
&lt;br /&gt;
There are ways to dangerously get the Missile Silos to spawn, though any forced approach requires a more-general cleaner consideration.&lt;br /&gt;
&lt;br /&gt;
The odd case with the Army Bases having at least one road-tile not quite being right appears to have also been nailed down (more testing still needed).&lt;br /&gt;
&lt;br /&gt;
- The Naval Yard spawning is mostly a one-to-one match against what you&#039;d expect in the DOS game, however a base-level check has been added to avoid tiles being placed on different levels.&lt;br /&gt;
- Army Base quirks have mostly been nailed down. The spawned roads won&#039;t have any impact on your budget (unlike the DOS version). The runway-cross tiles are also flagged as Military zoned.&lt;br /&gt;
- Various overlap and positional checks have been put in-place when it comes to individual Silo spawns to make their spawn-case considerably safer.&lt;br /&gt;
&lt;br /&gt;
== Reconcile differences in &#039;ItemPlacementCheck&#039; - 0x4027F2 ==&lt;br /&gt;
&lt;br /&gt;
The specific purpose here is to understand and hopefully eliminate the portion that results in negative and/or anomalous military zone growth.&lt;br /&gt;
&lt;br /&gt;
This &#039;if&#039; block appears to be the culprit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      if ( (*((_BYTE *)*(&amp;amp;dwMapXZON + v5) + v7) &amp;amp; 0xF) == 7 )&lt;br /&gt;
      {&lt;br /&gt;
        return 0;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The check doesn&#039;t appear to exist in the equivalent-function in the DOS edition, though that&#039;s still being combed-over.&lt;br /&gt;
&lt;br /&gt;
This has long since been accounted for.&lt;br /&gt;
&lt;br /&gt;
== Revisit the Naval Yard placement case ==&lt;br /&gt;
&lt;br /&gt;
At the moment our implementation of the Naval Yard placement only has it occur from the ocean-facing map-edge inwards,&lt;br /&gt;
it won&#039;t try to look for any possible valid placement cases on other water-bearing coasts that are connected to the main&lt;br /&gt;
body of water. At this point it&#039;ll likely mean revisiting the DOS portion once again and combing over the code and certain&lt;br /&gt;
function-level vars that &amp;quot;appear&amp;quot; to be related to the direction as far as I can tell.&lt;br /&gt;
&lt;br /&gt;
This has now been reconciled and completed post-R10.&lt;br /&gt;
&lt;br /&gt;
== Moving Thing Trip/Pathing Investigation ==&lt;br /&gt;
&lt;br /&gt;
Pending task, intermediate calls need to be sought out.&lt;br /&gt;
&lt;br /&gt;
== Rebuild internal classes for better infrastructure flow tracking ==&lt;br /&gt;
&lt;br /&gt;
This interesting task is in-progress. - See: https://wiki.sc2kfix.net/User:AF/ClassExtrapolation&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=905</id>
		<title>User:AF</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=905"/>
		<updated>2026-02-28T05:54:33Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Rebuild internal classes for better infrastructure flow tracking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Landing page for information that isn&#039;t yet ready to go into the main sections on the site.&lt;br /&gt;
&lt;br /&gt;
It will mostly account for a naming changes concerning marked down functions during the trawl&lt;br /&gt;
with IDA.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;Subpages:&#039;&#039; [[User:AF/ClassExtrapolation]]&lt;br /&gt;
&lt;br /&gt;
== Movie Function References ==&lt;br /&gt;
&lt;br /&gt;
Oh the pain..&lt;br /&gt;
&lt;br /&gt;
Although for now this is a suspicion, the next target is likely going to be the Smacker functions (specifically SmackOpen()).&lt;br /&gt;
&lt;br /&gt;
Confirmed for now, when SmackOpen() is called, amongst other things it is passing the constructed filename.&lt;br /&gt;
&lt;br /&gt;
Working on importing the &amp;quot;needed&amp;quot; functions at present.. and then we&#039;ll see what happens.&lt;br /&gt;
&lt;br /&gt;
As it turns out although the initial failure check had been bypassed with the correct path, the one that&lt;br /&gt;
SmackOpen() got was still the original.&lt;br /&gt;
&lt;br /&gt;
So half-way there.&lt;br /&gt;
&lt;br /&gt;
LPCSTR - const string.&lt;br /&gt;
&lt;br /&gt;
=== 1 ===&lt;br /&gt;
Unsure where this is called from, though DATA XREF: .rdata:004DEE68&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401C4E&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48B2E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apparently it is a function within a class. __thiscall&lt;br /&gt;
&lt;br /&gt;
Though this specific case may be a diversion.&lt;br /&gt;
&lt;br /&gt;
=== 2 ===&lt;br /&gt;
Called from GameDoIdleUpkeep()&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401104&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A980&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Movie data directory address: 0x4EAA78&lt;br /&gt;
&lt;br /&gt;
By default it references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
No drive letter by default, so this is touched upon elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== 3 ===&lt;br /&gt;
Called from both GameDoIdleUpKeep and &#039;1&#039; just above&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x402360&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A810&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
== Portability ==&lt;br /&gt;
&lt;br /&gt;
Exploring portability currently, ie storing all relevant registry keys for the sc2kfix module, sc2k and scurk in a specific ini file.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The idea in this case is that the library will create an ini by default with &#039;portability&#039; disabled, so the current behaviour is preserved, however when it is enabled then it will load/save all settings from there.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This will require a few tweaks concerning binary detection so it knows what to touch, load and save.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
At the moment this is an experiment.&lt;br /&gt;
&lt;br /&gt;
Thus far the following has been done:&lt;br /&gt;
* A new &#039;sc2kfix.ini&#039; is created&lt;br /&gt;
* If the internal &#039;[sc2kfix]&#039; section isn&#039;t present it will migrate the previously stored registry entries, otherwise it will resort to the internal defaults.&lt;br /&gt;
* All SimCity 2000 and SCURK entries are similarly migrated if they exist (or it goes through the usual installation process than then adds the necessary sections to the new ini file).&lt;br /&gt;
* The imported used registry functions have been intercepted (this applies to SC2K 1996, 1995 and SCURK 1996)&lt;br /&gt;
* A check has been added early on so if neither the simcity.exe or winscurk.exe binaries are used with this library, it won&#039;t create the sc2kfix.ini file.&lt;br /&gt;
* RegOpenKeyExA rather than RegCreateKeyExA at this point (we no longer want to create the default keys if they&#039;re not present once the defaults have been loaded).&lt;br /&gt;
* Aside from the RegSetValueExA cases, the rest appear to be handled.&lt;br /&gt;
&lt;br /&gt;
== Debug Menu ==&lt;br /&gt;
&lt;br /&gt;
A test has been performed on the following Windows 95 versions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Simcity 2000 Demo&lt;br /&gt;
Simcity 2000 CD Collection&lt;br /&gt;
Simcity 2000 Special Edition&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They all exhibited the same issue with the attempted use of &amp;quot;Add all inventions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
It&#039;s.. most odd.&lt;br /&gt;
&lt;br /&gt;
=== 32908 - 0x808C ===&lt;br /&gt;
Show Version Info...&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402694&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x4120E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on a preliminary analysis, it&#039;s just reading the version.inf and then displaying it in the requester.&lt;br /&gt;
&lt;br /&gt;
=== 32909 - 0x808D ===&lt;br /&gt;
More Money&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402B53&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412280&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 32910 - 0x808E ===&lt;br /&gt;
&lt;br /&gt;
Add All Gifts&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401C0D&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412290&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From what I can see aside from granting all rewards, it also touches the invention years (very likely intentional to account for this function being used if the given gift hasn&#039;t yet been invented).&lt;br /&gt;
&lt;br /&gt;
=== 32911 - 0x808F ===&lt;br /&gt;
&lt;br /&gt;
Add All Inventions (one would hope)&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk:  0x402388&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412320&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Center Tool ==&lt;br /&gt;
&lt;br /&gt;
Thanks to @araxestroy&#039;s implementation of the middle-mouse button center control, there&#039;s a slight chance the case of the &amp;quot;constant scrolling&amp;quot; with the left-mouse button has jumped out.&lt;br /&gt;
&lt;br /&gt;
The function isn&#039;t completely confirmed yet, however these are the address references:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401DFC&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x481780&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WM_LBUTTONDOWN - 0x0201 - 513&lt;br /&gt;
&lt;br /&gt;
Since there are multiple paths, this&#039;ll require a bit of experimentation.&lt;br /&gt;
&lt;br /&gt;
During a drag not too far back the following was highlighted as well:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401406&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x47DD80&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And another (yes this is a scattered approach):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Thunk: 0x402874&lt;br /&gt;
Main: 0x40CFB0&lt;br /&gt;
&lt;br /&gt;
Which then goes --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thunk: 0x4019C4&lt;br /&gt;
Main: 0x40C2B0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Backtracing in-progress: 0x4251D0 -&amp;gt; 0x43F220 -&amp;gt; 0x4106C0&lt;br /&gt;
&lt;br /&gt;
(The following are &#039;Main&#039; not &#039;Thunk&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
Parent: 0x4106C0&amp;lt;br&amp;gt;&lt;br /&gt;
Map Editing: 0x442690&amp;lt;br&amp;gt;&lt;br /&gt;
City Building and scenario: 0x43F220&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the two differing paths, in map editing mode at least if you click and your cursor leaves the valid map area and re-enters, it is far less likely to continue scrolling; while in normal mode if you click, leave the valid map area and re-enter it will pick up right where it left off.&lt;br /&gt;
&lt;br /&gt;
Replicated the function externally by making use of the IDA-generated code, it works identically however it doesn&#039;t resolve the original problem. The next step will likely be the two tool menu functions.&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
== Reconcile Military Base spawning differences between DOS and Windows ==&lt;br /&gt;
&lt;br /&gt;
Thus far the function has been reconstructed in the library, all but &amp;quot;Naval Base&amp;quot; handling is now present.&lt;br /&gt;
&lt;br /&gt;
It has potentially opened the door to be able to hit the &amp;quot;bullseye&amp;quot; each time and spawn a specific base (assuming map conditions allow for it).&lt;br /&gt;
&lt;br /&gt;
There are ways to dangerously get the Missile Silos to spawn, though any forced approach requires a more-general cleaner consideration.&lt;br /&gt;
&lt;br /&gt;
The odd case with the Army Bases having at least one road-tile not quite being right appears to have also been nailed down (more testing still needed).&lt;br /&gt;
&lt;br /&gt;
- The Naval Yard spawning is mostly a one-to-one match against what you&#039;d expect in the DOS game, however a base-level check has been added to avoid tiles being placed on different levels.&lt;br /&gt;
- Army Base quirks have mostly been nailed down. The spawned roads won&#039;t have any impact on your budget (unlike the DOS version). The runway-cross tiles are also flagged as Military zoned.&lt;br /&gt;
- Various overlap and positional checks have been put in-place when it comes to individual Silo spawns to make their spawn-case considerably safer.&lt;br /&gt;
&lt;br /&gt;
== Reconcile differences in &#039;ItemPlacementCheck&#039; - 0x4027F2 ==&lt;br /&gt;
&lt;br /&gt;
The specific purpose here is to understand and hopefully eliminate the portion that results in negative and/or anomalous military zone growth.&lt;br /&gt;
&lt;br /&gt;
This &#039;if&#039; block appears to be the culprit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      if ( (*((_BYTE *)*(&amp;amp;dwMapXZON + v5) + v7) &amp;amp; 0xF) == 7 )&lt;br /&gt;
      {&lt;br /&gt;
        return 0;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The check doesn&#039;t appear to exist in the equivalent-function in the DOS edition, though that&#039;s still being combed-over.&lt;br /&gt;
&lt;br /&gt;
This has long since been accounted for.&lt;br /&gt;
&lt;br /&gt;
== Revisit the Naval Yard placement case ==&lt;br /&gt;
&lt;br /&gt;
At the moment our implementation of the Naval Yard placement only has it occur from the ocean-facing map-edge inwards,&lt;br /&gt;
it won&#039;t try to look for any possible valid placement cases on other water-bearing coasts that are connected to the main&lt;br /&gt;
body of water. At this point it&#039;ll likely mean revisiting the DOS portion once again and combing over the code and certain&lt;br /&gt;
function-level vars that &amp;quot;appear&amp;quot; to be related to the direction as far as I can tell.&lt;br /&gt;
&lt;br /&gt;
This has now been reconciled and completed post-R10.&lt;br /&gt;
&lt;br /&gt;
== Moving Thing Trip/Pathing Investigation ==&lt;br /&gt;
&lt;br /&gt;
Pending task, intermediate calls need to be sought out.&lt;br /&gt;
&lt;br /&gt;
== Rebuild internal classes for better infrastructure flow tracking ==&lt;br /&gt;
&lt;br /&gt;
This interesting task is in-progress. - See: https://wiki.sc2kfix.net/User:AF/ClassExtrapolation&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=904</id>
		<title>User:AF</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=904"/>
		<updated>2026-02-28T05:53:58Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Revisit the Naval Yard placement case */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Landing page for information that isn&#039;t yet ready to go into the main sections on the site.&lt;br /&gt;
&lt;br /&gt;
It will mostly account for a naming changes concerning marked down functions during the trawl&lt;br /&gt;
with IDA.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;Subpages:&#039;&#039; [[User:AF/ClassExtrapolation]]&lt;br /&gt;
&lt;br /&gt;
== Movie Function References ==&lt;br /&gt;
&lt;br /&gt;
Oh the pain..&lt;br /&gt;
&lt;br /&gt;
Although for now this is a suspicion, the next target is likely going to be the Smacker functions (specifically SmackOpen()).&lt;br /&gt;
&lt;br /&gt;
Confirmed for now, when SmackOpen() is called, amongst other things it is passing the constructed filename.&lt;br /&gt;
&lt;br /&gt;
Working on importing the &amp;quot;needed&amp;quot; functions at present.. and then we&#039;ll see what happens.&lt;br /&gt;
&lt;br /&gt;
As it turns out although the initial failure check had been bypassed with the correct path, the one that&lt;br /&gt;
SmackOpen() got was still the original.&lt;br /&gt;
&lt;br /&gt;
So half-way there.&lt;br /&gt;
&lt;br /&gt;
LPCSTR - const string.&lt;br /&gt;
&lt;br /&gt;
=== 1 ===&lt;br /&gt;
Unsure where this is called from, though DATA XREF: .rdata:004DEE68&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401C4E&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48B2E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apparently it is a function within a class. __thiscall&lt;br /&gt;
&lt;br /&gt;
Though this specific case may be a diversion.&lt;br /&gt;
&lt;br /&gt;
=== 2 ===&lt;br /&gt;
Called from GameDoIdleUpkeep()&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401104&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A980&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Movie data directory address: 0x4EAA78&lt;br /&gt;
&lt;br /&gt;
By default it references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
No drive letter by default, so this is touched upon elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== 3 ===&lt;br /&gt;
Called from both GameDoIdleUpKeep and &#039;1&#039; just above&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x402360&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A810&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
== Portability ==&lt;br /&gt;
&lt;br /&gt;
Exploring portability currently, ie storing all relevant registry keys for the sc2kfix module, sc2k and scurk in a specific ini file.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The idea in this case is that the library will create an ini by default with &#039;portability&#039; disabled, so the current behaviour is preserved, however when it is enabled then it will load/save all settings from there.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This will require a few tweaks concerning binary detection so it knows what to touch, load and save.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
At the moment this is an experiment.&lt;br /&gt;
&lt;br /&gt;
Thus far the following has been done:&lt;br /&gt;
* A new &#039;sc2kfix.ini&#039; is created&lt;br /&gt;
* If the internal &#039;[sc2kfix]&#039; section isn&#039;t present it will migrate the previously stored registry entries, otherwise it will resort to the internal defaults.&lt;br /&gt;
* All SimCity 2000 and SCURK entries are similarly migrated if they exist (or it goes through the usual installation process than then adds the necessary sections to the new ini file).&lt;br /&gt;
* The imported used registry functions have been intercepted (this applies to SC2K 1996, 1995 and SCURK 1996)&lt;br /&gt;
* A check has been added early on so if neither the simcity.exe or winscurk.exe binaries are used with this library, it won&#039;t create the sc2kfix.ini file.&lt;br /&gt;
* RegOpenKeyExA rather than RegCreateKeyExA at this point (we no longer want to create the default keys if they&#039;re not present once the defaults have been loaded).&lt;br /&gt;
* Aside from the RegSetValueExA cases, the rest appear to be handled.&lt;br /&gt;
&lt;br /&gt;
== Debug Menu ==&lt;br /&gt;
&lt;br /&gt;
A test has been performed on the following Windows 95 versions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Simcity 2000 Demo&lt;br /&gt;
Simcity 2000 CD Collection&lt;br /&gt;
Simcity 2000 Special Edition&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They all exhibited the same issue with the attempted use of &amp;quot;Add all inventions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
It&#039;s.. most odd.&lt;br /&gt;
&lt;br /&gt;
=== 32908 - 0x808C ===&lt;br /&gt;
Show Version Info...&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402694&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x4120E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on a preliminary analysis, it&#039;s just reading the version.inf and then displaying it in the requester.&lt;br /&gt;
&lt;br /&gt;
=== 32909 - 0x808D ===&lt;br /&gt;
More Money&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402B53&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412280&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 32910 - 0x808E ===&lt;br /&gt;
&lt;br /&gt;
Add All Gifts&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401C0D&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412290&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From what I can see aside from granting all rewards, it also touches the invention years (very likely intentional to account for this function being used if the given gift hasn&#039;t yet been invented).&lt;br /&gt;
&lt;br /&gt;
=== 32911 - 0x808F ===&lt;br /&gt;
&lt;br /&gt;
Add All Inventions (one would hope)&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk:  0x402388&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412320&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Center Tool ==&lt;br /&gt;
&lt;br /&gt;
Thanks to @araxestroy&#039;s implementation of the middle-mouse button center control, there&#039;s a slight chance the case of the &amp;quot;constant scrolling&amp;quot; with the left-mouse button has jumped out.&lt;br /&gt;
&lt;br /&gt;
The function isn&#039;t completely confirmed yet, however these are the address references:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401DFC&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x481780&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WM_LBUTTONDOWN - 0x0201 - 513&lt;br /&gt;
&lt;br /&gt;
Since there are multiple paths, this&#039;ll require a bit of experimentation.&lt;br /&gt;
&lt;br /&gt;
During a drag not too far back the following was highlighted as well:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401406&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x47DD80&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And another (yes this is a scattered approach):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Thunk: 0x402874&lt;br /&gt;
Main: 0x40CFB0&lt;br /&gt;
&lt;br /&gt;
Which then goes --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thunk: 0x4019C4&lt;br /&gt;
Main: 0x40C2B0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Backtracing in-progress: 0x4251D0 -&amp;gt; 0x43F220 -&amp;gt; 0x4106C0&lt;br /&gt;
&lt;br /&gt;
(The following are &#039;Main&#039; not &#039;Thunk&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
Parent: 0x4106C0&amp;lt;br&amp;gt;&lt;br /&gt;
Map Editing: 0x442690&amp;lt;br&amp;gt;&lt;br /&gt;
City Building and scenario: 0x43F220&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the two differing paths, in map editing mode at least if you click and your cursor leaves the valid map area and re-enters, it is far less likely to continue scrolling; while in normal mode if you click, leave the valid map area and re-enter it will pick up right where it left off.&lt;br /&gt;
&lt;br /&gt;
Replicated the function externally by making use of the IDA-generated code, it works identically however it doesn&#039;t resolve the original problem. The next step will likely be the two tool menu functions.&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
== Reconcile Military Base spawning differences between DOS and Windows ==&lt;br /&gt;
&lt;br /&gt;
Thus far the function has been reconstructed in the library, all but &amp;quot;Naval Base&amp;quot; handling is now present.&lt;br /&gt;
&lt;br /&gt;
It has potentially opened the door to be able to hit the &amp;quot;bullseye&amp;quot; each time and spawn a specific base (assuming map conditions allow for it).&lt;br /&gt;
&lt;br /&gt;
There are ways to dangerously get the Missile Silos to spawn, though any forced approach requires a more-general cleaner consideration.&lt;br /&gt;
&lt;br /&gt;
The odd case with the Army Bases having at least one road-tile not quite being right appears to have also been nailed down (more testing still needed).&lt;br /&gt;
&lt;br /&gt;
- The Naval Yard spawning is mostly a one-to-one match against what you&#039;d expect in the DOS game, however a base-level check has been added to avoid tiles being placed on different levels.&lt;br /&gt;
- Army Base quirks have mostly been nailed down. The spawned roads won&#039;t have any impact on your budget (unlike the DOS version). The runway-cross tiles are also flagged as Military zoned.&lt;br /&gt;
- Various overlap and positional checks have been put in-place when it comes to individual Silo spawns to make their spawn-case considerably safer.&lt;br /&gt;
&lt;br /&gt;
== Reconcile differences in &#039;ItemPlacementCheck&#039; - 0x4027F2 ==&lt;br /&gt;
&lt;br /&gt;
The specific purpose here is to understand and hopefully eliminate the portion that results in negative and/or anomalous military zone growth.&lt;br /&gt;
&lt;br /&gt;
This &#039;if&#039; block appears to be the culprit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      if ( (*((_BYTE *)*(&amp;amp;dwMapXZON + v5) + v7) &amp;amp; 0xF) == 7 )&lt;br /&gt;
      {&lt;br /&gt;
        return 0;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The check doesn&#039;t appear to exist in the equivalent-function in the DOS edition, though that&#039;s still being combed-over.&lt;br /&gt;
&lt;br /&gt;
This has long since been accounted for.&lt;br /&gt;
&lt;br /&gt;
== Revisit the Naval Yard placement case ==&lt;br /&gt;
&lt;br /&gt;
At the moment our implementation of the Naval Yard placement only has it occur from the ocean-facing map-edge inwards,&lt;br /&gt;
it won&#039;t try to look for any possible valid placement cases on other water-bearing coasts that are connected to the main&lt;br /&gt;
body of water. At this point it&#039;ll likely mean revisiting the DOS portion once again and combing over the code and certain&lt;br /&gt;
function-level vars that &amp;quot;appear&amp;quot; to be related to the direction as far as I can tell.&lt;br /&gt;
&lt;br /&gt;
This has now been reconciled and completed post-R10.&lt;br /&gt;
&lt;br /&gt;
== Moving Thing Trip/Pathing Investigation ==&lt;br /&gt;
&lt;br /&gt;
Pending task, intermediate calls need to be sought out.&lt;br /&gt;
&lt;br /&gt;
== Rebuild internal classes for better infrastructure flow tracking ==&lt;br /&gt;
&lt;br /&gt;
This interesting task is in-progress.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=903</id>
		<title>User:AF</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF&amp;diff=903"/>
		<updated>2026-02-28T05:53:22Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Reconcile Military Base spawning differences between DOS and Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Landing page for information that isn&#039;t yet ready to go into the main sections on the site.&lt;br /&gt;
&lt;br /&gt;
It will mostly account for a naming changes concerning marked down functions during the trawl&lt;br /&gt;
with IDA.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;Subpages:&#039;&#039; [[User:AF/ClassExtrapolation]]&lt;br /&gt;
&lt;br /&gt;
== Movie Function References ==&lt;br /&gt;
&lt;br /&gt;
Oh the pain..&lt;br /&gt;
&lt;br /&gt;
Although for now this is a suspicion, the next target is likely going to be the Smacker functions (specifically SmackOpen()).&lt;br /&gt;
&lt;br /&gt;
Confirmed for now, when SmackOpen() is called, amongst other things it is passing the constructed filename.&lt;br /&gt;
&lt;br /&gt;
Working on importing the &amp;quot;needed&amp;quot; functions at present.. and then we&#039;ll see what happens.&lt;br /&gt;
&lt;br /&gt;
As it turns out although the initial failure check had been bypassed with the correct path, the one that&lt;br /&gt;
SmackOpen() got was still the original.&lt;br /&gt;
&lt;br /&gt;
So half-way there.&lt;br /&gt;
&lt;br /&gt;
LPCSTR - const string.&lt;br /&gt;
&lt;br /&gt;
=== 1 ===&lt;br /&gt;
Unsure where this is called from, though DATA XREF: .rdata:004DEE68&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401C4E&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48B2E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apparently it is a function within a class. __thiscall&lt;br /&gt;
&lt;br /&gt;
Though this specific case may be a diversion.&lt;br /&gt;
&lt;br /&gt;
=== 2 ===&lt;br /&gt;
Called from GameDoIdleUpkeep()&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x401104&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A980&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Movie data directory address: 0x4EAA78&lt;br /&gt;
&lt;br /&gt;
By default it references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
No drive letter by default, so this is touched upon elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== 3 ===&lt;br /&gt;
Called from both GameDoIdleUpKeep and &#039;1&#039; just above&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk - 0x402360&amp;lt;br&amp;gt;&lt;br /&gt;
Main - 0x48A810&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also references: &#039;\DATA\&#039;&lt;br /&gt;
&lt;br /&gt;
== Portability ==&lt;br /&gt;
&lt;br /&gt;
Exploring portability currently, ie storing all relevant registry keys for the sc2kfix module, sc2k and scurk in a specific ini file.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The idea in this case is that the library will create an ini by default with &#039;portability&#039; disabled, so the current behaviour is preserved, however when it is enabled then it will load/save all settings from there.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This will require a few tweaks concerning binary detection so it knows what to touch, load and save.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
At the moment this is an experiment.&lt;br /&gt;
&lt;br /&gt;
Thus far the following has been done:&lt;br /&gt;
* A new &#039;sc2kfix.ini&#039; is created&lt;br /&gt;
* If the internal &#039;[sc2kfix]&#039; section isn&#039;t present it will migrate the previously stored registry entries, otherwise it will resort to the internal defaults.&lt;br /&gt;
* All SimCity 2000 and SCURK entries are similarly migrated if they exist (or it goes through the usual installation process than then adds the necessary sections to the new ini file).&lt;br /&gt;
* The imported used registry functions have been intercepted (this applies to SC2K 1996, 1995 and SCURK 1996)&lt;br /&gt;
* A check has been added early on so if neither the simcity.exe or winscurk.exe binaries are used with this library, it won&#039;t create the sc2kfix.ini file.&lt;br /&gt;
* RegOpenKeyExA rather than RegCreateKeyExA at this point (we no longer want to create the default keys if they&#039;re not present once the defaults have been loaded).&lt;br /&gt;
* Aside from the RegSetValueExA cases, the rest appear to be handled.&lt;br /&gt;
&lt;br /&gt;
== Debug Menu ==&lt;br /&gt;
&lt;br /&gt;
A test has been performed on the following Windows 95 versions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Simcity 2000 Demo&lt;br /&gt;
Simcity 2000 CD Collection&lt;br /&gt;
Simcity 2000 Special Edition&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They all exhibited the same issue with the attempted use of &amp;quot;Add all inventions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
It&#039;s.. most odd.&lt;br /&gt;
&lt;br /&gt;
=== 32908 - 0x808C ===&lt;br /&gt;
Show Version Info...&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402694&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x4120E0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on a preliminary analysis, it&#039;s just reading the version.inf and then displaying it in the requester.&lt;br /&gt;
&lt;br /&gt;
=== 32909 - 0x808D ===&lt;br /&gt;
More Money&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x402B53&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412280&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 32910 - 0x808E ===&lt;br /&gt;
&lt;br /&gt;
Add All Gifts&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401C0D&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412290&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From what I can see aside from granting all rewards, it also touches the invention years (very likely intentional to account for this function being used if the given gift hasn&#039;t yet been invented).&lt;br /&gt;
&lt;br /&gt;
=== 32911 - 0x808F ===&lt;br /&gt;
&lt;br /&gt;
Add All Inventions (one would hope)&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk:  0x402388&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x412320&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Center Tool ==&lt;br /&gt;
&lt;br /&gt;
Thanks to @araxestroy&#039;s implementation of the middle-mouse button center control, there&#039;s a slight chance the case of the &amp;quot;constant scrolling&amp;quot; with the left-mouse button has jumped out.&lt;br /&gt;
&lt;br /&gt;
The function isn&#039;t completely confirmed yet, however these are the address references:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401DFC&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x481780&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WM_LBUTTONDOWN - 0x0201 - 513&lt;br /&gt;
&lt;br /&gt;
Since there are multiple paths, this&#039;ll require a bit of experimentation.&lt;br /&gt;
&lt;br /&gt;
During a drag not too far back the following was highlighted as well:&amp;lt;br&amp;gt;&lt;br /&gt;
Thunk: 0x401406&amp;lt;br&amp;gt;&lt;br /&gt;
Main: 0x47DD80&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And another (yes this is a scattered approach):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Thunk: 0x402874&lt;br /&gt;
Main: 0x40CFB0&lt;br /&gt;
&lt;br /&gt;
Which then goes --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thunk: 0x4019C4&lt;br /&gt;
Main: 0x40C2B0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Backtracing in-progress: 0x4251D0 -&amp;gt; 0x43F220 -&amp;gt; 0x4106C0&lt;br /&gt;
&lt;br /&gt;
(The following are &#039;Main&#039; not &#039;Thunk&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
Parent: 0x4106C0&amp;lt;br&amp;gt;&lt;br /&gt;
Map Editing: 0x442690&amp;lt;br&amp;gt;&lt;br /&gt;
City Building and scenario: 0x43F220&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the two differing paths, in map editing mode at least if you click and your cursor leaves the valid map area and re-enters, it is far less likely to continue scrolling; while in normal mode if you click, leave the valid map area and re-enter it will pick up right where it left off.&lt;br /&gt;
&lt;br /&gt;
Replicated the function externally by making use of the IDA-generated code, it works identically however it doesn&#039;t resolve the original problem. The next step will likely be the two tool menu functions.&lt;br /&gt;
&lt;br /&gt;
Completed.&lt;br /&gt;
&lt;br /&gt;
== Reconcile Military Base spawning differences between DOS and Windows ==&lt;br /&gt;
&lt;br /&gt;
Thus far the function has been reconstructed in the library, all but &amp;quot;Naval Base&amp;quot; handling is now present.&lt;br /&gt;
&lt;br /&gt;
It has potentially opened the door to be able to hit the &amp;quot;bullseye&amp;quot; each time and spawn a specific base (assuming map conditions allow for it).&lt;br /&gt;
&lt;br /&gt;
There are ways to dangerously get the Missile Silos to spawn, though any forced approach requires a more-general cleaner consideration.&lt;br /&gt;
&lt;br /&gt;
The odd case with the Army Bases having at least one road-tile not quite being right appears to have also been nailed down (more testing still needed).&lt;br /&gt;
&lt;br /&gt;
- The Naval Yard spawning is mostly a one-to-one match against what you&#039;d expect in the DOS game, however a base-level check has been added to avoid tiles being placed on different levels.&lt;br /&gt;
- Army Base quirks have mostly been nailed down. The spawned roads won&#039;t have any impact on your budget (unlike the DOS version). The runway-cross tiles are also flagged as Military zoned.&lt;br /&gt;
- Various overlap and positional checks have been put in-place when it comes to individual Silo spawns to make their spawn-case considerably safer.&lt;br /&gt;
&lt;br /&gt;
== Reconcile differences in &#039;ItemPlacementCheck&#039; - 0x4027F2 ==&lt;br /&gt;
&lt;br /&gt;
The specific purpose here is to understand and hopefully eliminate the portion that results in negative and/or anomalous military zone growth.&lt;br /&gt;
&lt;br /&gt;
This &#039;if&#039; block appears to be the culprit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      if ( (*((_BYTE *)*(&amp;amp;dwMapXZON + v5) + v7) &amp;amp; 0xF) == 7 )&lt;br /&gt;
      {&lt;br /&gt;
        return 0;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The check doesn&#039;t appear to exist in the equivalent-function in the DOS edition, though that&#039;s still being combed-over.&lt;br /&gt;
&lt;br /&gt;
This has long since been accounted for.&lt;br /&gt;
&lt;br /&gt;
== Revisit the Naval Yard placement case ==&lt;br /&gt;
&lt;br /&gt;
At the moment our implementation of the Naval Yard placement only has it occur from the ocean-facing map-edge inwards,&lt;br /&gt;
it won&#039;t try to look for any possible valid placement cases on other water-bearing coasts that are connected to the main&lt;br /&gt;
body of water. At this point it&#039;ll likely mean revisiting the DOS portion once again and combing over the code and certain&lt;br /&gt;
function-level vars that &amp;quot;appear&amp;quot; to be related to the direction as far as I can tell.&lt;br /&gt;
&lt;br /&gt;
Either way, this is a pending task.&lt;br /&gt;
&lt;br /&gt;
== Moving Thing Trip/Pathing Investigation ==&lt;br /&gt;
&lt;br /&gt;
Pending task, intermediate calls need to be sought out.&lt;br /&gt;
&lt;br /&gt;
== Rebuild internal classes for better infrastructure flow tracking ==&lt;br /&gt;
&lt;br /&gt;
This interesting task is in-progress.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=902</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=902"/>
		<updated>2026-01-19T01:26:45Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CSimcityView */ - Naming adjustments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle background palette animation&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCACMDLineLoadMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringDriveCurrentWorkingDirectory;&lt;br /&gt;
	CString dwSCACStringHomeDirectory;&lt;br /&gt;
	CString dwSCACStringTargetTypePath;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocSC2;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocSCN;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCABackgroundColourCyclingActive;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	int iSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
	int iMyTBMenuButtonPos;&lt;br /&gt;
	int iMyTBLastButtonPos;&lt;br /&gt;
	CPoint MyTBMaxButtonHitPoint;&lt;br /&gt;
	DWORD dwMyTBButtonMenu;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
	DWORD dwMyTBButtonPressed;&lt;br /&gt;
	DWORD dwMyTBten;&lt;br /&gt;
	DWORD dwMyTBeleven;&lt;br /&gt;
	DWORD dwMyTBButtonFace;&lt;br /&gt;
	DWORD dwMyTBButtonShadow;&lt;br /&gt;
	DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
	DWORD dwMyTBButtonText;&lt;br /&gt;
	DWORD dwMyTBWindowFrame;&lt;br /&gt;
	DWORD dwMyTBseventeen;&lt;br /&gt;
	DWORD dwMyTBeighteen;&lt;br /&gt;
	CPoint MyTBToolBarShapePt;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button.&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pBtnShapePoint;&lt;br /&gt;
  CPoint *pBtnImageShapePoint;&lt;br /&gt;
  CPoint *pBtnPositionPoint;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwCTBControlsDisabled;&lt;br /&gt;
	DWORD dwCTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwCTBOne;&lt;br /&gt;
	CPoint CTBGrabPoint;&lt;br /&gt;
	CPoint CTBBorderPoint;&lt;br /&gt;
	DWORD dwCTBTwo;&lt;br /&gt;
	CMainFrame *pCTBMainFrame;&lt;br /&gt;
	DWORD dwCTBcxRightBorder;&lt;br /&gt;
	DWORD dwCTBthirtyone;&lt;br /&gt;
	CMenu dwCTBMenuOne;&lt;br /&gt;
	CString dwCTBString[15];&lt;br /&gt;
	DWORD dwCTBseventysix;&lt;br /&gt;
	DWORD dwCTBseventyseven;&lt;br /&gt;
	DWORD dwCTBseventyeight;&lt;br /&gt;
	DWORD dwCTBseventynine;&lt;br /&gt;
	DWORD dwCTBeighty;&lt;br /&gt;
	DWORD dwCTBeightyone;&lt;br /&gt;
	DWORD dwCTBeightytwo;&lt;br /&gt;
	DWORD dwCTBeightythree;&lt;br /&gt;
	DWORD dwCTBeightyfour;&lt;br /&gt;
	DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwMTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwMTBControlsDisabled;&lt;br /&gt;
	CPoint MTBGrabPoint;&lt;br /&gt;
	CPoint MTBBorderPoint;&lt;br /&gt;
	DWORD dwMTBTwentyNine;&lt;br /&gt;
	CMainFrame *pMTBMainFrame;&lt;br /&gt;
	DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *SCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	void *dwSCVThree;&lt;br /&gt;
	void *pSCVGraphicLockDIBRes;&lt;br /&gt;
	LONG dwSCVGraphicWidth;&lt;br /&gt;
	LONG dwSCVGraphicHeight;&lt;br /&gt;
	CScrollBar *SCVScrollBarVert;&lt;br /&gt;
	CScrollBar *SCVScrollBarHorz;&lt;br /&gt;
	CStatic *SCVStaticOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectBar;&lt;br /&gt;
	CRect SCVScrollBarVertRectUpButton;&lt;br /&gt;
	CRect SCVScrollBarVertRectDownButton;&lt;br /&gt;
	CRect SCVScrollPosVertRectThumb;&lt;br /&gt;
	CRect SCVScrollBarHorzRectBar;&lt;br /&gt;
	CRect SCVScrollBarHorzRectLeftButton;&lt;br /&gt;
	CRect SCVScrollBarHorzRectRightButton;&lt;br /&gt;
	CRect SCVScrollPosHorzRectThumb;&lt;br /&gt;
	CRect SCVScrollPosRect;&lt;br /&gt;
	CRect SCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint SCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint SCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	CRect SCVAreaView;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=901</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=901"/>
		<updated>2025-12-25T03:43:25Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CSimcityApp */ - var clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle background palette animation&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCACMDLineLoadMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringDriveCurrentWorkingDirectory;&lt;br /&gt;
	CString dwSCACStringHomeDirectory;&lt;br /&gt;
	CString dwSCACStringTargetTypePath;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocSC2;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocSCN;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCABackgroundColourCyclingActive;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	int iSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
	int iMyTBMenuButtonPos;&lt;br /&gt;
	int iMyTBLastButtonPos;&lt;br /&gt;
	CPoint MyTBMaxButtonHitPoint;&lt;br /&gt;
	DWORD dwMyTBButtonMenu;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
	DWORD dwMyTBButtonPressed;&lt;br /&gt;
	DWORD dwMyTBten;&lt;br /&gt;
	DWORD dwMyTBeleven;&lt;br /&gt;
	DWORD dwMyTBButtonFace;&lt;br /&gt;
	DWORD dwMyTBButtonShadow;&lt;br /&gt;
	DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
	DWORD dwMyTBButtonText;&lt;br /&gt;
	DWORD dwMyTBWindowFrame;&lt;br /&gt;
	DWORD dwMyTBseventeen;&lt;br /&gt;
	DWORD dwMyTBeighteen;&lt;br /&gt;
	CPoint MyTBToolBarShapePt;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button.&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pBtnShapePoint;&lt;br /&gt;
  CPoint *pBtnImageShapePoint;&lt;br /&gt;
  CPoint *pBtnPositionPoint;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwCTBControlsDisabled;&lt;br /&gt;
	DWORD dwCTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwCTBOne;&lt;br /&gt;
	CPoint CTBGrabPoint;&lt;br /&gt;
	CPoint CTBBorderPoint;&lt;br /&gt;
	DWORD dwCTBTwo;&lt;br /&gt;
	CMainFrame *pCTBMainFrame;&lt;br /&gt;
	DWORD dwCTBcxRightBorder;&lt;br /&gt;
	DWORD dwCTBthirtyone;&lt;br /&gt;
	CMenu dwCTBMenuOne;&lt;br /&gt;
	CString dwCTBString[15];&lt;br /&gt;
	DWORD dwCTBseventysix;&lt;br /&gt;
	DWORD dwCTBseventyseven;&lt;br /&gt;
	DWORD dwCTBseventyeight;&lt;br /&gt;
	DWORD dwCTBseventynine;&lt;br /&gt;
	DWORD dwCTBeighty;&lt;br /&gt;
	DWORD dwCTBeightyone;&lt;br /&gt;
	DWORD dwCTBeightytwo;&lt;br /&gt;
	DWORD dwCTBeightythree;&lt;br /&gt;
	DWORD dwCTBeightyfour;&lt;br /&gt;
	DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwMTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwMTBControlsDisabled;&lt;br /&gt;
	CPoint MTBGrabPoint;&lt;br /&gt;
	CPoint MTBBorderPoint;&lt;br /&gt;
	DWORD dwMTBTwentyNine;&lt;br /&gt;
	CMainFrame *pMTBMainFrame;&lt;br /&gt;
	DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *SCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	void *dwSCVThree;&lt;br /&gt;
	void *pSCVGraphicLockDIBRes;&lt;br /&gt;
	LONG dwSCVGraphicWidth;&lt;br /&gt;
	LONG dwSCVGraphicHeight;&lt;br /&gt;
	CScrollBar *SCVScrollBarVert;&lt;br /&gt;
	CScrollBar *SCVScrollBarHorz;&lt;br /&gt;
	CStatic *SCVStaticOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect SCVScrollBarVertRectThree;&lt;br /&gt;
	CRect SCVScrollPosVertRect;&lt;br /&gt;
	CRect SCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect SCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect SCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect SCVScrollPosHorzRect;&lt;br /&gt;
	CRect SCVScrollPosRect;&lt;br /&gt;
	CRect SCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint SCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint SCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	CRect SCVAreaView;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Tiles&amp;diff=900</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Tiles&amp;diff=900"/>
		<updated>2025-12-25T01:26:30Z</updated>

		<summary type="html">&lt;p&gt;AF: Adjustment concerning on-ramp light traffic overlay tiles.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Overview ===&lt;br /&gt;
[[File:Key.png|652x97px]]&lt;br /&gt;
&lt;br /&gt;
* T = Top&lt;br /&gt;
* R = Right&lt;br /&gt;
* B = Bottom&lt;br /&gt;
* L = Left&lt;br /&gt;
&lt;br /&gt;
CSS style shorthand ordering is used (Top, Right, Bottom, Left) for no other reason aside from I&#039;m familiar with it and it makes sense (clockwise, starting from top). If a tile is sloped the high part of the tile is indicated with an H prefix.&lt;br /&gt;
&lt;br /&gt;
* Network tiles (road, rail, power, pipe, subway, etc): The direction indicates where the tile connects to other tiles of the same network. For tiles that contain multiple network types such as a rail crossing or a power line over a road, there will be separate indicators for each network type (ex: &amp;quot;Road [T-B], Power Line [R-L]&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
* Terrain tiles: The direction indicator is mainly used to indicate the slope direction.&lt;br /&gt;
&lt;br /&gt;
* Water tiles: The direction indicator works similar to the network tiles and indicates where the tile connects to other water (or terrain) tiles.&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;thing&amp;quot; objects such as airplanes, cargo ships and trains, cardinal directions are used:&lt;br /&gt;
&lt;br /&gt;
* NW = North West&lt;br /&gt;
* N = North&lt;br /&gt;
* NE = North East&lt;br /&gt;
* SW = South West&lt;br /&gt;
* S = South&lt;br /&gt;
* SE = South East&lt;br /&gt;
* E = East&lt;br /&gt;
* W = West&lt;br /&gt;
&lt;br /&gt;
Certain tiles are flipped depending on how they are meant to be displayed. Those are indicated by a &amp;quot;Yes&amp;quot; in the flip column. This is not accounted for in the direction indicated on the tile description; so a flipped suspension bridge piece will be [T-B] instead of the labeled [R-L].&lt;br /&gt;
&lt;br /&gt;
Tiles that are animated with the animated palettes are indicated by a &amp;quot;Yes&amp;quot; in the animated column. The frame count is just a count of how many unique states the specific palette used contains.&lt;br /&gt;
&lt;br /&gt;
=== Tile List ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ TileIDs for MapXBLD&lt;br /&gt;
|-|-&lt;br /&gt;
! {{tooltip|Tile Preview|Tile Preview}} ! {{tooltip|Sprite ID|Sprite ID}} ! {{tooltip|Tile ID|Tile ID}} ! {{tooltip|Hex ID|Hex ID}} ! {{tooltip|Name|Name}} ! {{tooltip|Category|Category}} ! {{tooltip|Type|Type}} ! {{tooltip|SubType|SubType}} ! {{tooltip|Size|Size}} ! {{tooltip|Can Flip|Can Flip}} ! {{tooltip|Animated|Animated}} ! {{tooltip|Frames|Frames}} ! {{tooltip|Microsim|Microsim}} ! {{tooltip|MicroSim 1 Description|MicroSim 1 Description}} ! {{tooltip|MicroSim 1 Unit|MicroSim 1 Unit}} ! {{tooltip|MicroSim 1 Type|MicroSim 1 Type}} ! {{tooltip|MicroSim 1 Max|MicroSim 1 Max}} ! {{tooltip|MicroSim 2 Description|MicroSim 2 Description}} ! {{tooltip|MicroSim 2 Unit|MicroSim 2 Unit}} ! {{tooltip|MicroSim 2 Type|MicroSim 2 Type}} ! {{tooltip|MicroSim 2 Max|MicroSim 2 Max}} ! {{tooltip|MicroSim 3 Description|MicroSim 3 Description}} ! {{tooltip|MicroSim 3 Unit|MicroSim 3 Unit}} ! {{tooltip|MicroSim 3 Type|MicroSim 3 Type}} ! {{tooltip|MicroSim 3 Max|MicroSim 3 Max}} ! {{tooltip|MicroSim 4 Description|MicroSim 4 Description}} ! {{tooltip|MicroSim 4 Unit|MicroSim 4 Unit}} ! {{tooltip|MicroSim 4 Type|MicroSim 4 Type}} ! {{tooltip|MicroSim 4 Max|MicroSim 4 Max}} &lt;br /&gt;
|-&lt;br /&gt;
| [[File:1.gif|32x17px]] || 1001 || 1 || 0x0001 || Rubble 1 || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:2.gif|32x17px]] || 1002 || 2 || 0x0002 || Rubble 2 || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:3.gif|32x17px]] || 1003 || 3 || 0x0003 || Rubble 3 || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:4.gif|32x17px]] || 1004 || 4 || 0x0004 || Rubble 4 || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:5.gif|32x17px]] || 1005 || 5 || 0x0005 || Radioactive Waste || Ground Cover || building || terrain || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:6.gif|32x19px]] || 1006 || 6 || 0x0006 || Trees (Tree) || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:7.gif|32x21px]] || 1007 || 7 || 0x0007 || Trees (Couple O Trees) || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:8.gif|32x24px]] || 1008 || 8 || 0x0008 || Trees (More Trees) || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:9.gif|32x25px]] || 1009 || 9 || 0x0009 || Trees (Morer Trees) || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:10.gif|32x23px]] || 1010 || 10 || 0x000A || Trees (Even More Trees) || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:11.gif|32x25px]] || 1011 || 11 || 0x000B || Trees (Tons O Trees) || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:12.gif|32x24px]] || 1012 || 12 || 0x000C || Trees (Veritable Jungle) || Ground Cover || building || terrain || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:13.gif|32x21px]] || 1013 || 13 || 0x000D || Small park || Ground Cover || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:14.gif|32x23px]] || 1014 || 14 || 0x000E || Power Line [R-L] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:15.gif|32x23px]] || 1015 || 15 || 0x000F || Power Line [T-B] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:16.gif|32x35px]] || 1016 || 16 || 0x0010 || Power Line [HT-B] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:17.gif|32x35px]] || 1017 || 17 || 0x0011 || Power Line [HR-L] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:18.gif|32x29px]] || 1018 || 18 || 0x0012 || Power Line [T-HB] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:19.gif|32x29px]] || 1019 || 19 || 0x0013 || Power Line [R-HL] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:20.gif|32x23px]] || 1020 || 20 || 0x0014 || Power Line [R-B] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:21.gif|32x21px]] || 1021 || 21 || 0x0015 || Power Line [B-L] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:22.gif|32x23px]] || 1022 || 22 || 0x0016 || Power Line [T-L] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:23.gif|32x23px]] || 1023 || 23 || 0x0017 || Power Line [T-R] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:24.gif|32x23px]] || 1024 || 24 || 0x0018 || Power Line [T-R-B] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:25.gif|32x23px]] || 1025 || 25 || 0x0019 || Power Line [R-B-L] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:26.gif|32x23px]] || 1026 || 26 || 0x001A || Power Line [T-B-L] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:27.gif|32x23px]] || 1027 || 27 || 0x001B || Power Line [T-R-L] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:28.gif|32x23px]] || 1028 || 28 || 0x001C || Power Line [T-R-B-L] || Power Lines || power ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:29.gif|32x17px]] || 1029 || 29 || 0x001D || Road [R-L] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:30.gif|32x17px]] || 1030 || 30 || 0x001E || Road [T-B] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:31.gif|32x29px]] || 1031 || 31 || 0x001F || Road [HT-B] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:32.gif|32x29px]] || 1032 || 32 || 0x0020 || Road [HR-L] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:33.gif|32x21px]] || 1033 || 33 || 0x0021 || Road [T-HB] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:34.gif|32x21px]] || 1034 || 34 || 0x0022 || Road [R-HL] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:35.gif|32x17px]] || 1035 || 35 || 0x0023 || Road [R-B] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:36.gif|32x17px]] || 1036 || 36 || 0x0024 || Road [B-L] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:37.gif|32x17px]] || 1037 || 37 || 0x0025 || Road [T-L] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:38.gif|32x17px]] || 1038 || 38 || 0x0026 || Road [T-R] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:39.gif|32x22px]] || 1039 || 39 || 0x0027 || Road [T-R-B] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:40.gif|32x17px]] || 1040 || 40 || 0x0028 || Road [R-B-L] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:41.gif|32x17px]] || 1041 || 41 || 0x0029 || Road [T-B-L] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:42.gif|32x17px]] || 1042 || 42 || 0x002A || Road [T-R-L] || Roads || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:43.gif|32x22px]] || 1043 || 43 || 0x002B || Road [T-R-B-L] || Roads || road ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:44.gif|32x17px]] || 1044 || 44 || 0x002C || Rail [R-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:45.gif|32x17px]] || 1045 || 45 || 0x002D || Rail [T-B] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:46.gif|32x29px]] || 1046 || 46 || 0x002E || Rail [HT-B] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:47.gif|32x29px]] || 1047 || 47 || 0x002F || Rail [HR-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:48.gif|32x21px]] || 1048 || 48 || 0x0030 || Rail [T-HB] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:49.gif|32x21px]] || 1049 || 49 || 0x0031 || Rail [R-HL] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:50.gif|32x17px]] || 1050 || 50 || 0x0032 || Rail [R-B] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:51.gif|32x17px]] || 1051 || 51 || 0x0033 || Rail [B-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:52.gif|32x14px]] || 1052 || 52 || 0x0034 || Rail [T-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:53.gif|32x17px]] || 1053 || 53 || 0x0035 || Rail [T-R] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:54.gif|32x17px]] || 1054 || 54 || 0x0036 || Rail [T-R-B] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:55.gif|32x17px]] || 1055 || 55 || 0x0037 || Rail [R-B-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:56.gif|32x17px]] || 1056 || 56 || 0x0038 || Rail [T-B-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:57.gif|32x17px]] || 1057 || 57 || 0x0039 || Rail [T-R-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:58.gif|32x17px]] || 1058 || 58 || 0x003A || Rail [T-R-B-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:59.gif|32x21px]] || 1059 || 59 || 0x003B || Rail Slope [HT-B] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:60.gif|32x21px]] || 1060 || 60 || 0x003C || Rail Slope [HR-L] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:61.gif|32x17px]] || 1061 || 61 || 0x003D || Rail Slope [T-HB] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:62.gif|32x17px]] || 1062 || 62 || 0x003E || Rail Slope [R-HL] || Rail || rail ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:63.gif|32x29px]] || 1063 || 63 || 0x003F || Tunnel Entrance [B], Tunnel [T], Terrain [HT-B] || Tunnel Entrances || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:64.gif|32x29px]] || 1064 || 64 || 0x0040 || Tunnel Entrance [L], Tunnel [R], Terrain [HR-L] || Tunnel Entrances || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:65.gif|32x27px]] || 1065 || 65 || 0x0041 || Tunnel Entrance [T], Tunnel [B], Terrain [HB-T] || Tunnel Entrances || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:66.gif|32x27px]] || 1066 || 66 || 0x0042 || Tunnel Entrance [R], Tunnel [L], Terrain [HL-R] || Tunnel Entrances || road ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:67.gif|32x23px]] || 1067 || 67 || 0x0043 || Road [T-B], Power Line [R-L] || Crossovers || power || road || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:68.gif|32x23px]] || 1068 || 68 || 0x0044 || Road [R-L], Power Line [T-B] || Crossovers || power || road || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:69.gif|32x22px]] || 1069 || 69 || 0x0045 || Road [R-L] / Rail [T-B] || Crossovers || road || rail || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:70.gif|32x17px]] || 1070 || 70 || 0x0046 || Road [T-B] / Rail [R-L] || Crossovers || road || rail || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:71.gif|32x23px]] || 1071 || 71 || 0x0047 || Rail [T-B] / Power Line [R-L] || Crossovers || rail || power || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:72.gif|32x23px]] || 1072 || 72 || 0x0048 || Rail [R-L] / Power Line [T-B] || Crossovers || rail || power || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:73.gif|32x31px]] || 1073 || 73 || 0x0049 || Highway [L-R] || Highways || highway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:74.gif|32x31px]] || 1074 || 74 || 0x004A || Highway [T-B] || Highways || highway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:75.gif|32x31px]] || 1075 || 75 || 0x004B || Highway [R-L], Road [T-B] || Highway Crossovers || highway || road || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:76.gif|32x31px]] || 1076 || 76 || 0x004C || Highway [T-B], Road [R-L] || Highway Crossovers || highway || road || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:77.gif|32x31px]] || 1077 || 77 || 0x004D || Highway [R-L], Rail [T-B] || Highway Crossovers || highway || rail || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:78.gif|32x31px]] || 1078 || 78 || 0x004E || Highway [T-B], Rail [R-L] || Highway Crossovers || highway || rail || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:79.gif|32x31px]] || 1079 || 79 || 0x004F || Highway [R-L], Power Line [T-B] || Highway Crossovers || highway || power || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:80.gif|32x31px]] || 1080 || 80 || 0x0050 || Highway [T-B], Power Line [R-L] || Highway Crossovers || highway || power || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:81.gif|32x48px]] || 1081 || 81 || 0x0051 || Suspension Bridge (Piece 1) [R-L] || Bridges || road ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:82.gif|32x67px]] || 1082 || 82 || 0x0052 || Suspension Bridge (Piece 2) [R-L] || Bridges || road ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:83.gif|32x67px]] || 1083 || 83 || 0x0053 || Suspension Bridge (Piece 3) [R-L] || Bridges || road ||  || 1 || Yes || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:84.gif|32x52px]] || 1084 || 84 || 0x0054 || Suspension Bridge (Piece 4) [R-L] || Bridges || road ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:85.gif|32x37px]] || 1085 || 85 || 0x0055 || Suspension Bridge (Piece 5) [R-L] || Bridges || road ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:86.gif|32x39px]] || 1086 || 86 || 0x0056 || Raising Bridge Tower [R-L] || Bridges || road ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:87.gif|32x31px]] || 1087 || 87 || 0x0057 || Causeway With Pylon [R-L] || Bridges || road ||  || 1 || Yes || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:88.gif|32x31px]] || 1088 || 88 || 0x0058 || Causeway [R-L] || Bridges || road ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:89.gif|32x43px]] || 1089 || 89 || 0x0059 || Causeway Raised [R-L] || Bridges || road ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:90.gif|32x27px]] || 1090 || 90 || 0x005A || Rail Bridge With Pylon [R-L] || Bridges || rail ||  || 1 || Yes || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:91.gif|32x27px]] || 1091 || 91 || 0x005B || Rail Bridge [R-L] || Bridges || rail ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:92.gif|32x35px]] || 1092 || 92 || 0x005C || Elevated Power Line [B-L] || Bridges || power ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:93.gif|32x32px]] || 1093 || 93 || 0x005D || Highway Onramp [R], Road [B] || Highway Entrance || highway ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:94.gif|32x29px]] || 1094 || 94 || 0x005E || Highway Onramp [R], Road [T] || Highway Entrance || highway ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:95.gif|32x21px]] || 1095 || 95 || 0x005F || Highway Onramp [L], Road [T] || Highway Entrance || highway ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:96.gif|32x21px]] || 1096 || 96 || 0x0060 || Highway Onramp [L], Road [B] || Highway Entrance || highway ||  || 1 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:97.gif|64x59px]] || 1097 || 97 || 0x0061 || Highway [HT-B] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:98.gif|64x59px]] || 1098 || 98 || 0x0062 || Highway [HR-L] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:99.gif|64x47px]] || 1099 || 99 || 0x0063 || Highway [T-HB] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:100.gif|64x47px]] || 1100 || 100 || 0x0064 || Highway [R-HL] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:101.gif|64x46px]] || 1101 || 101 || 0x0065 || Highway [R-B] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:102.gif|64x33px]] || 1102 || 102 || 0x0066 || Highway [B-L] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:103.gif|64x46px]] || 1103 || 103 || 0x0067 || Highway [T-L] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:104.gif|64x47px]] || 1104 || 104 || 0x0068 || Highway [T-R] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:105.gif|64x49px]] || 1105 || 105 || 0x0069 || Highway Interchange [T-R-B-L] || Highway bits || highway ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:106.gif|64x63px]] || 1106 || 106 || 0x006A || Highway (Reinforced Bridge With Pyon) [R-L] || Reinforced Bridge || highway ||  || 2 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:107.gif|64x63px]] || 1107 || 107 || 0x006B || Highway (Reinforced Bridge) [R-L] || Reinforced Bridge || highway ||  || 2 || Yes || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:108.gif|32x20px]] || 1108 || 108 || 0x006C || Subway [T] to Rail [B] Transition || Subway to Rail || rail || subway || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:109.gif|32x20px]] || 1109 || 109 || 0x006D || Subway [L] to Rail [R] Transition || Subway to Rail || rail || subway || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:110.gif|32x22px]] || 1110 || 110 || 0x006E || Subway [B] to Rail [T] Transition || Subway to Rail || rail || subway || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:111.gif|32x22px]] || 1111 || 111 || 0x006F || Subway [R] to Rail [L] Transition || Subway to Rail || rail || subway || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:112.gif|32x18px]] || 1112 || 112 || 0x0070 || Lower-Class Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:113.gif|32x18px]] || 1113 || 113 || 0x0071 || Lower-Class Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:114.gif|32x18px]] || 1114 || 114 || 0x0072 || Lower-Class Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:115.gif|32x17px]] || 1115 || 115 || 0x0073 || Lower-Class Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:116.gif|32x17px]] || 1116 || 116 || 0x0074 || Middle-Class Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:117.gif|32x17px]] || 1117 || 117 || 0x0075 || Middle-Class Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:118.gif|32x17px]] || 1118 || 118 || 0x0076 || Middle-Class Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:119.gif|32x17px]] || 1119 || 119 || 0x0077 || Middle-Class Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:120.gif|32x19px]] || 1120 || 120 || 0x0078 || Luxury Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:121.gif|32x19px]] || 1121 || 121 || 0x0079 || Luxury Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:122.gif|32x20px]] || 1122 || 122 || 0x007A || Luxury Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:123.gif|32x21px]] || 1123 || 123 || 0x007B || Luxury Homes || Residential 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:124.gif|32x23px]] || 1124 || 124 || 0x007C || Gas Station || Commercial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:125.gif|32x27px]] || 1125 || 125 || 0x007D || Bed &amp;amp; Breakfast Inn || Commercial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:126.gif|32x20px]] || 1126 || 126 || 0x007E || Convenience Store || Commercial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:127.gif|32x18px]] || 1127 || 127 || 0x007F || Gas Station || Commercial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:128.gif|32x32px]] || 1128 || 128 || 0x0080 || Small Office Building || Commercial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:129.gif|32x43px]] || 1129 || 129 || 0x0081 || Office Building || Commercial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:130.gif|32x25px]] || 1130 || 130 || 0x0082 || Warehouse || Commercial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:131.gif|32x34px]] || 1131 || 131 || 0x0083 || Cassidy&#039;s Toy Store || Commercial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:132.gif|32x21px]] || 1132 || 132 || 0x0084 || Warehouse || Industrial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:133.gif|32x28px]] || 1133 || 133 || 0x0085 || Chemical Storage || Industrial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:134.gif|32x20px]] || 1134 || 134 || 0x0086 || Warehouse || Industrial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:135.gif|32x26px]] || 1135 || 135 || 0x0087 || Industrial Substation || Industrial 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:136.gif|32x18px]] || 1136 || 136 || 0x0088 || Construction 1 || Misc 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:137.gif|32x18px]] || 1137 || 137 || 0x0089 || Construction 2 || Misc 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:138.gif|32x17px]] || 1138 || 138 || 0x008A || Abandoned Building 1 || Misc 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:139.gif|32x17px]] || 1139 || 139 || 0x008B || Abandoned Building 2 || Misc 1x1 || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:140.gif|64x34px]] || 1140 || 140 || 0x008C || Cheap Apartments || Residential 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:141.gif|64x39px]] || 1141 || 141 || 0x008D || Apartments || Residential 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:142.gif|64x36px]] || 1142 || 142 || 0x008E || Apartments || Residential 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:143.gif|64x44px]] || 1143 || 143 || 0x008F || Nice Apartments || Residential 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:144.gif|64x53px]] || 1144 || 144 || 0x0090 || Nice Apartments || Residential 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:145.gif|64x56px]] || 1145 || 145 || 0x0091 || Condominium || Residential 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:146.gif|64x78px]] || 1146 || 146 || 0x0092 || Condominium || Residential 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:147.gif|64x77px]] || 1147 || 147 || 0x0093 || Condominium || Residential 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:148.gif|64x33px]] || 1148 || 148 || 0x0094 || Shopping Center || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:149.gif|64x37px]] || 1149 || 149 || 0x0095 || Grocery Store || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:150.gif|64x42px]] || 1150 || 150 || 0x0096 || Office Building || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:151.gif|64x46px]] || 1151 || 151 || 0x0097 || Resort Hotel || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:152.gif|64x46px]] || 1152 || 152 || 0x0098 || Office Building || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:153.gif|64x51px]] || 1153 || 153 || 0x0099 || Office / Retail || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:154.gif|64x70px]] || 1154 || 154 || 0x009A || Office Building || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:155.gif|64x66px]] || 1155 || 155 || 0x009B || Office Building || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:156.gif|64x72px]] || 1156 || 156 || 0x009C || Office Building || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:157.gif|64x84px]] || 1157 || 157 || 0x009D || Office Building || Commercial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:158.gif|64x37px]] || 1158 || 158 || 0x009E || Warehouse || Industrial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:159.gif|64x38px]] || 1159 || 159 || 0x009F || Chemical Processing 2 || Industrial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:160.gif|64x45px]] || 1160 || 160 || 0x00A0 || Factory (Small Factory 1) || Industrial 2x2 || building ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:161.gif|64x35px]] || 1161 || 161 || 0x00A1 || Factory (Small Factory 2) || Industrial 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:162.gif|64x45px]] || 1162 || 162 || 0x00A2 || Factory (Small Factory 3) || Industrial 2x2 || building ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:163.gif|64x56px]] || 1163 || 163 || 0x00A3 || Factory (Small Factory 4) || Industrial 2x2 || building ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:164.gif|64x61px]] || 1164 || 164 || 0x00A4 || Factory (Small Factory 5) || Industrial 2x2 || building ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:165.gif|64x66px]] || 1165 || 165 || 0x00A5 || Factory (Small Factory 6) || Industrial 2x2 || building ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:166.gif|64x33px]] || 1166 || 166 || 0x00A6 || Construction 3 || Misc 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:167.gif|64x44px]] || 1167 || 167 || 0x00A7 || Construction 4 || Misc 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:168.gif|64x44px]] || 1168 || 168 || 0x00A8 || Construction 5 || Misc 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:169.gif|64x65px]] || 1169 || 169 || 0x00A9 || Construction 6 || Misc 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:170.gif|64x46px]] || 1170 || 170 || 0x00AA || Abandoned Building 3 || Misc 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:171.gif|64x53px]] || 1171 || 171 || 0x00AB || Abandoned Building 4 || Misc 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:172.gif|64x61px]] || 1172 || 172 || 0x00AC || Abandoned Building 5 || Misc 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:173.gif|64x73px]] || 1173 || 173 || 0x00AD || Abandoned Building 6 || Misc 2x2 || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:174.gif|96x77px]] || 1174 || 174 || 0x00AE || Large Apartment Building || Residential 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:175.gif|96x88px]] || 1175 || 175 || 0x00AF || Large Apartment Building || Residential 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:176.gif|96x58px]] || 1176 || 176 || 0x00B0 || Condominium || Residential 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:177.gif|96x96px]] || 1177 || 177 || 0x00B1 || Condominium || Residential 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:178.gif|96x61px]] || 1178 || 178 || 0x00B2 || Office Park || Commercial 3x3 || building ||  || 3 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:179.gif|96x91px]] || 1179 || 179 || 0x00B3 || Office Tower || Commercial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:180.gif|96x65px]] || 1180 || 180 || 0x00B4 || Mini-Mall || Commercial 3x3 || building ||  || 3 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:181.gif|96x90px]] || 1181 || 181 || 0x00B5 || Theater Square || Commercial 3x3 || building ||  || 3 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:182.gif|96x58px]] || 1182 || 182 || 0x00B6 || Drive-In Theater || Commercial 3x3 || building ||  || 3 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:183.gif|96x117px]] || 1183 || 183 || 0x00B7 || Office Tower || Commercial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:184.gif|96x123px]] || 1184 || 184 || 0x00B8 || Office Tower || Commercial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:185.gif|96x78px]] || 1185 || 185 || 0x00B9 || Parking Lot || Commercial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:186.gif|96x108px]] || 1186 || 186 || 0x00BA || Historic Office Building || Commercial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:187.gif|96x137px]] || 1187 || 187 || 0x00BB || Corporate Headquarters || Commercial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:188.gif|96x50px]] || 1188 || 188 || 0x00BC || Chemical Processing 1 || Industrial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:189.gif|96x86px]] || 1189 || 189 || 0x00BD || Large Factory || Industrial 3x3 || building ||  || 3 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:190.gif|96x55px]] || 1190 || 190 || 0x00BE || Industrial Thingamajig || Industrial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:191.gif|96x63px]] || 1191 || 191 || 0x00BF || Factory || Industrial 3x3 || building ||  || 3 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:192.gif|96x56px]] || 1192 || 192 || 0x00C0 || Large Warehouse 1 || Industrial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:193.gif|96x49px]] || 1193 || 193 || 0x00C1 || Warehouse || Industrial 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:194.gif|96x85px]] || 1194 || 194 || 0x00C2 || Construction 7 || Misc 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:195.gif|96x65px]] || 1195 || 195 || 0x00C3 || Construction 8 || Misc 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:196.gif|96x74px]] || 1196 || 196 || 0x00C4 || Abandoned Building 7 || Misc 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:197.gif|96x90px]] || 1197 || 197 || 0x00C5 || Abandoned Building 8 || Misc 3x3 || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:198.gif|32x32px]] || 1198 || 198 || 0x00C6 || Hydroelectric Power || Power Plants || building || water || 1 || Yes || No || 1 || City Wide ||  ||  ||  ||  || Hydro Generators ||  || hydroGeneratorCount ||  || Max System Output ||  || hydroGeneratorMegawatts ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:199.gif|32x32px]] || 1199 || 199 || 0x00C7 || Hydroelectric Power || Power Plants || building || water || 1 || Yes || No || 1 || City Wide ||  ||  ||  ||  || Hydro Generators ||  || hydroGeneratorCount ||  || Max System Output ||  || hydroGeneratorMegawatts ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:200.gif|32x48px]] || 1200 || 200 || 0x00C8 || Wind Power || Power Plants || building ||  || 1 || No || Yes || 12 || City Wide ||  ||  ||  ||  || Wind Generators ||  || windGeneratorCount ||  || Max System Output ||  || windGeneratorMegawatts ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:201.gif|128x86px]] || 1201 || 201 || 0x00C9 || Natural Gas Power Plant || Power Plants || building ||  || 4 || No || Yes || 8 || Tile || Age ||  || years || 50 || Max Output ||  || megawatts ||  || Current Load ||  || capacity || 100 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:202.gif|128x115px]] || 1202 || 202 || 0x00CA || Oil Power Plant || Power Plants || building ||  || 4 || No || Yes || 8 || Tile || Age ||  || years || 50 || Max Output ||  || megawatts ||  || Current Load ||  || capacity || 100 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:203.gif|128x81px]] || 1203 || 203 || 0x00CB || Nuclear Power Plant || Power Plants || building ||  || 4 || No || No || 1 || Tile || Age ||  || years || 50 || Max Output ||  || megawatts ||  || Current Load ||  || capacity || 100 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:204.gif|128x78px]] || 1204 || 204 || 0x00CC || Solar Power Plant || Power Plants || building ||  || 4 || No || No || 1 || Tile || Age ||  || years || 50 || Max Output ||  || megawatts ||  || Current Load ||  || capacity || 100 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:205.gif|128x95px]] || 1205 || 205 || 0x00CD || Microwave Power Receiver || Power Plants || building ||  || 4 || No || No || 1 || Tile || Age ||  || years || 50 || Max Output ||  || megawatts ||  || Current Load ||  || capacity || 100 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:206.gif|128x69px]] || 1206 || 206 || 0x00CE || Fusion Power Plant || Power Plants || building ||  || 4 || No || No || 1 || Tile || Age ||  || years || 50 || Max Output ||  || megawatts ||  || Current Load ||  || capacity || 100 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:207.gif|128x106px]] || 1207 || 207 || 0x00CF || Coal Power Plant || Power Plants || building ||  || 4 || No || Yes || 8 || Tile || Age ||  || years || 50 || Max Output ||  || megawatts ||  || Current Load ||  || capacity || 100 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:208.gif|96x77px]] || 1208 || 208 || 0x00D0 || City Hall || Services || building ||  || 3 || No || No || 1 || Tile ||  ||  ||  ||  || Employees ||  || workers ||  || Year Built ||  || constructionYear ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:209.gif|96x82px]] || 1209 || 209 || 0x00D1 || Hospital || Services || building ||  || 3 || No || No || 1 || Tile || Grade ||  || grade ||  || Patients ||  || hospitalPatients || 1000 || Doctors ||  || workers ||  || Annual Cost ||  || funds || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:210.gif|96x72px]] || 1210 || 210 || 0x00D2 || Police Station || Services || building ||  || 3 || No || No || 1 || Tile || Annual Cost ||  || funds ||  || Officers ||  || workers ||  || Crimes Reported ||  || crimes ||  || Arrests ||  || arrests || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:211.gif|96x65px]] || 1211 || 211 || 0x00D3 || Fire Station || Services || building ||  || 3 || No || No || 1 || Tile || Annual Cost ||  || funds ||  || Firefighers ||  || workers ||  || Fire Engines ||  || fireEquipment ||  || Response Time ||  || fireResponseTime || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:212.gif|96x55px]] || 1212 || 212 || 0x00D4 || Museum || Services || building ||  || 3 || No || No || 1 || City Wide ||  ||  ||  ||  || Attendance ||  || museumAttendance ||  || Exhibits ||  || museumExhibits ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:213.gif|96x51px]] || 1213 || 213 || 0x00D5 || SimPark System (Big Park) || Services || building ||  || 3 || No || Yes || 8 || City Wide ||  ||  ||  ||  || Attendance ||  || parkAttendance ||  || Acres ||  || parkAcres ||  || Employees ||  || parkWorkers || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:214.gif|96x57px]] || 1214 || 214 || 0x00D6 || School || Services || building ||  || 3 || No || No || 1 || Tile || Grade ||  || grade ||  || Students ||  || students || 1500 || Teachers ||  || workers ||  || Annual Cost ||  || funds || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:215.gif|128x83px]] || 1215 || 215 || 0x00D7 || Stadium || Services || building ||  || 4 || No || No || 1 || Tile || Wins ||  || stadiumWins ||  || Attendance ||  || stadiumAttendance || 25000 ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:216.gif|128x74px]] || 1216 || 216 || 0x00D8 || Prison || Services || building ||  || 4 || No || No || 1 || Tile || Escapes ||  || prisonEscapes ||  || Inmates ||  || prisonInmates || 10000 || Guards ||  || workers ||  || Capacity ||  || capacity || 100&lt;br /&gt;
|-&lt;br /&gt;
| [[File:217.gif|128x85px]] || 1217 || 217 || 0x00D9 || College || Services || building ||  || 4 || No || No || 1 || Tile || Grade ||  || grade ||  || Attendance ||  || students || 5000 || Teachers ||  || workers ||  || Annual Cost ||  || funds || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:218.gif|128x67px]] || 1218 || 218 || 0x00DA || Zoo || Services || building ||  || 4 || No || Yes || 8 || Tile || Other Dromedaries ||  || zooOther ||  || Peruvian Llamas ||  || zooLlamasP ||  || Andean Llamas ||  || zooLlamasA ||  || Alpacas ||  || zooAlpacas || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:219.gif|32x42px]] || 1219 || 219 || 0x00DB || Statue || Services || building ||  || 1 || No || No || 1 || Tile ||  ||  ||  ||  || Year Built ||  || constructionYear ||  || Pigeons Perched ||  || statuePigeons ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:220.gif|32x19px]] || 1220 || 220 || 0x00DC || Water Pump || Infrastructure (not power plants) || building ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:221.gif|32x17px]] || 1221 || 221 || 0x00DD || Runway [T-B] || Infrastructure (not power plants) || building ||  || 1 || Yes || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:222.gif|32x17px]] || 1222 || 222 || 0x00DE || Runway [T-R-B-L] || Infrastructure (not power plants) || building ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:223.gif|32x21px]] || 1223 || 223 || 0x00DF || Pier [R-L] || Infrastructure (not power plants) || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:224.gif|32x40px]] || 1224 || 224 || 0x00E0 || Crane || Infrastructure (not power plants) || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:225.gif|32x63px]] || 1225 || 225 || 0x00E1 || Control Tower (Civilian Control Tower) || Infrastructure (not power plants) || building ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:226.gif|32x69px]] || 1226 || 226 || 0x00E2 || Control Tower (Military Control Tower) || Infrastructure (not power plants) || building ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:227.gif|32x20px]] || 1227 || 227 || 0x00E3 || Seaport Warehouse || Infrastructure (not power plants) || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:228.gif|32x23px]] || 1228 || 228 || 0x00E4 || Airport Building 1 || Infrastructure (not power plants) || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:229.gif|32x22px]] || 1229 || 229 || 0x00E5 || Airport Building 2 || Infrastructure (not power plants) || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:230.gif|32x17px]] || 1230 || 230 || 0x00E6 || Tarmac || Infrastructure (not power plants) || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:231.gif|32x18px]] || 1231 || 231 || 0x00E7 || F-15b || Infrastructure (not power plants) || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:232.gif|32x20px]] || 1232 || 232 || 0x00E8 || Hangar 1 || Infrastructure (not power plants) || building ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:233.gif|32x21px]] || 1233 || 233 || 0x00E9 || Subway Station || Infrastructure (not power plants) || building || subway || 1 || No || No || 1 || City Wide ||  ||  ||  ||  || Subway Stations ||  || subwayStationCount ||  ||  ||  ||  ||  || Passengers / day ||  || subwayStationPassengers || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:234.gif|32x19px]] || 1234 || 234 || 0x00EA || Radar || Infrastructure (not power plants) || building ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:235.gif|64x64px]] || 1235 || 235 || 0x00EB || Water Tower || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:236.gif|64x37px]] || 1236 || 236 || 0x00EC || Bus Depot || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || City Wide ||  ||  ||  ||  || Bus Stations ||  || busStationCount ||  || Buses ||  || busStationBuses ||  || Passengers / day ||  || busStationPassengers || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:237.gif|64x38px]] || 1237 || 237 || 0x00ED || Rail Depot || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || City Wide ||  ||  ||  ||  || Rail Stations ||  || railStationCount ||  ||  ||  ||  ||  || Passengers / day ||  || railStationPassengers || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:238.gif|64x39px]] || 1238 || 238 || 0x00EE || Parking lot (Civilian Parking Lot) || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:239.gif|64x37px]] || 1239 || 239 || 0x00EF || Parking lot (Military Parking Lot) || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:240.gif|64x36px]] || 1240 || 240 || 0x00F0 || Loading Bay || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:241.gif|64x57px]] || 1241 || 241 || 0x00F1 || Top Secret || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:242.gif|64x33px]] || 1242 || 242 || 0x00F2 || Cargo yard || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:243.gif|64x36px]] || 1243 || 243 || 0x00F3 || Mayor&#039;s House || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || Tile || Door Steps ||  || mayorDoorSteps ||  || Year Built ||  || constructionYear ||  || Approval Rating ||  || mayorApprovalRating || 100 || Employees ||  || workers || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:244.gif|64x37px]] || 1244 || 244 || 0x00F4 || Water Treatment Plant || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || Tile ||  ||  ||  ||  || Untreated Water || thousands || waterCubicFeet ||  || Treated Water || thousands || waterCubicFeet ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:245.gif|64x53px]] || 1245 || 245 || 0x00F5 || Library || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || City Wide || Grade ||  || grade ||  || Attendance ||  || libraryAttendance ||  || Books ||  || libraryBooks ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:246.gif|64x39px]] || 1246 || 246 || 0x00F6 || Hangar 2 || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:247.gif|64x48px]] || 1247 || 247 || 0x00F7 || Church || Infrastructure (not power plants) || building ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:248.gif|96x55px]] || 1248 || 248 || 0x00F8 || Marina || Infrastructure (not power plants) || building ||  || 3 || No || No || 1 || City Wide ||  ||  ||  ||  || Boats ||  || marinaBoats ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:249.gif|96x50px]] || 1249 || 249 || 0x00F9 || Missile Silo || Infrastructure (not power plants) || building ||  || 3 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:250.gif|96x77px]] || 1250 || 250 || 0x00FA || Desalination Plant || Infrastructure (not power plants) || building ||  || 3 || No || Yes || 24 || Tile || Current Load ||  || capacity || 100 || Salt / tons Removed ||  || desalinationSaltRemoved ||  || Employees ||  || workers ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:251.gif|128x196px]] || 1251 || 251 || 0x00FB || Plymouth arcology || Arcologies || building ||  || 4 || No || Yes || 24 || Tile || Condition ||  || grade ||  || Design Capacity || thousands || arcoCapacity ||  || Residents ||  || arcoPopulation ||  || Year Built ||  || constructionYear || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:252.gif|128x182px]] || 1252 || 252 || 0x00FC || Forest arcology || Arcologies || building ||  || 4 || No || Yes || 8 || Tile || Condition ||  || grade ||  || Design Capacity || thousands || arcoCapacity ||  || Residents ||  || arcoPopulation ||  || Year Built ||  || constructionYear || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:253.gif|128x210px]] || 1253 || 253 || 0x00FD || Darco arcology || Arcologies || building ||  || 4 || No || Yes || 4 || Tile || Condition ||  || grade ||  || Design Capacity || thousands || arcoCapacity ||  || Residents ||  || arcoPopulation ||  || Year Built ||  || constructionYear || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:254.gif|128x235px]] || 1254 || 254 || 0x00FE || Launch arcology || Arcologies || building ||  || 4 || No || Yes || 12 || Tile || Condition ||  || grade ||  || Design Capacity || thousands || arcoCapacity ||  || Residents ||  || arcoPopulation ||  || Year Built ||  || constructionYear || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:255.gif|128x154px]] || 1255 || 255 || 0x00FF || Braun Llama Dome || Other || building ||  || 4 || No || Yes || 4 || Tile || Weddings ||  || domeWeddings ||  || Visitors ||  || domeVisitors ||  || Llama Sightings ||  || domeLlamaSightings ||  || Complaints ||  || domeComplaints || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:256.gif|32x17px]] || 1256 || 256 || 0x0100 || Terrain ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:257.gif|32x29px]] || 1257 || 257 || 0x0101 || Terrain [HT-B] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:258.gif|32x29px]] || 1258 || 258 || 0x0102 || Terrain [HR-L] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:259.gif|32x21px]] || 1259 || 259 || 0x0103 || Terrain [T-HB] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:260.gif|32x21px]] || 1260 || 260 || 0x0104 || Terrain [R-HL] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:261.gif|32x29px]] || 1261 || 261 || 0x0105 || Terrain [HT-HR-B-L] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:262.gif|32x29px]] || 1262 || 262 || 0x0106 || Terrain [T-HR-HB-L] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:263.gif|32x21px]] || 1263 || 263 || 0x0107 || Terrain [T-R-HB-HL] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:264.gif|32x29px]] || 1264 || 264 || 0x0108 || Terrain [HT-R-B-HL] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:265.gif|32x29px]] || 1265 || 265 || 0x0109 || Terrain Slope [HT-HR-B-L] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:266.gif|32x21px]] || 1266 || 266 || 0x010A || Terrain Slope [T-HR-HB-L] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:267.gif|32x17px]] || 1267 || 267 || 0x010B || Terrain Slope [T-R-HB-HL] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:268.gif|32x21px]] || 1268 || 268 || 0x010C || Terrain Slope [HT-R-B-HL] ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:269.gif|32x29px]] || 1269 || 269 || 0x010D || Bedrock ||  || terrain ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:270.gif|32x17px]] || 1270 || 270 || 0x010E || Water [T-R-B-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:271.gif|32x17px]] || 1271 || 271 || 0x010F || Water [R-B-L], Terrain [T] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:272.gif|32x17px]] || 1272 || 272 || 0x0110 || Water [T-B-L], Terrain [R] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:273.gif|32x17px]] || 1273 || 273 || 0x0111 || Water [T-R-L], Terrain [B] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:274.gif|32x17px]] || 1274 || 274 || 0x0112 || Water [T-R-B], Terrain [L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:275.gif|32x17px]] || 1275 || 275 || 0x0113 || Water [B-L], Terrain [T-R] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:276.gif|32x17px]] || 1276 || 276 || 0x0114 || Water [T-L], Terrain [R-B] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:277.gif|32x17px]] || 1277 || 277 || 0x0115 || Water [T-R], Terrain [B-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:278.gif|32x17px]] || 1278 || 278 || 0x0116 || Water [R-B], Terrain [T-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:279.gif|32x17px]] || 1279 || 279 || 0x0117 || Water [T-R-B] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:280.gif|32x17px]] || 1280 || 280 || 0x0118 || Water [R-B-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:281.gif|32x17px]] || 1281 || 281 || 0x0119 || Water [T-B-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:282.gif|32x17px]] || 1282 || 282 || 0x011A || Water [T-R-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:283.gif|32x17px]] || 1283 || 283 || 0x011B || Isolated Water, Terrain [T-R-B-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:284.gif|32x29px]] || 1284 || 284 || 0x011C || Waterfall ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:285.gif|32x17px]] || 1285 || 285 || 0x011D || Water [R-L], Terrain [T-B] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:286.gif|32x17px]] || 1286 || 286 || 0x011E || Water [T-B], Terrain [R-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:287.gif|32x17px]] || 1287 || 287 || 0x011F || Water [B], Terrain [T-R-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:288.gif|32x17px]] || 1288 || 288 || 0x0120 || Water [L], Terrain [T-R-B] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:289.gif|32x17px]] || 1289 || 289 || 0x0121 || Water [T], Terrain [R-B-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:290.gif|32x17px]] || 1290 || 290 || 0x0122 || Water [R], Terrain [T-B-L] ||  || water ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:291.gif|32x17px]] || 1291 || 291 || 0x0123 || Low Density Residential Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:292.gif|32x17px]] || 1292 || 292 || 0x0124 || High Density Residential Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:293.gif|32x17px]] || 1293 || 293 || 0x0125 || Low Density Commercial Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:294.gif|32x17px]] || 1294 || 294 || 0x0126 || High Density Commercial Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:295.gif|32x17px]] || 1295 || 295 || 0x0127 || Low Density Industrial Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:296.gif|32x17px]] || 1296 || 296 || 0x0128 || High Density Industrial Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:297.gif|32x17px]] || 1297 || 297 || 0x0129 || Military Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:298.gif|32x17px]] || 1298 || 298 || 0x012A || Airport Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:299.gif|32x17px]] || 1299 || 299 || 0x012B || Seaport Zone ||  || zone ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:300.gif|32x17px]] || 1300 || 300 || 0x012C || Green Tile ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:301.gif|32x17px]] || 1301 || 301 || 0x012D || Blue Tile ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:302.gif|32x17px]] || 1302 || 302 || 0x012E || Yellow Tile ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:303.gif|32x17px]] || 1303 || 303 || 0x012F || Red Tile ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:304.gif|32x18px]] || 1304 || 304 || 0x0130 || Grey Tile ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:305.gif|32x18px]] || 1305 || 305 || 0x0131 || Underground Terrain ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:306.gif|32x30px]] || 1306 || 306 || 0x0132 || Underground Terrain [HT-B] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:307.gif|32x30px]] || 1307 || 307 || 0x0133 || Underground Terrain [HR-L] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:308.gif|32x21px]] || 1308 || 308 || 0x0134 || Underground Terrain [T-HB] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:309.gif|32x21px]] || 1309 || 309 || 0x0135 || Underground Terrain [R-HL] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:310.gif|32x30px]] || 1310 || 310 || 0x0136 || Underground Terrain [HT-HR-B-L] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:311.gif|32x29px]] || 1311 || 311 || 0x0137 || Underground Terrain [T-HR-HB-L] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:312.gif|32x21px]] || 1312 || 312 || 0x0138 || Underground Terrain [T-R-HB-HL] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:313.gif|32x29px]] || 1313 || 313 || 0x0139 || Underground Terrain [HT-R-B-HL] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:314.gif|32x30px]] || 1314 || 314 || 0x013A || Underground Terrain Slope [HT-HR-B-L] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:315.gif|32x22px]] || 1315 || 315 || 0x013B || Underground Terrain Slope [T-HR-HB-L] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:316.gif|32x40px]] || 1316 || 316 || 0x013C || Underground Terrain Slope [T-R-HB-HL] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:317.gif|32x22px]] || 1317 || 317 || 0x013D || Underground Terrain Slope [HT-R-B-HL] ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:318.gif|32x29px]] || 1318 || 318 || 0x013E || Bedrock Outline ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:319.gif|32x34px]] || 1319 || 319 || 0x013F || Subway [R-L] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:320.gif|32x34px]] || 1320 || 320 || 0x0140 || Subway [T-B] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:321.gif|32x46px]] || 1321 || 321 || 0x0141 || Subway [HT-B] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:322.gif|32x46px]] || 1322 || 322 || 0x0142 || Subway [HR-L] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:323.gif|32x30px]] || 1323 || 323 || 0x0143 || Subway [T-HB] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:324.gif|32x30px]] || 1324 || 324 || 0x0144 || Subway [R-HL] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:325.gif|32x34px]] || 1325 || 325 || 0x0145 || Subway [R-B] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:326.gif|32x34px]] || 1326 || 326 || 0x0146 || Subway [B-L] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:327.gif|32x34px]] || 1327 || 327 || 0x0147 || Subway [T-L] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:328.gif|32x26px]] || 1328 || 328 || 0x0148 || Subway [T-R] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:329.gif|32x34px]] || 1329 || 329 || 0x0149 || Subway [T-R-B] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:330.gif|32x34px]] || 1330 || 330 || 0x014A || Subway [R-B-L] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:331.gif|32x34px]] || 1331 || 331 || 0x014B || Subway [T-B-L] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:332.gif|32x34px]] || 1332 || 332 || 0x014C || Subway [T-R-L] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:333.gif|32x34px]] || 1333 || 333 || 0x014D || Subway [T-R-B-L] ||  || subway ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:334.gif|32x18px]] || 1334 || 334 || 0x014E || Pipe [R-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:335.gif|32x18px]] || 1335 || 335 || 0x014F || Pipe [T-B] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:336.gif|32x30px]] || 1336 || 336 || 0x0150 || Pipe [HT-B] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:337.gif|32x30px]] || 1337 || 337 || 0x0151 || Pipe [HR-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:338.gif|32x21px]] || 1338 || 338 || 0x0152 || Pipe [T-HB] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:339.gif|32x21px]] || 1339 || 339 || 0x0153 || Pipe [R-HL] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:340.gif|32x18px]] || 1340 || 340 || 0x0154 || Pipe [R-B] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:341.gif|32x18px]] || 1341 || 341 || 0x0155 || Pipe [B-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:342.gif|32x18px]] || 1342 || 342 || 0x0156 || Pipe [T-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:343.gif|32x18px]] || 1343 || 343 || 0x0157 || Pipe [T-R] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:344.gif|32x18px]] || 1344 || 344 || 0x0158 || Pipe [T-R-B] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:345.gif|32x18px]] || 1345 || 345 || 0x0159 || Pipe [R-B-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:346.gif|32x18px]] || 1346 || 346 || 0x015A || Pipe [T-B-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:347.gif|32x18px]] || 1347 || 347 || 0x015B || Pipe [T-R-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:348.gif|32x18px]] || 1348 || 348 || 0x015C || Pipe [T-R-B-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:349.gif|32x34px]] || 1349 || 349 || 0x015D || Subway [R-L], Pipe [T-B] ||  || subway || pipe || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:350.gif|32x34px]] || 1350 || 350 || 0x015E || Subway [T-B], Pipe [R-L] ||  || subway || pipe || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:351.gif|32x19px]] || 1351 || 351 || 0x015F || Building Pipe [T-R-B-L] ||  || pipe ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:352.gif|32x28px]] || 1352 || 352 || 0x0160 || Underground Segment (single) ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:353.gif|32x39px]] || 1353 || 353 || 0x0161 || Underground Segment (double) ||  || underground ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:354.gif|32x17px]] || 1354 || 354 || 0x0162 || Green Outline ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:355.gif|32x17px]] || 1355 || 355 || 0x0163 || Blue Outline ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:356.gif|32x17px]] || 1356 || 356 || 0x0164 || Brown Outline ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:357.gif|32x17px]] || 1357 || 357 || 0x0165 || Red Outline ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:358.gif|32x17px]] || 1358 || 358 || 0x0166 || Grey Outline ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:359.gif|64x27px]] || 1359 || 359 || 0x0167 || Airplane [N] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:360.gif|64x19px]] || 1360 || 360 || 0x0168 || Airplane [NE] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:361.gif|64x19px]] || 1361 || 361 || 0x0169 || Airplane [E] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:362.gif|64x23px]] || 1362 || 362 || 0x016A || Airplane [SE] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:363.gif|64x31px]] || 1363 || 363 || 0x016B || Airplane [S] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:364.gif|32x20px]] || 1364 || 364 || 0x016C || Sim Copter [N] ||  || thing ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:365.gif|32x13px]] || 1365 || 365 || 0x016D || Sim Copter [NE] ||  || thing ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:366.gif|32x12px]] || 1366 || 366 || 0x016E || Sim Copter [E] ||  || thing ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:367.gif|32x17px]] || 1367 || 367 || 0x016F || Sim Copter [SE] ||  || thing ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:368.gif|32x21px]] || 1368 || 368 || 0x0170 || Sim Copter [S] ||  || thing ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:369.gif|64x49px]] || 1369 || 369 || 0x0171 || Cargo Ship [N] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:370.gif|64x41px]] || 1370 || 370 || 0x0172 || Cargo Ship [NE] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:371.gif|64x35px]] || 1371 || 371 || 0x0173 || Cargo Ship [E] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:372.gif|64x42px]] || 1372 || 372 || 0x0174 || Cargo Ship [SE] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:373.gif|64x54px]] || 1373 || 373 || 0x0175 || Cargo Ship [S] ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:374.gif|32x20px]] || 1374 || 374 || 0x0176 || Train [N] ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:375.gif|32x21px]] || 1375 || 375 || 0x0177 || Train [NE] ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:376.gif|32x19px]] || 1376 || 376 || 0x0178 || Train [E] ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:377.gif|32x33px]] || 1377 || 377 || 0x0179 || Train [SE] ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:378.gif|32x28px]] || 1378 || 378 || 0x017A || Train [S] ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:379.gif|32x16px]] || 1379 || 379 || 0x017B || Nessie ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:380.gif|32x22px]] || 1380 || 380 || 0x017C || Sail Boat [NE] ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:381.gif|32x22px]] || 1381 || 381 || 0x017D || Sail Boat [SE] ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:382.gif|32x70px]] || 1382 || 382 || 0x017E || Police Dispatch ||  || sign ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:383.gif|32x78px]] || 1383 || 383 || 0x017F || Fire Dept. Dispatch ||  || sign ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:384.gif|32x69px]] || 1384 || 384 || 0x0180 || Military Dispatch ||  || sign ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:385.gif|32x91px]] || 1385 || 385 || 0x0181 || Monster Space Ray ||  || thing || monster || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:386.gif|32x16px]] || 1386 || 386 || 0x0182 || Power Outage Indicator ||  || overlay ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:387.gif|64x35px]] || 1387 || 387 || 0x0183 || Explosion 1 ||  || explosion ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:388.gif|64x41px]] || 1388 || 388 || 0x0184 || Explosion 2 ||  || explosion ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:389.gif|64x40px]] || 1389 || 389 || 0x0185 || Explosion 3 ||  || explosion ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:390.gif|32x21px]] || 1390 || 390 || 0x0186 || Bulldozer [NE] ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:391.gif|32x21px]] || 1391 || 391 || 0x0187 || Bulldozer [SE] ||  || thing ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:392.gif|32x64px]] || 1392 || 392 || 0x0188 || Dust Cloud 1 ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:393.gif|32x49px]] || 1393 || 393 || 0x0189 || Dust Cloud 2 ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:394.gif|32x39px]] || 1394 || 394 || 0x018A || Dust Cloud 3 ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:395.gif|32x32px]] || 1395 || 395 || 0x018B || Dust Cloud 4 ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:396.gif|32x24px]] || 1396 || 396 || 0x018C || Fire 1 ||  || fire ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:397.gif|32x20px]] || 1397 || 397 || 0x018D || Fire 2 ||  || fire ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:398.gif|32x23px]] || 1398 || 398 || 0x018E || Fire 3 ||  || fire ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:399.gif|32x22px]] || 1399 || 399 || 0x018F || Fire 4 ||  || fire ||  || 1 || No || Yes || 4 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:400.gif|32x17px]] || 1400 || 400 || 0x0190 || Road Light Traffic [R-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:401.gif|32x17px]] || 1401 || 401 || 0x0191 || Road Light Traffic [T-B] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:402.gif|32x29px]] || 1402 || 402 || 0x0192 || Road Light Traffic [HT-B] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:403.gif|32x29px]] || 1403 || 403 || 0x0193 || Road Light Traffic [HR-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:404.gif|32x21px]] || 1404 || 404 || 0x0194 || Road Light Traffic [T-HB] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:405.gif|32x21px]] || 1405 || 405 || 0x0195 || Road Light Traffic [R-HL] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:406.gif|32x17px]] || 1406 || 406 || 0x0196 || Road Light Traffic [R-B] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:407.gif|32x17px]] || 1407 || 407 || 0x0197 || Road Light Traffic [B-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:408.gif|32x17px]] || 1408 || 408 || 0x0198 || Road Light Traffic [T-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:409.gif|32x17px]] || 1409 || 409 || 0x0199 || Road Light Traffic [T-R] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:410.gif|32x29px]] || 1410 || 410 || 0x019A || Highway Light Traffic [R-L] ||  || traffic ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:411.gif|32x29px]] || 1411 || 411 || 0x019B || Highway Light Traffic [T-B] ||  || traffic ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:412.gif|32x28px]] || 1412 || 412 || 0x019C || Causeway Light Traffic [R-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:413.gif|32x28px]] || 1413 || 413 || 0x019D || Causeway Light Traffic [T-B] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:414.gif|32x31px]] || 1414 || 414 || 0x019E || Highway On-Ramp Light Traffic [R-B] ||  || traffic ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:415.gif|32x29px]] || 1415 || 415 || 0x019F || Highway On-Ramp Light Traffic [T-R] ||  || traffic ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:416.gif|32x16px]] || 1416 || 416 || 0x01A0 || Highway On-Ramp Light Traffic [R-T] ||  || traffic ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:417.gif|32x13px]] || 1417 || 417 || 0x01A1 || Highway On-Ramp Light Traffic [B-L] ||  || traffic ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:418.gif|64x56px]] || 1418 || 418 || 0x01A2 || Highway Light Traffic [HT-B] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:419.gif|64x56px]] || 1419 || 419 || 0x01A3 || Highway Light Traffic [HR-L] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:420.gif|64x44px]] || 1420 || 420 || 0x01A4 || Highway Light Traffic [T-HB] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:421.gif|64x44px]] || 1421 || 421 || 0x01A5 || Highway Light Traffic [R-HL] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:422.gif|64x44px]] || 1422 || 422 || 0x01A6 || Highway Light Traffic [R-B] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:423.gif|64x29px]] || 1423 || 423 || 0x01A7 || Highway Light Traffic [B-L] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:424.gif|64x44px]] || 1424 || 424 || 0x01A8 || Highway Light Traffic [T-L] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:425.gif|64x45px]] || 1425 || 425 || 0x01A9 || Highway Light Traffic [T-R] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:426.gif|64x46px]] || 1426 || 426 || 0x01AA || Highway Interchange Light Traffic [T-R-B-L] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:427.gif|32x17px]] || 1427 || 427 || 0x01AB || Road Heavy Traffic [R-L] ||  || traffic ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:428.gif|32x17px]] || 1428 || 428 || 0x01AC || Road Heavy Traffic [T-B] ||  || traffic ||  || 1 || Yes || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:429.gif|32x29px]] || 1429 || 429 || 0x01AD || Road Heavy Traffic [HT-B] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:430.gif|32x29px]] || 1430 || 430 || 0x01AE || Road Heavy Traffic [HR-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:431.gif|32x21px]] || 1431 || 431 || 0x01AF || Road Heavy Traffic [T-HB] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:432.gif|32x21px]] || 1432 || 432 || 0x01B0 || Road Heavy Traffic [R-HL] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:433.gif|32x17px]] || 1433 || 433 || 0x01B1 || Road Heavy Traffic [R-B] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:434.gif|32x17px]] || 1434 || 434 || 0x01B2 || Road Heavy Traffic [B-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:435.gif|32x17px]] || 1435 || 435 || 0x01B3 || Road Heavy Traffic [T-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:436.gif|32x17px]] || 1436 || 436 || 0x01B4 || Road Heavy Traffic [T-R] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:437.gif|32x29px]] || 1437 || 437 || 0x01B5 || Highway Heavy Traffic [R-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:438.gif|32x29px]] || 1438 || 438 || 0x01B6 || Highway Heavy Traffic [T-B] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:439.gif|32x28px]] || 1439 || 439 || 0x01B7 || Causeway Heavy Traffic [R-L] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:440.gif|32x28px]] || 1440 || 440 || 0x01B8 || Causeway Heavy Traffic [T-B] ||  || traffic ||  || 1 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:441.gif|64x56px]] || 1441 || 441 || 0x01B9 || Highway Heavy Traffic [HT-B] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:442.gif|64x56px]] || 1442 || 442 || 0x01BA || Highway Heavy Traffic [HR-L] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:443.gif|64x44px]] || 1443 || 443 || 0x01BB || Highway Heavy Traffic [T-HB] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:444.gif|64x44px]] || 1444 || 444 || 0x01BC || Highway Heavy Traffic [R-HL] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:445.gif|64x44px]] || 1445 || 445 || 0x01BD || Highway Heavy Traffic [R-B] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:446.gif|64x29px]] || 1446 || 446 || 0x01BE || Highway Heavy Traffic [B-L] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:447.gif|64x44px]] || 1447 || 447 || 0x01BF || Highway Heavy Traffic [T-L] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:448.gif|64x45px]] || 1448 || 448 || 0x01C0 || Highway Heavy Traffic [T-R] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:449.gif|64x46px]] || 1449 || 449 || 0x01C1 || Highway Heavy Traffic [T-R-B-L] ||  || traffic ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:450.gif|32x18px]] || 1450 || 450 || 0x01C2 || Pipe Watered [R-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:451.gif|32x18px]] || 1451 || 451 || 0x01C3 || Pipe Watered [T-B] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:452.gif|32x30px]] || 1452 || 452 || 0x01C4 || Pipe Watered [HT-B] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:453.gif|32x30px]] || 1453 || 453 || 0x01C5 || Pipe Watered [HR-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:454.gif|32x21px]] || 1454 || 454 || 0x01C6 || Pipe Watered [T-HB] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:455.gif|32x21px]] || 1455 || 455 || 0x01C7 || Pipe Watered [R-HL] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:456.gif|32x18px]] || 1456 || 456 || 0x01C8 || Pipe Watered [R-B] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:457.gif|32x18px]] || 1457 || 457 || 0x01C9 || Pipe Watered [B-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:458.gif|32x18px]] || 1458 || 458 || 0x01CA || Pipe Watered [T-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:459.gif|32x18px]] || 1459 || 459 || 0x01CB || Pipe Watered [T-R] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:460.gif|32x18px]] || 1460 || 460 || 0x01CC || Pipe Watered [T-R-B] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:461.gif|32x18px]] || 1461 || 461 || 0x01CD || Pipe Watered [R-B-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:462.gif|32x18px]] || 1462 || 462 || 0x01CE || Pipe Watered [T-B-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:463.gif|32x18px]] || 1463 || 463 || 0x01CF || Pipe Watered [T-R-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:464.gif|32x18px]] || 1464 || 464 || 0x01D0 || Pipe Watered [T-R-B-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:465.gif|32x34px]] || 1465 || 465 || 0x01D1 || Subway [R-L], Pipe Watered [T-B] ||  || subway || pipe || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:466.gif|32x34px]] || 1466 || 466 || 0x01D2 || Subway [T-B], Pipe Watered [R-L] ||  || subway || pipe || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:467.gif|32x19px]] || 1467 || 467 || 0x01D3 || Building Pipe Watered [T-R-B-L] ||  || pipe ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:468.gif|32x17px]] || 1468 || 468 || 0x01D4 || Density Overlay 1 ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:469.gif|32x17px]] || 1469 || 469 || 0x01D5 || Density Overlay 2 ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:470.gif|32x17px]] || 1470 || 470 || 0x01D6 || Density Overlay 3 ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:471.gif|32x17px]] || 1471 || 471 || 0x01D7 || Density Overlay 4 ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:472.gif|32x17px]] || 1472 || 472 || 0x01D8 || Density Overlay 5 ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:473.gif|32x17px]] || 1473 || 473 || 0x01D9 || Density Overlay 6 ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:474.gif|32x17px]] || 1474 || 474 || 0x01DA || Density Overlay 7 ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:475.gif|32x17px]] || 1475 || 475 || 0x01DB || Density Overlay 8 ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:476.gif|32x17px]] || 1476 || 476 || 0x01DC || Green Plus ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:477.gif|32x17px]] || 1477 || 477 || 0x01DD || Red Negative ||  || overlay ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:478.gif|64x39px]] || 1478 || 478 || 0x01DE || Monster Parts 1 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:479.gif|64x86px]] || 1479 || 479 || 0x01DF || Monster Parts 2 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:480.gif|64x67px]] || 1480 || 480 || 0x01E0 || Monster Parts 3 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:481.gif|64x58px]] || 1481 || 481 || 0x01E1 || Monster Parts 4 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:482.gif|64x25px]] || 1482 || 482 || 0x01E2 || Monster Parts 5 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:483.gif|64x50px]] || 1483 || 483 || 0x01E3 || Monster Parts 6 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:484.gif|64x39px]] || 1484 || 484 || 0x01E4 || Monster Parts 7 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:485.gif|64x65px]] || 1485 || 485 || 0x01E5 || Monster Parts 8 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:486.gif|64x75px]] || 1486 || 486 || 0x01E6 || Monster Parts 9 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:487.gif|64x70px]] || 1487 || 487 || 0x01E7 || Monster Parts 10 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:488.gif|64x44px]] || 1488 || 488 || 0x01E8 || Monster Parts 11 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:489.gif|64x48px]] || 1489 || 489 || 0x01E9 || Monster Parts 12 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:490.gif|64x90px]] || 1490 || 490 || 0x01EA || Monster Parts 13 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:491.gif|64x90px]] || 1491 || 491 || 0x01EB || Monster Parts 14 ||  || thing || monster || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:492.gif|32x19px]] || 1492 || 492 || 0x01EC || Flood Water ||  || thing ||  || 1 || No || Yes || 12 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:493.gif|32x24px]] || 1493 || 493 || 0x01ED || Rioters 1 ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:494.gif|32x25px]] || 1494 || 494 || 0x01EE || Rioters 2 ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:495.gif|32x15px]] || 1495 || 495 || 0x01EF || Maxis Man ||  || thing ||  || 1 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:496.gif|64x51px]] || 1496 || 496 || 0x01F0 || Dust Cloud ||  || thing ||  || 2 || No || No || 1 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:497.gif|64x125px]] || 1497 || 497 || 0x01F1 || Tornado 1 ||  || thing ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:498.gif|64x125px]] || 1498 || 498 || 0x01F2 || Tornado 2 ||  || thing ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[File:499.gif|64x126px]] || 1499 || 499 || 0x01F3 || Tornado 3 ||  || thing ||  || 2 || No || Yes || 8 || None ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=SimCity_2000_Bugs&amp;diff=899</id>
		<title>SimCity 2000 Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=SimCity_2000_Bugs&amp;diff=899"/>
		<updated>2025-12-22T19:43:29Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Windows 95 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Different versions of Simcity 2000 have different bugs.&lt;br /&gt;
&lt;br /&gt;
==Mac OS==&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
==DOS==&lt;br /&gt;
===Industrial Connex Bug===&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
==Windows 3.11==&lt;br /&gt;
===Military Zone development===&lt;br /&gt;
===Military Base - Army===&lt;br /&gt;
===Military Base - No Naval Base possibility===&lt;br /&gt;
===Industrial Connex Bug===&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
===Simulation remains suspended after cancelling program exit===&lt;br /&gt;
&lt;br /&gt;
==Windows 95==&lt;br /&gt;
===Military Zone development [Fixed]===&lt;br /&gt;
Due to an oversight with how the RCI Developer (SimulationPlaceBuilding?) operates the Simulator is unable to build or develop any structures inside a Military zoned tile since the game checks whether the player is able to develop there, which it cannot so it always fails. Except for a single runway for Airbases.&lt;br /&gt;
===Military Base - Army [Fixed]===&lt;br /&gt;
Although the Army Base is a possibility for the &#039;&#039;&#039;SimulationProposeMilitaryBase&#039;&#039;&#039; function, it does not handle the setup and preparation of the selected area correctly. The function is entirely missing the placement of roads and any runway cross-tiles as correctly seen in the DOS port and Apple version. Instead a 8x8 zoned area is placed down like the air force base and the function is done.&lt;br /&gt;
===Military Base - No Naval Base possibility [Fixed]===&lt;br /&gt;
Naval Bases as a possible outcome for the &#039;&#039;&#039;SimulationProposeMilitaryBase&#039;&#039;&#039; function simply doesn&#039;t exist and there&#039;s no possibility for the city for be selected as a site for a Naval Base.&lt;br /&gt;
===Industrial Connex Bug [Fixed]===&lt;br /&gt;
Existing land based Industrial Connections such as Railroads and Highways are not properly reloaded by the Simulator when loading a saved game. This causes all industrial zones in the city to immediately hit their industrial caps upon load for sufficiently large cities and crash the economy.&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
In cities with no Schools or Colleges and no Pro-Reading Ordinance, over time and with extreme population stability the decay in EQ will become so severe that it causes a negative overflow resulting in the EQ subsystem having unintended outcomes such as an average EQ of 12948.&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Explain this, need more reverse-devs to look at &#039;&#039;&#039;0x4CC6F8&#039;&#039;&#039; in [[SimulationPollutionTerrainLandValueScan]](&#039;&#039;&#039;0x46A840&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
The Simcity 2000 Simulator for Pollution, Land Value, Crime, and etc uses many internal hidden &amp;quot;maps&amp;quot; in order to compute and track the last value for pollution on the map. One of these map arrays can get &amp;quot;confused&amp;quot; due to the different scale these internal hidden maps work since they&#039;re re-used for multiple purposes. This can result in instances of very high or low land value carrying over from previously calculated areas of high pollution resulting in erroneously high land value at 2x the X coordinate and 2x the Y coordinate.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
LandVal Bug.png|MacOS: Map view with minimap display, showing the Coal Power plant.&lt;br /&gt;
LandVal Bug2.png|MacOS: On map display of data minimap, showing exact location the bug effects.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
===Simulation remains suspended after cancelling program exit [FIXED]===&lt;br /&gt;
If you attempted to exit the game but pressed cancel, the simulation would remain suspended; there was no way of originally getting out of this state except for restarting the program.&lt;br /&gt;
===General Query would fail on objects placed at X coordinate 127 [FIXED]===&lt;br /&gt;
If for instance you attempted to query a road tile (as an example) that was present at X coordinate 127, it would only get so far as to display the Traffic label and then halt.&lt;br /&gt;
&lt;br /&gt;
The rest of the painting operation would fail due to it hitting an out-of-bounds case within the XTRF array as it tried to check the X + 1 case (128).&lt;br /&gt;
&lt;br /&gt;
The root cause was down to a bad check whereas it was checking against the maximum extent of 128 rather than 127.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=SimCity_2000_Bugs&amp;diff=898</id>
		<title>SimCity 2000 Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=SimCity_2000_Bugs&amp;diff=898"/>
		<updated>2025-12-21T15:13:30Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Windows 95 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Different versions of Simcity 2000 have different bugs.&lt;br /&gt;
&lt;br /&gt;
==Mac OS==&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
==DOS==&lt;br /&gt;
===Industrial Connex Bug===&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
==Windows 3.11==&lt;br /&gt;
===Military Zone development===&lt;br /&gt;
===Military Base - Army===&lt;br /&gt;
===Military Base - No Naval Base possibility===&lt;br /&gt;
===Industrial Connex Bug===&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
===Simulation remains suspended after cancelling program exit===&lt;br /&gt;
&lt;br /&gt;
==Windows 95==&lt;br /&gt;
===Military Zone development [Fixed]===&lt;br /&gt;
Due to an oversight with how the RCI Developer (SimulationPlaceBuilding?) operates the Simulator is unable to build or develop any structures inside a Military zoned tile since the game checks whether the player is able to develop there, which it cannot so it always fails. Except for a single runway for Airbases.&lt;br /&gt;
===Military Base - Army [Fixed]===&lt;br /&gt;
Although the Army Base is a possibility for the &#039;&#039;&#039;SimulationProposeMilitaryBase&#039;&#039;&#039; function, it does not handle the setup and preparation of the selected area correctly. The function is entirely missing the placement of roads and any runway cross-tiles as correctly seen in the DOS port and Apple version. Instead a 8x8 zoned area is placed down like the air force base and the function is done.&lt;br /&gt;
===Military Base - No Naval Base possibility [Fixed]===&lt;br /&gt;
Naval Bases as a possible outcome for the &#039;&#039;&#039;SimulationProposeMilitaryBase&#039;&#039;&#039; function simply doesn&#039;t exist and there&#039;s no possibility for the city for be selected as a site for a Naval Base.&lt;br /&gt;
===Industrial Connex Bug [Fixed]===&lt;br /&gt;
Existing land based Industrial Connections such as Railroads and Highways are not properly reloaded by the Simulator when loading a saved game. This causes all industrial zones in the city to immediately hit their industrial caps upon load for sufficiently large cities and crash the economy.&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
In cities with no Schools or Colleges and no Pro-Reading Ordinance, over time and with extreme population stability the decay in EQ will become so severe that it causes a negative overflow resulting in the EQ subsystem having unintended outcomes such as an average EQ of 12948.&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Explain this, need more reverse-devs to look at &#039;&#039;&#039;0x4CC6F8&#039;&#039;&#039; in [[SimulationPollutionTerrainLandValueScan]](&#039;&#039;&#039;0x46A840&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
The Simcity 2000 Simulator for Pollution, Land Value, Crime, and etc uses many internal hidden &amp;quot;maps&amp;quot; in order to compute and track the last value for pollution on the map. One of these map arrays can get &amp;quot;confused&amp;quot; due to the different scale these internal hidden maps work since they&#039;re re-used for multiple purposes. This can result in instances of very high or low land value carrying over from previously calculated areas of high pollution resulting in erroneously high land value at 2x the X coordinate and 2x the Y coordinate.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
LandVal Bug.png|MacOS: Map view with minimap display, showing the Coal Power plant.&lt;br /&gt;
LandVal Bug2.png|MacOS: On map display of data minimap, showing exact location the bug effects.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
===Simulation remains suspended after cancelling program exit [FIXED]===&lt;br /&gt;
If you attempted to exit the game but pressed cancel, the simulation would remain suspended; there was no way of originally getting out of this state except for restarting the program.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=SimCity_2000_Bugs&amp;diff=897</id>
		<title>SimCity 2000 Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=SimCity_2000_Bugs&amp;diff=897"/>
		<updated>2025-12-21T15:12:13Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Windows 3.11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Different versions of Simcity 2000 have different bugs.&lt;br /&gt;
&lt;br /&gt;
==Mac OS==&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
==DOS==&lt;br /&gt;
===Industrial Connex Bug===&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
==Windows 3.11==&lt;br /&gt;
===Military Zone development===&lt;br /&gt;
===Military Base - Army===&lt;br /&gt;
===Military Base - No Naval Base possibility===&lt;br /&gt;
===Industrial Connex Bug===&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
===Simulation remains suspended after cancelling program exit===&lt;br /&gt;
&lt;br /&gt;
==Windows 95==&lt;br /&gt;
===Military Zone development [Fixed]===&lt;br /&gt;
Due to an oversight with how the RCI Developer (SimulationPlaceBuilding?) operates the Simulator is unable to build or develop any structures inside a Military zoned tile since the game checks whether the player is able to develop there, which it cannot so it always fails. Except for a single runway for Airbases.&lt;br /&gt;
===Military Base - Army [Fixed]===&lt;br /&gt;
Although the Army Base is a possibility for the &#039;&#039;&#039;SimulationProposeMilitaryBase&#039;&#039;&#039; function, it does not handle the setup and preparation of the selected area correctly. The function is entirely missing the placement of roads and any runway cross-tiles as correctly seen in the DOS port and Apple version. Instead a 8x8 zoned area is placed down like the air force base and the function is done.&lt;br /&gt;
===Military Base - No Naval Base possibility [Fixed]===&lt;br /&gt;
Naval Bases as a possible outcome for the &#039;&#039;&#039;SimulationProposeMilitaryBase&#039;&#039;&#039; function simply doesn&#039;t exist and there&#039;s no possibility for the city for be selected as a site for a Naval Base.&lt;br /&gt;
===Industrial Connex Bug [Fixed]===&lt;br /&gt;
Existing land based Industrial Connections such as Railroads and Highways are not properly reloaded by the Simulator when loading a saved game. This causes all industrial zones in the city to immediately hit their industrial caps upon load for sufficiently large cities and crash the economy.&lt;br /&gt;
===EQ decay causing negative overflow===&lt;br /&gt;
In cities with no Schools or Colleges and no Pro-Reading Ordinance, over time and with extreme population stability the decay in EQ will become so severe that it causes a negative overflow resulting in the EQ subsystem having unintended outcomes such as an average EQ of 12948.&lt;br /&gt;
===LandValuePollutionMapScan Bug===&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Explain this, need more reverse-devs to look at &#039;&#039;&#039;0x4CC6F8&#039;&#039;&#039; in [[SimulationPollutionTerrainLandValueScan]](&#039;&#039;&#039;0x46A840&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
The Simcity 2000 Simulator for Pollution, Land Value, Crime, and etc uses many internal hidden &amp;quot;maps&amp;quot; in order to compute and track the last value for pollution on the map. One of these map arrays can get &amp;quot;confused&amp;quot; due to the different scale these internal hidden maps work since they&#039;re re-used for multiple purposes. This can result in instances of very high or low land value carrying over from previously calculated areas of high pollution resulting in erroneously high land value at 2x the X coordinate and 2x the Y coordinate.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
LandVal Bug.png|MacOS: Map view with minimap display, showing the Coal Power plant.&lt;br /&gt;
LandVal Bug2.png|MacOS: On map display of data minimap, showing exact location the bug effects.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=SCURK_Bugs&amp;diff=896</id>
		<title>SCURK Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=SCURK_Bugs&amp;diff=896"/>
		<updated>2025-12-21T15:10:13Z</updated>

		<summary type="html">&lt;p&gt;AF: /* * Pick &amp;amp; Copy instability [WORKED AROUND] = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Mac OS ==&lt;br /&gt;
== DOS ==&lt;br /&gt;
== Windows 3.11 ==&lt;br /&gt;
== Windows 95 ==&lt;br /&gt;
&lt;br /&gt;
=== Place &amp;amp; Pick Object Selection could be closed [FIXED] ===&lt;br /&gt;
&lt;br /&gt;
If you inadvertently happened to press escape while the dialogue was highlighted it would close (hit the &amp;quot;cancel&amp;quot; event); it then couldn&#039;t be re-opened.&lt;br /&gt;
&lt;br /&gt;
=== * Pick &amp;amp; Place Object Selection items not displayed [FIXED] ===&lt;br /&gt;
&lt;br /&gt;
Note: This bug first appeared in Windows 11 24H2.&lt;br /&gt;
&lt;br /&gt;
The main listbox control was no longer displayed and objects couldn&#039;t be selected.&lt;br /&gt;
&lt;br /&gt;
=== * Pick &amp;amp; Place Object Selection would not change [FIXED] ===&lt;br /&gt;
&lt;br /&gt;
Note: This bug first appeared in Windows 11 24H2.&lt;br /&gt;
&lt;br /&gt;
The cursor point within the listbox area wasn&#039;t being set, as a result object selection beyond the left-most item would fail.&lt;br /&gt;
&lt;br /&gt;
=== * Pick &amp;amp; Copy instability [WORKED AROUND] ===&lt;br /&gt;
&lt;br /&gt;
Note: It seems this bug first appeared from 7 onwards.&lt;br /&gt;
&lt;br /&gt;
From 7-onwards if you happened to unintentionally resize the Pick &amp;amp; Copy child window, all displayed tiles would be replaced with empty placeholders; it would also appear to silently select all items.&lt;br /&gt;
&lt;br /&gt;
From 11 24H2-onwards there was a high probability that a resize operation would cause the program to crash during the paint operation.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=SCURK_Bugs&amp;diff=895</id>
		<title>SCURK Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=SCURK_Bugs&amp;diff=895"/>
		<updated>2025-12-21T15:09:52Z</updated>

		<summary type="html">&lt;p&gt;AF: Created page with &amp;quot;== Mac OS == == DOS == == Windows 3.11 == == Windows 95 ==  === Place &amp;amp; Pick Object Selection could be closed [FIXED] ===  If you inadvertently happened to press escape while the dialogue was highlighted it would close (hit the &amp;quot;cancel&amp;quot; event); it then couldn&amp;#039;t be re-opened.  === * Pick &amp;amp; Place Object Selection items not displayed [FIXED] ===  Note: This bug first appeared in Windows 11 24H2.  The main listbox control was no longer displayed and objects couldn&amp;#039;t be selec...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Mac OS ==&lt;br /&gt;
== DOS ==&lt;br /&gt;
== Windows 3.11 ==&lt;br /&gt;
== Windows 95 ==&lt;br /&gt;
&lt;br /&gt;
=== Place &amp;amp; Pick Object Selection could be closed [FIXED] ===&lt;br /&gt;
&lt;br /&gt;
If you inadvertently happened to press escape while the dialogue was highlighted it would close (hit the &amp;quot;cancel&amp;quot; event); it then couldn&#039;t be re-opened.&lt;br /&gt;
&lt;br /&gt;
=== * Pick &amp;amp; Place Object Selection items not displayed [FIXED] ===&lt;br /&gt;
&lt;br /&gt;
Note: This bug first appeared in Windows 11 24H2.&lt;br /&gt;
&lt;br /&gt;
The main listbox control was no longer displayed and objects couldn&#039;t be selected.&lt;br /&gt;
&lt;br /&gt;
=== * Pick &amp;amp; Place Object Selection would not change [FIXED] ===&lt;br /&gt;
&lt;br /&gt;
Note: This bug first appeared in Windows 11 24H2.&lt;br /&gt;
&lt;br /&gt;
The cursor point within the listbox area wasn&#039;t being set, as a result object selection beyond the left-most item would fail.&lt;br /&gt;
&lt;br /&gt;
== * Pick &amp;amp; Copy instability [WORKED AROUND] ===&lt;br /&gt;
&lt;br /&gt;
Note: It seems this bug first appeared from 7 onwards.&lt;br /&gt;
&lt;br /&gt;
From 7-onwards if you happened to unintentionally resize the Pick &amp;amp; Copy child window, all displayed tiles would be replaced with empty placeholders; it would also appear to silently select all items.&lt;br /&gt;
&lt;br /&gt;
From 11 24H2-onwards there was a high probability that a resize operation would cause the program to crash during the paint operation.&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Main_Page&amp;diff=894</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Main_Page&amp;diff=894"/>
		<updated>2025-12-21T14:59:57Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ __NOEDITSECTION__ {{#description2:Welcome to sc2k-reverse, the sc2kfix Project wiki!}}&lt;br /&gt;
[[File:{{#setmainimage:SC2K-reverse Header.png}}|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to sc2k-reverse, the sc2kfix Project wiki!&#039;&#039;&#039; Pardon our dust, as this wiki is brand new and we haven&#039;t had a chance to do much of anything around here yet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;u&amp;gt;Need an account?&amp;lt;/u&amp;gt;&#039;&#039;&#039; PM araxestroy on the Simtropolis forums or on the libera.chat IRC network, or ask in the sc2kfix Discord.&lt;br /&gt;
&lt;br /&gt;
== Wiki to-do list ==&lt;br /&gt;
&lt;br /&gt;
* More page component templates (see [[:Category:Templates]])&lt;br /&gt;
** Game infoboxes&lt;br /&gt;
** RE related stuff? Not sure what we&#039;ll need&lt;br /&gt;
** Category navboxes&lt;br /&gt;
* Wiki meta pages (categories, help, copyright page, etc)&lt;br /&gt;
* Nicer main page (maybe split it into flex columns?)&lt;br /&gt;
* Get some stub articles written up as a &amp;quot;schema&amp;quot;&lt;br /&gt;
* &amp;lt;s&amp;gt;Make sure the email system actually works&amp;lt;/s&amp;gt; it absolutely does not, I may need to move this thing to a Linode VPS sooner rather than later&lt;br /&gt;
&lt;br /&gt;
== sc2kfix Plugin Information ==&lt;br /&gt;
&lt;br /&gt;
* [https://sc2kfix.net/plugin.html Plugin user guide]&lt;br /&gt;
* [[SC2X|SC2X save file format]]&lt;br /&gt;
* &#039;&#039;&#039;Modding with C/C++&#039;&#039;&#039;&lt;br /&gt;
** [[Modding|C/C++ Modding Basics]] &#039;&#039;(draft)&#039;&#039;&lt;br /&gt;
** [[Modding/Hooks|Hook List]]&lt;br /&gt;
* &#039;&#039;&#039;Modding with Kuroko&#039;&#039;&#039;&lt;br /&gt;
** [[Kuroko|Kuroko Basics]]&lt;br /&gt;
** [[Kuroko/Module_sc2kfix|sc2kfix module]]&lt;br /&gt;
** [[Kuroko/Module_sc2k|sc2k module]]&lt;br /&gt;
&lt;br /&gt;
== SimCity 2000 Reverse Engineering ==&lt;br /&gt;
&lt;br /&gt;
* [[Function list]]&lt;br /&gt;
* [[Known global variables]]&lt;br /&gt;
* [[Program Enums]]&lt;br /&gt;
* [[Classes]]&lt;br /&gt;
* [[Map data]]&lt;br /&gt;
* [[Data formats]]&lt;br /&gt;
* [[Tiles]]&lt;br /&gt;
* [[SimCity 2000 Bugs]]&lt;br /&gt;
&lt;br /&gt;
== SCURK Reverse Engineering ==&lt;br /&gt;
&lt;br /&gt;
* [[SCURK Bugs]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Program_Enums&amp;diff=893</id>
		<title>Program Enums</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Program_Enums&amp;diff=893"/>
		<updated>2025-11-19T02:16:05Z</updated>

		<summary type="html">&lt;p&gt;AF: /* OnIdle / GameDoIdleUpkeep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will list various enums that are either contained within the current fix library or will assist during the RE process (upon the sections in question being encountered).&lt;br /&gt;
&lt;br /&gt;
== OnIdle / GameDoIdleUpkeep / BuildSubFrames ==&lt;br /&gt;
&lt;br /&gt;
Main:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enum {&lt;br /&gt;
	ONIDLE_STATE_INGAME = -1,&lt;br /&gt;
	ONIDLE_STATE_MAPMODE,&lt;br /&gt;
	ONIDLE_STATE_DISPLAYLOGO,&lt;br /&gt;
	ONIDLE_STATE_WAITLOGO,&lt;br /&gt;
	ONIDLE_STATE_DISPLAYTITLE,&lt;br /&gt;
	ONIDLE_STATE_DIALOGFINISH,&lt;br /&gt;
	ONIDLE_STATE_DISPLAYREGISTRATION,&lt;br /&gt;
	ONIDLE_STATE_CLOSEREGISTRATION,&lt;br /&gt;
	ONIDLE_STATE_PENDINGACTION,       // if dwSCACMDLineLoadMode is &#039;City&#039; or &#039;Scenario&#039; then this directs towards FROMCMDLINE, otherwise it is MENUDIALOG&lt;br /&gt;
	ONIDLE_STATE_NONE_8,              // Appears unused&lt;br /&gt;
	ONIDLE_STATE_NONE_9,              // Appears unused&lt;br /&gt;
	ONIDLE_STATE_LOADCITY_RETURN,&lt;br /&gt;
	ONIDLE_STATE_NEWCITY_RETURN,&lt;br /&gt;
	ONIDLE_STATE_EDITNEWMAP_RETURN,&lt;br /&gt;
	ONIDLE_STATE_LOADSCENARIO_RETURN,&lt;br /&gt;
	ONIDLE_STATE_MENUDIALOG,&lt;br /&gt;
	ONIDLE_STATE_FROMCMDLINE,&lt;br /&gt;
	ONIDLE_STATE_INTROVIDEO,&lt;br /&gt;
	ONIDLE_STATE_DISPLAYINFLIGHT,&lt;br /&gt;
	ONIDLE_STATE_CLOSEINFLIGHT&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InitialDialog:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enum {&lt;br /&gt;
	ONIDLE_INITIALDIALOG_NONE = -1,&lt;br /&gt;
	ONIDLE_INITIALDIALOG_FINISH,&lt;br /&gt;
	ONIDLE_INITIALDIALOG_LOADCITY,&lt;br /&gt;
	ONIDLE_INITIALDIALOG_NEWCITY,&lt;br /&gt;
	ONIDLE_INITIALDIALOG_EDITNEWMAP,&lt;br /&gt;
	ONIDLE_INITIALDIALOG_LOADSCENARIO,&lt;br /&gt;
	ONIDLE_INITIALDIALOG_ONQUIT,&lt;br /&gt;
	ONIDLE_INITIALDIALOG_LOADTILESET,&lt;br /&gt;
	ONIDLE_INITIALDIALOG_MOVIES&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=892</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=892"/>
		<updated>2025-10-17T05:40:01Z</updated>

		<summary type="html">&lt;p&gt;AF: /* SIMC_TBBUTTON */ - Clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
	int iMyTBMenuButtonPos;&lt;br /&gt;
	int iMyTBLastButtonPos;&lt;br /&gt;
	CPoint MyTBMaxButtonHitPoint;&lt;br /&gt;
	DWORD dwMyTBButtonMenu;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
	DWORD dwMyTBButtonPressed;&lt;br /&gt;
	DWORD dwMyTBten;&lt;br /&gt;
	DWORD dwMyTBeleven;&lt;br /&gt;
	DWORD dwMyTBButtonFace;&lt;br /&gt;
	DWORD dwMyTBButtonShadow;&lt;br /&gt;
	DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
	DWORD dwMyTBButtonText;&lt;br /&gt;
	DWORD dwMyTBWindowFrame;&lt;br /&gt;
	DWORD dwMyTBseventeen;&lt;br /&gt;
	DWORD dwMyTBeighteen;&lt;br /&gt;
	CPoint MyTBToolBarShapePt;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button.&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pBtnShapePoint;&lt;br /&gt;
  CPoint *pBtnImageShapePoint;&lt;br /&gt;
  CPoint *pBtnPositionPoint;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwCTBControlsDisabled;&lt;br /&gt;
	DWORD dwCTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwCTBOne;&lt;br /&gt;
	CPoint CTBGrabPoint;&lt;br /&gt;
	CPoint CTBBorderPoint;&lt;br /&gt;
	DWORD dwCTBTwo;&lt;br /&gt;
	CMainFrame *pCTBMainFrame;&lt;br /&gt;
	DWORD dwCTBcxRightBorder;&lt;br /&gt;
	DWORD dwCTBthirtyone;&lt;br /&gt;
	CMenu dwCTBMenuOne;&lt;br /&gt;
	CString dwCTBString[15];&lt;br /&gt;
	DWORD dwCTBseventysix;&lt;br /&gt;
	DWORD dwCTBseventyseven;&lt;br /&gt;
	DWORD dwCTBseventyeight;&lt;br /&gt;
	DWORD dwCTBseventynine;&lt;br /&gt;
	DWORD dwCTBeighty;&lt;br /&gt;
	DWORD dwCTBeightyone;&lt;br /&gt;
	DWORD dwCTBeightytwo;&lt;br /&gt;
	DWORD dwCTBeightythree;&lt;br /&gt;
	DWORD dwCTBeightyfour;&lt;br /&gt;
	DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwMTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwMTBControlsDisabled;&lt;br /&gt;
	CPoint MTBGrabPoint;&lt;br /&gt;
	CPoint MTBBorderPoint;&lt;br /&gt;
	DWORD dwMTBTwentyNine;&lt;br /&gt;
	CMainFrame *pMTBMainFrame;&lt;br /&gt;
	DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *SCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	void *dwSCVThree;&lt;br /&gt;
	void *pSCVGraphicLockDIBRes;&lt;br /&gt;
	LONG dwSCVGraphicWidth;&lt;br /&gt;
	LONG dwSCVGraphicHeight;&lt;br /&gt;
	CScrollBar *SCVScrollBarVert;&lt;br /&gt;
	CScrollBar *SCVScrollBarHorz;&lt;br /&gt;
	CStatic *SCVStaticOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect SCVScrollBarVertRectThree;&lt;br /&gt;
	CRect SCVScrollPosVertRect;&lt;br /&gt;
	CRect SCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect SCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect SCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect SCVScrollPosHorzRect;&lt;br /&gt;
	CRect SCVScrollPosRect;&lt;br /&gt;
	CRect SCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint SCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint SCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	CRect SCVAreaView;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=891</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=891"/>
		<updated>2025-10-17T05:38:41Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CMapToolBar */ - Alignment fix and clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
	int iMyTBMenuButtonPos;&lt;br /&gt;
	int iMyTBLastButtonPos;&lt;br /&gt;
	CPoint MyTBMaxButtonHitPoint;&lt;br /&gt;
	DWORD dwMyTBButtonMenu;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
	DWORD dwMyTBButtonPressed;&lt;br /&gt;
	DWORD dwMyTBten;&lt;br /&gt;
	DWORD dwMyTBeleven;&lt;br /&gt;
	DWORD dwMyTBButtonFace;&lt;br /&gt;
	DWORD dwMyTBButtonShadow;&lt;br /&gt;
	DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
	DWORD dwMyTBButtonText;&lt;br /&gt;
	DWORD dwMyTBWindowFrame;&lt;br /&gt;
	DWORD dwMyTBseventeen;&lt;br /&gt;
	DWORD dwMyTBeighteen;&lt;br /&gt;
	CPoint MyTBToolBarShapePt;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwCTBControlsDisabled;&lt;br /&gt;
	DWORD dwCTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwCTBOne;&lt;br /&gt;
	CPoint CTBGrabPoint;&lt;br /&gt;
	CPoint CTBBorderPoint;&lt;br /&gt;
	DWORD dwCTBTwo;&lt;br /&gt;
	CMainFrame *pCTBMainFrame;&lt;br /&gt;
	DWORD dwCTBcxRightBorder;&lt;br /&gt;
	DWORD dwCTBthirtyone;&lt;br /&gt;
	CMenu dwCTBMenuOne;&lt;br /&gt;
	CString dwCTBString[15];&lt;br /&gt;
	DWORD dwCTBseventysix;&lt;br /&gt;
	DWORD dwCTBseventyseven;&lt;br /&gt;
	DWORD dwCTBseventyeight;&lt;br /&gt;
	DWORD dwCTBseventynine;&lt;br /&gt;
	DWORD dwCTBeighty;&lt;br /&gt;
	DWORD dwCTBeightyone;&lt;br /&gt;
	DWORD dwCTBeightytwo;&lt;br /&gt;
	DWORD dwCTBeightythree;&lt;br /&gt;
	DWORD dwCTBeightyfour;&lt;br /&gt;
	DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwMTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwMTBControlsDisabled;&lt;br /&gt;
	CPoint MTBGrabPoint;&lt;br /&gt;
	CPoint MTBBorderPoint;&lt;br /&gt;
	DWORD dwMTBTwentyNine;&lt;br /&gt;
	CMainFrame *pMTBMainFrame;&lt;br /&gt;
	DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *SCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	void *dwSCVThree;&lt;br /&gt;
	void *pSCVGraphicLockDIBRes;&lt;br /&gt;
	LONG dwSCVGraphicWidth;&lt;br /&gt;
	LONG dwSCVGraphicHeight;&lt;br /&gt;
	CScrollBar *SCVScrollBarVert;&lt;br /&gt;
	CScrollBar *SCVScrollBarHorz;&lt;br /&gt;
	CStatic *SCVStaticOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect SCVScrollBarVertRectThree;&lt;br /&gt;
	CRect SCVScrollPosVertRect;&lt;br /&gt;
	CRect SCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect SCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect SCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect SCVScrollPosHorzRect;&lt;br /&gt;
	CRect SCVScrollPosRect;&lt;br /&gt;
	CRect SCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint SCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint SCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	CRect SCVAreaView;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=890</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=890"/>
		<updated>2025-10-17T05:38:16Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CCityToolBar */ - Alignment fix and clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
	int iMyTBMenuButtonPos;&lt;br /&gt;
	int iMyTBLastButtonPos;&lt;br /&gt;
	CPoint MyTBMaxButtonHitPoint;&lt;br /&gt;
	DWORD dwMyTBButtonMenu;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
	DWORD dwMyTBButtonPressed;&lt;br /&gt;
	DWORD dwMyTBten;&lt;br /&gt;
	DWORD dwMyTBeleven;&lt;br /&gt;
	DWORD dwMyTBButtonFace;&lt;br /&gt;
	DWORD dwMyTBButtonShadow;&lt;br /&gt;
	DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
	DWORD dwMyTBButtonText;&lt;br /&gt;
	DWORD dwMyTBWindowFrame;&lt;br /&gt;
	DWORD dwMyTBseventeen;&lt;br /&gt;
	DWORD dwMyTBeighteen;&lt;br /&gt;
	CPoint MyTBToolBarShapePt;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
	DWORD dwCTBControlsDisabled;&lt;br /&gt;
	DWORD dwCTBToolBarTitleDrag;&lt;br /&gt;
	DWORD dwCTBOne;&lt;br /&gt;
	CPoint CTBGrabPoint;&lt;br /&gt;
	CPoint CTBBorderPoint;&lt;br /&gt;
	DWORD dwCTBTwo;&lt;br /&gt;
	CMainFrame *pCTBMainFrame;&lt;br /&gt;
	DWORD dwCTBcxRightBorder;&lt;br /&gt;
	DWORD dwCTBthirtyone;&lt;br /&gt;
	CMenu dwCTBMenuOne;&lt;br /&gt;
	CString dwCTBString[15];&lt;br /&gt;
	DWORD dwCTBseventysix;&lt;br /&gt;
	DWORD dwCTBseventyseven;&lt;br /&gt;
	DWORD dwCTBseventyeight;&lt;br /&gt;
	DWORD dwCTBseventynine;&lt;br /&gt;
	DWORD dwCTBeighty;&lt;br /&gt;
	DWORD dwCTBeightyone;&lt;br /&gt;
	DWORD dwCTBeightytwo;&lt;br /&gt;
	DWORD dwCTBeightythree;&lt;br /&gt;
	DWORD dwCTBeightyfour;&lt;br /&gt;
	DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *SCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	void *dwSCVThree;&lt;br /&gt;
	void *pSCVGraphicLockDIBRes;&lt;br /&gt;
	LONG dwSCVGraphicWidth;&lt;br /&gt;
	LONG dwSCVGraphicHeight;&lt;br /&gt;
	CScrollBar *SCVScrollBarVert;&lt;br /&gt;
	CScrollBar *SCVScrollBarHorz;&lt;br /&gt;
	CStatic *SCVStaticOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect SCVScrollBarVertRectThree;&lt;br /&gt;
	CRect SCVScrollPosVertRect;&lt;br /&gt;
	CRect SCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect SCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect SCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect SCVScrollPosHorzRect;&lt;br /&gt;
	CRect SCVScrollPosRect;&lt;br /&gt;
	CRect SCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint SCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint SCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	CRect SCVAreaView;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=889</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=889"/>
		<updated>2025-10-17T05:37:34Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CMyToolBar */ - Alignment fix and clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
	int iMyTBMenuButtonPos;&lt;br /&gt;
	int iMyTBLastButtonPos;&lt;br /&gt;
	CPoint MyTBMaxButtonHitPoint;&lt;br /&gt;
	DWORD dwMyTBButtonMenu;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
	CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
	DWORD dwMyTBButtonPressed;&lt;br /&gt;
	DWORD dwMyTBten;&lt;br /&gt;
	DWORD dwMyTBeleven;&lt;br /&gt;
	DWORD dwMyTBButtonFace;&lt;br /&gt;
	DWORD dwMyTBButtonShadow;&lt;br /&gt;
	DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
	DWORD dwMyTBButtonText;&lt;br /&gt;
	DWORD dwMyTBWindowFrame;&lt;br /&gt;
	DWORD dwMyTBseventeen;&lt;br /&gt;
	DWORD dwMyTBeighteen;&lt;br /&gt;
	CPoint MyTBToolBarShapePt;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *SCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	void *dwSCVThree;&lt;br /&gt;
	void *pSCVGraphicLockDIBRes;&lt;br /&gt;
	LONG dwSCVGraphicWidth;&lt;br /&gt;
	LONG dwSCVGraphicHeight;&lt;br /&gt;
	CScrollBar *SCVScrollBarVert;&lt;br /&gt;
	CScrollBar *SCVScrollBarHorz;&lt;br /&gt;
	CStatic *SCVStaticOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect SCVScrollBarVertRectThree;&lt;br /&gt;
	CRect SCVScrollPosVertRect;&lt;br /&gt;
	CRect SCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect SCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect SCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect SCVScrollPosHorzRect;&lt;br /&gt;
	CRect SCVScrollPosRect;&lt;br /&gt;
	CRect SCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint SCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint SCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	CRect SCVAreaView;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=888</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=888"/>
		<updated>2025-10-17T05:36:32Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CSimcityView */ - subtle tweaks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *SCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	void *dwSCVThree;&lt;br /&gt;
	void *pSCVGraphicLockDIBRes;&lt;br /&gt;
	LONG dwSCVGraphicWidth;&lt;br /&gt;
	LONG dwSCVGraphicHeight;&lt;br /&gt;
	CScrollBar *SCVScrollBarVert;&lt;br /&gt;
	CScrollBar *SCVScrollBarHorz;&lt;br /&gt;
	CStatic *SCVStaticOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect SCVScrollBarVertRectThree;&lt;br /&gt;
	CRect SCVScrollPosVertRect;&lt;br /&gt;
	CRect SCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect SCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect SCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect SCVScrollPosHorzRect;&lt;br /&gt;
	CRect SCVScrollPosRect;&lt;br /&gt;
	CRect SCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint SCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint SCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	CRect SCVAreaView;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=887</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=887"/>
		<updated>2025-10-14T00:00:13Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CSimcityView */ - more tweaks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *dwSCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	void *dwSCVThree;&lt;br /&gt;
	void *dwSCVLockDIBRes;&lt;br /&gt;
	LONG dwSCVWidth;&lt;br /&gt;
	LONG dwSCVHeight;&lt;br /&gt;
	CScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
	CScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
	CStatic *dwSCVStaticOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectOne;&lt;br /&gt;
	CRect SCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect SCVScrollBarVertRectThree;&lt;br /&gt;
	CRect SCVScrollPosVertRect;&lt;br /&gt;
	CRect SCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect SCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect SCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect SCVScrollPosHorzRect;&lt;br /&gt;
	CRect SCVScrollPosRect;&lt;br /&gt;
	CRect SCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint SCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint SCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	CRect SCVAreaView;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=886</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=886"/>
		<updated>2025-10-13T00:22:33Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CSound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
	HWND hMainWnd;&lt;br /&gt;
	BOOL bSNDPlaySound;&lt;br /&gt;
	int iSNDCurrSoundID;&lt;br /&gt;
	CString dwSNDSoundString;&lt;br /&gt;
	void *dwSNDBufferTool;&lt;br /&gt;
	int iSNDToolSoundID;&lt;br /&gt;
	void *dwSNDBufferActionThing;&lt;br /&gt;
	BOOL bSNDWasPlaying;&lt;br /&gt;
	int iSNDActionThingSoundID;&lt;br /&gt;
	void *dwSNDBufferClick;&lt;br /&gt;
	void *dwSNDBufferDestruction;&lt;br /&gt;
	void *dwSNDBufferGeneral;&lt;br /&gt;
	int iSNDGeneralSoundID;&lt;br /&gt;
	DWORD dwSNDUnknownOne;&lt;br /&gt;
	WORD wSNDMCIDevID;&lt;br /&gt;
	DWORD dwSNDMCIError;&lt;br /&gt;
	DWORD dwSNDUnknownTwo;&lt;br /&gt;
	CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *dwSCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	DWORD dwSCVThree;&lt;br /&gt;
	void *dwSCVLockDIBRes;&lt;br /&gt;
	LONG dwSCVWidth;&lt;br /&gt;
	LONG dwSCVHeight;&lt;br /&gt;
	CScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
	CScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
	CStatic *dwSCVStaticOne;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectOne;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectThree;&lt;br /&gt;
	CRect dwSCVScrollPosVertRect;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect dwSCVScrollPosHorzRect;&lt;br /&gt;
	CRect dwSCVScrollPosRect;&lt;br /&gt;
	CRect dwSCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint dwSCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint dwSCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	int iSCVAreaViewWidth;&lt;br /&gt;
	int iSCVAreaViewHeight;&lt;br /&gt;
	CPoint dwSCVAdjustedPoint;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=885</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=885"/>
		<updated>2025-10-09T22:13:39Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CSimcityView */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
  HWND *dwSNDhWnd;&lt;br /&gt;
  BOOL bSNDPlaySound;&lt;br /&gt;
  int iSNDCurrSoundID;&lt;br /&gt;
  CString dwSNDSoundString;&lt;br /&gt;
  void *dwSNDBufferOne;&lt;br /&gt;
  int iSNDCurrentSound;&lt;br /&gt;
  void *dwSNDBufferTwo;&lt;br /&gt;
  BOOL bSNDWasPlaying;&lt;br /&gt;
  int iSNDSoundID;&lt;br /&gt;
  void *dwSNDBufferThree;&lt;br /&gt;
  void *dwSNDBufferFour;&lt;br /&gt;
  void *dwSNDBufferFive;&lt;br /&gt;
  int iSNDNextSoundID;&lt;br /&gt;
  DWORD dwSNDUnknownOne;&lt;br /&gt;
  WORD wSNDMCIDevID;&lt;br /&gt;
  DWORD dwSNDMCIError;&lt;br /&gt;
  DWORD dwSNDUnknownTwo;&lt;br /&gt;
  CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *dwSCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	DWORD dwSCVThree;&lt;br /&gt;
	void *dwSCVLockDIBRes;&lt;br /&gt;
	LONG dwSCVWidth;&lt;br /&gt;
	LONG dwSCVHeight;&lt;br /&gt;
	CScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
	CScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
	CStatic *dwSCVStaticOne;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectOne;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectThree;&lt;br /&gt;
	CRect dwSCVScrollPosVertRect;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect dwSCVScrollPosHorzRect;&lt;br /&gt;
	CRect dwSCVScrollPosRect;&lt;br /&gt;
	CRect dwSCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint dwSCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint dwSCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	int iSCVAreaViewWidth;&lt;br /&gt;
	int iSCVAreaViewHeight;&lt;br /&gt;
	CPoint dwSCVAdjustedPoint;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=884</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=884"/>
		<updated>2025-10-09T21:19:55Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CSimcityView */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
  HWND *dwSNDhWnd;&lt;br /&gt;
  BOOL bSNDPlaySound;&lt;br /&gt;
  int iSNDCurrSoundID;&lt;br /&gt;
  CString dwSNDSoundString;&lt;br /&gt;
  void *dwSNDBufferOne;&lt;br /&gt;
  int iSNDCurrentSound;&lt;br /&gt;
  void *dwSNDBufferTwo;&lt;br /&gt;
  BOOL bSNDWasPlaying;&lt;br /&gt;
  int iSNDSoundID;&lt;br /&gt;
  void *dwSNDBufferThree;&lt;br /&gt;
  void *dwSNDBufferFour;&lt;br /&gt;
  void *dwSNDBufferFive;&lt;br /&gt;
  int iSNDNextSoundID;&lt;br /&gt;
  DWORD dwSNDUnknownOne;&lt;br /&gt;
  WORD wSNDMCIDevID;&lt;br /&gt;
  DWORD dwSNDMCIError;&lt;br /&gt;
  DWORD dwSNDUnknownTwo;&lt;br /&gt;
  CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *dwSCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	DWORD dwSCVThree;&lt;br /&gt;
	void *dwSCVLockDIBRes;&lt;br /&gt;
	LONG dwSCVWidth;&lt;br /&gt;
	LONG dwSCVHeight;&lt;br /&gt;
	CScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
	CScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
	CStatic *dwSCVStaticOne;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectOne;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectTwo;&lt;br /&gt;
	CRect dwSCVScrollBarVertRectThree;&lt;br /&gt;
	CRect dwSCVScrollPosVertRect;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectOne;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectTwo;&lt;br /&gt;
	CRect dwSCVScrollBarHorzRectThree;&lt;br /&gt;
	CRect dwSCVScrollPosHorzRect;&lt;br /&gt;
	CRect dwSCVScrollPosRect;&lt;br /&gt;
	CRect dwSCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CPoint dwSCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CPoint dwSCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	int iSCVXCoord;&lt;br /&gt;
	int iSCVYCoord;&lt;br /&gt;
	CPoint dwSCVAdjustedPoint;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=883</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=883"/>
		<updated>2025-10-09T21:18:49Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CSimcityView */ - A bit of clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
  HWND *dwSNDhWnd;&lt;br /&gt;
  BOOL bSNDPlaySound;&lt;br /&gt;
  int iSNDCurrSoundID;&lt;br /&gt;
  CString dwSNDSoundString;&lt;br /&gt;
  void *dwSNDBufferOne;&lt;br /&gt;
  int iSNDCurrentSound;&lt;br /&gt;
  void *dwSNDBufferTwo;&lt;br /&gt;
  BOOL bSNDWasPlaying;&lt;br /&gt;
  int iSNDSoundID;&lt;br /&gt;
  void *dwSNDBufferThree;&lt;br /&gt;
  void *dwSNDBufferFour;&lt;br /&gt;
  void *dwSNDBufferFive;&lt;br /&gt;
  int iSNDNextSoundID;&lt;br /&gt;
  DWORD dwSNDUnknownOne;&lt;br /&gt;
  WORD wSNDMCIDevID;&lt;br /&gt;
  DWORD dwSNDMCIError;&lt;br /&gt;
  DWORD dwSNDUnknownTwo;&lt;br /&gt;
  CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
	CGraphics *dwSCVCGraphics;&lt;br /&gt;
	DWORD bSCVViewActive;&lt;br /&gt;
	DWORD dwSCVThree;&lt;br /&gt;
	void *dwSCVLockDIBRes;&lt;br /&gt;
	LONG dwSCVWidth;&lt;br /&gt;
	LONG dwSCVHeight;&lt;br /&gt;
	CMFC3XScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
	CMFC3XScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
	CMFC3XStatic *dwSCVStaticOne;&lt;br /&gt;
	CMFC3XRect dwSCVScrollBarVertRectOne;&lt;br /&gt;
	CMFC3XRect dwSCVScrollBarVertRectTwo;&lt;br /&gt;
	CMFC3XRect dwSCVScrollBarVertRectThree;&lt;br /&gt;
	CMFC3XRect dwSCVScrollPosVertRect;&lt;br /&gt;
	CMFC3XRect dwSCVScrollBarHorzRectOne;&lt;br /&gt;
	CMFC3XRect dwSCVScrollBarHorzRectTwo;&lt;br /&gt;
	CMFC3XRect dwSCVScrollBarHorzRectThree;&lt;br /&gt;
	CMFC3XRect dwSCVScrollPosHorzRect;&lt;br /&gt;
	CMFC3XRect dwSCVScrollPosRect;&lt;br /&gt;
	CMFC3XRect dwSCVStaticRect;&lt;br /&gt;
	DWORD dwSCVLeftMouseButtonDown;&lt;br /&gt;
	DWORD dwSCVLeftMouseDownInGameArea;&lt;br /&gt;
	DWORD dwSCVCursorInGameArea;&lt;br /&gt;
	CMFC3XPoint dwSCVMousePoint;&lt;br /&gt;
	DWORD dwSCVRightClickMenuOpen;&lt;br /&gt;
	CMFC3XPoint dwSCVRealPoint;&lt;br /&gt;
	DWORD dwSCVSixtyOne[6];&lt;br /&gt;
	int iSCVXCoord;&lt;br /&gt;
	int iSCVYCoord;&lt;br /&gt;
	CMFC3XPoint dwSCVAdjustedPoint;&lt;br /&gt;
	WORD wSCVZoomLevel;&lt;br /&gt;
	DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=882</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=882"/>
		<updated>2025-09-08T01:04:44Z</updated>

		<summary type="html">&lt;p&gt;AF: Fixed the CSimcityApp structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
  HWND *dwSNDhWnd;&lt;br /&gt;
  BOOL bSNDPlaySound;&lt;br /&gt;
  int iSNDCurrSoundID;&lt;br /&gt;
  CString dwSNDSoundString;&lt;br /&gt;
  void *dwSNDBufferOne;&lt;br /&gt;
  int iSNDCurrentSound;&lt;br /&gt;
  void *dwSNDBufferTwo;&lt;br /&gt;
  BOOL bSNDWasPlaying;&lt;br /&gt;
  int iSNDSoundID;&lt;br /&gt;
  void *dwSNDBufferThree;&lt;br /&gt;
  void *dwSNDBufferFour;&lt;br /&gt;
  void *dwSNDBufferFive;&lt;br /&gt;
  int iSNDNextSoundID;&lt;br /&gt;
  DWORD dwSNDUnknownOne;&lt;br /&gt;
  WORD wSNDMCIDevID;&lt;br /&gt;
  DWORD dwSNDMCIError;&lt;br /&gt;
  DWORD dwSNDUnknownTwo;&lt;br /&gt;
  CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Language (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array Months (long form) (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Months (short form) (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
	HMODULE dwSCAhModule;&lt;br /&gt;
	DWORD dwSCAGameAutoSave;&lt;br /&gt;
	DWORD dwSCACursorGameHit;&lt;br /&gt;
	DWORD dwSCALoadCityMode;&lt;br /&gt;
	int iSCAGDCHorzRes;&lt;br /&gt;
	int iSCAGDCVertRes;&lt;br /&gt;
	DWORD dwSCAbForceBkgd;&lt;br /&gt;
	DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
	DWORD bSCAPriscillaActivated;&lt;br /&gt;
	DWORD dwSCADragSuspendSim;&lt;br /&gt;
	DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
	DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
	DWORD dwSCAGameStarted;&lt;br /&gt;
	DWORD dwSCANoNewspapers;&lt;br /&gt;
	CPalette *dwSCAMainPaletteFore;&lt;br /&gt;
	CPalette *dwSCAMainPaletteBkgd;&lt;br /&gt;
	CString dwSCACStringOne;&lt;br /&gt;
	CString dwSCACStringTwo;&lt;br /&gt;
	CString dwSCACStringThree;&lt;br /&gt;
	CString dwSCACStringLang;&lt;br /&gt;
	DWORD dwSCASCURK;&lt;br /&gt;
	CSound *SCASNDLayer;&lt;br /&gt;
	DWORD dwSCASetNextStep;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
	CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
	DWORD dwSCAThirtyFour;&lt;br /&gt;
	DWORD dwSCAThirtyFive;&lt;br /&gt;
	HCURSOR dwSCACursors[30];&lt;br /&gt;
	DWORD dwSCASixtySix;&lt;br /&gt;
	int iSCAActiveCursor;&lt;br /&gt;
	DWORD dwSCAGameMusic;&lt;br /&gt;
	DWORD dwSCAGameSound;&lt;br /&gt;
	CString dwSCApCStringLongMonths[12];&lt;br /&gt;
	CString dwSCApCStringShortMonths[12];&lt;br /&gt;
	WORD wSCAGameSpeedLOW;&lt;br /&gt;
	WORD wSCAGameSpeedHIGH;&lt;br /&gt;
	DWORD dwSCASimulationTicking;&lt;br /&gt;
	DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
	DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
	DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
	DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
	DWORD dwSCALastTick;&lt;br /&gt;
	int iSCAProgramStep;&lt;br /&gt;
	DWORD dwSCADoStepSkip;&lt;br /&gt;
	DWORD dwSCAMenuDialogStep;&lt;br /&gt;
	DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
	DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
	DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
	__int16 wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCVCGraphics;&lt;br /&gt;
  DWORD bSCVViewActive;&lt;br /&gt;
  DWORD dwSCVThree;&lt;br /&gt;
  void *dwSCVLockDIBRes;&lt;br /&gt;
  LONG dwSCVWidth;&lt;br /&gt;
  LONG dwSCVHeight;&lt;br /&gt;
  CScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
  CScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
  CStatic *dwSCVStaticOne;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectOne;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectTwo;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectThree;&lt;br /&gt;
  CRect dwSCVScrollPosVertRect;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectOne;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectTwo;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectThree;&lt;br /&gt;
  CRect dwSCVScrollPosHorzRect;&lt;br /&gt;
  CRect dwSCVScrollPosRect;&lt;br /&gt;
  CRect dwSCVStaticRect;&lt;br /&gt;
  DWORD dwSCVFiftyThree;&lt;br /&gt;
  DWORD dwSCVFiftyFour;&lt;br /&gt;
  DWORD dwSCVFiftyFive;&lt;br /&gt;
  CPoint dwSCVMousePoint;&lt;br /&gt;
  DWORD dwSCVFiftyEight;&lt;br /&gt;
  CPoint dwSCVRealPoint;&lt;br /&gt;
  DWORD dwSCVSixtyOne;&lt;br /&gt;
  DWORD dwSCVSixtyTwo;&lt;br /&gt;
  DWORD dwSCVSixtyThree;&lt;br /&gt;
  CRect dwSCVRECTOne;&lt;br /&gt;
  int iSCVYCoord;&lt;br /&gt;
  CPoint dwSCVAdjustedPoint;&lt;br /&gt;
  WORD wSCVZoomLevel;&lt;br /&gt;
  DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=881</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=881"/>
		<updated>2025-08-30T07:33:39Z</updated>

		<summary type="html">&lt;p&gt;AF: Variable name change.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7010 || CSimcityApp || &#039;&#039;&#039;CSimcityAppThis&#039;&#039;&#039; ||  || this is &amp;quot;the&amp;quot; internal &#039;theApp&#039; class from the program&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot; (in this case it is m_pMainWnd in pCSimcityAppThis, or pCSimcityAppThis[7])&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wCityDevelopedTiles&#039;&#039;&#039; ||  || Total count of developed tiles (calculated when a given tile has the XBIT bit iMark set), needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || CString || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || The city name, loaded/saved as the CNAM chunk (The CString here is CMFC3XString - MFC 3.x version - alignment is important)&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = disaster mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || sprite_header_t* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group (0-17, see &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; for more information)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || budget_t* || &#039;&#039;&#039;pBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]] (needs some reverse engineering and/or documentation work)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD[3] || &#039;&#039;&#039;wCityDemand&#039;&#039;&#039; || 0x0718 || demand (-2000 to +2000) (0 = Residential, 1 = Commercial, 2 = Industrial)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD[15] || &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; ||  || City tool selection array referencing the selected subtool.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=880</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=880"/>
		<updated>2025-08-29T14:58:08Z</updated>

		<summary type="html">&lt;p&gt;AF: Adjustments and additions made to certain remove var references.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7010 || CSimcityApp || &#039;&#039;&#039;CSimcityAppThis&#039;&#039;&#039; ||  || this is &amp;quot;the&amp;quot; internal &#039;theApp&#039; class from the program&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot; (in this case it is m_pMainWnd in pCSimcityAppThis, or pCSimcityAppThis[7])&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wXVALTiles_TotalCount&#039;&#039;&#039; ||  || Total count of XVAL masked tiles, needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || CString || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || The city name, loaded/saved as the CNAM chunk (The CString here is CMFC3XString - MFC 3.x version - alignment is important)&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = disaster mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || sprite_header_t* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group (0-17, see &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; for more information)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || budget_t* || &#039;&#039;&#039;pBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]] (needs some reverse engineering and/or documentation work)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD[3] || &#039;&#039;&#039;wCityDemand&#039;&#039;&#039; || 0x0718 || demand (-2000 to +2000) (0 = Residential, 1 = Commercial, 2 = Industrial)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD[15] || &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; ||  || City tool selection array referencing the selected subtool.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=XBIT&amp;diff=879</id>
		<title>XBIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=XBIT&amp;diff=879"/>
		<updated>2025-08-29T14:47:45Z</updated>

		<summary type="html">&lt;p&gt;AF: Bit name adjustment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every tile on the map has a 1 byte (FF) XBIT value for it, setting various flags about the tile.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Flag Information for Each Bit Position&lt;br /&gt;
|-&lt;br /&gt;
! Bit Position&lt;br /&gt;
! Decimal&lt;br /&gt;
! Flag Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| +1&lt;br /&gt;
| Salt Water (Will water on this tile be fresh or salt water)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| +2&lt;br /&gt;
| Flip the tile (from the perspective of the sprite it is horizontally mirrored)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| +4&lt;br /&gt;
| Surface Water (Is this tile covered in water)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| +8&lt;br /&gt;
| Mark bit (When this bit is set, it seems to be involved in quite a few calculations, some could well be to do with land value)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| +16&lt;br /&gt;
| Watered (Is this tile receiving water).&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| +32&lt;br /&gt;
| Piped (Can this tile receive water).&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| +64&lt;br /&gt;
| Powered (Is this tile receiving power).&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| +128&lt;br /&gt;
| Powerable (Can this tile receive or need power).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=878</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=878"/>
		<updated>2025-08-19T16:36:13Z</updated>

		<summary type="html">&lt;p&gt;AF: /* CStatusControlBar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
  HWND *dwSNDhWnd;&lt;br /&gt;
  BOOL bSNDPlaySound;&lt;br /&gt;
  int iSNDCurrSoundID;&lt;br /&gt;
  CString dwSNDSoundString;&lt;br /&gt;
  void *dwSNDBufferOne;&lt;br /&gt;
  int iSNDCurrentSound;&lt;br /&gt;
  void *dwSNDBufferTwo;&lt;br /&gt;
  BOOL bSNDWasPlaying;&lt;br /&gt;
  int iSNDSoundID;&lt;br /&gt;
  void *dwSNDBufferThree;&lt;br /&gt;
  void *dwSNDBufferFour;&lt;br /&gt;
  void *dwSNDBufferFive;&lt;br /&gt;
  int iSNDNextSoundID;&lt;br /&gt;
  DWORD dwSNDUnknownOne;&lt;br /&gt;
  WORD wSNDMCIDevID;&lt;br /&gt;
  DWORD dwSNDMCIError;&lt;br /&gt;
  DWORD dwSNDUnknownTwo;&lt;br /&gt;
  CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Four (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array One (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Two (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
  HMODULE dwSCAhModule;&lt;br /&gt;
  DWORD dwSCAGameAutoSave;&lt;br /&gt;
  DWORD dwSCACursorGameHit;&lt;br /&gt;
  DWORD dwSCACityMode;&lt;br /&gt;
  DWORD dwSCAGDCHorzRes;&lt;br /&gt;
  DWORD dwSCAGDCVertRes;&lt;br /&gt;
  DWORD dwSCAbForceBkgd;&lt;br /&gt;
  DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
  DWORD bSCAPriscillaActivated;&lt;br /&gt;
  DWORD dwSCADragSuspendSim;&lt;br /&gt;
  DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
  DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
  DWORD dwSCAGameStarted;&lt;br /&gt;
  DWORD dwSCANoNewspapers;&lt;br /&gt;
  CPalette *dwSCAMainPaletteOne;&lt;br /&gt;
  CPalette *dwSCAMainPaletteTwo;&lt;br /&gt;
  CString dwSCACStringOne;&lt;br /&gt;
  CString dwSCACStringTwo;&lt;br /&gt;
  CString dwSCACStringThree;&lt;br /&gt;
  CString dwSCACStringFour;&lt;br /&gt;
  DWORD dwSCASCURK;&lt;br /&gt;
  CSound *dwSCACSoundOne;&lt;br /&gt;
  DWORD dwSCASetNextStep;&lt;br /&gt;
  CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
  CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
  DWORD dwSCAThirtyFour;&lt;br /&gt;
  DWORD dwSCAThirtyFive;&lt;br /&gt;
  HCURSOR dwSCACursors[30];&lt;br /&gt;
  DWORD dwSCASixtySix;&lt;br /&gt;
  HCURSOR dwSCAActiveCursor;&lt;br /&gt;
  DWORD dwSCAGameMusic;&lt;br /&gt;
  DWORD dwSCAGameSound;&lt;br /&gt;
  CString *dwSCApCStringArrOne;&lt;br /&gt;
  DWORD dwSCASeventyOne;&lt;br /&gt;
  DWORD dwSCASeventyTwo;&lt;br /&gt;
  DWORD dwSCASeventyThree;&lt;br /&gt;
  DWORD dwSCASeventyFour;&lt;br /&gt;
  DWORD dwSCASeventyFive;&lt;br /&gt;
  DWORD dwSCASeventySix;&lt;br /&gt;
  DWORD dwSCASeventySeven;&lt;br /&gt;
  DWORD dwSCASeventyEight;&lt;br /&gt;
  DWORD dwSCASeventyNine;&lt;br /&gt;
  DWORD dwSCAEighty;&lt;br /&gt;
  DWORD dwSCAEightyOne;&lt;br /&gt;
  DWORD dwSCAEightyTwo;&lt;br /&gt;
  DWORD dwSCAEightyThree;&lt;br /&gt;
  DWORD dwSCAEightyFour;&lt;br /&gt;
  DWORD dwSCAEightyFive;&lt;br /&gt;
  DWORD dwSCAEightySix;&lt;br /&gt;
  DWORD dwSCAEightySeven;&lt;br /&gt;
  DWORD dwSCAEightyEight;&lt;br /&gt;
  DWORD dwSCAEightyNine;&lt;br /&gt;
  DWORD dwSCANinety;&lt;br /&gt;
  DWORD dwSCANinetyOne;&lt;br /&gt;
  DWORD dwSCANinetyTwo;&lt;br /&gt;
  DWORD dwSCANinetyThree;&lt;br /&gt;
  DWORD dwSCANinetyFour;&lt;br /&gt;
  DWORD dwSCANinetyFive;&lt;br /&gt;
  DWORD dwSCANinetySix;&lt;br /&gt;
  DWORD dwSCANinetySeven;&lt;br /&gt;
  DWORD dwSCANinetyEight;&lt;br /&gt;
  DWORD dwSCANinetyNine;&lt;br /&gt;
  DWORD dwSCAOneHundred;&lt;br /&gt;
  DWORD dwSCAOneHundredOne;&lt;br /&gt;
  DWORD dwSCAOneHundredTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredThree;&lt;br /&gt;
  DWORD dwSCAOneHundredFour;&lt;br /&gt;
  DWORD dwSCAOneHundredFive;&lt;br /&gt;
  CString *dwSCApCStringArrTwo;&lt;br /&gt;
  DWORD dwSCAStoredStringLengths;&lt;br /&gt;
  DWORD dwSCAOneHundredEight;&lt;br /&gt;
  DWORD dwSCAOneHundredNine;&lt;br /&gt;
  DWORD dwSCAOneHundredTen;&lt;br /&gt;
  DWORD dwSCAOneHundredEleven;&lt;br /&gt;
  DWORD dwSCAOneHundredTwelve;&lt;br /&gt;
  DWORD dwSCAOneHundredThirteen;&lt;br /&gt;
  DWORD dwSCAOneHundredFourteen;&lt;br /&gt;
  DWORD dwSCAOneHundredFifteen;&lt;br /&gt;
  DWORD dwSCAOneHundredSixteen;&lt;br /&gt;
  DWORD dwSCAOneHundredSeventeen;&lt;br /&gt;
  DWORD dwSCAOneHundredEighteen;&lt;br /&gt;
  DWORD dwSCAOneHundredNineteen;&lt;br /&gt;
  DWORD dwSCAOneHundredTwenty;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyOne;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyThree;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyFour;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyFive;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentySix;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentySeven;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyEight;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyNine;&lt;br /&gt;
  DWORD dwSCAOneHundredThirty;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyOne;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyThree;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyFour;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyFive;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtySix;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtySeven;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyEight;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyNine;&lt;br /&gt;
  DWORD dwSCAOneHundredForty;&lt;br /&gt;
  DWORD dwSCAOneHundredFortyOne;&lt;br /&gt;
  WORD wSCAGameSpeedLOW;&lt;br /&gt;
  WORD wSCAGameSpeedHIGH;&lt;br /&gt;
  DWORD dwSCASimulationTickingSpeedVarOne;&lt;br /&gt;
  DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
  DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
  DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
  DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
  DWORD dwSCALastTick;&lt;br /&gt;
  int iSCAProgramStep;&lt;br /&gt;
  DWORD dwSCADoStepSkip;&lt;br /&gt;
  DWORD dwSCAMenuDialogStep;&lt;br /&gt;
  DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
  DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
  DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
  WORD wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringCtrlSelection;&lt;br /&gt;
  CString dwSCBCStringNotification;&lt;br /&gt;
  CString dwSCBCStringWeather;&lt;br /&gt;
  COLORREF dwSCBColorCtrlSelection;&lt;br /&gt;
  COLORREF dwSCBColorNotification;&lt;br /&gt;
  COLORREF dwSCBColorWeather;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCVCGraphics;&lt;br /&gt;
  DWORD bSCVViewActive;&lt;br /&gt;
  DWORD dwSCVThree;&lt;br /&gt;
  void *dwSCVLockDIBRes;&lt;br /&gt;
  LONG dwSCVWidth;&lt;br /&gt;
  LONG dwSCVHeight;&lt;br /&gt;
  CScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
  CScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
  CStatic *dwSCVStaticOne;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectOne;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectTwo;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectThree;&lt;br /&gt;
  CRect dwSCVScrollPosVertRect;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectOne;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectTwo;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectThree;&lt;br /&gt;
  CRect dwSCVScrollPosHorzRect;&lt;br /&gt;
  CRect dwSCVScrollPosRect;&lt;br /&gt;
  CRect dwSCVStaticRect;&lt;br /&gt;
  DWORD dwSCVFiftyThree;&lt;br /&gt;
  DWORD dwSCVFiftyFour;&lt;br /&gt;
  DWORD dwSCVFiftyFive;&lt;br /&gt;
  CPoint dwSCVMousePoint;&lt;br /&gt;
  DWORD dwSCVFiftyEight;&lt;br /&gt;
  CPoint dwSCVRealPoint;&lt;br /&gt;
  DWORD dwSCVSixtyOne;&lt;br /&gt;
  DWORD dwSCVSixtyTwo;&lt;br /&gt;
  DWORD dwSCVSixtyThree;&lt;br /&gt;
  CRect dwSCVRECTOne;&lt;br /&gt;
  int iSCVYCoord;&lt;br /&gt;
  CPoint dwSCVAdjustedPoint;&lt;br /&gt;
  WORD wSCVZoomLevel;&lt;br /&gt;
  DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=877</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=877"/>
		<updated>2025-08-19T11:39:42Z</updated>

		<summary type="html">&lt;p&gt;AF: /* Structure Extrapolation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditOne&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDialogBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
  HWND *dwSNDhWnd;&lt;br /&gt;
  BOOL bSNDPlaySound;&lt;br /&gt;
  int iSNDCurrSoundID;&lt;br /&gt;
  CString dwSNDSoundString;&lt;br /&gt;
  void *dwSNDBufferOne;&lt;br /&gt;
  int iSNDCurrentSound;&lt;br /&gt;
  void *dwSNDBufferTwo;&lt;br /&gt;
  BOOL bSNDWasPlaying;&lt;br /&gt;
  int iSNDSoundID;&lt;br /&gt;
  void *dwSNDBufferThree;&lt;br /&gt;
  void *dwSNDBufferFour;&lt;br /&gt;
  void *dwSNDBufferFive;&lt;br /&gt;
  int iSNDNextSoundID;&lt;br /&gt;
  DWORD dwSNDUnknownOne;&lt;br /&gt;
  WORD wSNDMCIDevID;&lt;br /&gt;
  DWORD dwSNDMCIError;&lt;br /&gt;
  DWORD dwSNDUnknownTwo;&lt;br /&gt;
  CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Four (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array One (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Two (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
  HMODULE dwSCAhModule;&lt;br /&gt;
  DWORD dwSCAGameAutoSave;&lt;br /&gt;
  DWORD dwSCACursorGameHit;&lt;br /&gt;
  DWORD dwSCACityMode;&lt;br /&gt;
  DWORD dwSCAGDCHorzRes;&lt;br /&gt;
  DWORD dwSCAGDCVertRes;&lt;br /&gt;
  DWORD dwSCAbForceBkgd;&lt;br /&gt;
  DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
  DWORD bSCAPriscillaActivated;&lt;br /&gt;
  DWORD dwSCADragSuspendSim;&lt;br /&gt;
  DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
  DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
  DWORD dwSCAGameStarted;&lt;br /&gt;
  DWORD dwSCANoNewspapers;&lt;br /&gt;
  CPalette *dwSCAMainPaletteOne;&lt;br /&gt;
  CPalette *dwSCAMainPaletteTwo;&lt;br /&gt;
  CString dwSCACStringOne;&lt;br /&gt;
  CString dwSCACStringTwo;&lt;br /&gt;
  CString dwSCACStringThree;&lt;br /&gt;
  CString dwSCACStringFour;&lt;br /&gt;
  DWORD dwSCASCURK;&lt;br /&gt;
  CSound *dwSCACSoundOne;&lt;br /&gt;
  DWORD dwSCASetNextStep;&lt;br /&gt;
  CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
  CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
  DWORD dwSCAThirtyFour;&lt;br /&gt;
  DWORD dwSCAThirtyFive;&lt;br /&gt;
  HCURSOR dwSCACursors[30];&lt;br /&gt;
  DWORD dwSCASixtySix;&lt;br /&gt;
  HCURSOR dwSCAActiveCursor;&lt;br /&gt;
  DWORD dwSCAGameMusic;&lt;br /&gt;
  DWORD dwSCAGameSound;&lt;br /&gt;
  CString *dwSCApCStringArrOne;&lt;br /&gt;
  DWORD dwSCASeventyOne;&lt;br /&gt;
  DWORD dwSCASeventyTwo;&lt;br /&gt;
  DWORD dwSCASeventyThree;&lt;br /&gt;
  DWORD dwSCASeventyFour;&lt;br /&gt;
  DWORD dwSCASeventyFive;&lt;br /&gt;
  DWORD dwSCASeventySix;&lt;br /&gt;
  DWORD dwSCASeventySeven;&lt;br /&gt;
  DWORD dwSCASeventyEight;&lt;br /&gt;
  DWORD dwSCASeventyNine;&lt;br /&gt;
  DWORD dwSCAEighty;&lt;br /&gt;
  DWORD dwSCAEightyOne;&lt;br /&gt;
  DWORD dwSCAEightyTwo;&lt;br /&gt;
  DWORD dwSCAEightyThree;&lt;br /&gt;
  DWORD dwSCAEightyFour;&lt;br /&gt;
  DWORD dwSCAEightyFive;&lt;br /&gt;
  DWORD dwSCAEightySix;&lt;br /&gt;
  DWORD dwSCAEightySeven;&lt;br /&gt;
  DWORD dwSCAEightyEight;&lt;br /&gt;
  DWORD dwSCAEightyNine;&lt;br /&gt;
  DWORD dwSCANinety;&lt;br /&gt;
  DWORD dwSCANinetyOne;&lt;br /&gt;
  DWORD dwSCANinetyTwo;&lt;br /&gt;
  DWORD dwSCANinetyThree;&lt;br /&gt;
  DWORD dwSCANinetyFour;&lt;br /&gt;
  DWORD dwSCANinetyFive;&lt;br /&gt;
  DWORD dwSCANinetySix;&lt;br /&gt;
  DWORD dwSCANinetySeven;&lt;br /&gt;
  DWORD dwSCANinetyEight;&lt;br /&gt;
  DWORD dwSCANinetyNine;&lt;br /&gt;
  DWORD dwSCAOneHundred;&lt;br /&gt;
  DWORD dwSCAOneHundredOne;&lt;br /&gt;
  DWORD dwSCAOneHundredTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredThree;&lt;br /&gt;
  DWORD dwSCAOneHundredFour;&lt;br /&gt;
  DWORD dwSCAOneHundredFive;&lt;br /&gt;
  CString *dwSCApCStringArrTwo;&lt;br /&gt;
  DWORD dwSCAStoredStringLengths;&lt;br /&gt;
  DWORD dwSCAOneHundredEight;&lt;br /&gt;
  DWORD dwSCAOneHundredNine;&lt;br /&gt;
  DWORD dwSCAOneHundredTen;&lt;br /&gt;
  DWORD dwSCAOneHundredEleven;&lt;br /&gt;
  DWORD dwSCAOneHundredTwelve;&lt;br /&gt;
  DWORD dwSCAOneHundredThirteen;&lt;br /&gt;
  DWORD dwSCAOneHundredFourteen;&lt;br /&gt;
  DWORD dwSCAOneHundredFifteen;&lt;br /&gt;
  DWORD dwSCAOneHundredSixteen;&lt;br /&gt;
  DWORD dwSCAOneHundredSeventeen;&lt;br /&gt;
  DWORD dwSCAOneHundredEighteen;&lt;br /&gt;
  DWORD dwSCAOneHundredNineteen;&lt;br /&gt;
  DWORD dwSCAOneHundredTwenty;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyOne;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyThree;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyFour;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyFive;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentySix;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentySeven;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyEight;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyNine;&lt;br /&gt;
  DWORD dwSCAOneHundredThirty;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyOne;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyThree;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyFour;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyFive;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtySix;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtySeven;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyEight;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyNine;&lt;br /&gt;
  DWORD dwSCAOneHundredForty;&lt;br /&gt;
  DWORD dwSCAOneHundredFortyOne;&lt;br /&gt;
  WORD wSCAGameSpeedLOW;&lt;br /&gt;
  WORD wSCAGameSpeedHIGH;&lt;br /&gt;
  DWORD dwSCASimulationTickingSpeedVarOne;&lt;br /&gt;
  DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
  DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
  DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
  DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
  DWORD dwSCALastTick;&lt;br /&gt;
  int iSCAProgramStep;&lt;br /&gt;
  DWORD dwSCADoStepSkip;&lt;br /&gt;
  DWORD dwSCAMenuDialogStep;&lt;br /&gt;
  DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
  DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
  DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
  WORD wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringOne;&lt;br /&gt;
  CString dwSCBCStringTwo;&lt;br /&gt;
  CString dwSCBCStringThree;&lt;br /&gt;
  COLORREF dwSCBColorOne;&lt;br /&gt;
  COLORREF dwSCBColorTwo;&lt;br /&gt;
  COLORREF dwSCBColorThree;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCVCGraphics;&lt;br /&gt;
  DWORD bSCVViewActive;&lt;br /&gt;
  DWORD dwSCVThree;&lt;br /&gt;
  void *dwSCVLockDIBRes;&lt;br /&gt;
  LONG dwSCVWidth;&lt;br /&gt;
  LONG dwSCVHeight;&lt;br /&gt;
  CScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
  CScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
  CStatic *dwSCVStaticOne;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectOne;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectTwo;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectThree;&lt;br /&gt;
  CRect dwSCVScrollPosVertRect;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectOne;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectTwo;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectThree;&lt;br /&gt;
  CRect dwSCVScrollPosHorzRect;&lt;br /&gt;
  CRect dwSCVScrollPosRect;&lt;br /&gt;
  CRect dwSCVStaticRect;&lt;br /&gt;
  DWORD dwSCVFiftyThree;&lt;br /&gt;
  DWORD dwSCVFiftyFour;&lt;br /&gt;
  DWORD dwSCVFiftyFive;&lt;br /&gt;
  CPoint dwSCVMousePoint;&lt;br /&gt;
  DWORD dwSCVFiftyEight;&lt;br /&gt;
  CPoint dwSCVRealPoint;&lt;br /&gt;
  DWORD dwSCVSixtyOne;&lt;br /&gt;
  DWORD dwSCVSixtyTwo;&lt;br /&gt;
  DWORD dwSCVSixtyThree;&lt;br /&gt;
  CRect dwSCVRECTOne;&lt;br /&gt;
  int iSCVYCoord;&lt;br /&gt;
  CPoint dwSCVAdjustedPoint;&lt;br /&gt;
  WORD wSCVZoomLevel;&lt;br /&gt;
  DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=876</id>
		<title>User:AF/ClassExtrapolation</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=User:AF/ClassExtrapolation&amp;diff=876"/>
		<updated>2025-08-08T17:46:04Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purposes of this page is to list the extrapolated classes during the reconstruction phase of the 1996 Special Edition.&lt;br /&gt;
&lt;br /&gt;
For the most part this is a brute-force approach. As the classes are refined/trimmed they&#039;ll be adjusted over time.&lt;br /&gt;
&lt;br /&gt;
The general methodology in this case is to generate a struct with N number of contained variables (this number can be rather high at times - it doesn&#039;t account for internal sub-structs and the like mind you, but there must be a starting place).&lt;br /&gt;
&lt;br /&gt;
== Structure Extrapolation ==&lt;br /&gt;
&lt;br /&gt;
Whether the structural class format is entirely correct based on what was originally present is unclear.&lt;br /&gt;
&lt;br /&gt;
However in order to ease the RE process some of these subclasses have created to reasonably allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: THIS LIST IS HEAVILY SUBJECT TO CHANGE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CWinApp -&amp;gt; CSimcityApp&lt;br /&gt;
CFrameWnd -&amp;gt; CMainFrame&lt;br /&gt;
CView -&amp;gt; CSimcityView&lt;br /&gt;
CWnd -&amp;gt; CSimcityWnd (m_hWndMDIClient from CMainFrame is passed to CSimcityWnd.SubclassWindow() via CMainFrame::CreateClient())&lt;br /&gt;
CEdit -&amp;gt; CSimcityEdit&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditTwo&lt;br /&gt;
CSimcityEdit -&amp;gt; CSimcityEditThree&lt;br /&gt;
CDocument -&amp;gt; CSimcityDoc&lt;br /&gt;
CDocument -&amp;gt; CEngine&lt;br /&gt;
CDocument -&amp;gt; CSimGraphData&lt;br /&gt;
CMDIChildWnd -&amp;gt; CMyMDIChildWnd&lt;br /&gt;
CControlBar -&amp;gt; CMyToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CCityToolBar&lt;br /&gt;
CMyToolBar -&amp;gt; CMapToolBar&lt;br /&gt;
CDialog -&amp;gt; CAboutDialog&lt;br /&gt;
CDialog -&amp;gt; CMovieDialog&lt;br /&gt;
CDialog -&amp;gt; CGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBridgeSelectDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetAdvisorDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetEducationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFireDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetFundDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetHealthDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetInformationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetMainDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetOrdinanceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetPoliceDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetTransportDialog&lt;br /&gt;
CGameDialog -&amp;gt; CBudgetZoneTaxSubDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityIndustryDialog&lt;br /&gt;
CGameDialog -&amp;gt; CCityMapDialog&lt;br /&gt;
CGameDialog -&amp;gt; CEventDialog&lt;br /&gt;
CGameDialog -&amp;gt; CGeneralInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInflightDialog&lt;br /&gt;
CGameDialog -&amp;gt; CInitialDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNeighbourDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewGameDialog&lt;br /&gt;
CGameDialog -&amp;gt; CNewspaperDialog&lt;br /&gt;
CGameDialog -&amp;gt; COwnerInfoDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPopulationDialog&lt;br /&gt;
CGameDialog -&amp;gt; CPowerPlantDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQueryGeneralDialog&lt;br /&gt;
CGameDialog -&amp;gt; CQuerySpecificDialog&lt;br /&gt;
CGameDialog -&amp;gt; CScenarioDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSelectArcologyDialog&lt;br /&gt;
CGameDialog -&amp;gt; CSimGraphDialog&lt;br /&gt;
CDockBar -&amp;gt; CStatusControlBar&lt;br /&gt;
CGraphics&lt;br /&gt;
CSound&lt;br /&gt;
CSimString (This hypothetical case cropped up in certain allocation/string handling cases - not completely confirmed as of yet)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGraphics ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct CGraphics&lt;br /&gt;
{&lt;br /&gt;
  HBITMAP GRBitmap;&lt;br /&gt;
  HBITMAP GRBitmapLoColor;&lt;br /&gt;
  int GRlastPalUpdate;&lt;br /&gt;
  CPalette *GRpAppPalette; // TPalette in SCURK&lt;br /&gt;
  int GRwidth;&lt;br /&gt;
  int GRheight;&lt;br /&gt;
  int GRorient;&lt;br /&gt;
  int GRIsLockCnt;&lt;br /&gt;
  BYTE *GRpBits;&lt;br /&gt;
  BYTE *GRpBitsLoColor;&lt;br /&gt;
  BITMAPINFO *GRpBitmapInfo;&lt;br /&gt;
  WORD GRusage; // This only appears to crop up in SCURK, otherwise the var used in-place in CreateDIBSection is DIB_RGB_COLORS&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== testColStruct ===&lt;br /&gt;
&lt;br /&gt;
This structure accounts for the Lo and Normal colour arrays that are used within the StartupGraphics() function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct testColStruct&lt;br /&gt;
{&lt;br /&gt;
  WORD wPos;&lt;br /&gt;
  tagPALETTEENTRY pe;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSound ==&lt;br /&gt;
&lt;br /&gt;
This deals with both the Music and Sound.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __unaligned __declspec(align(2)) CSound&lt;br /&gt;
{&lt;br /&gt;
  HWND *dwSNDhWnd;&lt;br /&gt;
  BOOL bSNDPlaySound;&lt;br /&gt;
  int iSNDCurrSoundID;&lt;br /&gt;
  CString dwSNDSoundString;&lt;br /&gt;
  void *dwSNDBufferOne;&lt;br /&gt;
  int iSNDCurrentSound;&lt;br /&gt;
  void *dwSNDBufferTwo;&lt;br /&gt;
  BOOL bSNDWasPlaying;&lt;br /&gt;
  int iSNDSoundID;&lt;br /&gt;
  void *dwSNDBufferThree;&lt;br /&gt;
  void *dwSNDBufferFour;&lt;br /&gt;
  void *dwSNDBufferFive;&lt;br /&gt;
  int iSNDNextSoundID;&lt;br /&gt;
  DWORD dwSNDUnknownOne;&lt;br /&gt;
  WORD wSNDMCIDevID;&lt;br /&gt;
  DWORD dwSNDMCIError;&lt;br /&gt;
  DWORD dwSNDUnknownTwo;&lt;br /&gt;
  CString dwSNDMusicString;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimString ==&lt;br /&gt;
&lt;br /&gt;
Address of functions that appear to be part of this class:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[T] 0x4015CD -&amp;gt; 0x458790 - SetString?&lt;br /&gt;
[T] 0x40242D -&amp;gt; 0x458C70 - DeleteString&lt;br /&gt;
[T] 0x4019B5 -&amp;gt; 0x458C80 - TruncateAtSpace? - it looks like this mostly comes into play with the non-dollar currency strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class CSimString&lt;br /&gt;
{&lt;br /&gt;
  char *pStr;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityApp ==&lt;br /&gt;
&lt;br /&gt;
Struct to address reference (&#039;this&#039; type is set to &#039;DWORD *&#039; in this case - exceptions will be noted accordingly):&lt;br /&gt;
&lt;br /&gt;
53 - 207 to allow for alignment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this[53]  -&amp;gt; 0x4C70E4 - referenced in CSimcityApp::ExitInstance within the FreeLibrary() call.&lt;br /&gt;
this[54]  -&amp;gt; 0x4C70E8 - Game AutoSave&lt;br /&gt;
this[55]  -&amp;gt; 0x4C70EC - This appears to be to do with cursor hit testing (and adjustment made during OnSetCursor) (further tracing likely needed)&lt;br /&gt;
this[56]  -&amp;gt; 0x4C70F0 - Another CityMode var separate from wCityMode.&lt;br /&gt;
this[57]  -&amp;gt; 0x4C70F4 - results of GameDeviceCaps with the HORZRES attribute&lt;br /&gt;
this[58]  -&amp;gt; 0x4C70F8 - results of GameDeviceCaps with the VERTRES attribute&lt;br /&gt;
this[59]  -&amp;gt; 0x4C70FC - Boolean var for selecting the background or foreground palette (toggled via CMainFrame::OnActivateApp)&lt;br /&gt;
this[60]  -&amp;gt; 0x4C7100 - Variable set and unset via CGameDialog::DoModal&lt;br /&gt;
this[61]  -&amp;gt; 0x4C7104 - Priscilla Activated&lt;br /&gt;
this[62]  -&amp;gt; 0x4C7108 - Variable that&#039;s set during widget/dialog/window drag situations (further tracing needed)&lt;br /&gt;
this[63]  -&amp;gt; 0x4C710C - OnQuit var that could be about suspending the simulation (further tracing needed)&lt;br /&gt;
this[64]  -&amp;gt; 0x4C7110 - Variable set to 1 via CMainFrame::OnDestroy&lt;br /&gt;
this[65]  -&amp;gt; 0x4C7114 - Game Started (set in various places when a game starts or fails to start - loading failure for instance)&lt;br /&gt;
this[66]  -&amp;gt; 0x4C7118 - NoNewspapers setting&lt;br /&gt;
this[67]  -&amp;gt; 0x4C711C - Foreground palette&lt;br /&gt;
this[68]  -&amp;gt; 0x4C7120 - Background palette&lt;br /&gt;
this[69]  -&amp;gt; 0x4C7124 - CString One (marked as data but not with any name or reference)&lt;br /&gt;
this[72]  -&amp;gt; 0x4C7130 - CString Two&lt;br /&gt;
this[75]  -&amp;gt; 0x4C713C - CString Three&lt;br /&gt;
this[78]  -&amp;gt; 0x4C7148 - CString Four (the global has the type LPSTR during initial detection here)&lt;br /&gt;
this[81]  -&amp;gt; 0x4C7154 - SCURK setting&lt;br /&gt;
this[82]  -&amp;gt; 0x4C7158 - CSound class allocation&lt;br /&gt;
this[83]  -&amp;gt; 0x4C715C - Toggle next program step (boolean)&lt;br /&gt;
this[84]  -&amp;gt; 0x4C7160 - MultiDocSC2&lt;br /&gt;
this[85]  -&amp;gt; 0x4C7164 - MultiDocSCN&lt;br /&gt;
...&lt;br /&gt;
this[88]  -&amp;gt; 0x4C7170 - Array of 30 cursors.&lt;br /&gt;
this[119] -&amp;gt; 0x4C71EC - Active Cursor&lt;br /&gt;
this[120] -&amp;gt; 0x4C71F0 - GameMusic&lt;br /&gt;
this[121] -&amp;gt; 0x4C71F4 - GameSound&lt;br /&gt;
this[122] -&amp;gt; 0x4C71F8 - CString Array One (new alloc of 12)&lt;br /&gt;
this[158] -&amp;gt; 0x4C7288 - CString Array Two (new alloc of 12)&lt;br /&gt;
this[159] -&amp;gt; 0x4C728C - String Lengths passed to TextOutA&lt;br /&gt;
(WORD *)this[388] -&amp;gt; 0x4C7318 - Simulation Speed setting&lt;br /&gt;
(WORD *)this[389] -&amp;gt; 0x4C731A - Simulation Speed setting (this also appears in some areas as a HIGH word - hence the distinction)&lt;br /&gt;
this[195] -&amp;gt; 0x4C731C - Variable that&#039;s set and then unset within the SimulationTickingSpeed function&lt;br /&gt;
this[196] -&amp;gt; 0x4C7320 - (unmarked area - no name or reference)&lt;br /&gt;
this[197] -&amp;gt; 0x4C7324 - Animation &amp;quot;On Cycle&amp;quot; variable&lt;br /&gt;
this[198] -&amp;gt; 0x4C7328 - Animation &amp;quot;Off Cycle&amp;quot; variable&lt;br /&gt;
this[199] -&amp;gt; 0x4C732C - Toggle the palette animation of the title screen&lt;br /&gt;
this[200] -&amp;gt; 0x4C7330 - GetTickCount() result (unmarked area - no name or reference)&lt;br /&gt;
this[201] -&amp;gt; 0x4C7334 - Program Step&lt;br /&gt;
this[202] -&amp;gt; 0x4C7338 - DoProgramStepSkip (see CSimcityApp::PreTranslateMessage for what will trigger this attribute)&lt;br /&gt;
this[203] -&amp;gt; 0x4C733C - Menu Dialog Step&lt;br /&gt;
this[204] -&amp;gt; 0x4C7340 - MapModeVarCheck&lt;br /&gt;
this[205] -&amp;gt; 0x4C7344 - OnInitToggleToolBar&lt;br /&gt;
this[206] -&amp;gt; 0x4C7348 - Variable that&#039;s set via CMainFrame::OnSysCommand (likely if the &#039;Quit&#039; command is triggered)&lt;br /&gt;
this[207] -&amp;gt; 0x4C734C - This variable stores the current program step prior to it changing to &amp;quot;Dialog Finish&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityApp : CWinApp&lt;br /&gt;
{&lt;br /&gt;
  HMODULE dwSCAhModule;&lt;br /&gt;
  DWORD dwSCAGameAutoSave;&lt;br /&gt;
  DWORD dwSCACursorGameHit;&lt;br /&gt;
  DWORD dwSCACityMode;&lt;br /&gt;
  DWORD dwSCAGDCHorzRes;&lt;br /&gt;
  DWORD dwSCAGDCVertRes;&lt;br /&gt;
  DWORD dwSCAbForceBkgd;&lt;br /&gt;
  DWORD dwSCAGameDialogDoModalVar;&lt;br /&gt;
  DWORD bSCAPriscillaActivated;&lt;br /&gt;
  DWORD dwSCADragSuspendSim;&lt;br /&gt;
  DWORD dwSCAOnQuitSuspendSim;&lt;br /&gt;
  DWORD dwSCAMainFrameDestroyVar;&lt;br /&gt;
  DWORD dwSCAGameStarted;&lt;br /&gt;
  DWORD dwSCANoNewspapers;&lt;br /&gt;
  CPalette *dwSCAMainPaletteOne;&lt;br /&gt;
  CPalette *dwSCAMainPaletteTwo;&lt;br /&gt;
  CString dwSCACStringOne;&lt;br /&gt;
  CString dwSCACStringTwo;&lt;br /&gt;
  CString dwSCACStringThree;&lt;br /&gt;
  CString dwSCACStringFour;&lt;br /&gt;
  DWORD dwSCASCURK;&lt;br /&gt;
  CSound *dwSCACSoundOne;&lt;br /&gt;
  DWORD dwSCASetNextStep;&lt;br /&gt;
  CMultiDocTemplate *dwSCAMultiDocOne;&lt;br /&gt;
  CMultiDocTemplate *dwSCAMultiDocTwo;&lt;br /&gt;
  DWORD dwSCAThirtyFour;&lt;br /&gt;
  DWORD dwSCAThirtyFive;&lt;br /&gt;
  HCURSOR dwSCACursors[30];&lt;br /&gt;
  DWORD dwSCASixtySix;&lt;br /&gt;
  HCURSOR dwSCAActiveCursor;&lt;br /&gt;
  DWORD dwSCAGameMusic;&lt;br /&gt;
  DWORD dwSCAGameSound;&lt;br /&gt;
  CString *dwSCApCStringArrOne;&lt;br /&gt;
  DWORD dwSCASeventyOne;&lt;br /&gt;
  DWORD dwSCASeventyTwo;&lt;br /&gt;
  DWORD dwSCASeventyThree;&lt;br /&gt;
  DWORD dwSCASeventyFour;&lt;br /&gt;
  DWORD dwSCASeventyFive;&lt;br /&gt;
  DWORD dwSCASeventySix;&lt;br /&gt;
  DWORD dwSCASeventySeven;&lt;br /&gt;
  DWORD dwSCASeventyEight;&lt;br /&gt;
  DWORD dwSCASeventyNine;&lt;br /&gt;
  DWORD dwSCAEighty;&lt;br /&gt;
  DWORD dwSCAEightyOne;&lt;br /&gt;
  DWORD dwSCAEightyTwo;&lt;br /&gt;
  DWORD dwSCAEightyThree;&lt;br /&gt;
  DWORD dwSCAEightyFour;&lt;br /&gt;
  DWORD dwSCAEightyFive;&lt;br /&gt;
  DWORD dwSCAEightySix;&lt;br /&gt;
  DWORD dwSCAEightySeven;&lt;br /&gt;
  DWORD dwSCAEightyEight;&lt;br /&gt;
  DWORD dwSCAEightyNine;&lt;br /&gt;
  DWORD dwSCANinety;&lt;br /&gt;
  DWORD dwSCANinetyOne;&lt;br /&gt;
  DWORD dwSCANinetyTwo;&lt;br /&gt;
  DWORD dwSCANinetyThree;&lt;br /&gt;
  DWORD dwSCANinetyFour;&lt;br /&gt;
  DWORD dwSCANinetyFive;&lt;br /&gt;
  DWORD dwSCANinetySix;&lt;br /&gt;
  DWORD dwSCANinetySeven;&lt;br /&gt;
  DWORD dwSCANinetyEight;&lt;br /&gt;
  DWORD dwSCANinetyNine;&lt;br /&gt;
  DWORD dwSCAOneHundred;&lt;br /&gt;
  DWORD dwSCAOneHundredOne;&lt;br /&gt;
  DWORD dwSCAOneHundredTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredThree;&lt;br /&gt;
  DWORD dwSCAOneHundredFour;&lt;br /&gt;
  DWORD dwSCAOneHundredFive;&lt;br /&gt;
  CString *dwSCApCStringArrTwo;&lt;br /&gt;
  DWORD dwSCAStoredStringLengths;&lt;br /&gt;
  DWORD dwSCAOneHundredEight;&lt;br /&gt;
  DWORD dwSCAOneHundredNine;&lt;br /&gt;
  DWORD dwSCAOneHundredTen;&lt;br /&gt;
  DWORD dwSCAOneHundredEleven;&lt;br /&gt;
  DWORD dwSCAOneHundredTwelve;&lt;br /&gt;
  DWORD dwSCAOneHundredThirteen;&lt;br /&gt;
  DWORD dwSCAOneHundredFourteen;&lt;br /&gt;
  DWORD dwSCAOneHundredFifteen;&lt;br /&gt;
  DWORD dwSCAOneHundredSixteen;&lt;br /&gt;
  DWORD dwSCAOneHundredSeventeen;&lt;br /&gt;
  DWORD dwSCAOneHundredEighteen;&lt;br /&gt;
  DWORD dwSCAOneHundredNineteen;&lt;br /&gt;
  DWORD dwSCAOneHundredTwenty;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyOne;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyThree;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyFour;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyFive;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentySix;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentySeven;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyEight;&lt;br /&gt;
  DWORD dwSCAOneHundredTwentyNine;&lt;br /&gt;
  DWORD dwSCAOneHundredThirty;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyOne;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyTwo;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyThree;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyFour;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyFive;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtySix;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtySeven;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyEight;&lt;br /&gt;
  DWORD dwSCAOneHundredThirtyNine;&lt;br /&gt;
  DWORD dwSCAOneHundredForty;&lt;br /&gt;
  DWORD dwSCAOneHundredFortyOne;&lt;br /&gt;
  WORD wSCAGameSpeedLOW;&lt;br /&gt;
  WORD wSCAGameSpeedHIGH;&lt;br /&gt;
  DWORD dwSCASimulationTickingSpeedVarOne;&lt;br /&gt;
  DWORD dwSCAOneHundredFortyFour;&lt;br /&gt;
  DWORD dwSCAAnimationOnCycle;&lt;br /&gt;
  DWORD dwSCAAnimationOffCycle;&lt;br /&gt;
  DWORD dwSCAToggleTitleScreenAnimation;&lt;br /&gt;
  DWORD dwSCALastTick;&lt;br /&gt;
  int iSCAProgramStep;&lt;br /&gt;
  DWORD dwSCADoStepSkip;&lt;br /&gt;
  DWORD dwSCAMenuDialogStep;&lt;br /&gt;
  DWORD dwSCAMapModeVarCheck;&lt;br /&gt;
  DWORD dwSCAOnInitToggleToolBar;&lt;br /&gt;
  DWORD dwSCASysCmdOnQuitVar;&lt;br /&gt;
  WORD wSCAInitDialogFinishLastProgramStep;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMainFrame ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMainFrame : CMDIFrameWnd&lt;br /&gt;
{&lt;br /&gt;
  CSimGraphDialog *dwMFSimGraphDialog;&lt;br /&gt;
  CPopulationDialog *dwMFPopulationDialog;&lt;br /&gt;
  CCityMapDialog *dwMFCityMapDialog;&lt;br /&gt;
  CNeighbourDialog *dwMFNeighbourDialog;&lt;br /&gt;
  CCityIndustryDialog *dwMFCityIndustryDialog;&lt;br /&gt;
  DWORD dwMFEight; // tracing required&lt;br /&gt;
  CGraphics *dwMFCGraphicsOne;&lt;br /&gt;
  DWORD dwMFnine; // tracing required&lt;br /&gt;
  DWORD dwMFTimerActive;&lt;br /&gt;
  UINT_PTR dwMFuIDEvent;&lt;br /&gt;
  UINT dwMFuDelay;&lt;br /&gt;
  UINT dwMFuPeriod;&lt;br /&gt;
  CStatusControlBar dwMFStatusControlBar;&lt;br /&gt;
  DWORD dwMFShowStatusBar;&lt;br /&gt;
  CCityToolBar dwMFCityToolBar;&lt;br /&gt;
  DWORD dwMFOneHundredEightyFour; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightyFive; // tracing required&lt;br /&gt;
  DWORD dwMFOneHundredEightySix; // tracing required&lt;br /&gt;
  CMapToolBar dwMFMapToolBar;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyTwo; // tracing required&lt;br /&gt;
  DWORD dwMFToolBarsCreated;&lt;br /&gt;
  DWORD dwMFTwoHundredFortyFour; // tracing required&lt;br /&gt;
  CSimcityWnd dwMFCSimcityWnd;&lt;br /&gt;
  LONG iMFbiWidth;&lt;br /&gt;
  LONG iMFbiHeight;&lt;br /&gt;
  CSize dwMFCSize;&lt;br /&gt;
  tagPOINT dwMFPointOne;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CStatusControlBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CStatusControlBar : CDialogBar&lt;br /&gt;
{&lt;br /&gt;
  CString dwSCBCStringOne;&lt;br /&gt;
  CString dwSCBCStringTwo;&lt;br /&gt;
  CString dwSCBCStringThree;&lt;br /&gt;
  COLORREF dwSCBColorOne;&lt;br /&gt;
  COLORREF dwSCBColorTwo;&lt;br /&gt;
  COLORREF dwSCBColorThree;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMyToolBar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMyToolBar : CControlBar&lt;br /&gt;
{&lt;br /&gt;
  int iMyTBMenuButtonPos;&lt;br /&gt;
  int iMyTBLastButtonPos;&lt;br /&gt;
  CPoint dwMyTBPointFour;&lt;br /&gt;
  DWORD dwMyTBButtonMenu;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsNormal;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsDisabled;&lt;br /&gt;
  CGraphics *cGMyTBCGraphicsPressed;&lt;br /&gt;
  DWORD dwMyTBButtonPressed;&lt;br /&gt;
  DWORD dwMyTBten;&lt;br /&gt;
  DWORD dwMyTBeleven;&lt;br /&gt;
  DWORD dwMyTBButtonFace;&lt;br /&gt;
  DWORD dwMyTBButtonShadow;&lt;br /&gt;
  DWORD dwMyTBButtonHighlighted;&lt;br /&gt;
  DWORD dwMyTBButtonText;&lt;br /&gt;
  DWORD dwMyTBWindowFrame;&lt;br /&gt;
  DWORD dwMyTBseventeen;&lt;br /&gt;
  DWORD dwMyTBeighteen;&lt;br /&gt;
  CPoint dwMyTBPointThree;&lt;br /&gt;
  DWORD dwMyTBControlsDisabled;&lt;br /&gt;
  DWORD dwMyTBToolBarTitleDrag;&lt;br /&gt;
  tagPOINT dwMyTBPointOne;&lt;br /&gt;
  tagPOINT dwMyTBPointTwo;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SIMC_TBBUTTON ====&lt;br /&gt;
&lt;br /&gt;
Although this is still being experimented with, it &amp;quot;seems&amp;quot; that the custom toolbars that&lt;br /&gt;
were built appeared to follow some principles as found with CToolBar (or COldToolBar as it once&lt;br /&gt;
was if viewed from MFC 4.x &amp;gt;= - until an undefined point when it was removed).&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;AFX_TBBUTTON&#039;&#039;&#039; struct specifically stands out, though in that instance the struct only&lt;br /&gt;
contains the &#039;&#039;&#039;nID&#039;&#039;&#039;, &#039;&#039;&#039;nStyle&#039;&#039;&#039; and &#039;&#039;&#039;iImage&#039;&#039;&#039;, in our case the image handling appears&lt;br /&gt;
to be from the CGraphics class, the dwSeparator and three CPoint class pointers account for&lt;br /&gt;
coordinates of each button (BtnA - start, BtnB - end (?) on the main toolbar (M).&lt;br /&gt;
&lt;br /&gt;
Much still needs to be confirmed, however this at least allows for general alignment in this&lt;br /&gt;
area.&lt;br /&gt;
&lt;br /&gt;
The following is cast to m_pData (or GetData() for MFC 4.x &amp;gt;=):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct SIMC_TBBUTTON&lt;br /&gt;
{&lt;br /&gt;
  UINT nCmdID;&lt;br /&gt;
  UINT nStyle;&lt;br /&gt;
  int iIndex;&lt;br /&gt;
  CPoint *pPointBtnA;&lt;br /&gt;
  CPoint *pPointM;&lt;br /&gt;
  CPoint *pPointBtnB;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CCityToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CCityToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  tagPOINT dwCTBPointThree;&lt;br /&gt;
  CMainFrame *dwCTBMainFrame;&lt;br /&gt;
  DWORD dwCTBcxRightBorder;&lt;br /&gt;
  DWORD dwCTBthirtyone;&lt;br /&gt;
  CMenu dwCTBMenuOne;&lt;br /&gt;
  CString dwCTBString[15];&lt;br /&gt;
  DWORD dwCTBseventysix;&lt;br /&gt;
  DWORD dwCTBseventyseven;&lt;br /&gt;
  DWORD dwCTBseventyeight;&lt;br /&gt;
  DWORD dwCTBseventynine;&lt;br /&gt;
  DWORD dwCTBeighty;&lt;br /&gt;
  DWORD dwCTBeightyone;&lt;br /&gt;
  DWORD dwCTBeightytwo;&lt;br /&gt;
  DWORD dwCTBeightythree;&lt;br /&gt;
  DWORD dwCTBeightyfour;&lt;br /&gt;
  DWORD dwCTToolSelection[15];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CMapToolBar ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CMapToolBar : CMyToolBar&lt;br /&gt;
{&lt;br /&gt;
  DWORD dwMTBTwentyNine;&lt;br /&gt;
  CMainFrame *dwMTBMainFrame;&lt;br /&gt;
  DWORD dwMTBcxRightBorder;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityWnd ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityWnd : CWnd&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCWCGraphicsOne;&lt;br /&gt;
  CSize dwSCWSize;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityView ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj __unaligned __declspec(align(2)) CSimcityView : CView&lt;br /&gt;
{&lt;br /&gt;
  CGraphics *dwSCVCGraphics;&lt;br /&gt;
  DWORD bSCVViewActive;&lt;br /&gt;
  DWORD dwSCVThree;&lt;br /&gt;
  void *dwSCVLockDIBRes;&lt;br /&gt;
  LONG dwSCVWidth;&lt;br /&gt;
  LONG dwSCVHeight;&lt;br /&gt;
  CScrollBar *dwSCVScrollBarVert;&lt;br /&gt;
  CScrollBar *dwSCVScrollBarHorz;&lt;br /&gt;
  CStatic *dwSCVStaticOne;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectOne;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectTwo;&lt;br /&gt;
  CRect dwSCVScrollBarVertRectThree;&lt;br /&gt;
  CRect dwSCVScrollPosVertRect;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectOne;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectTwo;&lt;br /&gt;
  CRect dwSCVScrollBarHorzRectThree;&lt;br /&gt;
  CRect dwSCVScrollPosHorzRect;&lt;br /&gt;
  CRect dwSCVScrollPosRect;&lt;br /&gt;
  CRect dwSCVStaticRect;&lt;br /&gt;
  DWORD dwSCVFiftyThree;&lt;br /&gt;
  DWORD dwSCVFiftyFour;&lt;br /&gt;
  DWORD dwSCVFiftyFive;&lt;br /&gt;
  CPoint dwSCVMousePoint;&lt;br /&gt;
  DWORD dwSCVFiftyEight;&lt;br /&gt;
  CPoint dwSCVRealPoint;&lt;br /&gt;
  DWORD dwSCVSixtyOne;&lt;br /&gt;
  DWORD dwSCVSixtyTwo;&lt;br /&gt;
  DWORD dwSCVSixtyThree;&lt;br /&gt;
  CRect dwSCVRECTOne;&lt;br /&gt;
  int iSCVYCoord;&lt;br /&gt;
  CPoint dwSCVAdjustedPoint;&lt;br /&gt;
  WORD wSCVZoomLevel;&lt;br /&gt;
  DWORD dwSCVIsZoomed;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSimcityDoc ==&lt;br /&gt;
&lt;br /&gt;
NOTE: Although there are contained attributes within the CEngine class, their use-case and purpose is currently not clear. The SimulationProcessTick function is part of CEngine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct __cppobj CSimcityDoc : CDocument&lt;br /&gt;
{&lt;br /&gt;
  CEngine *pSCDEngine;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=875</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=875"/>
		<updated>2025-07-01T07:20:10Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wXVALTiles_TotalCount&#039;&#039;&#039; ||  || Total count of XVAL masked tiles, needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || char* || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || Pointer to the city name, loaded/saved as the CNAM chunk&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = scenario mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || void* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group (0-17, see &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; for more information)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || budget_t* || &#039;&#039;&#039;pBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]] (needs some reverse engineering and/or documentation work)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD || &#039;&#039;&#039;wCityResidentialDemand&#039;&#039;&#039; || 0x0718 || Residential demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FA || WORD || &#039;&#039;&#039;wCityCommericalDemand&#039;&#039;&#039; || 0x071C || Commercial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FC || WORD || &#039;&#039;&#039;wCityIndustrialDemand&#039;&#039;&#039; || 0x0720 || Industrial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD[15] || &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; ||  || City tool selection array referencing the selected subtool.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=874</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=874"/>
		<updated>2025-07-01T07:19:37Z</updated>

		<summary type="html">&lt;p&gt;AF: Undo revision 872 by AF (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wXVALTiles_TotalCount&#039;&#039;&#039; ||  || Total count of XVAL masked tiles, needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || char* || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || Pointer to the city name, loaded/saved as the CNAM chunk&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = scenario mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || void* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group (0-17, see &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; for more information)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || void* || &#039;&#039;&#039;dwBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]] (needs some reverse engineering and/or documentation work)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD || &#039;&#039;&#039;wCityResidentialDemand&#039;&#039;&#039; || 0x0718 || Residential demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FA || WORD || &#039;&#039;&#039;wCityCommericalDemand&#039;&#039;&#039; || 0x071C || Commercial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FC || WORD || &#039;&#039;&#039;wCityIndustrialDemand&#039;&#039;&#039; || 0x0720 || Industrial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD[15] || &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; ||  || City tool selection array referencing the selected subtool.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Budget_array&amp;diff=873</id>
		<title>Budget array</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Budget_array&amp;diff=873"/>
		<updated>2025-07-01T07:18:10Z</updated>

		<summary type="html">&lt;p&gt;AF: Created page with &amp;quot;== Struct ==  &amp;lt;pre&amp;gt; typedef struct { 	int iCountMonth[12]; 	int iFundMonth[12]; 	int iCurrentCosts; 	int iFundingPercent; 	int iYearToDateCost; 	int iEstimatedCost; } budget_t; &amp;lt;/pre&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Struct ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
	int iCountMonth[12];&lt;br /&gt;
	int iFundMonth[12];&lt;br /&gt;
	int iCurrentCosts;&lt;br /&gt;
	int iFundingPercent;&lt;br /&gt;
	int iYearToDateCost;&lt;br /&gt;
	int iEstimatedCost;&lt;br /&gt;
} budget_t;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=872</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=872"/>
		<updated>2025-07-01T07:17:25Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wXVALTiles_TotalCount&#039;&#039;&#039; ||  || Total count of XVAL masked tiles, needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || char* || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || Pointer to the city name, loaded/saved as the CNAM chunk&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = scenario mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || void* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || budget_t* || &#039;&#039;&#039;pBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD || &#039;&#039;&#039;wCityResidentialDemand&#039;&#039;&#039; || 0x0718 || Residential demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FA || WORD || &#039;&#039;&#039;wCityCommericalDemand&#039;&#039;&#039; || 0x071C || Commercial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FC || WORD || &#039;&#039;&#039;wCityIndustrialDemand&#039;&#039;&#039; || 0x0720 || Industrial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD || &#039;&#039;&#039;wSelectedSubtoolBulldozer&#039;&#039;&#039; ||  || (*** See below) Selected Bulldozer mode (Demolish/Clear, Level Terrain, Raise Terrain, Lower Terrain, De-zone) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC952 || WORD || &#039;&#039;&#039;wSelectedSubtoolNature&#039;&#039;&#039; ||  || Selected Nature mode (trees, water) (forests and stream are available in map-editing mode) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC954 || WORD || &#039;&#039;&#039;wSelectedSubtoolDispatch&#039;&#039;&#039; ||  || Selected Dispatch mode (Police, Fire, Military (if facilities for the first two aren&#039;t present)) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC956 || WORD || &#039;&#039;&#039;wSelectedSubtoolPower&#039;&#039;&#039; ||  || Selected Power mode (Power Lines, Power Plant) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC958 || WORD || &#039;&#039;&#039;wSelectedSubtoolWater&#039;&#039;&#039; ||  || Selected Water mode (Pipes, Water Pump, Water Tower, Treatment, Desalinization) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC95A || WORD || &#039;&#039;&#039;wSelectedSubtoolRewards&#039;&#039;&#039; ||  || Selected Rewards mode (Mayor&#039;s Hour, City Hall, Statue, Military Base, Braun Llama Dome, Arcologies) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC95C || WORD || &#039;&#039;&#039;wSelectedSubtoolRoads&#039;&#039;&#039; ||  || Selected Roads mode (Road, Highway, Tunnel, Onramp, Bus Depot) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC95E || WORD || &#039;&#039;&#039;wSelectedSubtoolRail&#039;&#039;&#039; ||  || Selected Rail mode (Rail, Subway. Rail Depot, Sub Station, Sub&amp;lt;--&amp;gt;Rail) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC960 || WORD || &#039;&#039;&#039;wSelectedSubtoolPorts&#039;&#039;&#039; ||  || Selected Ports mode (Seaport, Airport) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC962 || WORD || &#039;&#039;&#039;wSelectedSubtoolResidential&#039;&#039;&#039; ||  || Selected Residential mode (Light, Dense) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC964 || WORD || &#039;&#039;&#039;wSelectedSubtoolCommercial&#039;&#039;&#039; ||  || Selected Commercial mode (Light, Dense) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC966 || WORD || &#039;&#039;&#039;wSelectedSubtoolIndustrial&#039;&#039;&#039; ||  || Selected Industrial mode (Light, Dense) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC968 || WORD || &#039;&#039;&#039;wSelectedSubtoolEducation&#039;&#039;&#039; ||  || Selected Education mode (School, College, Library, Museum) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC96A || WORD || &#039;&#039;&#039;wSelectedSubtoolServices&#039;&#039;&#039; ||  || Selected Services mode (Police, Fire Station, Hospital, Prison) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC96C || WORD || &#039;&#039;&#039;wSelectedSubtoolParks&#039;&#039;&#039; ||  || Selected Parks mode (Small Park, Big Park, Zoo, Stadium, Marina) **&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
** The choices for each SelectedSubtool are for reference purposes only, they may not reflect the actual internal order.&lt;br /&gt;
&lt;br /&gt;
*** wSelectedSubtoolBulldozer - Address 0x4CC94C (WORD array - 18 entries) - unique case to override without changing the currently selected tool.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=WCitySelectedSubtool&amp;diff=871</id>
		<title>WCitySelectedSubtool</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=WCitySelectedSubtool&amp;diff=871"/>
		<updated>2025-07-01T07:15:48Z</updated>

		<summary type="html">&lt;p&gt;AF: Created page with &amp;quot;The City Tools indices go from 0-17; only 0-14 are accounted for within the &amp;#039;wCitySelectedSubtool&amp;#039; array.  {| class=&amp;quot;wikitable&amp;quot; |+ City Tools and SubTools. |- ! # !! Enum !! SubTools |- | 0 || &amp;#039;&amp;#039;&amp;#039;CITYTOOL_GROUP_BULLDOZER&amp;#039;&amp;#039;&amp;#039; || Demolish/Clear, Level Terrain, Raise Terrain, Lower Terrain, De-Zone |- | 1 || &amp;#039;&amp;#039;&amp;#039;CITYTOOL_GROUP_NATURE&amp;#039;&amp;#039;&amp;#039; || Tress, Water |- | 2 || &amp;#039;&amp;#039;&amp;#039;CITYTOOL_GROUP_DISPATCH&amp;#039;&amp;#039;&amp;#039; || Police, Fire, Military |- | 3 || &amp;#039;&amp;#039;&amp;#039;CITYTOOL_GROUP_POWER&amp;#039;&amp;#039;&amp;#039; || Wires, PowerPlants...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The City Tools indices go from 0-17; only 0-14 are accounted for within the &#039;wCitySelectedSubtool&#039; array.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ City Tools and SubTools.&lt;br /&gt;
|-&lt;br /&gt;
! # !! Enum !! SubTools&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &#039;&#039;&#039;CITYTOOL_GROUP_BULLDOZER&#039;&#039;&#039; || Demolish/Clear, Level Terrain, Raise Terrain, Lower Terrain, De-Zone&lt;br /&gt;
|-&lt;br /&gt;
| 1 || &#039;&#039;&#039;CITYTOOL_GROUP_NATURE&#039;&#039;&#039; || Tress, Water&lt;br /&gt;
|-&lt;br /&gt;
| 2 || &#039;&#039;&#039;CITYTOOL_GROUP_DISPATCH&#039;&#039;&#039; || Police, Fire, Military&lt;br /&gt;
|-&lt;br /&gt;
| 3 || &#039;&#039;&#039;CITYTOOL_GROUP_POWER&#039;&#039;&#039; || Wires, PowerPlants&lt;br /&gt;
|-&lt;br /&gt;
| 4 || &#039;&#039;&#039;CITYTOOL_GROUP_WATER&#039;&#039;&#039; || Pipes, Water Pump, Water Tower, Treatment Plant, Desalinization Plant&lt;br /&gt;
|-&lt;br /&gt;
| 5 || &#039;&#039;&#039;CITYTOOL_GROUP_REWARDS&#039;&#039;&#039; || Mayor&#039;s House, City Hall, Statue, Military Base, Braun Llama Dome, Arcology&lt;br /&gt;
|-&lt;br /&gt;
| 6 || &#039;&#039;&#039;CITYTOOL_GROUP_ROADS&#039;&#039;&#039; || Road, Highway, Tunnel, Onramp, Bus Depot&lt;br /&gt;
|-&lt;br /&gt;
| 7 || &#039;&#039;&#039;CITYTOOL_GROUP_RAIL&#039;&#039;&#039; || Rail, Subway, Rail Depot, Sub Station, Sub&amp;lt;-&amp;gt;Rail&lt;br /&gt;
|-&lt;br /&gt;
| 8 || &#039;&#039;&#039;CITYTOOL_GROUP_PORTS&#039;&#039;&#039; || Seaport, Airport&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &#039;&#039;&#039;CITYTOOL_GROUP_RESIDENTIAL&#039;&#039;&#039; || Low Density, High Density&lt;br /&gt;
|-&lt;br /&gt;
| 10 || &#039;&#039;&#039;CITYTOOL_GROUP_COMMERCIAL&#039;&#039;&#039; || Low Density, High Density&lt;br /&gt;
|-&lt;br /&gt;
| 11 || &#039;&#039;&#039;CITYTOOL_GROUP_INDUSTRIAL&#039;&#039;&#039; || Low Density, High Density&lt;br /&gt;
|-&lt;br /&gt;
| 12 || &#039;&#039;&#039;CITYTOOL_GROUP_EDUCATION&#039;&#039;&#039; || School, College, Library, Museum&lt;br /&gt;
|-&lt;br /&gt;
| 13 || &#039;&#039;&#039;CITYTOOL_GROUP_SERVICES&#039;&#039;&#039; || Police, Fire Station, Hospital, Prison&lt;br /&gt;
|-&lt;br /&gt;
| 14 || &#039;&#039;&#039;CITYTOOL_GROUP_PARKS&#039;&#039;&#039; || Small Park, Big Park, Zoo, Stadium, Marina&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The remaining entries that &#039;&#039;&#039;do not&#039;&#039;&#039; have any subtools - these are for references purposes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
15 - CITYTOOL_GROUP_SIGNS&lt;br /&gt;
16 - CITYTOOL_GROUP_QUERY&lt;br /&gt;
17 - CITYTOOL_GROUP_CENTERINGTOOL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=870</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=870"/>
		<updated>2025-07-01T07:14:01Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wXVALTiles_TotalCount&#039;&#039;&#039; ||  || Total count of XVAL masked tiles, needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || char* || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || Pointer to the city name, loaded/saved as the CNAM chunk&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = scenario mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || void* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group (0-17, see &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; for more information)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || void* || &#039;&#039;&#039;dwBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]] (needs some reverse engineering and/or documentation work)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD || &#039;&#039;&#039;wCityResidentialDemand&#039;&#039;&#039; || 0x0718 || Residential demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FA || WORD || &#039;&#039;&#039;wCityCommericalDemand&#039;&#039;&#039; || 0x071C || Commercial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FC || WORD || &#039;&#039;&#039;wCityIndustrialDemand&#039;&#039;&#039; || 0x0720 || Industrial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD[15] || &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; ||  || City tool selection array referencing the selected subtool.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=869</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=869"/>
		<updated>2025-07-01T06:58:59Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wXVALTiles_TotalCount&#039;&#039;&#039; ||  || Total count of XVAL masked tiles, needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || char* || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || Pointer to the city name, loaded/saved as the CNAM chunk&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = scenario mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || void* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || void* || &#039;&#039;&#039;dwBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]] (needs some reverse engineering and/or documentation work)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD || &#039;&#039;&#039;wCityResidentialDemand&#039;&#039;&#039; || 0x0718 || Residential demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FA || WORD || &#039;&#039;&#039;wCityCommericalDemand&#039;&#039;&#039; || 0x071C || Commercial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FC || WORD || &#039;&#039;&#039;wCityIndustrialDemand&#039;&#039;&#039; || 0x0720 || Industrial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD[15] || &#039;&#039;&#039;[[wCitySelectedSubtool]]&#039;&#039;&#039; ||  || City tool selection array referencing the selected subtool.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
	<entry>
		<id>https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=868</id>
		<title>Known global variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.sc2kfix.net/w/index.php?title=Known_global_variables&amp;diff=868"/>
		<updated>2025-07-01T06:54:51Z</updated>

		<summary type="html">&lt;p&gt;AF: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavy construction}}&lt;br /&gt;
&lt;br /&gt;
This is a table of global variables in SimCity 2000 that have been at least partially reverse engineered and given names. It is probably going to be unpleasant to update, but at least it looks nice and you can sort it.&lt;br /&gt;
&lt;br /&gt;
Data about where in the MISC chunk certain variables are located is from dfloer&#039;s sc2k-docs repository on GitHub (CC BY-SA 4.0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Uncategorized variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C702C || CWnd* || &#039;&#039;&#039;pCWndRootWindow&#039;&#039;&#039; ||  || Pointer to the MFC CWnd class for the &amp;quot;root window&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| 0x4C7104 || {{Win32_BOOL}} || &#039;&#039;&#039;bPriscillaActivated&#039;&#039;&#039; ||  || Whether or not the debug menu has been activated&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F0 || {{Win32_BOOL}} || &#039;&#039;&#039;bOptionsMusicEnabled&#039;&#039;&#039; || 0x0FFC || Whether or not music is enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C71F4 || {{Win32_BOOL}} || &#039;&#039;&#039;bSoundEffectsEnabled&#039;&#039;&#039; ||  || Whether or not sound effects are enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7318 || WORD || &#039;&#039;&#039;wSimulationSpeed&#039;&#039;&#039; || 0x0FEC || 1-5 for Paused through African Swallow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7A9C || DWORD || &#039;&#039;&#039;dwSystemMetricCYHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AC8 || DWORD || &#039;&#039;&#039;dwSystemMetricCYVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CYVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7ACC || DWORD || &#039;&#039;&#039;dwSystemMetricCXVSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXVSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C7AD4 || DWORD || &#039;&#039;&#039;dwSystemMetricCXHSCROLL&#039;&#039;&#039; ||  || Cached result from &amp;lt;code&amp;gt;GetSystemMetrics(SM_CXHSCROLL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A0 || DWORD || &#039;&#039;&#039;dwTotalBusRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Bus Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C85A4 || DWORD || &#039;&#039;&#039;dwTotalTrainRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Train Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C8600 || DWORD || &#039;&#039;&#039;dwTotalSubwayRiders&#039;&#039;&#039; ||  || Sum of all trips that entered the Subway Network&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93AC || WORD || &#039;&#039;&#039;wTotalGeneratedWaterTiles&#039;&#039;&#039; ||  || Total number of generated watered tiles from water sources&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B0 || WORD || &#039;&#039;&#039;wTotalGeneratedPowerTiles&#039;&#039;&#039; ||  || Total number of generated powered tiles from power plants&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C93B4 || WORD || &#039;&#039;&#039;wXVALTiles_TotalCount&#039;&#039;&#039; ||  || Total count of XVAL masked tiles, needed for Average Land Value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9428 || WORD || &#039;&#039;&#039;wIndustrialMixPollutionBonus&#039;&#039;&#039; ||  || -1 to 2 used to calculate the map wide Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C942C || WORD || &#039;&#039;&#039;wViewRotation&#039;&#039;&#039; || 0x0008 || 0 = north, 1 = west, 2 = south, 3 = east&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C4 || DWORD || &#039;&#039;&#039;dwArcologyPopulation&#039;&#039;&#039; || 0x1020 || Population of the city specifically in arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EE8 || DWORD || &#039;&#039;&#039;dwDisasterActive&#039;&#039;&#039; ||  || Set to 1 when disaster is active, overrides usual status bar messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9EF0 || WORD[50] || &#039;&#039;&#039;wArrBondData&#039;&#039;&#039; || 0x0610 || Array of Interest rates for each outstanding bond.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1A0 || char* || &#039;&#039;&#039;pszCityName&#039;&#039;&#039; ||   || Pointer to the city name, loaded/saved as the CNAM chunk&lt;br /&gt;
|- &lt;br /&gt;
| 0x4CA1BC || WORD || &#039;&#039;&#039;wNationalEconomyTrend&#039;&#039;&#039; || 0x005C || A growth modifier for the SimNation economic model that only affects interest rates. (0=&amp;quot;Bull Market&amp;quot;,1=&amp;quot;Steady&amp;quot;,2=&amp;quot;Recession&amp;quot;,3=&amp;quot;Depression&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E8 || WORD || &#039;&#039;&#039;wIndustrialMixBonus&#039;&#039;&#039; ||  || This is used in RCI demand generation as a bonus (cities dominated by 1 industry receive growth bonuses)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1DC || WORD || &#039;&#039;&#039;wPrisonBonus&#039;&#039;&#039; ||  || This sets if power stations get increased Police power from Prisons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1EC || WORD || &#039;&#039;&#039;wCurrentMapToolGroup&#039;&#039;&#039; ||  || Currently selected mapping tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F0 || WORD || &#039;&#039;&#039;wCityNeighborConnections1500&#039;&#039;&#039; ||  || Count of all $1500 (industrial) neighbor connections (railroad, highways)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA400 || DWORD || &#039;&#039;&#039;dwInterestRateSum&#039;&#039;&#039; ||  || The combined Total Sum of all the interest rates of outstanding bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA41C || WORD || &#039;&#039;&#039;wSubwayXUNDCount&#039;&#039;&#039; || 0x0FE8 || Seems to be mostly used for budget calculations&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA420 || WORD || &#039;&#039;&#039;wSetTriggerDisasterType&#039;&#039;&#039; || 0x0070 || The ID of the next disaster to occur&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA42C || WORD || &#039;&#039;&#039;wCityMode&#039;&#039;&#039; || 0x0004 || 0 = map editor, 1 = regular gameplay, 2 = scenario mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA440 || int || &#039;&#039;&#039;dwCityLandValue&#039;&#039;&#039; || 0x0028 || Sum of all values in XVAL&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA444 || int || &#039;&#039;&#039;dwCityFunds&#039;&#039;&#039; || 0x0014 || How much money the city has&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4C8 || WORD* || &#039;&#039;&#039;dwTileCount&#039;&#039;&#039; ||  || Pointer to an array of tile counts for every valid iTileID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4CC || DWORD || &#039;&#039;&#039;dwNewPopulations&#039;&#039;&#039; ||  || New Populations that moved into the city&#039;s zones from last count (new immigrants).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D0 || DWORD || &#039;&#039;&#039;dwCityValue&#039;&#039;&#039; || 0x0024 || Appears to have something to do with bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5D8 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoGoToFlag&#039;&#039;&#039; ||  || Auto-Go To Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F0 || WORD || &#039;&#039;&#039;wCityGarbage&#039;&#039;&#039; || 0x0040 || Entirely unused. Initialized to 0 when the city is founded, goes up by dwCityPopulation on the 22nd of every month&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F4 || WORD || &#039;&#039;&#039;wCityStartYear&#039;&#039;&#039; || 0x000C || The year the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA5F8 || DWORD || &#039;&#039;&#039;dwCityUnemployment&#039;&#039;&#039; ||  || (Population in &amp;quot;Abandoned buildings&amp;quot; x 100) / (Population in &amp;quot;Abandoned buildings&amp;quot; + TotalPopulation + 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA804|| DWORD[3] || &#039;&#039;&#039;dwNeighborGNP&#039;&#039;&#039; ||  || the GNP of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA81C || WORD || &#039;&#039;&#039;wMonsterXTHGIndex&#039;&#039;&#039; ||  || Which XTHG entry the monster&#039;s [[Thing]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA928 || DWORD || &#039;&#039;&#039;dwNationalPopulation&#039;&#039;&#039; || 0x0050 || Population of SimNation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA92C || DWORD[3] || &#039;&#039;&#039;dwNeighborFame&#039;&#039;&#039; ||  || Completely unused and always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA934 || WORD* || &#039;&#039;&#039;dwMilitaryTiles&#039;&#039;&#039; ||  || Pointer to the beginning of the military tiles in the dwTileCount array&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA938 || WORD || &#039;&#039;&#039;wNationalFedRate&#039;&#039;&#039; || 0x0058 || The national base tax rate or the &amp;quot;fed rate&amp;quot;, for calculating bond interest rates&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA93C || WORD || &#039;&#039;&#039;wCurrentDisasterType&#039;&#039;&#039; ||  || The Disaster ID for the current/ongoing disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA40 || DWORD || &#039;&#039;&#039;dwCityOrdinances&#039;&#039;&#039; || 0x0FA0 || Flags for which city [[ordinances]] are enacted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA50 || DWORD || &#039;&#039;&#039;dwPowerUsedPercentage&#039;&#039;&#039; ||  || Percentage of power capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA74 || DWORD || &#039;&#039;&#039;dwCityPopulation&#039;&#039;&#039; || 0x102C || Total city population, excluding arcologies&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10|| DWORD[3] || &#039;&#039;&#039;dwNeighborPopulation&#039;&#039;&#039; ||  || the Population of the Neighboring city&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD28 || DWORD || &#039;&#039;&#039;dwCityFame&#039;&#039;&#039; || 0x0038 || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD2C || {{Win32_BOOL}} || &#039;&#039;&#039;bYearEndFlag&#039;&#039;&#039; || 0x0E3C || Whether or not the first of the month is the start of a new year&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD44 || {{Win32_BOOL}} || &#039;&#039;&#039;bInScenario&#039;&#039;&#039; ||  || Whether or not this game is a scenario&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD58 || neighbor_city_t[4] || &#039;&#039;&#039;stNeighborCities&#039;&#039;&#039; || 0x06D8 || Array of four strings for the actual neighbor city&#039;s names (32 bytes each), clockwise from bottom left. Doesn&#039;t last beyond current game session.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADE0 || BYTE || &#039;&#039;&#039;bWeatherHeat&#039;&#039;&#039; || 0x0060 || Weather heat level (Temperature in Fahrenheit = [WeatherHeat - 100] as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE04 || DWORD || &#039;&#039;&#039;dwCityDays&#039;&#039;&#039; || 0x0010 || How many days have elapsed since the city was founded&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE0C || BYTE || &#039;&#039;&#039;bWeatherWind&#039;&#039;&#039; || 0x0064 || Weather wind speed (miles per hour as seen in newspapers)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB010 || WORD || &#039;&#039;&#039;wCityProgression&#039;&#039;&#039; || 0x0078 || Flags for city reward progression&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB014 || DWORD || &#039;&#039;&#039;dwNationalValue&#039;&#039;&#039; || 0x0054 || Gross National Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB018 || DWORD || &#039;&#039;&#039;dwCityAdvertising&#039;&#039;&#039; || 0x003C || Completely unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB01C || WORD || &#039;&#039;&#039;wCityCurrentMonth&#039;&#039;&#039; ||  || Which month of the year it is (0-indexed; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB020 || WORD || &#039;&#039;&#039;wCityElapsedYears&#039;&#039;&#039; ||  || Years since the city was founded (calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1A8 || DWORD || &#039;&#039;&#039;dwNewLocalBirthPops&#039;&#039;&#039; ||  || Seems to actually be local city newbirths in the city as opposed to new pops from immigration.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1B8 || void* || &#039;&#039;&#039;pArrSpriteHeaders&#039;&#039;&#039; ||  || Pointer to the array of loaded sprite headers&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D0 || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperSubscription&#039;&#039;&#039; || 0x1004 || Whether or not the Subscription newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3D4 || BYTE || &#039;&#039;&#039;bWeatherRain&#039;&#039;&#039; || 0x0068 || Weather humidity value (Rain in mm as seen in newspaper)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3DC || WORD || &#039;&#039;&#039;wSewerBonus&#039;&#039;&#039; ||  || Whether the city has adequate wastewater treatment facilities for use in the Pollution Divisor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E8 || WORD || &#039;&#039;&#039;wCityCurrentSeason&#039;&#039;&#039; ||  || Which season it is (0 = winter, 1 = spring, 2 = summer, 3 = autumn; calculated from dwCityDays)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB38C || microsim_t* || &#039;&#039;&#039;dwMicroSimArr&#039;&#039;&#039; ||  || Pointer to the array of [[microsim]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB404 || WORD || &#039;&#039;&#039;wCityDifficulty&#039;&#039;&#039; || 0x001C || Game difficulty (0 = no city founded, 1 = easy, 2 = medium, 3 = hard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB40C || BYTE || &#039;&#039;&#039;bWeatherTrend&#039;&#039;&#039; || 0x006C || What the [[WeatherTrend type|current weather type]] is&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB410 || DWORD || &#039;&#039;&#039;bWorkforceLE&#039;&#039;&#039; ||  || Workforce Life Expectancy &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB430 || WORD[17] || &#039;&#039;&#039;wCityInventionYears&#039;&#039;&#039; || 0x0738 || What years different technologies are invented in (see: [[Inventions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB454 || DWORD || &#039;&#039;&#039;dwCityCrime&#039;&#039;&#039; || 0x002C || Sum of all values in XCRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB458 || WORD || &#039;&#039;&#039;wCityCenterXCoord&#039;&#039;&#039; ||  || The X location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB45C || WORD || &#039;&#039;&#039;wCityCenterYCoord&#039;&#039;&#039; ||  || The Y location of where the Simulator deems to be the &amp;quot;city center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB460 || DWORD || &#039;&#039;&#039;dwWorkforcePercent&#039;&#039;&#039; ||  || Workforce Percent&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB464 || WORD || &#039;&#039;&#039;wCurrentCityToolGroup&#039;&#039;&#039; ||  || Currently selected city tool group&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B0 || {{Win32_BOOL}} || &#039;&#039;&#039;bAutoBudgetFlag&#039;&#039;&#039; ||  || When set to 1, the budget window will not pop up in January nor will there be a Fiscal Warning given for negative CityFunds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B4 || DWORD || &#039;&#039;&#039;dwWorkforceEQ&#039;&#039;&#039; ||  || Workforce Educational Quotient &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4B8 || DWORD || &#039;&#039;&#039;dwWaterUsedPercentage&#039;&#039;&#039; ||  || Percentage of water capacity in use&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4BC || {{Win32_BOOL}} || &#039;&#039;&#039;bNewspaperExtra&#039;&#039;&#039; || 0x1008 || Whether or not the Extra!!! newspaper is checked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4CC || void* || &#039;&#039;&#039;dwBudgetArr&#039;&#039;&#039; ||  || Pointer to the [[budget array]] (needs some reverse engineering and/or documentation work)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D4 || {{Win32_BOOL}} || &#039;&#039;&#039;bNoDisasters&#039;&#039;&#039; || 0x1000 || Whether or not disasters should be disabled (also disables city council autonomy)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4D8 || WORD || &#039;&#039;&#039;wCityNeighborConnections1000&#039;&#039;&#039; ||  || Count of all $1000 (commercial) neighbor connections (roads)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4DC || WORD[3] || &#039;&#039;&#039;wNeighborStringNameID&#039;&#039;&#039; ||  || A string lookup ID for the neighbor city&#039;s name, the appropriate string is loaded whenever map is loaded. There are 36 city names.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E0 || WORD || &#039;&#039;&#039;wStadiumSportsTypes&#039;&#039;&#039; ||  || Flags for the currently available &amp;quot;Sports types&amp;quot; (+1 Football, +2 baseball, +4 Soccer, +8 Cricket, +16 Rugby)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E4 || BYTE || &#039;&#039;&#039;bMilitaryBaseType&#039;&#039;&#039; || 0x0EF4 || Military base type (0 = not offered yet, 1 = declined/no location, 2 = army, 3 = air force, 4 = navy, 5 = missile silos)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4E8 || DWORD || &#039;&#039;&#039;dwCityBonds&#039;&#039;&#039; || 0x0018 || Total number of current outstanding city bonds&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8F8 || WORD || &#039;&#039;&#039;wCityResidentialDemand&#039;&#039;&#039; || 0x0718 || Residential demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FA || WORD || &#039;&#039;&#039;wCityCommericalDemand&#039;&#039;&#039; || 0x071C || Commercial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC8FC || WORD || &#039;&#039;&#039;wCityIndustrialDemand&#039;&#039;&#039; || 0x0720 || Industrial demand (-2000 to +2000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC910 || DWORD || &#039;&#039;&#039;dwCityPollution&#039;&#039;&#039; ||  || Sum of all Pollution in city.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC918 || WORD || &#039;&#039;&#039;wScenarioDisasterID&#039;&#039;&#039; ||  || ID of the disaster set for the given scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91A || BYTE || &#039;&#039;&#039;bScenarioDisasterX&#039;&#039;&#039; ||  || X coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91B || BYTE || &#039;&#039;&#039;bScenarioDisasterY&#039;&#039;&#039; ||  || Y coordinate for preparing the disaster.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91C || BYTE || &#039;&#039;&#039;wScenarioTimeLimitMonths&#039;&#039;&#039; ||  || Time limit of the scenario in months.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC91E || DWORD || &#039;&#039;&#039;dwScenarioCitySize&#039;&#039;&#039; ||  || Target total population for the scenario exceeded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC922 || DWORD || &#039;&#039;&#039;dwScenarioResPopulation&#039;&#039;&#039; ||  || Target Residential population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC926 || DWORD || &#039;&#039;&#039;dwScenarioComPopulation&#039;&#039;&#039; ||  || Target Commericial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92A || DWORD || &#039;&#039;&#039;dwScenarioIndPopulation&#039;&#039;&#039; ||  || Target Industrial population for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC92E || DWORD || &#039;&#039;&#039;dwScenarioCashGoal&#039;&#039;&#039; ||  || Cash goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC932 || DWORD || &#039;&#039;&#039;dwScenarioLandValueGoal&#039;&#039;&#039; ||  || Land Value goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC936 || WORD || &#039;&#039;&#039;wScenarioLEGoal&#039;&#039;&#039; ||  || Workforce LE goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC938 || WORD || &#039;&#039;&#039;wScenarioEQGoal&#039;&#039;&#039; ||  || Workforce EQ goal target for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93A || WORD || &#039;&#039;&#039;wScenarioPollutionLimit&#039;&#039;&#039; ||  || Pollution limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC93E || WORD || &#039;&#039;&#039;wScenarioCrimeLimit&#039;&#039;&#039; ||  || Crime limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC942 || WORD || &#039;&#039;&#039;wScenarioTrafficLimit&#039;&#039;&#039; ||  || Traffic limit for the scenario.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC946 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal1&#039;&#039;&#039; ||  || Scenario building goal one.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC947 || BYTE || &#039;&#039;&#039;bScenarioBuildingGoal2&#039;&#039;&#039; ||  || Scenario building goal two.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC948 || WORD || &#039;&#039;&#039;wScenarioBuildingGoal1Count&#039;&#039;&#039; ||  || Scenario building goal one count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC94A || WORD || &#039;&#039;&#039;wScenarioBuildingGoal2Count&#039;&#039;&#039; ||  || Scenario building goal two count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC950 || WORD[15] || &#039;&#039;&#039;[[wSelectedSubtool]]&#039;&#039;&#039; ||  || City tool selection array referencing the selected subtool.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB68 || WORD || &#039;&#039;&#039;wHighlightedTileX1&#039;&#039;&#039; ||  || The X1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB6C || WORD || &#039;&#039;&#039;wHighlightedTileX2&#039;&#039;&#039; ||  || The X2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB70 || WORD || &#039;&#039;&#039;wHighlightedTileY1&#039;&#039;&#039; ||  || The Y1 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB74 || WORD || &#039;&#039;&#039;wHighlightedTileY2&#039;&#039;&#039; ||  || The Y2 coordinate of the tile area currently highlighted on the map&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB7C || DWORD || &#039;&#039;&#039;dwLFSRState&#039;&#039;&#039; ||  || Randomness state for the linear feedback shift register PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CDB80 || DWORD || &#039;&#039;&#039;dwLCGState&#039;&#039;&#039; ||  || Randomness state for the linear congruential generator PRNG&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CE8C0 || AFX_CORE_STATE || &#039;&#039;&#039;pCWinApp&#039;&#039;&#039; ||  || Pointer to a CWinApp (needs reverse engineering -- maybe IDA picked this one out on its own?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6520 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBuffer&#039;&#039;&#039; ||  || current lookup ID for current cheat being possibly entered, and then a return value once completed?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E6524 || DWORD || &#039;&#039;&#039;dwCheatsHandlingBufferLength&#039;&#039;&#039; ||  || current string length for the current possibly valid cheat attempting to be entered&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C0 || WORD || &#039;&#039;&#039;wPassengerPlanes&#039;&#039;&#039; ||  || A total count of Passenger Plane things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C4 || WORD || &#039;&#039;&#039;wActiveHelicopters&#039;&#039;&#039; ||  || A total count of Helicopter things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99C8 || WORD || &#039;&#039;&#039;wActiveCargoships&#039;&#039;&#039; ||  || A total count of Cargo Ship things&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99CC || WORD || &#039;&#039;&#039;wMaxisMan&#039;&#039;&#039; ||  || A total count of MaxisMan things.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D0 || WORD || &#039;&#039;&#039;wSailingBoats&#039;&#039;&#039; ||  || A total count of Sailing boats from Marinas.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D4 || WORD || &#039;&#039;&#039;wMonster&#039;&#039;&#039; ||  || If there is an active monster, it&#039;s set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99D8 || WORD || &#039;&#039;&#039;wActiveTrains&#039;&#039;&#039; ||  || A total count of Train things (train entities, not &#039;tiles&#039; of train)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99DC || WORD || &#039;&#039;&#039;wTornados_XTHGs&#039;&#039;&#039; ||  || Active Tornado XTHGs&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E99E0 || DWORD || &#039;&#039;&#039;dwHelicopterThing&#039;&#039;&#039; ||  || A &#039;thing&#039; for Helicopter thing (will return to this one day)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EA7F0 || WORD || &#039;&#039;&#039;wTileHighlightActive&#039;&#039;&#039; ||  ||  Tile highlight active state: 0 - inactive, 1 - active&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Terrain generation variables&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94C0 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasOcean&#039;&#039;&#039; || 0x0E44 || Whether or not the city was generated with an ocean, also determines if City is eligible for Naval Base.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1E0 || WORD || &#039;&#039;&#039;wCityTerrainSliderHills&#039;&#039;&#039; ||  || Slider value for hill coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA818 || __int16 || &#039;&#039;&#039;wWaterLevel&#039;&#039;&#039; || 0x0E40 || Water table level&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAAF8 || WORD || &#039;&#039;&#039;wCityTerrainSliderWater&#039;&#039;&#039; ||  || Slider vvalue for water coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CADD8 || WORD || &#039;&#039;&#039;wCityTerrainSliderTrees&#039;&#039;&#039; ||  || Slider value for tree coverage during terrain generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F8 || {{Win32_BOOL}} || &#039;&#039;&#039;bCityHasRiver&#039;&#039;&#039; || 0x0E48 || Whether or not the city was generated with a river&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
IF YOU&#039;RE READING THIS, HERE&#039;S AN EASY TASK:&lt;br /&gt;
These need to be put into tables. I&#039;m too tired to do it now.&lt;br /&gt;
&lt;br /&gt;
.bss:004CC918     wScenarioDisasterID dw ?                ; DATA XREF: sub_4345C0:loc_434650↑o&lt;br /&gt;
.bss:004CC918                                             ; sub_4345C0:loc_43467E↑o ...&lt;br /&gt;
.bss:004CC91A     bScenarioDisasterX db ?                 ; DATA XREF: sub_4345C0+1D6↑r&lt;br /&gt;
.bss:004CC91B     bScenarioDisasterY db ?                 ; DATA XREF: sub_4345C0+1CB↑r&lt;br /&gt;
.bss:004CC91C     wScenarioTimeLimitMonths dw ?           ; DATA XREF: _SimulationProcessTick+517↑w&lt;br /&gt;
.bss:004CC91C                                             ; sub_4345C0+CB↑o&lt;br /&gt;
.bss:004CC91E     dwScenarioCitySize dd ?                 ; DATA XREF: _SimulationProcessTick+402↑r&lt;br /&gt;
.bss:004CC91E                                             ; sub_4345C0+D8↑r ...&lt;br /&gt;
.bss:004CC922     dwScenarioResPopulation dd ?            ; DATA XREF: _SimulationProcessTick+411↑r&lt;br /&gt;
.bss:004CC922                                             ; sub_4345C0+EB↑r ...&lt;br /&gt;
.bss:004CC926     dwScenarioComPopulation dd ?            ; DATA XREF: _SimulationProcessTick+423↑r&lt;br /&gt;
.bss:004CC926                                             ; sub_4345C0+FE↑r ...&lt;br /&gt;
.bss:004CC92A     dwScenarioIndPopulation dd ?            ; DATA XREF: _SimulationProcessTick+438↑r&lt;br /&gt;
.bss:004CC92A                                             ; sub_4345C0+111↑r ...&lt;br /&gt;
.bss:004CC92E     dwScenarioCashGoal dd ?                 ; DATA XREF: _SimulationProcessTick+455↑r&lt;br /&gt;
.bss:004CC92E                                             ; sub_4345C0+124↑r ...&lt;br /&gt;
.bss:004CC932     dwScenarioLandValueGoal dd ?            ; DATA XREF: _SimulationProcessTick:loc_413981↑r&lt;br /&gt;
.bss:004CC932                                             ; sub_4345C0+137↑r ...&lt;br /&gt;
.bss:004CC936     word_4CC936     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_413992↑r&lt;br /&gt;
.bss:004CC936                                             ; sub_4345C0+14A↑o&lt;br /&gt;
.bss:004CC938     word_4CC938     dw ?                    ; DATA XREF: _SimulationProcessTick:loc_4139A3↑r&lt;br /&gt;
.bss:004CC938                                             ; sub_4345C0+157↑o&lt;br /&gt;
.bss:004CC93A     wScenarioPollutionLimit dd ?            ; DATA XREF: _SimulationProcessTick:loc_4139B4↑r&lt;br /&gt;
.bss:004CC93A                                             ; sub_4345C0+164↑r ...&lt;br /&gt;
.bss:004CC93E     wScenarioCrimeLimit dd ?                ; DATA XREF: _SimulationProcessTick:loc_4139C9↑r&lt;br /&gt;
.bss:004CC93E                                             ; sub_4345C0+177↑r ...&lt;br /&gt;
.bss:004CC942     wScenarioTrafficLimit dd ?              ; DATA XREF: _SimulationProcessTick:loc_4139DE↑r&lt;br /&gt;
.bss:004CC942                                             ; sub_4345C0+18A↑r ...&lt;br /&gt;
.bss:004CC946     bScenarioBuildingGoal1 db ?             ; DATA XREF: _SimulationProcessTick+4D5↑r&lt;br /&gt;
.bss:004CC947     bScenarioBuildingGoal2 db ?             ; DATA XREF: _SimulationProcessTick+4F5↑r&lt;br /&gt;
.bss:004CC948     wScenarioBuildingGoal1Count dw ?        ; DATA XREF: _SimulationProcessTick+4DF↑r&lt;br /&gt;
.bss:004CC948                                             ; sub_4345C0+19D↑o&lt;br /&gt;
.bss:004CC94A     wScenarioBuildingGoal2Count dw ?        ; DATA XREF: _SimulationProcessTick+4FF↑r&lt;br /&gt;
.bss:004CC94A                                             ; sub_4345C0+1AA↑o&lt;br /&gt;
.bss:004CC94C                     align 10h&lt;br /&gt;
.bss:004CC950     ; __int16 wSelectedSubtoolBulldozer[]&lt;br /&gt;
.bss:004CC950     wSelectedSubtoolBulldozer dw ?          ; DATA XREF: sub_406FD0+AC↑r&lt;br /&gt;
.bss:004CC950                                             ; sub_40E250+18C↑w ...&lt;br /&gt;
.bss:004CC952     wSelectedSubtoolNature dw ?             ; DATA XREF: sub_422200+B6↑w&lt;br /&gt;
.bss:004CC952                                             ; sub_442440+74↑r ...&lt;br /&gt;
.bss:004CC954     wSelectedSubtoolDispatch dw ?           ; DATA XREF: sub_422200+D5↑w&lt;br /&gt;
.bss:004CC954                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F2F7↑r ...&lt;br /&gt;
.bss:004CC956     wSelectedSubtoolPower dw ?              ; DATA XREF: sub_422200+F4↑w&lt;br /&gt;
.bss:004CC956                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F336↑r ...&lt;br /&gt;
.bss:004CC958     wSelectedSubtoolWater dw ?              ; DATA XREF: sub_422200+113↑w&lt;br /&gt;
.bss:004CC958                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F3DD↑r ...&lt;br /&gt;
.bss:004CC95A     wSelectedSubtoolRewards dw ?            ; DATA XREF: sub_422200:loc_42231F↑w&lt;br /&gt;
.bss:004CC95A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F462↑r ...&lt;br /&gt;
.bss:004CC95C     wSelectedSubtoolRoads dw ?              ; DATA XREF: sub_422200+155↑w&lt;br /&gt;
.bss:004CC95C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F4BF↑r ...&lt;br /&gt;
.bss:004CC95E     wSelectedSubtoolRail dw ?               ; DATA XREF: sub_422200+174↑w&lt;br /&gt;
.bss:004CC95E                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F558↑r ...&lt;br /&gt;
.bss:004CC960     wSelectedSubtoolPorts dw ?              ; DATA XREF: sub_422200+193↑w&lt;br /&gt;
.bss:004CC960                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F60F↑r&lt;br /&gt;
.bss:004CC962     wSelectedSubtoolResidential dw ?        ; DATA XREF: sub_40E250+1B8↑w&lt;br /&gt;
.bss:004CC962                                             ; sub_422200+1B2↑w ...&lt;br /&gt;
.bss:004CC964     wSelectedSubtoolCommercial dw ?         ; DATA XREF: sub_40E250+1C4↑w&lt;br /&gt;
.bss:004CC964                                             ; sub_422200+1D1↑w ...&lt;br /&gt;
.bss:004CC966     wSelectedSubtoolIndustrial dw ?         ; DATA XREF: sub_40E250+1D0↑w&lt;br /&gt;
.bss:004CC966                                             ; sub_422200+1F0↑w ...&lt;br /&gt;
.bss:004CC968     wSelectedSubtoolEducation dw ?          ; DATA XREF: sub_422200+20F↑w&lt;br /&gt;
.bss:004CC968                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F6F7↑r&lt;br /&gt;
.bss:004CC96A     wSelectedSubtoolServices dw ?           ; DATA XREF: sub_422200+22E↑w&lt;br /&gt;
.bss:004CC96A                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F729↑r ...&lt;br /&gt;
.bss:004CC96C     wSelectedSubtoolParks dw ?              ; DATA XREF: sub_422200+24D↑w&lt;br /&gt;
.bss:004CC96C                                             ; _CSimCityView_DoLeftMouseCityMode:loc_43F787↑r ...&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Map data pointers&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the variable.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9430 || void* || &#039;&#039;&#039;dwMapXPLC&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for police coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C9F58 || void* || &#039;&#039;&#039;dwMapXTER&#039;&#039;&#039; ||  || Pointer to a 128x128 map of terrain data (1 byte of type map_XTER_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA1F0 || void* || &#039;&#039;&#039;dwMapXZON&#039;&#039;&#039; ||  || Pointer to a 128x128 map of zone and corner info (1 byte of type map_XZON_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3EC || void* || &#039;&#039;&#039;dwMapXMIC&#039;&#039;&#039; ||  || Pointer to an array of type map_XMIC_t[150] containing MicroSim data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA198 || void* || &#039;&#039;&#039;dwMapXLAB&#039;&#039;&#039; ||  || Pointer to an array of type map_XLAB_t[256].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA434 || void* || &#039;&#039;&#039;dwMapXTHG&#039;&#039;&#039; ||  || Pointer to an array of type map_XTHG_t[256] containing [[Thing]]s&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA448 || void* || &#039;&#039;&#039;dwMapXPOP&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for population density (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA4D8 || void* || &#039;&#039;&#039;dwMapXCRM&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for crime (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA600 || void* || &#039;&#039;&#039;dwMapXTXT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of [[XTXT]] IDs (1 byte per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA828 || void* || &#039;&#039;&#039;dwMapXPLT&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for pollution (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA940 || void* || &#039;&#039;&#039;dwMapXTRF&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; for traffic (1 byte per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA78 || void* || &#039;&#039;&#039;dwMapXFIR&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; for fire coverage (1 byte per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAB10 || void* || &#039;&#039;&#039;dwMapXBIT&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile flags (1 byte of type map_[[XBIT]]_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAE10 || void* || &#039;&#039;&#039;dwMapALTM&#039;&#039;&#039; ||  || Pointer to a 128x128 map of altitude data (1 byte of type map_ALTM_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB028 || void* || &#039;&#039;&#039;dwMapXROG&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of rate of growth data (1 byte of unknown type per 4x4 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB0A8 || void* || &#039;&#039;&#039;dwMapXVAL&#039;&#039;&#039; ||  || Pointer to a 64x64 &amp;quot;minimap&amp;quot; of land value (1 byte of &amp;lt;code&amp;gt;(full value / 1000 - 1)&amp;lt;/code&amp;gt; per 2x2 block)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB1D0 || void* || &#039;&#039;&#039;dwMapXUND&#039;&#039;&#039; ||  || Pointer to a 128x128 map of underground map data (1 byte of type map_XUND_t per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC470 || void* || &#039;&#039;&#039;dwMapXGRP&#039;&#039;&#039; ||  || Pointer to the historical graph data&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC4F0 || void* || &#039;&#039;&#039;dwMapXBLD&#039;&#039;&#039; ||  || Pointer to a 128x128 map of tile IDs (1 byte of type enumTileID per tile)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F4 || void* || &#039;&#039;&#039;dwMapTempValMap1&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6F8 || void* || &#039;&#039;&#039;dwNaturalBeauty_ResCom&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply, terrain slopes, parks).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC6FC || void* || &#039;&#039;&#039;dwMapTempValMap2&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (pollution?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CC778 || void* || &#039;&#039;&#039;dwNaturalBeauty_Industrial&#039;&#039;&#039; ||  || Pointer to a 32x32 &amp;quot;minimap&amp;quot; of 4x4 parcels needed for land value calculation (this includes surface water, water supply).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Simulation Arrays&lt;br /&gt;
|-&lt;br /&gt;
! {{tooltip|Address|The address of the variable.}} ! {{tooltip|Type|What type this variable is declared as.}} ! {{tooltip|Name|The name of the array.}} ! {{tooltip|MISC offset|If this variable is stored in the .sc2 MISC chunk, this is where in the chunk it&#039;s stored.}} ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 004C94B4 || void* || &#039;&#039;&#039;pRawPopTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the Population Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAA70 || void* || &#039;&#039;&#039;pLETable&#039;&#039;&#039; ||  || Pointer to 20-item array for the LE Table, these are as aggregate sums for the entire age group (LE/RawPop=AgeGroupLE).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C94BC || void* || &#039;&#039;&#039;pEQTable&#039;&#039;&#039; ||  || Pointer to 20-item array for the EQ Table, these are as aggregate sums for the entire age group (EQ/RawPop=AgeGroupEQ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3F0 || void* || &#039;&#039;&#039;pIndividualIndPops&#039;&#039;&#039; ||  || Pointer to 11-item array for the Raw Populations for City Industries Table.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CB3E0 || void* || &#039;&#039;&#039;pIndividualIndTaxRate&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s Tax Rates.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA3F4 || void* || &#039;&#039;&#039;pIndividualIndDemands&#039;&#039;&#039; ||  || Pointer to 11-item array for the each of the Industrial Group&#039;s current Demand.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA428 || void* || &#039;&#039;&#039;pZonePops&#039;&#039;&#039; ||  || Pointer to 8-item array of Zone Populations (/10): &#039;&#039;&#039;AllTotalPops, Light Res, Dense Res, Light Com, Dense Com, Light Ind, Dense Ind, Abandoned.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4CA930 || void* || &#039;&#039;&#039;zonePopsBase&#039;&#039;&#039; ||  || Pointer to 3-item array of Zone (light+dense combined) Populations (/10): &#039;&#039;&#039;Residential, Commercial, Industrial&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 0x4CAD10 || void* || &#039;&#039;&#039;pNeighborData&#039;&#039;&#039; ||  || Pointer to Neighbor Populations&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Game data]]&lt;/div&gt;</summary>
		<author><name>AF</name></author>
	</entry>
</feed>