#ifndef RAGNAROK_SOURCE_CLIENT_INPUT_LANGUAGETC_H #define RAGNAROK_SOURCE_CLIENT_INPUT_LANGUAGETC_H #include "Client/Input/Language.h" #include #include #include #include struct TraditionalKeyMapping { /* 0000 */ std::uint8_t category; /* 0001 */ std::uint8_t bytes[3]; }; // VTABLE: vt_01605 struct CLanguageTC : CLanguageBase { /* 00B8 */ std::list keys; /* 00C0 */ std::array mappings; /* 04C0 */ unsigned char unknown_04C0; /* 04C1 */ std::uint8_t unknown04C1; /* 04C2 */ unsigned char unknown_04C2[2]; CLanguageTC(); ~CLanguageTC() override; const char* DisplayText() const override; int DisplayLength() const override; void ProcessKey(unsigned virtualKey) override; void RefreshComposition() override; void EndComposition() override; void ResetCandidate() override; int GetKeyStrokeSize() const; }; static_assert(sizeof(TraditionalKeyMapping) == 4); #if defined(_WIN32) && !defined(_WIN64) static_assert(offsetof(CLanguageTC, keys) == 0xB8); static_assert(offsetof(CLanguageTC, mappings) == 0xC0); static_assert(offsetof(CLanguageTC, unknown04C1) == 0x4C1); static_assert(sizeof(CLanguageTC) == 0x4C4); #endif #endif