How to make and add your own "fishTank" fish * makeFish.doc * --************-- The fishTank was designed to accept fish other than just those that it came with. Once you have had experience using the fishTank for a while you may want to add some of your own fish. This file explains how to build a fish of your own description to add to the fishTank. First you will need to draw pictures of the fish's parts. The parts need to be HAM-mode brush files. Most major HAM-mode paint packages will work. I used Photon Paint to make most of the brushes and DigiPaint3 and Deluxe Photo Lab for the rest. I would generally recommend making rectangular brushes (that way you know what size they are). One thing to make sure of is that you use the same palette as the tank background pictures for all the fish parts you draw. You can do this by loading a tank background picture (a .pix file) and then clearing the screen to color zero (black). Remember that since this is HAM-mode you can get any color, regardless of whether it is in the palette. The other thing to be sure of is that the 'background' or 'transparent color' of all your brushes is color zero. As a starting point for most fish I would recommend drawing two body brushes and three of each of the fins (or perhaps three body brushes and two of each fin). It's a good idea to keep all the brushes of one fish in a directory named for that fish, and to name all your brushes with a ".br" extension to differentiate them from other types of files that you will be using (such as ".pix" files for background pictures, and ".ascii" files for fish-headers that will be described later). Now that you've gone and drawn your brushes, and saved them to a disk, you're ready to make a "fish-header file". In order to do this you will need two things: 1. Some information about the fish - This information is available in any number of reference books. I got most of my information from Dr. Axelrod's Mini-Atlas of Freshwater Aquarium Fishes, but if you don't have a copy of that handy, use whatever reference books on fish you do have. Some books geared to beginners may not have the information you need, if this is the case you should try to find Dr. Axelrod's Atlas or Mini-Atlas at your local public library. Bare in mind that this fishTank is a freshwater tank and will not be accurate in simulating the environment of saltwater or brackish-water fishes. 2. A text editor - I've been using micro-Emacs, which those of you who have Workbench1.3 will be able to find on your "Extras" disk in the tools directory (it's called mEmacs). If you don't have a version of emacs you can either get one off a bulletin-board or use notepad or some other editor, but be sure not to use any special fonts. Page 1 How to make and add your own "fishTank" fish Now you're ready to start. Edit a new file and call it by the name of your fish with a ".ascii" extension (for example: swordtail.ascii). The format of this file is quite fussy; there must be no extra lines, and the lines I've set aside for comments actually need to have comments on them. I would suggest copying one of the ".ascii" files you already have (the ones I wrote) and editing that. (For the examples I will use a swordtail with two body brushes named "body-1.br" and "body-2.br", three tail brushes named "tail-1.br" etc., and three dorsal fin brushes named "dfin-1.br" and so on for a total of eight brushes. I will also assume these brushes are in a directory called "swordtail" on a disk called "fish:".) When I look up swordtail (Xiphophorus helleri) in the Mini-Atlas I see the following information: pH 7.3 hardness 14 DH temperature 25 degrees Celsius lighting bright, no sunlight aggressiveness not aggressive tank conditions densely planted swimming habits all over the tank food flakes Now all you need to do is put all that information and the names and locations of the brushes in your ".ascii" file. Building the fish-header (".ascii") File ----------------------------------------------------------------- The first two lines should be comments. You will notice that I use these lines for the fileName, but you can use them any way you want to. Line #3: The first three characters on this line should be a number describing the starting horizontal position for your fish. Since this is a low-res screen this number must be between zero and 320, but remember that your fish takes up space too, so the upper limit to this number will actually be 320-the length of your fish. The fishTank only looks at the first three characters on this line, so don't put any spaces or tabs before the number. If this number is a one or two digit number you can put spaces after it to get to three characters. You can, but do not need to, put a comment on the remainder of this line, but make sure this line is no more than 80 characters long (including spaces - this shouldn't be a problem in most editors). Line #4: This line should contain the vertical starting position. Use the same three-character format as line #3. This number needs to be between 12 (we leave a few pixels of space at the top for the menu bar) and 200-the height of your fish. If your fish's swimming habits are not all over the tank (like the Page 2 How to make and add your own "fishTank" fish swordtail in the example), this number should be between the fish's upper swimming limit and its lower swimming limit minus the height of the fish. Line #5: The horizontal velocity of the fish. Make this either 1 or -1 to start out with, depending on weather you want your fish to start swimming from left to right(1) or right to left(-1). Once you've seen your fish swimming in the tank you can use these to adjust its speed. Larger values could be used here, but keep them from being to large or small (try using values between -4 and 4), or your fish will not swim fluidly. Once again keep the same three-digit number format as line #3. That is the format that all the lines that contain numbers must have. Line #6: The vertical velocity of the fish. Use the same guidelines as line #5, but here -1 will start your fish going up and 1 will start it going down. Line #7: Horizontal translation value. Make this number zero for now. If you have set the velocities (lines 5 and 6) to anything other than zero, the translations should remain zero. Line #8: Vertical translation value. Use zero to start out with. To control the motion of the fish you will either want to set the velocities or the translations, but not both. With my fish the velocities tend to yield a slightly smoother motion than the translations, but fish could be drawn to work better with either type of animation. Line #9: Top of swimming area. This should be between 12 (for a fish that swims either all over the tank or near the top) and around 170 (for a bottom swimmer, like a catfish). Line #10: Bottom of swimming area. This should be bigger than the number on line #9, and no larger than 200. Line #11: Optimum temperature in degrees Celsius. For the swordtail this should be 25. If you can only find the temperature in Fahrenheit you will need to convert it with this formula: Celsius = ( Fahrenheit - 32 ) * 5 / 9 Line #12: Optimum pH. This is the acidity of the water. You need to have only one digit after the decimal point, any more will mess things up. For the swordtail this number would be 7.3 . Most fish will need the pH to be relatively close to 7.0, which is neutral. Line #13: Optimum hardness in DH. This number reflects the amount of calcium in the water. Lower numbers mean there is less calcium. If you can't find the correct hardness for your fish, it is usually safe to assume it to be about 9 or 10. The swordtail likes a hardness of 14 which is harder than most other fish. If you can only find this value in "parts per million" (or p.p.m.) use this formula: DH = ppm / 18 Line #14: Length of your fish in pixels. Just how long is your fish? This will depend on how long the brushes are. This value need not be exact. If you think your fish is about a quarter as wide as the whole screen that would make it (... lets Page 3 How to make and add your own "fishTank" fish see the screen is 320 wide and 320 divided by 4 is ...) 80 pixels wide. By the way if you make your fish very big it will slow down the whole fishTank, and if it is 300 pixels wide (or more) you won't be able to put them in the tank at all ( You'll be told it is too big). Line #15: Height of your fish in pixels. This can also be approximate. Since the screen is 200 pixels tall, if your fish is about a quarter the height of the screen this number would be 50. Line #16: Aggressiveness. If your fish is called a "peaceful community fish" like the swordtail, this should be zero. Actually almost any fish you would want to add would fit this description. ( This feature has not yet been implemented - so you can put anything here and not affect the fishTank. ) Line #17: Food type. What type of food best describes your fish's regular diet. Enter the number that corresponds to your choice: 0 flakes or other prepared foods 1 worms or other small, living creatures 2 live fish such as 'feeder' guppies 3 vegetables or other plant materials 4 goldfish flakes or other goldfish food If you're not sure what the fish normally eats, and if it's a fairly common aquarium fish, zero is probably is a pretty safe guess. (Goldfish flakes is a different code than 'normal' tropical fish flakes because goldfish preparations normally contain a good deal more protein.) Line #18: Type of lighting. Just about any fish you would want to have in your fishTank will require the 'normal' type of lighting, so make this "1" unless you find something quite unusual about your fish's requirements. Codes are as follows: 0 very bright with some sunlight 1 'normal' - bright with no sunlight 2 as dark as possible ( This feature is not yet implemented. ) Line #19: Type of tank the fish prefers. These are the codes: 0 densely planted 1 rocks, no plants 2 gravel only (no rocks or plants) 3 rocks, plants, and driftwood ( This feature has not yet been implemented. ) Line #20: This line is a comment. Put anything you want here, just don't leave it out. Line #21: The number of fish parts. In our swordtail example this would be "3" since that fish has some body-brushes some tail-brushes and some dorsal-fin-brushes. Don't confuse this with the total number of brushes which would be "8" for the swordtail. Line #22: Number of brushes in the first fish part. In the case of the swordtail we might want this to be the number of "body-brushes" (which is "2"). The order in which you specify the Page 4 How to make and add your own "fishTank" fish brushes in this list will be the order in which they are drawn, so the brush that you want to be on top should be last in the file. Line #23: Name of the first brush. This line should contain the name of the first brush of the first fish part. You should include the path in this name, and the full path and name should take up no more than 40 characters (try giving the directory or the brushes shorter names if this is a problem). In the example this line would be: fish:swordtail/body-1.br The name must start at the beginning of the line, and there must not be any comments following it. Line #24: The relative horizontal position of this brush. This number describes where the upper lefthand corner of this brush should be relative to the other brushes in the fish. It can be fairly tricky to come up with these numbers, and will likely need some fine-tuning. A good place to start may be to look at what these values are in one of my ".ascii" files. Choose one of a fish that faces the same direction and is about the same size, and copy the values. You will then be able to make adjustments once you've seen your fish in the fishTank. Line #25: Relative vertical position. See line #24. Line #26: Name of next brush in this fish part. In the example this would be "fish:swordtail/body-2.br". Use the same guidelines as line #23 for this and all the "brush name" lines. Lines #27 and #28: Horizontal and vertical positions for the brush named in the previous line. See line #24 for details. If there were more than two brushes in the first part of your fish you would just keep going with lines like 23 through 25 (or 26 through 28) until you had finished all the brushes if the first fish part. When you had finished with them you would continue with what I call line #29, but which may be in a different place in your file. Line #29: The number of brushes in the second fish part. In the example this could be the number of "tail brushes" (which would be "3"). (...and yes, if the brushes are not going to overlap, it won't matter what order you have them in ...) See line #22 for more details. Lines #30, #31, and #32: Name and relative positions for the first brush in the second part of the fish. The example lines would be "fish:swordtail/tail-1.br", followed by two lines with one number on each. By now this pattern should be looking very systematic to you. You keep entering three-line sequences of Name, xPosition and yPosition until you run out of brushes in the fish part. Then you use one line to contain the number of brushes in the next part, and start the same three-line sequences again. Just keep doing this until you've given names and positions for all the brushes Page 5 How to make and add your own "fishTank" fish you have in your fish. Your last line in this section will, obviously, be the yPosition of the last brush of the last part of your fish. (p.s.- There's nothing wrong with having a fish part with only one brush in it. Look at "snail.ascii" for an example of this - it has only one "shell" brush.) Resume here once all your brush information has been put in your file. Last Line: This line will contain the name for this fish as you would like to have it appear on the menu (sorry folks, no pun was intended) . For the example "swordtail" would do quite well. Try to keep this name short, or the menu will look sloppy. I use common-names for the fish, and would suggest you do the same, as latin names are frequently rather lengthy. As you may have already figured out, you may not have a comment on this line, and the name should start right at the beginning of the line. "Last Line" was somewhat of a misnomer for the line that has the menu-item name. It is actually the last line the program looks at, but you can have as many lines of comments after this as you want. The end of the file is perhaps the best place to put any special notes you might have about this fish.