FC2ブログ
RPG製作講座
こちらのコンテンツはHSP3の基礎命令を覚えながら
HSP(3.0)で RPGを作ってみようという講座です。

HSP初心者の方や、RPGのソースコードを参考にしたい
という方におすすめです。
STEP.1-1
タイトルとウィンドウの変更
新しく扱う命令
  • screen命令
  • title命令
何をするのか?
  • screen命令でHSP3のウィンドウを表示させてみよう。
  • title命令でタイトルバーのタイトルを変更してみよう。
STEP.1-2
フォントサイズの変更とメッセージの表示
新しく扱う命令
  • font命令
  • mes命令
何をするのか?
  • font命令でフォントの設定を変更してみよう。
  • mes命令で画面に文字を表示してみよう。
STEP.1-3
繰り返し処理と描写先の変更
新しく扱う命令
  • repeat命令
  • loop命令
  • pos命令
何をするのか?
  • repeat命令で繰り返しの処理を命令してみよう。
  • loop命令でrepeat 命令の終わりを宣言しよう。
  • pos命令で文字の描写先を指定してみよう。
STEP.1-4
キー入力と待ち時間
新しく扱う命令
  • stick命令
  • wait命令
何をするのか?
  • stick命令でキー入力を所得しよう。
  • wait命令でプログラムを一時中断してみよう。
STEP.1-5
塗りつぶしと色変更と再描写
新しく扱う命令
  • boxf命令
  • color命令」
  • redraw命令
何をするのか?
  • boxf命令で短径を描写してみよう。
  • color命令で色の指定をしてみよう。
  • redraw命令で描写モードを切り替えてみよう。
STEP.1-6
乱数発生と時間・日付の取得
新しく扱う命令
「RANDOMIZE 命令」と「RND命令」と「GETTIME命令」

RANDOMIZE 命令で乱数発生の準備をしよう。
RND命令で実際に乱数を発生させよう。
GETTIME命令で現在の時刻データを取得してみよう。
STEP.2-1
ラベルとサブルーチン
新しく扱う命令
「GOTO命令」と「GOSUB命令」と「RETURN命令」

GOTO命令で指定ラベルにジャンプしてみよう。
GOSUB命令でサブルーチンにジャンプしてみよう。
RETURN命令でサブルーチンから復帰してみよう。
STEP.2-2
配列変数と配列の要素
新しく扱う命令
「DIM命令」と「LENGTH命令」

DIM命令で配列変数を作成してみよう。
LENGTH命令で配列の要素を取得してみよう。
STEP.2-3
画像の読み込みと画像コピー
新しく扱う命令
「BUFFER命令」と「PICLOAD命令」
「GSEL命令」と「GCOPY命令」

BUFFER命令で仮想ウィンドウを作ってみよう。
PICLOAD命令で画像ファイルを読み込んでみよう。
GSEL命令で描写先ウィンドウを切り替えてみよう。
GCOPY命令で画像ファイルをコピーしてみよう。
STEP.2-4
画面のコピーモードと比較処理
新しく扱う命令
「GMODE命令」と「SWITCH命令」と「CASE命令」
「SWBREAK命令」と「SWEND」

GMODE命令でウィンドウのコピーモードの指定をしよう。
SWITCH命令で比較ブロックの開始を宣言しよう。
CASE命令で比較値の指定をしよう。
SWBREAK命令で比較実行の脱出をしてみよう。
SWEND命令で比較ブロックの終了を宣言しよう。
STEP.2-5
テキストデータの読み込みと割り当て
新しく扱う命令
「SDIM命令」と「NOTESEL命令」と「NOTELOAD命令」
「NOTEGET命令」と「GETSTR命令」と「STRSIZE命令」
「INT命令」

SDIM命令で文字列型の配列変数を作成してみよう。
NOTESEL命令で対象バッファを指定しよう。
NOTELOAD命令でバッファにテキストデータを読み込んでみよう。
NOTEGET命令でバッファの指定行を読み込んでみよう。
GETSTR命令でバッファから文字列を読み込んでみよう。
STRSIZE命令で読み出しバイト数を取得してみよう。
INT命令で文字列データを整数値に変換しよう。
STEP.2-6
キャラクターのアニメーションと終了選択
新しく扱う命令
「ONEXIT命令」と「DIALOG命令」

