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

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



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

アクアブルブル

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

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


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


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

こちらは掲示板入り口

ユーザータグ

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

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


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



更新確認ツール

FC2カウンタ



googleボットチェッカー

Googleボットチェッカー

msnボットチェッカー

MSNボットチェッカー



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