忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

昨日悩んでいたマップデータの読み込み方が解りました!
まずQuoyleでマップを作ると、〜.qmpと言うファイルが出来ます。これをHSPに使いやすいようにする為のコンバーターが同梱されていて
これを使うと↓のようなファイルが出来上がります。
*************************************
/* マップサイズ(X,Y) , チップサイズ(X,Y) , レイヤーマイスウ */
dim map_set,6
map_set=8,15,64,64,1

/* マップデータココカラ */
dim map_data,120

/* レイヤー0 */
map_data.0=6,6,6,6,6,6,6,6
map_data.8=6,8,8,8,8,8,8,8
map_data.16=8,6,6,6,6,6,6,6
map_data.24=6,8,6,6,6,6,6,6
map_data.32=6,6,8,6,6,6,6,8
map_data.40=6,6,6,8,6,6,6,8
map_data.48=6,6,6,6,8,6,6,6
map_data.56=6,6,6,6,6,8,6,6
map_data.64=6,6,6,6,6,6,8,6
map_data.72=6,6,6,6,6,6,6,8
map_data.80=6,2,2,2,6,6,6,6
map_data.88=6,8,8,8,6,6,6,6
map_data.96=6,6,6,6,6,6,6,6
map_data.104=6,6,6,6,2,2,2,6
map_data.112=6,6,6,6,8,8,8,6
/* マップデータココマデ */
*************************************
これの読み込み方が今までわからずに悩んでいたのですが、解ってみれば全然簡単な事でした。
このデータは改行されて入っていますが、ただ単にmap_data.0から順番に数字が当てはめれられているだけだったんです。
なので例えばmap_data.8=6,8,8,8,8,8,8,8の最初の6を取り出したかったら、変数=map_data.9とすれば、変数に6が代入されるって感じです。

それを踏まえて、DirectX対応の縦スクロールスクリプトを作ってみました↓
*************************************
*start
#include "hspdxfix.as"
#include "map.txt"
;■ DirectX 初期化&チェック
dialog "fullscreenで起動しますか?「はい」を選択した場合、画面解像度を640×480に変更します。",2,"Config"
if stat=6:screenmode=0
if stat=7:screenmode=1
es_ini 1124,1124,360;スプライト最大数2048,キャラクタ最大数1024,角度360度
es_screen 640,480,16,0,screenmode,1;directX使用時の解像度640*480
if stat=1 : goto *dxerr1
if stat=2 : goto *dxerr2
goto *setup
*dxerr1
dialog "DirectXの初期化に失敗しました。",1 : end
*dxerr2
dialog "スクリーンの初期化に失敗しました。",1 : end
*dxerr3
es_bye : wait 100
dialog "VRAMの容量が不足しています。",1 : end

*setup
;画像読み込み
buffer 4,192,192,0
pos 0,0 : picload "stgmap.jpg"
es_buffer 1,0
if stat=1 : goto *dxerr3

gsel 0
es_cls
es_sync
wait 100
;初期設定
//諸データの読み込み
//マップサイズ
map_sx=map_set.0
map_sy=map_set.1
//チップサイズ
chp_sx=map_set.2
chp_sy=map_set.3
;初期描画位置(一番下から読み込んでいくのでマップ全体の大きさから、画面の大きさ割るチップサイズを引けば
;マップの一番下が表示される)
y=map_sy-(480/chp_sy+2)
scro=y*map_sx;初期変数読み込み位置

;メイン
*main
es_cls;画面クリア
gosub *map_draw
es_draw;スプライト描画
gosub *kabehyouji
await 0
es_sync 16,2
getkey syuryo,27:if syuryo=1:end;ESCを押すと強制終了
goto *main
;マップ配置
*map_draw
idy+2;スクロール速度(チップサイズ(chp_sy)を割れる数字じゃないとダメ)
if idy=chp_sy : idy=0 : scro=scro-map_sx : y--;chp_syドットスクロールしたら読み込むマップデータを1つ下げる
cb=0:cc=-chp_sy;マップチップ並べ(上にスクロールするので上にchp_syドット余分に描画する)
xx=scro;マップデータ読み込み位置指定
repeat 480/chp_sy+2;縦幅(縦は480ドットなので480/チップサイズで縦のリピート回数がわかる。それに余裕をもたせて+2。)
repeat map_sx;横幅(map_sxかけるchp_sx=416、1行のマップチップデータがmap_sx個なので)
;マップ表示
cd=map_data.xx;変数cdにマップチップデータ読み込み
gmode 0
gosub *lite;描画ルーチンへ
xx++;データ読み込み位置をひとつ右へ
cb=cb+chp_sx;描画位置をchp_sxドット右へ
loop
cb=0;描画位置を一番左へ
cc=cc+chp_sy;描画位置をchp_syドット下げる
loop
;ストッパー(変数がハミでないように)
if y=0:idy=0
return

*kabehyouji
;変数確認
color 0,0,50
es_boxf 416,0,640,480
color 255,255,255
pos 420,0
es_mes "y="+y;描画位置
pos 420,20
es_mes "map_sx="+map_sx;全体のマップ大きさx
pos 420,40
es_mes "map_sy="+map_sy;全体のマップ大きさy
pos 420,60
es_mes "chp_sx="+chp_sx;チップサイズx
pos 420,80
es_mes "chp_sy="+chp_sy;チップサイズy
return

