ゲームフレーム — エクトブラスター
DOS 3.3およびProDOSで動作します。STEPHAN
SCHWIRZKE
II コンピューティング 第1巻 第1号
1985年10月/11月


家は真っ暗で、しかも最悪!幽霊たちがどこからともなく現れ、あなたを追い払おうと走り回っています。あなたは、このエクトプラズムのような侵入者たちを家から追い払うために呼び出されました。追い払うには、彼らがこちらに向かってくる時にエネルギーを奪うしかありません。
あなたは最新の対ゴースト兵器を装備しています。レーザー駆動式照準器は、ジョイスティックで指示した場所に「立ち入り禁止」の標識を投影します。ジョイスティックのボタンを押すと、画面下部のあなたの位置から、照準器でマークされた場所に向かってエントロピージュースが噴出します。ジュースがゴーストに当たると、ゴーストは縮んで消えます。ゴーストを撃破するたびにシャンデリアにろうそくが灯り、部屋の様子が少し見えるようになります。10本のろうそくに火が灯るとゲームに勝利します。しかし、ゴーストがあなたの前を通り過ぎるたびに、画面下部にドクロが追加されます。ドクロを10個集めると負けです。
ジョイスティックをお持ちでない方は、代替の行 320 ~ 400 (リストを参照) を使用し、行 4050 を GET A$: GOTO 60 に変更することで、キーボードからプレイできます。
I、J、K、Mキーは視線の方向を制御し、スペースバーはトリガーボタンの代わりとなります。キーボードによる代替操作についてはTYPO IIテーブルはありません。TYPO IIを使用するには、ジョイスティックのプログラム全体を入力し、正確性を確認した後、ジョイスティックの行をキーボードの行に慎重に置き換えてください。
著者について
ステファン・シュヴィルツケは、コンピュータサイエンスを学ぶ大学生です。現在、アセンブリ言語でアーケードゲームを書いています。
いくつかの重要な変数:
S = 現在描画中の図形の数
A(S) = 0 描画されていない図形
A(S) = 1 描画中の図形
X = 照準の水平位置
Y = 照準の垂直位置S4 =難易度を上げるため
の 5005 行目の速度調整
G(S) = ゴーストの水平位置
U(S) = ゴーストの垂直位置
J(S) = ゴーストのスケール
U(S) = ゴーストの速度
Q(S) = ゴーストの前回のスケール(消去に使用)
プログラム行の説明:
80 弾丸と爆発を描画します
90-140 命中をチェックします
150-170 難易度を調整します (速度、スケーリング率)
180-200 ろうそくに火を灯します210-270
ゴーストを爆発させます
280-300 部屋を最も明るい色でクリアし、残ったゴーストを取り除きます
320-410 ジョイスティック (またはキーボード) を読み取ります
430 レーザー サイトを消去して描画します
440-550 ゴーストを消去して描画し、スケールを調整し、ゴーストを左または右に移動し、ゴーストが脱出したかどうかを判断します
1000-1050 新しいゴースト用に変数をリセットします2000-2190
部屋を描画するために変数をリセットします
3000-3040 衝突値を設定します
3050-3100 衝突、プロット ルームの色、および POKE マシン言語サウンド ルーチンを確認するために使用される値
3110-3140 シェイプ テーブル
4000-4040 「負けました」メッセージ
4050-4060は新しいゲームのボタン押下を待機しています
II
プログラムリスト:
10 REM * ECTO BLASTER
20 REM * BY STEPHAN SCHWIRZKE
30 REM * (C) 1985 ANTIC PUBLISHING INC.
40 REM * II COMPUTING VOL.1 NO.1
50 REM
60 CLEAR : RESTORE : HOME : NORMAL
70 HGR2 : HCOLOR= 4: HPLOT 1,1: CALL 62454: GOSUB 2000: XDRAW 1 AT X,Y: GOTO 310
80 POKE 24655,XX * 50: POKE 24702,15: CALL 24650: SCALE= XX: XDRAW 5 AT X2 + 9,C: RETURN
90 FOR P = 1 TO N
100 IF A(P) = 0次に : 戻り値
110 IF X2 > H(J(P)) + G(P) の場合 次に : 戻り値
120 IF X2 + F < G(P) の場合 次に : 戻り値 130 IF Y2 > T(J(P)) + U(P) の場合 次に : 戻り値
140 IF Y2 + F < U(P) の場合 次に : 戻り値 150 D = D + 1: IF D = 2 の場合 S4 = S4 + 5 160 IF D = 3 の場合 N = 2::S4 = S4 + 5 170 IF D = 5 の場合 S4 = S4 + 5:N = 3:L1 = 15:L2 = 45:L3 = 60:L4 = 75:L5 = 90 180 ROT= 1: SCALE= 1 190 XDRAW 4 AT 101 + ND,28:ND = ND + 8 200 POKE 228,RM(ND / 8): GOSUB 2140 210 B = 8 220 B = B - 2 230 IF B = 0 AND B2 = 1 THEN A(P) = 0:B2 = 0: SCALE= Q(P): GOTO 270 240 IF B = 0 THEN B2 = 1:B = 8: GOTO 220 250 SCALE= B 260 XDRAW 2 AT G(P),U(P): GOTO 220 270 XDRAW 2 AT G(P),U(P): IF ND > < 80 THEN POKE 24655,50: POKE 24702,105: CALL 24650: NEXT : RETURN 280 FOR Z = 1 ~ 10: POKE 228,Z: GOSUB 2140: POKE 24702,76 / Z: CALL 24650: NEXT 290 FOR Z = 1 ~ 3: SCALE= Q(Z): IF A(Z) = 1 THEN XDRAW 2 AT G(Z),U(Z) 300 NEXT : POKE 228,255: GOSUB 2140: GOTO 4050 310 FOR S = 1 ~ N 320 IF PEEK (PK) > T3 AND C = 0 THEN X2 = X:Y2 = Y + 9:C = 185:XX = 1
330 IF C - 30 < = Y2 AND C > 0 THEN XX = 3:C = Y2
340 Y1 = Y:X1 = X:V = PDL (1)
350 IF C > 0 なら GOSUB 80
360 IF V > I かつ Y < T1 なら Y = Y + M 370 IF V < E かつ Y > T なら Y = Y - M
380 H = PDL (0)
390 IF H > I かつ X < T2 なら X = X + M 400 IF H < E かつ X > T なら X = X - M
410 IF C > 0 なら GOSUB 80:C = C - 45: IF C = Y2 - 45 なら GOSUB 90:C = 0
420 ROT= 1: SCALE= 1
430 X1,Y1 で XDRAW 1: X,Y で XDRAW 1
440 IF A(S) = 0 なら GOSUB 1000
450 スケール= Q(S): XDRAW 2 AT G(S),U(S)
460 G(S) = G(S) + W(S): IF G(S) > J1 THEN W(S) = - W(S):G(S) = J2:NG(S) = - 1
470 IF G(S) < J3 THEN W(S) = - W(S):G(S) = J4:NG(S) = 1 480 スケール= J(S):Q(S) = J(S) 490 XDRAW 2 AT G(S),U(S) 500 L(S) = L(S) + DF 510 IF L(S) = L4 THEN J(S) = 5 520 IF L(S) > L5 THEN A(S) = 0: XDRAW 2 AT G(S),U(S): SCALE= 1: POKE 24655,140: CALL 24650: XDRAW 6 AT 100 + SE,180:SE = SE + 10: IF SE = 100 THEN 4000
530 IF L(S) = L1 THEN J(S) = 2
540 IF L(S) = L2 THEN J(S) = 3:W(S) = W(S) + 10 * NG(S)
550 IF L(S) = L3 THEN J(S) = 4:W(S) = W(S) + 20 * NG(S)
560 NEXT : GOTO 310
1000 SCALE= 1: ROT= 1:RK = INT ( RND (1) * 100) + 20:R1 = INT ( RND (1) * 190) + 20
1010 H3 = FRE (1)
1020 A(S) = 1: XDRAW 2 AT R1,RK:U(S) = RK:G(S) = R1:W(S) = S4:J(S) = 1:Q(S) = J(S)
1030 RK = INT ( RND (1) * 20): RK > 10 の場合 W(S) = - W(S):NG(S) = - 1
1040 NG(S) = 1:L(S) = 0
1050 戻り値
2000 X = 141:Y = 80:X1 = X:Y1 = Y
2010 HCOLOR= 3
2020 SCALE= 1: ROT= 1:M = 18:S4 = 10:DF = 15:N = 1
2030 PK = - 16287:F = 14:I = 200:E = 100:T = 20: GOSUB 3000
2040 ND = 0:T3 = 127:T2 = 260:J1 = 240:J2 = 205:J3 = 10:J4 = 40
2050 T1 = 155:CL = 24576:TN = 24608:GP = 24609
2060 L1 = 30:L2 = 60:L3 = 90:L4 = 120:L5 = 150
2070 HPLOT 101,40 TO 175,40: HCOLOR= 7: HPLOT 137,15 TO 137,0: HCOLOR= 6: HPLOT 101,40 TO 137,15 TO 175,40: HCOLOR= 3
2080 Z = 1 TO 80 の場合 ステップ 8
2090 101 + Z,40 で 3 を描画
2100 4 を描画101 + Z,40
2110 NEXT
2120 HCOLOR= 7
2130 POKE 228,128
2140 HPLOT 2,1 ~ 278,1 ~ 278,191 ~ 2,191 ~ 2,1
2150 HPLOT 100,70 ~ 178,70 ~ 178,121 ~ 100,121 ~ 100,70
2160 HPLOT 2,1 ~ 100,70: HPLOT 278,1 ~ 178,70: HPLOT 278,191 ~ 178,121: HPLOT 2,191 ~ 100,121
2170 HPLOT 30,60 ~ 60,75 ~ 60,95 ~ 30,110 30,60まで
2180 HPLOT 140,121から140,101から152,101から152,121まで
2190 RETURN
3000 FOR Z = 1から5まで
3010 H(Z),T(Z)を読み取り: NEXT
3020 FOR Z = 1から10まで: RM(Z)を読み取り: NEXT
3030 FOR Z = 0から51まで: Sを読み取り
3040 POKE 24650 + Z,S: NEXT
3050 DATA 10,11,15,20,20,29,30,45,39,55,129,137,139,160,141,156
3060 DATA 157,197,253,255,173,126,96,24,105,140
,141,127,96,44,48,192 3070 データ 173,126,96,72,206,126,96,208,251,104,141,126,96,44,48,192
3080 データ 173,127,96,72,206,127,96,208,251,104,141,127,96,206,126,96
3090 データ 240,5,76,74,96,208,214,96
3100 REM シェイプテーブル
3110 ポーク232,0: POKE 233,3
3120 FOR Z = 0 TO 159: S を読み取り
3130 POKE 768 + Z,S: NEXT
3140 RETURN
3150 DATA 6,0,14,0,57,0,94,0,106,0,112,0,136,0,146,146,18,36,76,104
3160 DATA 64,3,13,104,141,86,113,17,54,215,250,18,159,31,31,128,31,64,3,13
3170 DATA 108,108,108,108,31,248,250,250,250,106,73,64,24,72,73,4,0,73,169,255
3180 データ31,110,45,45,77,62,31,31,31,119,45,45,45,53,255,219,247,205,109,105
3190 データ245,63,63,63,175,41,13,53,255,191,77,73,4,0,35,36,36,36,5,168
3200 データ54,54,54,38,0,49,85,62,30,220,36,0,35,44,54,5,32,216,11,23
3210 データ 54,14,7,192,77,64,150,34,216,27,64,3,150,34,0,64,24,24,45,173
3220 データ 246,190,63,28,92,28,100,54,13,108,62,31,86,3,104,30,64,24,144,0
4000 HGR : XDRAW 6 AT 140,1
4010 Z = 1 から 150 まで ステップ 2
4020 XDRAW 6 AT 140,Z
4030 XDRAW 6 AT 140,Z + 2: FOR F = 1 TO 18: NEXT : NEXT
4040 POKE 24655,200: CALL 24650: VTAB (21): HTAB (17): PRINT "YOU LOSE"
4050 IF PEEK ( - 16287) > 127 THEN GOTO 60
4060 GOTO 4050