「ウソザナ」TEST1

前から作ってみたいと思っていた「ウソザナ」の製作に取り掛かりました。
まずは、自キャラモジュールを作ってみました。


適当なフォルダに次のファイルを用意し、HSPでxana_test1.hspを実行してみて下さい。

  • common.hsp (ここからゲット)
  • xana_test1.hsp (↓からゲット)テストスクリプト
  • xana_my.hsp (↓からゲット)自キャラモジュール
  • Xana_tile060227-4.bmpDENZI部屋さんのところからゲット) ※XANADU風タイル(自キャラ)をbmp保存して下さい


うまく起動するとこんな画面でキャラ1体を操作できます。


テスト方法

  • 矢印キー で上下左右に移動します。
  • SPACEキーで装備を変更します。
  • TABキー で装備種別を変更します。
  • ESCキー で終了します。


スクリプトは、今後も改良していく予定です。


xana_test1.hsp

;
; プログラム  :「ウソザナ」を作ってみる TEST1
;
; 作成     :ふじぽん
;
; Copyright   :http://d.hatena.ne.jp/fujiponXP
;
; 利用素材   :
;
;     □ドット絵   :DENZI部屋(http://www3.wind.ne.jp/DENZI/diary/)
;                     タイトル  :XANADU風タイル(自キャラ)
;                     更新日    :2006年02月28日
;                     ファイル名:Xana_tile060227-4.png  ※BMP形式で利用します。
;
; 変更履歴
;  ver.1.0 2009/11/08 新規作成
;

; ライセンスに関する表示
#include "common.hsp"
about_lisence

; グローバル定数
#module
	; ウィンドウID
	#const	global	sid_main		0					; 描画用
	#const	global	sid_myload		1					; 自キャラ読み込み用
	#const	global	sid_mycopy		11					; 自キャラgcopy用

	; 定数
	#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"									; 自キャラ用

; 画面定義
screen sid_min, cx*9, cy*9: title "ウソザナ"			; 描画用
m_myPicset "Xana_tile060227-4.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					; 装備

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

	redraw 1
	await wtime
	goto *main

xana_my.hsp

;
; モジュール定義:「ウソザナ」自キャラ用
; 作成     :ふじぽん
;
; モジュール名 :charactor
;
; モジュール変数:位置x,y, 方向ho, パターンpt, 移動計算用nx,ny
;
; Copyright   :http://d.hatena.ne.jp/fujiponXP
;
; 変更履歴
;  ver.1.0 2009/11/08 新規作成
;
#module charactor x, y, ho, pt, nx, ny

	; 画像セット
	#deffunc m_myPicset str fname
		buffer sid_myload: picload fname	; オリジナル画像用
		buffer sid_mycopy, 10*cx, cy		; gcopy用
		return

	; 変数初期化
	#modinit
		x = 8*cx: y = 4*cy: ho = 0: pt = 0
		gsel sid_mycopy: pos 8*cx,0: gcopy sid_myload, 2*cx, 5*cy, cx, cy
		return

	; 装備
	#modfunc m_myEquip int p1, int p2, int p3, int p4

		gsel sid_mycopy: boxf
		pos 0   ,0: gcopy sid_myload, 2*cx, p1*cy, 8*cx, cy					; 体
		pos 9*cx,0: gcopy sid_myload, (3+(p1=1 | p1=4))*cx, 5*cy, cx, cy	; 死亡

		color 0, 133, 111: gmode 4, 8*cx, cy,255
		if p2 > 0 : pos 0, 0: gcopy sid_myload,  2*cx, (p2+12)*cy			; 頭
		if p3 > 0 : pos 0, 0: gcopy sid_myload, 12*cx, (p3- 1)*cy			; 盾
		if p4 > 0 : pos 0, 0: gcopy sid_myload, 12*cx, (p4+ 3)*cy			; 武器

		return

	; 描画
	#modfunc m_mydisp
		gsel sid_main: color 0, 133, 111: gmode 4, cx, cy,255
		pos x, y: gcopy sid_mycopy, (ho*2+pt)*cx, 0
		return

	; 移動計算
	#modcfunc m_mywalk int k
		key = k: dx = 0: dy = 0
		if key&1 :dx = -4: ho = HO_LEFT : key=0			; 左移動
		if key&4 :dx =  4: ho = HO_RIGHT: key=0			; 右移動
		if key&2 :dy = -4: ho = HO_UP   : key=0			; 上移動
		if key&8 :dy =  4: ho = HO_DOWN : key=0			; 下移動

		if (dx=0) and (dy=0) : nx = x: ny = y: return 0
		nx = (x + dx + cx*8) \ (cx*8)
		ny = (y + dy + cy*8) \ (cy*8)

		pt = (pt + 1) \ 2
		return 1

	; 位置確定
	#modfunc m_myWalkcommit
		x = nx: y = ny
		return

	; 位置x
	#modcfunc m_myX
		return x

	; 位置y
	#modcfunc m_myY
		return y

	; 位置nx
	#modcfunc m_myNX
		return nx

	; 位置ny
	#modcfunc m_myNY
		return ny

	; 方向ho
	#modcfunc m_myHo
		return ho

#global