Repository navigation
OpenSC2K 0.2.0
OpenSC2K 0.2.0
Includes Windows x64 and arm64 (standard and portable), Linux x64 and arm64, and universal macOS packages, with SHA-256 checksums.
Your own SimCity 2000 Special Edition for Windows 95 (1996) files are required. Original game assets are not included.
CI passed the generated-data suite, editor parsing, and startup checks with Dummy audio. The full local release suite and cross-platform gameplay checks are not run by this workflow.
Windows packages are unsigned. The macOS app is ad-hoc signed and is not notarized. Linux x64 requires GTK 3 and WebKitGTK 4.1. The arm64 packages cannot show the newspaper.
Change Highlights:
- Faster game engine. The simulation, file formats and rendering now run in a native Rust library, so the game is much faster, especially on large maps.
- Maps can now be up to 4096×4096. Maps larger than 128x128 use the new SC2X save format.
- More game versions can be imported. You can now import from the DOS, Macintosh, Windows 3.x and demo versions, and from mounted CD-ROMs.
- New music playback. MIDI music now plays through FluidSynth, using your system's General MIDI sound set or a SoundFont you choose.
- ARM64 builds. There are now Windows and Linux arm64 packages.
- Rebindable controls. You can rebind keyboard and mouse controls in a new Controls tab.
- Tool improvements. Tool groups remember your last subtool. Holding the mouse button repeats single-click placement.
- Interface additions. Option to rename your city, Tunnels and Subways views, fixed the Zones data view, fixed neighbor connection signs.
- The newspaper now works in every package.
- SCURK. New graphical tile browser and better artwork copying.
- New Debug menu, debug layers and Tile Inspector.
Changes since v0.1.3 (175 commits)
2e9fc8b2Update last published version to 0.1.3 [skip ci]9f08a6eeFix interface click feedback across SCURK controls4b4b3c8cRemove the SCURK sidebar tile filter5d1caad6Move the SCURK tile selector above the canvas61afb5eaAdd a graphical SCURK tile browser with category filters7c7387c7Show all SCURK tiles when the browser filter is empty70b86acfDocument first-run Godot importb451fa9dClarify SCURK copying and preview matching artwork0677f529Sync SCURK source and working list scrolling2fe466c3Allow SCURK artwork copies between matching footprintsaecdbed5Filter and animate SCURK copy previews06037fafShow zones under trees and power linesd01bc91dImprove SCURK copy selection and pixel comparison6280ab57Clarify size differences and keep copy previews animated1bfbd4fcTest suite refactorb54c3742Draw zones in place of flat ground under rubble, parks, trees, and power lines (fix #76 and #77)52ba330eRepeat single-click placement on each new tile while the button is held (fixes #80)b90ebc4bReopen each tool group on its last selected subtool (fixes #83)f6c83e9bCenter the city view on right click for any selected tool; add Controls settings for right and middle mouse buttons with Center Map or Context Menu (Center Map, Query Tile, Bulldoze Tile) (fixes #82)746b9186Add experimental larger city sizes (640x640, 1024x1024)537aaa19Speed up GPU region builds: packed per-tile culling bounds, altitude-limited spans, int-keyed tile shortcut, lazy draw grids27ae8433Stream GPU region results from continuously fed workers; index visible and wanted regions for the schedulerb7d1003bCompute GPU tile culling bounds from bound city arrays and cached sprite sizes; add overview and frame-rate options to the region benchmarkab880ef2Cut GPU tile build allocations: draws double as foreground commands, no recorder for shortcut tiles, lazy region occlusion grids5c9d2fa1Skip repeated culling key checks within a GPU region revision; add coverage time and simulation churn to the region benchmark24d5ac21Upload each GPU worker atlas at most once per poll5c255a9ePass secrets to the reusable test workflow so it can check out private assets5bec970dAdd the native Rust simulation library and run the growth phase in it28fd5fbaAdd a simulation days benchmark for supplied or generated cities6dbaf843Run data maps, power, water, traffic, and the slice budget in the native simulation170d1c43Run budget, demand, aftermath, industry, nation, education, graphs, milestones, scenario, and annual facility phases natively91c7b923Run disasters, moving things, mayor approval, military proposals, and the tile recount natively24d11ef4Run the day schedule natively in one call per day5d26e0a5Run the city load scans nativelyeffdf972Remove the GDScript simulation bodies that the native library replaces372c5a54Replace the GDScript moving-thing ticks with native unit tests and run cargo tests in validation183b307dReplace the GDScript growth and trip rules with native trip queries and Rust unit tests3f82e776Replace the GDScript data-map and disaster rules with Rust unit tests28357631Remove the remaining duplicate GDScript rules and fold the annual budget check into the native day9a90badeBuild the native simulation for each desktop package and document it1ed76be3Format native Rust code with 140-column width126f3ea7Fix native Rust Clippy warnings4cbfe04dAdd an independent native region builder075ccc61Enable native region preparation with parity benchmarksaf8cc01dRecord native region benchmark results1ade7e13Keep region draws native, cull tiles by cached bounds, and remove the GDScript region painter5780cc66Document the native-only region builder and its benchmark results15f680f1Decode and encode Maxis RLE chunks natively1c753d70Rotate the city natively03e82735Generate new-city terrain and editor streams natively92e47524Build data map meshes and region change areas natively9a83ae51Add Rename City to the File menu6fe13135Add native SC2X v4 structure codecs and working-layout projection09862852Read and write SC2X v4 archives with metadata, signs, and legacy conversion11ee1edcRun, convert, and save SC2X v4 cities in the game with checkpointed simulation state98c7f6cdApply SC2X v4 record budgets and vehicle caps, and test the format end to ende3a90f15Save large SC2X v4 cities on a worker thread from a copied snapshot949c813eGive reused moving-object slots new SC2X identities after each simulation step88f7096fUse per-document XTHG sizes in the debug disaster actionaf82d28bDescribe SC2X v4 saves in the README242c7561Make the Rename City dialog compacteeea46adDecode altitude and data grids natively and remove whole-map loops from large-city editsfbbc68a6Support 2048 and 4096 tile maps in SC2X v4 citiesb13aef10Add a tool that repeats a city across a larger SC2X v4 mapc1038dd5Keep unknown SC2X extension blocks, unresolved tile links, and placeless facility records1bd66265Keep train identities when trains enter or leave a subway60bed5b1Apply the SC2X object budget to monsters, tornadoes, explosions, and Maxis Man1c38673dSave the fire timer and restore SC2X random states without phase state0601407eValidate SC2X train chains and keep incomplete trains unchanged33dd3bdaKeep SCLG cities in their format until the player upgrades them85b92542Stop embedding the metadata schema in SC2X archivesa2c429b6Make SCLG cities load only and convert them to SC2X version 4 on openccb94b65Add a layered tile index that keeps facilities, markers, and moving objects apart33e30f68Port the native simulation to the layered tile index5b6cbdabPort GDScript tools, queries, and views to the layered tile indexa60877b9Run SC2X version 4 cities on the layered tile index2fe348c6Skip the legacy sign scan for layered tile indexes192a9dc8Add rebindable keyboard and mouse controls with a Controls tab and Use Defaultsf4af85faMake tool modifier keys and SCURK editor shortcuts rebindable087db82eMake music keys bindable, drop Quit, and move Use Defaults below the Controls tab18d9567bKeep a single nightly release on a fixed nightly tag2a693551Run CI without approval environments and read test assets with a repo secret8ee2895cSeparate Controls rows, wrap long labels, name bindings in tooltips, and reopen at the top5c78d73aCreate game/bin before linking the validation project so fresh checkouts load the native libraries86b2a92fMove the native library and desktop package jobs into one reusable workflow for CI and Release35fda5efCache Rust builds in CI and run cargo tests in a parallel job9386c0f4Key display signatures on chunk revisions instead of hashing full map arrays22e48ff1Build City Map window images in the native rendering libraryebcf2630Make height and utility data-map values in the native rendering library30f3088fAdd the native formats library and calculate CRC-32 there14b8e8f9Decode and encode sprites, PNG, GIF, BMP and executable resources in the native formats librarydfecff8bAdd the native audio library and render MIDI music there41c363e5Add the Godot UIDs of the formats and audio extensionsa0069731Name tile IDs, palette colors and format fields in the native rendering and formats codeefd8807bColor the heightmap levels with the palette of the original JavaScript OpenSC2K12906ebeColor dry heightmap land from green to red and underwater tiles by depth in blue49e2dd83Hide the heightmap water surface and give the underwater scale a full-size legend bar95a5de3cPaint CPU city images, regions, exports and previews with the native painter81df7b33Name tile IDs, flags and sprite offsets in the native painter2c8bc766Composite moving sprite pixels in the native rendering librarya1763151Index occlusion rectangles, plan view regions and color sign pixels in the native rendering library1964d82dRun the player tool commands in the native simulation librarycb7c91e1Split the native bridges, codecs, synthesizer and tool commands into focused modules and space their blocksf6bf8a51Adjust data view grid colors and scales92c99375Deduplicate changed region keys with a hash setf092ca7dAdd a City Sounds setting to reduce or turn off ambient and simulation sounds9ca08985Limit the City Sounds setting to vehicle sounds so disasters play normally6fcd8ac8Add native debug tile geometry, layer values, network labels, tile snapshots and draw outlines4f99fa9cCompare debug tile snapshots in place and list moving thing rows natively7f5f9f26Add debug mode with a Debug menu, Tile Inspector, debug tile layers, render overlays, performance HUD and debug captureafc6fa02Show moving object fields on a pinned Tile Inspector tile and clear repaint highlights when they turn off5bac8ebdAdd native draw labels, missing artwork tiles, chunk byte differences and tile growth inputsa784ac22Fix SC2X budget overflow in forecasts and annual settlement8bc34b62Expect an SC2X city with saved engine state to load without a utility rescan478f9a46Let a military proposal search for one requested base type0e034cc0Add save verification, simulation steps, record and MISC editors, chunk browser, scenario tab, disaster preview, artwork check, growth inputs, tile grid, draw order and debug military and moving thing actions4737b44cClear tile coordinates when the grid turns off and explain what reads MISC wordsd590a34bAdd native row ordering, first tile indices, facility bounds and building counts9ee45894Draw the debug record tables as virtual tables that build rows only when shownc664c304Draw row lines and hover in the debug tables, and scroll them by pixels like a Tree23db1437Hide ships and sailboats under bridge decks and keep later water from clipping thema5ea370fCrash the helicopter when the Center tool clicks it, with the original hit and descent soundsdaf9a40bLet a shot-down helicopter fall and explode harmlessly when No Disasters is on6b34a392Replace the Zones checkbox with a Zones data view in the sidebar list and View menu353085feAdd Show Subways to the underground View menu8b9b3bddAdd a Tunnels layer toggle to the underground sidebar and View menu06733219Add hover tooltips to the Debug menu items2c1b9268Decode water height and tunnel depth in the query details4170c967Decode XTER, XTXT and ALTM bit 15 in the query details1005f93cShow neighbor connection signs at connection markersa44fc1c8Place signs at the tile center and draw them on the native pixel grid828f03b8Draw signs above the map with a smooth font and bevel, and remove sign occlusion63425038Launch arcologies from XBLD tiles, not XTXT riot markersec8f6725Show building instance counts in the Tile Counts debug table6eeb4560Stage the arcology launch: demolish 10 random launch arcologies each second38071768Stage the arcology launch for SC2 and SCN cities tooc7189e3cPut Instances before On map and give the free table width to the tile name45923be2Launch one arcology every 50 ms after a short visual fire, and hide effect dust behind structures in frontaef57412Shake launch arcologies and fly them off the map, and draw launch fire at the painter depth5776bcf7Draw upside-down exhaust flames under launching arcologies0ffa9eb3Stand launch fire and dust on the front corner of their tilesfdb0207fPace fire scans to one per second for SC2 cities and fires from any disaster, and scan disasters once per base tick at African Swallow3a5ba2fdDrop African Swallow to Cheetah when a disaster starts, as the original doese3641673Import DOS and Macintosh graphics with the Windows palette layout and cycle colors, and read the Network Edition palette in text mode94ea5d08Import game text, newspapers and cities from DOS, Macintosh, Windows 3.x and demo versionsf4d1b9e0Play MIDI music with FluidSynth loaded at run time, with selectable bundled and custom SoundFonts175a6262Offer the operating system General MIDI sound set as a music SoundFont choice9a8da55cRemove the bundled SoundFonts and the built-in synthesizer; play MIDI with the system sound set or a custom SoundFont4b55765aBuild Windows arm64 and Linux arm64 desktop packages in CI and releases239a4890Draw the newspaper in Godot and remove Godot WRY, so every package, including arm64, shows the newspaper0fc679a4Soften the newspaper shadow and spin the paper six times as it opens279c99eeImport game files without case, from mounted CD-ROMs with several versions, and repair unpadded Special Edition WAV files21cf7346Add an Import button to each Settings pack field that imports only that pack kind94603892Compute masked tile-flag signatures and sign cell scans in native codeab233b4dRead and write SC2, SCN, and SCLG FORM files in native codeb43a39fbRun the newspaper queue, bond, and ordinance commands in native codee60460a7Keep train IDs on their own tiles after a reverse, and turn back or remove trains that stay blocked24b9ac4bLink the static libsndfile codecs into FluidSynth on macOS and Windows, as on Linuxc529790eRename the CI and nightly workflow to CIbd23f75aBuild libsndfile with the static FLAC define and Opus with the static MSVC runtime05190964Start the built-in city template with a neutral growth map and month-0 budget rates, as the original does503a198aDraw new-city neighbors as the original does, with ocean neighbors for ocean and island maps, and always use the built-in city template0a380d06Discard a synth fill that a stop or a new track overtakes4a698255Allow 60 minutes for native package builds, so a cold macOS cache can finish809367afRepeat the new-terrain grade until no cardinal step is more than one level6c78405aImport the package project on one thread, so the headless renderer cannot lose a texture3df3fd09Keep the validation runner tests from building and testing the native crates256dac45Build the native crates as one Cargo workspace, so they share dependencies and build in parallel57291835Import validation projects on one thread, so the headless renderer cannot lose a texture6073e82fDraw the selection preview as two cached meshes on its own layer, so large drag boxes do not slow the frame rate3c5d4955Zone the eligible tiles of a drag that starts on water or a blocked tile, instead of refusing it1e2f33b8Mirror the Nessie sprite on each display frame, as the original game does49a73b52Add a debug action that changes the nearest sailboat into Nessiec8e8228cInclude the FluidR3Mono GM SoundFont in the Linux packages as the last system sound set406e485bRelease version 0.2.0