From be21eebb0830e0b1c2d24237a51202adee635010 Mon Sep 17 00:00:00 2001 From: obligaron Date: Sat, 21 Aug 2021 20:02:07 +0200 Subject: [PATCH] Add "visit" debug command --- Source/debug.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/Source/debug.cpp b/Source/debug.cpp index ba5f919fc..82e453993 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -16,6 +16,7 @@ #include "lighting.h" #include "setmaps.h" #include "spells.h" +#include "towners.h" #include "utils/language.h" #include "quests.h" @@ -182,6 +183,60 @@ std::string DebugCmdLoadMap(const std::string_view parameter) return fmt::format("Level {} is not known. Do you want to write a mod?", level); } +std::unordered_map TownerShortNameToTownerId = { + { "griswold", _talker_id::TOWN_SMITH }, + { "pepin", _talker_id::TOWN_HEALER }, + { "ogden", _talker_id::TOWN_TAVERN }, + { "cain", _talker_id::TOWN_STORY }, + { "farnham", _talker_id::TOWN_DRUNK }, + { "adria", _talker_id::TOWN_WITCH }, + { "gillian", _talker_id::TOWN_BMAID }, + { "wirt", _talker_id ::TOWN_PEGBOY }, + { "lester", _talker_id ::TOWN_FARMER }, + { "girl", _talker_id ::TOWN_GIRL }, + { "nut", _talker_id::TOWN_COWFARM }, +}; + +std::string DebugCmdVisitTowner(const std::string_view parameter) +{ + auto &myPlayer = Players[MyPlayerId]; + + if (setlevel || myPlayer.plrlevel != 0) + return "What kind of friends do you have in dungeons?"; + + if (parameter.empty()) { + std::string ret; + ret = "Who? "; + for (auto &entry : TownerShortNameToTownerId) { + ret.append(" "); + ret.append(entry.first); + } + return ret; + } + + auto it = TownerShortNameToTownerId.find(parameter); + if (it == TownerShortNameToTownerId.end()) + return fmt::format("{} is unknown. Perhaps he is a ninja?", parameter); + + for (auto &towner : Towners) { + if (towner._ttype != it->second) + continue; + + CastSpell( + MyPlayerId, + SPL_TELEPORT, + myPlayer.position.tile.x, + myPlayer.position.tile.y, + towner.position.x, + towner.position.y, + 1); + + return fmt::format("Say hello to {} from me.", parameter); + } + + return fmt::format("Couldn't find {}.", parameter); +} + std::string DebugCmdResetLevel(const std::string_view parameter) { auto &myPlayer = Players[MyPlayerId]; @@ -291,6 +346,7 @@ std::vector DebugCmdList = { { "give quest", "Enable a given quest.", "({id})", &DebugCmdQuest }, { "changelevel", "Moves to specifided {level} (use 0 for town).", "{level}", &DebugCmdWarpToLevel }, { "map", "Load a quest level {level}.", "{level}", &DebugCmdLoadMap }, + { "visit", "Visit a towner.", "{towner}", &DebugCmdVisitTowner }, { "restart", "Resets specified {level}.", "{level}", &DebugCmdResetLevel }, { "god", "Togggles godmode.", "", &DebugCmdGodMode }, { "r_drawvision", "Togggles vision debug rendering.", "", &DebugCmdVision },