☆マイコン講座のラムちゃんをプチコン4に移植する
◎きっかけ
前から資料用として「少年サンデーグラフィック うる星やつら」を集めていました。ただ集めるだけなのもなあとただの好奇心で2巻の1コーナーであったマイコン講座のラムちゃんをプチコン4に移植したのが2021年6月のこと。
その後うる星アニメがリメイクされると知りまして、記念になんかやりたいな、じゃあこれちょっと公開するかとなりました。…あくまでちょっと。
◎基本的な方法
マイコン講座の載っている「少年サンデーグラフィック うる星やつら2」の84-85ページによると、使用されたのは日立ベーシックマスターレベル3とのこと。有名なPCであり、命令概要は検索するとすぐ出てきた。後はプチコン4の同命令を調べつつちまちまやっていくだけ。
…なんだけど結構いじった。なお、上記の本を持っている事が前提で、ここに載せるのは差分のみとします。
講座側"20"(プチコン4側での2行目)を『ACLS』に修正
画面初期化。プチコンでのCLSは画面を消去するだけです。
講座側"20"と"30"の間に『XSCREEN 640,400』を挿入(以降プチコン側では行数がずれます)
元の画面解像度は640x200。この差は後の計算で埋めます。またアスペクト比の関係で右側が空欄になりますがそこは気にしません。
講座側"30"はあえてそのまま
プチコンにはPIという円周率を取得する関数が最初から入っていますが、なるべく講座側に寄せる方針のためそのままにしています。
if文の『=』は『==』に、べき乗はPOW()に変換
例として、講座側での"70"と"80"はプチコン側では以下の内容になります。
IF (B-D)*(C-E)==(D-F)*(A-C) THEN B=B+0.0001
H=((POW(A,2)-POW(C,2)+POW(B,2)-POW(D,2))*(C-E)-(POW(C,2)-POW(E,2)+POW(D,2)-POW(F,2))*(A-C))/(2*(B-D)*(C-E)-2*(D-F)*(A-C))
講座側"110"と"120"の間に『DIM T[2]』を挿入する
配列の宣言を行う。
私が見つけた日立ベーシックマスターの資料でも配列はDIMで宣言すると書いてあったが、うる星講座側には書かれていない。宣言の不必要な機種もあるんだろうか?
講座側の配列要素は"1"から始まるが、プチコン側では"0"から始める
簡単に言えば、講座側の数字から1引けばいいです。
ATNを『ATAN』に修正
逆三角関数Arctan値。
講座側"210"の計算を次の内容に修正↓
X=2*(R*COS(TH)+G):Y=2*(R*SIN(TH)+H)
ここで画面解像度のズレを修正する。
講座側"220"のPSETを『GPSET』に修正。
画面の指定座標に点を描画する。
講座側"270"の計算を次の内容に修正↓
GLINE 2*A,2*B,2*C,2*D
直線の描画。こちらも画面解像度の修正を入れている。
講座側"290"から"310"の内容を次の内容に変更する。
LOCATE 1,1 :PRINT "ラム PUSH ANY KEY"
REPEAT WAIT
UNTIL BUTTON(0,#B_ANY)==1
END
コンソール側からはともかく、メニューなどから実行すると元の状態では描画完了後すぐにメニューに戻ってしまい、全く絵が見られない。
そのため、任意のボタンを押すまで待機する処理に変更する。
後はひたすら本の通りに座標を入れていけば完成…ではありません。実は解像度を変えたことで計算にズレがあるのか、一部の座標の値を少し変えないとあらぬ方向に曲線が描画されます。
しかしもう自分でもどこをどう変えたのか覚えていない(本の文字が小さくて見比べるのが辛い)事と、そもそも本側の文字が小さくて誤記する可能性が高い事から、一行ずつ書いていっては実行して想定通りの線が引かれている事を確認するのをおすすめします。基本変える値は小さくて大丈夫です。
また、本には描画に10分ほどかかると書いてありますが、プチコン4では0秒です。スペックの差って恐ろしい!!(忠実に10分かけたいならFOR文のどこかにWAITでも入れましょう)