投稿記事

2019年 10月の記事 (6)

まるちゃん 2019/10/27 15:00

入手インフォメーションのスクリプト


ログ表示.txt (ログ表示.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
(2019/11/02)更新しました。一応変な動作がしなくなったりとかしたけれど
プログラムを見て安定しているっていう感じがしない
なんか不格好でかっこ悪い。それでもいい人向け
ログに表示するときSEをつけていましたが内容によっては変えたいことがあったので
これをなくすことにしました。SEを再生をつけてください
アイテムの個数には対応してないのでそこらへんは各自調整してください

SS はこのスクリプトです
自分はプロジェクトを公開して作品を作りたいので
他のサイトでは再配布がだめということだから自分で作りました
みんなの目に耐えたスクリプトじゃないからバグがあると思うので
素直に他の人のスクリプトを使ったほうがいいと思います
セーブ画面から戻ってきたときなんか変

利用規約は著作権を放棄してないです
でも再配布とかは自由にしていいよって
シェアで使ってもフリーで使ってもいいよみたいな
報告義務もないし著作権の表示義務もありません
これだけが僕の強みですね
バグがあったらコメントで知らせてほしくて
役に立ったら100円頂戴みたいな感じ

入手インフォ.txt (入手インフォ.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp

こっちは動かないやつです
これのほうが安定していると思う

装飾品を作らないととか敵のステータスも考えないとって
色々やることあるのに楽しくスクリプトを作っていました
結構使いやすくできていると思います
自分で言うのも何だけど

(2019/11/01)
新しいログが追加されて開いている途中に時間が来て上のやつが削除されると
開いている途中だから動けなくて間ができてしまう感じがあるみたいだ
ちょっと修正したい
それかログを表示するために待つ時間が0のときに追加されるとだめみたい
わからん。こういうのは気になってだめだ
いま夜で最悪だ気になって眠れなさそう
こういうのは朝やるとすんなり解ける事が多い

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

まるちゃん 2019/10/21 11:13

素材の利用規約における再配布について

ゲームのテンポを落とさないようにオートセーブとクイックセーブを作りました
オートセーブ.txt (オートセーブ.txt)


少し UI を変更しました。かっこよく作ることができない…
クイックセーブはロードしたときのファイル、もしくはセーブした最新のファイルに上書き保存をする機能です
F5 を押すとクイックセーブも考えたのですが戦闘中にセーブはできないので
イベントコマンドとして利用する形にしました
普段は F5 を押せはクイックセーブできるのに戦闘中はできないということでは
不満になるような気がしたのでイベントならって感じです

次はHPの表示の調整もしくは自分で作る
そんなに多機能なHP表示はいらないからなぁ…
スクリプト作成ばかりしていて制作が進んでいない感じ

装飾品をたくさん作って内容を考える作業をするべきだ
これはたくさんあったほうが面白いと思うのでいい感じに作りたい
ランダムで作ってしまうのがいいのか?
作るのはランダムで作って良さげなのをピックアップする感じかも

その他にウィンドウとフォントを変更しました
Google Noto Fonts
このフォントは SIL Open Font License - Wikipedia で再配布もOK?みたい
実はよくわかっていない

フォントのライセンスについて | 自家製フォント工房 が詳しく書いてあるんだと思う
でも日本語なのに全く読めません。誰か教えて

ツクール VXace ではフォントを変更する場合こうします
Fonts というフォルダを作りその中に入れる
Font.default_name = "NotoSansCJKjp-Light" Font.default_size = 22 Font.default_out_color = Color.new(0, 0, 0, 192)
スクリプトの中にこういうのをどっかしらに入れると変わります
フォントのサイズが少し変だったりするので自分は 22 にしています
最後の行のやつは縁の色を何色にするかというやつです
デフォルトでは Color.new(0, 0, 0, 128) になっています

このとき暗号化するファイルに確か Fonts のフォルダは含まれません
ゲームを配布するときフォントが再配布される形になってしまいます
フォントの規約によって再配布はだめとか言うのもあります
他の素材サイトでもこういった利用規約はよくみますね
自分はゲームの内容を変えたりしたいし勉強のためにデータベースを見たいです
だからゲームを公開するときには暗号化をできるだけしたくありません
なのでスクリプトはできる限り自分で作っています

本当はウィンドウの素材は他人ので再配布を禁止されているので
頑張って作ったり他の人のを使うべきですけど今はこれにしてます
Creava’s Nest
スタイリッシュな感じのやつにしたい
プチレアさんのスクリプトも使用していますが再配布の許可がでていたはずです
サポートがされていないだけです。(違ったら教えて)

他には エセフルスクリーン というスクリプトも使う予定です
年取るとだんだん小さい画面でゲームするのって辛くて…
利用規約 には以下のように記載されています
>非暗号化プロジェクトでの配布の際は、素材の抜き取りを禁止する旨を明記してください。
自分が作ったスクリプトも再配布は自由です
だけど著作権?は放棄していませんという形にしています

とりあえずフォントはまだ調査中なので結果が分かり次第、報告します
(2019/10/22)まだよくわかってないけれどヒントを見つけた
ウィンドウ&UIパーツ素材セット2 [Krachware] | DLsite 同人
これを自分は購入しました。作れないからね
他にも色々あるみたいで余裕があれば買ってみようと思う
でもツクールには雰囲気にあってない感じがする

readme にこんな文章を見つけたので引用します
> <謝辞>
> SIL Open Font Licenseに従い以下のフォントを素材に使用しております。
> ・【kawoszeh】
> またサンプルを制作するにあたって以下のフォントをお借りいたしました。
> ・【やさしさゴシックボールド】フォントな様 http://www.fontna.com/
> ※サンプル起動前に上記フォントのインストールを推奨しております。

SIL Open Font License は源角ゴシックと同じやつだ

(2019/10/25)
>ソフトでは表示フォントに「源真ゴシック」(http://jikasei.me/font/genshin/) を使用しています。
>censed under SIL Open Font License 1.1 (http://scripts.sil.org/OFL)
> 2015 自家製フォント工房, © 2014, 2015 Adobe Systems Incorporated, © 2015 M+
FONTS PROJECT

なんかあった。決まったフォーマットとかはないみたいです
下3行くらいがよくわからない。でも adobe は必要な気がする

>フォント (そのまま、もしくは改変した派生版) を再配布する場合、もとの著作権を引継ぎ、さらに、著作権表示と、ライセンスの明示が必要です。

著作権?ライセンス?(SIL Open Font License これがライセンス?)
著作権はのとさん?



今はシステムウィンドウを頑張って作っているけど駄目だ
win10 のインターフェースをパクろうと思う
残骸をおいておくので好きに使ってください

こんな感じにしました

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

まるちゃん 2019/10/17 17:50

ツクールの戦闘不能について

召喚魔法を作りネクロマンサーという職業でアンデットを召喚しようと思いました
しかし、召喚魔法はとても難しかったので断念しました
召喚魔法とはパーティーの中に新たなアクターを加入させるということです
難しかった理由は2つあります

1つめの理由は戦闘メンバーの人数を変えずに作ることが難しかった
僕はスクリプトを作るとき今製作中のゲームだけではなくて
将来作るゲームのためにも汎用性をもたせて作っています
なので戦闘メンバーの数を変えずに作るというルールは曲げたくありませんでした
もし、戦闘中にメンバーを入れ替えるという要素があったとき
召喚魔法を使い戦闘メンバー数を増やして次のターンに移ったとき
召喚したメンバーを控えに入れて新たなメンバーを入れます
このターンも召喚魔法を使い同じことをすれば
全メンバーを戦闘にだすことが可能になります
アクターに召喚されたという記号をつけて人数の数え方を変えるやり方もあります
それでも良かったのかなぁ…

2つ目の理由は召喚する数は1体とは限らないということです
もし召喚魔法を使えるメンバーが2人いて同じ呪文を使ったとき
片方の魔法は成功して、もう片方は失敗するというのは嫌です
同じアクターはパーティーに加入できません
ラルフをパーティーに加入してもう1回ラルフを加入はできません
このラルフはアクター ID が同じなので区別ができないからです
また戦闘中に2回目の召喚魔法が使えないという事態も考えられます
index によって戦闘中は変化させるからいいのかなぁと思いもしましたが
やっぱり不安要素だったのでやめました
スクリプトとしてアクターを複製させたのですがうまくいきませんでした

大きな理由はこの2つです
他の人のスクリプトで召喚魔法ができるかと思ったのですが
やっぱり皆さん苦労しているのか自分は探し出すことができませんでした
なので以下のスキルを作成してネクロマンサーらしくしました
敵全体の戦闘不能なメンバーを復活させ混乱状態にする
スキルの使用条件.txt スキル追加評価.txt のスクリプトを使用します

使用条件:<Condition !$game_troop.dead_members.empty?>
追加評価:<Eval @result.success = true>(やっぱり Eval にした)
使用効果でコモンイベントの呼び出しを行います
最初は追加評価に関数を作ってたのですが対象が戦闘不能な敵全体という
少し特殊な感じだったのでうまくできませんでした

コモンイベントの内容がスクリプトで以下の通り
`
$game_troop.dead_members.each do |enemy|

next if enemy.state?(61)
enemy.hp = 1
enemy.add_state(61)
enemy.hp -= 1

end
`

61 はアンデットとして扱うためのステートです内容は以下の通り
・行動成約が味方を攻撃する
・戦闘不能が無効
・狙われ率が0%
・回復効果率が0%
・物理ダメージ、魔法ダメージがともに0%

enemy.hp -=1 は enemy.die では思った通りの動作が得られませんでした
die をすると clear_states で付加したステートを解除してしまいした
(@states = [] なので無条件で解除)
こうすることでHPは0なのに戦闘不能ではないとなります

これをすると面倒なのが全滅条件が変更してしまうことです
全滅条件は alive_members.empty? となっていて
アンデット(戦闘不能が無効となっているバトラー)は生者として数えられます
残りがアンデットなのに戦闘が終わらないということがあったので
それは面倒なので少し全滅条件を変更しました

全滅条件変更.txt (1.87kB)

ダウンロード

ちょっと挙動がまだ怪しいのでアップローダーではなく一時的に

このとき戦闘不能と戦闘不能が無効(アンデット)との違いについて考えました
アンデットは生きているのか?
alive? の関数があってこれはバトラーが生きているのか判定をします
もちろん false なんですけど true じゃないと行動してくれません
なので生きている判定です
dead? の関数もあります。バトラーが死んでいるかを判定します
死んでるのですけど戦闘不能が無効なので true 判定にします
(今 dead? 関数を変更したところこれで問題なかった。
だけど敵HP表示がされなくておかしなことになっている)
ツクールだとアンデットとは生きていて、かつ死んでいる謎の生物です

ツクールではボスにはステート有効度:[戦闘不能] * 0%をつけると思います
あれ?これはステート無効化:[戦闘不能]と、どう違うのだろうと思いました
スキルとして戦闘不能を付加するときに有効度を0%にする
でも戦闘不能が無効だとHPが0になっても行動してしまう
似ているようでなんか違くて面白なぁと思いました

すげーしょうもないことを今まで考えていたなぁと記事を書いていて思いました
とりあえず、これでスキルは完成(まだ少し残ってるけど)といっていい!
コストを考えていなかった
でもこのスキルを複雑なスクリプトを使うことなくシンプルに作れたので
すげーなぁと思って記事を書きました
でも、しょーもなかったなぁ…

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

まるちゃん 2019/10/15 16:18

ツクールにおける召喚魔法の作成について(敵の数を増やすスクリプトは暫定でおいておきます)

(2019/10/17)諦めました!
こういうスキルを作ることにしました
敵全体の戦闘不能なメンバーを対象にする
それらを復活させてアンデットとする
アンデットは味方をランダムに攻撃する
新しい記事でこれを少しまとめたい


いくつかやるべきことを決めよう
・敵のHP表示の調整(新たに作るかも?)
・召喚魔法の作成
・スキルのアニメーション設定
・敵のステータスの決定(遊びながら作る)
・敵の経験値とゴールドの設定(わからん)
・魔法の装備(遊びながら作る)
・装飾品の作成(これはすぐ作るべき)
・アーティファクトの作成(ダンジョン制覇記念)

アーティファクトについて
ドラクエの賢者の石みたいなすごくいい感じのアイテムだったり
持っているだけでつよつよな感じのやつがほしい
ドロップは固定にするかランダムにするか悩む

変数に最大出現数を設定してモンスターの数を増やします
増やし方は敵グループに設定しているモンスターを適当に

モンスター出現数.txt (2.50kB)

ダウンロード

召喚魔法について悩んでいます。やっぱりほしい
今回のゲームではパーティーの人数は控えを入れないで4人と決めています
しかし、召喚魔法をつくるということはパーティーに1人ついかすることになります
僕はスクリプトを作るとき他のゲームでも使えるように考えながら作成します
そのため今回のゲームではパーティー人数を考慮しなくてよくても
他のゲームで作るとき使用する可能性があるので無視して作りたくありません

戦闘に参加するメンバー数が変化すると起こる問題は
召喚魔法を使用したあとにメンバーの入れ替えをすることで
規定以上のメンバーを無理やり参加させることが可能になることです

そしてもう1つ作るルールとしてはHPをもたないということ
~~タッツウ召喚という特技がテリーのワンダーランドでありました
やっぱりこれもHPを持ちません~~
HPを持つということはステータスとして表示する必要があり
プレイヤーは召喚した対象も死なないように回復魔法をかけると考えます
召喚魔法はバフが乗るものとして考えたほうが面白いのです
Game_Battler をスーパークラスにもつオブジェクトであるべきです
さらに行動順序の決定には俊敏性の情報が必要です
テリワンではタッツウが行動する順番はいつも最後に行われていました

これを許すことができれば楽に作れると思います
ターン終了時に発動する自動スキルを習得するステートを作成すればいいのです
このスキルはコモンイベントを呼び出して擬似的な行動を作成すればよいのです
このとき問題としては複数召喚することができないということです
やっぱりTPをいい感じに増やして複数体召喚できたほうが強くて面白いです

コモンイベントでアクターを追加すればいいと考える人もいます
しかしアクターは区別することができません(たしか)
もし召喚魔法を扱えるアクターが複数いたときバグとなります
冥界にいるアンデットナイトは1人だけだから1体しか召喚できない設定にして
バグではないと主張することはできます
もちろん回避手段として全員召喚魔法が使えたと仮定して
4体分の召喚対象を作ることで回避することはできます
しかし、このやり方だと最大で4体しか召喚できません
いっぱい作っておけば大丈夫だろうという安易な考えに流れてもいいかもしれません
36人召喚対象を作っておいたけれど
意地悪な人がいて37人目の召喚ができませんとか言われるかも?

なんとなくだけど取っ掛かりが見えました
パーティーメンバーは4人しかいないけれど
戦闘に参加できる最大メンバーを8人と決めます
そうして召喚対象は戦闘メンバーとして加算することにします
召喚対象は最大で7体つくれば問題がおきない

でも召喚魔法の魅力は戦闘メンバーを増やせるところにある気がします
これを許せるかどうかが今後の鍵だと思います

【しょうかん】 - ドラゴンクエスト大辞典を作ろうぜ!!第三版 Wiki*
パーティとは別グループとして管理されるらしい
(ドラクエの召喚はHPを持つみたいです)
$game_party と $game_troop があるけれど新たなクラスをつくればいい?
行動決定のときや味方全体、敵全体が対象のときはどうする?
バフだけを受け付けるとかだと面倒だ。一切受け付けないほうが楽
BattleManager の make_action_orders で行動順を決定する

Game_Party に @summons というインスタンス変数を作ることにしました
members のときに @summons を追加することで
戦闘参加人数を変化させることなく召喚魔法を作れます
Game_Party に target_actor という関数があり謎です
これは戦闘中に使用しないで MenuActor で使うみたいなので大丈夫だと思う
うまく仲間に加えることができませんでした

諦めて戦闘メンバーを拡張してコピーを追加する形にしました
`
class Game_Actors
def summon(actor_id)

@data[@data.size + 1] ||= Game_Actor.new(actor_id)

end
end
`
`
class Game_Party
def summon(actor_id)

battler = $game_actors.summon(actor_id)
@actors.push(battler)
$game_player.refresh
$game_map.need_refresh = true

end
end
`

convert Game_Actor into Integer のエラーを吐いてだめでした
戦闘上限を8にして7人のメンバーを作るのは嫌だ
スキルがパワーアップして弱くなるけど2人召喚とかしたい
そうしたら7人加えて、さらに挑発が使えるのも入れたいとかなると
21体のアクターを作るっていうのがかっこ悪い

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

まるちゃん 2019/10/13 20:02

モンスターの配置座標について(今は装飾品を考えてスキルを実装中)

ランダムな対象の修正.txt (ランダムな対象の修正.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
VXace のデフォルトでは効果範囲をランダムな対象としたときに不具合があります
(僕にとっては不具合で修正するべきものだと思いました)
ランダムな対象のターゲットを作成するときダメージを与える前に
すべての対象を選択してしまうために対象が攻撃で死んでしまうと
ランダムな敵3体に攻撃だったのに2体にしか攻撃しないという事態が起こります
このスクリプトはこれを修正します

今は敵を最大で16体出そうと思ってスクリプトを考えています
モンスターを再配置する.txt (モンスターを再配置する.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
このスクリプトはデフォルトと同じ座標を取るようになっています
今回はこれを利用して16体の座標をなんとか出力しようと思って考えています
だけど上手くいかなくてどうしようかなぁと思ったので
どうやって出力しているのかまとめようと思いました

VX の敵座標は中心座標を 272 px として敵が5体までのときは
敵と敵との間を 100 px にすることで均等になるように配置しました
敵が6体以上のときは index が 0 のモンスターの X 座標を 50 として
最後の敵の座標を 544 - 50 とすることで均等に分配をしていました

今回は16体を想定しているので2列に分けて作成する予定です
VX の座標を利用して上の列は下の列の間に入れるのでありかなぁ?
でも10体といった偶数になると最後の1体が間に入れる事ができません
下の列を6体として左に詰めて5体、上の列は右に詰めて5体にする
これがすごい面倒だ

VXace ではモンスターの画像の幅を取得することで
モンスターとモンスターの幅が変わります
VX は均等に分けると説明しましたが詳しく言うと
(544 - 50 - 50) / 敵の総数 としたときの数値を間の大きさにしました
VX のほうがわかりやすいのかな?


VXace の敵の配置座標は以前につくったので整理したい
基本幅 = 敵の画像の幅 / 2 + 8
合計幅 = 基本幅 * 2の合計 - 画面の幅
調整幅 = 合計幅 / (モンスターの総数 - 1)

合計幅は 基本幅 * 2の合計 > 画面の幅 のときのみ算出します

index 0 のときのモンスターの X 座標を求めます
調整幅を持つときは index 0 のモンスターの基本幅を X 座標とします
調整幅をもたないとき(基本幅 *2 の合計が画面の幅より小さい時)は
index 0 の X 座標 = index 0 の基本幅 + 合計幅 / 2

index 0 以降のモンスターの X 座標は以下のように算出します
X 座標 = 左隣の X 座標 + (左隣の基本幅 + 自身の基本幅 - 調整幅)


これを利用して2列のモンスター配置を考えると
画面の幅を2列めは 416 (適当に決めた)にして考えれば良さそう?
モンスターの総数は列の総数と考えるべきでしょう
基本幅に 416/544 倍率として考えればいけるかも?
だけど10体といった偶数となったとき列はひし形の形を取ります
下の列の一番右と上の列の一番左が空白となる
でもモンスター画像の幅から算出しているのを考えると少しずらすというのが難しい
それだったら VX のようにモンスターの画像の幅に影響を受けない形がよさそうだ


VX の敵配置の座標
1体 272
2体 222, 322
3体 172, 272, 372
4体 122, 222, 322, 422
5体 72, 172, 272, 372, 472
6体 50, 139, 228, 317, 406, 495
7体 50, 124, 198, 272, 346, 420, 494
8体 50, 114, 178, 242, 306, 370, 434, 498

敵が5体以下のとき
X 座標 = 272 + ( enemy.index * 2 - @enemies.size + 1) * 50
272 は Graphics.width / 2 という意味です。画面の中心座標です

敵が6体以上のとき
X 座標 = 50 + enemy.index * 444 / ( @enemies.size - 1 )
444 は 544 - 50 - 50

敵が10体のときはこうする
上の列:95, 184, 273, 362, 451
下の列:50, 139, 228, 317, 406(, 495)

上の列の X 座標
(50 + 139) / 2 = 94.5
(139 + 228) / 2 = 183.5
(228 + 317) / 2 = 272.5
(317 + 406) / 2 = 361.5
(406 + 495) / 2 = 450.5

多分これが一番やりやすいんじゃないのかなぁ…
でも6体目以降の座標の幅がきれいじゃなくて好きじゃない

数字的な綺麗さを追い求めるのをやめました
座標では小数点を表示しきれないからいい感じにしたかったの
でもそれほど悪くなかったから諦める
モンスター同士の間を以下のように求めました
width = [(Graphics.width / 2 - 50) / (@enemies.size - 1), 50].min
-50 は index 0 の X 座標を 50 と考えているからです
X座標 = Graphics.width / 2 + (index * 2 - @enemies.size + 1) * width
Y座標 = 288 - 32 * (index % (@enemies.size / 8 + 1))

モンスターの最大出現数は1種類に付き26です(アルファベットがつくから)
面倒だから最大出現数を24にしてしまいました

HPゲージはプチレアサイトのやつを使っているのでちょっと変になってます
enemy.screen_y を参照すればいいだけなのでそう難しくありません
意外と面倒そうだ。Sprite で管理をしている

Win + Shift + S キーでスクリーンショットができるみたいだ(Win10)
Alt + Print Screen でツイッターとかで貼り付けすると簡単にできる

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

« 1 2

月別アーカイブ

限定特典から探す

記事を検索