約 4,533,208 件
https://w.atwiki.jp/skullandshackles/pages/17.html
◎古代の探検家/Ancient Explorer:ゴル・ガンの遺跡を探索しに枷の地にやってきた歴史の学生。 〈知識(歴史)〉と〈知識(地域)〉判定に+1の特徴ボーナスを得て、どちらかをクラス技能にすることができる。 加えて、サイクロプス語か多国語を得る。◎酒場の説話収集家/Barroom Talespinner:船乗りたちの冒険譚が好きで、それを歌にして披露することで生活をしている。 〈交渉〉と〈芸能〉の分類の1つの判定に+1の特徴ボーナスを得て、どちらかをクラス技能にすることができる。 加えて1週間に1度、人気がある伝説的な海賊物語を知っているかどうか確かめるためにDC15の〈知識(地域)〉あるいは【知力】判定を行うことができ、ワームウッドのNPCたちに影響を与える判定に+1の特徴ボーナスを得る。◎ベスマラーの祝福/Besmara’s Blessing:海のそばもしくは船上で生まれ、ベスマラ―の祝福を受けているらしい。 〈知覚〉と〈職能(船乗り)〉判定に+1の特徴ボーナスを得る。 加えて、1週間に1度〈職能(船乗り)〉判定を再ロールして、より高い結果(判定の結果が知られている前に、この能力を使うと宣言しなくてはならない)を得ることができる。◎バッカニアの血/Buccaneer’s Blood:先祖の1人は枷の地で悪名高い自由船長で、自分も海賊にあこがれている。 〈威圧〉と〈職能(船乗り)〉判定に+1の特徴ボーナスを得る。 加えて、1回の不名誉と悪評値(悪評システムの詳細はPathfinder Adventure Path#55の「The Life of a Pirate」参照)に+1の特徴ボーナスを得る。◎埠頭の喧嘩屋/Dockside Brawler:港や埠頭で喧嘩をしながら育った。 ブラス・ナックルと即席武器のダメージロールに+1の特徴ボーナスを得る。 加えて、キャンペーンを始める時に自分のブラスナックルを隠し持つことができる。◎略奪者の目/Eye for Plunder:金銀財宝に対して目が肥えており、あちこちの商人や船から盗みを働いていた。 〈鑑定〉と(ドアと罠を含めて)隠されているか、あるいは秘密の物体を見つけるための〈知覚〉判定に+1の特徴ボーナスを得る。 加えて、キャンペーンを始める時に50gpの価値の貿易品を隠し持つことができる。◎イリズマゴーティ出身者/Ilizmagorti Native:メディオガルティ島のイリズマゴーティ生まれで、レッド・マンティス・アサシンを見て育った。 〈真意看破〉判定に+1の特徴ボーナスを得て、〈真意看破〉はクラス技能となる。 加えて、海賊あるいは枷の地の地域に関して未習得でも〈知識(地域)〉判定を行うことができる。◎義足/Peg Leg:幼い頃鮫に片足を喰いちぎられ、それ以来義足を付けている(ペナルティはない)。 頑健セーヴに+1の特徴ボーナスを得る。 加えて、鮫と水の副種別を持つ他の動物に対してのダメージロールに+1の特徴ボーナスを得る。◎船医/Ship’s Surgeon:木工職人の父を持ち、船医となった。 〈製作(大工)〉と〈治療〉判定に+1の特徴ボーナスを得て、〈治療〉はクラス技能となる。 加えて、キャンペーンを始める時に治療者用道具を隠し持つことができる。◎海に心動かされて/Touched by the Sea:先祖の1人にわずかにアクアティック・エルフかウンディーネの血を持っており、海を見ると胸が高鳴る。 〈水泳〉判定に+1特徴ボーナスを得て、〈水泳〉はクラス技能となる。 加えて、水面下で行なわれた攻撃ロールのペナルティが1減少する。
https://w.atwiki.jp/mycampaign/pages/63.html
【重要】公開の前に .pbl ファイルを作成する。 公開 公式フォーラムへの参加 公開時期はいつがよいか 関連 (PblWML(英語)) (Distributing content(英語)) 【重要】公開の前に Wesnoth の標準言語は英語です。公式サーバで公開する場合には、(不完全でもよいので)すべて英語にしてください。 なお、別途翻訳ファイルを作成することで、日本語はじめ英語以外の言語を表示させることができます。翻訳については、翻訳のお手伝いなどをご覧ください。 .pbl ファイルを作成する。 アドオンデータが保存されているのと同じフォルダに「_server.pbl」というファイルを作成します。 (2017.1.20 記述が誤っていたので修正しました。) ファイルの中身は、 title=キャンペーンのタイトル type=アドオンの種類(キャンペーンなら"campaign"とする。) icon=アイコン画像へのパス(画像は、ゲーム本体にはじめからある画像とすること。アドオンデータの画像ではきちんと表示されません。) version=公開するアドオンのバージョン author=アドオンの作者名 passphrase=任意(空欄のままならアドオンサーバーが適当に指定する。忘れないように注意。) description=キャンペーンの説明(重要。ここで関心を持ってもらえるかがダウンロードに反映する。) email=作者のメールアドレス(運営からの連絡用。非公開) translate=true キャンペーンを WesCamp(多言語化支援ページらしい)に登録する(登録の必要がないときはこの行は書かないか false にする。) [feedback] topic_id=(もし、あれば)wesnoth の公式フォーラムの当該キャンペーンのトピックID [/feedback] なお、.pbl ファイル自体は、公開されません。 _server.pbl の例(パスフレーズとメールアドレスはニセモノです。) title="Girl unDead" type="campaign" icon="units/undead/soulless-bat-die-2.png" version="0.6.0" author="tapaboy" passphrase="mypassphrase" description="Malica, a daugher of a magi, has become to undead. She fights against the Kingdom." email="pocopen@wesmail.com" translate=true [feedback] topic_id=37458 [/feedback] (注意:_server.pbl 内の文章は翻訳できないので、textdomain とか、文章前のアンダースコアは無用です。) 公開 普通に Battle for Wesnoth を起動する。 メインメニューのアドオンを開く。 デフォルトのアドオンサーバー(add-ons.wesnoth.org)に接続する。 一番下までスクロールすると「アドオンの公開:+アドオン名」が表示されるので、これを選択して、 OK ボタンをクリックする。 なお、公開するときに GNU GENERAL PUBLIC LICENSE Version 2 というライセンスに従うよう求められます。 ネット上に日本語訳もありますので、キャンペーンに限らず自作アドオンを公開する場合は、目を通しておいてください。 ごく大雑把にいうと、このライセンスに基づいているプログラムは、求められればすべて中身を公開する義務があり、誰でもこのプログラムを改良して自分のプログラムを作ることができます。ただし、そうやって作られたプログラムは、ライセンスも引き継がなければならない(つまり、求められた場合は公開しなければならない。)というようなものです。要するに「独り占めはダメ」ということです。 (重ねて書きますが、自作アドオンを公開する方は、本物を一通り読んでおいてください。) ちなみに、Battle for Wesnoth というゲーム自体もこのライセンスが適用されています。 公式フォーラムへの参加 アドオンを公開したら、同時に Wesnoth の公式フォーラムにそのアドオンに関するトピックを立てると、アドバイスやフィードバックを受けるのによいでしょう(ただし、英語)。 公開時期はいつがよいか 決まりはありませんが、未完成でもいくつかのシナリオがプレイできるようになった時点で公開するとよいでしょう。親切な人がアドバイスや不具合の報告をしてくれますし、反応があれば作る励みにもなるというものです。
https://w.atwiki.jp/wiki13_arc/pages/5.html
ダグニア地方北西部の小国「セーデルホルム共和国」。かの学究都市国家は、高度な魔動機術と洗練された知識で小規模ながらも一目おかれる存在であった。 しかし、4年前に勃発した『守護剣戦争』において、大国「ルキスラ帝国」の圧倒的武力のまえに滅びた。 守護剣戦争では、ルキスラ帝国の主唱する「人族共栄圏」思想……広汎な人族文明圏の維持・拡大のために守りの剣は総合的・計画的に管理されねばならず、協力しない国家は力をもって排除される……が示され、多数の守りの剣の発掘されたセ共国は帝国の『剣』提供要請(命令)に ラ・ルメイア王国はルキスラ帝国の要請に応え、配下の対蛮族戦闘集団……ラ・ルメイア修道騎士団、通称【不死殺し(エクソシスト)】を派遣。だが戦場で彼らを待ちかまえていたのは、圧倒的少数で故国を防衛せんとするセーデルホルム共和国銃騎士団であった。そして、エクソシストは対人間戦闘においても最強であることを証明した。 銃騎士団長、ハルベルト・V・シーダーの裏切りにより、銃騎士団は壊滅。 最後の銃騎士クリストフェル・ヴァルカーレは『守りの剣』と引き替えに中立国デュボール王国に身を寄せる。 『竜の要塞』とよばれた鉄壁のデュボール王国も昔日の威光は薄れ、宮廷貴族・大商人らの利害と思惑が国政外交という形で複雑に絡み合う謀略の舞台と化していた。 『亜竜公』アンリ・ファルクは、正統王ベルナール・ファルクの血に連なる王位継承者だが、エルフの体をもってうまれたゆえに要職につかず、美神の誉れと讃えられながら敬遠されていた。 そして現在……。
https://w.atwiki.jp/campaigninfoanime/pages/4.html
ファミリーマート「艦隊これくしょんキャンペーン」
https://w.atwiki.jp/mycampaign/pages/84.html
既存のキャンペーンを Eclipse に取り込むのは簡単です。 メニューの「ファイル」から「インポート」を開きます。 Select で「Wesnoth」>「Import Wesnoth Project」を選んで「次へ」行きます。 「Directory to import」にキャンペーンのフォルダーへのパス、「Project Name」にプロジェクト名(フォルダ名と同じがよいでしょう。)、「Wesnoth install」そのまま(wesnoth)として、「Finish」します。
https://w.atwiki.jp/hostgirl/pages/17.html
※管理人よりお願い 基本的に適当でユルい当wikiですが、今後の各種メディア(雑誌など)で公開されたコードそのものの転載は御自重くださいませ。 ダウンロードコード(現行)■『電撃スマホアプリ Vol.2』に記載されたダウンロードコード ■『電撃ゲームアプリ Vol.12』に記載されたダウンロードコード ■『D3スポーツ』(宣伝チラシ)に記載されたダウンロードコード ■『絶対夢倶楽部主義P.S.産号』(公式同人誌)に記載されたダウンロードコード その他キャンペーン(現行)■招待キャンペーン レビューで報酬GETキャンペーン 終了したキャンペーン■『アプリスタイル 7月号』に記載されたダウンロードコード ■『アプリスタイル 9月号』に記載されたダウンロードコード ■『アプリスタイル 11月号』に記載されたダウンロードコード ダウンロードコード(現行) ■『電撃スマホアプリ Vol.2』に記載されたダウンロードコード 終了時期 1月16日 00 00 エナジーDCC ×1 ウコンの味方 ×1 ■『電撃ゲームアプリ Vol.12』に記載されたダウンロードコード 終了時期 12月18日 17 00 ドリームカクテル ×1 エナジーDCC ×1 ■『D3スポーツ』(宣伝チラシ)に記載されたダウンロードコード 終了時期 未定 レアガチャチケット1枚 東京ゲームショウ2012で配布された宣伝チラシに記載されているもの。 現在、再入手手段はなし。 ■『絶対夢倶楽部主義P.S.産号』(公式同人誌)に記載されたダウンロードコード 終了時期 未定 【水着】歩乃香[SR+] 攻撃 2880/防御 1830(初期値) コスト 9 東京ゲームショウ2012のディースリーパブリッシャーブースで販売された公式同人誌に記載されているもの。 楽天の公式ストアからまだ買えます。定価1,000円(税別)。 楽天D3Pショップ http //item.rakuten.co.jp/d3p-webshop/10001810/ その他キャンペーン(現行) ■招待キャンペーン 終了時期 未定 【窓拭き】歩乃香[SR] 攻撃 1800/防御 1140(初期値) コスト 9 友達を招待するともれなく貰える。 レビューで報酬GETキャンペーン 終了時期 未定 レアガチャチケット1枚 トップ画面下部から「ドリームクラブ ホストガールコレクション!」のレビューを書きに行くともれなく貰える。 終了したキャンペーン ■『アプリスタイル 7月号』に記載されたダウンロードコード 終了時期 8月31日 23 59 レアガチャチケット1枚 新人受付[NORMAL] ■『アプリスタイル 9月号』に記載されたダウンロードコード 終了時期 9月30日 23 59 エナジーDCC ×1 ウコンの味方 ×1 ■『アプリスタイル 11月号』に記載されたダウンロードコード 終了時期 10月31日 23 59 中堅受付 ×1 エナジーDCC ×1 ウコンの味方 ×1
https://w.atwiki.jp/mycampaign/pages/81.html
(ダウンロードリンクをトップに移動しました。) 20170411版(主人公のジョブ選択システム実装) 20170401_2版(海水浴にイベント追加(現在3つ)) 20170326版(海水浴に悲しいエピソード追加) 20170324版(バグ修正。野外活動できます) 20170319_3版(全然嬉しくないオリジナル画像付き(野外活動開きません)) 20170319版(好感度チェックシステム実装(野外活動開きません)) 20170305_2版(野外活動の後日シナリオ修正) 20170305版(海水浴シナリオ追加) 20170228版(放課後めぐルート) 20170225版(ミニゲーム統合、アルバイト本屋ルート作りかけ) 20170219版(ミニゲーム作成中(一応クリアできなくもない)) 20170218版(ミニゲーム作りかけ) 20170212_2版(一通りラストまでプレイできる。) 20170212版(一通りプレイできる。ただしラストは一部キャラ分のみ。) 20170211版(野外授業のシナリオを直してみた。ただし、次のシナリオは直してないので、死傷者が出ると変な挙動をする。) 20170204_2版(人数を増やしてみた。ただし、放課後の教室まで(当然、これまでとの互換性なし。)) 20170204版(アルバイトシナリオにマップ差し替え実装) 20170129_2版(野外授業シナリオ改良) 20170129版(野外授業シナリオ実装) 20170124版(アルバイトシナリオ実装、ただし今のところ皿洗いだけ) 20170122_2版(お買い物イベント実装、ただし第3章さらルートのみ) 20170122版(ヒロイン管理システム実装版、実際の操作はほとんど変更なし) 20170114_2版(一応エンディングまでプレイ可能) 20170114版(好感度システム実装)(前のバージョンとのセーブデータ互換性ないと思う。) 20170109版(主人公の名前システム実装) 20170108版(ちょっと修正) 20170107版(作ってみた) 2017.04.11 ゲームの始めに主人公のユニットを選べるようにした。 お仕着せだけではなく、ユニット名を直接入力することができる自由度の高さ! ということは、主人公をアンデッドにしてももんと名付けることも可能ですし、百合百合(あるいは男の娘)、フレンズ的楽しみ方もできるかもしれません。 (補足) やったことは次のような比較的簡単なこと [message] speaker=narrator image="wesnoth-icon.png" message= _ "主人公のユニットを決めよう。次から選んでもいいし、ユニット名を直接入力してもいいぞ。" #1つ目のオプション(実質何もしない) [option] message= _ "エルフの戦士(デフォルト)" [/option] #2つ目のオプション [option] message= _ "悪漢" [command] [set_variable] name=unit_of_hero value=Ruffian [/set_variable] [/command] [/option] #3つ目のオプション(直接入力) [option] message= _ "直接入力する(『OK』を押して次へ)。" [command] [message] speaker=narrator image="wesnoth-icon.png" message= _ "ユニット名を英語で正しく入力してください。" [text_input] variable=unit_of_hero [/text_input] [/message] [/command] [/option] [/message] #変数 unit_of_hero に代入されたユニットに変化させる {TRANSFORM_UNIT (id=hero) ($unit_of_hero)} なお、「Elvish Shaman」と直接入力するとエルフの呪術師になるが、「femele^Mage」などとやっても女魔術師になったりはしない。 海水浴のイベントもちょこちょこ書いている最中。 2017.04.01 何やら最近、(非公式)ファンサイトのキャンペーン作成関係の記事が急激に充実している。敷居が下がるのはよいことだ。 これを機に、泥沼に足を踏み入れる人が増えることを期待している。泥沼といってもトカゲは出てこないが。 それはさておき、海水浴でのイベントの選択肢を増やしてみた。ただし、れべっかの水着姿とかは出てこない。期待する人はいないだろうが念のため。 あと、ありすルートも作る予定。 2017.03.26 海水浴で誰得?なエピソードを追加した。 一応、海水浴ではいくつかのイベントを用意して、どれが発生するかでその後の展開が微妙に変わるようにする構想がなくもない。 それがいつになるかはわからない。 ユニットのタイプを変えるのに TRANSFORM_UNIT というのを使うと簡単にできる。 Girl=unDead の「聖堂」のシナリオを書いた時には、知らなかったので、エルフのドルイドやシェードを步く死体に変えるのに苦労した。 使用例 {TRANSFORM_UNIT (type=Elvish Druid) (Walking Corpse)} {TRANSFORM_UNIT (id=Meg) (Walking Corpse)} 2017.03.24 2ちゃんねるの wesnoth スレで野外活動がエラーでプレイできないとの書き込みがあった。 シナリオを見直してみたら、修正するときに変えてはいけないところまで書き換えていたことが判明した。 なお、海水浴イベントを発生させるにはは、野外活動で変に頑張らない方がよいです。 2017.03.19その2 下手を承知で、このキャンペーンのためのオリジナル画像を作成した。 別に必要性はないのだが、作成のモチベーション維持のために、ぜひ必要だったのだ。(笑) それにしても、このゲームの世界観に全くそぐわない絵だなあ。 他にも追加したい絵があるので、本編の方の進行は停滞するかも。 2017.03.19 朝のあいさつで女子の好感度の大体の上がり具合がわかるシステムを実装した。 条件文が入れ子になっていて、少しややこしくなっているけど、要は、好感度の高さで反応が変わるようにしてあるだけ。 (なお、wesnoth 1.13 以降は、[elseif] が使えるようになるらしいので、そうなったらもう少しスッキリできると思う。) 好感度チェックマクロ #define GREETING HEROINE MESSAGE_1 MESSAGE_2 [if] [variable] name=favor_{HEROINE} greater_than=9 [/variable] [then] [message] speaker={HEROINE} message={MESSAGE_1} [/message] [message] speaker=hero message= _ "ああ、おはよう。$full_name_{HEROINE}。" [/message] [/then] [else] [if] [variable] name=favor_{HEROINE} greater_than=0 [/variable] [then] [message] speaker=hero message= _ "おはよう、$full_name_{HEROINE}。" [/message] [message] speaker={HEROINE} message= {MESSAGE_2} [/message] [/then] [else] [if] [variable] name=favor_{HEROINE} greater_than=-10 [/variable] [then] [message] speaker=hero message= _ "おはよう、$full_name_{HEROINE}。" [/message] [message] speaker={HEROINE} message= _ "フン。" [/message] [/then] [else] [message] speaker=hero message= _ "おはよう、$full_name_{HEROINE}。" [/message] [message] speaker={HEROINE} message= _ "・・・・" [/message] [message] speaker=hero message= _ "{HEROINE}ったら、あいさつもしてくれないなんて。" [/message] [/else] [/if] [/else] [/if] [/else] [/if] #enddef 実質同居と同じめぐとも学校であいさつしていたりとか、個別の修正は必要だけど。 2017.03.15 主人公が放課後の行動を選ぶときに、一度選んだ行動は非表示にしたいことがある。 そのような場合には、[option] 内で [show_if] を使うとよい。 例えば、さらとデートする前は変数「flag_afterschool_Sara」が0で、デート済みだと1になるようにしてあるような場合 よい例(大事なのは、どこでどういう風に [show_if] を使っているかだけなので、[command] の中身とかは飛ばしてください。) [message] speaker=narrator image="wesnoth-icon.png" message= _ "さあ、どうしよう?(試作品の都合で、放課後以外の選択肢もあります。)" [option] message= _ "さらに町を案内してもらおう。" [show_if] [variable] name=flag_afterschool_Sara equals=0 [/variable] [/show_if] [command] [set_variable] name=1st_day_after_school value=1st_day_Sara [/set_variable] [set_variable] name=flag_afterschool_Sara add=1 [/set_variable] [/command] [/option] [/message] とやるのがよいようである。 [show_if] の間に挟むのは、[if] と同じように考えていいようである。 これがわかるまでは、どうやってもうまくいかなくて困った。 悪い例(普通に [if] を使ったが、期待通りに動かなかった。) [message] speaker=narrator image="wesnoth-icon.png" message= _ "さあ、どうしよう?(試作品の都合で、放課後以外の選択肢もあります。)" [if] [variable] name=flag_afterschool_game_center equals=0 [/variable] [then] [option] message= _ "久しぶりにゲームセンターもいいな。" [command] [set_variable] name=1st_day_after_school value=game_center [/set_variable] [set_variable] name=flag_afterschool_game_center value=1 [/set_variable] [/command] [/option] [/then] [/if] [/message] 2017.03.08 いまだに変数の使い方でハマることが多い。今回もユニットの性別により、そのあとの展開が変わるようにしたかったのだが、上手くいかない。 上手くいかなかった記述 [if] [variable] name=$unit.gender equals="female" [/variable] [then] (ユニットが女だった時の展開) [/then] [else] (ユニットが男だった時の展開) [/else] [/if] よく考えてみたら、name=$unit.gender の「$」が余計だった。 $ がついていると、unit.gender が解釈されて、name=female あるいは、name=male ということになってしまう。 正しい記述 [if] [variable] name=unit.gender equals="female" [/variable] [then] (ユニットが女だった時の展開) [/then] [else] (ユニットが男だった時の展開) [/else] [/if] 2017.03.05(続き) 野外授業で負傷者が出た時の後で、りさがクラスに復帰できない不具合を修正した。 2017.03.05 定番(?)の海水浴イベントを作成。例によって尻切れとんぼ。 と言うか、このキャンペーンで水着回をやる意味がわからない。 心の赴くままにシナリオを増やしているが、後で整合性を取るのに苦労しそうな予感がする。まあ、最初から場当たり的に作っているから。 2017.02.26 本屋のバイト一応完成。伏線らしきものを敷きながら、回収の見込みなし。 放課後の過ごし方にめぐルートを実装した。食いしん坊萌えの方はどうぞ。 2017.02.25 ミニゲームをキャンペーン本体に統合。 なぜか、一部挙動がおかしくなったので、修正したが、原因が不明のままなので何か気持ち悪い。 アルバイトシナリオの本屋ルートを作り始めた。 2017.02.22 ミニゲームが一応完成。 これをキャンペーン本編に組み込む予定。 なお、だいぶ易しめに作ってあるので、プレイ中に退屈になったら、さっさと敵にやられるのがオススメ。 (ミニゲーム完成形(?))20170222版 シナリオ作成中に「Troll」を別の言葉に一括置換したら、キャンペーンを始めた途端にゲームオーバーになって焦った。 原因は、side の定義中の「controller」まで置換されてしまっているためと判明。 一括置換に関する不具合は、短い言葉だとよく発生するけど、まさか Troll でも発生するとは思わなかった。 2017.02.21 ゲームセンターシナリオがほぼゲームひとつ作ることと同じであることに気づいてしまったので、いったん独立したキャンペーン(といってもシナリオはひとつだけだけど)として作成中。 なんとなく、それっぽいものになりつつある。 もっとも、あくまでキャンペーンの中のミニゲームなので、それほど作り込むつもりはない(だんだん難易度が上がっていくとか)。 (ミニゲーム単独)20170221版 2017.02.19 ゲームセンターシナリオで一応クリアできるところまで作った。 作っていて気づいたのだが、今回のは、1シナリオを書くというより、ゲームひとつ作るのと同じだった(しかも、キャンペーン本編とはほとんど関係ない。)。 色々細かいところを考えていくと、まだまだやるべきところがたくさんある。 2017.02.18 当初実装していなかったてっぺいたちとゲームセンターに行くイベントを作成中。 見た目だけ何かに似ているゲームを楽しめますが、現在クリア不能です。 2017.02.12(続き) ラストの放課後の教室での告白を全女性キャラ分を作成した。 めぐルートとか切なくなるかも。りさルートもなかなか。 2017.02.12 野外授業で死傷者が出た時の後日のシナリオが全員に対応するように修正した。 男女でだいぶ扱いに差があるが、これでまた一通りプレイできるようになったはず。 ネイティヴでない悲しさで、hero を hiro としてしまったり、variable を valiable としてしまうような綴りミスをしょっちゅうしてしまって、余計な手間がかかってしまって困る。 2017.02.11 調子に乗って登場人物増やしたら、野外授業のシナリオでクラスを2グループに分けるのがものすごく大変になってしまった。 とにかく条件文と変数を使いまくってなんとかしたが、えらく込み入ったものになってしまった。 変数の使い方の基本 例えば、チームAとチームBがあって [if] めぐがチームAのとき [then] [set_variable] name=teamA value=1 [/set_variable] [/then] [/if] [if] さらがチームAのとき [then] [set_variable] name=teamA add=1 [/set_variable] [/then] [/if] と変数を設定し、次のような条件文でありすを振り分けようとしたとします。 [switch] variable=teamA [case] value=0 ありすはチームAに行く [/case] [case] value=1 ありすは半々の確率でチームAかチームBに行く [/case] [else] ありすはチームBに行く [/else] [/switch] これはうまく行きません。 なぜかというと、[switch]文の最初の value=0 成立しないからです。 具体的には、めぐもさらもBチームのときには、「teamA」なる変数そのものが存在しないので、「teamA」の値が0という状態も存在しません。 というわけで、 (最初に「teamA」という変数を宣言) [set_variable] name=teamA value=0 [/set_variable] [if] めぐがチームAのとき [then] [set_variable] name=teamA add=1 [/set_variable] [/then] [/if] [if] さらがチームAのとき [then] [set_variable] name=teamA add=1 [/set_variable] [/then] [/if] [switch] variable=teamA [case] value=0 ありすはチームAに行く [/case] [case] value=1 ありすは半々の確率でチームAかチームBに行く [/case] [else] ありすはチームBに行く [/else] [/switch] と書くとうまく行きます。たぶん。 2017.02.05 独自ユニットの追加(と言ってもほぼ既存ユニットの移植)を行った。 気をつけるのは、次の3点 _main.cfg の #ifdef CAMPAIGN_WESNOTH_GAKUEN 内に {binary_path]を明示しないとユニット画像が表示されないらしい。 同じく #ifdef CAMPAIGN_WESNOTH_GAKUEN 内に [+units] でユニットの定義をしているファイルへのパスを追加する。 既存のユニット定義を少し変えるだけで、ユニットの「説明文」に変更を加えない場合は、定義ファイルの最初の行の textdomain を変える必要はない。(Girl_unDead のときには、textdomain を変えてしまったため、ユニットの説明が全部英語で表示されてしまっている。) _main.cfg 設定例 #ifdef CAMPAIGN_WESNOTH_GAKUEN [binary_path] path=data/add-ons/Wesnoth_GAKUEN [/binary_path] {~add-ons/Wesnoth_GAKUEN/utils} [+units] {~add-ons/Wesnoth_GAKUEN/units} [/units] {~add-ons/Wesnoth_GAKUEN/scenarios} #endif 今回は、とりあえずやってみただけなので、ゲーム本体の添付はなし。 2017.02.04(続き) あらたに妹系キャラを実装し、一層非モテの妄想に近づいた。 やはり、登場人物を増やすと、いろいろなところに影響があり、面倒さが格段に増す感じ。 さらに、もう一人は増やす予定。 ユニットを移動させるときに、素直に道の上を歩かずに、オバQのように他人の家に不法侵入して進んでしまうことがある。 そのようなことを防止するには、通過させたいポイントを次のように順番に書いてゆくとよい。 [move_unit] id=hero to_x=4,7,6,12,19,19 to_y=3,6,7,10,7,6 [/move_unit] 当然ながら、xとyの数が違っているとエラーになってしまうので注意。 2017.02.04 アルバイトシナリオで、店内に入るとマップが変わるようにした。 [replace_map] を使用。 なお、元のマップと大きさが変わる場合には、expand=yes、shrink=yes にしておくのがよいみたい。 [replace_map] map="{~add-ons/Wesnoth_GAKUEN/maps/restaurant.map}" expand=yes shrink=yes [/replace_map] 2017.01.22(続き) 野外授業で味方キャラが死んでしまったときのイベントを作成した。 大怪我をして、数日休んだということして、次のシナリオで復活する。 ゲームの仕掛けとして作ろうと思っていたものは、一応大体出来たので、今後は、ストーリーの充実やら、登場人物のキャラ付け(どこかで見たようなツンデレとか、どこかで見たような寡黙系とか、どこかで見たようなポンコツ系とか)やら、似たようなコードのマクロ化を進めていくことになると思う。 ただ、分岐が増えていくと、辻褄合わせが格段に面倒になっていくのが目に見えているので、ほどほどにしておこう。(黙々と人類の歴史の可能性をたどっているかがりちゃんは、実はゲームクリエイターの心理状態の反映なのではないかと思う。) 2017.01.29 野外授業シナリオを作ってみた。 今回の課題は ユニットをランダムに2グループに分けること 他のユニットが主人公について動くこと の2点。 グループ分け 今回は3人ずつ2グループに分けるのだが、ゲームの特性上主人公グループに女子2人つけるので、逆にいえば女子を1人だけ別のグループに入れればいいだけなので、ランダムに女子1名を別グループ側に移動させるようにした。 [set_variable] name=team_mate rand=Sara,Alice,Rebecca [/set_variable] [move_unit] id=$team_mate to_x=3 to_y=9 [/move_unit] 次に元の位置いるだけのユニットを主人公側に移動。 [if] [have_unit] x,y=1,7 [/have_unit] [then] [move_unit] id=Sara to_x=4 to_y=5 [/move_unit] [/then] [/if] [if] [have_unit] x,y=1,8 [/have_unit] [then] [move_unit] id=Alice to_x=4 to_y=6 [/move_unit] [/then] [/if] [if] [have_unit] x,y=1,9 [/have_unit] [then] [move_unit] id=Rebecca to_x=3 to_y=5 [/move_unit] [/then] [/if] 追っかけシステム 偶数ターンごとに主人公の隣に 味方キャラ移動 敵キャラ登場 の順にイベントが発生するようにした。 (順番を間違えると味方の動きが不自然になる。) 見てみればわかるように、主人公のヘクスの真上に移動、登場するようになっているが、デフォルトでは、移動予定、登場予定のヘクスに既に別のユニットがいると近隣の別のヘクス移動、登場するようになっているので、主人公が消されることはない。 [event] name=turn 6 {STORE_UNIThero} [move_unit] id=Sara to_x=$hero_store.x to_y=$hero_store.y [/move_unit] [move_unit] id=Alice to_x=$hero_store.x to_y=$hero_store.y [/move_unit] [move_unit] id=Rebecca to_x=$hero_store.x to_y=$hero_store.y [/move_unit] {NAMED_UNIT 3 (Giant Rat) $hero_store.x $hero_store.y () () ()} [/event] (味方キャラの動きが3人分書いてあるが、このうち1人は [kill] されている。) 味方キャラが殺されてしまったときの対策とか、シナリオ開始場面でユニットが話者の陰に隠れてしまうなどの不具合が残っている。 2017.01.24 アルバイトシナリオを作成。ただし、選べるバイトはまだひとつだけ。 お買い物イベントで、所持金がマイナスになっても際限なく買い物ができることが発覚。このままでは主人公が多重債務者になってしまうので、所持金以上に買い物ができないように修正した。 [store_side] side=1 variable=side_hero [/store_side] [if] [variable] # - ここで所持金判定 name=side_hero.gold less_than=50 [/variable] [then] [message] speaker=hero message= _ "いけね。小遣いが足りないや。" [/message] [/then] [else] [set_variable] name=side_hero.gold sub=50 [/set_variable] [modify_side] side=1 gold=$side_hero.gold [/modify_side] [message] speaker=narrator image="wesnoth-icon.png" message= _ "お買い物をして、所持金が $side_hero.gold ゴールドになった。" [/message] [clear_variable] name=side_hero [/clear_variable] [/else] [/if] 2017.01.23 お買い物イベントについて、本家の WML リファレンスページを見たら、そのまんま [gold] でお金を増やしたり減らしたりできることがわかった。 よって、昨日のコードは [gold] - 特にしていしなければ、side 1 のゴールド amount=-50 [/gold] [store_side] side=1 variable=side_hero [/store_side] [message] speaker=narrator image="wesnoth-icon.png" message= _ "所持金が $side_hero.gold ゴールドになった。" [/message] [clear_variable] name=side_hero [/clear_variable] でもいける。 2017.01.22その2 お買い物イベントを追加してみた。 簡単に言えば、主人公サイドのゴールドを減らすだけ。 [store_side] - まずはサイドの情報を一時保存 side=1 variable=side_hero [/store_side] [set_variable] - サイドのゴールドを50減らす name=side_hero.gold sub=50 [/set_variable] [modify_side] - 減らしたあとのゴールドを適用 side=1 gold=$side_hero.gold [/modify_side] [message] speaker=narrator image="wesnoth-icon.png" message= _ "所持金が $side_hero.gold ゴールドになった。" [/message] [clear_variable] - 一時保存した情報を消去 name=side_hero [/clear_variable] あと、キャリーオーバーとか、ボーナスなどがないように [endlevel] を修正などなど。 村を占領した時も収入増えないようにするのはこれから。 2017.01.22 登場人物の管理を用意にするためのシステムをを作ってみた。 なぜ作ったかというと、今後登場人物を増やしたり、「好感度」以外のパラメーターを実装することになったとき楽をするため。 基本的には [set_valiables] を使っているのだが、これだと次の点で使いづらい。 登場人物を数字で管理しなければならない。 実際にこうなっているわけではないが、たとえば $heroines[0].full_name - ありす と $hiroines_Alice.name - ありす では、後者の方が人間にとってはわかりやすい。 (その昔、某自動車メーカーで記号みたいな名前の車を乱発したら、ディーラーでさえ車名が混乱して、業績が悪化したというまことしやかな話もある。) 途中で登場人物を追加したりすると、最初の順番がばらばらになってしまう。 はじめは、 $heroines[0].full_name - ありす だったのが、途中から $heroines[0].full_name - れべっか になったりしたら、もうわけわからない。 で、実装 まず、マクロ #define HEROINES NAME FULL_NAME [set_variables] name=heroines mode=insert - これ大事。「insert」にしないと、先にセットした heroines 変数がすべて消えてしまう。 [value] name={NAME} full_name=_ "{FULL_NAME}" favor=0 [/value] [/set_variables] [set_variable] - 好感度システム等で(数字ではなく)IDで指定できるようにしてる。 name=ID_{NAME} value={NAME} [/set_variable] [set_variable] - メッセージ内で名前を表示できるようにしてる。 name=full_name_{NAME} value=_ "{FULL_NAME}" [/set_variable] [set_variable] - 好感度を0にセット。 name=favor_{NAME} value=0 [/set_variable] #enddef 最初のシナリオでは {HEROINES Sara (さら)} {HEROINES Alice (ありす)} {HEROINES Rebecca (れべっか)} {NAMED_GENERIC_UNIT 2 "Elvish Shaman" 7 8 ($ID_Sara) ($full_name_Sara)} {NAMED_UNIT 2 "Mage" 13 8 ($ID_Alice) ($full_name_Alice) gender=female} {NAMED_UNIT 2 "Thief" 13 5 ($ID_Rebecca) ($full_name_Rebecca) gender=female} 前半でキャラを登録、後半でユニット作成。 2017.01.14(続き) 一応、エンディングを作成した。 一応、相手により会話内容が変わってきます。 今後は、プレゼントを購入(主人公のゴールドが減る。)、3人以上のイベント、ランダムで相手が変わるイベントとかも実装してみたい。 作ってみてわかったことは、ゲームの性格上、やたら変数と条件文を多用するということ。 特に登場人物が増えると幾何級数的に条件の入れ子が激しくなる。 (そんなわけで、今回は手抜きした。) やはりWMLは、この手のゲームは(作れなくはないけど)あまり向いてはいないように思う。 まあ、3つ以上の値の比較ができるマクロなどを作っていけば、多少は楽になるかも。 (たとえば、さら、ありす、れべっかを好感度が高い順にソートするとか、一定の好感度以上の子を全員を抽出するとか。) 2017.01.14 相手キャラの好感度変更システムを実装した。 1 第1章で、名前と好感度の変数セット。 #### #### キャラ名前登録(メッセージ内でキャラ名を表示させるため。) #### [set_variable] name=Sara_name value= _ "さら" [/set_variable] [set_variable] name=Alice_name value= _ "ありす" [/set_variable] [set_variable] name=Rebecca_name value= _ "れべっか" [/set_variable] [set_variable] name=Teacher_name value= _ "先生" [/set_variable] [set_variable] name=Teppei_name value= _ "てっぺい" [/set_variable] [set_variable] name=Sugisaku_name value= _ "すぎさく" [/set_variable] #### #### 好感度変数 #### [set_variable] name=favor_Sara value=0 [/set_variable] [set_variable] name=favor_Alice value=0 [/set_variable] [set_variable] name=favor_Rebecca value=0 [/set_variable] [set_variable] name=favor_Teacher value=0 [/set_variable] [set_variable] name=favor_Teppei value=0 [/set_variable] [set_variable] name=favor_Sugisaku value=0 [/set_variable] 2 次のようなマクロを用意し、イベントの結末に合わせて実行させる。 #define FAVOR ID VALUE [set_variable] name=add_favor_{ID} value={VALUE} [/set_variable] [set_variable] name=favor_{ID} add={VALUE} [/set_variable] [message] speaker=narrator image=misc/laurel.png message= _ "${ID}_nameの好感度が $add_favor_{ID} アップして $favor_{ID} になった。" [/message] #enddef #define FAVOR_DOWN ID VALUE [set_variable] name=add_favor_{ID} value={VALUE} [/set_variable] [set_variable] name=favor_{ID} sub={VALUE} [/set_variable] [message] speaker=narrator image=items/bones.png message= _ "${ID}_nameの好感度が $add_favor_{ID} ダウンして $favor_{ID} になってしまった。" [/message] #enddef 特定のユニットの名前を表示させるのに、もっと頭のいい方法が絶対にあると思うのだけど・・・$unit_id.name みたいのないのかな? あとは、蓄積ポイントに応じたエンディングを作れば、一応形になるかな。 2017.01.09 主人公の命名システムを実装した。 1 message に text_input タグを追加し、プレイヤーに名前をインプットさせて、変数に格納する。 [message] speaker=narrator image=wesnoth-icon.png message= _ "君の分身に名前をつけよう。" [text_input] variable=herosname [/text_input] [/message] 2 modify_unit で主人公の名前を変更する。 {MODIFY_UNIT (id=hero) name "$herosname"} 3 会話内でも変数を使って名前が表示されるようになる。 [message] speaker=Teppei message= _ "おお、よろしくな、$herosname! おれはてっぺいっていうんだ。" [/message] 2017.01.08 Wesnoth学園を一部修正。 よく使う store_unit と unstore_unit をマクロ化。 放課後の選択肢を充実。 仮のものであっても、ユニットIDを適当につけるとあとで苦労するので、適当だったユニットIDを名前と一致させた。 今後やりたいこと。 好感度システム実装 主人公の名前変更機能 登場人物のキャラは、そのうち大胆に変更するつもり。 2017.01.07 恋愛シュミレーション風キャンペーン「Wesnoth学園」を公開。 恋愛シュミレーションをやったことがないのだが、たぶんデートしたり贈り物をして相手の好感度を上げていって、最終的に誰を選ぶかでエンディングが変わってくると理解している。 主人公以外のユニットは、プレイヤーに操作させたくないので、別陣営としたため。シナリオごとに store_unit, unstore_unit を行うことで対応した。 マクロに MAKE_AI_SIDE_PERSISTENT, RECALL_AI_SIDE というAIの陣営をリコールできるっぽいのがあるのだが、使い方がわからない。 マクロの中身は一時的にAI陣営をプレイヤー操作陣営に変更しているらしい。 ここら辺に書いてある。http //svn.gna.org/svn/wesnoth/trunk/data/core/macros/side-utils.cfg 2016 09 19 _main.cfg ファイルをいじっていたら、キャンペーンが開かなくなってしまったが、Git で動いていた頃に戻すことができたので、事なきをえた。 やはり Git はおすすめです。まあ、今回のトラブルはこまめに保存と起動確認していれば、発生しなかったのだけど。 2016 05 21 Git お試しついでに、キャンペーンの続きを作成中。 今回は、特定のユニットの攻撃が当たると、特定ターンで味方に変わるマクロを作成してみた。 まずは攻撃が当たったことを登録する。とりあえず、role=poisoned にするようにしているが、多分手つきはよくないやり方と思われる。 自分から攻撃した時と攻撃を受けた時の2種類必要。 #define SET_SILENT_POISON [event] name=attacker hits [filter] type=Poison Bat [/filter] {MODIFY_UNIT (id=$second_unit.id) role poisoned} [/event] [event] name=defender hits [filter_second] type=Poison Bat [/filter_second] {MODIFY_UNIT (id=$unit.id) role poisoned} [/event] #enddef 指定したターンで陣営が1に変わる。敵のリーダーの場合、この瞬間に勝利(笑)。 #define CHANGE_SIDE TURN [event] name=turn {TURN} {MODIFY_UNIT (role=poisoned) side 1} [/event] #enddef 本当は、夜になると陣営が変わるようにしたいのだが、今のところ、いい方法がない。 2016 05 05 Git の試し用キャンペーンを作ってみたが、シナリオを読み込まず、3日間くらい悩んだ。 念のためマップファイルをテキストエディタで開いてみたら、わんさか余計がデータが書き込まれていて、それが悪さをしていた。 マップエディタで間違えて「シナリオとして」保存してしまったのがいけなかったようだ。 ところで、去年作り始めたキャンペーンはそのままお蔵入り状態。 2015 2 22(続き) 不死マクロをちょっと修正。 とりあえず負けたら消えてもらって、次のシナリオではちゃっかり復活するようにした。村で死んでも復活すると思う。 #define IMMORTAL UNIT_ID SCENARIO_ID ### 戦闘前に生前の状態を保持 ### [event] name=attack end first_time_only=no [filter_second] id={UNIT_ID} [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [clear_variable] name=store_{UNIT_ID} [/clear_variable] [store_unit] [filter] id={UNIT_ID} [/filter] variable=store_{UNIT_ID} [/store_unit] {SELECT_NEXT_SCENARIO {SCENARIO_ID}} [/then] [else] [/else] [/if] [/event] ### こちらからの攻撃 ### [filter] と [variable] の name が違ってくる [event] name=attack end first_time_only=no [filter] id={UNIT_ID} [/filter] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=unit.hitpoints less_than=1 [/variable] [then] [clear_variable] name=store_XXX [/clear_variable] [store_unit] [filter] id={UNIT_ID} [/filter] variable=store_XXX [/store_unit] {SELECT_NEXT_SCENARIO {SCENARIO_ID}} [/then] [else] [/else] [/if] [/event] #enddef そして次のシナリオでは、 [event] name=prestart {RECALL AAA} {RECALL BBB} {RECALL CCC} [unstore_unit] variable=store_AAA x,y=24,15 [/unstore_unit] [unstore_unit] variable=store_BBB x,y=23,17 [/unstore_unit] [unstore_unit] variable=store_CCC x,y=25,17 [/unstore_unit] [/event] で、生きていれば普通にリコール、死んでいれば [unstore_unit] で復活。ただし、ヒットポイントが限りなくゼロに近いので、フルヒールや毒抜きなどをする必要があると思われる。 2015 2 22 2月1日に {MODIFY_UNIT (side=2) max_moves 1} として、敵が1マスしか動かないように設定してもうまく行かないことの続き。 試してみるとスタート前に設定しても、なぜか第2ターンからしか有効にならない。 仕方がないのでズルいが第1ターンだけ別の方法で敵を動けないようにすることを考えた。 調べてみると、[side]タグで controller=null にするとこの陣営のユニットはまったく動かないことがわかった。 そこで、第1ターンまでは controller=null にして、第2ターンから controller=ai に変更するするようにしてみた。 まず、当初の [side] 設定(本当は第7陣営まであるが、やることは同じなので省略) [side] side=2 controller=null team_name=ai no_leader=yes [ai] ai_special=guardian [/ai] [/side] 第1ターンで1マスしか動けないようにする。(なぜか第2ターン以降で有効になる。) [event] name=turn 1 {MODIFY_UNIT (side=2) max_moves 1} [/event] 第2ターンで、AI 操作に変更 [event] name=turn 2 [modify_side] side=2 controller=ai [/modify_side] [/event] なんだかあまりきれいなやり方ではないが、とりあえず意図した動きは実現したので、まあいいとする。 あとは、最初の方で作った不死マクロが、自ユニットが村にいるときには無効になってしまう(殺されてしまう)不具合の修正が残っている。 2015 2 11 レベルアップ用シナリオとして、敵を倒しても、次々と新手が現れるシナリオを作成。仕組みは簡単だが、敵味方双方の数や強さをうまく調整しないとレベルアップする前にやられてしまう。これは今後の課題。 まず、[scenario] タグに victory_when_enemies_defeated=no と一行入れておく。 次に、敵サイドの設定 [side] side=2 controller=ai team_name=ai no_leader=yes [goal] name=target [criteria] id=XXX [/criteria] value=5 [/goal] [/side] no_leader=yes としておくのが大事。これを忘れると、戦わずして勝利してしまう。 一体やられると次が現れる仕組み (ゲーム開始時に aaa というユニットがいる前提で) [event] name=die [filter] id=aaa [/filter] {UNIT 2 (Goblin Impaler) 12 10 (id=bbb)} [/event] あとは、同様に bbb や ccc がやられたらと同じことを続けてゆく。 [event] name=die [filter] id=bbb [/filter] {UNIT 2 (Troll Whelp) 19 11 (id=ccc)} {UNIT 2 (Skeleton Archer) 6 9 (id=ddd)} [/event] [event] name=die [filter] id=ccc [/filter] {UNIT 2 (Troll) 20 1 (id=eee)} {UNIT 2 (Skeleton) 20 10 (id=fff)} [/event] これを延々続けていくのは大変なので、fff がやられたら、bbb が再登場するというように、どこかでループするとよいと思う。 2015 2 1 昨日は [side] を配置するマクロで作成しはじめたが、具合が悪いので、[side] は普通に配置して、あとから {UNIT} マクロで敵を置くように方針転換した。 まず、普通に陣営を設置。ただし、リーダーなし設定なので、[scenario] タグ内に victory_when_enemies_defeated=no と1行入れておく。 [side] side=2 controller=ai team_name=ai no_leader=yes [/side] [side] side=3 controller=ai team_name=ai no_leader=yes [/side] [side] side=4 controller=ai team_name=ai no_leader=yes [/side] [side] side=5 controller=ai team_name=ai no_leader=yes [/side] [side] side=6 controller=ai team_name=ai no_leader=yes [/side] [side] side=7 controller=ai team_name=ai no_leader=yes [/side] 次にユニットを置くためのマクロを作成。 #define SET_ENEMIES TYPE2 TYPE3 TYPE4 TYPE5 TYPE6 TYPE7 {UNIT 2 {TYPE2} 24 11 ()} {UNIT 3 {TYPE3} 29 14 ()} {UNIT 4 {TYPE4} 29 19 ()} {UNIT 5 {TYPE5} 24 21 ()} {UNIT 6 {TYPE6} 19 19 ()} {UNIT 7 {TYPE7} 19 14 ()} #enddef さらに自軍リーダーの ID とタイプに応じて敵ユニットを置くマクロに統合。(当初は、自軍リーダーのレベルに対応させるつもりだったが、ユニット固有の変数にレベルがなかったので、タイプに変更した。) #define SET_ENEMIES_4_SELF_TYPE ID SELFTYPE TYPE2 TYPE3 TYPE4 TYPE5 TYPE6 TYPE7 [event] name=prestart [if] [have_unit] id={ID} type={SELFTYPE} [/have_unit] [then] {SET_ENEMIES {TYPE2} {TYPE3} {TYPE4} {TYPE5} {TYPE6} {TYPE7}} [/then] [else] [/else] [/if] [/event] #enddef マクロの実行例(結果は、昨日の画像と同じ) (マクロの中では、ユニットは ( ) で囲まないとエラーになる危険性高し。) {SET_ENEMIES_4_SELF_TYPE (XXX) (Sergeant) (Fugitive) (Elvish High Lord) (Dwarvish Lord) (Draug) (Orcish Sovereign) (Saurian Flanker)} あとは、自軍リーダーのタイプの数(=レベルの数)だけこのマクロを設定すればよい。) {SET_ENEMIES_4_SELF_TYPE (XXX) (Sergeant) (Thug) (Elvish Fighter) (Dwarvish Fighter) (Skeleton) (Orcish Leader) (Saurian Skirmisher)} {SET_ENEMIES_4_SELF_TYPE (XXX) (Lieutenant) (Bandit) (Elvish Lord) (Dwarvish Steelclad) (Revenant) (Orcish Ruler) (Saurian Ambusher)} {SET_ENEMIES_4_SELF_TYPE (XXX) (General) (Highwayman) (Elvish High Lord) (Dwarvish Lord) (Draug) (Orcish Sovereign) (Saurian Flanker)} {SET_ENEMIES_4_SELF_TYPE (XXX) (Grand Marshal) (Highwayman) (Elvish High Lord) (Dwarvish Lord) (Draug) (Orcish Sovereign) (Saurian Flanker)} 敵ユニットには、うろちょろしてもらいたくないので、ガーディアン設定をする。 [side] side=2 controller=ai team_name=ai no_leader=yes [ai] ai_special=guardian [/ai] (以下、第6サイドまで同様) さらに、移動能力を1マスに制限する。 [event] name=prestart {MODIFY_UNIT (side=2) max_moves 1} {MODIFY_UNIT (side=3) max_moves 1} {MODIFY_UNIT (side=4) max_moves 1} {MODIFY_UNIT (side=5) max_moves 1} {MODIFY_UNIT (side=6) max_moves 1} {MODIFY_UNIT (side=7) max_moves 1} [/event] あれ?うまくいかないな。 倒した敵に応じて、新規雇用ができるようにする。 [event] name=die [filter] type=Thug [/filter] [allow_recruit] side=1 type=Thug,Footpad,Thief,Poacher [/allow_recruit] [/event] [event] name=die [filter] type=Bandit [/filter] [allow_recruit] side=1 type=Thug,Footpad,Thief,Poacher,Bandit,Outlaw,Rogue,Trapper [/allow_recruit] [/event] [event] name=die [filter] type=Highwayman [/filter] [allow_recruit] side=1 type=Thug,Footpad,Thief,Poacher,Highwayman,Fugitive,Assassin,Huntsman,Ranger [/allow_recruit] [/event] 残りの敵(あと15ユニット!)も同じようにやってゆく。めんどくさ。 2015 1 31 今度は、自ユニットのリーダーのレベルに応じて、敵を変えるマクロに挑戦する。 まずは、敵ユニットのリーダーを配置するだけの簡単なマクロを作成。 #define SET_ENEMIES TYPE2 TYPE3 TYPE4 TYPE5 TYPE6 TYPE7 [side] side=2 controller=ai team_name=ai type={TYPE2} id=MMM canrecruit=yes [/side] [side] side=3 controller=ai team_name=ai type={TYPE3} id=NNN canrecruit=yes [/side] [side] side=4 controller=ai team_name=ai type={TYPE4} id=OOO canrecruit=yes [/side] [side] side=5 controller=ai team_name=ai type={TYPE5} id=PPP canrecruit=yes [/side] [side] side=6 controller=ai team_name=ai type={TYPE6} id=QQQ canrecruit=yes [/side] [side] side=7 controller=ai team_name=ai type={TYPE7} id=RRR canrecruit=yes [/side] #enddef 次のように実行してみる。 {SET_ENEMIES (Fugitive) (Elvish High Lord) (Dwarvish Lord) (Draug) (Orcish Sovereign) (Saurian Flanker)} するとこんな感じで指定したとおりの敵が配置される。 2015 1 27 不死マクロは一段落したので、次に特定のユニットから攻撃を受けた敵ユニットは次のターンから味方に変わるマクロを作成。 まず、攻撃を受けたことをなんらかの形で保存させる。 最初変数を使うことを考えたが、MODIFY_UNIT マクロを使ったら簡単にできた。格納するパラメーターはほかに影響のなさそうな role にした。 #define SET_SIDE_CHANGE_FLAG ### ###特定の攻撃を受けるとフラグを立てる ### [event] name=attacker hits first_time_only=no [filter] id=AAA [/filter] {MODIFY_UNIT (id=$second_unit.id) role kissed} [/event] #enddef 次のターンで味方に変わるマクロ。こっちも MODIFY_UNIT を利用。 ### ###次のターンで味方になってしまう ### #define SIDE_CANGE [event] name=new turn first_time_only=no {MODIFY_UNIT (role=kissed) side 1} [/event] #enddef さらに夜になると味方になるマクロに修正。[filter_location] タグを使用。location とあるけれど地形だけではなく、時間でも使える。 ### ###夜に味方になってしまう ### #define SIDE_CANGE [event] name=new turn first_time_only=no [filter_location] time_of_day=chaotic [/filter_location] {MODIFY_UNIT (role=kissed) side 1} [/event] #enddef 2015 1 25 事実上全滅(石化)しても負けにもならず、戦闘続行もできない不具合を解消するため、不死マクロを元に倒されると問答無用で次のシナリオに行くマクロを作成。 #define IMMORTAL_HERO UNIT_ID ### 戦闘前に生前の状態(位置)を保持 ### [event] name=attack first_time_only=no [store_unit] [filter] id={UNIT_ID} [/filter] variable=store_{UNIT_ID} kill=no [/store_unit] [/event] ### name=attack end だと死ぬ前に発動するが ### name=die だと死んでゲームオーバーになってしまうのでだめ。 ### まず攻撃されたとき [event] name=attack end first_time_only=no [filter_second] id={UNIT_ID} [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_{UNIT_ID} [/unstore_unit] [clear_variable] name=store_{UNIT_ID} [/clear_variable] ### ###ファームへ [endlevel] result=victory next_scenario=00-training bonus=no [/endlevel] [/then] [else] [/else] [/if] [/event] ### こちらからの攻撃 ### [filter] と [variable] の name が違ってくる [event] name=attack end first_time_only=no [filter] id={UNIT_ID} [/filter] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### ###ファームへ [endlevel] result=victory next_scenario=00-training bonus=no [/endlevel] [/then] [else] [/else] [/if] [/event] #enddef 2015 1 24 不死マクロで戦闘不能(石化)したときに、戦闘を続けるか離れるかを選択させるために、まず次のようなマクロを作成 #define SELECT_NEXT_SCENARIO [message] speaker=narrator image="wesnoth-icon.png" message= _ "The unit cann t fight. What shall we do ?" [option] message= _ "Continue the battle." [command] [/command] [/option] [option] message=_ "Lieve the field." [command] [endlevel] result=victory next_scenario=00-training bonus=no [/endlevel] [/command] [/option] [/message] #enddef 次に不死マクロの [/modify_unit]の後ろに上のマクロを追加する。 [modify_unit] [filter] id={ID} [/filter] [status] petrified=yes [/status] [/modify_unit] {SELECT_NEXT_SCENARIO} [/then] こんな感じ。 ただし、このままだと、自分のすべてのユニットが死んだり石化してもシナリオが終了しないという罠が残っている。 2015 1 19 不死マクロはこのままではどこかの魔法少女みたいにどんなに傷つけられても攻撃し放題となってしまうので、攻撃や反撃不能にする必要があるが、これが意外に面倒である。 ひとつ安易な手法として、石化させてしまうというのがある。 マクロの [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] を [modify_unit] [filter] id={ID} [/filter] [status] petrified=yes [/status] [/modify_unit] に変えるだけでOK。 求めているのと違うが、当面これでやっていこうと思う。 なお、不死マクロはドレイン能力があるユニットでは、うまく機能しなくて死んでしまうことがあるが、そういうユニットには使わない予定なのでまあいいか。 2015 1 18 不死ギミックの続き 本当に死にそうなときのみ発動するように改良 ### 戦闘前に生前の状態(位置)を保持 ### [event] name=attack first_time_only=no [store_unit] [filter] id=XXX [/filter] variable=store_XXX kill=no [/store_unit] [/event] ### name=attack end だと死ぬ前に発動するが ### name=die だと死んでゲームオーバーになってしまうのでだめ。 [event] name=attack end first_time_only=no [filter_second] id=XXX [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] これだと敵から攻撃された時のみ有効なので、攻守反転バージョンも作成する必要があるので、次のように追加。 ### 戦闘前に生前の状態(位置)を保持 ### [event] name=attack first_time_only=no [store_unit] [filter] id=XXX [/filter] variable=store_XXX kill=no [/store_unit] [/event] ### name=attack end だと死ぬ前に発動するが ### name=die だと死んでゲームオーバーになってしまうのでだめ。 ### まず攻撃されたとき [event] name=attack end first_time_only=no [filter_second] id=XXX [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] ### こちらからの攻撃 ### [filter] と [variable] の name が違ってくる [event] name=attack end first_time_only=no [filter] id=XXX [/filter] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] マクロし、さらに引数をつけられるようにして、いくつものユニットでも使えるようにする。 #define IMMORTAL ID ### 戦闘前に生前の状態(位置)を保持 ### [event] name=attack first_time_only=no [store_unit] [filter] id={ID} [/filter] variable=store_{ID} kill=no [/store_unit] [/event] ### name=attack end だと死ぬ前に発動するが ### name=die だと死んでゲームオーバーになってしまうのでだめ。 ### まず攻撃されたとき [event] name=attack end first_time_only=no [filter_second] id={ID} [/filter_second] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=second_unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_{ID} [/unstore_unit] [clear_variable] name=store_{ID} [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id={ID} [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] ### こちらからの攻撃 ### [filter] と [variable] の name が違ってくる [event] name=attack end first_time_only=no [filter] id=XXX [/filter] #### HPが1未満になった時に発動するようにする ### numerical_equals=0 や equals=0 だと死んじゃう [if] [variable] name=unit.hitpoints less_than=1 [/variable] [then] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] ### 死なない程度にHPを1にする。 [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/then] [else] [/else] [/if] [/event] #enddef (先頭と最後の #行はコメントではなく、定義なので、省略してはいけない。) ほぼ、期待通りの動きをしたので、別ファイルにして、utils フォルダに保存し、_main.cfg にパスを追記 #ifdef 1_12_TEST # add here custom code {~add-ons/1-12-test/utils} {~add-ons/1-12-test/scenarios} [+units] {~add-ons/1-12-test/units} [/units] #endif (先頭と最後の #行はコメントではなく、定義なので、省略してはいけない。) このとき、必ずシナリオへのパスより先に書くことに注意。そうしないと、キャンペーンを開始するときに「そんなマクロありません(意訳)」と怒られてしまう。そのことをすっかり失念していてだいぶ時間を無駄にしてしまった。 2015 1 17 無謀にもあらたなキャンペーン作りに着手した。 今回の目玉は、セーブ&ロードをする必要がない(主人公が絶対に死なない)という画期的というか、既にゲームとはいえないキャンペーンである。 とりあえず、殺されても死なないギミックのプロトタイプは次みたいなかんじ。 [event] name=attack first_time_only=no [store_unit] [filter] id=XXX [/filter] variable=store_XXX kill=no [/store_unit] [/event] [event] name=attack end first_time_only=no [filter_second] id=XXX [/filter_second] [unstore_unit] variable=store_XXX [/unstore_unit] [clear_variable] name=store_XXX [/clear_variable] [modify_unit] [filter] id=XXX [/filter] hitpoints=1 [/modify_unit] [/event] これだと攻撃されると問答無用でHPが1になってしまうなど、いろいろ問題ありまくりだが、とりあえずどんなに攻撃されても死なないことだけは可能である。 それからいちいち攻撃前の状態を保持して、攻撃後に復旧するのはなんとなくスマートさに欠けるような気がする。 というか、(プログラミングできない分際で言うのも傲慢だけど)WML そのものがスマートさや統一感に欠けるところがあるように感じる。
https://w.atwiki.jp/mfgkonami/pages/55.html
キャンペーン ※ゲーム内のグッズとは異なります グッズ名 開催時期 入手方法 備考 ロケテストキャンペーン 2022年9月頃 ロケテス参加 MFG四人集合版、SOUND VOLTEX&ボンバーガールのキャラとのコラボ版二種イーパス。コミカルイラスト色紙。カードコネクトロケテス限定デザインの連動特典・好感度カード・カードコネクトガチャ。 声優サインプレゼント 2023年4月頃 抽選応募 各キャラクター担当の声優のサイン スタートダッシュキャンペーン 2023年4月頃 店舗交換 ヒヨリ、セン、ツミレ、テンシの4人を中心としたグッズ類 増台記念バニーe-pass 2023年8月頃 店舗交換 詩織を除く実装された9キャラのバニーバージョンのイーパス。 KAC2023エールe-pass 2023年10月頃 抽選応募 詩織を除く実装された9キャラのイーパス。 センちのPIICA® 2023年10月頃 先着/抽選応募 センのPIICA® KAC2023コラボ第6弾 2023年11月頃 先着/抽選応募 麻雀ファイトガールからはミツバが選出。ポップンのキャラとのコラボイーパス。 センバースデープリント 2023年11月頃 コネクト印刷 バースデー記念イラストのカードコネクト印刷 2024年もよろしく!e-pass 2024年1月頃 先着/抽選応募 ヤオ、ツミレの正月バージョンのイーパス。 クリア襲来e-pass 2024年2月頃 応募 クリア、カオスのバニーバージョン二種のイーパス。 プロアクター色紙 2024年2月頃 抽選応募 MFGアクター八人+寄せ書きのMFG・MFC二種のサイン パインバースデープリント 2024年3月頃 コネクト印刷 バースデー記念イラストのカードコネクト印刷 1stアニバプリント 2024年4月頃 コネクト印刷 1stアニバ記念イラストのカードコネクト印刷 蔵出しファイトガールプリント 2024年4月頃 コネクト印刷 蔵出しファイトガールイラストのカードコネクト印刷 販売物 グッズ名 販売時期 販売場所 備考 エキスポ水着ヒヨリグッズ 2023年11月頃 アミューズメントエキスポ 水着ヒヨリICパスとバスタオルセット(6000円)
https://w.atwiki.jp/ludens/pages/64.html
PCレベル:9+ボーナス+参加話数+追加で400支払った分 現在参加PC最大レベル:51 撃破NPC・勢力ボーナス:+32 キャラメイク、成長に関しての詳しい情報はキャンペーンに関してを参照のこと。 Lv10以降によるクエストについてはクエストに関してを参照のこと。 キャラメについて プレイヤーはMOEカードを3枚引いてクラスを決定する。 レベルは9で作成。常備化ポイントは50。 使用ルールブックはアルシャードガイア、アルシャードffの基本ルールブックと全てのサプリメント。 成長に関して 現在のPC達の最大レベルまでは経験点を支払うことで成長させることができます。 「経験点」の消費はSRS以外でも構いません。ただし、ソードワールドやデモンパラサイトは「キャラクターへの経験点」とみなしてます。 また、トップページのボーナスが更新されたらその分レベルを上げて構いません。 シナリオに関して セッションシートに名前を書き込む前にPC達は1D6を振ります。 一番出目が高かった人がPC1です。シナリオを考えてください。概要で構いません。 ボーナスに関して 敵対勢力や敵対ネームドNPCを撃破することでボーナスがもらえます。 勢力、NPC共に最大+3Lvまでです。 参加していなかったPC達もこの分は受け取ります。
https://w.atwiki.jp/erupri/pages/24.html
目次 魔宝石キャンペーン アニバーサリーキャンペーン 通常キャンペーン Twitterフォロワー数突破記念キャンペーン 魔宝石キャンペーン キャンペーン内容(2021年2月現在) 魔宝石を購入すると、購入個数に応じて「魔宝石クーポン」が入手できる。 11魔宝石(1000円)→魔宝石クーポン5個 23魔宝石(2000円)→魔宝石クーポン10個 35魔宝石(3000円)→魔宝石クーポン15個 60魔宝石(4000円)→魔宝石クーポン25個 キャンペーン期間中の衣装は半額のレートで交換が可能。 期間を過ぎると通常のレートでの交換になる。 ※「魔宝石クーポン」は「交換ショップ【わんだふる】」で、衣装あるいは魔宝石と交換できる。 ※以下、プリンセス服/プリンス服を便宜上区別。どちらとも取れる服はプリンセス服側に記載。 2022年 魔宝石ハッピーキャンペーン 開始 終了 プリンセス服 プリンス服 2022/01/31 2022/02/28 - - 2021/12/31 2021/01/31 ドラゴンソウル 2021年 魔宝石ハッピーキャンペーン 開始 終了 プリンセス服 プリンス服 2021/11/30 2021/12/31 Xmasマジシャン 2021/10/31 2021/11/30 大いなる意志 2021/09/30 2021/10/31 In The Sea 2021/08/31 2021/09/30 お茶会執事 2021/07/31 2021/08/31 ダンシングクイーン シークレットローズ 2021/06/30 2021/07/31 ストライプマジシャン 隻腕の剣士 2021/05/31 2021/06/30 道化師と兎 威風堂々 2021/04/30 2021/05/31 春妖精 80sダンスナイト 2021/03/31 2021/04/30 マーメイドプリンセスドレス アンティークもふもふクマ 2021/02/28 2021/03/31 King of Sapphire female 2021/01/31 2021/02/28 猫と私 Flower for You 2020/12/31 2021/01/31 花魁プリンセス 花魁プリンス 2020年 魔宝石ハッピーキャンペーン 開始 終了 プリンセス服 プリンス服 2020/11/30 2020/12/31 聖歌隊プリンセス 聖歌隊プリンス 2020/10/31 2020/11/30 ぽわぽわエンジェリック 熱血ライダース 2020/09/30 2020/10/31 ハロウィンスイートデビル デンジャラスマミー 2020/08/31 2020/09/30 サイレントノクターン サイレントハートビート/サイレントセレナーデ 2020/07/31 2020/08/31 ローズ&ケージプリンセス ローズ&ケージプリンス 2020/06/30 2020/07/31 雲海チャイナ 冥界の守護者 2020/05/31 2020/06/30 ブライダルゴシックドレス ブライダルゴシックベスト 2020/04/30 2020/05/31 魔法学園プリンセス 魔法学園プリンス 2020/03/31 2020/04/30 ゴシックナイフ アナザーワールドプリンス 2020/02/29 2020/03/31 アンティークエンジェル スチームパンクショット 2020/01/31 2020/02/29 バレンタインカクテル ブレイブリーロザリオ/ブレイブリーハート 2019/12/31 2020/01/31 花毬春風和装/花毬春風和装ケープ 無双春風和装 2019年 魔宝石ハッピーキャンペーン キャンペーン内容補足 2019/08/15の「幽玄牡丹KIMONO」以前は、 魔宝石購入時に入手できるのは「魔宝石クーポン」ではなく、各キャンペーン毎のクーポン。 キャンペーン終了と同時にクーポンは使えなくなっていた。 開始 終了 プリンセス服 プリンス服 2019/11/30 2019/12/31 Twinkle小天女/Cute小天女 ネクロマンサー 2019/10/31 2019/11/30 帝國浪漫乙女/帝國浪漫乙女Cute ビブリオフィリア 2019/09/30 2019/10/31 クラシカルプリンセス白雪/ダークプリンセス白雪 トレジャーハント 2019/09/15 2019/09/30 ミラクルマジカル 2019/08/31 2019/09/15 プリンセスバタフライドレス 2019/08/15 2019/08/31 幽玄牡丹KIMONO 2019/07/31 2019/08/15 アフタヌーンティー 指輪の魔術師 2019/07/15 2019/07/31 まーめいどりーみん 2019/06/30 2019/07/15 精霊の錬金術士/精霊のアルケミスト 博愛の王子 2019/06/15 2019/06/30 聖域の巫女・天/聖域の巫女 2019/05/31 2019/06/15 ゆるふわルーズニット 厄除け霊狐/厄除け神主 2019/05/15 2019/05/31 ハーバリウムボトル 2019/05/01 2019/05/15 パンキッシュアリスガールVivid/パンキッシュアリスガールPastel/パンキッシュアリスガールDark 大和魂 2019/04/16 2019/04/30 ヴェルサイユドレス 2019/04/01 2019/04/15 アナザーワールド ルナティックボイス 2019/03/16 2019/03/31 ゴシックアンブレラ ナイトメアハッター 2019/03/01 2019/03/15 ムーンライト・セレナーデ バンドパーカー 2019/02/15 2019/02/28 ワイルドローズドレス 2019/02/01 2019/02/14 ゆめかわらびたんドレス/ヤンデレらびたんドレス バレンタインラブリー 2019/01/16 2019/01/31 エターナルシンデレラ 2019/01/01 2019/01/15 ラ・フェリーチェ 仙華演義 2018年 魔宝石ハッピーキャンペーン 開始 終了 プリンセス服 プリンス服 2018/12/16 2018/12/31 博愛の姫 2018/12/01 2018/12/15 イビルクイーン パンキッシュスター/パンキッシュスターライト 2018/11/16 2018/11/30 ソーダライトカクテルGirl ソーダライトカクテルBoy 2018/11/01 2018/11/15 エンジェルダンス/エンジェルダンス羽衣 2018/10/16 2018/10/31 和傘少女 お団子男子 2018/10/01 2018/10/15 姫ロリヰタ 飲茶チャイナ 2018/09/16 2018/09/30 墓守少女/南瓜少女 2018/09/01 2018/09/15 おすましアンティーク ダイナミックスーツ/ダイナミックスーツB 2018/08/16 2018/08/31 絢爛鳳舞 2018/08/01 2018/08/15 降臨聖天使 2018/07/16 2018/07/31 ビーチスイーツパラダイス 2018/07/01 2018/07/15 アンティークプリマドール/アンティークプリマドールリボン 2018/06/16 2018/06/30 エンジェリックイリュージョン/エンジェリックフリルドレス 2018/06/01 2018/06/15 メイドウィッチ 2018/05/16 2018/05/31 キャンディストライプ 2018/05/01 2018/05/15 カラーペンシル カラークレヨン 2018年 魔宝石キャンペーン キャンペーン内容補足 2018/04/16の「スピリチュアルドレス」以前は、 魔宝石購入時に入手できるのはクーポンではなくキャンペーン毎の錬金素材。 錬金「レインボーブック」で衣装を錬金する仕様。 開始 終了 プリンセス服 プリンス服 2018/04/16 2018/04/30 スピリチュアルドレス 2018/04/01 2018/04/15 フラワーステージドレス 消えた肖像画 2018/03/16 2018/03/31 エンゲージメントリボンドレス/エンゲージメントリボンドレスS 富国強兵 2018/03/01 2018/03/15 WDジェリービーンズ WDフラワープリンス 2018/02/15 2018/02/28 木花咲耶姫 宝剣演舞 2018/02/01 2018/02/14 ピュア・アンティーク ジュエルイリュージョン 2018/01/16 2018/01/31 ピュアキュート ワイルドパンク 2018/01/01 2018/01/15 新春元気娘 新春元気男子 2017年 魔宝石キャンペーン 開始 終了 プリンセス服 プリンス服 2017/12/16 2017/12/31 ドリーミィクラシカルロリィタ 聖大司教 2017/12/01 2017/12/15 リンリンクリスマス 美容師プリンス 2017/11/16 2017/11/30 絶対的エース プリンスファーコート 2017/11/01 2017/11/15 花咲小町 デビルプリズン 2017/10/16 2017/10/31 ブラッディアリス/アリスと時計 魔界執事/堕天執事 2017/10/01 2017/10/15 ドリームリボンドレス 超弓神風 2017/09/16 2017/09/30 ロイヤルウェディング 囚われの悪魔 2017/09/01 2017/09/15 ジュエルシャイン 王宮将校 2017/08/16 2017/08/31 ナイトメアゴシック 学園ライブ 2017/08/01 2017/08/15 大空ブランコ クールテール執事 2017/07/16 2017/07/31 ドリーミン×ドリーミン 天文方 2017/07/01 2017/07/15 キャンディポップ KATANAベスト/KATANAコート 2017/06/16 2017/06/30 白雪姫と魔法のりんご 天下無双 2017/06/01 2017/06/15 ひよこ魔術師 サイバーコマンダー/サイバーオペレーター 2017/05/16 2017/05/31 クラシカルドーリー 犬のおまわりさん 2017/05/01 2017/05/15 魔導少女 英国少年 2017/04/16 2017/04/30 ダーク赤ずきん/ブラッディ赤ずきん ダーク執事 2017/04/01 2017/04/15 超天使プリンセス 陽炎忍者 2017/03/16 2017/03/31 堕天使プリンセス ベアボーイ 2017/03/01 2017/03/15 アリスパーティー ホワイトデーフラワー 2017/02/15 2017/02/28 おでかけウィンター 2017/02/01 2017/02/14 バレンタインプリンセス 2017/01/16 2017/01/31 ダンシングプリンセス/Re ダンシングプリンセス 2017/01/01 2017/01/15 ブリリアントジュエルドレス 2016年 魔宝石キャンペーン 開始 終了 プリンセス服 プリンス服 2016/12/16 2016/12/31 プレミアムサンタ 2016/12/01 2016/12/15 ぺたんこワイシャツ 2016/11/16 2016/11/30 お稲荷ちゃん 2016/11/01 2016/11/15 ポップンジップ 2016/10/16 2016/10/31 エルプリハロウィン2016 2016/10/01 2016/10/15 ミルキーガーリーワンピ 2016/09/16 2016/09/30 クリーミーホイップ 2016/09/01 2016/09/15 メイド・イン・ヘブン 2016/08/16 2016/08/31 ピュアエアリーワンピ 2016/08/01 2016/08/15 ベリアル 2016/07/16 2016/07/31 ビューティチャイナ 2016/07/01 2016/07/15 ワンダフルソング 2016/06/16 2016/06/30 キュートバニー ビーチボーイ/サマーボーイ 2016/06/01 2016/06/15 サマーキュート/サマーキュートライン 2016/05/16 2016/05/31 マジカルウィッチ 2016/05/01 2016/05/15 ハニーハート 2016/04/16 2016/04/30 アンブレラガール 2016/04/01 2016/04/15 ぺたんこライド 2016/03/16 2016/03/31 おやすみパジャマ/おやすみパジャマフリル 2016/03/01 2016/03/15 スイートストロベリー 2016/02/15 2016/02/28 フローラルフリル/フラワーフリル △TOPへ アニバーサリーキャンペーン 5周年記念 ・ログインキャンペーン(2020年12月20日~2021年1月3日) 期間内のログインで以下のアイテムを配布 1日目 【E】光ポリッシュ・レア 2日目 ティンクルチェリー 50個 3日目 【E】輝きポリッシュ 4日目 ティンクルチェリー 100個 5日目 【E】輝きポリッシュ・レア 6日目 ティンクルチェリー 150個 7日目 【E】煌めきポリッシュ 8日目 ティンクルチェリー 200個 9日目 【E】煌めきポリッシュ・レア 10日目 魔宝石 5個 ・アカウント復帰キャンペーン(2020年12月?日~2021年1月3日) 4周年記念 ・ログインキャンペーン(2019年12月20日~2020年1月5日) 期間内のログインで以下のアイテムを配布 1日目 【E】光ポリッシュ・レア 2日目 ティンクルチェリー 50個 3日目 【E】輝きポリッシュ 4日目 ティンクルチェリー 100個 5日目 【E】輝きポリッシュ・レア 6日目 ティンクルチェリー 150個 7日目 【E】煌めきポリッシュ 8日目 ティンクルチェリー 200個 9日目 【E】煌めきポリッシュ・レア 10日目 魔宝石 4個 ・アカウント復帰キャンペーン(2019年12月20日~2020年1月5日) 3周年記念 ・ログインキャンペーン(2018年 12/1~12/2) 24日間、1日1回のアイテム配布 全日ログインした場合の合計アイテム↓ ガチャクーポン 20枚 スターライトジュエル 4個 プロテクトチャーム 1個 宝石箱チケット☆金/宝 各2枚 煌めきポリッシュ 2個 消費アイテム 3個 3000コイン ティンクルチェリー 300個 魔宝石 3個 ・アカウント復帰キャンペーン(2018年 11/29~12/31) 2周年記念 ・ログインキャンペーン(2017年12月25日~2018年1月5日) 期間内のログインで以下のアイテムを配布 1日目 3000コイン 2日目 ティンクルチェリー 20個 3日目 4000コイン 4日目 ティンクルチェリー 30個 5日目 5000コイン 6日目 魔宝石 3個 ・種族おためしキャンペーン(2017年 12/15~12/31) ・アカウント復帰キャンペーン(同上) 1周年記念 ・ログインキャンペーン(2016年12月25日~2017年1月5日) 期間中のログインで以下のアイテムを配布 1日目 3000コイン 2日目 ティンクルチェリー 20個 3日目 4000コイン 4日目 ティンクルチェリー 30個 5日目 5000コイン 6日目 魔宝石 3個 ・全種族おためしキャンペーン(2016年12月22日~2017年1月5日) ・アカウント復活キャンペーン(2016年 11/28~12/31) △TOPへ 通常キャンペーン カムバックキャンペーン(2021年 6/15~6/30) 種族おためしキャンペーン(2021年 4/9~4/12) カムバックキャンペーン(2020年 5/9~5/15) GWログインキャンペーン(2020年 4/28~5/7) カムバックキャンペーン(2019年 5/24~5/31) カムバックキャンペーン(2018年 8/1~8/31) カムバックキャンペーン(2018年 5/?~6/10) 探索経験値&コイン2倍キャンペーン(2018年 1/27、1/28) 探索経験値&コイン2倍キャンペーン(2017年 12/30、12/31) Xmas探索経験値&コイン2倍キャンペーン(2017年 12/23~12/25) 探索経験値&コイン2倍キャンペーン(2017年 10/28、10/29) 探索経験値&コイン2倍キャンペーン(2017年 9/23、9/24) 探索経験値&コイン2倍キャンペーン(2017年 8/26、8/27) カムバックキャンペーン(2017年 8/10~8/15) 探索コイン2倍キャンペーン(2017年 7/1、7/2) 種族おためしキャンペーン(2017年 4/28~5/7) カムバックキャンペーン(同上) 探索経験値&コイン2倍キャンペーン(2017年 2/11、2/12) 探索経験値&コイン2倍キャンペーン(2016年 12/24、12/25) 探索コイン2倍キャンペーン(2016年 6/11、6/12) ※「カムバックキャンペーン」は「アカウント(復活/復帰)カムバックキャンペーン」「アカウント(復活/復帰)キャンペーン」など表記揺れあり。 △TOPへ Twitterフォロワー数突破記念キャンペーン 15000人記念 ログインキャンペーン 2021年 10/20 0 00 ~ 10/31 23 59 期間内のログインで以下のアイテムを配布 1日目 ティンクルチェリー 30個 2日目 ティンクルチェリー 30個 3日目 ティンクルチェリー 30個 4日目 ティンクルチェリー 30個 5日目 魔宝石 3個 1万人記念 ログインキャンペーン 2021年 8/25 0 00 ~ 9/5 23 59 期間内のログインで以下のアイテムを配布 1日目 ティンクルチェリー 30個 2日目 ティンクルチェリー 30個 3日目 ティンクルチェリー 30個 4日目 ティンクルチェリー 30個 5日目 魔宝石 3個 3000人記念 探索取得ゴールド 経験値2倍キャンペーン 2016年 5/21 0 00 ~ 5/22 23 59 2000人記念 ティンクルチェリー30個配布 2016年 4/15 1000人記念 魔宝石3個配布 2016年 4/4、4/5、4/6(1日1個、3日間で計3個) △TOPへ