忍者ブログ
はじかきれんしゅうちょう いろいろ
Admin  +   Write
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

タイトルの通りです(マニュアルを見ろよ私は)
↓ここにありました
http://www.windproject.sakura.ne.jp/renpy/wiki/index.php?title=%E7%AB%8B%E3%81%A1%E7%B5%B5%E3%81%AE%E8%A1%A8%E6%83%85%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B

イメージタグというものを使うよう。
でも疑問なんですが差分(使うやつを指定してあるやつはどうなるの……?
image aa0 = im.Composite(~
↑(こういうのの呼び出し)できるのかな、多分できるよね?

※実践はまた今度にするので今回はメモです。確定するまで線引いときます


【仮】
 # キャラクター e にイメージタグ aa を関連づける
    define e = Character("キャラe", image="aa") #名前がe(表示はキャラe)、イメージタグaa

  image aa 0 = #右辺をim.Compositeで指定?
  image aa 1 = #右辺をim.Compositeで指定?

label start:
    show aa 0
    e  aa 0"「こんにちは!」"
 
    # 立ち絵を切り替える
    e aa 1 "「……」"

#予想なんですけど、0とか1とかだとちょっとなにか他の呼び出しとかぶちゃって難しそう。
face→f001とかになるかなあ。
PR
◇またもほぼ自分用に

script.rpyのデフォの説明文はもういらないかなって人向け
以下の内容に変えとくとすっきりスタートでき必要なときはコピペしに戻れる……
ような気が?
※キャラ名のカラーコードはメッセージボックスが黒の場合が想定されているので適宜変えてね
※スクリプトはファイルがないとエラーになると思うのでコメントアウトされています。
 →だいたいゲタが2個のとこを消すと有効になるはず

# このファイルにはゲームのスクリプトを記述します。
#①キャラ名設定
define w = Character('キャラ名1', color="#d7b6e9")
define k = Character('キャラ名2', color="#c8ffc8")
define m = Character('キャラ名3', color="#c8c8ff")
#→名前テキスト(ネームプレート)が指定した色になり、キャラ名nと表示される
#②立ち絵スムーズ表示スクリプト
transform smooth:
    on show:
        alpha 0.0
        linear 0.5 alpha 1.0
    on hide:
        alpha 1.0
        linear 0.5 alpha 0.0
#→出る時、消える時のトランジションです。
#(何を指定してるのかよくわからない のはナイショ)
#③場所指定(瞬間移動)        
transform left2:
    xpos 0.1
#→立ち絵の座標ポジションを増やしています。at 〇〇みたいな風に使います。
#→(例ではat left2)
##<スクリプト>
##label start:
#任意の名前 label 〇〇
##label barashi:
#背景表示(scene 〇〇) 
##    scene black
#背景表示(真っ黒にしてからbg3をフェードで入れる)
##    scene black
##    with dissolve  
     
##    scene bg03
##    with fade 
#音楽(例だと、フォルダはgame/bgmの中)
##BGM(自動でループ)流す
##    play music "bgm/wind.ogg" 
##BGM止める
##    stop music fadeout 3.0
##SE(一回流れるだけ)
##    play sound "bgm/se3.ogg" 
#立ち絵表示(aa1として登録している場合) ※変わるときも同じ(本当か?)
 #at top=座標は上からポジショニングで、,smooth=②立ち絵スムーズスクリプトによる。)
##    show aa1 at top, smooth
##立ち絵消す(表情変化でこの場面中にaa1とaa3を使用したと仮定)
##l    hide aa1
##l    hide aa3 at top, smooth
#テキスト
##    k "かしこまりました。少々お待ちください。"
#ルビ(※screen.rpyにいくらか式を記述しておく必要があります。後述)
##    w "{rb}支配人{/rb}{rt}オーナー{/rt}を呼んでくれるかしら。"
#終わる時→return でゲームを終了します。
##   return
label start:
#    scene bg room
#    with dissolve
#    play music "<silence .5>"
    # 以下は台詞を表示します。
    w "Ren'Py の新しいゲームを作成しました。"
    w "ストーリー、画像、音楽を追加すれば、世界にリリースすることができます!"
    # return でゲームを終了します。
    return

【おまけ】なお、セリフ一行にどこまで入るかの確認用

##     "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやいゆえよわをん1234567890あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやいゆえ"
◆完全に自分用な気がしないでもないですが
一回作ったプロジェクトを元に、次のプロジェクトを作るとき
一部引き継いで便利にするための内容です。
(おそらく行数とか文字の大きさとか同じ感じで行くので)

そもそもデフォルトからいじったとこをもっとわかりやすく
メモっとけばこんなこと書く必要なかったんですが! 
昔の自分の残念さを嘆いてもしょうがないので今メモします。

読む人におかれましては、デフォからここをいじれば
このゲームになるよみたいなご参考に。(いや宣伝じゃないよ
っていうかこんな人を選びかねない例で例にするなよ私)

◆カラーテーマについて
新規作成するときカラーテーマとか設定するんですけど、
あれは画像ファイルで生成されるので変えたい人は差し替えてねって感じでしょうね。
流石にカラーコードぶっこめばUIが全部いい感じに変わってくれるとかではないみたい。


◇script.rpy
→初期設定ではないけど、よく使うスクリプトをメモっとこうの巻。
<設定系>おそらくこのファイル以外のとこに書いても
#①キャラ名設定
define w = Character('キャラ名1', color="#d7b6e9")
define k = Character('キャラ名2', color="#c8ffc8")
define m = Character('キャラ名3', color="#c8c8ff")
#→名前テキスト(ネームプレート)が指定した色になり、キャラ名nと表示される

#②立ち絵スムーズ表示スクリプト
transform smooth:
    on show:
        alpha 0.0
        linear 0.5 alpha 1.0
    on hide:
        alpha 1.0
        linear 0.5 alpha 0.0
#→出る時、消える時のトランジションです。
#(何を指定してるのかよくわからない のはナイショ)
#③場所指定(瞬間移動)        
transform left2:
    xpos 0.1
#→立ち絵の座標ポジションを増やしています。at 〇〇みたいな風に使います。
#→(例ではat left2)


<スクリプト>
label start:
#任意の名前 label 〇〇
label barashi:


#背景表示(scene 〇〇) 
    scene black
#背景表示(真っ黒にしてからbg3をフェードで入れる)
    scene black
    with dissolve  
     
    scene bg03
    with fade 

#音楽(例だと、フォルダはgame/bgmの中)
##BGM(自動でループ)流す
    play music "bgm/wind.ogg"
##BGM止める
    stop music fadeout 3.0
##SE(一回流れるだけ)
    play sound "bgm/se3.ogg" 

#立ち絵表示(aa1として登録している場合) ※変わるときも同じ(本当か?)
 #at top=座標は上からポジショニングで、,smooth=②立ち絵スムーズスクリプトによる。)
    show aa1 at top, smooth
##立ち絵消す(表情変化でこの場面中にaa1とaa3を使用したと仮定)
    hide aa1
    hide aa3 at top, smooth

#テキスト
##セリフ(①のdefine ◯ ←ここに入れたやつで、◯"ここにセリフ" ←こんなかんじ)
##ネームプレートなしもできます。
    k "かしこまりました。少々お待ちください。"
##ルビ(※screen.rpyにいくらか式を記述しておく必要があります。後述)
    w "{rb}支配人{/rb}{rt}オーナー{/rt}を呼んでくれるかしら。"

#終わる時→return でゲームを終了します。
    return


◇gui.rpy

・カラー→最初で選んだインターフェースの色設定をここで細かくカスタムできる様子
以下今回いじったところのメモ。

## 一般的な台詞のテキストサイズ。
define gui.text_size = 20 #元は19
## インターフェースのテキストサイズ。
define gui.interface_text_size = 20 #元は19

## メインメニューとゲームメニューの背景画像。
define gui.main_menu_background = "images/bg/bg01.jpg"
#デフォはguiフォルダに入ってる画像をタイトル画像に指定していますが、
#なんか一枚絵のイメージで背景の一環で管理したかったので場所を変えています。

## テキストボックスに対する、台詞の位置。左上からのピクセル数で指定するか 0.0 か
## ら 1.0 までの小数で指定します。 0.5 だと中央に表示。
define gui.dialogue_xpos = 224
define gui.dialogue_ypos = 30  #デフォルトは42。

## ボタンのボーダーのサイズ。左、上、右、下の順で指定します。ボタンのサイズは、
## その中のテキストやオブジェクトのサイズから更にボーダー分拡張したサイズになり
## ます。
define gui.button_borders = Borders(6, 6, 6, 6) #デフォルトは全部4


◇option.rpy


#すごい上の方
define config.name = _("レイクサイド~")  #ゲームの名前を入れます

## About(バージョン情報)スクリーンに表示されるテキスト。
#別になくてもいいと思いますけど~
define gui.about = _p("""制作:くまのこ道  
""")

## 実行ファイルやビルドされた配布物のディレクトリー名
define build.name = "lake" #ファイル名。半角だそうです

## 次の行をアンコメントしてオーディオファイルを指定すると~
define config.main_menu_music = "bgm/gngn00.ogg" 
#タイトル画面の音楽です。デフォルトはコメントアウトされています。

## ゲーム開始後でも "window show"、"window hide"、"window auto" ステートメントで
## 変更することができます。
define config.window = "auto"
##★多分場所はどこでもいいけどこの下に増やしてました。
#(原理不明、どこかの講座を見た)マウスロールで読み進められるようになります
init python:
    config.keymap['dismiss'].append('mousedown_5')
 
#セーブデフィレクトリ  ※デフォルトだと生きてる。コメントアウトしました
## この値は一般的に変更するべきでは~
##define config.save_directory = "sa-1540709957"


## アーカイブ(書庫化・暗号化)したいファイルは 'archive'(または任意の文字
 ## 列)に分類します。 ※パック時に暗号化されるファイルの種類を増やしています。
    build.classify('game/**.png', 'archive')
    build.classify('game/**.jpg', 'archive')
    build.classify('game/**.ogg', 'archive')
    build.classify('game/**.wav', 'archive')
    build.classify("game/**.rpy", "archive")
    build.classify("game/**.rpyc", "archive")
    build.classify("game/**.ttf", "archive")


◇screens.rpy

#多分場所はここでなくてもいいだろうけどこの辺の下に追加(★)ルビの指定
style frame:
    padding gui.frame_borders.padding
    background Frame("gui/frame.png", gui.frame_borders, tile=gui.frame_tile)
##★追加
init -2 python:
    style.ruby_text.size = 12 #文字を小さくする
    style.ruby_text.yoffset = -20 #20ピクセル上にずらして表示
    style.say_dialogue.line_leading = 12 #会話文の行間を12ピクセルに広げる 
    style.say_thought.line_leading = 12 #叙述文の行間を12ピクセルに広げる

## Quick Menu(クイックメニュー)スクリーン 
## クイックメニューはゲーム中に常時表示されるスクリーンで~
 
screen quick_menu():
    zorder 100
 
    if quick_menu:
 
        hbox:
            style_prefix "quick"
 
            xalign 0.5
            yalign 1.0
 
 
            textbutton _("save") action ShowMenu('save') text_size 18
            textbutton _("load") action ShowMenu('load') text_size 18
            textbutton _("auto") action Preference("auto-forward", "toggle") text_size 18
            textbutton _("skip") action Skip() alternate Skip(fast=True, confirm=True) text_size 18
            textbutton _("Q.S") action QuickSave() text_size 18
            textbutton _("Q.L") action QuickLoad() text_size 18
            textbutton _("log") action ShowMenu('history') text_size 18
            textbutton _("rollback") action Rollback() text_size 18
            textbutton _("option") action ShowMenu('preferences') text_size 18
        
#↑なんかこのあたりで確かメッセージウインドウメニューの
#ボタンの内容・順番を変えています。


## Navigation(ナビゲーション)スクリーン ####################################################
##↓このあたりで確かタイトルメニューとか右クリックメニューの名称を変えています。
screen navigation():
    vbox:
        style_prefix "navigation"
        xpos gui.navigation_xpos
        yalign 0.5
        spacing gui.navigation_spacing
        if main_menu:
            textbutton _("スタート") action Start()
        else:
            textbutton _("バックログ") action ShowMenu("history")
            textbutton _("セーブ") action ShowMenu("save")
        textbutton _("ロード") action ShowMenu("load")
        textbutton _("オプション") action ShowMenu("preferences")
        if _in_replay:
            textbutton _("回想終了") action EndReplay(confirm=True)
        elif not main_menu:
            textbutton _("タイトルへ") action MainMenu()
        textbutton _("バージョン情報") action ShowMenu("about")
        if renpy.variant("pc"):
            ## モバイルデバイスにはヘルプは不要であるか不適切です。
            textbutton _("操作説明") action ShowMenu("help")
            ## 終了ボタンは iOS では使えず Android では不要です。
            textbutton _("終了") action Quit(confirm=not main_menu)

## use ステートメント~
 ## ↓このへんでタイトル画面に「ゲーム名」「ver.〇〇」を文字で表示させている様子。
#タイトル画像にゲーム名が入っている場合は不要だと思うので消します。
#(例ではverの表示のみ残しています。)
    use navigation
    if gui.show_name:
        vbox:
##            text "[config.name!t]":
##                style "main_menu_title"
            text "[config.version]":
                style "main_menu_version"


## Preferences(環境設定)スクリーン 
##オプション画面です。↓のようにしていました
screen preferences():
    tag menu
    use game_menu(_("オプション"), scroll="viewport"):
        vbox:
            hbox:
                box_wrap True
                if renpy.variant("pc"):
                    vbox:
                        style_prefix "radio"
                        label _("ディスプレイ")
                        textbutton _("ウィンドウ") action Preference("display", "window")
                        textbutton _("フルスクリーン") action Preference("display", "fullscreen")
                vbox:
                    style_prefix "radio"
                    label _("ロールバック\nサイド")
                    textbutton _("無効") action Preference("rollback side", "disable")
                    textbutton _("レフト") action Preference("rollback side", "left")
                    textbutton _("ライト") action Preference("rollback side", "right")
                vbox:
                    style_prefix "check"
                    label _("スキップ")
                    textbutton _("未読テキストも\nスキップ") action Preference("skip", "toggle")
                    textbutton _("選択肢の後も\nスキップ継続") action Preference("after choices", "toggle")
                    textbutton _("トランジションを\n飛ばす") action InvertSelected(Preference("transitions", "toggle"))
                ## この場所に "radio_pref" または "check_pref" をスタイルに持つ
                ## vbox を追加して、開発者が定義した環境設定を増やすことができま
                ## す。
            null height (4 * gui.pref_spacing)
            hbox:
                style_prefix "slider"
                box_wrap True
                vbox:
                    label _("文字表示速度")
                    bar value Preference("text speed")
                    label _("オート待ち時間")
                    bar value Preference("auto-forward time")
                vbox:
                    if config.has_music:
                        label _("BGM音量")
                        hbox:
                            bar value Preference("music volume")
                    if config.has_sound:
                        label _("SE音量")
                        hbox:
                            bar value Preference("sound volume")
                            if config.sample_sound:
                                textbutton _("テスト") action Play("sound", config.sample_sound)
                    if config.has_voice:
                        label _("ボイスの音量")
                        hbox:
                            bar value Preference("voice volume")
                            if config.sample_voice:
                                textbutton _("テスト") action Play("voice", config.sample_voice)
                    if config.has_music or config.has_sound or config.has_voice:
                        null height gui.pref_spacing
                        textbutton _("全てミュート"):
                            action Preference("all mute", "toggle")
                            style "mute_all_button"


## History(履歴)スクリーン 
## このスクリーンは、ダイアローグヒストリー(台詞の履歴)を~
##馴染みがないのでヒストリー→バックログに変えてました。
screen history():
    tag menu
    predict False
    use game_menu(_("バックログ"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0):
#(中略)
        if not _history_list:
            label _("ログはありません。")

## Help(ヘルプ)スクリーン 
## キーやマウスの割り当てに関する情報を表示する~
## だんだん面倒になってきたので省く。ヘルプの文言を変えました。
    use game_menu(_("操作説明"), scroll="viewport"):
#→「ヘルプ」を「操作説明」に 等。

    hbox:
        label _("ホイール上回転")
        text _("前の台詞に戻る。")
    hbox:
        label _("ホイール下回転")
        text _("台詞を読み進める。")
#他、タブレット端末で操作しなそうならそのへんをカットするなどの対応です。
◆配布の流れ

・画像を圧縮する(外部ソフト使用等で)
「スクリプトチェック(Lint」を押す。
 →生成されたtxtを見て必要なところを直す、コメントアウトするなどしてつぶす

この下〇はもうやってあるなら飛ばしておっけーなやつ。
セーブディレクトリー(options.rpy)をコメントアウトします。
 (変なとこにセーブデータができてしまうので)

暗号化設定(options.rpy)→以下を記述。(拡張子は任意で足してね!)
 (デフォルトだとコメントアウトになってました)
 →これで「archieve」に暗号化されて何でもつっこまれるようにする。

「## ビルド設定」のこの部分です↓ 任意で足してね。
    ## アーカイブ(書庫化・暗号化)したいファイルは 'archive'(または任意の文字
    ## 列)に分類します。
    build.classify('game/**.png', 'archive')
    build.classify('game/**.jpg', 'archive')
    build.classify('game/**.jpeg', 'archive')
    build.classify('game/**.ogg', 'archive')
    build.classify('game/**.wav', 'archive')
    build.classify("game/**.rpy", "archive")
    build.classify("game/**.rpyc", "archive")
    build.classify("game/**.ttf", "archive")    
  で、この下によく見たら書いてあったんです。(2019/9/23追記)
 .txtを勝手にパックにインしてくれるって。
 つまりここで
・readme.txtを入れておく
 と、zipの中に入れてくれるんだ!いたりつくせりだね。
 gameフォルダのいっこ外に置くとexeファイルと同じ場所に入れてくれるみたい。
   
「配布物のビルド」を押す(生成ファイルはとりあえずデフォで)
・フォルダ内にzipができる()

▲一回解凍して中身ををテストプレイ
▲(もっかいZIPにするなら)セーブデータを消す:game>saves
・readmeを同梱して再ZIP化

これでいいはず(息切れ)

追記:256*256のPNGを用意して変換するなどして
・icon.ico
・icon.icns
のファイルを用意すると配布するゲームのアイコンにできる。
ファイルを置く場所はgameフォルダの一つ外(readmeと同じところ)
※立ち絵については・26 ☆立ち絵差分表示(決定版)
を見たほうがいいです
(この記事は過去にいろいろ試してたやつの名残なので)


そう、悩んでます(しょっぱな)

image aa0 = im.Composite(
    (380, 1228), #ベースになる画像の縦横サイズです
    (0, 20), "/aa/aa000.png", #身体パーツ
    (85, 40), "/aa/af000.png") #顔セットパーツ   
#       show aa1 at top, smooth//このセットがでますの式
image aa1 = im.Composite(
    (380, 1228), #ベースになる画像の縦横サイズです
    (0, 20), "/aa/aa000.png", #身体パーツ
    (85, 40), "/aa/af001.png") #顔セットパーツ   
#       show aa1 at top, smooth//このセットがでますの式
・・・

↑これらをずらっと指定したはいいけど、
show 〇〇 で画像表示すると、上書きされると思いきや
前の立ち絵情報が残ってるみたいなんですよね。(そういやそうか? 別の画像扱いだし)
差分だけどうにかする方法があるのかな?

<例>
show aa1 
セリフ「あああ」
show aa3
セリフ「勇者」
#ここで立ち絵が退場
・・・

てなってるとして、「あああ」の後にaa1の顔がaa3の顔に変わるわけです。
そこまではいいんだ。
で、「勇者」のあとに退場させようとしたとき

show aa1 
セリフ「あああ」
show aa3
セリフ「勇者」
#ここで立ち絵が退場
hide aa3
・・・

ってすると、aa1が残っちゃうのだ……

クイックマニュアルによると、「hideはあまりつかわないよね!
なぜならscene〇〇(背景画像変わるやつ)で全部消えるからさ!」みたいな記述があり……

エエエ。普通に同じ場面で途中でいなくなることあるんですが!
いちいち差分画像全部消さないといけないのかもしかして!?
ベースとセットで消えてたYU-RISが優秀だっただけか?!
いや、実は何かいい方法があるのかもしれない……?

ひとまず今回はそこまで膨大にはならなそうなので、
いっこいっこ消去命令を書き連ねるかなあと思ってるんですが、
動作重くなるとかあったら怖いなあ。うううむ。

 im.Compositeやってる意味がわかんなくなってきた。
どうせ後出しが重なるんならこれを逆に利用して
「ベース定位置に置く+差分出現させてちょこちょこ差し替え」んじゃだめなのか・・・?
これだとベースごと出し入れしてることにならんか・・・?
差分の意味とは・・・? いや、画像は省けるけども。
わからん、わからん・・・
≪ 前のページ   *HOME*   次のページ ≫
ブログ内検索
このブログについて
ゲーム作りたい人のメモ。
講座というほどのものでもないおぼえがきです。
何か参考になるところがあればご自由にどうぞ。
ほぼ自分用なので、日本語いきあたりばったりでごめんなまし。

※ここに書いたことは全体的に
「本当はなんとかする方法があるかもしれないけど、私にはわからない」が多く…
あんまり仕組みを理解していないし誤解もあるかもしれません。
というわけで責任は負いません。ごめんなさい!

リンク:ゲーム作ってる本館
material by bee  /  web*citron
忍者ブログ [PR]