Reference
  Area\Util.txt
  Util\Audio.txt
  Util\Party.txt
  Area\Service.txt
  Util\CommonDialog.txt
  Util\VisualEffect.txt
End Reference

Procedure Main(startAt)

  Dim ac = Nothing

  RegisterCommonEventHandlers()

  SetZoneOfTown(64, 64, 1, 1, 62, 62, ExitArea_Enter)

  ac = AddActor_MTStopped("EqShopper", 43, 20, 0, [A_Man], ActorMotion.Down, Nothing)
  ac = AddStaticActor("EqShopperEve", 43, 21, 10, [A_Null], EqShopperEve_Contact)

  ac = AddActor_MTStopped("MgShopper", 45, 20, 0, [A_OldMan], ActorMotion.Down, Nothing)
  ac = AddStaticActor("MgShopperEve", 45, 21, 10, [A_Null], MgShopperEve_Contact)

  ac = AddActor_MTStopped("GdShopper", 38, 9, 0, [A_Woman], ActorMotion.Down, Nothing)
  ac = AddStaticActor("GdShopperEve", 38, 10, 10, [A_Null], GdShopperEve_Contact)

  ac = AddActor_MTStopped("InnFront", 36, 9, 0, [A_Man], ActorMotion.Down, Nothing)
  ac = AddStaticActor("InnFrontEve", 36, 10, 10, [A_Null], InnFrontEve_Contact)

  ac = AddActor_MTStopped("Mayor", 42, 31, 0, [A_Father], ActorMotion.Down, Nothing)
  ac = AddStaticActor("MayorEve", 42, 32, 10, [A_Null], MayorEve_Contact)
  
  ac = AddActor_MTZonedRandom("Towner1", 9, 10, 0, _
    6, 8, 0, 12, 12, 0, [A_Man], Towner1_Contact)
    
  ac = AddActor_MTZonedRandom("Towner2", 23, 21, 0, _
    20, 19, 0, 26, 23, 0, [A_Woman], Towner2_Contact)
  
  ac = AddActor_MTZonedRandom("Towner3", 9, 53, 0, _
    6, 51, 0, 12, 55, 0, [A_OldMan], Towner3_Contact)
    
  DoInsideWarp(startAt, SetEntrance(32, 1, 0, Direction.Down), False)
  
  ChangeBGM(Music.Town)
  PutAreaNameLabel()

  NotifyEntered()
  Idle(ProcessInput)
  NotifyExiting()

End Procedure

Procedure ExitArea_Enter()
  BeginOutsideWarp([Field], GetAreaObject().Tag)
End Procedure

Procedure EqShopperEve_Contact()
  If TestFlag("WestEvo") AndAlso Not TestFlag("Medrod_1") Then
    DoShop({[SonicBoom], [ZirconArmor], [CarbonArmor], [ZirconShield], [CarbonShield], [ZirconHelmet], [CarbonHelmet]})
  Else
    DoShop({[SonicBoom], [DragonTail], [ZirconArmor], [CarbonArmor], [ZirconShield], [CarbonShield], [ZirconHelmet], [CarbonHelmet]})
  End If
End Procedure

Procedure MgShopperEve_Contact()
  Dim mg_list = {[HealAll2], [Cold3], [Elec3], [Charm], [ElecDPUp], [Revive2], [StatDPUp]}  
  If (AnybodyHas([AuraDocA]) AndAlso AnybodyHas([AuraDocB])) OrElse _
    AnybodyHas([HellFireDoc]) OrElse AnybodyHas([CrimsonFlareDoc]) OrElse _
    AnybodyHas([MeteoDoc]) OrElse AnybodyHas([KillDoc]) Then
    If DoYesNoMsg("お客さん　すごい術書を持ってるね", _
      "それ譲ってくれないかな", _
      "魔石にして売ってあげるよ") = True Then
        If AnybodyHas([AuraDocA]) AndAlso AnybodyHas([AuraDocB]) Then
          TakeOurTool([AuraDocA])
          TakeOurTool([AuraDocB])
          SetFlag("AuraSelling")
        End If
        If TakeOurTool([HellFireDoc]) Then
          SetFlag("HellFireSelling")
        End If
        If TakeOurTool([CrimsonFlareDoc]) Then
          SetFlag("CrimsonFlareSelling")
        End If
        If TakeOurTool([MeteoDoc]) Then
          SetFlag("MeteoSelling")
        End If
        If TakeOurTool([KillDoc]) Then
          SetFlag("KillSelling")
        End If
    End If
  End If
  If TestFlag("AuraSelling") Then mg_list.Add([Aura])
  If TestFlag("HellFireSelling") Then mg_list.Add([HellFire])
  If TestFlag("CrimsonFlareSelling") Then mg_list.Add([CrimsonFlare])
  If TestFlag("MeteoSelling") Then mg_list.Add([Meteo])
  If TestFlag("KillSelling") Then mg_list.Add([Kill])
  DoMagicShop(mg_list)
End Procedure

Procedure GdShopperEve_Contact()
  DoShop({[Heal_T1], [Heal_T2], [CureAll_T], [Revive_T]})
End Procedure

Procedure InnFrontEve_Contact()
  DoInn(420)
End Procedure

