独学ツクールブログ

ツクールでのオリジナル作品の話を中心に創作関係の徒然な語り。

[ - ] スポンサーサイト

一定期間更新がないため広告を表示しています

| 2018.05.23 Wednesday | - | - |

[ RGSS奮闘記 ] 真・プリセットスクリプトフルグレードアップ計画7:Kernelヤバい

当初の予定を変更して、今回はKernelモジュールを。
あまり大きなことではないんだがまあ重要性はあるので。

続きを読む >>

| 2015.02.26 Thursday 22:23 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] 真・プリセットスクリプトフルグレードアップ計画1:相変わらず舌の根が乾かない人

ということで、リベンジである。
「真・プリセットスクリプトフルグレードアップ計画」と題し、XPのプリセットのアレな部分を改善していく。
少なくとも、VXやAceくらいまではきれいなコードにしたい。

まずは、下準備的なコードを書いていこう。
前から何度もネタにしているObject#tapやSymbol#to_procの定義をはじめ、組み込みクラスのメソッドの一部再定義などである。
最初にとりあえずSymbol#to_proc。これがないといろいろはじまらない。
class Symbol
  def to_proc
    Proc.new { |obj, *args| obj.send(self, *args) }
  end
end
続いて、Objectクラスだが、tapメソッドを定義するだけでなくいろいろといじる。
class Object
  undef id if respond_to?(:id)
  def tap
    yield(self)
    self
  end
  def try(*a, &b)
    if a.empty? && block_given?
      yield self
    else
      public_send(*a, &b) if respond_to?(a.first)
    end
  end
end
Object#idを削除。これはnil.idが4を返すことによる。 RGSS内ではよくいろいろなIDを利用するが、nil.idが4となることで、本来ならエラーになってほしい処理を通ってしまい、バグが見つけにくくなるおそれがある。また、このメソッドを削除しても、同じ意味のObject#object_idがあるから問題ない。
tapは先日の説明の通りなので説明は省略。
さて、今回新しく出てきたtryメソッド。これは単純に言えば「メソッドがあれば実行」するためのものである。詳しいところはググればいくらでも出てくるのではしょるが、つまり
name = user ? user.name : "名無し"
name = user.try(:name) || "名無し"
となっるくらいすっきりする話だ。

次回は再定義いろいろ。


タグ:[RGSS] [フルグレードアップ計画]

| 2015.02.18 Wednesday 22:43 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記115:プリセットスクリプトフルグレードアップ計画10

あまりゆっくりできないのでリファクタリングだけする。
今日は
Game_Character
のみ。
とはいえ3セクションなのでそれなりの量だ。
それにしても……端から端まで精査したわけではないが、どう見てもいろいろと無駄そうな構造だ。
引数の正負とかでもっとぱぱっとできそうなもんだが、なんでしないんだろう?
ここもVXAceのスクリプトをじっくり見なきゃダメだな。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2012.05.09 Wednesday 23:11 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記114:プリセットスクリプトフルグレードアップ計画9

引き続きリファクタリングの日。

今日は
Game_Map
Game_CommonEvent
を終えた。


既存のハッシュをもとに新しいハッシュを作るのってどういう書き方がいいんだろうか。
面倒なので今はまだ2段階で書いている。本当は空ハッシュ作成なんてやりたかないんだが。

茂みとかカウンターなんかの判定は、ビット値を引数に共通メソッド化するのがいいだろうな。
とりあえず今はクラス構成はいじらないことにしているのでそのまま。

それにしてもforの多さには毎度呆れる。

Game_CommonEventはなんでいちいち$data_common_eventsから取ってきてるんだろう。インスタンス変数じゃダメなんだろうか。全文検索しても、ダメな理由が見当たらない。ここも大幅変更対象だな。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2012.05.06 Sunday 22:21 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記113:プリセットスクリプトフルグレードアップ計画8

忘れてたわけじゃない。時間の配分が下手なだけなんだ(挨拶)。

ということで今日は
Game_Party
Game_Troop
のリファクタリング。
初めて両クラスのメソッドをじっくり見た(笑)こりゃたしかにスーパークラス必要だわ。やっぱり本格的に書き直す際にはVXAceのスクリプトを参考にしなきゃだな。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2012.05.05 Saturday 19:18 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記108:プリセットスクリプトフルグレードアップ計画7

