最終更新: Fri Jun 10 15:53:00 2016
ここでは、(株)ピーデーが開発した推理ゲーム「1980オタクのヒデオ」の拡張モジュール下高井戸のソースコード情報を提供しております。
実はビルドして実行するのがやっかいな側面があるので、ファイルの説明だけではなく、ソリューション全体のそのものズバリを公開しておきます。Visual Studio 2010用です。
<?xml version="1.0" encoding="utf-8" ?> <root xmlns="http://angf.autumn.org/std001"> <module>Shimotakaido.dll</module> <startupModule>0</startupModule> <name>下高井戸・拡張モジュール</name> <id>{547abf63-26a1-4309-a1b5-a243c11877ee}</id> <shareWorld>{3172E35B-03D2-4e5a-AC8D-ED278F80B264}</shareWorld> <require></require> </root>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using ANGFLib; using EightyCommon; namespace Shimotakaido { // モジュールは、ANGFLibのModuleクラスを継承する public class MyModule : Module { // 識別用のユニークな番号 public override string Id { get { return "{ca55cf81-9626-4684-adad-7984db535e2b}"; } } // モジュールが提供する場所の一覧 public override Place[] GetPlaces() { return new Place[] { new Place科学要塞ソフトウェア研究所() }; } // 登場人物の実体を用意する public static Person ソフ殿 = new Personソフ殿(); // アイテムその1を用意する (消費アイテム扱い) public static EightCommonItem Itemソフ殿だい = new EightCommonItemTemplate() { // 識別用のユニークな番号 Id = "{b1674c3c-f251-463e-92cb-e83c0befc2c7}", // 説明文。アイテム選択時に表示される BaseDescription = "ソフ殿が大活躍する漫画らしいがぜんぜん面白くないぞ。", // 価格。ただし、モジュール次第でどう使われるか分からない Price = 500, // 一度に最大で持てる個数 Max = 1, // 名前 Name = "ソフ殿だい", // 対象性別 (Nutralは男女両用) 性別 = Sex.Nutral, 消費Sub = () => { // 独白を語らせる DefaultPersons.独白.Say("僕はソフ殿だいを読んでみた。"); DefaultPersons.独白.Say("でも、面白くなかった。"); // 時間を10分進める State.GoTime(10); // falseを返すと消費しても無くならないことを示す return false; } }; // アイテムその2を用意する (アクセサリ扱い) public static EightCommonItem Itemソフ殿バッチ = new EightCommonItemTemplate() { Id = "{ec53514a-19fe-4a64-9407-67f811bc80f4}", BaseDescription = "ソフ殿が描かれたバッジだけどかっこわるいぞ", Price = 100, Max = 1, Name = "ソフ殿バッチ", 性別 = Sex.Nutral, // 装備できる部位を示すbool配列 AvailableEquipMap = EightyCommonConstants.アクセ, // 同時に装備される部位を示すbool配列 SameTimeEquipMap = EightyCommonConstants.アクセ, }; // 登場人物一覧をシステムに提供する public override Person[] GetPersons() { return new Person[] { ソフ殿 }; } // アイテム一覧をシステムに提供する public override Item[] GetItems() { return new Item[] { Itemソフ殿だい, Itemソフ殿バッチ }; } } // 人物のクラスを定義 public class Personソフ殿 : Person { public Personソフ殿() : base("{7270ad82-a021-47c4-b9e1-ecf0f92a0e25}", "ソフ殿", Sex.Male) { } } // 場所「科学要塞ソフトウェア研究所」を定義 public class Place科学要塞ソフトウェア研究所 : Place { // 識別用のユニークな番号 public override string Id { get { return "{2ccfc203-d605-419f-a22e-c03bddc6b52d}"; } } // 名前 public override string HumanReadableName { get { return "科学要塞ソフトウェア研究所"; } } // 存在位置 (駅の座標は情報メニューのトータルレポートで調べる。ただしkm単位なのでm単位に換算して書き込む) public override Position GetDistance() { return new Position() { x = -11900, y = -7880 }; } // 1980世界でのみ見える public override bool Visible { get { return EightyCommonGeneral.Is1980World(); } } // 見るを選んだときに実行されるメソッド private bool see() { // 独白を語らせる DefaultPersons.独白.Say("僕は立派な施設を見あげた。"); DefaultPersons.独白.Say("でもよく見るとベニヤ板にペンキで描いてあるだけだった。"); DefaultPersons.独白.Say("ベニヤ板の向こう側を見ると、ボロ屋が1つあった。"); DefaultPersons.独白.Say("ボロ屋には科学要塞ソフトウェア公衆便城と書いてあった。"); // ソフ殿に語らせる MyModule.ソフ殿.Say("我が科学要塞ソフトウェア研究所に何か御用かな。わしはソフトの神様ソフ殿じゃ。"); MyModule.ソフ殿.Say("あ、こっちの看板は見ちゃダメ!"); DefaultPersons.独白.Say("ソフ殿は慌ててボロ屋を隠した。"); // Itemソフ殿だいを持っているか? if (State.GetItemCount(MyModule.Itemソフ殿だい) == 0) { // 所持数0の場合のみ MyModule.ソフ殿.Say("仕方がないなあ。君にはいいものをあげよう。"); // アイテムをゲットだぜ State.GetItem(MyModule.Itemソフ殿だい); DefaultPersons.独白.Say("僕は、ソフ殿だい、というコミックをもらった。"); MyModule.ソフ殿.Say("これを上げるから内緒だよ。じゃあね。"); } else if (State.GetItemCount(MyModule.Itemソフ殿バッチ) == 0) { // 所持数0の場合のみ MyModule.ソフ殿.Say("仕方がないなあ。特別にいいものをあげよう。"); State.GetItem(MyModule.Itemソフ殿バッチ); DefaultPersons.独白.Say("僕は、ソフ殿バッチ、というアクセサリをもらった。"); MyModule.ソフ殿.Say("付けて歩くとかっこいいよ。じゃあね。"); } State.GoTime(10); // ダミーなので返す値に意味は無い return true; } // コマンドを追加する public override bool ConstructMenu(List<SimpleMenuItem> list) { list.Add(new SimpleMenuItem("見る", see)); // デフォルトのUIをキャンセルして独自実装する場合はfalseを返す。 // falseを返すとOnMenuメソッドが呼ばれる return true; } } }