Procedure MayorEve_Contact()
  Dim p_name = [TheHero].Name + "："
  Dim q_name = "市長："
  If Not TestFlag("NorthEvo") Then
    DoMsg(q_name, "私が市長です")
  ElseIf TestFlag("NorthTower_1") Then
    DoMsg(q_name, "ありがとう　" + [TheHero].Name, _
      "おかげでこの市は救われた", _
      "君の名は永遠に語り継がれるだろう")
  ElseIf TestFlag("Misikint_2") Then
    DoMsg(q_name, "生きて帰ってこい　ギュンターの息子よ")
  ElseIf TestFlag("Misikint_1") AndAlso AnybodyHas([WhiteRobe]) Then
    DoMsg(q_name, "おお　本当に持ち帰ってくるとは", _
      "分かった　君にこの首飾り", _
      "そして　この市の命運を託そう", _
      "生きて帰ってこい　ギュンターの息子よ")
    SetFlag("Misikint_2")
  ElseIf TestFlag("Misikint_1") AndAlso TestFlag("CaveD2_B4") Then
    DoMsg(q_name, "なに　途中でなくした？", _
      "そのローブは何色だった？")
    DoMsg(p_name, "白でした")
    DoMsg(q_name, "ううむ　では信じることにしよう", _
      "分かった　君にこの首飾り", _
      "そして　この市の命運を託そう", _
      "生きて帰ってこい　ギュンターの息子よ")
    SetFlag("Misikint_2")
  ElseIf TestFlag("Misikint_1") Then
    DoMsg(q_name, "北西の洞窟から", _
      "ローブを取ってくるのだ")
  Else
    DoMsg(p_name, "市長さんですか？")
    DoMsg(q_name, "そうだが　君は誰だい？")
    DoMsg(p_name, [TheHero].Name + "と申します")
    DoMsg(q_name, "で　私に何か用かな？")
    DoMsg(p_name, "玄武の塔に近づけないのですが", _
      "どうなっているのですか？")
    DoMsg(q_name, "塔から強力な敵が出てくるものだから", _
      "術士を集めて周りに結界を張ったのだ")
    DoMsg(p_name, "中に入るにはどうしたいいのですか？")
    DoMsg(q_name, "結界を解くしかないな")
    DoMsg(p_name, "なんとかお願いできないでしょうか")
    DoMsg(q_name, "無理だ　そんな事をしたら", _
      "塔のモンスターが外に出てくる")
    DoMsg(p_name, "しかし結界にも限界があるでしょう")
    DoMsg(q_name, "うむ……まあ　そうだ", _
      "だが　どうすればいいものか……")
    DoMsg(p_name, "玄武の塔には奴らの首領がいるはずです", _
      "こちらから乗り込んで倒しましょう！")
    DoMsg(q_name, "誰が行くんだ？")
    DoMsg(p_name, "私が行きます")
    DoMsg(q_name, "一人でか？")
    DoMsg(p_name, "はい")
    DoMsg(q_name, "なんて無茶なやつだ！")
    Sleep(500)
    DoMsg(q_name, "とはいえ　我々の力では", _
      "奴らと戦った所で勝てないのも事実", _
      "仕方ない　君に任せよう", _
      "と　言いたいところだが", _
      "ひとつ　君の力を試させてほしい")
    DoMsg(p_name, "なんでしょうか")
    DoMsg(q_name, "北西に洞窟がある", _
      "その奥にローブがあるから", _
      "持ち帰って来るのだ", _
      "そうしたら　結界を自由に出入りできる", _
      "首飾りを　君に託すことにしよう")
    DoMsg(p_name, "分かりました", _
      "では今すぐ洞窟に向かいます")
    LetActorTurn(GetPrimaryActor(), Direction.Down)
    Sleep(500)
    DoMsg(q_name, "あ　ちょっと")
    LetActorTurn(GetPrimaryActor(), Direction.Up)
    Sleep(500)
    DoMsg(q_name, "君はギュンターという男を知らないか？")
    DoMsg(p_name, "ギュンターは私の父ですが")
    DoMsg(q_name, "驚いたな　やはりそうだったか", _
      "どうりで　若い頃のあいつにそっくりなわけだ")
    DoMsg(p_name, "父をご存知で？")
    DoMsg(q_name, "昔　友人だったからな", _
      "あいつは腕の立つ戦士だったが", _
      "なぜか突然　姿を消してしまった", _
      "今　どこにいる？")
    DoMsg(p_name, "クレノサのラブロという町です")
    DoMsg(q_name, "そんな遠くに行ったのか", _
      "で　何をしているんだ？　元気なのか？")
    DoMsg(p_name, "毎日元気にパンを作っていますよ")
    DoMsg(q_name, "パン？　いやこれは　意外だ……", _
      "まあ何か事情があるんだろうな", _
      "わかった　教えてくれてありがとう")
    SetFlag("Misikint_1")
  End If
End Procedure

Procedure Towner1_Contact()
  DoMsg("要塞みたいな町だろう？", _
    "怪物から町を守るために", _
    "市長の発案で作ったんだ", _
    "隠し出口も用意してあるよ")
End Procedure

Procedure Towner2_Contact()
  DoMsg("壁で安全になったのはいいけど", _
    "景色が全然見えなくなっちゃった", _
    "でも仕方ないわね……")
End Procedure

Procedure Towner3_Contact()
  DoMsg("戦争反対じゃ　ふごふご")
End Procedure
