「ウソザナ」TEST2
「ウソザナ」のモンスターモジュールを作ってみました。
適当なフォルダに次のファイルを用意し、HSPでxana_test2.hspを実行してみて下さい。
- common.hsp (ここからゲット)
- xana_test2.hsp (↓からゲット)テストスクリプト
- xana_my.hsp (ここからゲット)自キャラモジュール
- xana_mon.hsp (↓からゲット)モンスターモジュール
- Xana_tile060227-4.png (DENZI部屋さんのところからゲット) ※XANADU風タイル(自キャラ)をbmp保存して下さい
- Xana_tile081213-2.png (DENZI部屋さんのところからゲット) ※XANADU風タイル(敵キャラ)をbmp保存して下さい
うまく起動するとこんな画面で自キャラを操作でき、モンスター10体が勝手に動きます。
ただし、当たり判定はまだ未実装です。
テスト方法
- 矢印キー で上下左右に移動します。
- SPACEキーで装備を変更します。
- TABキー で装備種別を変更します。
- ESCキー で終了します。
スクリプトは、今後も改良していく予定です。
xana_test2.hsp
; ; プログラム :「ウソザナ」を作ってみる TEST2 ; ; 作成 :ふじぽん ; ; Copyright :http://d.hatena.ne.jp/fujiponXP ; ; 利用素材 : ; ; □ドット絵 :DENZI部屋(http://www3.wind.ne.jp/DENZI/diary/) ; タイトル :XANADU風タイル(自キャラ) ; 更新日 :2006年02月28日 ; ファイル名:Xana_tile060227-4.png ※BMP形式で利用します。 ; ; タイトル :XANADU風タイル(敵キャラ) ; 更新日 :2008年12月22日 ; ファイル名:Xana_tile081213-2.png ※BMP形式で利用します。 ; ; 変更履歴 ; ver.1.0 2009/11/08 新規作成 ; ver.1.1 2009/11/13 モンスター10体移動 ; ; ライセンスに関する表示 #include "common.hsp" about_lisence ; グローバル定数 #module ; ウィンドウID #const global sid_main 0 ; 描画用 #const global sid_myload 1 ; 自キャラ読み込み用 #const global sid_monload 2 ; モンスター読み込み用 #const global sid_mycopy 11 ; 自キャラgcopy用 #const global sid_moncopy 12 ; モンスター読み込み用 ; 定数 #const global cx 32 ; キャラクターサイズX #const global cy 32 ; キャラクターサイズY #const global wtime 50 ; 描画待ち時間(ms) #const global HO_LEFT 0 ; 方向 左 #const global HO_RIGHT 1 ; 方向 右 #const global HO_UP 2 ; 方向 上 #const global HO_DOWN 3 ; 方向 下 #global ; モジュール読み込み #include "xana_my.hsp" ; 自キャラ用 #include "xana_mon.hsp" ; モンスター用 ; 画面定義 screen sid_main, cx*9, cy*9: title "ウソザナ TEST2" ; 描画用 m_myPicset "Xana_tile060227-4.bmp" ; 自キャラ用 m_monPicset "Xana_tile081213-2.bmp" ; モンスター用 ; 装備 ; 服 0:ノーマル赤 1:ノーマル白 2:レーザーアーマー 3:ハーフプレート 4:フルプレート ; 頭 0:なし 1:フルヘルム 2:プレートヘルム 3:赤髪 4:白髪 5:茶髪 ; 盾 0:なし 1:赤小 2:赤大 3:黒小 4:黒大 ; 武器 0:なし 1:剣 2:槍 3:杖 4:斧 5:弓 6:鈍器 dim eq , 4: eq.0 = 0, 0, 0, 0 dim eqmax, 4: eqmax.0 = 5, 6, 5, 7 ; 変数設定 eqpos = 0 ; 装備種類 ; 自キャラ生成 newmod my, charactor m_myEquip my, eq.0, eq.1, eq.2, eq.3 ; 装備 ; モンスター生成(10体) repeat 10 newmod mon, monster, cnt, cnt+16, rnd(9)*cx, rnd(9)*cy loop gsel sid_main *main redraw 0: color 50,80,80: boxf ; 画面クリア ; キー入力 stick key,15,1 if key&128 : end ; ESCで終了 if key&1024 : eqpos = (eqpos + 1) \ 4 ; TABで種類を変更 if key&16 { ; SPACEで装備を変更 eq.eqpos = (eq.eqpos + 1) \ eqmax.eqpos m_myEquip my, eq.0, eq.1, eq.2, eq.3 } ; 自キャラ ret = m_mywalk(my.0, key) ; 移動計算 m_myWalkcommit my ; 移動確定 m_mydisp my ; 表示 ; モンスター foreach mon ret = m_monWalk(mon.cnt) ; 移動計算 m_monWalkcommit mon.cnt ; 移動確定 m_mondisp mon.cnt ; 表示 loop redraw 1 await wtime goto *main
xana_mon.hsp
; ; モジュール定義:「ウソザナ」モンスター用 ; 作成 :ふじぽん ; ; モジュール名 :monster ; ; モジュール変数: ; no キャラno ; x, y 現在位置 ; nx, ny 移動計算用 ; ho 方向 ; pt パターン ; sp 種類 ; ; Copyright :http://d.hatena.ne.jp/fujiponXP ; ; 変更履歴 ; ver.1.0 2009/11/13 新規作成 ; #module monster no, x, y, nx, ny, ho, pt, sp ; 画像セット #deffunc m_monPicset str fname buffer sid_monload: picload fname ; オリジナル画像読込み用 buffer sid_moncopy, 4*cx, 20*cy ; gcopy用(20体分) return ; 変数初期化 #modinit int pno, int psp, int px, int py no = pno: x = px*cx: y = py*cy: ho = HO_UP: pt = 0: sp = psp gsel sid_moncopy pos 0 ,no*cy: gcopy sid_monload, (sp\16)*2*cx, (sp/16)*cy, 2*cx, cy ; 左向き pos 4*cx-1,no*cy: gzoom -2*cx, cy, sid_monload, (sp\16)*2*cx, (sp/16)*cy, 2*cx, cy ; 右向き return ; 描画 #modfunc m_monDisp gsel sid_main: color 0, 143, 122: gmode 4, cx, cy, 255 pos x, y: gcopy sid_moncopy, ((ho\2)*2+pt)*cx, no*cy return ; 移動計算(ret=0 移動無 ret=1 移動有) #modcfunc m_monWalk if rnd(3) : return 0 if rnd(30)=1 : ho = m_monTurnright( ho ) ; 方向変換 dx = ((ho=HO_RIGHT) - (ho=HO_LEFT)) * 4 dy = ((ho=HO_DOWN ) - (ho=HO_UP )) * 4 nx = (x + dx + cx*9) \ (cx*9) ny = (y + dy + cy*9) \ (cy*9) pt = (pt + 1) \ 2 return 1 ; 位置確定 #modfunc m_monWalkcommit x = nx: y = ny return ; 方向転換 右回り #defcfunc m_monTurnright int h switch h case HO_LEFT ret = HO_UP swbreak case HO_UP ret = HO_RIGHT swbreak case HO_RIGHT ret = HO_DOWN swbreak case HO_DOWN ret = HO_LEFT swbreak swend return ret ; 位置x #modcfunc m_monX return x ; 位置y #modcfunc m_monY return y ; 位置nx #modcfunc m_monNX return nx ; 位置ny #modcfunc m_monNY return ny ; 方向ho #modcfunc m_monHo return ho #global