-
Notifications
You must be signed in to change notification settings - Fork 20
Howto make a room
Any tool can be used to generate the graphic resouces. All you need is some BMP files in paletteized (indexed) format. However, the following supposes that you are using the GIMP.
The GIMP is sadly pretty deficient in regard to indexed images. So it's recommended to draw everything in RGB mode, and then convert and export to indexed BMP.
This is the simplest: just draw some stuff. However, if your room will need several Z planes (i.e., there are things that should be in front of the actors) then it might be a good idea to draw them on separate layers.
In SCUMM all objects are by default in state 0 and display nothing. With a door, for example, the background image will show the closed door. You need to create a picture that will be put on top of the background, showing the opened door. Again, the simplest way to do this is to use layers.
Z planes allow actors to be behind parts of the background or objects. For this you need to create a mask; a simple black and white layer will do the trick. If the different parts of the background are already split into layers then you can just duplicate it, fill the parts that should be hidden with some color, and clear the rest.
Note that despite their name, Z planes don't "stack up". Actors are only hidden by a single Z plane at a time. If you need an actor to be hidden by more than one layer of objects at a time, make a mask combining all of them. For example, if you have a tree behind a fence, you might make one mask with just the shape of the fence (for when the actor is standing in front of the tree), and another with the combined shapes of the fence and the tree together (for when he's behind the tree).
Now you have a nice RGB image with a lot of layers. The first step is to convert the image to indexed format. This will create the base for the room palette. Choose a palette size of about 200 to leave some room for the actors, etc. Import the palette into the GIMP (Color palette dialog -> Edit -> Import) then merge the newly created palette with your actor palette. Now load the RGB version again and convert it using the merged palette. Make sure to uncheck the "Remove unused colors from final palette" button. Finally, split the layers into files: one for the background, one for each Z plane, and one for each object. Save these as BMP. The Z planes must be converted to 2 color bitmaps first, however.
This part is easier. Basicaly you need to define where the actors can walk. Fire up the box editor:
$ boxedit -img back.bmp
This will directly load your background BMP. The user interface is quite specific; see the README for more details. When putting the boxes around, remember that boxes can only be connected with vertical or horizontal sides. Each box also defines the scaling and Z plane to use for actors inside it. They should therefore be split according to Z planes and perspective, so depending on your room complexity, it might not be trivial.
To make a door, or any other path that should exist but be disabled (off- limits) by default, check the "Invisible" box. Your scripts will be able to change the box flags later to open the door, etc. You must name all boxes that you intend to reference from the scripts.
Actor scaling comes in two forms: a fixed value, or a linear function of the actor's Y position in the room (a.k.a. a scaling slot). Each room can only have up to 4 scaling slots. Sadly, there is no preview in the box editor currently, a much wanted feature.
You just need to record the samples you want. However, you must use a specific outdated format: Creative voice file -- a.k.a. VOC. The samples must be in 8-bit unsigned mono at 22 or 11 kHz. Anything else won't do.
The script binds everything together. Look at the examples and other documents on this wiki, starting with ScummC Grammar.