*lite
repeat 192/chp_sy;マップチップ画像のxサイズが192ドットなので
ent=cnt
repeat 192/chp_sx;マップチップ画像のyサイズが192ドットなので
if cd=cnt+ent*192/chp_sx:pos cb,cc+idy:es_copy 1,chp_sx*cnt,chp_sy*ent,chp_sx,chp_sy
loop
loop
return
*************************************
hsp3.0使用 hspdxfix使用 画像は11/10のブログの物を使用

マップデータは↓(最初に掲載したデータでもOKです)
*************************************
/* マップサイズ(X,Y) , チップサイズ(X,Y) , レイヤーマイスウ */
dim map_set,6
map_set=13,30,32,32,1

/* マップデータココカラ */
dim map_data,390

/* レイヤー0 */
map_data.0=15,16,16,16,17,21,22,22,23,13,33,33,13
map_data.13=15,16,16,16,17,34,22,22,23,13,33,33,13
map_data.26=24,24,25,25,25,34,22,22,23,13,33,33,13
map_data.39=30,30,31,31,31,34,22,22,23,13,13,13,13
map_data.52=24,24,25,25,25,21,22,22,23,13,5,5,13
map_data.65=31,31,30,30,30,21,22,22,23,13,11,11,13
map_data.78=3,3,4,4,4,21,22,22,23,13,29,29,13
map_data.91=9,9,10,10,10,21,22,22,23,13,13,13,13
map_data.104=35,13,35,13,35,34,22,22,23,13,0,1,2
map_data.117=7,7,7,7,7,34,22,22,23,7,6,7,8
map_data.130=13,13,13,13,13,34,22,22,23,13,12,33,14
map_data.143=13,13,13,13,13,34,22,22,23,13,18,19,20
map_data.156=13,0,1,2,13,34,22,22,23,13,13,13,13
map_data.169=7,6,7,8,7,21,22,22,23,13,33,13,33
map_data.182=13,12,35,14,13,21,22,22,23,13,13,33,13
map_data.195=13,18,19,20,13,34,22,22,23,13,33,13,33
map_data.208=30,31,30,31,30,21,22,22,23,13,0,1,2
map_data.221=24,3,4,25,24,21,22,22,23,13,6,7,8
map_data.234=30,9,10,31,30,21,22,22,23,13,12,35,14
map_data.247=4,25,24,3,4,34,22,22,23,13,18,19,20
map_data.260=10,31,30,9,10,21,22,22,23,0,1,2,0
map_data.273=24,3,4,25,24,21,22,22,23,6,7,8,6
map_data.286=30,9,10,31,30,21,22,22,23,12,35,14,12
map_data.299=4,25,24,3,4,21,22,22,23,18,19,20,18
map_data.312=10,31,30,9,10,21,22,22,23,0,1,2,0
map_data.325=24,3,4,25,24,21,22,22,23,6,7,8,6
map_data.338=30,9,10,31,30,34,22,22,23,12,33,14,12
map_data.351=3,25,24,3,4,34,22,22,23,18,19,20,18
map_data.364=9,31,30,9,10,34,22,22,23,0,1,2,0
map_data.377=24,3,4,25,24,21,22,22,23,6,7,8,6
/* マップデータココマデ */
*************************************
マップデータをmap.txtとして保存して、実行ファイルと同じフォルダに入れればちゃんとマップデータを読み込んで表示してくれます^^
一応スクリプトはマップチップの大きさやマップ全体の大きさが変わっても表示出来るようにした(つもり)です。
それと、11/10に掲載したスクリプトでは描画部分に無駄が多かったのでrepeatを使ってスッキリさせてみました。

これで、マップエディターでマップを作って読み込ませて表示ってのが、かなり簡単に出来そうです^^
PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題
こちらの背景は12画面分のバカデカイ一枚の画像です^^;
現在それを3枚重ねて違う速度でスクロールさせています
最終的にはktさんと同じようにマップチップに分けるつもりですが
速度600の古いノートPCでも快適に動いているので当分このまま行ってみます
後、こちらは今エディタを検討してます
ktさんはHSP標準のエディタで組んでますか?
本職プログラマーにアドバイスをもらったんですが
「この機能のエディタでは数千行のプログラムに向いてない、もっと分りやすく便利なエディタがある」
らしく、ワンクリックでコンパイル〜実行などは出来なくなるものの
格段に分りやすくなり
プログラムの流れが分らなくなることが減るそうです
まだ実際に使ってないのでなんとも言えないですが^^;
使い勝手が良いようでしたら紹介しますね
ふろんてあ 2006/11/14(Tue)13:18:46 編集
無題
速度の低いパソコンでも快適動くんなら全然OKだと思いますよ^^ちゅうか、絵が書けるのが非常に羨ましいです。
しかも、3重スクロールっすか。私も多重スクロールは是非ともやりたいので、チャレンジしてみますよ^^
動作確認用の、スペックの低いパソコンも欲しいです。

エディタはHSP標準の物を使っていますよ。
と言うか、「他のエディタを使う」って言う発想自体がありませんでした(汗)
現在2000行程のスクリプトになっているのですが、既にプログラムの流れが判らなくなる時が多々あるので、私もエディタをちょっと探してみます。
良い物があったら、教えて下さいね^^
kt. 2006/11/14(Tue)22:16:40 編集
この記事へのトラックバック
この記事にトラックバックする:
Twitter
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]