Ripoff from symbianworld.org
电脑游戏幻想内容的魅力部分来自于其所满足的情感需求。不同幻想内容吸引不同玩家。有时幻想内容只是类似于《食物大战》中的青春期情感释放，这里你通过堆满食物的桌子同扔馅饼的主厨战斗。游戏的破坏物件虚幻内容吸引众多玩家。其表现形式可以是《Clowns and Balloons》中的将小丑从跷跷板上弹出，击破气球，或者是《Breakout》中的打破墙上的砖块。在这些情况中，部分受损的墙面或成排气球形成富有视觉吸引力的目标，同时充当形象的积分记录装置。
显然，雅达利用户喜欢能够提供有竞争性电脑对手的游戏。在若干多人游戏中，2人或更多人组合会同时进行竞争。这些比赛很多都是包含2-4人玩家的运动或纸牌游戏。合作型游戏很少见，除非是在电脑竞争者非常熟练的情况下。街机游戏《Ripoff》包含电脑对手，这不仅仅是两位玩家同时体验的比赛。战斗非常迅速和激烈，团队成员的船只需受到保护，让其免受伙伴子弹的攻击。家用电脑版《Wizard of Wor》提供竞争型或合作型体验选择。这是款颇有难度的游戏，若玩家想要进入更高关卡，那就需要进行合作型体验，但这款游戏的合作是通过协议。若你不慎犯错，伙伴甚至会得到1000积分。看到某玩家无心走入其他玩家的射线后，合作体验变成激烈竞争着实非常有趣。
PM from atariarchives.org
Vanguard from atariarchives.org
而在《Super Cobra》、《Vanguard》和《Tail of Beta Lyrae》这类的滚动游戏中，玩家的船只要穿梭于多屏幕空间中，其优点在于能够激发玩家的好奇心，呈现视觉多样性。《Vanguard》（游戏邦注：这是款射击游戏，游戏中许多敌方的船舶和生物会攻击你的船只）设有蜿蜒的隧道，其中穿插各类小空间。游戏融入众多截面，还有从水平切换到对角，然后再转变成垂直位模式的滚动方向，这就好像同时体验各种不同的街机游戏。游戏中玩家享有多次机会选择进入战斗中，其主要武器是有时间限制的通电宇宙飞船（主要用于攻击敌人），或者只是4个平凡而古老的双向激光器。出现于下方角落的地图主要告知玩家进展情况。这款游戏的好奇因素非常诱人，游戏腾有30秒钟时间诱惑玩家投入额外15分钟，继续之前的内容。
Pole Position from atariarchives.org
Joust from atariarchives.org
游戏不断促使玩家采取行动。玩家需持续点击动作按键，保证座驾处于飞翔状态。当玩家在屏幕切换间隙进行短暂休息，其所操作的道具也会处于停止状态（游戏邦注：不会像在其他游戏中那样，还会继续漫无目的地飞翔）。两个玩家能够同时进行体验，但无需达成合作关系。屏幕底部的Lava Troll（熔岩巨魔）是玩家和敌人所面临的额外危险情境。Lava Troll试图抓住周围的物体，将其扔入熔岩中。这有时能够对玩家起到一定帮助，因为熔岩能够禁锢敌人，方便玩家进行攻击。关于在更高关卡中出现的更可怕敌人翼手龙，玩家需要想办法打败它。作为额外能力，游戏每隔5道屏幕就会出现额外关卡，其中玩家无需同任何人战斗，只是单纯通过捡鸡蛋获得额外积分。通常，这都能够给玩家带来额外生命，或者至少是在游戏空间中进行短暂休息。肢体接触、独创性、即时玩家参与及怪兽互动都是促使这款获得成功的关键要素。
这些拯救主题出现在《大金刚》、《Donkey Kong Junior》、《Fantasy》和《Adventures of Roby Roto》之类的游戏。拯救情境通常鲜少发生，但此主题将玩家从游戏某内容带入下一内容。在《大金刚》和《Fantasy》中，女孩会在玩家到达前进入下个屏幕情境中。游戏目标不是进行拯救，而是克服挡道的障碍。玩家通过重复体验掌握模式及如何准确定时，从而提高自己的技能。
虽然扮演主角在这些游戏中很少见，但有两款游戏都遵循此主题：街机上的《The Adventures of Roby Roto》和微电脑上的《救难直升机》。就两款游戏来说，后者更加纯粹。成功基于获救人质衡量。玩家也许在完成任务的过程中摧毁27台敌军坦克和飞机，但这些都无法提高积分。因此，虽然人质的挥手示意能够引起其他人质的同情，但游戏的魅力仅仅存在于扮演主角所带来的自我满足感。
Froggor from atariarchives.org
Game Design Theory
There is no sure-fire way to predict whether a game will be successful, but there are certain attributes that contribute to success. Certainly a game should have a goal without one, what is the point in playing? Rules should be straightforward and logical. The game should also be a challenge; if it requires no skill, you will quickly tire of it. A game should evoke either fantasy or your innate curiosity; if it isn’t novel or puzzling, it becomes boring. And lastly, arcade games, that by definition have a lot of action, should be easily controllable.
Game objectives take two different forms. There are games where you gradually approach the goal, like destroying a fleet of invaders in Galaxian, eating all the dots in Pac Man, or rescuing all of the hostages in Choplifter. There are other games where the goal is to avoid catastrophe. Examples of this range from preventing a nuclear power plant meltdown in Scram, to saving your cities during a nuclear missile attack in Missile Command, or preserving all of your fuel canisters in Ripoff. Do not confuse these two kinds of game objectives with the simplistic and mindless act of scoring lots of points by shooting everything that moves.
Goals must suit a player’s expectations or fantasies. This is why certain people like certain types of games better than others. The battle lines of good against evil lurk in the background of many space games, wherein evil, menacing invaders are bent on the destruction of Earth. It becomes the player’s goal to protect the Earth as long as possible while scoring the most points for killing aliens. Other appealing goals range from accumulating the most treasure while exploring a dangerous cavern, to escaping from a crumbling building before it collapses or your food runs out.
Computer game fantasies derive some of their appeal from the emotional needs they satisfy. Different fantasies appeal to different people. Sometimes the fantasy is simply an adolescent emotional release as in Food Fight, where you battle piethrowing chefs with tables full of messy food. The fantasy of destroying objects during a game appeals to others. It can take the form of popping balloons by bouncing a clown off a teeter-totter, as in Clowns and Balloons, or breaking out bricks in a wall, as in Breakout. In each case, the partially-destroyed wall or rows of balloons presents a visually compelling goal and a graphic scorekeeping device as well.
Goals in most games imply an end point, either when the goal is reached or when you fail, It is often important to make sure the game doesn’t just go on and on forever. Limits should be set. Sometimes these take the form of time limits or constantly diminishing amounts of ammunition, balls, or ships. The most widespread limiting factor, at least on home computers, is speeding up the game. it is also the most abused. A game tempo, where it is neither humanly nor mechanically possible to withstand the onslaught of the computer’s forces, cheats the player.
For a game to be considered challenging, it should have a goal where the outcome is uncertain. If the player is certain to reach the goal or certain not to reach it, the game is unlikely to present a challenge, and the player will lose interest. It is very easy to introduce randomness into the game either by hiding important information or by introducing random variables that draw the player toward disaster. Be careful not to overdo this, since a totally random game lacks a skill factor. Players quickly discover that they have no control over the outcome.
One of the more important design elements in any game is a logical set of rules. The rules can be extremely simple or utterly complex, but they must make sense. Since the game must follow its theme, any rules or variations should stem directly from that theme. It is pointless to throw in game elements that simply don’t belong just because you think that confusing the player would make the game more difficult. For instance, Donkey Kong, one of the best jumping, climbing arcade games, doesn’t require the player to shoot everything in sight, just avoid obstacles to reach the goal. Similarly, a tough, shoot-’em-up game like Galaxian keeps its fluid alien attack uncluttered by distracting game elements.
A game like Galaxian is considered asymmetric. It is not a balanced game because both the player and the computer’s alien fleet are unbalanced in strength. Yet the differences between the advantages and disadvantages of the two opponents are too similar to build triangular relationships that make an arcade game more interesting.
The triangular relationship is one in which each opponent can defeat one other or be defeated by the third. The relationship is often used in many games to lure the player into a trap by sacrificing a weakly-armed player. Battlezone is a good example. The computer maneuvers the saucer to entice the human into a poor position against the tank. Time Pilot lures you into a poor position more subtly by placing the bonus parachute directly in line with the incoming enemy fighter pack. Other games use the bonus to distract you. Sky Blazer nearly always drops a fuel canister just at the time that your target appears, and bomb targets come up in Xevious just when you are engaged in a heavy fire fight with the alien armada.
A variable difficulty level is often used to alter the game’s level of play. These levels, often with ego-satisfying names like Star Commander or Pilot, can be set by the player. Many games are designed to become harder the further you progress. The increasing skill level requirement presents an added challenge, while preventing the player from growing complacent. Often the technique is to speed up the game or place additional enemy craft into battle. The player is required to play faster and better, honing his reflexes during the process. Another variation allows less time to complete your objective as the difficulty increases.
Care must be taken so that the game’s level of difficulty progresses evenly from beginner to expert level, Players’ scores should reflect a steady improvement in what is known as a positive monotonic curve. A game with a relatively flat curve is hard to learn, while a sharp jump means that there is some trick required to master the level. Games that don’t have a positive monotonic curve frustrate players because they fail to provide reasonable opportunities to better one’s score.
Any good game should offer a reward for reaching increasingly. difficult levels of play. Often, bonus points, extra balls, ships, or more ammunition are rewarded for exceeding score thresholds. It is important that the rewards for winning outweigh the disappointment of losing. A player’s ego is involved. A person wants to beat a challenging game, not be humiliated each time he loses.
The ideal arcade game should foster the illusion of winnability at all levels of play. One important factor is a clean and simple game design. Too much detail or too many rules may intimidate the player. If a player believes that his failure was caused by a flaw in an overly complex game or by the controls, he will consider the game unfair and quit. On the other hand, if a player perceives failure to be attributed to correctable errors on his part, then he believes the game to be winnable and will play repeatedly to master the game. It’s as if the player teases himself to play one more time.
Appealing to a player’s curiosity effectively keeps a game interesting. While novelty is sometimes a crucial factor in the original purchase, if the game has little depth, it becomes repetitious and boring. One method that appeals to many game designers is to have the game progress to slightly different scenarios. Some games change the opposition, while others vary the scenery; some do both. The player has to excel if he is to satisfy his curiosity. Games like Threshold, which progresses through twenty-four sets of alien spacecraft, or Vanguard, in which both the scenery and alien craft changes, offer strong curiosity incentives.
These spurs to a player’s interest in the game are called “Perks.” They are most important just when the player thinks he has the game figured out. Perks must be carefully timed so that the player does not give up on the game because not enough happens soon enough or because everything the game has to offer has been seen too soon. The most common perk is an extra life. Consider these coin-op video games: Pac Man, Donkey Kong, Dig Dug, Joust, Marto Bros., and Tempest. These games have multiple screens. The different screens by themselves are a perk, but what these games have in common is the time at which an extra life is rewarded. The extra lives generally come to the average player at some point in his third screen. This is hardly coincidental. The screens are scheduled at a specific rate, somewhat dependent on the player’s skill. The extra life on the third screen comes in just before the average player might become exasperated and so not put in another quarter. The novice player is usually out of lives at this point, too.
Some games use cartoon intermissions to perk up the game. The player’s interest is renewed with each cartoon. For many players, seeing the next cartoon becomes a personal goal. Placing hidden features not even hinted at in the rules is another clever perk. These embellishments are left for the experienced player to discover. They can even brighten up the earlier levels of a game which has become dull for the expert. For example, in the coin-op version of Star Wars, players hear the voice of Obi-Wan Kenobi admonishing them to use the Force. Nothing in the game instructions tell them what to do. Only by experimentation will a player realize that he must fly through the trench without firing a shot to receive a substantial point bonus upon reaching the exhaust port. The high score feature can also be considered as a “perk.” While it doesn’t renew interest within the game, it is important because it can renew interest in playing even a mediocre game again. The high score itself presents a personal goal to reach, whether it be to beat your own high score or someone else’s.
Sometimes varying the player’s emotional response during the game serves as a “perk.” Tension can be relieved during a tense shoot-’em-up with occasional comic relief, while cute games sometimes need touching moments. Remember games as entertainment need contrast. In sum, the varieties of perks are endless, but their objective is the same: renew interest in the game before the player becomes tired of it.
A game’s controllability is one of the more important considerations in design. It is sometimes referred to as human engineering. Designers usually choose between keyboard and paddle/joystick control. While eye/hand coordination is more effective with paddles or joysticks, programmers attempting to create games with too many control functions will opt for a keyboard control system. At times, they produce a game that requires nine or ten keyboard controls which, unfortunately, only a pianist can operate. Games whose controls require considerable time to master often prove frustrating to play.
The ability to accurately control the action is crucial in the I design. If the screen does not respond immediately to the player’s input, the player may end up feeling out of sync and become frustrated with the game. The programmer must insure through careful design that the game responds properly to the player. The player shouldn’t believe, for example, that the computer made a wrong turn for him in a maze game.
Apparently, Atari owners like games which pit them against a competitive computer opponent. In several multi-player games, groups of two or more simultaneously compete against each other. Most of these contests are sports or card games involving two to four players. The cooperative game is rarely seen, except in cases where the computer competitor is much too skillful. The arcade game Ripoff involves a computer opponent that is more than a match for two players playing simultaneously. The battle is so fast and fierce that the teammate’s ship has to be protected from his partner’s bullets. The home computer version of Wizard of Wor offers a choice of competitive or cooperative play. It is a tough game that really needs cooperative play if the more advanced game levels are to be reached, but cooperation in this game is by agreement, not by mutual invulnerablity. Your partner is even worth 1000 points if you mistakenly blunder. It is quite interesting to watch cooperation turn into a fiercely competitive game after one player inadvertently walks into the other player’s line of fire.
So far, we have discussed theory and generalizations that should increase a game’s playability and appeal to the public. Concrete examples of the more popular games should give you a much more solid foundation for your own designs.
Example Arcade Games
Space Invaders was the first really popular arcade game. The object is to defend your turf against an alien horde of ferocious invaders who attack your castles and gun bases with a barrage of undulating bullets. It is actually a timed game, since you only have a limited period to destroy the entire attacking wave before they descend to the ground in marching formations and overrun your lone gun base.
The elimination of each alien acts as a visual scorekeeping device. You can never win, only survive as long as possible (thus getting the maximum playtime for your quarter).
Elimination of each attacking wave, however, is an intermediate goal that staves off your inevitable doom. Each successive level becomes more difficult since the aliens, which begin their attack increasingly closer to Earth each round, limit the amount of time that you have to destroy them. Their constant approach to your mobile gun base decreases the reaction time needed to avoid enemy fire.
Shoot-’em-up games like Sneakers, Galaxian, Threshold, and Galaga are actually spin-offs of the Space Invaders theme. Whether they are set in space or on the ground, each has a variety of targets bent on your destruction. The targets or attackers are no longer static. Either they appear to dodge your fire, or they resort to kamikaze-type attacks.
The strong appeal of these types of games is based on curiosity and game depth. You are inspired to do better with each game just to see what the attackers are going to look like in the next level and what their tactics might be. The design goal is variety, with each successive level slightly harder than the last. Although most offer an unlimited number of bullets, Threshold controls rapid, random, and wasteful firing by overheating your lasers. Thus, your firing must be more accurate and paced during the game.
The popularity of Pac Man can be attributed to the game’s design. First, it satisfies the fantasy concept of a person’s childhood dreams. As children, we dreamt that we were being chased by evil monsters or ghosts, and we felt powerless to stop them. We wished that there were some way to turn the tables, if only for a few moments. Pac Man’s four energy dots fulfill that fantasy. The game also offers the visual feedback of the number of remaining dots to be eaten at each level. And since clearing each individual level is an immediate goal, even beginners believe a level can be cleared. Because Pac Man is a game of consumption rather than one of destruction, it appeals to players of both sexes.
The game becomes a learning experience for the more advanced player, since the ghosts follow a discernible, non-random pattern. A player is eventually able to predict their movements and, consequently, to develop a technique to clear all of the dots on a particular level. The long term goal is survival and the highest score. The game is designed so that you gain more pleasure as you get better. Thus, players are willing to devote the time and money to master the game.
Scrolling games, such as Super Cobra, Vanguard, and Tail of Beta Lyrae, wherein your ship travels over a multi-screen world, benefit strongly from player curiosity and visual variety. Vanguard, a shoot-’em-up game in which a variety of enemy vessels and creatures attack your ship, has an extremely long sinuous tunnel with various types of chambers. The game has so many sections, combined with scrolling directions which change from horizontal to diagonal to vertical, that it is like playing many different arcade games at once. The player is given the option several times during the game to enter battle with a time-limited, energized spacecraft equipped for ramming the enemy, or merely four plain, old directional lasers. A map displayed in the lower corner informs the player of his progress. The curiosity factor is so enticing in this game that thirty seconds are provided to lure you into inserting another quarter in order to continue from where you left off.
Super Cobra is a classic game wherein you fly a helicopter over scrolling alien terrain and through heavily fortified and obstacle-filled narrow tunnels. Initially, you have to survive ground-launched rockets and a few laser bases, but as the game progresses you must also contend with meteors and alien ships. Using either your bombs or lasers to clear the tunnels of protruding ground targets is crucial to your survival. Bombing accuracy is also important. If you don’t replenish your fuel supply by hitting enough fuel depot targets, your game will soon be over.
Pole Position, a highly competitive game, appeals to many players because it mixes just the right amount of fantasy with reality. It fulfills the fantasy of being a race car driver without the inherent danger. Crashes are never fatal and do not end the game. The goal of the game is to qualify for and complete the race. In a sense, it is a very realistic simulation requiring shifting gears and precise steering on a scrolling roadway. The player has a three-dimensional view of the course and his car, as if he were following it from fifty feet behind, a sort of out-of-body effect.
Joust immediately comes to mind when discussing a pure fantasy game that traces its roots to the glamorous days of medieval chivalry. Instead of presenting two knights in shining armor dueling on horseback, Joust allows the player to fly his ostrich-like mount to do battle in midair. The player does not shoot his opponents but defeats them by ramming his mount and lance into theirs, sometimes delicately, sometimes violently. The higher mount always wins. The player gains the excitement of physical contact without a bloody nose.
The game constantly forces the player into action. He must keep hitting the action button to make his mount fly. When the player takes a short rest between screens, his surrogate also rests and does not continue to fly along aimlessly as it might in other games. Two players can play simultaneously but are not forced into partnership. The Lava Troll on the bottom of the screen is an additional menace both to the player and his enemies. It attempts to grab at anything close enough and drag it into the lava. This sometimes works to the player’s advantage, since the lava can imprison an enemy and make it easier to destroy. A more formidable enemy, the pterodactyl that appears on higher levels, requires the player to discover a way to defeat it. As an added perk, every fifth screen is a bonus level where the player need not fight anyone but simply pick up the eggs for additional points. Many times this earns the player an extra life or at least a temporary rest from the game’s pace. Physical contact, originality, immediate player involvement, and monster interaction are key parts of this game’s success.
Some of the most clever games can be classed as novelty games. These are often “cute” games involving human or animal characters with which the player can identify. These novelty games either follow the theme of rescuing someone, or require the player to develop good manual dexterity and precise timing skills in order to avoid catastrophe or the demise of the hero.
The rescue theme appears in games like Donkey Kong, Donkey Kong Junior, Fantasy, and the Adventures of Roby Roto. In many cases an actual rescue doesn’t take place, but the theme carries the player from one portion of the game to the next. In both Donkey Kong and Fantasy, the girl is whisked away to the next screen just before the player reaches her. The objective isn’t the rescue but to overcome the obstacles barring your way. Learning the patterns and precise timing through repeated play hones the player’s skill.
Although playing the hero is rare in these games, two games have followed this theme: The Adventures of Roby Roto in the arcade, and Choplifter on most microcomputers. The latter is probably the purest in theme of the two. The rescue of sixty-four hostages is the one and only goal. Success is measured in the number of hostages rescued. The fact that the player may have destroyed twenty-seven enemy tanks and planes during the mission adds nothing to the score. Thus, while details
like the hostage’s waving builds empathy for the hostages, the appeal is simply the ego-satisfying role of playing the hero.
In the final group of novelty games, the player must avoid the calamity of losing a life. The goals and obstacles in these games differ widely. Crazy Climber requires the player to scale a building while windows close to block the path, and angry tenants, attempting to knock the climber off the building, drop flower pots on his head. Frogger has the player brave traffic in a test of precise timing skills. And playing Tarzan in jungle Hunt requires dexterity and timing skills to swing from vine to vine like a trapeze artist, or risk death in the fall. In each of these games the cuteness is what first attracts the audience, but it is the development of the player’s timing skills and game depth that keeps him playing. Again, the concept is variety, along with increasing levels of difficulty.
Arcade games have that indefinable ability to make you feel that your losing is just a fluke, and that if you play just one more time, you’ll beat it. If you can design a game that is fun and exciting to play, and has that added quality, then you have designed an addictive game, and wealth beyond your wildest dreams may be yours.
What Can Go Wrong
The best piece of advice that we can give a game programmer is to carefully plan out your game before you begin programming it. First decide what results you want and work backwards to figure out what you have to do to get them. If it doesn’t work, change your concept or goal until you get something you are satisfied with. Make sure the game follows real-world physical principle, so that it feels right on a gut level. For example, objects smash or bounce when they fall from any height.
Many novice programmers try to get something up on the screen immediately. Actually, there is nothing wrong with this technique. After all, it does give you some encouragement to continue. However, most develop their games on a piecemeal basis, adding something because it looks good or because they need more action. The result is that they soon run out of players or characters and are forced to do a very painful rewrite.
Everyone prefers to organize his game differently. Some, like me, prefer the tight- structured approach of a flowchart; others, like my partner, just write down a rough outline of the order of events in the game. Whichever approach you prefer, we strongly recommend that you develop many of your frequently used routines as independent subroutines. This approach simplifies the logic of the main code loop.
We carefully planned all of the games in this book before we wrote them. This means that we considered where items like screen memory, player-missile memory, the character set, and the actual game code were placed in memory. We roughly flowcharted the game’s main logic loop. We then wrote the code in small chunks, but in such manner that it always ran, or at least was supposed to run.
The first priority was to draw the playfield. This generally means that we had to get the display list right and move the character set data into the correct section of memory. It may sound like a piece of cake, but some terrible things can go wrong. Sometimes the display list is too long because you forgot that the first LMS instruction is one of the mode lines. The screen rolls or goes wacko. Maybe you let the display list inadvertently cross a 1K boundary, or allowed screen memory to cross a 4K boundary in the middle of a mode line. Each of these mistakes can cause the screen to behave erratically. If you do get a stable display, and it isn’t the one you specified, perhaps you forgot to tell ANTIC where either your display list or your RAM character set resides. It is possible that you didn’t place your character set on a 1K boundary, or on a 1/2K boundary if you are in GR. 1 or GR. 2. The fastest method to troubleshoot the problem in Assembly language is to enter the monitor and look at the intended areas for the display list and character set and to see if they are actually there. It is quite possible your memory move routine is faulty.
The next step is usually to initialize the starting positions of your players. Sometimes they just don’t appear, so you immediately check to see if the player shape is actually in the proper 256 bytes of player-missile memory. You should also check that the PMBASE is on a 2K boundary for singleline resolution players (1K boundary for double-line resolution), and that you told ANTIC where that is. If that isn’t the fault, some programmers make the mistake of trying to read a player’s horizontal position by looking at the ANTIC horizontal position register. You may be able to write a horizontal position to the hardware location, but you read collisions from these same hardware locations. If you are going to increment a player’s horizontal position, you will need to update a RAM location before writing the value into the hardware register. If this doesn’t appear to be the problem, there are two other possibilities. First, you may have forgotten to turn on player-missile graphics switches. But probably the most frequent mistake is to forget to set the player’s shadow color register. If it isn’t set, it defaults to the background color, blends in with the background and disappears. Always use the shadow color register to change or set color registers, or the change may only last one television frame because the hardware registers are updated every VBlank. The only exception to this rule is when you use a Display List Interrupt to change colors midscreen.
Display List and Vertical Blank Interrupts can sometimes cause unforeseen problems. Inexperience is usually the culprit. The first thing to remember is that you must have a program to interrupt from. Since it is easy to write a simple game entirely in Deferred Vertical Blank, the main loop can be as short as FOREVER JMP FOREVER. The machine will hang up if you don’t have somewhere to jump back to at the end of the VBI. On the other hand, if the code is too long, it will be interrupted by the next VBlank before it finishes. Unexpected results, such as a garbaged screen, may occur. The most common problems with Display List Interrupts occur when you forget to save your registers before entering the routine or forget to restore them before exiting. A mistake here will lock up the machine. The other problem is when the interrupt seems to occur on the wrong mode line. Remember that the interrupt has to be set on the mode line before the interrupt is to occur.
BASIC programmers who use Machine language subroutines sometimes encounter strange problems. If you are going to incorporate a VBlank routine, make sure you clear the decimal mode at the beginning. This is especially important if your program uses decimal arithmetic internally. Another problem occurs when you pull the incorrect number of bytes off the stack. This can lock up the machine on the return if the return address on the stack is incorrect. Unfortunately, these subroutines are very difficult to test in Assembly language without constructing a setup routine to simulate the stack environment.
BASIC is usually very forgiving, so it is unlikely that you will lock up the machine if you aren’t using Machine language subroutines. One of the most common display mistakes is forgetting to set a graphics mode after you lower RAMTOP to reserve space for your RAM character set and player-missile graphics. If you forget, you will still have a Graphics 0 display just below the old RAMTOP. The new graphics call will actually place the screen below RAMTOP.
We hope we have suggested adequate solutions for the most common errors that might occur in your games. We have learned many of these by bitter and frustrating experience. We will admit that these weren’t the only errors that we encountered when programming the code in this book. However, most of the others were logic problems that one of us alone couldn’t trace. For example, when I was programming the maze game, I programmed the manual mode for the joystick-controlled letter first. It worked fine, but became buggy when I added the auto mode. Sometimes the letter would behave properly, yet at other times it would escape the maze walls. I single-stepped the code repeatedly and the legal move flags were always set correctly. Days went by and I couldn’t find any cause for the anomaly. My partner discovered that it only happened just after the stick was returned to neutral. While legal moves were reset at the center of each maze block, moving the stick was required to close pathways other than those in the direction of movement or in reverse. Nothing was done in the neutral position because the letter was stopped in the non-auto mode. Since I had neglected to close gates when I was in the neutral position, the joystickcontrolled letter was now traveling in some direction automatically, so it became possible to give it a new direction command while it was between blocks. For example, if it had just passed a block that said it could go right, pushing right from the neutral position would command it to go right even though there was a wall there. In short, I forgot to close gates when I was in the auto mode, because I assumed they were set by one of the four non-neutral positions. This is a fine example of misguided thinking.
In closing, we hope that we have provided you with enough programming techniques and game theory to create your own arcade games. Remember that originality, persistence and attention to detail are the keys to success in this industry. We hope some of our readers will join the ranks of successful Atari game designers. If you take the easy way out and program a quick game, the results will show in mediocrity.（Source：atariarchives）