ONEXIT命令で終了時のラベルジャンプ指定を決めよう。
DIALOG命令でダイアログを表示してみよう。
SRPG製作
ただただ勢い任せに作ったSRPG(シミュレーションRPG)の
サンプル・ソースコードや実行ファイル等を公開しています。

ブログを始めるきっかけとなった作品です(随時更新)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ソース「sample016」の解説。その1

たまには、趣向を変えてソースコードの解説を行いたいと思います。
sample016のソースコードを一から説明していきますので、興味のある方はどうぞ。

//-------------------------
// 0. 別ソース結合
//-------------------------
#include "@Cloud.hsp"
#include "sort.hsp"

title "sample016" // タイトル



 まず#include命令で分離してあるソースファイル
 [ @Cloud.hsp ]と[sort.hsp ]を[ sample016.hsp ]に結合します。

 タイトル命令が何故この位置にあるのかというと
 ソースコードの上部であった方が、タイトル付け忘れを防げるからです。
 本来はスクリーン命令の後に行うのが普通です。

//==========================================================
// 1. 画面関連の定数を設定する
//==========================================================
#const win_x 400 // 画面Xサイズ
#const win_y 400 // 画面Yサイズ
tip.0 = 32 // チップのサイズ
tip.1 = tip / 2 // チップの1/2のサイズ
tip.2 = tip / 4 // チップの1/4のサイズ
tip.3 = tip / 4-1 // チップの1/4-1のサイズ(Z座標の補正に使用)
#define tip_sx tip.0 // チップのXサイズ
#define tip_sy tip.1 + tip.3 // チップのYサイズ
#const max_x 10 // マップ配列X
#const max_y 10 // マップ配列Y
#const max_z 10 // マップ配列Z
sx = 180 // 描写開始X座標
sy = 185 // 描写開始Y座標


 次にマップ描写に必要な定数を初期化しておきます
 よく使う変数などを、#define命令や#const命令で定義しておくと
 定数としてマクロに登録されるので、呼び出したい時(使用)に便利です。

//==========================================================
// 2. スクリーン関係の設定
//==========================================================
screen 0, win_x, win_y
buffer 1 : picload "map_tip.bmp"
buffer 2 : picload "Cloud.bmp"
buffer 3 : picload "chr.bmp"
buffer 4 : picload "kazari.bmp"
buffer 5 : picload "w_map.jpg"
gsel 0 // 描写先をスクリーン0に戻しておく

a = gettime(6) : randomize a // ランダム初期化
font "", 11 // フォント

 次にスクリーン命令でメインスクリーンを初期化
 使用する画像を格バッファに読み込んでおきます。

 頻繁に使う画像などは[ System.bmp ]等と名前をつけて
 まとまった画像にしておくと、画像コピーの際、エラーなどが減るかもしれません。

 最後に描写先(アクティブウィンドウ)をスクリーン0に戻します。

 gettime命令で現在(PC内)の秒を取得します。
 その値をもとにrandomizeで乱数を発生させます。
 これで起動毎に異なるパターンの乱数が発生するようになりました。

//==========================================================
// 3. マップデータを用意
//==========================================================

//---------------------------------------------
// 3-1. 使用する変数を初期化
//---------------------------------------------
dim map_data, max_x, max_y, max_z
#define map map_data(x, y, z) // ソース短縮のためのマクロ

dim data // マップデータを読み込むための変数
notesel data // バッファを割り当てる
noteload "map_data.txt" // 外部のマップデータを読み込み

 マップデータの初期化と定数のマクロの登録
 外部ファイルの[ map_data.txt ]の読み込みを行います。

//---------------------------------------------
// 3-2. map_data(x, y, z)に読み込んだデータを渡す
//---------------------------------------------
x = 0
y = 0
z = 0
repeat max_z
repeat max_y

// テキストの何行目を読み取っているか
noteget b.0, y + (z * max_y)
a.0 = 0
repeat max_x

// [,]で区切られた[b.0]のデータを[max_x]分だけ読み込む
getstr b.1, b.0, a.0, ','
a.0 += strsize // インデックスを次に

// もし[ n ]という文字を読み込んだ場合
// 現在の行はデータ無しとみなし、次の行を読み込む
if b.1 = "n" {
x++
break
}

// str型の[ b.1 ]をint型の[ a.1 ]に代入
a.1 = int(b.1)

