【ソフト名】 レトロペント BASICジェネレータ
【連絡先】 gef07047●nifty.com まで
(←●を@に変えてください)
【転 載】 転載希望の方は上記に連絡ください
【動作環境】
Windows95/98/2000/XP
【開発環境】 ActiveBasic 4.24
【ホームページ】 http://homepage3.nifty.com/ae85fcmxs/
【概要】
普通のペイントソフトとは異なります。
本ソフトで作成した絵を、昔ながらのBASIC(テキストファイル)に変換し保存が可能です。
よって、基本的な描画機能しか有しておりませんし、描画可能色もデジタル8色のみです。
【インストール方法】
retro_paint.zipを解凍して下さい。
【アンインストール方法】
解凍したフォルダ・ファイルを削除して下さい
レジストリに変更はありません。
【起動方法】
retro_paint.exeを実行して下さい。
【画面について】
右側が操作コマンドボタンです。
マウス操作にて選択可能ですが、キーボードでの操作も一部可能です。
ボタンの右側に「F*」と表示されているのはファンクションキーでの指定が可能である事を示しています。
描画色は、テンキー 0〜7キーを押す事でも変更可能です。
境界色は、メインキー0〜7キーを押す事でも変更可能です。コマンドボタンの下に表示されているカラーは中央が描画色、4辺が境界色を指しています。
この例では、青い線で囲まれた箇所を赤で塗りつぶします。
左下のボックスは、マウス位置の「拡大画面」です。
【操作コマンドについて】
マウスカーソルは、キーボードの上下左右キー(↑↓←→)でも操作が可能です。
精密な指定をする際には「拡大画面」を見ながらのキーボード操作がお奨めです。
基本操作は
左クリック(またはキーボードのスペースキーまたはEnterキー)で指定
右クリック(またはキーボードのESCキー)で取り消し
LINE (F1)
直線を描画します。始点、終点を指定します。
マウスの左クリック(またはキーボードのスペースキーまたはEnterキー)で指定出来ます。
-LINE (F2)
連続直線を描画します。始点、終点を指定します。終点を指定すると連続で線を描画出来ます。
マウスの左クリック(またはキーボードのスペースキーまたはEnterキー)で指定出来ます。
PAINT (F3)
境界色の中を"単色"で塗りつぶします。
コマンドボタンの下に表示されているカラーは中央が描画色、4辺が境界色を指しています。
この例では、青い線で囲まれた箇所を赤で塗りつぶします。
マウスの左クリック(またはキーボードのスペースキーまたはEnterキー)で塗る位置を指定出来ます。
PAINT (F4)
境界色の中を"タイルパターン"で塗りつぶします。
以下のパターンから選択が可能です。
この例では、青い線で囲まれた箇所を上記の色パターンで塗りつぶします。
マウスの左クリック(またはキーボードのスペースキーまたはEnterキー)で塗る位置を指定出来ます。
LINE (F5)
マウスカーソルにある直線を再描画します。(これは、ちょっと特殊なコマンドですので詳しく説明します)
以前描画した直線を探し、別の色やタイルパターンで再描画します。
下図では青線の上にマウスカーソルがあります。
この青線を赤線に変更します。
変更したい直線にマウスカーソルを合わせ、
マウスの左クリック(またはキーボードのスペースキーまたはEnterキー)で再描画の指定が出来ます。
もうひとつ、例を挙げます。
先程、タイルパターンで塗った際の境界色(この例では青)をタイルパターンと同じ線で再描画してみます。
下図は再描画したものです。
(見た目はあまり変化ないようですが)拡大画面で確認すると、塗った色と同じパターンになっています。
何の為に、この機能を実装したのかと言えば「陰影を目立たなくする」為です。
※昔のパソコンのBASICには色を塗りつぶす命令(PAINT)がありますが、この指定には、「描画色」と「境界色」の指定が必要です。
これでは、境界がはっきりと目立ってしまいます。
PSET (F6)
点を描画します。
マウスの左クリック(またはキーボードのスペースキーまたはEnterキー)で位置指定が出来ます。
BorderLINE
背景画像のデータを解析し、境界線(LINE)を自動で引きます。
これは、階調の境界箇所を判断させています。※昔のパソコンのメモリを考慮し、かなり精度を低く設定してあります。(精度を高めるとLINEの行数が多くなってしまう為です)
以下は例です。
UNDO (F12)
やり直します。1描画前に戻ります。
何度も前の画面に戻れますが、連続してのUNDOは再描画する為に時間が掛かります。※連続してのUNDOは(2回目以降のUNDO)、最初から画面を描画し直す為、少し時間がかかります。
背景読込
画像ファイル(bmp)を背景として読み込ませます。
読込時に「グレースケール(8階調)をデジタル8色に変換しますか?」とメッセージが表示されます。
"OK"の場合は、グレースケール化した画像をデジタル8色(黒・青・赤・紫・緑・水色・黄・白)に変換します。
キャンセルの場合は、8階調のグレースケールになります。この機能は背景をお手本として、その上から描画させる事を目的に実装させました。
背景フル
背景をフルカラーで表示させます。
背景8色
背景を8階調(またはデジタル8色)で表示させます。
背景OFF
背景を表示させません。
透過
本ソフト(retro_paint) を透過させます。
この機能はお手本の絵を表示させておき、透かして上から描画させる事を目的に実装させました。
例えば、
(1) 以下の画面を画面に表示させておき、
(2) 当ソフト(retro_paint)を起動させ、「透過」ボタンを押すと
(3) 下の画面が透けて見えます。
これで、お手本をなぞって、描画する事が可能です。
PAINT ON
ペイント機能を有効にします。
PAINT OFF
ペイント機能を無効にします。
背景を表示させた場合、ペイント機能が有効であると「せっかくのお手本の背景」が見えなくなってしまいます。
これを避ける為の機能です。
LOAD
ファイルを読み込みます。ファイルの拡張子はcsvです。
SAVE
ファイルを保存します。保存ファイルはcsvファイルですが、同時に同名のtxtファイルが生成されます。
このtxtファイルが、BASICファイルになります。
是非、ここで生成されたBASICファイルをレトロパソコンで実行してみて下さい。
なお、保存されたcsvファイルは、Excelでも読み込みや編集が可能です。1列目 コマンド (1:LINE 3:PAINT 4:PAINT(タイリング) 5〜7:タイリングペイントの情報 10:LINE検索後の描画)
2列目 X座標1
3列目 Y座標1
4列目 X座標2
5列目 Y座標2 もしくは 色(タイリングカラー1)
6列目 色
7列目 PAINT時の境界色
8列目 管理用
設定
動作設定です。
画面編集の解像度は、「640×400」 「640×200」 のいずれかを選択出来ます。
※「640×200」モードは、私(作者)の技術不足により動作が遅いです。
いずれは改善したいと思っています。BASIファイル出力の設定
解像度 100% 座標変換せず出力します。
解像度 50% y座標を50%に計算し、出力します。
これは「640×400」モードで作成し、BASIC出力の際に640×200に変換させる事が目的で付けました。タイリング機能の有無(現在 未使用です)
動作させたいレトロパソコンにタイリング機能が在るか無いかを指定します。これによって、BASICファイルの記述が変化します。
【BASIC出力について】
同梱ファイル 「retro-basic-cmd.txt」がBASIC出力の設定ファイル(テンプレートファイル)です。
このファイルを基にBASICファイルが出力されます。
以下は同ファイルの内容です。
これはF-BASIC用として記述したものですが、ほとんどのBASICが同様の記述方法かと思います。
「*箇所」に引数が代入されます。
"LINE(*,*)-(*,*),PSET,*"
"PAINT(*,*),*,*"
"PAINT(*,*),*,*"
"PSET(*,*,*)"
"X1=*:Y1=*:X2=*:C1=*:C2=*:GOSUB 60000"
"X1=*:Y1=*:X2=*:C1=*:C2=*:GOSUB 60100"
"X1=*:Y1=*:X2=*:C1=*:C2=*:GOSUB 60200"
"X1=*:Y1=*:X2=*:Y2=*:C1=*:C2=*:GOSUB 60300"
"60000 LINE(X1,Y1)-(X2,Y1),PSET,C1:FOR I=X1+((X1+(Y1 MOD 2)) MOD 2) TO X2 STEP 2:PSET(I,Y1,C2):NEXT"
"60100 LINE(X1,Y1)-(X2,Y1),PSET,C2:XS=Int((X1+4)/4)*4+(Y1 Mod 2)*2:IF XS<=X2 then FOR I=XS TO X2 STEP 4:PSET(I,Y1,C1):NEXT"
"60200 LINE(X1,Y1)-(X2,Y1),PSET,C2:XS=Int((X1+4)/4)*4+(Int(Y1/2) Mod 2)*2:IF XS<=X2 and Y1 Mod 2=0 THEN FOR I=XS TO X2 STEP 4:PSET(I,Y1,C1):NEXT"
"60300 LINE(X1,Y1)-(X2,Y2),PSET,C1:IF C1<>C2 THEN X3=X1:Y3=Y1:XP=(X2-X1):YP=(Y2-Y1):IF Abs(XP)>Abs(YP) THEN GOSUB 60400 ELSE GOSUB 60500"
"60400 YP=YP/Abs(XP):XP=Sgn(XP):IF XP=0 THEN XP=1"
"60410 FOR X3=X1 TO X2 Step XP"
"60420 X4=Int(X3*10)-Int(X3)*10:IF X4<5 THEN X4=0 ELSE X4=1"
"60430 Y4=Int(Y3*10)-Int(Y3)*10:IF Y4<5 THEN Y4=0 ELSE Y4=1"
"60440 IF (Int(X3+X4) Mod 2+Int(Y3+Y4) Mod 2)=1 THEN PSET(Int(X3+X4),Int(Y3+Y4),C2)"
"60450 Y3=Y3+YP:NEXT:RETURN"
"60500 XP=XP/Abs(YP):YP=Sgn(YP):IF YP=0 THEN YP=1"
"60510 FOR Y3=Y1 TO Y2 Step YP"
"60520 X4=Int(X3*10)-Int(X3)*10:IF X4<5 THEN X4=0 ELSE X4=1"
"60530 Y4=Int(Y3*10)-Int(Y3)*10:IF Y4<5 THEN Y4=0 ELSE Y4=1"
"60540 IF (Int(X3+X4) Mod 2+Int(Y3+Y4) Mod 2)=1 THEN PSET(Int(X3+X4),Int(Y3+Y4),C2)"
"60550 X3=X3+XP:NEXT:RETURN"記述方法が異なる際には、このファイルを変更して下さい。
※注意 行数や行位置を変更すると正常に動作しません。
なお、現在(私が)分かっている範囲で、N88-BASICは、以下の様に変更する必要があるかもしれません。
(LINEとPSETの記述方法が異なる。以下赤字箇所)
"LINE(*,*)-(*,*),*"
"PAINT(*,*),*,*"
"PAINT(*,*),*,*"
"PSET(*,*),*"
"X1=*:Y1=*:X2=*:C1=*:C2=*:GOSUB 60000"
"X1=*:Y1=*:X2=*:C1=*:C2=*:GOSUB 60100"
"X1=*:Y1=*:X2=*:C1=*:C2=*:GOSUB 60200"
"X1=*:Y1=*:X2=*:Y2=*:C1=*:C2=*:GOSUB 60300"
"60000 LINE(X1,Y1)-(X2,Y1),C1:FOR I=X1+((X1+(Y1 MOD 2)) MOD 2) TO X2 STEP 2:PSET(I,Y1),C2:NEXT"
"60100 LINE(X1,Y1)-(X2,Y1),C2:XS=Int((X1+4)/4)*4+(Y1 Mod 2)*2:IF XS<=X2 then FOR I=XS TO X2 STEP 4:PSET(I,Y1),C1:NEXT"
"60200 LINE(X1,Y1)-(X2,Y1),C2:XS=Int((X1+4)/4)*4+(Int(Y1/2) Mod 2)*2:IF XS<=X2 and Y1 Mod 2=0 THEN FOR I=XS TO X2 STEP 4:PSET(I,Y1),C1:NEXT"
"60300 LINE(X1,Y1)-(X2,Y2),C1:IF C1<>C2 THEN X3=X1:Y3=Y1:XP=(X2-X1):YP=(Y2-Y1):IF Abs(XP)>Abs(YP) THEN GOSUB 60400 ELSE GOSUB 60500"
"60400 YP=YP/Abs(XP):XP=Sgn(XP):IF XP=0 THEN XP=1"
"60410 FOR X3=X1 TO X2 Step XP"
"60420 X4=Int(X3*10)-Int(X3)*10:IF X4<5 THEN X4=0 ELSE X4=1"
"60430 Y4=Int(Y3*10)-Int(Y3)*10:IF Y4<5 THEN Y4=0 ELSE Y4=1"
"60440 IF (Int(X3+X4) Mod 2+Int(Y3+Y4) Mod 2)=1 THEN PSET(Int(X3+X4),Int(Y3+Y4)),C2"
"60450 Y3=Y3+YP:NEXT:RETURN"
"60500 XP=XP/Abs(YP):YP=Sgn(YP):IF YP=0 THEN YP=1"
"60510 FOR Y3=Y1 TO Y2 Step YP"
"60520 X4=Int(X3*10)-Int(X3)*10:IF X4<5 THEN X4=0 ELSE X4=1"
"60530 Y4=Int(Y3*10)-Int(Y3)*10:IF Y4<5 THEN Y4=0 ELSE Y4=1"
"60540 IF (Int(X3+X4) Mod 2+Int(Y3+Y4) Mod 2)=1 THEN PSET(Int(X3+X4),Int(Y3+Y4)),C2"
"60550 X3=X3+XP:NEXT:RETURN"
【履歴】
2012/ 1/ 3 初版 V1
2012/ 2/12 V2 背景読込、境界線自動描画、ズーム、描画速度の向上