diff --git a/src/debugger/dap_frontend.cpp b/src/debugger/dap_frontend.cpp index cf8f46e..7bdb5a0 100644 --- a/src/debugger/dap_frontend.cpp +++ b/src/debugger/dap_frontend.cpp @@ -8,6 +8,7 @@ #include "common.h" #include "encoding.h" #include "nact.h" +#include "ags.h" #include "debugger/debugger.h" using Json = nlohmann::json; @@ -107,6 +108,14 @@ public: } void on_palette_change() override { + Json event = { + {"type", "event"}, + {"event", "xsystem35.paletteChanged"}, + {"body", { + {"version", ++palette_version} + }} + }; + send_json(event); } bool console_output(const char* format, va_list ap) override { @@ -225,6 +234,8 @@ private: } else if (command == "next") { cmd_next(args, resp); continue_repl = false; + } else if (command == "xsystem35.palette") { + cmd_palette(args, resp); } else { fprintf(stderr, "Unknown command '%s'\n", command.c_str()); resp["success"] = false; @@ -498,10 +509,19 @@ private: resp["success"] = true; } + void cmd_palette(Json& args, Json& resp) { + resp["success"] = true; + resp["body"] = { + {"version", palette_version}, + {"palette", g_nact->ags->get_screen_palette()}, + }; + } + std::queue queue; bool initialized = false; int seq_ = 0; std::string src_dir; + unsigned palette_version = 0; }; // static diff --git a/src/sys/ags.h b/src/sys/ags.h index 2ebf718..f0679e0 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -103,6 +103,7 @@ public: void set_cg_file(const char *file_name); void set_palette(int index, int r, int g, int b); + const Palette& get_screen_palette() const { return screen_palette; } uint8 get_pixel(int dest, int x, int y); void set_pixel(int dest, int x, int y, uint8 color); diff --git a/src/sys/ags_draw.cpp b/src/sys/ags_draw.cpp index f7e3f56..afb5cd2 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -12,6 +12,7 @@ #include #include "dri.h" #include "game_id.h" +#include "debugger/debugger.h" void AGS::load_cg(int page, int transparent) { @@ -71,6 +72,10 @@ void AGS::load_cg(int page, int transparent) } break; } +#ifdef ENABLE_DEBUGGER + if (g_debugger) + g_debugger->on_palette_change(); +#endif } void AGS::copy(int sx, int sy, int ex, int ey, int dx, int dy) diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index 3e9b9e9..602117b 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -132,6 +132,10 @@ void NACT::execute() // パレット設定が終わった ags->flush_screen(true); set_palette = false; +#ifdef ENABLE_DEBUGGER + if (g_debugger) + g_debugger->on_palette_change(); +#endif } if(verb_obj && cmd != '[' && cmd != ':') { // 動詞-目的語メニューの表示 diff --git a/src/sys/nact.h b/src/sys/nact.h index f1ec3a5..e24c824 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -100,9 +100,9 @@ public: virtual ~NACT(); Scenario sco; + AGS* ags; protected: - AGS* ags; MAKO* mako; MsgSkip* msgskip;