// マップデータに代入
map_data(x, y, z) = a.1

x++
loop
y++ : x=0
loop
z++ : x=0 : y=0
loop

dim data // 3-3. メモリ開放


 テキストファイルのマップデータをバッファに読み込みます
 [ map_dat.txt ]から逐順に割り振られていきます。
 重要なルーチンなので、いずれソースファイルを[ map_load.hsp ]など
  外部に独立させるかもしれません。

//==========================================================
// 4. ユニットのデータを用意
//==========================================================
#const max_chr 10 // とりあえず5人に設定
dim cx, max_chr // X座標
dim cy, max_chr // Y座標
dim cz, max_chr // Z座標
dim cdx, max_chr // ウィンドウ上の描写先X
dim cdy, max_chr // ウィンドウ上の描写先Y
dim cdz, max_chr // ウィンドウ上の描写先Z

// ユニットの座標を用意
cx.0 = 0,4,1,4,2, 0,8,9,8,0
cy.0 = 0,2,3,4,7, 4,0,0,4,8
cz.0 = 4,3,3,1,0, 3,3,3,0,2

gosub *sort_pos // 最初にソートしておく

dim pr, 10, max_chr // パラメータ用配列
#define class pr. 0. c
#define hp pr. 1. c
#define mhp pr. 2. c
#define atk pr. 3. c
#define def pr. 4. c
#define spd pr. 5. c
#define act pr. 6. c // 移動可能範囲

// ユニットのパラメータを用意
repeat 5//max_chr
c = cnt
class = rnd(5)
mhp = 20 + rnd(3)*10
hp = mhp
act = 5
loop

// ユニットID5番以降ははオブジェクト「木」
repeat 5, 5
c = cnt
class = rnd(2) + 5
loop

// どのユニットが選択されているかフラグ
sel = -1


 ここではユニットに使う変数を初期化していきます。
 配列そのものに#define命令などでマクロ化してあると非常に便利です

//==========================================================
// 5. 雲の初期設定
//==========================================================

// 現在の雲の最大数 = cloud_max.0
// 変更したい雲の最大数 = cloud_max.1
Cloud_set 40
cloud_max.0 = stat
//pos 140, 5 : input cloud_max.1, 40,20
//pos 190, 5 : button "変更", *Cloud_chenge// 変更用のボタン


 外部モジュール[ @Cloud.hsp ]に使う変数を初期化します。
 「Cloud_set **」で雲の数を指定、「Cloud_draw」で雲を描写します。
 モジュール化してあるので、ソースコードはそちらを見てください。
スポンサーサイト

テーマ : ゲーム製作 関連
ジャンル : ゲーム

tag : HSP ソース SRPG SLG クォータービュー 講座 ゲーム

コメントの投稿

非公開コメント

No title

http://pc11.2ch.net/test/read.cgi/gamedev/1036923414/l50 から来ました。自分も HSP で RPG を作ろうとしてましたが、挫折したものです orz...

これらの記事をさらっと見ましたが、マップとかキャラとかを操作しているのが懐かしいです…。後でソースコードを見させてもらいます。

ゲーム作り頑張ってください。

No title

難しく考える必要はありません、ガンガン作って行きましょう。
結果は後から付いてくるはず…お互い頑張りましょう!!
カテゴリ
検索フォーム
カレンダー
03 | 2019/04 | 05
- 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 - - - -



月別アーカイブ
リンク
RSSリンクの表示
プロフィール

アクアブルブル

Author:アクアブルブル
HSPを使ってゲームを製作しています。

ランキングに参加しています。


ブログジャンキーにも登録してます。


リンクもご自由にどうぞ。

こちらは掲示板入り口

ユーザータグ

SRPG クォータービュー ニコニコ動画 Elona 講座 SLG ソース ゲーム google データ構造 ワーネバ TonyuSystem 経営シミュレーション TRPG RPG フリーソフト HSP HSPコンテスト シナリオ JavaScript アルゴリズム パズル MAP ミスティックシード A* ふりーむ ブログ コンテスト 

最新コメント
フリーソフトで面白いゲーム まとめサイト
スポンサードリンク


アフィリエイトのリンクシェアで、チャリティ活動



更新確認ツール

FC2カウンタ



googleボットチェッカー

Googleボットチェッカー

msnボットチェッカー

MSNボットチェッカー



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。