diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index c2a956eda..65dc4a65b 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -69,7 +69,7 @@ local int SavedMapPositionX[4]; /// Saved map position X local int SavedMapPositionY[4]; /// Saved map position Y local char Input[80]; /// line input for messages/long commands local int InputIndex; /// current index into input -local char InputStatusLine[80]; /// Last input status line +local char InputStatusLine[99]; /// Last input status line global char GameRunning; /// Current running state global char GamePaused; /// Current pause state global char OrdersDuringPause; /// Allow giving orders in pause mode. @@ -864,6 +864,8 @@ local int CommandKey(int key) */ local int InputKey(int key) { + char ChatMessage[sizeof(Input)+40]; + switch (key) { case '\r': if (Input[0] == '(') { @@ -953,7 +955,8 @@ local int InputKey(int key) // FIXME: only to selected players ... } } - NetworkChatMessage(Input); + sprintf(ChatMessage, "<%s> %s", ThisPlayer->Name, Input); + NetworkChatMessage(ChatMessage); case '\033': ClearStatusLine(); diff --git a/src/ui/mainscr.cpp b/src/ui/mainscr.cpp index ec40c5dc6..786a1024d 100644 --- a/src/ui/mainscr.cpp +++ b/src/ui/mainscr.cpp @@ -708,12 +708,28 @@ global void DrawMessage(void) */ local void AddMessage(const char *msg) { + char *ptr; + char *message; + if (MessagesCount == MESSAGES_MAX) { ShiftMessages(); } - DebugCheck(strlen(msg) >= sizeof(Messages[0])); - strcpy(Messages[MessagesCount], msg); + + message = Messages[MessagesCount]; + strncpy(message, msg, sizeof(Messages[0])-1); + message[sizeof(Messages[0])-1] = '\0'; + + ptr = message + strlen(message); + + while (VideoTextLength(GameFont, message) >= 440+(VideoWidth-640)/2 ) { + *--ptr = '\0'; + } + MessagesCount++; + + if (strlen(msg) != ptr-message) { + AddMessage(msg+(ptr-message)); + } } /**