最終更新: 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;
}
}
}