Product Placement is a way to get your product seen without using traditional advertising. I think product placement could be used for market research too. Imagine an online game that doesn’t offer only Coca-Cola (product placement), but offers lots of drinks. You could then correlate the choice of drinks with demographic information you have about your gamers—age, gender, income, and so on. By watching activities within the game, you could correlate the choice of drinks with MUD personality types (Killers, Achievers, Socializers, Explorers); this might tell you what kinds of magazines you want to advertise in. You could see whether people who hang out together are more likely to drink the same sorts of drinks (energy boosters, soda, water, juices, etc.). You could pay some people to switch drinks and see whether others follow. You can measure correlations between products (do people who drink Red Bull also eat hamburgers?).
Does this creep you out? It should (unless you work in marketing). Product placement is what we have now, but I think in the future we’ll have people using virtual worlds as a way to run experiments on us. In virtual worlds you can measure behavior better. There is of course the question of whether product choice and behavior in the virtual world differs from the physical world, but having detailed data about a million players can complement having sparse data about a few thousand survey participants. Given that games—unlike movies—let players choose what to do, product placement in games seems like a waste. Market research seems to me to be a much more valuable way to use that opportunity.
It’s actually very interesting in The Sims how the pronouns change all the time. I’m sitting there playing the game and I’m talking about, "Oh, first I’m going to get a job, then I’m going to do this, then I’m going to do that." And then you know when the character starts disobeying me, all of a sudden I shift and say "Oh, Why won’t he do that?" or "What’s he doing now?" And so at some point it’s me kind of inhabiting this little person, and I’m thinking, "It’s me, I’m going to get a job and I’m going to do x, y, and z." But then when he starts rebelling, it’s he. And so then I kind of jump out of him, and now it’s me vs. him. You know what I’m saying?
— from Celia Pearce’s interview with Will Wright
A few months ago I had been thinking about a UI for building roads and rails. When I got Locomotion, I found that the building UI was a little bit annoying, and that inspired me to work on my UI some more. I tried Flash but couldn't find a free and easy way to get started, so I turned to Java instead. The Java documentation on Sun’s site is nice. For example, take a look at their Java 2D documentation.
After playing with it for half a day, I have an applet that lets me build roads. One of the most confusing things was figuring out how to write <object> and <applet>. Ick. (Let me know if it doesn’t work for you.)
The basic idea is that roads (or rails) should be between edges, not tiles. Road segments are cubic splines between two edges. It’s a little tricky to select the right edge; I need to think about that problem a little bit more. There’s a larger version on my other page.
This building UI isn’t directly usable for games like Locomotion. It would need length and angle constraints, diagonals, bridges, and tunnels. To make it more usable, I need to add pathfinding, so that you can drag across the grid and it will figure out which segments need to be built. I will probably get bored before finishing all of that, though.
Given my failure to get started writing Flash code, I decided to try Java. I downloaded Java 5.0 (which comes after 1.4, believe it or not) and Eclipse 3.0. Both of those sites need to have a much easier way to download the software. Java led me down a maze of multiple versions, marketing material, and legalese. Eclipse led me to a page of international mirrors, none of them useful (when I clicked on them, I got a big file listing and had no idea what I needed to download).
Despite some glitches (like some dialog boxes being blank and some being far wider than the screen), I got a simple applet running. My next step is to learn how to draw lines on the screen so that I can start creating a small isometric map. After that I need to learn how mouse events work so that I can let the player select tiles on the map.
The main disadvantages of Java compared to Flash are: it’s not as widespread, and it appears to be a more verbose and cumbersome language. I'd really like to do something with Java3D, but it looks like that is not installed by default on anyone’s machine. I just installed Java and I don’t have Java3D. I don’t want to ask my readers to install new software just to look at my demos. I think Java3D would be much more popular if it were installed by default.
Update: I’m not the only one who had trouble downloading Eclipse.
I got Chris Sawyer’s Locomotion two weeks ago. I love Transport Tycoon. I have played several games in the same genre (Transport Giant, Railroad Tycoon, Roller Coaster Tycoon, etc.). Here are my thoughts after playing roughly 10 scenarios of Locomotion. I don’t just want to complain about the game. I do enjoy playing it. It’s just that there are some things that I think would make it much more enjoyable.
- Summaries. I like the summary views: lists of stations, towns, trains, trams, planes, etc. In my post about Transport Giant, I mentioned that it was really inconvenient to get any summaries. Locomotion is much better. You can sort the lists too. Minor suggestion: it would be nice if the list sort order was preserved, so you don’t have to re-sort when you re-open the list.
- Pathfinding. Unfortunately the pathfinding is really frustrating. There should be no need to add waypoints for trains. Pathfinding algorithms are efficient enough, especially on simple graph structures like railroads, that entire networks can be scanned easily. Minor suggestion: for rail networks, a simple efficiency trick would be to add “lookahead” shortcut links in the graph structure that skips ahead from one node to a node 10 spaces ahead.
- Building. Even after playing 10 games, I still find the building to be cumbersome. To edit something you right click on the road or track, but it’s hard to predict which road or track you will edit when you right click on something. Editing needs to be predictable. Locomotion has a definite advantage over Transport Tycoon in that there are many more track/road possibilities available. However, I still think drag & drop is the better approach. Suggestion: make drag & drop building work. I plan to write more on this subject soon.
- Signals. I like the way the rail signals are built. They are put on a section of track, not on a single point. The arrows on the one-way signals and roads are very nice! I am still puzzled by the various colors on the signals. I think I can figure out red-red-red, and green-red-red, but what does yellow-green-red mean? Minor suggestion: when you mouseover the signal, it can show you which trains are interacting with that signal.
- Groups. I find that I often need several vehicles that go on the same route and carry the same type of cargo. When this happens, I would like to view information about the entire group instead of seeing them one at a time, mixed in with other vehicles of the same type. Suggestion: automatically detect groups by looking for trains that share a route and cargo, and offer operations on the group: upgrade vehicles, modify the route, or change the cargo.
- Reliability. I think reliability was an important part of Transport Tycoon. Unfortunately in Locomotion reliability is a factor but you really have no control over it. Suggestion: add a “maintenance depot” that can be added to a station. When the train reaches the station that has a depot and that train needs service, it will receive service there (which takes more time). It should also be possible to add stations that are entirely for maintenance and not for cargo.
- Look-ahead Pathfinding. I like the idea of trains “looking ahead” to reserve track that they want to go on. However, it’s hard to figure out how far they look ahead. Suggestion: add a “headlight” that shows how far the train scans. (Perhaps the headlight it shown only when the vehicle is selected.)
- Bridges. I like that bridges are not limited to height 1 and that bridges can have curves and slopes. The various bridge types don’t really appeal to me though. The best ones are the ugliest. Suggestion: add a “reinforced concrete bridge” option that is very clean and flexible, supporting all the curves and slopes. Of course, if I had that, I would not use any of the other options.
- Construction Mode. While working on tracks, I frequently find that trains do not stop right away. In Transport Tycoon, you could safely work on tracks and trains would not derail. In Locomotion, they frequently crash while I am working on a track. Suggestion: when in construction mode, put construction signs/cones around the track, and make trains travel very slowly. They should not crash while in construction mode.
- Track Layouts. The track layouts in Locomotion are much nicer than in Transport Tycoon. There are lots of curves available. However, at times it is hard to see the tracks. For example, take a look at the second to last picture on this page about station layouts. It is so hard to see all the tracks that the author created a separate diagram showing them. Suggestion: when in construction mode, add a bright line showing each track segment, with large dots at the endpoints. This would be an overlay on top of the tracks so that you can see the structure.
- Visibility. Transport Tycoon offered a way to hide buildings, or at least to make them transparent. Simutrans offers a way to show only the foundations of buildings. Locomotion offers a way to hide the foreground buildings without hiding the background buildings. I like the idea, but there is a problem: when in construction mode, the foreground buildings still affect your mouse, even though you can’t see them! Suggestion: If you hide something from the eye, it should be hidden from the mouse as well. If I see something and click on it (or right click to delete/edit), the click should affect what I saw, not the hidden object in front of it.
That’s all for now. I think I have a way to make drag & drop building work with Locomotion’s more extensive set of road and rail segments. I hope to make a demo of it (and this is why I wanted to learn Flash). The basic idea is that you drag from edge to edge instead of from square to square. In addition, you use a modifier key (like shift) to raise/lower the altitude. I won’t know whether I like it until I try implementing it.
I really liked the Textures Archive. It’s not just that they have a large number of textures categorized into colors. They also allow you to customize the texture by modifying its color, contrast, etc. Yes, I could do this myself using The Gimp, but it’s much easier with this web site.
I tried out the Transport Giant demo. I like the premise. I love the graphics. I generally like this sort of game. However, there are some interface annoyances that, although forgiveable back in 1995 with Transport Tycoon, can't be overlooked in 2004. Unfortunately, the interface is annoying enough that I'm not planning to buy the game.
In this game you build transportation routes between cities and industries. Your goal is to make money, deliver goods, or whatever the scenario goals are. The demo limits you to transporting goods by horse on roads, but the full game also offers trains, ships, blimps, airplanes, and helicopters. It would be nice if in these "run a business" games, not all other businesses have to be your competitors. It would be nice if I could run the sawmill to goods part of the transportation chain without having to first run the wood to sawmill part. Railroad Tycoon 3 seems to have addressed this problem.
- When building stations, the “entrance” is always on the northwest side. This means building a road to get to certain stations is awkward.
- When building roads, adjacent roads don't always connect. You have to go back and connect some of the corners.
- There's a way to get a list of all your stations. But this list only offers the name. If you want any other details (cargo, profit, traffic, etc.), you have to click on a station in the list and then press a button (you can't even double click the station name). There's no way to go back to the list; you have to open up the list again and start at the top, scroll down to the next station, click on it, and so on.
- A minor bug: demolishing a single square of roadway costs $900,000 (in contrast, building it costs $5000).
- There's a way to get a list of all the vehicles, towns, and industries. But it has the same problem as the list of stations. There's only a name and no information about it. If I want to pick the town with the largest population or the lumber yard with the most lumber, I have to manually click on each one, write down or remember the number I want. If I want to see some information about all of my 94 horses, I have to click on each one (and even then, I can't get basic information like amount of revenue generated).
- When I want to assign horses to go on a certain route, I bring up a “schedule” screen. It seems like a reasonable UI. But to actually choose a horse, I have to click on the horse, then click on an arrow button. I can't just click or double-click on the horse. To choose a station to visit, I have to go back to the map (which is partially obscured by the scheduling dialog box) and click on the station. I can't choose from a list (especially a list sorted by something reasonable—like stations that process the same kind of good the horse is carrying). Once I choose the station, I have to choose what kind of cargo the horse should carry from there. I have to click on the cargo type icon, then click on an arrow button. It should automatically choose the type of cargo that is produced at that station. These extra steps make the interface more "general" (a sure sign that software engineers were designing this UI!) but they make the common case harder.
- I can't tell what's actually available at a station or what that station would like to have. There is a "Requires" list but it's often empty.
- I can't expand a station by clicking on it. I have to go into a separate expansion menu and then choose the type of station. This would make more sense if I could get a list of stations and upgrade many of them at the same time. Once I do go into the menu, there's a list of options, but they don't give me a good idea of the magnitude of the benefit.
- One of the things that annoyed me in Transport Tycoon is that sometimes I want multiple vehicles to travel the same route. If I want ten buses on a particular route, I have to repeat the setup ten times. In this game there's a shortcut—duplicate route. However, it only works for the initial route. After setting up lots of identical routes, I might need to change something. For example, in the demo scenario, after you deliver 50 wooden boards to a fort, it longer accepts boards, and only accepts passengers. I had to go into each of my 20 horses and change their route to deliver passengers. It was too much work, so I just let my horses keep delivering boards, at a loss.
- When I go into the schedule screen and I don't have a horse already, I have to exit the screen, go into a different screen, and buy a horse. I should be able to buy a horse and give it a schedule all from one screen.
- After a while, the horses got stuck at one particular station. There wasn't really anything I could do at that point.
The main goal in these sorts of games is to make money efficiently. To do this I need to be able to evaluate all the things I've set up—stations, routes, vehicles, industries. There seems to be no way to do this. I'm not sure how I'm really supposed to play the game if I can't know how much money each of my vehicles makes. Is corn profitable? I can't really tell. If there were a way to get the aggregate or annual revenue/cost for an individual vehicle, it would make my job possible but tedious. What I really want is a table listing all my vehicles (or stations, industries, routes) and how much each of them brings in, how much it costs, how many days it makes per trip, and other metrics. I want to group them by vehicle type, cargo type, destination station, or other attributes. For stations I need to know the amount of traffic coming through, the wait time is for loading/unloading, the average amount of goods I'm storing there, and so on. If I want to decide whether to build some extra, like a loading crane, how can I decide whether it's worth it? If have to know whether loading time is an issue. I want an Excel-like view: a table of rows and columns, each column sortable and filterable, with grouping (aggregation). These are the things I'd demand if I were running this business in real life; how can I run the business in a game without the data?
Maybe the game designers thought it'd be more fun if you weren't overwhelmed with data. That's a good goal, but I didn't find it fun, in a game about running a business, to run a business blind. I had nothing to use to make decisions. I think they need to start with a list of what the player is supposed to do and design the interface to match that, instead of designing the interface to match the data structures or internal simulation model. It looks like it could have been a great game, but ruined by a bad interface.
Over the weekend I took a quick look at Get in the Game! by Marc Mencher. I don’t actually work in the game industry and don’t have a good way to evaluate the material. However, one thing stuck out (Chapter 2, pages 16–17):
Here’s an example of C code:Printf("("Hello World" " \n);
Here’s an example of C++ code:Ship.GetX(*ship); Cout>> ""The stuff we want is over here";";
Here’s an example of Visual Basic code:Public Sub Main() Send CGI_CONTENT_TYPE_TEXT_HTML Send vbCrLf Send "Hello World!" End Sub
Here’s an example of Java code:System.out.println("("Why is this Java code");");
If you know these programming languages, you’re probably laughing right now. Fortunately this isn’t a book that attempts to teach programming.