diff --git a/Manuals/man_cart_txt_EN.asm b/Manuals/man_cart_txt_EN.asm new file mode 100644 index 0000000..a9f0806 --- /dev/null +++ b/Manuals/man_cart_txt_EN.asm @@ -0,0 +1,889 @@ + dta d" Basic instruction manual: " + dta d"--------------------------- " + dta d" " + dta d"You can play using the keyboard (all " + dta d"functionality) or controllers in all of " + dta d"the ports (all functionality necessary " + dta d"for gameplay). " + dta d" " + dta d" 1. Game Option Selection. " + dta d"--------------------------- " + dta d" " + dta d" " + dta d"On the first screen, you can configure " + dta d"gameplay options: " + dta d"* number of players (2 - 6) includes " + dta d"both human and computer-controlled " + dta d"players " + dta d"* the initial amount of cash of each " + dta d"player (2K is the optimal value we " + dta d"chose, but for short games, it is worth " + dta d"choosing a higher value) " + dta d"* gravity " + dta d"* maximum wind strength (wind is drawn " + dta d"at the beginning of each round or during" + dta d"the round between turns, here we can " + dta d"choose how strong it can be): " + dta d" * 1B - maximum wind strength: 5 " + dta d" * 3B - maximum wind strength: 20 " + dta d" * 5B - maximum wind strength: 40 " + dta d" * 7B - maximum wind strength: 70 " + dta d" * 9B - maximum wind strength: 99 " + dta d"* number of rounds in a game " + dta d"* missile speed (does not affect the " + dta d"flight path - only changes the apparent " + dta d"missile speed - does not change anything" + dta d"in the gameplay itself) " + dta d"* frequency of suicides :) - if for a " + dta d"number of turns the game has not " + dta d"recorded hits (tanks are constantly " + dta d"shooting inaccurately), after one of " + dta d"such misses a tank commits suicide - " + dta d"here you determine how long they can " + dta d"""shooting for the stars"" :) - if only " + dta d"people play the optimal setting is " + dta d"""norm"", in the case of " + dta d"computer-controlled players ... you " + dta d"choose. " + dta d"* The height (and undulation) of the " + dta d"mountains from almost flat (NL - Kingdom" + dta d"of the Netherlands), to soaring and high" + dta d"(NP - Federal Democratic Republic of " + dta d"Nepal) " + dta d"* the way the walls (edges of the " + dta d"screen) work: " + dta d"* none - projectiles that flew off the " + dta d"screen do not return (black color of the" + dta d"screen frame) " + dta d"* wrap - the screen ""wraps"" and " + dta d"projectiles that flew to the right " + dta d"appear on the left side and vice versa " + dta d"(purple color of the screen frame) " + dta d"* bump - the right and left walls " + dta d"deflect projectiles that want to fly " + dta d"through them (dark blue color of the " + dta d"screen frame) " + dta d"* boxy - just like bump, except that the" + dta d"""ceiling"" also reflects projectiles " + dta d"(green color of the screen frame) " + dta d"* rand - at the beginning of each round," + dta d"one of the above 4 ways the walls work " + dta d"is drawn. " + dta d" " + dta d"During gameplay, the current mode of the" + dta d"walls is represented by the color of the" + dta d"screen frame: " + dta d"* none - black, " + dta d"* wrap - purple, " + dta d"* bump - dark blue, " + dta d"* boxy - green. " + dta d" " + dta d"Select options with cursor keys or a " + dta d"controller. " + dta d" " + dta d"The [TAB], [SELECT] or second controller" + dta d"button (supported Joy 2B+ standard or " + dta d"compatible) key change the color of the " + dta d"mountains (3 versions to choose from). " + dta d"If the cursor indicates the wind " + dta d"strength selection option ""Wind"" change " + dta d"the way the wind strength is drawn from " + dta d"""every round"" to ""every turn"" and vice " + dta d"versa. Drawing every turn is indicated " + dta d"by the ""?"" sign next to the word ""Wind""." + dta d"If the cursor indicates the gravity " + dta d"selection option ""Gravity"" changes the " + dta d"procedure of falling the ground to a " + dta d"less impressive but faster one, and vice" + dta d"versa. The selection of fast ground fall" + dta d"is indicated by the letter ""f"" next to " + dta d"the word ""Gravity"". " + dta d" " + dta d"The [RETURN] key or a controller button " + dta d"moves to the next screen. " + dta d" " + dta d" 2. Names of players and AI opponents " + dta d"-------------------------------------- " + dta d" " + dta d" " + dta d"The second screen is shown for each " + dta d"player. Here you can use the cursor keys" + dta d"or controller to select whether the tank" + dta d"will be driven by a human (HUMAN option)" + dta d"or a computer (other options). " + dta d"The [TAB], [SELECT] or second controller" + dta d"button allows to choose which controller" + dta d"port the player will use. " + dta d"The [INVERSE] or [OPTION] key allows you" + dta d"to select one of the 3 available tank " + dta d"shapes. " + dta d"At the same time, you can enter the name" + dta d"of the selected player from the " + dta d"keyboard. " + dta d"When the [RETURN] key is pressed or the " + dta d"controller button is pressed briefly, " + dta d"the screen switches to the next player " + dta d"until the difficulty levels for each " + dta d"player are selected. " + dta d"The player's name can also be entered " + dta d"with the controller. After pressing and " + dta d"holding the button for more than 1s, you" + dta d"can use up/down movements to change the " + dta d"letter being entered, and left/right " + dta d"movements to change its position in the " + dta d"name. Releasing the button ends the name" + dta d"entry and returns to the level " + dta d"selection. " + dta d" " + dta d"If the name is not entered, it will be " + dta d"supplemented with the default name. " + dta d" " + dta d" 3. Shopping screen (before each round) " + dta d"----------------------------------------" + dta d" " + dta d" " + dta d" " + dta d"On this screen, you can make purchases " + dta d"of offensive and defensive weapons. Only" + dta d"those weapons that the player can afford" + dta d"are visible, along with information " + dta d"about the price and the number of units " + dta d"of a given weapon that will be obtained " + dta d"for that price. The information on the " + dta d"screen probably needs no more " + dta d"description. You move through the lists " + dta d"with the cursor keys (up and down) or " + dta d"with the controller, the [TAB] key or " + dta d"the left arrow, the left controller tilt" + dta d"or second controller button change the " + dta d"screen to defensive or offensive " + dta d"weapons, the [SPACE] key or the right " + dta d"arrow and also the controller to the " + dta d"right does the purchase of the indicated" + dta d"weapon. " + dta d" " + dta d"The [RETURN] key or the controller " + dta d"button press switches to the defensive " + dta d"weapon activation screen. Here you can " + dta d"activate previously bought defensive (or" + dta d"offensive after switching with [TAB], " + dta d"etc) weapons. " + dta d" " + dta d" " + dta d" " + dta d"This makes it possible to activate " + dta d"shields and others before the round " + dta d"starts. " + dta d" " + dta d"Another [RETURN] key or controller " + dta d"button press switches to the next " + dta d"player's shopping screen. " + dta d"(For computer players this screen is not" + dta d"shown.) " + dta d" " + dta d" 4. The main screen of the game " + dta d"-------------------------------- " + dta d" " + dta d" " + dta d"The status line shows which player is " + dta d"currently allowed to take a shot and a " + dta d"set of other information: " + dta d"* player's tank name, " + dta d"* active controller number or difficulty" + dta d"level of computer-controlled player " + dta d"(1-**Moron** - 8-**Unknown**), " + dta d"* currently selected offensive weapon " + dta d"(symbol quantity and name), " + dta d"* the player's remaining energy points " + dta d"and if he has an active defensive weapon" + dta d"that has its energy - in parentheses the" + dta d"energy level, " + dta d"* the angle and the direction of the " + dta d"barrel set by the player, " + dta d"* the shot strength set by the player " + dta d"(the maximum shot strength is limited by" + dta d"the player's energy - it can not exceed " + dta d"the energy * 10 . This means that you " + dta d"can fire weaker shots only when having a" + dta d"small amount of energy, " + dta d"* the current round number, " + dta d"* wind speed and direction, " + dta d"* ""computer"" symbol if **Auto Defense** " + dta d"is active, " + dta d"* in parentheses is the name of the " + dta d"active defensive weapon - if there is " + dta d"any activated by the player. " + dta d" " + dta d"The basic controls are simple enough - " + dta d"cursor keys or controller: left/right - " + dta d"change the angle of the barrel, up/down " + dta d"- change the the force of the shot. " + dta d"Other functions: " + dta d" " + dta d"* [SPACE] or controller button pressed " + dta d"briefly - firing a shot. " + dta d"* [TAB] or [SELECT] or second controller" + dta d"button - selection of offensive weapons " + dta d"(this option is not available directly " + dta d"with one button controller - you need to" + dta d"select Inventory). | " + dta d"* [I] or longer holding the controller " + dta d"button - go to Inventory. It is a screen" + dta d"(actually two) with the same layout as " + dta d"the shopping menu, it also works " + dta d"similarly except that here you don't buy" + dta d"weapons, but choose one of the offensive" + dta d"ones to shoot or activate a defensive " + dta d"weapon. | " + dta d"* [A] or [OPTION] - go directly to the " + dta d"defensive weapons activation. " + dta d"* [M] - disable/enable background music." + dta d"| " + dta d"* [S] - disable/enable effect sounds. | " + dta d"* [START] - speed up some game " + dta d"animations. | " + dta d"* [O] - end the current game and jump to" + dta d"the Game Over screen with a summary. The" + dta d"summary of the results does not take " + dta d"into account the current round of the " + dta d"game, but only the rounds completed " + dta d"earlier. This corresponds to pressing " + dta d"the [ESC] key with the difference that " + dta d"the summary and credits are displayed. |" + dta d"* [START] + [OPTION] - immediately force" + dta d"the end of the game (Game Over), just " + dta d"like [O] but without confirmation. " + dta d"* [G] - changes the mountain shading | " + dta d"* [ESC] - during the entire game at any " + dta d"time (unless the computer is playing, " + dta d"then sometimes you have to wait a while)" + dta d"you can press the [ESC] key, which " + dta d"allows you to abort the game and return " + dta d"to the beginning (of course, there is " + dta d"protection against accidental pressing)." + dta d"| " + dta d"* [Y] - when asked to abort or terminate" + dta d"the game - confirmation | " + dta d"* [CTRL] + [HELP] - Toggle ""visual " + dta d"debug"" mode. It displays distances " + dta d"measured, laser aiming, and aiming " + dta d"technique. It leaves a mess on the " + dta d"screen, but it does not impair the game," + dta d"just makes it a bit harder. | " + dta d" " + dta d" 5. Game mechanics - offensive weapons " + dta d"--------------------------------------- " + dta d" " + dta d" Energy of tanks. " + dta d"------------------ " + dta d"At the beginning of each round, each " + dta d"tank has 99 ash units of energy. " + dta d"Tanks' energy is depleted in 3 ways: " + dta d"* one unit after each shot " + dta d"* while falling (one pixel down -2 " + dta d"units). " + dta d"* when a projectile hits the tank or " + dta d"next to it - and here the amount of " + dta d"energy subtracted depends on the " + dta d"distance from the center of the " + dta d"explosion and the type/power of the " + dta d"projectile. " + dta d" " + dta d" How energy and money works: " + dta d"----------------------------- " + dta d"After each round the amount of money " + dta d"gained/lost is calculated, this is done " + dta d"on the basis of two variables " + dta d"accumulated by each tank during the " + dta d"round. These variables are: " + dta d" " + dta d"gain - energy ""captured"" from tanks hit " + dta d"(also if you hit yourself :) and here's " + dta d"the catch, if you have very little " + dta d"energy left it can be profitable to hit " + dta d"yourself with a powerful weapon " + dta d" " + dta d"lose - energy lost due to explosion/fall" + dta d"(and here it is important - to count the" + dta d"total loss of energy even if the tank " + dta d"has less at the moment of hit). " + dta d" " + dta d"In addition, the tank that won the round" + dta d"has a parameter gain (captured from hit " + dta d"tanks energy) increased by the remaining" + dta d"energy at the end of the round (because " + dta d"it did not die and should have it - " + dta d"although it also happens otherwise :) ) " + dta d" " + dta d"Specifically: " + dta d" " + dta d" After each round: " + dta d"------------------- " + dta d"money = money + (20 * (gain+energy)). " + dta d" " + dta d"money = money - (10 * lose). " + dta d" " + dta d"if money <0 then money=0. " + dta d" " + dta d"(at the start of each round gain and " + dta d"lose have a value of 0). " + dta d" " + dta d"During a round, if another tank is hit " + dta d"as a result of a shot fired by a tank, " + dta d"the tank firing the shot ""gets the " + dta d"energy"" taken away from the hit tank. " + dta d" tank taking a shot: " + dta d"--------------------- " + dta d"gain = gain + EnergyDecrease. " + dta d" tank hit: " + dta d"----------- " + dta d"lose = lose + EnergyDecrease. " + dta d" " + dta d"Where EnergyDecrease is the loss of " + dta d"energy due to the hit. " + dta d" " + dta d"Of course, at the same time the hit tank" + dta d"loses the amount of energy stored in " + dta d"EnergyDecrease, except that here the " + dta d"loss cannot exceed the energy you have. " + dta d" " + dta d" How a hit works. " + dta d"------------------ " + dta d"Each weapon that results in an explosion" + dta d"has its own blast radius. " + dta d" " + dta d"After the explosion, every tank in its " + dta d"range loses energy. " + dta d" " + dta d"It works in such a way that if the hit " + dta d"is exactly on the center point of the " + dta d"tank EnergyDecrease receives the maximum" + dta d"value for the weapon, and for each pixel" + dta d"of distance from the center of the tank " + dta d"this value is reduced by 8. " + dta d" " + dta d"For example, if a hit with the Baby " + dta d"Missile weapon hits the center of the " + dta d"tank perfectly, it will lose exactly 88 " + dta d"units of energy (plus what it loses " + dta d"falling after the explosion). " + dta d"If you hit with the same weapon at a " + dta d"distance of 10 pixels from the center of" + dta d"the tank, the loss will be only 8 units." + dta d" " + dta d"And here are the values of maximum " + dta d"energy loss for individual weapons. If a" + dta d"weapon explodes several times, each " + dta d"explosion is calculated independently " + dta d"(additional values in the table): " + dta d" " + dta d"Offensive weapons and maximum energy " + dta d"loss: " + dta d"* Baby Missile: 88 " + dta d"* Missile: 136 " + dta d"* Baby Nuke: 200 " + dta d"* Nuke: 240 " + dta d"* LeapFrog: 136 112 112 " + dta d"* Funky Bomb: 168 88 (* 5) " + dta d"* MIRV: 136 (* 5) " + dta d"* Death's Head: 240 (* 5) " + dta d"* Napalm: 40 (this weapon is different " + dta d"and the distance from the center is not " + dta d"determined, simply any tank in range of " + dta d"the flames loses 40 units of energy) " + dta d"* Hot Napalm: 80 (the rule is the same " + dta d"as in Napalm) " + dta d"* Baby Roller: 88 " + dta d"* Roller: 168 " + dta d"* Heavy Roller: 240 " + dta d"* Riot Charge: 0 (no energy is " + dta d"subtracted, but a portion of the ground " + dta d"upward from the hit point in a 31-pixel " + dta d"radius is removed) " + dta d"* Riot Blast: 0 (as in Riot Charge, but " + dta d"in a radius of 61 pixels) " + dta d"* Riot Bomb: 0 (no energy is subtracted," + dta d"but the ground in a radius of 17 pixels " + dta d"from the hit point is destroyed - as in " + dta d"the case of Missile. The weapon is " + dta d"useful for digging out after being " + dta d"buried, or for undermining an opponent) " + dta d"* Heavy Riot Bomb: 0 (as in Riot Bomb, " + dta d"but the explosion radius is 29 pixels " + dta d"from the point of impact - as in the " + dta d"case of Nuke) " + dta d"* Baby Digger: 0 (no energy is " + dta d"subtracted, but a portion of the ground " + dta d"is undermined in a radius of 60 pixels " + dta d"from the point of impact) " + dta d"* Digger: 0 (as above - greater " + dta d"undermining) " + dta d"* Heavy Digger: 0 (as above - greatest " + dta d"undermining) " + dta d"* Sandhog: 0 (as above - another way of " + dta d"undermining) " + dta d"* Heavy Sandhog: 0 (as above - largest " + dta d"dig) " + dta d"* Dirt Clod: 0 (no energy is subtracted," + dta d"but a ground ball with a radius of 12 " + dta d"pixels from the hit point is created. " + dta d"The weapon is useful for burying the " + dta d"opponent) " + dta d"* Dirt Ball: 0 (as above, but the radius" + dta d"of the ball is 22 pixels) " + dta d"* Ton of Dirt: 0 (as above, but the " + dta d"radius of the ball is 31 pixels) " + dta d"* Liquid Dirt: 0 (floods the ground at " + dta d"the point of hit with liquid soil, " + dta d"filling in the depressions) " + dta d"* Stomp: 0 (no energy is subtracted, but" + dta d"all tanks within a radius depending on " + dta d"the force of the shot are pushed back, " + dta d"and after being pushed back they may " + dta d"fall or be buried. With a maximum force " + dta d"of 990 units, the radius of action is " + dta d"about 60 pixels) " + dta d"* Laser: 100 (but here it is also " + dta d"different - only in a case of a direct " + dta d"hit simply subtract 100 units of energy " + dta d"- that is, the tank always dies) " + dta d" " + dta d"Large points received by the player is " + dta d"the number of tanks that died earlier " + dta d"than him. If any of the other tanks " + dta d"capitulated earlier (**White Flag**) is " + dta d"not added to those that died and does " + dta d"not give points. " + dta d"Only these points determine the order in" + dta d"the summary. " + dta d" " + dta d" 6. And now for defensive weapons: " + dta d"----------------------------------- " + dta d"* **White Flag** - causes the surrender " + dta d"of the player (can sometimes be useful " + dta d"in a hopeless situation). The advantage " + dta d"is that by surrendering you don't give a" + dta d"big point to your opponents and don't " + dta d"cause one of them to gain by killing us," + dta d"you also limit the loss of your energy " + dta d"and also cash. An important note - this " + dta d"is the only defensive weapon that can be" + dta d"deactivated. All you have to do is " + dta d"re-enter inventory and once again select" + dta d"its activation. " + dta d" " + dta d"* **Battery** - when activated, it " + dta d"recharges the tank's energy to full (99 " + dta d"units). It is one of three defensive " + dta d"weapons that does not deactivate other " + dta d"defensive weapons when used. " + dta d" " + dta d"* **Hovercraft** - a weapon that allows " + dta d"the tank to move. It has its own fuel " + dta d"supply in form of electric eels and in " + dta d"addition, it can be activated multiple " + dta d"times during the same turn, and after " + dta d"using it, you can activate another " + dta d"defensive weapon and fire a shot in the " + dta d"same turn. After using it, the tank " + dta d"rises above the mountains and using the " + dta d"cursor keys or a controller you can move" + dta d"the tank to a new position. [SPACE] or " + dta d"the controller button cause the tank to " + dta d"land in a new place. You can fly until " + dta d"the tank runs out of eels (presented on " + dta d"the status bar like the energy of a " + dta d"defensive weapon), if the eel fuel runs " + dta d"out the tank will fall down on its own. " + dta d"It is not possible to land on other " + dta d"tanks. " + dta d" " + dta d"* **Parachute** - does not protect " + dta d"against loss of energy due to a " + dta d"neighboring explosion, makes you not " + dta d"lose energy during ONE fall. After such " + dta d"a fall, it deactivates and a new " + dta d"parachute must be activated. " + dta d" " + dta d"* **Shield** - the simplest shield works" + dta d"exactly the opposite of **Parachute**, " + dta d"it does not protect against energy loss " + dta d"while falling, instead it protects " + dta d"against energy loss caused by ONE " + dta d"adjacent explosion. It protects once, no" + dta d"matter how strong the explosion is " + dta d"(whether tis but a scratch or a direct " + dta d"hit with a nuke), and deactivates " + dta d"immediately afterward. " + dta d" " + dta d"* **Heavy Shield** - a shield with its " + dta d"own energy (at the start of 99 units), " + dta d"it works the same as **Shield** (does " + dta d"not protect against falling) with the " + dta d"exception that it has its own energy " + dta d"resource. When exploding, the energy of " + dta d"this shield is reduced first, and if it " + dta d"reaches 0, the shield deactivates and " + dta d"further reduces the tank's energy. Due " + dta d"to this action, a tank with this type of" + dta d"shield can be ""killed"" by undermining " + dta d"it, because falling reduces the energy " + dta d"of the tank and not the shield. " + dta d" " + dta d"* **Force Shield** - the strongest " + dta d"shield - works just like Heavy Shield " + dta d"only that it is combined with " + dta d"**Parachute**. What is important in this" + dta d"case, falling does not take energy away " + dta d"from the shield or the tank. It is only " + dta d"taken away by hits. " + dta d" " + dta d"* **Bouncy Castle** - a " + dta d"passive-aggressive weapon :). It works " + dta d"as follows - in a case of a direct tank " + dta d"hit (and shield), it causes the " + dta d"projectile to ""bounce"" in the opposite " + dta d"direction with the same force with which" + dta d"it was fired. In the absence of wind and" + dta d"a difference in level, the weapon then " + dta d"hits the tank that fired it. After such " + dta d"a bounce, it deactivates. As the weapon " + dta d"reacts in this way only to precise hits," + dta d"it is also works like **Heavy Shield** " + dta d"and has 99 units at the start (we will " + dta d"probably have to rethink this value and " + dta d"give a smaller one here). " + dta d" " + dta d"* **Mag Deflector** - the second " + dta d"passive-aggressive weapon :) . In case " + dta d"of a direct hit on a tank (and shield), " + dta d"it causes the hit point to move randomly" + dta d"to the left or right side of the " + dta d"protected tank, but not very far, so you" + dta d"can get ""shrapnel"" with stronger " + dta d"weapons. As in the case of **Bouncy " + dta d"Castle**, it is also a shield that " + dta d"corresponds to the action of **Heavy " + dta d"Shield** and has 99 units at the start " + dta d"(probably here we will have also to " + dta d"rethink this value and give a smaller " + dta d"one). " + dta d" " + dta d"* **Nuclear Winter** - adds nothing, " + dta d"takes nothing away :) - in fact, it is " + dta d"not so much a defensive weapon as a " + dta d"double-edged one. It floods the area " + dta d"with ""radioactive"" fallout, which is " + dta d"ordinary soil. If you do not have at " + dta d"hand any weapon that digs up the " + dta d"terrain, and for that a shield " + dta d"(preferably disposable), then after such" + dta d"""fallout"" you will have to shoot " + dta d"yourself - because being underground is " + dta d"otherwise impossible. Alternatively, " + dta d"**White Flag** always remains. " + dta d" " + dta d"* **Long Schlong** - a special weapon :)" + dta d"- Costs a lot, doesn't really help with " + dta d"anything (except possibly digging " + dta d"yourself out but only when slightly " + dta d"buried but it has a cool name and looks " + dta d"cool :) - It can be activated " + dta d"independently of other defensive weapons" + dta d"and remains active until the end of the " + dta d"round (it cannot be deactivated). " + dta d" " + dta d"* **Lazy Boy** - it is not actually a " + dta d"defensive weapon. It is an aiming aid. " + dta d"When it is activated, the tank tries to " + dta d"aim at the nearest enemy and " + dta d"automatically adjusts the power of the " + dta d"shot and angle. If it has too little " + dta d"energy, it can sometimes aim wrong (it " + dta d"uses a method like **Cyborg** to aim). " + dta d"Like **Battery**, it does not deactivate" + dta d"other defensive weapons when used. Note:" + dta d"There is no point in activating this " + dta d"weapon before the round, targeting will " + dta d"not take place because there is nothing " + dta d"to target yet. " + dta d" " + dta d"* **Lazy Darwin** - works just like " + dta d"**Lazy Boy** but targets the weakest " + dta d"opponent. In this weapon, after " + dta d"automatic targeting, ""visual targeting"" " + dta d"remains active, so you can easily change" + dta d"the target and independently select " + dta d"another opponent by seeing if you hit " + dta d"him. " + dta d" " + dta d"* **Auto Defense** - activates the mode " + dta d"of automatic activation of defensive " + dta d"weapons. After its activation, the tank " + dta d"automatically activates the strongest " + dta d"shield it has (consuming it, of course) " + dta d"at any time when there is no shield " + dta d"(also between shots of other players). " + dta d"At the same time, if the tank's energy " + dta d"level drops below 30 units, it " + dta d"automatically activates **Battery** if " + dta d"it has it. This weapon remains active " + dta d"until the end of the round and is " + dta d"indicated by the ""computer"" symbol " + dta d"before the name of the active defensive " + dta d"weapon in the status line. It is the " + dta d"second defensive weapon that does not " + dta d"deactivate other defensive weapons when " + dta d"used. " + dta d" " + dta d"* **Spy Hard** - Help for the forgetful " + dta d":) . When activated, it shows a preview " + dta d"of information about the next opponents " + dta d"one by one. Left/Right - changes the " + dta d"""spied"" tank. Fire/Space/Return/Esc - " + dta d"ends the ""spying"". This is the last " + dta d"defensive weapon, which does not " + dta d"deactivate other defensive weapons when " + dta d"used. " + dta d" " + dta d"Due to the different warhead tracking " + dta d"system of **MIRV** weapons, the **Bouncy" + dta d"Castle** and **Mag Deflector** defensive" + dta d"weapons only use the shielding function " + dta d"when hit by these weapons. In addition, " + dta d"**MIRV** warheads do not bounce or fly " + dta d"through sidewalls when falling " + dta d" " + dta d"None of the shields protect against " + dta d"**Napalm**. **Bouncy Castle** or **Mag " + dta d"Deflector** on a direct hit will deflect" + dta d"it or carry it past, but just hit very " + dta d"close to a tank and its shield will not " + dta d"save it. " + dta d" " + dta d"**White Flag**, **Hovercraft** and " + dta d"**Nuclear Winter** weapons, when " + dta d"selected, require activation, this is " + dta d"accomplished by ""firing a shot"" after " + dta d"the selection of that weapon. Of course," + dta d"the shot of the offensive weapon is then" + dta d"not fired, but only the selected " + dta d"defensive weapon is activated. " + dta d" " + dta d"You can only have one defensive weapon " + dta d"active at a time (except **Long " + dta d"Schlong** of course :) ). You can always" + dta d"change the decision and activate another" + dta d"defensive weapon or deactivate **White " + dta d"Flag** before firing. " + dta d" " + dta d"And of course, activating a weapon when " + dta d"you already have some other weapon " + dta d"activated causes the loss of the " + dta d"previous one (no returns :) ). " + dta d" " + dta d" 7. ""Other"" weapons: " + dta d"--------------------- " + dta d" " + dta d"* **Best F...g Gifts** - this is a 'loot" + dta d"box', not a weapon per se. Buying it " + dta d"draws one of the offensive or (rarely) " + dta d"defensive weapons and adds it to the " + dta d"player's arsenal. It is a lottery in " + dta d"which you can lose (if you draw a weapon" + dta d"cheaper than the **Best F...g Gifts** " + dta d"price) but also gain. You can get a " + dta d"weapon otherwise not affordable at all " + dta d" " + dta d" 8. AI opponents: " + dta d"------------------ " + dta d" " + dta d"The game has 8 difficulty levels of " + dta d"computer-controlled opponents. Or " + dta d"actually 7 different ones and one " + dta d"""surprise"". Each has its own way of " + dta d"buying defensive and offensive weapons " + dta d"and a different method of target " + dta d"selection and targeting itself, as well " + dta d"as weapon selection. They are arranged " + dta d"in the list according to increasing " + dta d"""skills"": " + dta d" " + dta d"* **Moron** - the dumbest of opponents " + dta d"(which does not mean the safest). Shoots" + dta d"completely at random using only one " + dta d"weapon - **Baby Missile**. He doesn't " + dta d"buy anything and doesn't know how to use" + dta d"defensive weapons. " + dta d" " + dta d"* **Shooter** - This opponent does not " + dta d"shoot blindly. He chooses one direction " + dta d"for himself. Based on his own position -" + dta d"he shoots in the direction from which " + dta d"there is more space assuming that this " + dta d"is where the other tanks are. He starts " + dta d"firing from a high angle and shot after " + dta d"shot changes this angle to a lower and " + dta d"lower angle trying to fire the entire " + dta d"area on the chosen side. He always fires" + dta d"with the best weapon he has (the highest" + dta d"on the list of weapons he has - that is," + dta d"not necessarily the best). He does not " + dta d"use defensive weapons even though he " + dta d"buys them " + dta d" " + dta d"* **Poolshark** - When attacking, he " + dta d"sets the nearest tank as his target, " + dta d"then selects the angle of the shot, and " + dta d"tries to select its strength by drawing " + dta d"it from the selected range. He always " + dta d"shoots with the best weapon he has. He " + dta d"uses defensive weapons. With a " + dta d"probability of 1:3, he activates the " + dta d"best defensive weapon he owns (the " + dta d"highest on the list of weapons he owns -" + dta d"that is, not necessarily the best) " + dta d"before firing. If his energy level drops" + dta d"below 30 units - he uses **Battery** (of" + dta d"course, if he bought it before), if the " + dta d"energy drops below 5 and he has no " + dta d"**Battery** he surrenders - **White " + dta d"Flag**. At the beginning of the round he" + dta d"makes 1 attemp to buy defensive weapons " + dta d"and 6 offensive weapons. " + dta d" " + dta d"* **Tosser** - When attacking, he acts " + dta d"exactly like **Poolshark** however, he " + dta d"may have a ""better"" weapon inventory due" + dta d"to a different purchase tactic. He " + dta d"always activates the best defensive " + dta d"weapon he has before shooting. And just " + dta d"like **Poolshark** he uses **Battery** " + dta d"and **White Flag**. At the beginning of " + dta d"the round, he assesses how much money he" + dta d"has and depending on that, he makes " + dta d"(money/5100) attempts to buy defensive " + dta d"weapons and then checks again how much " + dta d"money he has left and makes (money/1250)" + dta d"attempts to buy offensive weapons. " + dta d" " + dta d"* **Chooser** - Takes as a target the " + dta d"weakest opponent (with the least amount " + dta d"of energy) and aims very precisely, but " + dta d"before the shot the energy of the shot " + dta d"is modified by the parameter of luck :) " + dta d", that is, despite the precise aiming it" + dta d"does not always hit. He shoots with the " + dta d"best weapon he has unless the target is " + dta d"close. Then he changes his weapon to " + dta d"**Baby Missile** to avoid hitting " + dta d"himself. He always activates the best " + dta d"defensive weapon he has before shooting " + dta d"and, like **Poolshark**, uses " + dta d"**Battery** and **White Flag**. He " + dta d"purchases just like **Tosser**. " + dta d" " + dta d"* **Spoiler** - He shoots exactly like " + dta d"**Chooser** except that he has more luck" + dta d":) , which means that even if he doesn't" + dta d"hit the target of his choice, it can be " + dta d"a more precise shot than **Chooser**. If" + dta d"he is unable to hit his chosen target, " + dta d"he tries to choose another target that " + dta d"he can accurately hit. He uses defensive" + dta d"weapons exactly like **Chooser**. At the" + dta d"beginning of the round, he assesses how " + dta d"much money he has and depending on that," + dta d"he makes (money/5100) attempts to buy " + dta d"defensive weapons and then checks again " + dta d"how much money he has left and makes " + dta d"(money/320) attempts to buy offensive " + dta d"weapons. When buying defensive weapons, " + dta d"he buys only strong and precise weapons " + dta d"- that is, weapons that won't " + dta d"accidentally hurt him. " + dta d" " + dta d"* **Cyborg** - Takes aim at the weakest " + dta d"opponent (with the least amount of " + dta d"energy) but prefers human-controlled " + dta d"opponents. If he is unable to hit his " + dta d"chosen target, he tries to choose " + dta d"another target that he can accurately " + dta d"hit. Aims very accurately and in the " + dta d"vast majority of cases hits on the first" + dta d"shot. He fires the shot with the best " + dta d"weapon he has unless the target is " + dta d"close. Then he changes his weapon to " + dta d"**Baby Missile** to avoid hitting " + dta d"himself. He uses defensive weapons " + dta d"exactly like **Chooser** but if he has " + dta d"more than 2 pieces of **Battery** he " + dta d"uses them if the energy decreases below " + dta d"60 units.. He shops exactly like " + dta d"**Spoiler**. " + dta d" " + dta d"* **Unknown** - Before firing each shot," + dta d"he randomly chooses a course of action " + dta d"from **Poolshark** to **Cyborg** and " + dta d"applies his tactics. However, the " + dta d"tactics of weapon purchases are always " + dta d"identical to **Tosser**. " + dta d" " + dta d"Trying to buy a weapon (offensive or " + dta d"defensive) is as follows: " + dta d"First, one of the weapons is drawn " + dta d"(among all possible offensive or " + dta d"defensive weapons). Then a check is " + dta d"performed to see if the drawn weapon is " + dta d"in the list of weapons possible for " + dta d"purchase by the tank. If not, no weapon " + dta d"is bought in this trial, and if so, its " + dta d"price is checked. If the tank has that " + dta d"much money, the weapon is bought, " + dta d"otherwise the trial ends without making " + dta d"a purchase. " + dta d" " + dta d"Weapons purchased by: **Shooter**, " + dta d"**Poolshark**, **Tosser** and " + dta d"**Chooser**: " + dta d"Offensive weapons: " + dta d"* Missile " + dta d"* Baby Nuke " + dta d"* Nuke " + dta d"* LeapFrog " + dta d"* Funky Bomb " + dta d"* MIRV " + dta d"* Death's Head " + dta d"* Napalm " + dta d"* Hot Napalm " + dta d"* Baby Roller " + dta d"* Roller " + dta d"* Heavy Roller " + dta d" " + dta d"Defensive weapons: " + dta d"* Battery " + dta d"* Parachute " + dta d"* Strong Parachute " + dta d"* Mag Deflector " + dta d"* Shield " + dta d"* Heavy Shield " + dta d"* Force Shield " + dta d"* Bouncy Castle " + dta d" " + dta d"Weapons purchased by: **Spoiler** and " + dta d"**Cyborg**: " + dta d"Offensive weapons: " + dta d"* Missile " + dta d"* Baby Nuke " + dta d"* Nuke " + dta d"* Hot Napalm " + dta d" " + dta d"Defensive weapons: " + dta d"* Battery " + dta d"* Strong Parachute " + dta d"* Mag Deflector " + dta d"* Heavy Shield " + dta d"* Force Shield " + dta d"* Bouncy Castle " + dta d" " + dta d" " diff --git a/Manuals/manual_conv.py b/Manuals/manual_conv.py new file mode 100644 index 0000000..6fe12d3 --- /dev/null +++ b/Manuals/manual_conv.py @@ -0,0 +1,58 @@ +""" Converts manual files to atari SCREENCODES ready for display +""" +import re +import sys + +MAX_W = 40 + +def break_long_string(long_string): + """ write a python function that breaks a long string of words to a list of MAX_W long strings. + Important - each new string must contain the full word, no breaking inside words.""" + words = long_string.split() + result = [] + current_string = '' + + for word in words: + if len(current_string) + len(word) <= MAX_W: + current_string += word + ' ' + else: + result.append(current_string.rstrip()) + current_string = word + ' ' + + if current_string: + result.append(current_string.rstrip()) + + return result + + +def remove_wierd(t: str) -> str: + t = re.sub(r'!.*\)?', '', t) # remove embedded image + return re.sub(r'[#`]', '', t) + + +with open(sys.argv[1], 'r') as f: + md = f.readlines() +out = '' +for line in md: + if line.startswith('#'): + line = remove_wierd(line) + out += line + out += '-' * len(line) + '\n' + else: + line = remove_wierd(line) + out += line + +# make lines break on words +out2 = '' +for line in out.split('\n'): + if len(line) <= MAX_W: + out2 += line + '\n' + else: + for line_shorter in break_long_string(line): + out2 += line_shorter + '\n' + +# convert to SCREENCODES +for line in out2.split('\n'): + line = line + ' '*(MAX_W-len(line)) + line = line.replace('"', '""') + print(f' dta d"{line}"') diff --git a/artwork/st_to_xl_font_conv.py b/artwork/st_to_xl_font_conv.py new file mode 100644 index 0000000..13a73d2 --- /dev/null +++ b/artwork/st_to_xl_font_conv.py @@ -0,0 +1,42 @@ +import argparse +from PIL import Image +import random + +class AtariFont: + """representation of Atari 8-bit font as a list 128 characters, each character is a 8 bytes long list""" + def __init__(self): + self.font = [[0, 0, 255, 0, 0, 0xaa, 1, 0] for _ in range(128)] + + def to_image(self) -> Image: + fnt_img = Image.new("1", (32 * 8, 4 * 8)) + i = 0 + for x in range(32): + for y in range(4): + for y_offset, v in enumerate(self.font[i]): + for b in range(8): + c = (v & (1 << b)) >> b + pos = (x * 8 + b, y * 8 + y_offset) + fnt_img.putpixel(pos, c) + i += 1 + return fnt_img + + +def convert_st(im: Image): + print(im.format, im.size, im.mode) + im.convert('1') + print(im.format, im.size, im.mode) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="Convert AtariST 128x256 font image to Atari 8-bit fnt file(s) ") + parser.add_argument('--file', '-f', dest='file', type=str, required=True, + help="AtariST picture file") + args = parser.parse_args() + + st = Image.open(args.file) + convert_st(st) + a = AtariFont() + a.to_image().save("test.bmp") + + +