Downloading and Installing sc2kfix
The latest release of the sc2kfix plugin can be downloaded from the releases page on the GitHub repository. Click on the "Download sc2kfix" link at the top of this page to open the releases page. The plugin is a single DLL file named winmm.dll.
- Download the latest release of the sc2kfix plugin. You can keep this file in your Downloads folder for now.
- Hey testers! If you want to try out the latest features as they're developed, check out the automated builds on our GitHub Actions page!
- If you are installing a fresh copy of SimCity 2000, insert your Special Edition CD and navigate to the CD drive. Open the WIN95 folder; there should be a folder inside called SC2K. Copy the SC2K folder to somewhere writable on your hard drive, like your desktop, your Documents folder, or a directory other than Program Files that you install games to.
- If you want to see the intro video and the WillTV interviews (Release 9 and newer), create a folder in the SC2K folder that you copied to your hard drive called MOVIES and copy the .SMK video files from the CD's DATA folder into it.
- Copy the winmm.dll that you downloaded in the first step to the SC2K folder that you copied to your hard drive. You should now have a copy of winmm.dll alongside the game's simcity.exe executable.
- Optionally, create a shortcut to simcity.exe on your desktop or in your Start Menu for easier access. You can also add simcity.exe as a Non-Steam Game in your Steam library.
- If you are running the game on Linux with Wine or Proton, configure your launcher of choice with a DLL override for the winmm library to prefer "native, then built-in" DLL load order.
You are now ready to play SimCity 2000! When you first start the game, sc2kfix will prompt you for a default mayor name and an organization name. These are the "registration" names that the game shows when it launches. The default mayor name is also used to fill out the mayor name in the New City dialog. You can change these at any time in the sc2kfix Settings dialog (see the Configuring sc2kfix section).
Configuring sc2kfix
Every feature and change in sc2kfix can be configured through an in-game settings dialog. You can open the settings dialog from the new sc2kfix Settings button on the main menu, or while playing the game from the Options menu on the menu bar. Settings with an asterisk (*) next to them take effect when the game is restarted.
Pressing the OK button immediately saves your settings and closes the dialog. The Cancel button closes the dialog without saving any settings. The Defaults and Vanilla buttons load (but do not immediately save) the default sc2kfix settings and a minimal, vanilla SimCity 2000 experience respectively.
Command-Line Arguments
sc2kfix adds the following arguments that can be passed to SimCity 2000 when starting it via a shortcut, a launcher (including Steam), or a command line:
- -advquery: Enables an advanced query dialog when querying on a tile with the Alt key held.
- -console: Opens a console window along with the game, described in the section "Using the sc2kfix Console".
- -debugall: Forces all sc2kfix modules to run with every debug flag enabled, outputting all possible debugging information to both the console and to the sc2kfix.log file.
- -defaults: Skips loading any configured sc2kfix settings from the registry. Using this argument does not overwrite your existing settings.
- -skipintro: Skips loading the intro videos when the game starts.
- -skipmods: Skips loading native code mods from the mods folder.
Game Settings
- Default Mayor Name: This is the default mayor name that populates the New City dialog's Mayor Name text box.
- Organization Name: This is the name that shows up on the "registered to" dialog when the game starts.
Quality of Life / Performance Settings
- Continue to play music when the game is in the background: This setting prevents SimCity 2000 from stopping the actively-playing song when you alt-tab or minimize the game window. Defaults to on.
- Use higher quality sounds: sc2kfix includes multiple higher quality versions of the vanilla SimCity 2000 sounds from other versions of the game; enabling this setting plays the higher quality versions in place of the original, lower-quality versions from the Windows 95 version. Defaults to on.
- Shuffle music instead of looping predefined playlist: SimCity 2000 has a playlist of songs that it loops through when there's no event-based music playing. Enabling this setting shuffles the playlist after every loop, taking care not to play the same song twice in a row. Defaults to off.
- *Use multithreaded music engine: This setting enables a new multithreaded music engine that removes stuttering and freezes when the game loads new music. Defaults to on.
- Display city growth in real-time instead of in batches: SimCity 2000 was designed to run on computers several orders of magnitude less powerful than a modern gaming PC, and by default it only updates city growth in the display when the view is moved, zoomed in or out, or on the 24th day of each month. Enabling this setting updates visible tiles every simulated day. Defaults to on.
- Play MP3 music instead of MIDI music if present: If MP3 versions of the game's music are present in the SOUNDS folder with the same name format as the MIDI files (10000.mp3, 10001.mp3, etc.), enabling this option will allow the music thread to play them instead of playing the MIDI files through the Windows MIDI sequencer. Requires the multithreaded music engine. Defaults to off.
Interface Settings
- *Use DOS/Mac style floating dialog instead of status bar: The Windows port of SimCity 2000 uses a status bar docked to the bottom of the game window to show the active tool, city demands/status information, and weather. The DOS and Mac versions instead use a floating window that can be freely moved around and shows the weather as an icon instead of purely as text. sc2kfix reimplements this floating dialog, which this setting enables. Defaults to off.
- Display full SimCalendar date in title bar: SimCity 2000 defaults to showing only the month and year of the simulation in the title bar. Enabling this setting shows the full simulation date in the title bar in real time. Yes, there are only 25 days in a SimCalendar month. Defaults to on.
- Use grammar-corrected and disambiguated dialog strings: A number of dialog messages have typos, poor formatting, or otherwise communicate their meaning in unclear fashions. Enabling this setting reformats these messages for better grammar and clarity. Defaults to on.
- Always skip introduction videos: Enabling this setting is akin to always passing the -skipintro command-line argument to SimCity 2000. Defaults to off.
sc2kfix Core Settings
- *Always start the sc2kfix console on game startup: This setting forces sc2kfix to load the development and debugging console regardless of whether or not the -console command-line parameter has been passed to the game. Defaults to off.
- *Check for sc2kfix updates on game startup: When enabled, sc2kfix will check the GitHub repository to see if there is a newer release available, and adds an update notification to the game's main menu if there is one. Defaults to on.
- *Skip loading any installed mods on startup: This setting forces sc2kfix to skip loading any mods, including both native code and Kuroko modules. Defaults to off.
Gameplay Mod Settings (In Development)
Mod settings are being moved to a separate menu that is in development. Check back later.
Native Code Mods (In Development)
This section is in development. Check back later.
Building from Source
sc2kfix has been developed using Visual C++ 2022 and is designed to be built with a current Microsoft C++ compiler and build system. If you want to run the latest cutting-edge version of sc2kfix, you should download the latest CI artifact from the GitHub Actions page. That being said, if you want to download the source code and built it yourself, here are our recommendations:
- We highly recommend using Visual C++ 2022. sc2kfix currently only uses features from the C++14 standard, but since Visual C++ 2015 reaches end of life on October 14, 2025, the build requirements for sc2kfix may be upgraded to C++17 at that time.
- The only supported MSBuild configuration, Release|x86, is the only one in the solution file. Please do not modify the solution file to build for any other configuration.
- Our primary test systems are Windows 11 24H2 and Windows 10 22H2. Limited testing is done on Windows 7 Build 7601. Testing on Windows 7 may be discontinued entirely in the future as extended support for Windows 7 ended on January 14, 2020. Please ensure you are running a supported operating system before submitting any bug reports.
After cloning the sc2kfix Git repository, you can open the Visual Studio solution file and immediately build the solution to produce the winmm.dll output file that contains the sc2kfix plugin. Copy the winmm.dll output file from the Release directory to your SC2K directory and run SIMCITY.EXE to play the game with your newly-built sc2kfix plugin.
Using the sc2kfix Console
sc2kfix implements a development and debugging console that can be activated by launching the game with the -console command-line argument. This console integrates a simple scripting system with an interactive command interpreter that will be familiar to anyone with network administration experience. The syntax of the console command interpreter is not entirely unlike that of a Juniper JUNOS or Cisco IOS system.
Suffixing any command with a question mark (?) as an argument will return a list of subcommands or parameters for that command. You can also type a question mark (or the word "help") at the root of the command tree to see a list of all root level commands available:
> ? clear Clear all variables echo Print to console help Display this help run Run console script set Modify game and plugin behaviour show Display various game and plugin information unset Modify game and plugin behaviour > run ? run kuroko Enters the Kuroko REPL run <filename> Executes a file as a Kuroko module > show microsim ? show microsim <id> Show specific microsim data show microsim list Show list of provisioned microsims > _
Memory Protection
The sc2kfix console does its best to protect you from yourself, insofar as any command that takes user parameters to read from/write to memory will catch invalid memory addresses and fail softly, reporting a caught segmentation fault instead of crashing. The console cannot protect you from writing random values to valid memory, however, so if you plan on setting memory values, do note that sc2kfix is not able to stop writes that may corrupt game state and/or any saved cities you may have loaded.
> show memory Usage: show memory <address> [operand_size] [range_size] <address>: Address in hexadecimal [operand_size]: Optional, one of: { byte, word, dword, range } (default dword) [range_size]: Size of range if operand_size is "range" (default 16) > show memory 0x4CA444 0x004CA444: (dword) 0x000C3661 > show memory 0x1234 [ERROR] CORE: Segmentation fault caught. Don't do that again. > _
Running Kuroko from the Console
The Kuroko programming language's interactive REPL has been included as part of embedding Kuroko into sc2kfix. You can launch the Kuroko REPL from the console with the run kuroko command. When the REPL exits via the Kuroko exit() builtin function, control of the console is handed back over to the sc2kfix console thread.
You can also run Kuroko scripts by entering the run <script> command. The console thread will search for a file with the given name, followed by the given name with the extension .krk suffixed. If a suitable file is found, the file is loaded into memory and sent to the Kuroko virtual machine's main thread, which takes over control of the console, runs the script, and finally hands control back over to the sc2kfix console thread when the script exits.
Interacting with Mods
sc2kfix loads native code mods from DLLs in the mods folder on startup if present and if the -skipmods command-line argument isn't passed to SimCity 2000. These mods can be called by hooks in the game code inserted by sc2kfix, and can add new commands to the console. Mods may add subcommands to the set and show console commands.
You can see a list of loaded native code mods with the show mods command, and see the same list with lists of all their hooked functions with the show mods detail command.