ニャオニャオ21世紀

レトロゲーム(MSX、PCエンジン、ファミコン、メガドライブセガサターン)と、MSXのゲーム開発と、最新ゲーム(PS4、SWITCH)、身体(身体意識など)、ライフハック、電子工作ほか雑記を綴っています

大仏パラダイス攻略 STAGE2

大仏パラダイスの2面です。

 

こちらもそれほど難しくないので、サクッとクリアしましょう(*´ω`*)

このステージ2は空中にブロックがあります。

スタート時のちょうどいい感じのところ(上)に2つブロックが浮いてます。

その上にピョンと乗ってみるのが、いい感じ〜かもしれないです^^

 

f:id:nyaonyaokun:20200921060555p:plain

大仏パラダイス

 

そこからの左右に大ジャンプをすると、

カミナリの上を飛び越し、カミナリを育てる(色を変える)ことができます!

 

2面は、画面の上の方に登ると、カミナリを飛び越しやすくなりますよ!

ということがよくわかるステージだと思います。

 

大仏パラダイスは、ステージの上の方に登るのが得策なゲームなんです〜(・∀・)

 

あとは、チョチョイと2面をクリアしてください^^

 

MSX1 多色刷り・SCREEN1.5 ドット絵作成ツールを作っております^^

実はMSX1用のSCREEN1.5 / 多色刷りのドット絵作成ツールを

作っておりまして^^

 

大仏パラダイスでも使っているのですが、

まぁ、ここまで作っていますよ〜というのを公開してみようかと(〃∇〃)

 

製作中なので、まぁアレなんですが...

 

MSX関連のブログネタも最近は、大仏パラダイスだけになって来ていることですし...

 

昔は、作りかけのものを見せるなんてキィーヽ(`Д´#)ノ

みたいな感じの世の中でしたが、(本当かな^^)

まぁ、少しその辺りも寛容になってきたかなぁという思いもありますし、

また、MSX1のためのものということもありますので。

 

コソッと製作途中のモノをお見せしようと思います。

(Googleで検索すると上位に出てしまうというなんともアレな感じですが^^;

最近、検索にひっかかるというのに気づきました。

実験用に上げていただけだったんですが。うーむ^^;)

 

見てください!

MSX1 EDIO2 (PCGドット絵,スプライト,マップエディタ)

(クリックでページが開きます。chromeで動作確認してます)

 

f:id:nyaonyaokun:20200818180853p:plain

MSX PCG EDITOR 未完成版

こんな感じです〜(*´ェ`*)

 

一応、なんとなくは使えるのですが、

仕様も変わると思いますし、データも完全にアウトプット出来なかったりします^^;

 

ただ!

大仏パラダイスはこの未完成なPCGツールのEDIO2で作っております(⌒▽⌒)

 

あのレベルは出来ますよ!というものです。

 

正式リリースではないので、使い方は書きません。

操作方法も変わっていきます。

作ったデータも読み込めなくなる可能性があります^^;

(むしろその可能性のほうが高いです)

 

こんな物作っているんだなぁということを知って欲しかったのです(T_T)

余熱さんが、みなさんが作ったゲームをカートリッジにして販売するということを

始められております^^

(僕はどんな状況かは教えてもらっていますが、基本的にはノータッチ?かなぁ。

余熱さんの企画なので!)

 

www.nyaonyao21.com

 

同人MSXが盛り上がるといいなぁという思いでやっています^^

 

そんなMSXゲームを作るときに、PCGエディタを使って貰えたらいいなぁとも

思っています。

 

 

そんなMSX1用ドット絵ツールですが、

暇を見つけてのんびり作っておりますm(_ _)m

 

また、進捗を公開していきたいと思います。

(いつ完成するのやら^^;)

 

 

 

MSX 大仏パラダイス攻略 STAGE1

大仏パラダイスのステージ1の攻略です。

このステージは基礎を学ぶステージです。

 

攻略の基本編はこちら

www.nyaonyao21.com

 

クリアするのは簡単だと思います。

地面を左右に動き、カミナリを普通にキャッチして、

大仏さまにSETすればOKです。

 

youtu.be

 

だいたい上の動画のような感じでプレイされると思います。

 

しかし!

ここは練習ステージです!

 

まずは、カミナリのジャンプキャッチをモノにしましょう!

次に、カミナリを育て方をマスターしましょう!

 

 

テクニック その1

空中Uターン(そんな大それたモノではないのですが^^;)

youtu.be

 

カミナリを後ろから追いかけていき、ジャンプ!

そして空中でUターン!!!

 

 

テクニック その2

複数カミナリ育て(これもなんてことはないです^^;)

youtu.be

1つカミナリを育てて、そのまま2つ目を育ててと、

育てつつ、回収していきます。

 

基本的に、カミナリを赤にしてから乾電池に充電していきましょう!

 

(カミナリレベル 黄色 -> 肌色 -> 赤色)

(肌色じゃなくて、ピンク色と呼ぶの?(¯―¯٥))

 

次回はいよいよ2面です〜。

 

MSX 大仏パラダイスの攻略!基本編

大仏パラダイスを制作したnyaoです^^

 

大変好評を頂いておりますが、

大仏パラダイスは難しいというような意見もチラホラ聞こえてきます^^;

(1日でクリアされたという猛者もいらっしゃいますが。難易度調整って難しい(・_・;))

 

せっかく買っていただいたのでしたら、

是非全7面をクリアしてもらいたいのです、作者としては(*´ω`*)

 

そこで大仏パラダイスの攻略ページを作ることにしましたぁ。

 

いまいちコツが掴めない方を対象にしたページにしたいと思います。

 

完全攻略はしないつもりです。

大仏パラダイスは、どうやったらこのステージをクリア出来るのだろう?

と、あれこれ考えてもらうのが楽しさの1つとなっていますので...

 

予定としては4面までは確実にクリアできるように

攻略情報を連載していきたいと思います^^

 

 

大仏パラダイスの基本システム

f:id:nyaonyaokun:20191121031455p:plain

大仏パラダイス MSX

白と緑のカミナリさまが、カミナリを吐き出します!

それを主人公のクゥちゃんが持っている乾電池にぶつけることによって

電池を充電します。

 

そして、その充電された乾電池(色が変わります)を、

大仏さま横のSETボックスに持っていくと

大仏さまに充電されます!

f:id:nyaonyaokun:20200802044442p:plain

 

右の縦ゲージを一杯にすると、ステージクリアです。

 

それだけですとかなり単純すぎるゲームなのですが、

この大仏パラダイスの最大の肝のシステム、

カミナリ育てシステム!

があります。

 

はじめの方は、このカミナリを育てることをしなくても

普通にクリアできます。

(そのように調整しております)

しかし、ステージも後半になると

普通にカミナリを集めただけでは時間切れとなってしまうのです(*´艸`*)

 

そのカミナリ育てシステムとは?

カミナリをジャンプで飛び越えるたびにカミナリがパワーアップします!

カミナリレベルは3段階です。

f:id:nyaonyaokun:20200802050041p:plain

 電気レベル1 -> 電気レベル2 -> 電気レベル4

 

黄色カミナリ 電気レベル 1

f:id:nyaonyaokun:20200802053217p:plain

SETするとゲージが1増えます。

 

肌色カミナリ 電気レベル 2

f:id:nyaonyaokun:20200802053337p:plain

SETするとゲージが2増えます。

 

赤カミナリ 電気レベル 4

f:id:nyaonyaokun:20200802053415p:plain

SETするとゲージが4増えます。

各々で得点も異なります。

 

電気レベル4の赤カミナリに育ててからSETしていくようにしましょう!

 

このジャンプによる飛び越えが少しだけ難しいですね^^

カミナリが乾電池に当たってしまうと充電されてしまうので

乾電池とクゥちゃんに当たらないように

上手に飛び越えてください^^

 

カミナリ飛び越えのヒント:

  • 少し離れたところからジャンプを始めてみる
  • カミナリが下に降りて来るところを狙って飛び越える
  • 一度真上に飛んでから、頂点付近で、左右を入力してカミナリを飛び越える
  • カミナリの真上で向きを反転させる 

 

最後のテクニックが重要です!

飛び越そうとするとき、カミナリの真上で色が変わったら

すかさず、カーソルキーを逆に入れて

元の方向に戻ります。

空中で反転する、ということです^^

(ちなみにジャンプはボタンを押している長さによって、

ジャンプの高さが変わります)

 

 

カミナリの放出回数は、カミナリさまの色で違う?

じつは、白カミナリさまと緑カミナリさまで、

放出するカミナリが違います^^

(クリアされた方でも知らない人の方が多いかもしれないです^^;)

 

白カミナリさま

f:id:nyaonyaokun:20200802054730p:plain

電気レベル1の黄色のカミナリを放出します。

立て続けにカミナリを放出してきます。

すぐにカミナリを出すので、

基本は、

この白カミナリさまを狙って

カミナリを集めるといいでしょう。

しかし、電気レベルが1なので、このカミナリさまが出すカミナリを

ジャンプで育ててから大仏様にSETすると吉です^^

(電気レベル4の赤カミナリにするのに2回ジャンプで飛び越さないといけません)

 

 

緑カミナリさま

f:id:nyaonyaokun:20200802055302p:plain

電気レベル2の肌色カミナリを放出します。

一度カミナリを出すと、しばらくカミナリを出しません^^;

しかし、電気レベル2の肌色カミナリを最初から出してくるのは

攻略にとって大変意味があります。

ステージが進むと、

この緑カミナリさまが出す肌色カミナリのありがたさが

分かるようになると思います^^

 

コツ1

空の乾電池(白色 乾電池)のときは、

クゥちゃんにカミナリが当たる可能性は低いと思います^^

(乾電池をバリア代わりにできるので(*´∀`*))

