diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index adbd4931..3e3a7b8e 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -1043,6 +1043,15 @@ struct SC_SimpleMail_81 { struct SC_SimpleMail_PC_81 : SC_SimpleMail_81 { }; struct SC_SimpleMail_V3_81 : SC_SimpleMail_81 { }; +struct SC_SimpleMail_BB_81 { + le_uint32_t player_tag; + le_uint32_t from_guild_card_number; + ptext from_name; + le_uint32_t to_guild_card_number; + ptext received_date; + ptext text; +}; + // 82: Invalid command // 83 (S->C): Lobby menu diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 16c88398..03105bef 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -1848,6 +1848,11 @@ void process_simple_mail(shared_ptr s, shared_ptr c, to_guild_card_number = cmd.to_guild_card_number; message = cmd.text; + } else if (c->version == GameVersion::BB) { + const auto& cmd = check_size_t(data); + to_guild_card_number = cmd.to_guild_card_number; + message = cmd.text; + } else { // TODO send_text_message(c, u"$C6Simple Mail is not\nsupported yet on\nthis platform."); diff --git a/src/SendCommands.cc b/src/SendCommands.cc index 7603bd6c..c37d48f4 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -566,6 +566,21 @@ void send_simple_mail_t( send_command_t(c, 0x81, 0x00, cmd); } +void send_simple_mail_bb( + shared_ptr c, + uint32_t from_guild_card_number, + const u16string& from_name, + const u16string& text) { + SC_SimpleMail_BB_81 cmd; + cmd.player_tag = 0x00010000; + cmd.from_guild_card_number = from_guild_card_number; + cmd.from_name = from_name; + cmd.to_guild_card_number = c->license->serial_number; + cmd.received_date = decode_sjis(format_time(now())); + cmd.text = text; + send_command_t(c, 0x81, 0x00, cmd); +} + void send_simple_mail(shared_ptr c, uint32_t from_guild_card_number, const u16string& from_name, const u16string& text) { if ((c->version == GameVersion::GC) || (c->version == GameVersion::XB)) { @@ -574,6 +589,8 @@ void send_simple_mail(shared_ptr c, uint32_t from_guild_card_number, } else if (c->version == GameVersion::PC) { send_simple_mail_t( c, from_guild_card_number, from_name, text); + } else if (c->version == GameVersion::BB) { + send_simple_mail_bb(c, from_guild_card_number, from_name, text); } else { throw logic_error("unimplemented versioned command"); }