https://donhopkins.medium.com/hyperlook-nee-hypernews-nee-go...
That made it a lot easier to later port it to X11/TCL/Tk, since it then had a well defined interface between the simulator and UI, by exposing the same API to TCL (via C calls) like I'd exposed to NeWS (via network messages). It was more monolithic though, integrated into TCL/Tk in the same process instead of talking to the user interface over a socket like a modern web client/server (but the web switches the terms client and server).
https://www.youtube.com/watch?v=_fVl4dGwUrA
That separation made it much easier to later refactor the simulation engine into MicropolisCore, a C++ library that was totally independent of the UI.
The C++/SWIG/Python/TurboGears/AMF/Flash/OpenLaszlo version is a more traditional (for the time) client/server web stack:
https://www.youtube.com/watch?v=8snnqQSI0GE
More recently I compiled the C++ simulator engine with emscripten into a WASM module, so the simulator and the UI can run in the browser client, with the UI being implemented in TypeScript/canvas/WebGL:
https://github.com/SimHacker/MicropolisCore
https://donhopkins.medium.com/open-sourcing-simcity-58470a27...