“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

73.HSPでゲーム&ウォッチのファイアを作ろう その3

次はスマホでも動くように、タッチパネルで操作したときの移動処理を追加することにした。

タッチした情報を取得するには、まず、mtlist命令を使う。
二本指や三本指でタッチした場合、それぞれの情報を一度に取得する。
取得された情報は、配列として格納される。
今回は、マルチタッチは不要なので、常に0番目(一本目のタッチ)の情報があればいい。

mtlist命令で得られるのはタッチの情報が入ったIDだけ。
そのIDをもとに、mtinfo命令で、さらにタッチしたときの情報を取得する。タッチがオンオフか、タッチしたX、Y座標が指定した配列に格納される。
あとは、BASIC!で作ってた座標の判定処理を移植すれば、終わり。と思っていたが、キー操作とは違って、やっぱりタッチしたままだと、連続判定されてしまう。

幸い、指が完全に離れていれば、mtlist命令を実行したときに、stat=0が返ってくるので、これを利用してフラグを作った。後は、BASIC!の時と同じようにフラグで判定処理を加えた。

タッチパネルなしのWindowsで動かすと、マウスの左クリックで反応する。キーボード操作の判定処理もそのまま残したので、どちらでも操作可能になった。

*playermove
	;キーボード操作の判定
	stick key
	if key&1 : px=px-1;カーソル左
	if key&4 : px=px+1;カーソル右

	;タッチパネル操作の判定
	mtlist touchid
	num=stat
	if num>0 & touched=0 { ;一本以上指がタッチしていて、かつタッチした直後なら
		id = touchid(0);一本目のタッチは0番目
		mtinfo touch,id
		if touch(0)=1 {;タッチがオンならば
			tx=touch(1):ty=touch(2):touched=1;タッチされた座標を変数に代入、タッチしたフラグを付ける
			if ty>=250 & ty<=320 {
				if tx>=35 & tx<=105 {
					px=px-1
				} else : if tx>=497 & tx<=567 {
					px=px+1
				}
			}
		}
	} else : if num=0 : touched=0


	;プレイヤー位置の調整
	if px<0 : px=0
	if px>2 : px=2

	;プレイヤーを表示する
	pos ppos(px),207
	gmode 2:celput 2;透過PNGを表示するモードに変えて

	return

HSP3Dish Helperで、apkファイルをビルドして、Googleドライブ経由でスマホにインストール。
無事にタッチ操作で、救助隊を左右に動かせるようになった♪

憧れだったコンピュータ達:6.X68000(シャープ)

今回の憧コンは、誰もが欲しかったと思う、シャープのX68000

f:id:CORO3:20210316222825j:plain

X68000は、FM-77AVのような度肝の抜き方とは違っていた。まさかの移植版グラディウスの同梱!
そのレーザーは長く、美しく、グラフィックも完全移植(と当時は思っていた。結構移植としてはだめな部類らしい)。

MSXと同じようにスプライト機能があり、背景に使えるBGも複数あったりと、アーケードゲームを完全移植できる唯一のスペックを備えたパソコンだった。
その名称にも使われている通り、CPUはモトローラの68000。メガドライブでもメインCPUとして使われていた。

その後マイコンソフトやその他メーカーから発売された数々のアーケード移植作品のクオリティの高さには舌を巻いた。
完全移植ではないが、あのスピード感をばっちり再現したマイコンソフトの「アフターバーナーII」や、本家コナミが移植した「グラディウスII」。のちにサターンやプレステで発売されたグラディウスDXパックの移植を見るまでは最高峰だった。
オリジナルゲームもすごかった。
ベーマガに、PC-8001R-TYPEなどを再現した「N-TYPE」などのゲームを投稿していた神プログラマー「Bug太郎」氏が、ウルフチームに入社してオリジナルシューティングゲームの「ソルフィース」を出したり、ズームというメーカーからは、アクションゲームの「ジェノサイド」や、F1レースゲームの「OVER TAKE」のような良作が次々と発売された。

ゲームばかりではなく、筐体のデザインもスタイリッシュだった。マンハッタンシェイプと呼ばれる二つのタワー形状からなるデザインは、すごくカッコよかった。今でもPCのケースとして改造していたりするものをネットで見かける。また、小型プラモデルが発売されて、ラズパイ用のケースになったりしてた。
社会人になって、買えないことも無かったが、このころはセガサターンプレイステーションが発売されており、バーチャファイターが遊べて、お値段5万円ちょっとのサターンがあれば良くなっていた。

72.HSPでゲーム&ウォッチのファイアを作ろう その2

スマホにいちいち転送して動作を確認するのは面倒なので、まずはDishの作法で書きつつ、Windowsで動くようにする。
プログラムの冒頭には、Dishを使うおまじない。#include "hsp3dish.as" と書いておく。
celload命令で、画像を読み込んでおく。ここでは筐体と、救助隊の画像をそれぞれ読み込んだ。

救助隊の移動は、カーソルキーで行うようにする。
カーソルキーの判定を丸ごとサブルーチンにしておけば、あとでスマホのタッチ処理に切り替えるのも楽かな。

カーソルキーが押されたかを調べるには、stick命令を使う。
今回は、押しっぱなしにしていると、一度離して押し直すまで判定してほしくないので、シンプルに stick key だけ。(keyの後ろに連続押しの判定をしたいキーのビットを足した10進数を書くと設定できる)
カーソルキーの左右で、救助隊を動かす。

#include "hsp3dish.as"
	title "FIRE"
	celload "fire_bg.png",1
	celload "fire_player.png",2
  
	dim ppos,3 ;プレイヤーの表示座標
	ppos(0)=196:ppos(1)=258:ppos(2)=323
	px=0;プレイヤーの位置(0~2)
	
*main
	redraw 0

	pos 0,0
	celput 1;筐体表示

	gosub *playermove;プレイヤーの移動

	redraw 1
	await 1000/60

goto *main

*playermove
	;キーボード操作の判定
	stick key
	if key&1 : px=px-1;カーソル左
	if key&4 : px=px+1;カーソル右

	;プレイヤー位置の調整
	if px<0 : px=0
	if px>2 : px=2

	;プレイヤーを表示する
	pos ppos(px),207
	gmode 2:celput 2;透過PNGを表示するモードに変えて

	return

そうして動いたのがこれ。
youtu.be

Windows上で動くプログラムがこんなに簡単に作れるのか。
感覚は、まさにBASICと同じ。これは肌に合いそうな言語だ。

憧れだったコンピュータ達:5.MZ-2500(シャープ)

今回の憧コンは、SuperMZこと、シャープのMZ-2500。

f:id:CORO3:20210316221230j:plain
https://itoi.jp/time32.html

MZ系の最強進化であり、終焉の機種。
MZ-1500に搭載されていたQDではなく、3.5インチFDが搭載されていた。そしてなんといってもカセットデッキが埋め込みされていたのだ。
まさにMZ-80Bの進化形態だった。

そして、グラフィックも同時期にでていたFM-77AVには劣るものの、かなり綺麗なグラフィックで、このころ完全移植の言葉とともに語られた、電波新聞社マイコンソフト)移植のゼビウスがすごくほしくなった。
MSX2で発売されたT&Eソフトレイドックも発売されたりして、華やかだった。

しかし、しかし、しかしw
まぁ、このコーナーに出てきているのは、買える値段じゃなかったというオチしかないのですがw