しかし、乾電池に電気を充電すると、乾電池にカミナリを当てて、

身を守ることが出来なくなります^^;

(乾電池が後ろに行くので直感的に守れないと思って頂けると

製作者は思っていますが...(*´ェ`*))

そのため、充電したらすぐに大仏さまに電気をSETして

乾電池を空にしましょう!

(白色乾電池に!)

 

コツ2

このカミナリを育てるのがこのゲームをクリアするコツなのですが、

カミナリの上を一度ジャンプして、

電気レベル2の肌色カミナリにしておいて

再びカミナリが下に降りてくるのを待って、

またジャンプで飛び越して電気レベル4のカミナリにします。

 

まぁ、これが基本なのですが、

電気レベル2の肌色カミナリにしてから、

一旦そのカミナリは放置して

他のカミナリを育てたり、充電したりするというのも

有効な手段です。

 

育てたらすぐ乾電池に充電するという固定概念を

捨ててみるのもコツですよ(*´∀`*)

(充電済みの乾電池を抱えたまま、大仏さまのところに行く途中で、他のカミナリを育てつつという方法もあります)

 

コツ3

カミナリはブロック崩しの弾のように、壁に当たると向きが反転します。

ですので、ある程度はカミナリの進路を推測することも可能です。

このカミナリは、あの辺りへ行くから、先に向こうのカミナリを育てようかな、等と戦略を考えることが出来ます^ ^

 

ですが、そこまで考えてやっている方はいないと思います(°▽°)

まぁ、単純な動きなので、感覚で出来ますよということです。

頭の片隅にでも入っていればOKです

(^◇^)

 

次回からは各ステージごとの攻略をしていきたいと思います^^

www.nyaonyao21.com

あなたのMSX自作ゲームをカートリッジ化して売ってみませんか?

大仏パラダイスはMSXカートリッジで販売しております。

おかげさまでとても好評ですm(_ _)m

 

大仏パラダイスは、カートリッジであることに

とても意味があります^^

 

正直なところ、

カートリッジ版でなければ、あまり売れなかったのでは

ないのかなぁと思っています。

テープ版だったら、今の 1 / 10くらいしか売れなかったかな^^;

 

MSXカートリッジを提供して頂いた、

余熱さんには大変感謝しております(*´∀`*)

 

そんなMSXカートリッジですが、

じつはみなさんの自作MSXゲームも

カートリッジ化して販売することができることを

知っておられますでしょうか?(・∀・)

 

大仏パラダイスのMSXカートリッジ化などを

担当して頂いた余熱さんが、

みなさんのMSXゲームを

カートリッジにして販売をお手伝いするということをしておられます^^

 

f:id:nyaonyaokun:20200729042612j:plain

MSXカートリッジ

2の自慢できるゲームであることのところが、少し

恥ずかしいですが(*´ェ`*)

(僕が書いたチラシではないので^^;)

 

お問い合わせは余熱さんまで

yone2.net

 

お気軽に連絡してもらっても大丈夫だと思います^^

 

MSX BASICなら16KB

MSX オールマシン語なら32KB

までロムカートリッジ化できます。

 

BASICでもマシン語と併用すれば、十分なボリュームに

なると思います。

 

こぼれ話:

そもそも大仏パラダイスを作ったのは、

余熱さんから、BASICをカートリッジにできるようなものを作って

いるというお話を聞いたことから始まります。

その時、ちょうど僕は、

BEEPさんのゲームプログラムコンテストに

簡易大仏パラダイスみたいなゲームを応募していました。

 

そこで、

そのゲームもとに余熱さんのアドバイスを得て大幅に改良して

大仏パラダイスを完成させました^^

 

f:id:nyaonyaokun:20200730052356j:plain

(こんな感じに作ってもらえますよ(*´ェ`*))

 

僕のTwitterのフォロワーのみなさんも、作ってみたいなぁという方が

何人かいらっしゃいます^^

 

僕のサイトでMSXプログラミングを

学んで頂ければ、

大仏パラダイスレベルのものでしたら、制作可能だと思います。

もし、わからないことがありましたら、

コメントに書き込んで頂ければ、お返事します^^

 

子供の頃の夢を叶えてみませんか?

ともにMSXを盛り上げていきましょう!

 

 

 

 

MSXのプログラミングのYoutuber 反動さんをご紹介

今回は、Twitterでいつもお世話になっている

Youtuber?の反動さんの動画を紹介させていただきます^^

 

このブログのことを頻繁に話してくれるので、

ニヤニヤしながら見ています。

 

いろいろなことを配信されているのですが、

僕が特にとても楽しみにしているのは月曜日のMSXプログラミングの回。

 

BASICで1からゲームを作っていらっしゃいます(・∀・)

とてもわかりやすいし、

ゲームを作る過程がとてもよくわかるので、

とても勉強になると思います。

 

僕のブログでは取り上げていない、シューティングを作って

いらっしゃいます^^

 

第1回目

youtu.be

 

第2回目

youtu.be

 

第3回目

youtu.be

 

第4回目

youtu.be

 

第5回目

youtu.be

 

第6回目

youtu.be

 

第7回目 マシン語!!!

youtu.be

 

毎週、とても楽しみにしております。

 

 

MSX1自作ROMカートリッジゲーム、大仏パラダイスを再販します^^

ご好評頂いております、

MSX1、MSX2、MSX2+、MSXturboR対応のROMカートリッジゲームの

大仏パラダイスを再販します(*´ω`*)

 

家電のケンちゃんさんで販売します。

通販はこちら!

www.kadenken.com

 

今回も販売本数はそれほど多くありません^^;

よろしくお願いしますm(_ _)m

 

 

大仏パラダイスとは

ペンギンのクゥちゃんを操作し、カミナリを集めて、

大仏さまに充電をするというゲームです^^

 

このゲームの肝は、カミナリを育てるというところ。

 

カミナリをジャンプで飛び越えると、カミナリが1段、パワーアップします。

そのカミナリを回収し、大仏さまに持っていくと、

よりたくさん、ゲージを貯めることができます。

 

youtu.be

 

じつは、このゲームのステージ調整には、

かなり時間を費やしておりまして(・∀・)

オールクリアはかなり難しくなっております^^

やりごたえがあるように調整しました。

 

難しいゲームが苦手という方もご安心ください。

4面までは比較的、お気楽プレイでも進めます^^

 

全7面です。

 

ステージも進むと、背景も変わっていきます^^

大仏さまに電気を集めるということは、一体どういうことなのか?

大仏さまとは一体なんなのか?

思いを馳せてみてください(*´ω`*)

 

迷路で敵を徘徊させる2 MSX BASIC基礎その19 続き

前回の敵の徘徊のプログラムを見直して、

書き直してみました^^

短くなったし、速くなったかな(*´∀`*)

結構、無駄を省きました。

御覧ください^^ 

 

 


5 'TIME=0
10 COLOR15,1,1:SCREEN2:SCREEN1,2:COLOR15,1,1:WIDTH32:DEFINTA-Z:KEYOFF
20 DEFUSR=&H7E:A=USR(0)
30 KEY1,"SCREEN1"+CHR$(13)
40 'EN,EK,EX(),EY(),EM()
44 EN=0:EK=3:DIMEX(4),EY(4),EM(4),HK(4),EO(4),IX(5),IY(5)
45 X=160:Y=128:H=0
46 EX(0)=160:EY(0)=8:EX(1)=96:EY(1)=32:EX(2)=144:EY(2)=160:EX(3)=96:EY(3)=104
47 EM(0)=8:EM(1)=8:EM(2)=8:EM(3)=8:
48 IX(0)=0:IX(1)=0:IX(2)=8:IX(3)=0:IX(4)=-8:IY(0)=0:IY(1)=-8:IY(2)=0:IY(3)=8:IY(4)=0
49 IF GO=1 THEN GO=0:GOTO500
50 'MOJI TEIGI
51 N=33
52 FOR J=0 TO 63
53 FOR I=0 TO 7
54 VPOKE &H800+N*8+I,VPEEK(N*8+I)
55 VPOKE &H1000+N*8+I,VPEEK(N*8+I)
56 'COLOR TEIGI
57 VPOKE &H2000+N*8+I,&HF1
58 VPOKE &H2800+N*8+I,&HF1
59 VPOKE &H3000+N*8+I,&HF1
60 NEXT
61 N=N+1
62 NEXT
63 LOCATE10,10:PRINT"PLEASE WAIT!"
70 'SPRITE TEIGI
75 RESTORE 2000
77 FOR J=0 TO 9
80 S$=""
90 FOR I=0 TO31
100 READ DT$:
110 S$=S$+CHR$(VAL("&H"+DT$))
120 NEXT
130 SPRITE$(J)=S$
140 NEXT
160 'BLOCK TEIGI
170 M=ASC("a")
175 RESTORE 4000
178 FOR J=0 TO 10
180 FOR I=0 TO 7
190 READ BG$
200 VPOKE M*8+I,VAL("&H"+BG$)
210 VPOKE &H800+M*8+I,VAL("&H"+BG$)
220 VPOKE &H1000+M*8+I,VAL("&H"+BG$)
222 NEXT
225 M=M+1
230 NEXT
234 M=ASC("a")
235 RESTORE 5000
236 FOR J=0 TO 10
240 FOR I=0 TO 7
250 READ CR$
260 VPOKE &H2000+M*8+I,VAL("&H"+CR$)
270 VPOKE &H2800+M*8+I,VAL("&H"+CR$)
280 VPOKE &H3000+M*8+I,VAL("&H"+CR$)
283 NEXT
285 M=M+1
290 NEXT
490 'MAP
500 LOCATE 0,0:PRINT "caaaaaaaaaaaaaaaaaaaaaaaaaaaaaad"
510 LOCATE 0,1:PRINT "bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
520 LOCATE 0,2:PRINT "bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
530 LOCATE 0,3:PRINT "bxxjxxcaaaaaaaixxhaaaaaaaaaaixxb"
540 LOCATE 0,4:PRINT "bxxbxxbxxxxxxxxxxxxxxxxxxxxxxxxb"
550 LOCATE 0,5:PRINT "bxxbxxbxxxxxxxxxxxxxxxxxxxxxxxxb"
560 LOCATE 0,6:PRINT "bxxkxxeaaaaaaadxxcaaaaaaaaaaixxb"
570 LOCATE 0,7:PRINT "bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
580 LOCATE 0,8:PRINT "bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
590 LOCATE 0,9:PRINT "bxxcaaaaaaadxxbxxbxxcadxxhaadxxb"
600 LOCATE 0,10:PRINT"bxxbxxxxxxxbxxbxxbxxbxbxxxxxbxxb"
610 LOCATE 0,11:PRINT"bxxbxxxxxxxbxxbxxbxxbxbxxxxxbxxb"
620 LOCATE 0,12:PRINT"bxxeaaaaaaafxxbxxbxxeafxxhaafxxb"
630 LOCATE 0,13:PRINT"bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
640 LOCATE 0,14:PRINT"bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
650 LOCATE 0,15:PRINT"bxxcaadxxcaaaafxxeaaaaaaaixxjxxb"
660 LOCATE 0,16:PRINT"bxxbxxbxxbxxxxxxxxxxxxxxxxxxbxxb"
670 LOCATE 0,17:PRINT"bxxbxxbxxbxxxxxxxxxxxxxxxxxxbxxb"
680 LOCATE 0,18:PRINT"bxxeaafxxkxxhaaaaaaixxhaaaaafxxb"
690 LOCATE 0,19:PRINT"bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
700 LOCATE 0,20:PRINT"bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
710 LOCATE 0,21:PRINT"eaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf"
890 'BGM WARIKOMI
900 RESTORE 21000
910 GOSUB 1860
920 ON INTERVAL=80 GOSUB 1860
930 INTERVAL ON
995 'MAIN LOOP
996 'PLAYER
998 M2=ASC("k")
999 H=4
1000 S=STICK(0) OR STICK(1)
1001 'A=TIME
1005 'PLAYER
1010 TX=X:TY=Y
1020 IF S=1 THEN Y=Y-8:H=(H+1)MOD 2
1040 IF S=3 THEN X=X+8:H=( (H+1)MOD 2)+2
1060 IF S=5 THEN Y=Y+8:H=( (H+1)MOD 2)+4
1080 IF S=7 THEN X=X-8:H=( (H+1)MOD 2)+6
1100 A$=CHR$(VPEEK(&H1800+(X\8)+(Y\8)*32))
1110 B$=CHR$(VPEEK(&H1800+(X\8)+1+(Y\8)*32))
1120 C$=CHR$(VPEEK(&H1800+(X\8)+(Y\8+1)*32))
1130 D$=CHR$(VPEEK(&H1800+(X\8)+1+(Y\8+1)*32))
1140 IF ASC(A$)<=M2 THEN X=TX:Y=TY
1150 IF ASC(B$)<=M2 THEN X=TX:Y=TY
1160 IF ASC(C$)<=M2 THEN X=TX:Y=TY
1170 IF ASC(D$)<=M2 THEN X=TX:Y=TY
1210 'ENEMY
1235 EH=0:A=RND(-TIME):ES=0
1240 AE$="#":BE$="#":CE$="#":DE$="#":HK(0)=0:HK(1)=0:HK(2)=0:HK(3)=0
1245 'UP
1246 V1=&H1800+EX(EN)\8+((EY(EN)-8)\8)*32
1249 IF VPEEK(V1)>M2 THEN IF VPEEK(V1+1)>M2 THEN ES=1:IF EO(EN)<>3 THEN HK(EH)=1:EH=EH+1
1250 'RIGHT
1251 V2=&H1800+(EX(EN)+8)\8+1+(EY(EN)\8)*32
1254 IF VPEEK(V2)>M2 THEN IF VPEEK(V2+32)>M2 THEN ES=2:IF EO(EN)<>4 THEN HK(EH)=2:EH=EH+1
1260 'DOWN
1261 V3=&H1800+EX(EN)\8+((EY(EN)+8)\8+1)*32
1264 IF VPEEK(V3)>M2 THEN IF VPEEK(V3+1)>M2 THEN ES=3:IF EO(EN)<>1 THEN HK(EH)=3:EH=EH+1
1270 'LEFT
1271 V4=&H1800+(EX(EN)-8)\8+(EY(EN)\8)*32
1274 IF VPEEK(V4)>M2 THEN IF VPEEK(V4+32)>M2 THEN ES=4:IF EO(EN)<>2 THEN HK(EH)=4:EH=EH+1
1290 IF EH=0 THEN HK(0)=ES ELSE ER=RND(1)*EH
1310 EO(EN)=HK(ER)
1314 EX(EN)=EX(EN)+IX(HK(ER)):EY(EN)=EY(EN)+IY(HK(ER))
1322 'ATARI HANTEI
1325 GOSUB1680
1327 'GAME OVER HANTEI
1330 IF GO=1 THEN GOTO1820
1332 'SPRITE HYOUJI
1333 PUT SPRITE 0,(X ,Y-1),11,H
1335 PUT SPRITE EN+1,(EX(EN),EY(EN)-1),13,8
1340 EN=EN+1:IF EN>EK-1 THEN EN=0
1345 'B=TIME
1346 'C=B-A
1347 'LOCATE0,0:PRINT C;"/60S"
1350 GOTO1000
1680 'PLAYER ATARI HANTEI
1690 ED=99
1700 FOR I=0 TO EK-1
1710 IF ABS(X-EX(I))<16 AND ABS(Y-EY(I))<16 THEN ED=I
1720 NEXT
1730 IF ED=99 THEN RETURN
1740 X=TX:Y=TY
1747 'PLAYER OUT SPRITE
1750 PUT SPRITE 0,(X,Y-1),8,9
1760 'WAIT
1770 FOR I=0 TO 25
1775 BEEP
1780 NEXT
1790 GO=1
1800 RETURN
1810 'GAME OVER
1820 LOCATE 11,10:PRINT"GAME OVER"
1830 LOCATE 10,12:PRINT"PUSH RETURN"
1840 IF INKEY$<>CHR$(13) GOTO1840
1850 GOTO45
1855 'BGM
1860 IF PEEK(&HFB40)<>0 THEN RETURN
1870 READ U$
1880 IF U$="##" THEN RESTORE 21000:READ U$
1890 'PLAY"O5"+U$
1900 RETURN
1995 'SPRITE UP0 DATA
2000 DATA 0F,1F,3F,7F,7F,7F,7F,7F,3F,1F,0F,30,03,01,1C,1C
2010 DATA F0,F8,FC,FE,FE,FE,FE,FE,FC,F8,F0,0C,CC,C0,38,00
2015 'SPRITE UP1 DATA
2020 DATA 0F,1F,3F,7F,7F,7F,7F,7F,3F,1F,0F,18,1B,03,1C,00
2030 DATA F0,F8,FC,FE,FE,FE,FE,FE,FC,F8,F0,0C,C0,B8,38,38
2035 'SPRITE RIGHT2 DATA
2040 DATA 0F,1F,3D,7D,7F,7F,7F,7F,3F,1F,0F,00,03,19,04,0E
2050 DATA F0,F8,F0,E0,C0,80,00,00,80,E0,F0,0C,CC,C0,30,38
2055 'SPRITE RIGHT3 DATA
2060 DATA 0F,1F,3F,7F,7F,7F,7E,7F,3F,1F,0F,00,1B,19,03,03
2070 DATA E0,F0,B8,B8,FC,FC,FC,00,F8,F0,E0,00,D8,C0,60,60
2075 'SPRITE DOWN4 DATA
2080 DATA 0F,1F,3B,7B,7B,7F,7F,77,38,1F,0F,30,03,1D,1E,1C
2090 DATA F0,F8,DC,DE,DE,FE,FE,EE,1C,F8,F0,0C,CC,C0,38,00
2095 'SPRITE DOWN5 DATA
2100 DATA 0F,1F,3B,7B,7F,7F,7B,7B,3C,1F,0F,18,1B,03,1C,00
2110 DATA F0,F8,DC,DE,FE,FE,DE,DE,3C,F8,F0,0C,C0,B8,78,38
2115 'SPRITE LEFT6 DATA
2120 DATA 0F,1F,0F,07,03,01,00,00,01,07,0F,30,33,03,0C,1C
2130 DATA F0,F8,BC,BE,FE,FE,FE,FE,FC,F8,F0,00,C0,98,20,70
2135 'SPRITE LEFT7 DATA
2140 DATA 07,0F,1D,1D,3F,3F,3F,00,1F,0F,07,00,1B,03,06,06
2150 DATA F0,F8,FC,FE,FE,FE,7E,FE,FC,F8,F0,00,D8,98,C0,C0
3275 'SPRITE SLIME DATA
3280 DATA 3F,7F,FF,FF,FF,CF,F3,FF,EB,E3,FF,FF,FF,FF,FF,ED
3290 DATA FC,FE,FF,FF,E7,DB,FF,C7,D7,C7,FF,FF,FF,FF,FF,B7
3300 'SPRITE DAMAGE
3310 DATA 00,01,21,11,09,04,00,78,00,04,09,11,21,01,00,00
3320 DATA 00,00,08,10,20,40,00,3C,00,40,20,10,08,00,00,00
3990 'YUKA
4000 'DATAE7,E7,E7,00,7E,7E,7E,00
4010 DATAFF,FF,00,00,00,00,FF,FF
4020 DATAC3,C3,C3,C3,C3,C3,C3,C3
4030 DATA0F,1F,38,70,E0,C0,C1,C3
4040 DATAF0,F8,1C,0E,07,03,83,C3
4050 DATAC3,C1,C0,E0,70,38,1F,0F
4060 DATAC3,83,03,07,0E,1C,F8,F0
4070 DATAC3,83,03,07,0E,1C,F8,F0
4080 DATA7F,FF,E0,C0,C0,E0,FF,7F
4090 DATAFE,FF,07,03,03,07,FF,FE
4100 DATA7E,FF,E7,C3,C3,C3,C3,C3
4110 DATAC3,C3,C3,C3,C3,E7,FF,7E
4990 'COLOR
5000 DATAF1,51,41,41,41,41,51,41
5010 DATA41,41,41,41,41,41,41,41
5020 DATAF1,51,41,41,41,41,41,41
5030 DATAF1,51,41,41,41,41,41,41
5040 DATA41,41,41,41,41,41,51,41
5050 DATA41,41,41,41,41,41,51,41
5060 DATA41,41,41,41,41,41,41,41
5070 DATAF1,51,41,41,41,41,51,41
5080 DATAF1,51,41,41,41,41,51,41
5090 DATAF1,51,41,41,41,41,41,41
5100 DATA41,41,41,41,41,41,51,41
20990 'MUSIC DATA
21000 DATAG4E8E4F8E8D8C8
21010 DATAG4E8E8D4R4
21020 DATAE8E8G8G8A8A8R8A8
21030 DATAO6C4O5E8E8G4R4
21040 DATAGE8E8F8E8D8C8
21050 DATAGE8E8D4R4
21060 DATAGE8E8A4G8G8
21070 DATAA8A8B8B8O6C4O5R4
21080 DATA##

 

 

前回のプログラムをまとめただけですが...

(ON ~ GOTO ~ をナシにしました(*´ω`*))

 以下、変更箇所を抜き出してみました。

 

 


44 EN=0:EK=3:DIMEX(4),EY(4),EM(4),HK(4),EO(4),IX(5),IY(5)
~
48 IX(0)=0:IX(1)=0:IX(2)=8:IX(3)=0:IX(4)=-8:IY(0)=0:IY(1)=-8:IY(2)=0:IY(3)=8:IY(4)=0
~
1210 'ENEMY
1235 EH=0:A=RND(-TIME):ES=0
1240 AE$="#":BE$="#":CE$="#":DE$="#":HK(0)=0:HK(1)=0:HK(2)=0:HK(3)=0
1245 'UP
1246 V1=&H1800+EX(EN)\8+((EY(EN)-8)\8)*32
1249 IF VPEEK(V1)>M2 THEN IF VPEEK(V1+1)>M2 THEN ES=1:IF EO(EN)<>3 THEN HK(EH)=1:EH=EH+1
1250 'RIGHT
1251 V2=&H1800+(EX(EN)+8)\8+1+(EY(EN)\8)*32
1254 IF VPEEK(V2)>M2 THEN IF VPEEK(V2+32)>M2 THEN ES=2:IF EO(EN)<>4 THEN HK(EH)=2:EH=EH+1
1260 'DOWN
1261 V3=&H1800+EX(EN)\8+((EY(EN)+8)\8+1)*32
1264 IF VPEEK(V3)>M2 THEN IF VPEEK(V3+1)>M2 THEN ES=3:IF EO(EN)<>1 THEN HK(EH)=3:EH=EH+1
1270 'LEFT
1271 V4=&H1800+(EX(EN)-8)\8+(EY(EN)\8)*32
1274 IF VPEEK(V4)>M2 THEN IF VPEEK(V4+32)>M2 THEN ES=4:IF EO(EN)<>2 THEN HK(EH)=4:EH=EH+1
1290 IF EH=0 THEN HK(0)=ES ELSE ER=RND(1)*EH
1310 EO(EN)=HK(ER)
1314 EX(EN)=EX(EN)+IX(HK(ER)):EY(EN)=EY(EN)+IY(HK(ER))

https://msxpen.com/codes/-M9euGFc0lE6Emp4o7DK

(クリックでプレイできます)

 

前回のムダの多いプログラムも

書いておきます。

 


1210 'ENEMY
1220 UX(EN)=EX(EN):UY(EN)=EY(EN)
1235 EH=0:EI=0:A=RND(-TIME):ES=0
1240 AE$="#":BE$="#":CE$="#":DE$="#":HK(0)=0:HK(1)=0:HK(2)=0:HK(3)=0
1245 'UP
1246 EY(EN)=EY(EN)-8
1247 AE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8)*32))
1248 BE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8)*32))
1249 IF ASC(AE$)>M2 THEN IF ASC(BE$)>M2 THEN ES=1:IF EO(EN)<>3 THEN EH=EH+1:HK(EI)=1:EI=EI+1
1250 'RIGHT
1251 EX(EN)=UX(EN):EY(EN)=UY(EN):EX(EN)=EX(EN)+8
1252 BE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8)*32))
1253 DE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8+1)*32))
1254 IF ASC(BE$)>M2 THEN IF ASC(DE$)>M2 THEN ES=2:IF EO(EN)<>4 THEN EH=EH+2:HK(EI)=2:EI=EI+1
1260 'DOWN
1261 EX(EN)=UX(EN):EY(EN)=UY(EN):EY(EN)=EY(EN)+8
1262 CE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8+1)*32))
1263 DE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8+1)*32))
1264 IF ASC(CE$)>M2 THEN IF ASC(DE$)>M2 THEN ES=3:IF EO(EN)<>1 THEN EH=EH+4:HK(EI)=3:EI=EI+1
1270 'LEFT
1271 EX(EN)=UX(EN):EY(EN)=UY(EN):EX(EN)=EX(EN)-8
1272 CE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8+1)*32))
1273 AE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8)*32))
1274 IF ASC(CE$)>M2 THEN IF ASC(AE$)>M2 THEN ES=4:IF EO(EN)<>2 THEN EH=EH+8:HK(EI)=4
1275 EX(EN)=UX(EN):EY(EN)=UY(EN)
1280 ON EH GOTO 1314,1315,1310,1316,1310,1310,1311,1317,1310,1310,1311,1310,1311,1311,1312
1290 ON ES GOTO 1314,1315,1316,1317
1300 GOTO 1325
1310 ER=RND(1)*2:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1311 ER=RND(1)*3:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1312 ER=RND(1)*4:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1314 EO(EN)=1:EY(EN)=EY(EN)-8:GOTO1325
1315 EO(EN)=2:EX(EN)=EX(EN)+8:GOTO1325
1316 EO(EN)=3:EY(EN)=EY(EN)+8:GOTO1325
1317 EO(EN)=4:EX(EN)=EX(EN)-8:GOTO1325   

 

興味がある方は、見比べてみてください〜。

基本的に、やっていることはそれほど変わらないので。

 

では〜。

迷路で敵を徘徊させる MSX BASIC基礎その19

久しぶりにMSX BASICの基礎について書きます^^

 

基礎的なことはかなり書いてきたので、

あとは応用かなぁと思っていたのですが、

そういえば、

敵キャラクターを動かしていなかったなぁ、と思い立ちまして^^;

 

今回はよくある、迷路内を徘徊する敵です(ΦωΦ)

 

ハイドライドのダンジョン内で、モンスターが徘徊していましたよね!

あれです!

 

完全ランダムであちこち、彷徨い歩きます。

(ハイドライドのプログラムはどうなっているんでしょうねぇ?)

 

プログラムは、以前書いた、パッ○マンもどきのものを改良します。

 

じつは見下ろし型のマップ内で敵が徘徊するのって、

書いたことがなかったので、

どうしようかなぁと思っていたのですが、

BASICマガジンにそれらしい記事があったので、

そちらを参考にしてみました(*´﹃`*)

 

本のサンプルは、じつにうまく作られているのですが、

なんかややこしくて...

 

最初読んだときは、なぜ?

って思って、データを1つずつ入れて検証していって

はじめて理解できました(-_-;)

 

僕のスキルでは、解説が難しいので無理かも...

 

そこで、少し改良して、プログラムを書いたのですが、

なんか、こう、アレですよ、

 

増築を繰り返した結果できた違法建築みたいなプログラムに

なりました(´・ω・`)

なんでこんなところに階段があるのぉ?

家、傾いているよね?

みたいなプログラムです。

 

なんかところどころ無駄が発生していて、

うーん、な感じですが、

とりあえず、公開してしまいます(ΦωΦ)

 

スピードもちょっとアレな感じなので、

次回、もう少し効率を考えてみたいと思います。

(できるかなぁ)

 

 


5 'TIME=0
10 COLOR15,1,1:SCREEN2:SCREEN1,2:COLOR15,1,1:WIDTH32:DEFINTA-Z:KEYOFF
20 DEFUSR=&H7E:A=USR(0)
30 KEY1,"SCREEN1"+CHR$(13)
40 'EN,EK,EX(),EY(),EM()
44 EN=0:EK=3:DIMEX(4):DIMEY(4):DIMEM(4):DIMUX(4):DIMUY(4):DIMHK(4):DIMEO(4)
45 X=160:Y=128:H=0
46 EX(0)=160:EY(0)=8:EX(1)=96:EY(1)=32:EX(2)=144:EY(2)=160:EX(3)=96:EY(3)=104
47 EM(0)=8:EM(1)=8:EM(2)=8:EM(3)=8
48 IF GO=1 THEN GO=0:GOTO500
50 'MOJI TEIGI
51 N=33
52 FOR J=0 TO 63
53 FOR I=0 TO 7
54 VPOKE &H800+N*8+I,VPEEK(N*8+I)
55 VPOKE &H1000+N*8+I,VPEEK(N*8+I)
56 'COLOR TEIGI
57 VPOKE &H2000+N*8+I,&HF1
58 VPOKE &H2800+N*8+I,&HF1
59 VPOKE &H3000+N*8+I,&HF1
60 NEXT
61 N=N+1
62 NEXT
63 LOCATE10,10:PRINT"PLEASE WAIT!"
70 'SPRITE TEIGI
75 RESTORE 2000
77 FOR J=0 TO 9
80 S$=""
90 FOR I=0 TO31
100 READ DT$:
110 S$=S$+CHR$(VAL("&H"+DT$))
120 NEXT
130 SPRITE$(J)=S$
140 NEXT
160 'BLOCK TEIGI
170 M=ASC("a")
175 RESTORE 4000
178 FOR J=0 TO 10
180 FOR I=0 TO 7
190 READ BG$
200 VPOKE M*8+I,VAL("&H"+BG$)
210 VPOKE &H800+M*8+I,VAL("&H"+BG$)
220 VPOKE &H1000+M*8+I,VAL("&H"+BG$)
222 NEXT
225 M=M+1
230 NEXT
234 M=ASC("a")
235 RESTORE 5000
236 FOR J=0 TO 10
240 FOR I=0 TO 7
250 READ CR$
260 VPOKE &H2000+M*8+I,VAL("&H"+CR$)
270 VPOKE &H2800+M*8+I,VAL("&H"+CR$)
280 VPOKE &H3000+M*8+I,VAL("&H"+CR$)
283 NEXT
285 M=M+1
290 NEXT
490 'MAP
500 LOCATE 0,0:PRINT "caaaaaaaaaaaaaaaaaaaaaaaaaaaaaad"
510 LOCATE 0,1:PRINT "bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
520 LOCATE 0,2:PRINT "bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
530 LOCATE 0,3:PRINT "bxxjxxcaaaaaaaixxhaaaaaaaaaaixxb"
540 LOCATE 0,4:PRINT "bxxbxxbxxxxxxxxxxxxxxxxxxxxxxxxb"
550 LOCATE 0,5:PRINT "bxxbxxbxxxxxxxxxxxxxxxxxxxxxxxxb"
560 LOCATE 0,6:PRINT "bxxkxxeaaaaaaadxxcaaaaaaaaaaixxb"
570 LOCATE 0,7:PRINT "bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
580 LOCATE 0,8:PRINT "bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
590 LOCATE 0,9:PRINT "bxxcaaaaaaadxxbxxbxxcadxxhaadxxb"
600 LOCATE 0,10:PRINT"bxxbxxxxxxxbxxbxxbxxbxbxxxxxbxxb"
610 LOCATE 0,11:PRINT"bxxbxxxxxxxbxxbxxbxxbxbxxxxxbxxb"
620 LOCATE 0,12:PRINT"bxxeaaaaaaafxxbxxbxxeafxxhaafxxb"
630 LOCATE 0,13:PRINT"bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
640 LOCATE 0,14:PRINT"bxxxxxxxxxxxxxbxxbxxxxxxxxxxxxxb"
650 LOCATE 0,15:PRINT"bxxcaadxxcaaaafxxeaaaaaaaixxjxxb"
660 LOCATE 0,16:PRINT"bxxbxxbxxbxxxxxxxxxxxxxxxxxxbxxb"
670 LOCATE 0,17:PRINT"bxxbxxbxxbxxxxxxxxxxxxxxxxxxbxxb"
680 LOCATE 0,18:PRINT"bxxeaafxxkxxhaaaaaaixxhaaaaafxxb"
690 LOCATE 0,19:PRINT"bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
700 LOCATE 0,20:PRINT"bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"
710 LOCATE 0,21:PRINT"eaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf"
890 'BGM WARIKOMI
900 RESTORE 21000
910 GOSUB 1860
920 ON INTERVAL=80 GOSUB 1860
930 INTERVAL ON
995 'MAIN LOOP
996 'PLAYER
998 M2=ASC("k")
999 H=4
1000 S=STICK(0) OR STICK(1)
1001 'A=TIME
1005 'PLAYER
1010 TX=X:TY=Y
1020 IF S=1 THEN Y=Y-8:H=(H+1)MOD 2
1040 IF S=3 THEN X=X+8:H=( (H+1)MOD 2)+2
1060 IF S=5 THEN Y=Y+8:H=( (H+1)MOD 2)+4
1080 IF S=7 THEN X=X-8:H=( (H+1)MOD 2)+6
1100 A$=CHR$(VPEEK(&H1800+(X\8)+(Y\8)*32))
1110 B$=CHR$(VPEEK(&H1800+(X\8)+1+(Y\8)*32))
1120 C$=CHR$(VPEEK(&H1800+(X\8)+(Y\8+1)*32))
1130 D$=CHR$(VPEEK(&H1800+(X\8)+1+(Y\8+1)*32))
1140 IF ASC(A$)<=M2 THEN X=TX:Y=TY
1150 IF ASC(B$)<=M2 THEN X=TX:Y=TY
1160 IF ASC(C$)<=M2 THEN X=TX:Y=TY
1170 IF ASC(D$)<=M2 THEN X=TX:Y=TY
1210 'ENEMY
1220 UX(EN)=EX(EN):UY(EN)=EY(EN)
1235 EH=0:EI=0:A=RND(-TIME):ES=0
1240 AE$="#":BE$="#":CE$="#":DE$="#":HK(0)=0:HK(1)=0:HK(2)=0:HK(3)=0
1245 'UP
1246 EY(EN)=EY(EN)-8
1247 AE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8)*32))
1248 BE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8)*32))
1249 IF ASC(AE$)>M2 THEN IF ASC(BE$)>M2 THEN ES=1:IF EO(EN)<>3 THEN EH=EH+1:HK(EI)=1:EI=EI+1
1250 'RIGHT
1251 EX(EN)=UX(EN):EY(EN)=UY(EN):EX(EN)=EX(EN)+8
1252 BE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8)*32))
1253 DE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8+1)*32))
1254 IF ASC(BE$)>M2 THEN IF ASC(DE$)>M2 THEN ES=2:IF EO(EN)<>4 THEN EH=EH+2:HK(EI)=2:EI=EI+1
1260 'DOWN
1261 EX(EN)=UX(EN):EY(EN)=UY(EN):EY(EN)=EY(EN)+8
1262 CE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8+1)*32))
1263 DE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8+1)*32))
1264 IF ASC(CE$)>M2 THEN IF ASC(DE$)>M2 THEN ES=3:IF EO(EN)<>1 THEN EH=EH+4:HK(EI)=3:EI=EI+1
1270 'LEFT
1271 EX(EN)=UX(EN):EY(EN)=UY(EN):EX(EN)=EX(EN)-8
1272 CE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8+1)*32))
1273 AE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8)*32))
1274 IF ASC(CE$)>M2 THEN IF ASC(AE$)>M2 THEN ES=4:IF EO(EN)<>2 THEN EH=EH+8:HK(EI)=4
1275 EX(EN)=UX(EN):EY(EN)=UY(EN)
1280 ON EH GOTO 1314,1315,1310,1316,1310,1310,1311,1317,1310,1310,1311,1310,1311,1311,1312
1290 ON ES GOTO 1314,1315,1316,1317
1300 GOTO 1325
1310 ER=RND(1)*2:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1311 ER=RND(1)*3:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1312 ER=RND(1)*4:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1314 EO(EN)=1:EY(EN)=EY(EN)-8:GOTO1325
1315 EO(EN)=2:EX(EN)=EX(EN)+8:GOTO1325
1316 EO(EN)=3:EY(EN)=EY(EN)+8:GOTO1325
1317 EO(EN)=4:EX(EN)=EX(EN)-8:GOTO1325
1322 'ATARI HANTEI
1325 GOSUB1680
1327 'GAME OVER HANTEI
1330 IF GO=1 THEN GOTO1820
1332 'SPRITE HYOUJI
1333 PUT SPRITE 0,(X ,Y-1),11,H
1335 PUT SPRITE EN+1,(EX(EN),EY(EN)-1),13,8
1340 EN=EN+1:IF EN>EK-1 THEN EN=0
1345 'B=TIME
1346 'C=B-A
1347 'LOCATE0,0:PRINT C;"/60S"
1350 GOTO1000
1680 'PLAYER ATARI HANTEI
1690 ED=99
1700 FOR I=0 TO EK-1
1710 IF ABS(X-EX(I))<16 AND ABS(Y-EY(I))<16 THEN ED=I
1720 NEXT
1730 IF ED=99 THEN RETURN
1740 X=TX:Y=TY
1747 'PLAYER OUT SPRITE
1750 PUT SPRITE 0,(X,Y-1),8,9
1760 'WAIT
1770 FOR I=0 TO 25
1775 BEEP
1780 NEXT
1790 GO=1
1800 RETURN
1810 'GAME OVER
1820 LOCATE 11,10:PRINT"GAME OVER"
1830 LOCATE 10,12:PRINT"PUSH RETURN"
1840 IF INKEY$<>CHR$(13) GOTO1840
1850 GOTO45
1855 'BGM
1860 IF PEEK(&HFB40)<>0 THEN RETURN
1870 READ U$
1880 IF U$="##" THEN RESTORE 21000:READ U$
1890 'PLAY"O5"+U$
1900 RETURN
1995 'SPRITE UP0 DATA
2000 DATA 0F,1F,3F,7F,7F,7F,7F,7F,3F,1F,0F,30,03,01,1C,1C
2010 DATA F0,F8,FC,FE,FE,FE,FE,FE,FC,F8,F0,0C,CC,C0,38,00
2015 'SPRITE UP1 DATA
2020 DATA 0F,1F,3F,7F,7F,7F,7F,7F,3F,1F,0F,18,1B,03,1C,00
2030 DATA F0,F8,FC,FE,FE,FE,FE,FE,FC,F8,F0,0C,C0,B8,38,38
2035 'SPRITE RIGHT2 DATA
2040 DATA 0F,1F,3D,7D,7F,7F,7F,7F,3F,1F,0F,00,03,19,04,0E
2050 DATA F0,F8,F0,E0,C0,80,00,00,80,E0,F0,0C,CC,C0,30,38
2055 'SPRITE RIGHT3 DATA
2060 DATA 0F,1F,3F,7F,7F,7F,7E,7F,3F,1F,0F,00,1B,19,03,03
2070 DATA E0,F0,B8,B8,FC,FC,FC,00,F8,F0,E0,00,D8,C0,60,60
2075 'SPRITE DOWN4 DATA
2080 DATA 0F,1F,3B,7B,7B,7F,7F,77,38,1F,0F,30,03,1D,1E,1C
2090 DATA F0,F8,DC,DE,DE,FE,FE,EE,1C,F8,F0,0C,CC,C0,38,00
2095 'SPRITE DOWN5 DATA
2100 DATA 0F,1F,3B,7B,7F,7F,7B,7B,3C,1F,0F,18,1B,03,1C,00
2110 DATA F0,F8,DC,DE,FE,FE,DE,DE,3C,F8,F0,0C,C0,B8,78,38
2115 'SPRITE LEFT6 DATA
2120 DATA 0F,1F,0F,07,03,01,00,00,01,07,0F,30,33,03,0C,1C
2130 DATA F0,F8,BC,BE,FE,FE,FE,FE,FC,F8,F0,00,C0,98,20,70
2135 'SPRITE LEFT7 DATA
2140 DATA 07,0F,1D,1D,3F,3F,3F,00,1F,0F,07,00,1B,03,06,06
2150 DATA F0,F8,FC,FE,FE,FE,7E,FE,FC,F8,F0,00,D8,98,C0,C0
3275 'SPRITE SLIME DATA
3280 DATA 3F,7F,FF,FF,FF,CF,F3,FF,EB,E3,FF,FF,FF,FF,FF,ED
3290 DATA FC,FE,FF,FF,E7,DB,FF,C7,D7,C7,FF,FF,FF,FF,FF,B7
3300 'SPRITE DAMAGE
3310 DATA 00,01,21,11,09,04,00,78,00,04,09,11,21,01,00,00
3320 DATA 00,00,08,10,20,40,00,3C,00,40,20,10,08,00,00,00
3990 'YUKA
4000 'DATAE7,E7,E7,00,7E,7E,7E,00
4010 DATAFF,FF,00,00,00,00,FF,FF
4020 DATAC3,C3,C3,C3,C3,C3,C3,C3
4030 DATA0F,1F,38,70,E0,C0,C1,C3
4040 DATAF0,F8,1C,0E,07,03,83,C3
4050 DATAC3,C1,C0,E0,70,38,1F,0F
4060 DATAC3,83,03,07,0E,1C,F8,F0
4070 DATAC3,83,03,07,0E,1C,F8,F0
4080 DATA7F,FF,E0,C0,C0,E0,FF,7F
4090 DATAFE,FF,07,03,03,07,FF,FE
4100 DATA7E,FF,E7,C3,C3,C3,C3,C3
4110 DATAC3,C3,C3,C3,C3,E7,FF,7E
4990 'COLOR
5000 DATAF1,51,41,41,41,41,51,41
5010 DATA41,41,41,41,41,41,41,41
5020 DATAF1,51,41,41,41,41,41,41
5030 DATAF1,51,41,41,41,41,41,41
5040 DATA41,41,41,41,41,41,51,41
5050 DATA41,41,41,41,41,41,51,41
5060 DATA41,41,41,41,41,41,41,41
5070 DATAF1,51,41,41,41,41,51,41
5080 DATAF1,51,41,41,41,41,51,41
5090 DATAF1,51,41,41,41,41,41,41
5100 DATA41,41,41,41,41,41,51,41
20990 'MUSIC DATA
21000 DATAG4E8E4F8E8D8C8
21010 DATAG4E8E8D4R4
21020 DATAE8E8G8G8A8A8R8A8
21030 DATAO6C4O5E8E8G4R4
21040 DATAGE8E8F8E8D8C8
21050 DATAGE8E8D4R4
21060 DATAGE8E8A4G8G8
21070 DATAA8A8B8B8O6C4O5R4
21080 DATA##


それでは説明していきます。


1210行〜1317行が、敵の徘徊になります。

 

ちなみに敵モンスターは3匹となっています。

この敵の数は、

44行のEK=3で変更可能です。

このプログラムは、1000行~1350行を繰り返しています。

敵は1ループにつき1匹づつ動かしています。

 

1回目のループで、敵モンスターのナンバーEN=0を動かし、

2回目のループで、ナンバーEN=1を動かし、

3回目でナンバーEN=2を動かしています。

 

この方法では、プレイヤーに対して、敵モンスターのスピードが

遅くなります。

敵1匹なら、プレイヤーと同じスピード。

敵2匹なら、プライヤーの半分のスピード。

3匹なら、1/3のスピードとなります。

(敵はある程度、遅いほうがゲームとしては面白いかな?)

 


1210 'ENEMY
1220 UX(EN)=EX(EN):UY(EN)=EY(EN)
1235 EH=0:EI=0:A=RND(-TIME):ES=0
1240 AE$="#":BE$="#":CE$="#":DE$="#":HK(0)=0:HK(1)=0:HK(2)=0:HK(3)=0
1245 'UP
1246 EY(EN)=EY(EN)-8
1247 AE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8)*32))
1248 BE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8)*32))
1249 IF ASC(AE$)>M2 THEN IF ASC(BE$)>M2 THEN ES=1:IF EO(EN)<>3 THEN EH=EH+1:HK(EI)=1:EI=EI+1
1250 'RIGHT
1251 EX(EN)=UX(EN):EY(EN)=UY(EN):EX(EN)=EX(EN)+8
1252 BE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8)*32))
1253 DE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8+1)*32))
1254 IF ASC(BE$)>M2 THEN IF ASC(DE$)>M2 THEN ES=2:IF EO(EN)<>4 THEN EH=EH+2:HK(EI)=2:EI=EI+1
1260 'DOWN
1261 EX(EN)=UX(EN):EY(EN)=UY(EN):EY(EN)=EY(EN)+8
1262 CE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8+1)*32))
1263 DE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+1+(EY(EN)\8+1)*32))
1264 IF ASC(CE$)>M2 THEN IF ASC(DE$)>M2 THEN ES=3:IF EO(EN)<>1 THEN EH=EH+4:HK(EI)=3:EI=EI+1
1270 'LEFT
1271 EX(EN)=UX(EN):EY(EN)=UY(EN):EX(EN)=EX(EN)-8
1272 CE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8+1)*32))
1273 AE$=CHR$(VPEEK(&H1800+(EX(EN)\8)+(EY(EN)\8)*32))
1274 IF ASC(CE$)>M2 THEN IF ASC(AE$)>M2 THEN ES=4:IF EO(EN)<>2 THEN EH=EH+8:HK(EI)=4
1275 EX(EN)=UX(EN):EY(EN)=UY(EN)
1280 ON EH GOTO 1314,1315,1310,1316,1310,1310,1311,1317,1310,1310,1311,1310,1311,1311,1312
1290 ON ES GOTO 1314,1315,1316,1317
1300 GOTO 1325
1310 ER=RND(1)*2:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1311 ER=RND(1)*3:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1312 ER=RND(1)*4:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317
1314 EO(EN)=1:EY(EN)=EY(EN)-8:GOTO1325
1315 EO(EN)=2:EX(EN)=EX(EN)+8:GOTO1325
1316 EO(EN)=3:EY(EN)=EY(EN)+8:GOTO1325
1317 EO(EN)=4:EX(EN)=EX(EN)-8:GOTO1325   

 

全体の流れとしては、

敵キャラクターの移動先の上下左右(2文字分)をチェックし、

壁がないか(移動可能かどうか)チェックします。

 

そして、空いている(壁でない)箇所が、何箇所あるか

調べます。(上と下が空いていたら2つ。上下左が空いていたら3つ)

 

その数により、ON  EH GOTOでその行に飛ばします。

1280 ON EH GOTO 1314,1315,1310,1316,1310,1310,1311,1317,1310,1310,1311,1310,1311,1311,1312

 

(ON 数値 GOTO行番号、行番号、行番号は、

数値によってGOTOで飛ぶ行を決めることが出来ます。

1なら1つ目の行番号、2なら2つ目の行番号となります。)

 

このGOTO以降の行番号がたくさんある理由は、あとで説明します。

(このあたりが、僕の今回のプログラムが駄目なところだと思っています^^;)

 

空いている場所が2つなら、RND命令(ランダムに数値をだす)で、

0か1を出し、

ON HK(ER) GOTO ~ ,~,~,~で行へ飛ばします。

(このGOTO以降の行は、上下左右へ動かす行へ飛びます。)

1310 ER=RND(1)*2:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317

 

1314行が上移動。

1314 EO(EN)=1:EY(EN)=EY(EN)-8:GOTO1325

1315行が右移動。

1315 EO(EN)=2:EX(EN)=EX(EN)+8:GOTO1325

1316行が下移動。

1316 EO(EN)=3:EY(EN)=EY(EN)+8:GOTO1325

1317行が左移動。

1317 EO(EN)=4:EX(EN)=EX(EN)-8:GOTO1325

 

このあたりが少し分かりづらいかもしれないですね〜。

ランダムに数値を出します(RND命令で)。

RND(1)*2だと、0か1ですね。(RND(1)*3だと0,1,2のどれかです。)

そしてそれを変数ERに入れます。

そんままON 変数 GOTO ~に入れたくなりますが、

それでは駄目なんです^^;

 

ON 変数 GOTO 上移動(を行っている行番号) , 右移動 , 下移動 , 左移動

という形になっていますので

RNDで0か1がでると、上か右移動になります。

それでは駄目なので、

HK( )という配列を使います。

 

HK( ) とい配列がなにか?

これは、例えば、敵キャラクターの上が空いていた(壁じゃない)とすると、

HK( )に1を入れます。

 

同じように、敵キャラの右が空いていたら、HK( )に2を入れます。

 

下はHK( )=3、左はHK( )=4という感じです。

 

()の中は添字なのですが、空いていたとき(壁じゃない)のみ、

添字が増えます。

1249 IF ASC(AE$)>M2 THEN IF ASC(BE$)>M2 THEN ES=1:IF EO(EN)<>3 THEN EH=EH+1:HK(EI)=1:EI=EI+1

(EIが添字用ですね)

 

壁じゃないのが2箇所(例えば上、右とか)なら、

上 : HK(0) = 1

左 : HK(1) = 4

となります。

 

例えば、壁じゃないのが3箇所なら、(上、下、右)なら、

上 : HK(0) = 1

下 : HK(1) = 3

左 : HK(2) = 4

となります。

うーん、ややこしいかも^^;

 

とりあえず、HK( )=数値

この数値は、上下左右に対応しています。(上1、右2、下3、左4)

 

HK( )に移動可能な方向を順番に放り込んでいきます。

1310 ER=RND(1)*2:EO(EN)=HK(ER):ON HK(ER) GOTO 1314,1315,1316,1317

 

HK(0)が上方向かもしれないし、HK(0)が右方向かもしれない。(移動可能なのを順番に放り込んでいるから)

(上だったら1右だったら2)

(ON HK(0) GOTO~ だと、上なら1314行右なら1315行です)

 

すみません...

うまくまとめられない(-_-;)

 

そして!!!

さらにややこしいことを書きます!!

(すみません^^;)

1280 ON EH GOTO 1314,1315,1310,1316,1310,1310,1311,1317,1310,1310,1311,1310,1311,1311,1312

 

このEHなのですが、これも壁じゃない方向を表していいるのですが、

申し訳ありませんm(_ _)m

上下左右でさきほどのものと値が違うのです^^;

EHにおいては、

上 : 1

右 : 2

下 : 4

左 : 8

となります^^;

 

このEHはなにかといいますと、

壁じゃない方向を表します。

 

なぜこんな飛び飛びの数値になるか?

それは、合計するとすべての方向を表すことができるのです。

(これはベーマガの応用ですが...)

 

例えば、上と右の両方が空いていたとします。

上1  +  右2  = 3

となるのですが、この3という値は上と右のみでしか

でてこない数値なんです。

逆に言うと、3だったら上と右だな!とわかるのです(ΦωΦ)

 

それがすべての数値でいえるのです!

これは凄い!!!

 

ON EH GOTO 1314,1315,右上,1316,上下,右下,上右下,1317,上左,右左,上右左,下左,上下左,右下左,上下左右

 

こういうことです。

EHが3なら右と上、

EHが5なら上と下、

EHが6なら右と下

が空いている(壁じゃない)ということです。

 

しかし、今回の僕のプログラムは、この部分をうまく生かせておりません(・_・;)

これを空いている方向の数としてだけ使っています。

どういうことかといいますと、

EHが3なら右と上が空いてますが、これを2方向空きがあるという意味で使います。

(つまり、RND()命令で2つの内、1つ選ぶという利用方法)

 

EHが7だと上、右、下と3方向空きがあるので、

RND( )命令で3つのうち、1つ選ぶということをします。

 

(みなさんは、もっと上手な方法をやってみてくださいね^^)

 

上方向(1)の壁のある無しチェック:

1249 IF ASC(AE$)>M2 THEN IF ASC(BE$)>M2 THEN ES=1:IF EO(EN)<>3 THEN EH=EH+1:HK(EI)=1:EI=EI+1

この赤文字は、進行方向から戻る、つまりバックしないようにしています。

前回の進行方向が下(3)のときは、進行方向上(1)にはいかないように、と^^

下に行って、すぐ上に行ったら、上下を行ったり来たりすることになってしまうので

それを防ぎます。

 

バックするのを禁止していますが、

例外もあります。

3方向壁に囲まれている場合は、バックします^^

3方向壁で、バックを禁止すると、

 

1280 ON EH GOTO 1314,1315,右上,1316,上下,右下,上右下,1317,上左,右左,上右左,下左,上下左,右下左,上下左右

 

このEHが0になって、GOTOで飛ばされず、下の行に行きます。

1290 ON ES GOTO 1314,1315,1316,1317

ESには、バックする方向が入っています^^

 

 

説明は以上になります。

お疲れさまでした\(^o^)/

f:id:nyaonyaokun:20200608093933p:plain

MSX BASIC



https://msxpen.com/codes/-M9GLrUk8jzZOHKG46M-

(上記リンクをクリックで今回のプログラムのソースコードと、

簡易ゲームが動きます^^)

 

もっといいプログラムがあると思います^^;

しかし、僕が思いついたのは、こんなややこしい方法でした...

次回は、もう少し、効率を良くして、スピードも上げたいと思います。

 

いつか、もっといい方法を思いつくかもしれません。

その時はまたブログに書きたいと思います。

というか、もっといい方法にしないと駄目だなぁ(-_-;)

 

では。

 

大仏パラダイスのデータ版の販売はどうしようかなぁ^^;

大仏パラダイス プラス(データ版)の販売をどうしようか、悩んでいます。

売れそうにないですし、

コピーされまくる未来しか見えなくなってきました^^;

 

というのも、

先月、ねずみゲームのディスクイメージをBOOTHさんに

置いてみたのですが、

これがほとんどダウンロードされない(^_^;)

 

Twitterでwebmsxで出来るようにしてあったので(こちらは好評^^)

ダウンロードしてくれる人は、

実機で遊ぶ方か、BOOTHさんで初めて見た方になります。

 

そんな方がほとんどいないという事が分かってしまいました^^;

 

ほとんどの方が、webmsx(エミュ)で十分みたいですねぇ。

 

ということは、コピーのリスクを背負ってまでデータ版を販売することの

意味は?と考えてしまいました。

 

それならわざわざ、エミュで販売しなくても、

STEAMとか、そういったもので販売したほうが良さそうです。

 

色々考えたのですが、

今のところは、大仏パラダイス プラスの 1 ~ 3面を、

体験版として無料で公開しようかなぁ、と。

(データ版を販売するといっていた手前、

なにかしらは出さないと思いまして(´・ω・`))

 

そして、大仏パラダイス プラスは大幅パワーアップして、

カートリッジで出したいなぁと考えています。

 

まぁ、あくまで現時点ではそう考えています。

 

 

あと、無印の大仏パラダイスの再販をしたいと思います。

今回は工場での製造となります。

 

 

 かっこいい〜(*´∀`*)

 

それにともない、大仏パラダイス販促のためのデモを作っています。

 

f:id:nyaonyaokun:20200312045913p:plain

 もうしばらくお待ちくださいm(_ _)m

MSXゲーム 大仏パラダイスの再販のために準備しています

ご好評で完売していた、大仏パラダイスの再販に向けて

準備しています。

 

近々、販売出来ると思いますので、しばらくお待ち下さいm(_ _)m

 

データ版である、大仏パラダイス プラスの販売のための準備もしております。

こちらももう少しお待ち下さいm(_ _)m

 

予定ですが、先日リリースした、BACK TO THE GANTAN ねずみゲームの

BASICプログラム解説の電子書籍同人誌のほうが

はやく販売できると思います。

こちらは、BASICプログラムの詳しい解説(1行づつ解説しているので、なかなか完成しないのですが(^_^;))、

予定で簡単なゲームの改造方法も載せるつもりです。

定番の、自機数アップや、自作マップの描き方、スプライトデータの改変方法、マップチップの改変など。

なお、ねずみゲームのプログラムは自由にコピペしていただいて結構です^^

 

みなさんのオリジナルMSXゲームをやりたいのです〜Σ(゚∀゚ノ)ノキャー

よろしくお願いします^^

自作MSX BASICフリーゲーム ここで遊べます! ねずみゲーム BACK TO THE GANTANリリース!!!

MSX BASIC GAME TITLE:

BACK TO THE GANTAN (邦題: 元旦に戻れ!)

通称:ねずみゲーム

操作方法

左右カーソルキー:左右移動  ← → L,R MOVE

上カーソルキー:ジャンプ         ↑ JUMP

スペースキー:お魚ソードを出す SPACE KEY : ATTACK

 

十二支(えと)を見つけ助け出し、最終的にお宝をとるゲームです。

Find 12 animals and get treasure,please.

(少し変わっているというか、レリクスというゲームに似ているという評価を

貰ったりしています^^

普通のゲームを作ったつもりなのですが^^;

うれしいですけど(*´ω`*))

f:id:nyaonyaokun:20200202194552p:plain

2020/02/16更新

GAMESTART :MSXPen 

クリック後、1分お待ち下さいm(_ _)m

After clicking, please wait about one minute.

このゲームのプログラムの解説の同人電子書籍を書いています。(BOOTHで販売予定)

誰でもプログラムを改造してオリジナルのMSXゲームを作れるようにするつもりです。

 

  

2020年のお正月から作り始めていたゲームが完成しました!!!

ついに(*´ω`*)

 

お年賀ゲームだったのですが、1ヶ月もかかってしまいました^^;

タイトルはBACK TO THE GANTAN (通称 ねずみゲーム)

邦題は、元旦に戻れ!!!です^^

(BACK TO THE FUTURE バック・トゥ・ザ・フューチャーから、ですね^^)

 

今更、お正月と言われても(´・ω・`)

なので、元旦に戻った気分で、

干支のねずみをモチーフにしたゲームを

遊んでくださいという意味です。

 

 

 

 

クリックでエミュが動き、ゲームが遊べます。

クリック後、1分ほどお待ち下さい

After clicking, please wait about one minute.

(BG、スプライト定義に時間が掛かります^^;)

 

旧バージョン

GAMESTART

 

 

f:id:nyaonyaokun:20200202194610p:plain



 

f:id:nyaonyaokun:20200202044057p:plain

 

12の干支(えと)を集めるゲームです^^

画面の端に行くと、画面が切り替わります。

(描画が遅いのはMSX BASICなので...^^;)

 

マップを走って回って、干支を集め、

最後にお宝をゲットするゲームです。

 

あまり詳しくは書かないことにします(〃ω〃)

twitterで、こんなコメントを頂きました^^

 

 

あと、

 

 

 

 

12の干支(えと)に入れなかった猫たちが、

干支をさらうというゲームなのですが(*´ω`*)

 

猫をやっつけるのは、ネコ好きの僕としてはやりたくないので、

お魚を食べてお家に帰ってもらうというシステムにしました(*´艸`*)

 

スピードが遅いですが、サクッとプレイできると思うので、

ぜひ遊んでみてください^^

(1時間くらいでクリアできると思います)

 

BOOTHさんにて、DSKイメージを配布しています。

このゲームは無料です。

nyaonyao21.booth.pm

 

これからBOOTHさんで色々と配信したり、

販売していこうと思っています。

めざせ!赤字生活脱出 ^^;

 

 

ps.

MSXゲームの大仏パラダイス プラスの開発も大詰めです。

こちらは、データ販売となると思います。

よろしくお願いします〜^^

 

ブックマークはこのページにお願いしますm(_ _)m

ゲームをアップデートするかもしれないので^^

お正月を取り戻せ!ねずみゲーム その6 MSX BASIC(一部マシン語)フリーゲーム進捗

かなり出来てきました。

じつは、親が転んでケガをしてしまって、

いろいろと忙しく、開発が遅れています^^;

 

開発時間は、今までの半分くらいかなぁ。

 

ねずみゲームの動画を撮ってみましたので、

ぜひ御覧ください(^O^)

 

youtu.be

 

あと少しで完成です〜

無料MSX BASICゲーム お年玉 ねずみゲーム その5 構想

干支を助けて(取って)、画面から消える処理をしました。

意外に面倒なんですよ^^

干支との当たり判定をして、

その干支の座標にあたる背景を上から表示して、干支を消します。

 

スプライトだったら簡単なんですけどね〜。

(ファミコンのアイテムなどはスプライトですよね!処理が簡単ですから。

MSXだとスプライトは単色になってしまうからなぁ〜)

 

あともう少しです。

 

問題は猫との関係ですね〜。

猫と当たり判定をいれてからどうするか?

 

ねずみに攻撃させると、普通のアクションゲームになっていいのですが、

プログラムの容量と、スピードの関係から

BASICでは難しいかも。

(時間をかければできますが...

大仏パラダイス プラスの作業をしないといけないので〜)

 

まぁ、簡単な散策ゲームが無難ですかねぇ。

 

本当はアイテムとか出したいのですが、難しいかも^^;

 

マシン語で作れば、もう少しアクションゲーム寄りにできます。

この干支救出ねずみゲームを改良して、

本格的なゲームをカートリッジで出したいですね〜。

 

訳あって、オマージュ作品はやめようかと思っていたので、

(某ARPGゲーム^^;)

次回の販売するカートリッジゲームは、

ねずみゲームみたいな感じのゲームにするかもしれません(*´ω`*)

 

あくまで構想ですけど。

 

とりあえず、ねずみゲームの完成に向けて頑張ります〜\(^o^)/

 

 

無料MSX BASICゲーム お年玉 ねずみゲームとは? その4 データが増えすぎました^^;

なんと!Out of Memoryのエラーが出てしまいました^^;

プログラムが長すぎるというエラーですね。

 

MSX BASICは容量との戦いなのです(~O~;)

32Kバイト以上のMSX1を対象に作っているのですが...

 

32KバイトのMSXマシンといえど、

実際に使えるのは、23432バイトみたいですね。

(MSX1のメモリの最後の方に、ワークエリアがあるので。

それにしても8.5Kバイトも占領するとは!)

 

 

マップデータを少し圧縮?することにより、1.8Kバイト小さくしてみました(*´ω`*)

圧縮といっても、

10 MP$(0)="AAAAAABBBBBAACDED"

20 MP$(1)="AAAAAABBBBBAACDED"

30 MP$(2)="AAAAAABBBBBAACDED"

40 MP$(3)="BBCSFGBBAACCCDBBD"

というマップデータを、

 

5 M1$="AAAAAABBBBBAACDED"

10 MP$(0)=M1$

20 MP$(1)=M1$

30 MP$(2)=M1$

40 MP$(3)="BBCSFGBBAACCCDBBD"

 

というように重複をまとめただけですけどね( ゚д゚)ハッ!

でも減るもんですね〜。

 

あとやるのは、

PCG(文字の形、色データ)のデータが256文字全部書き換えているので、

(実際に描いているのは150文字とか、かな)

必要ないデータを消すことですね。

 

100 x 8で800バイト。

色データもあるので、全部で1600バイトほど確保できます。

 

まぁ、なんにしてもキツキツですね(^_^;)

BASICはフリーエリアとかなんとか勝手に確保されたり、

色々とメモリを圧迫します。

 

やっぱりマシン語が容量も少なくていいんですけどね。

(でもBASICは簡単だから^^ そこが最大の魅力!)

 

12体の干支(えと)を拾うところまで作りました。

ちなみに干支は、子丑寅卯辰巳午未申酉戌亥です。

 

あとは、ドアのオープンと、

干支に入れなかったために12体の干支を誘拐した猫との

当たり判定プログラムです。(*´艸`*)

 

じつは、

このゲームは干支に入れなかった猫ちゃんの反逆のゲームなんです!

 

まぁそんなこんなで完成間際です。

よろしくお願いします〜(*´ω`*)


「ニャオニャオ21世紀は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」

当サイトは第三者配信の広告サービス「Google Adsense グーグルアドセンス」を利用しています。 広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookie(クッキー)を使用することがあります。 Cookie(クッキー)を無効にする設定およびGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご覧ください