And he's even been developing a user interface in Python around the MicropolisCore module.
I have been working on a scripting language independent callback system, and removing the old X11 and SimView dependencies from the code, so you can call the editing tools from the scripting language. Bil will be hooking that stuff up soon.
The idea behind the scripting language independent callback mechanism is so that the Micropolis engine can generically call back out to "virtual" functions that can be written in a scripting language, or handlers built into the application, without being tied to any one particular scripting language or user interface toolkit.
I've done all the plumbing with C++ and SWIG to integrate MicropolisCore with Python, which can be used as an example for integrating it with any other scripting language that SWIG supports (and there are many).
So the same MicropolisCore simulation engine can run in a web server as well as a laptop application, and it will be easy to port to other platforms like desktop computers or handheld devices, and languages like Lua or Java.
I've checked the Micropolis (SimCity) source code into the Micropolis Google Code Project.
The subversion repository contains two different projects based on the original SimCity source code from Maxis:
Source code of TCL/Tk Micropolis for the OLPC XO-1 and Linux.
Source code of three Python modules: micropolis, cellengine and tileengine.
- The micropolis module is the new version of Micropolis (SimCity), cleaned up and recast as a C++ class.
- The cellengine module is a cellular automata machine engine.
- The tileengine module is a Cairo based tile renderer, used to display micropolis tiles and cellengine cells. It plugs into micropolis and cellengine, but is independent of them and useful for other applications.
- These modules require Python 2.5 and the Python modules pygtk, pycairo and PIL to be installed. Probably some other modules I can't think of off the top of my head, too.
- This code will compile on Windows or Linux. It is intended to be used with the OLPC's Sugar user interface environemnt (depending on Cairo and Pango for graphics and text formatting), but layered so the core code is useful in other contexts such as different scripting languages, web servers, desktop applications, embedded devices, etc.
This is the documentation for the OLE Automation Interface to Transmogrifier (version 2.1.2 and greater).
Software Development Magazine wrote an article called "Inside the Stupid Fun Club" (registration required).
The author, Alexandra Weber Morales, unexpectedly encountered the Sad Robot, broken down and crying for help on the streets of Oakland.
We were shooting a couple of hidden camera reality TV "One Minute Movies" for NBC: one of a Sad Robot torn apart into pieces and pleading for help from passers by, and the other of a Robot Waiter taking orders, serving food and bantering for a tip in a barbecue restaurant.
I (Don Hopkins) developed the custom "robot brain" software for Will Wright's Stupid Fun Club, mostly in Python. It involved writing lots of high level Python code and XML data, and integrating all kinds of different software components together with SWIG, C++, ActiveX, Java, IRC, HTTP and WiFi. The robot features 3D facial animation, speech synthesis and recognition, conversational scripting, artificial intelligence, personality simulation, telerobotic remote control via wireless networking, with an interactive web interface for controling its behavior in real time.
For another Stupid Fun Club project, I also used Python to develop expressive synthetic speech authoring tools (audio speech "phonoscoping", like visual animation "rotoscoping"), and talking toy simulations.
Python is ideally suited for brainstorming and prototyping new product ideas, as well as developing custom real-time robotic software for supporting creative Stupid Fun Club projects like reality TV production.
Kinetix has roped me into giving a talk about MAXScript at the Game Developer's Conference in Long Beach on Friday. I wanted to see if its OK to mention your use of MAXScript at Maxis and if so, maybe you could give a few bullet points on what it's OK for me to mention. Of course, I remember the note track key stuff and the Access database interface, but I'm not sure if there were other things and how all that wound up coming together.
Certainly! Here is a description of how I'm using MaxScript to implement The Sims character animation pipeline:
By Don Hopkins, Maxis.
This document describes VitaBoy, the skeletal character animation system in The Sims, written by Don Hopkins at Maxis.
VitaBoy combines several different types of data together to render the animated characters in the game, including skeletons, skills, suits and texture maps.
Artists create the skeletons, skills and suits in 3D Studio Max, and the texture maps in Photoshop.
The CMX Exporter is a 3D Studio Max plug-in and MaxScript user interface, which allows artists to export skeletons, skills and suits from Max files into CMX files that the game can read.
Character Studio is another 3D Studio Max plug-in, that allows artists to animated a Biped skeleton, and to attach deformable mesh suits to it with Physique. The CMX Exporter knows how to support Character Studio Biped and Physique, but it can be used with other kinds of skeletons and suits as well.
The way the CMX Exporter knows what to export from a Max file, is by looking for note tracks on the bones, for keys containing tags that control the exporter. The artist inserts note track keys into the Max file, to mark up the skeletons, suits, skills and events. The tags in the note track keys tell the exporter what to export from the Max file.
The Access database tells the exporter which skeletons, skills and suits are defined, which Max files contain them, and where to export them. The artist can select the name of a skeleton, skill or suit from a scrolling list, and automatically load, validate and export the correct Max file to the correct destination. The exporter can also check the exported files out from and into SourceSafe. The artist can use the exporter manually without the database, but the database is extremely useful for avoiding accidents when there is a lot of content to manage.
Don Hopkins (dhopkins@DonHopkins.com)
SafeTMog will be a version of Transmogrifier restricted to safe graphical and textual modifications of standard objects.
I propose to upgrade Transmogrifier into SafeTMog, whose purpose is to improve the stability of The Sims by supporting only a safe restricted set of modifications to the original objects from Maxis. It will safely import an xml file and graphics into a fresh clone of a standard build-in object. So users and third party tools will be able to import, export and exchange safe, compact modifications to stock objects, without including or modifying any proprietary Edith code or other data.
SafeTMog and other tools (such as a server side content management system) will be able to work together by importing, exporting and validating objects in SafeTMog exchange format (a zip file with xml and bitmap files: pure data, no code). It will not be necessary to distribute any Edith code or other delicate data, just xml and bitmaps. The original objects (from the game, expansion pack or server) will be required in order to import and install them into the game. The SafeTMog xml file format will be simple and extensible, so it will be possible to add new safe content types in the future (like skins, character animations, meshes, custom sounds, midi music, mpeg video, rich text, html, url links, and other content types).
SafeTMog will enable the creation and distribution of safe custom objects, without any possibility of viruses, Trojan horses or stability problems. It will enable the distribution of user created content libraries and third party tools, while protecting Maxis' intellectual property rights and the integrity of the game. The ability for users to safely change the graphics without changing the behavior is an essential step towards enabling safe user created objects for The Sims Online.
RugOMatic uses another tool called The Sims Transmogrifier 2.0 to create Sims objects. It's a lot easier than using Transmogrfier directly: you just drag and drop images and text, and press a button! Soon I'll release RugOMatic along with The Sims Transmogrifier 2.0, as soon as Maxis's legal department finishes reviewing it (soon now, I hope).
The Sims RugOMatic lets you quickly and easily create rugs for The Sims, with your own pictures and descriptions! Simply 'drag and drop' a picture, name, price and description into RugOMatic, and press the 'Weave My Rug' button. RugOMatic automatically manufactures a new rug, with a text description that you can read in the game!
RugOMatic also writes a web page describing your rug, including the name, price, description, a picture preview, and a link to the downloadable "iff" object file, to help you keep track of your objects, and share them with other people on the web.
I'm developing another Transmogrifier based tool called "ShowNTell", which is an ActiveX control for displaying a live preview of a Sims object file on a web page (or wherever you can plug in an ActiveX control). You can drag-and-drop iff files into the window to view them, change the rotation and zoom, and read the name, price and description. It also gives you control over the background color and grid, to match your web page and objects.
"What is ShowNTell for?", you might ask. I want to make it easy for people to distribute and download Sims objects over the web, as well as view and manage their own objects offline. Players should be able to quickly look at objects before installing them and restarting The Sims. ShowNTell displays a live interactive preview of a Sims object, right on the web page!