引き続きプリセットの直しを。
今日は
Game_Actor
Game_Enemy
Game_Actors
を。
やってて思ったのが、Game_Enemy#base_xxxはインスタンス変数じゃだめなのかということ。メソッドが定義してあるが$data_enemiesからの読出しでしかないのでinitializeでインスタンス変数に入れてattr_readerでもいいと思うんだが。まあそれはおいおい。
それにしてもGame_ActorとGame_Enemyの処理のややこしさと言ったら……正直、意味が変わらないまま記述を簡略化する方法を考えている時間が一番長かったように思う。しかも充分とは言えないままに終了。今回はプリセットにないもの、つまりSymbol#to_procなどを入れずまずは既存の処理の内容だけをいじるようにしているので、いまいち簡略化されたとは言い難い状態だが、それは後日やることにした。というかまあ今回は初めからそういう計画なので。

それにしてもまだまだ先が長い。Game_CharacterとかScene_Battleとか大丈夫なのか今から不安だったりする。
あまりこっちにはまりすぎてもよくないとは思いつつ……半端なのもまたいけないのでついつい進めているが、こんなんで制作大丈夫なんだろうかorz


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2012.04.14 Saturday 22:26 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記107:プリセットスクリプトフルグレードアップ計画6

昨日に引き続き「やり直し版」作業。

今日は
Game_Screen
Game_Picture
Game_Battler 1
Game_Battler 2
Game_Battler 3
Game_BattleAction
を修正。
empty?メソッド使ってないとかEnumerator使ってないとかnilと比較とかそういうグズグズな部分が多かった。
本っっ当にプリセットの作者はRubyを知らんな。いやそれでも書けてしまうRubyがすごいんだけども。


明日あたり一回インターバルを挟む予感。というか久々にクアドラに触りたい。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2012.04.13 Friday 22:40 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記106:プリセットスクリプトフルグレードアップ計画5

一番いけないのは最近「奮闘」ってほど学習のほうに力を入れてないことだと思うんだ。
いやほら、Rubyの知識がついてくるとなかなか……ねえ。

ということで。
フルグレードアップ計画のやり直し版開始。
やり直し版というのはつまり一から仕切り直しということで(笑)
んで実際何をやっているのかというと、独自モジュールなどはおいておいてリファクタリングを先決にすることにした。それを全体に済ませてからやったほうが効率がいいんじゃないかと。っていまさら言うことではないが(笑)

今日は
Game_Temp
Game_System
Game_Switches
Game_Variables
Game_SelfSwitches
について作業完了。まあこの辺は直しは少ないので。明日以降セクション数はぐっと減りそうだな。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2012.04.12 Thursday 21:21 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記95:プリセットスクリプトフルグレードアップ計画4

プログラムと言えばバグだよね。

ということでデバッグ用のスクリプトを組んでみた。
例外発生時にそれを拾ってスタックトレースを出力する。
SyntaxError以外ならたぶんどんなものでもいきなり終了はしないでログをはいてくれるはずだ。

御大層にもこのモジュールにRGSSという名前を付けてみた。そしてスクリプトの処理を開始させるのはこの中のstartメソッドに入れた。
というのは、「RGSS.startでゲーム開始」というのが何かそれっぽくてかっこいい気がしたから……というのは半分嘘で、こうして独自のクラスに入れてしまうことでいろいろな差異を吸収してしまえるから。実は、このRGSSモジュールは無駄にVXとVXAceに対応済みだったりする(いつ役に立つのかしらんが)。つまり初のVX(Ace)対応素材として公開できるんだよ!

