When I ported the Mac version of SimCity to Unix using NeWS/HyperLook for the front end, I naturally had to split it into and engine (the C simulator back-end "client"), and the user interface (the PostScript/NeWS/HyperLook front-end "server"), and define a network messaging interface (API) between them.

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://micropolisweb.com/

https://github.com/SimHacker/MicropolisCore

https://donhopkins.medium.com/open-sourcing-simcity-58470a27...

Wow, so nice to hear from the original developer!

Having played with a little simulatiom, I now intend to replicate a cleaner, better version of micropolis. The intention is to port the simulation engine as thoroughly as possible, and then provide a UI in emacs.

...of the unix version. That's the one i played back in the day!

RMS says he would appreciate you contributing it to emacs! It's more fun than psychoanalyzing yourself with Doctor.

Well, while i am porting micropolis, there is always tetris!