2026年 8月 19日
HSP Dishでのウインドウズに合わせた拡大表示やフルスクリーンについて考えてみる(HSP Ver3.7)
方法としては現時点では viewcalc命令を使う方法、SCREEN 0,x,y,256のように 3番目に 256を指定する方法、celbitmap命令を使う方法とあるが。
viewcalcは可能性がある、
SCREEN 0,x,y,256の方法は挙動が安定しない、
celbitmapは色々いじってみたが現時点では使い物にならないと思う。
拡大表示について考えてみる。
最近は 4kモニターみたいのもあるし、制作予定ゲームの等倍想定の 960 × 540ドットだと表示が小さい可能性がある、そのため 2倍表示や 3倍表示をできる機能が欲しい。

HSPだと簡単な話で、仮想画面に等倍で全部描いたものをメインスクリーンに一度だけ拡大表示すれば済む。

ところが HSP Dishだと仮想画面が作れない、全てメインである 0スクリーンに描き込む仕様なので、スクリーンの大きさに合わせて「座標と表示を拡大指定する」方法しかない。

なんと、これを簡単に実現する方法があった viewcalc命令を使う方法である。
viewcalc vptype_2d,n,n
nに倍率を書く、これを一回書くだけで以降座標と拡大の修正を全部自動でしてくれる。
#include "hsp3dish.as" bai=2 ; 倍率 screen 0,240*bai,180*bai viewcalc vptype_2d,bai,bai ; 表示倍率設定 repeat redraw 0 color 1,1,1 : boxf color 255,255,255 pos 110,80 : mes "〇" redraw 1 await 100 loop
おそらくこの場合、スクリーンのドット数と同じ描画処理を行うと思うので、スクリーンが大きくなればなるほど表示速度が遅くなる可能性はある。
次にフルスクリーンについて考えてみる。
フルスクリーンなら拡大表示の最終手段としても考えられる。
HSPDishにもフルスクリーンモードがあって SCREEN 0,x,y,256、3番目に 256を指定する、これでフルスクリーンにはなるけど、ウインドウズでは OSで指定できる画面の大きさで無いとエラーになるし、そのように指定してもエラーになる場合がある、いまいち挙動が安定しない。
忘れてたけど HSP3.7(HSP3.6β2から)では hsp3dish.iniファイルを用意してスクリーンサイズを設定する必要が無くなったみたい screenと bgscrで設定できるようになったそうな。
Linuxの HSP Dishの SCREEN 0,x,y,256を試してみた。

OSの解像度は 1280 × 720 青い部分がそうで、screenには 640 × 360と書いて実行してる、黒い boxfの部分は 640 × 640。
つまり screenの設定は反映されない、合わせて拡大表示も別にしない、OSの画像解像度いっぱいに一応フルスクリーンにはなる。
よって結論的に言うと HSP Dishで SCREEN 0,x,y,256によるフルスクリーンには期待できない。
余談で Linuxでの HSPも Alt + F4キーによる強制終了ができた。
以上考えて、拡大表示と同じように ginfoでモニターの解像度を調べてその大きさに合わせてスクリーンを作り、表示物個別に座標と倍率を拡大指定して表示する、という面倒な方法しか思い浮かばない。
celbitmap命令を試してみる。
この命令は画像の内容を読みだして変数に変換したり、その変数を元に描画する方法。
次のような方法で表示はできる。

#include "hsp3dish.as"
cox=64 : coy=64 ; キャラの大きさ
dim cd,cox*coy ; グラフィックデータ
screen 0,360,240
buffer 2,cox,coy,screen_offscreen ; 読み出し用スクリーン
celload "pggo.png",3 ; 画像
celdiv 3,cox,coy
gsel 0
pos 0,0 : celput 3,0 ; メイン画面へ画像を描く
celbitmap 2,cd,16 ; 変数へ読み出し
celbitmap 2,cd ; 変数からバッファへ書き込み
//表示
redraw 0
repeat 10
pos 10,cnt*20
mes strf("[%x]",cd(cnt+2000)) ; 変数サンプル
loop
pos 140,10
celput 2,0,2.0,2.0
redraw 1

この場合 2倍表示をしてる、しかしこれだけだと別に buffer3の画像を普通に拡大表示するのと変わらない。
そこで screen 0に等倍で書いたものを変数にして、もう一度 screen 0に拡大表示できないかやってみる。
理論的にはこれで良いはずなんだけど
#include "hsp3dish.as" bai=2 ; 倍率 cox=64 : coy=64 ; キャラの大きさ dim cd,cox*coy ; グラフィックデータ scx=180 : scy=120 ; スクリーンの大きさ dim scd,scx*scy ; スクリーンのデータ screen 0,scx*bai,scy*bai ; メインスクリーン buffer 2,scx,scy,screen_offscreen ; バッファスクリーン buffer 3,cox,coy,screen_offscreen ; キャラ読み出し用 celload "pggo.png",4 ; キャラ celdiv 4,cox,coy gsel 0 pos 0,0 : celput 4,0 celbitmap 3,cd,16 ; 変数へ読み出し celbitmap 3,cd ; 変数からバッファへ書き込み //表示 gsel 0 redraw 0 pos 0,0 celput 3,,2.0,2.0 ; キャラ表示 celbitmap 2,scd,16 ; 変数へ読み出し celbitmap 2,scd ; 変数からバッファへ書き込み pos 0,0 celput 2,,bai,bai redraw 1
読み込みがうまく行ってない感じ、redraw 0の書き込み以降はダメとか?

元の表示はこんな感じ、これをデータにして 2倍表示してる

そんな訳で celbitmap命令で、一度 screen 0に描いた物をデータに読み込んで、拡大最表示する方法はできないと思う。
次はデータの配列変数を直接書き換えて、それをスクリーンに拡大表示する方法。
メインスクリーンのデータにキャラのデータを部分的に上書きする。
これまた理論的にはこれでできるはずなんだけど
#include "hsp3dish.as" bai=2 ; 倍率 cox=64 : coy=64 ; キャラの大きさ dim cd,cox*coy ; グラフィックデータ scx=180 : scy=120 ; スクリーンの大きさ dim scd,scx*scy ; スクリーンのデータ screen 0,scx*bai,scy*bai ; メインスクリーン buffer 2,scx,scy,screen_offscreen ; バッファスクリーン buffer 3,cox,coy,screen_offscreen ; キャラ読み出し用 celload "pggo.png",4 ; キャラ celdiv 4,cox,coy gsel 0 pos 0,0 : celput 4,0 celbitmap 3,cd,16 ; 変数へ読み出し x=100 : y=100 repeat coy : cnt2=cnt repeat cox scd(x+cnt+((y+cnt2)*scx))=cd(cnt+cnt2*cox) loop loop celbitmap 2,scd ; 変数からバッファへ書き込み //表示 gsel 0 redraw 0 pos 0,0 celput 2,,bai,bai redraw 1
やっぱりずれた表示になる、原因は不明。

と言う訳で celbitmap命令にも現時点では期待できそうにない。
他に Artlet2Dと言うモジュールが仮想画面を作れると書いてあったので試してみたけど Dishでは表示されなかった。
と言う訳で今回は拡大表示はあきらめます。
等倍の仕様でそのまま進め、完成したら倍率表示に改造する、と言う事にします。
HSP Dishでの buffer画面や、そのメインスクリーンへの拡大転写の機能が、そのうち実装か改善されると良いですね。