(; ・`д・´) ナ、ナンダッテー !? (`・д´・ (`・д´・ ;)


以上です。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2012.02.16 Thursday 22:48 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記94:プリセットスクリプトフルグレードアップ計画3

ブログ書く暇があったらスクリプト書けってばっちゃがゆってた(挨拶)

ということでこの1か月の間にいろいろ進展。
ちょっと多いので簡単に。


作成済のもの



game_waitメソッド実装

Kernelモジュールにgame_waitメソッドを定義。これにより、いつでもどこでも任意のフレーム数だけウェイトをかけられる。

System.rxdataはやっぱり定数に

RPGモジュールで定数SYSTEM_DATAにSystem.rxdataをロードする。SoundおよびVocabではここからデータを呼ぶこことになる。

RPG::Systemクラスの定義拡張

attr_accessorしかなかったRPG::Systemに多数のクラスメソッドを定義。これを使用する設計に変更することで$data_systemを排除した。

SceneManagerクラスの定義

VXAceに存在するSceneManagerクラスを定義。メソッドや変数はXP用かつ自分が使いやすいよう変更。

組み込みクラス、組み込みモジュールの再定義

Input、Symbol、Color、Rect、Bitmap、Spriteをいろいろ拡張して再定義。

Window_Baseクラスの再定義

Window_Baseの各メソッドや変数を、拡張したColorクラスを使うなどいろいろ再定義。


作成中のもの



Databaseクラス

VXAceのDataManagerクラスを参考に、ゲームオブジェクトを管理するクラスを作成。もちろん、ここに入れることでグローバル変数をなくすのが狙い。

Scene_Baseクラス

VX以降に存在するベースクラスの作成。XPのプリセットや自作シーンクラスに適用させるための修正中。




ということでまあ相変わらずの無謀編なわけだが、こっちは期限も無い(一応LOST組み込み前提ではある)のでまあ何とかなるだろう。まずは時間がどんなにかかってでも一つ作り上げる。期限云々はそれができてからだろう。

ちなみに、当然このネタでの次の更新は未定である。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2012.01.30 Monday 21:29 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記89:プリセットスクリプトフルグレードアップ計画2

続いてSoundモジュールを自作してみる。
Vocabと同様、System.rxdataを読み込み、各メソッドではそこから呼び出すことでグローバル変数の使用を回避。
したのだが……
書き上げてから気づいた。これじゃSystem.rxdataをVocabと2回読み込んでるじゃないかorz
これではモジュールを作ったりグローバル変数を回避したりした価値が半減か無駄になる。

ということで対策開始。
まずはモジュールのネスト。
module RPG
  @data = = load_data("Data/System.rxdata")
module Vocab
module Sound
end

こういう構成である。
しかし、これでは@dataのスコープが内側のモジュールに達しないため無効。

続いて、VocabとSoundをクラスに。
module RPG
  @data = = load_data("Data/System.rxdata")
class Vocab
class Sound
end

これも同様。というか、クラスにしたくないのでそもそも対象外。

最後に定数。
module RPG
  DATA = = load_data("Data/System.rxdata")
module Vocab
module Sound
end

この場合はDATAを参照できる。定数だけはスコープが違う模様。


とはいえこれは定数を使うような場所じゃないだろう……
ということでこの点はいったん封印。モジュール自体は出来上がっているので、対策はまたこれから別に考えていこうと思う。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2011.12.23 Friday 23:08 | comments(0) | trackbacks(0) |

[ RGSS奮闘記 ] RGSS奮闘記88:プリセットスクリプトフルグレードアップ計画1

半ばやっつけに近いが、まずはVXとVXAceのプリセットを参考にVocabモジュールを作ってみた。
定義時に一度だけSystem.rxdataを読み込み、あとは定数に値を入れるだけである。ほかに、バトル時の「戦う」「逃げる」なども入れてみた。
これがどうメリットがあるかと言えば、ずばりにっくきグローバル変数である。このモジュールを使用することにより、$data_system.wordsを使用する必要がなくなったわけである。つまり、この調子で「改善」スクリプトを作ってしまえば、いずれはグローバル変数の完全排除も夢ではない……かも?
ちなみに、今回は一番作りやすそうに違いないVocabモジュールの新規作成だから1日で終わったが、今後はどうなるか分からない……まあ、相変わらず気長にやるつもりだ。
一応、クアドラやLOSTへの組み込みを目指しているので、早めにまとめてしまいたいところではあるが。


タグ:[Ruby] [RGSS] [フルグレードアップ計画]

| 2011.12.22 Thursday 22:52 | comments(0) | trackbacks(0) |

このページの先頭へ▲

Twitter

WebClap

Blogram

ブログランキングならblogram

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>

categories

archives

Amazon

selected entries

recent comment

recent trackback

recent ranking

links

search this site.

sponsored links

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM