September 06, 2025, 05:35:56 pm

The Gang Garrison 2 Forum

Please login or register.

Login with username, password and session length
Advanced search  

News:

NOTICE: Wondering where all the forums have gone?

Join the community Discord server!

Pages: [1] 2

Author Topic: Warchat v4  (Read 2808 times)

Orpheon

  • Moderator
  • *****
  • Karma: 15
  • Offline Offline
  • Posts: 6409
  • Developer
Warchat v4
« on: December 22, 2014, 10:05:13 am »



I personally liked the old warchat quite a lot, yet it did have a few flaws.
Since we're encouraged to just mod what we don't like, I changed stuff:
  • Smaller and less intrusive than the older warchat, simpler and sleeker design than chat_v2.
  • Warchat had individual colors generated based on the name, chat_v2 has team colors. Why not both? Introducing pseudorandom team-color hues (to compare, the team-only messages use baseline hue).
  • Uses same keybindings everyone is used to now as chat_v2 by default; y for global chat, u for team chat and t to hide/show black background and old text.
  • Keybindings are rebindable through controls.gg2, in a way that even supports modifier keys like the old warchat system
  • Fixed a bug in warchat where characters at the end of a line got cut off.
  • Fixed a few issues in warchat which were never noticed because people didn't tweak parameters, but would have caused problems (alpha lerping was broken, magic numbers and redundant variables).
  • Cleaned up warchat code a bit, which was already far more maintainable than chat_v2 (chat_v2 is a trainwreck, code-wise).
  • Awesome cubic interpolation fade-out (which no-one will ever notice, but it's there).
  • Like the old warchat, stable copy-pasting support.
  • The old warchat commands, which tbh serve no real purpose but are available.
The code:
Code: [Select]
/*****************************************************************************
* Copyright 2013-2014 - 'Wareya' <wareya@gmail.com>
* Copyright 2014-2015 - Anya "Orpheon" Liebendörfer <anya.liebendoerfer@gmail.com>
*
* This software is provided 'as-is', without any express or implied warranty. In
* no event will the authors be held liable for any damages arising from the use
* of this software.
*
* Permission is granted to anyone to use this software and/or its source code for
* any purpose, including commercial applications, and to alter it and distribute
* it freely, subject to the following conditions:
*
*    1. The origin of the software must not be misrepresented.
*
*    2. Modified versions of the software or its source code must not
*    be misrepresented as being the original software or source code.
*
*    3. This notice may not be removed from, or altered in, any source
*    distribution of the software.
*
*        3a. This notice is not required to be included in any compiled
*        distribution of the software, unless said distribution also
*        constitutes a source distribution.
*
*    4. In case of use or inclusion of this software in a commercial
*    product, a proper acknowledgment of this software inside the final
*    product is required.
******************************************************************************/

// Init
var createcode;
createcode = '
    if (!instance_exists(WarChatWindow))
        instance_create(0, 0, WarChatWindow);
';

object_event_add(Spectator, ev_step, ev_step_end, createcode);

// Vars
globalvar WarChatPPS;
WarChatPPS = argument1;
globalvar TEAM_ANNOUCEMENTS;
TEAM_ANNOUCEMENTS = 5;

// Rebindable chat controls
globalvar KEY_TEAMCHAT, KEY_PUBCHAT, KEY_SHOWCHAT, KEY_PRIORITIZE_TEAMCHAT;
ini_open("controls.gg2");
KEY_PUBCHAT = ini_read_real("Controls", "publicchat", ord("Y"));
KEY_TEAMCHAT = ini_read_real("Controls", "teamchat", ord("U"));
KEY_SHOWCHAT = ini_read_real("Controls", "showchat", ord("T"));
KEY_PRIORITIZE_TEAMCHAT = ini_read_real("Controls", "PrioritizeTeamChat", vk_control);
ini_write_real("Controls", "publicchat", KEY_PUBCHAT);
ini_write_real("Controls", "teamchat", KEY_TEAMCHAT);
ini_write_real("Controls", "showchat", KEY_SHOWCHAT);
ini_write_real("Controls", "PrioritizeTeamChat", KEY_PRIORITIZE_TEAMCHAT);
ini_close()

// Setup
globalvar WarChatWindow, FakeMenu;
WarChatWindow = object_add();
FakeMenu = object_add();

// Fake menu for catching input if we need it (while typing)
object_event_add(FakeMenu, ev_step, ev_step_normal, '');
object_event_add(FakeMenu, ev_draw, 0, '');
object_event_add(FakeMenu, ev_keypress, vk_enter, '');
object_event_add(FakeMenu, ev_keypress, vk_escape, '
    with(WarChatWindow)
    {
        keyboard_string = "";
        typing = false;
        fade_disabled = false;
    }
    with (FakeMenu)
        instance_destroy();
');
object_set_parent(FakeMenu, InGameMenuController);

object_set_depth(WarChatWindow, -109999);

object_event_add(WarChatWindow, ev_destroy, 0, '
    ds_list_destroy(lines);
    ds_list_destroy(times);
    ds_list_destroy(teams);
    ds_list_destroy(namecolors);
');

object_event_add(WarChatWindow, ev_create, 0, '
    mode = 0;

    x = 20;
    y = -81;
    h = 21*6;
    w = 60*6;
    inputh = 20;
    lineh = 12;
    margins = 4;
    line_length = 50;
    backcolor = $1C2018;
    entryback = $000000;
    color_blue = $DA873D;
    color_red  = $3D3DED;
    color_green = $39914D;
    color_variation = 70/127;

    scrollback = 20;

    fadestart = 120;
    fadelength = 30;
    forcedraw = 0;

    lines = ds_list_create();
    times = ds_list_create();
    teams = ds_list_create();
    namecolors = ds_list_create();

    typing = false;
    fade_disabled = false;

    ds_list_add(lines, "This server is running WarChat version 4.");
    ds_list_add(times, current_time/30);
    ds_list_add(teams, TEAM_ANNOUCEMENTS); // Announcements
    ds_list_add(namecolors, 0);

    ds_list_add(lines, "Press y to start typing in global chat.");
    ds_list_add(times, current_time/30);
    ds_list_add(teams, TEAM_ANNOUCEMENTS);
    ds_list_add(namecolors, 0);

    ds_list_add(lines, "Press u to start typing in team-only chat.");
    ds_list_add(times, current_time/30);
    ds_list_add(teams, TEAM_ANNOUCEMENTS);
    ds_list_add(namecolors, 0);

    ds_list_add(lines, "Type /help for a list of options and commands.");
    ds_list_add(times, current_time/30);
    ds_list_add(teams, TEAM_ANNOUCEMENTS);
    ds_list_add(namecolors, 0);

    b = buffer_create();

    write_ubyte(b, 99); // HELLO
    if(global.isHost)
        PluginPacketSendTo(WarChatPPS, b, global.myself);
    else
        PluginPacketSend(WarChatPPS, b, 0);
    buffer_clear(b);

    console_font = font_add("Lucida Console",8,0,0,32,127);
');

object_event_add(WarChatWindow, ev_step, ev_step_normal, '

    if (typing)
    {
        fade_disabled = true;
        if (keyboard_check_pressed(vk_enter))
        {
            // User just pressed enter, send message and close window

            typing = false;
            fade_disabled = false;
            with (FakeMenu)
                instance_destroy();

            // Blank means no message, we are done
            if (keyboard_string == "")
                exit;

            with (FakeMenu)
                instance_destroy();

            if (keyboard_string == "") // blank means no message
                break;

            // not a command
            if(string_char_at(keyboard_string, 1) != "/")
            {
                // client-side length limit
                keyboard_string = string_copy(keyboard_string, 1, 255);

                write_ubyte(b, mode);
                write_ubyte(b, string_length(keyboard_string)); // len
                write_string(b, keyboard_string); // msg
                if(global.isHost)
                    PluginPacketSendTo(WarChatPPS, b, global.myself);
                else
                    PluginPacketSend(WarChatPPS, b, 0);
                buffer_clear(b);
            }
            // its a command, bois
            else
            {
                _base = keyboard_string;
                _base = string_delete(_base, 1, 1);

                _cmdlen = string_pos(" ", _base);
                if (_cmdlen == 0) _cmdlen = string_length(_base)+1;
                _cmd = string_delete(_base, _cmdlen, string_length(_base)-_cmdlen+1);
                _arg = string_delete(_base, 1, _cmdlen);

                switch(_cmd)
                {
                    case "help":
                      //ds_list_add(lines, "...........................................................");
                        ds_list_add(lines, "Commands available:");
                        ds_list_add(times, current_time/30);
                        ds_list_add(teams, TEAM_ANNOUCEMENTS);
                        ds_list_add(namecolors, $FFFFFF);
                        ds_list_add(lines, " /hide /nofade /fade [frames] /clear /tack [num lines]");
                        ds_list_add(times, current_time/30);
                        ds_list_add(teams, TEAM_ANNOUCEMENTS);
                        ds_list_add(namecolors, $FFFFFF);
                        break;

                    case "hide":
                        fade_disabled = false;
                        break;

                    case "nofade":
                        fadelength = 0;
                        fadestart = 300;
                        ds_list_add(lines, "Fade disabled.");
                        ds_list_add(times, current_time/30);
                        ds_list_add(teams, TEAM_ANNOUCEMENTS);
                        ds_list_add(namecolors, $FFFFFF);
                        break;

                    case "fade":
                        fadestart = 200;
                        if(string_digits(_arg) == "")
                            _arg = "200";
                        fadelength = real(string_digits(_arg));

                        ds_list_add(lines, "Fade time set to " + string(fadelength) + ".");
                        ds_list_add(times, current_time/30);
                        ds_list_add(teams, TEAM_ANNOUCEMENTS);
                        ds_list_add(namecolors, $FFFFFF);
                        break;

                    case "tack":
                        if(string_digits(_arg) == "")
                            forcedraw = 5;
                        else
                            forcedraw = real(string_digits(_arg));

                        ds_list_add(lines, "At least " + string(forcedraw) + " lines will draw.");
                        ds_list_add(times, current_time/30);
                        ds_list_add(teams, TEAM_ANNOUCEMENTS);
                        ds_list_add(namecolors, $FFFFFF);
                        break;

                    case "clear":
                        ds_list_clear(lines);
                        ds_list_clear(times);
                        ds_list_clear(teams);
                        ds_list_clear(namecolors);
                        break;

                    default:
                        ds_list_add(lines, "Unknown command " + _cmd);
                        ds_list_add(times, current_time/30);
                        ds_list_add(teams, TEAM_ANNOUCEMENTS);
                        ds_list_add(namecolors, $FFFFFF);
                }
            }
        }

        // Copy-pasting
        if (keyboard_check(vk_control) and keyboard_check_pressed(ord("V")) and clipboard_has_text())
        {
            keyboard_string += clipboard_get_text();
        }

        if (keyboard_check(vk_control) and keyboard_check_pressed(ord("C")) and clipboard_has_text())
        {
            clipboard_set_text(keyboard_string);
        }
    }
    else if (not instance_exists(MenuController)) // No typing and no menu open
    {
        // KEY_PRIORITIZE_TEAMCHAT allows to use the same key for pubchat and teamchat and switch between them with a modifier key
        // eg. KEY_PUBCHAT = KEY_TEAMCHAT = vk_enter, KEY_PRIORITIZE_TEAMCHAT = vk_control allows old warchat keybinding
        if (keyboard_check_pressed(KEY_PRIORITIZE_TEAMCHAT))
        {
            if (keyboard_check_pressed(KEY_TEAMCHAT))
            {
                typing = true;
                instance_create(0, 0, FakeMenu);
                keyboard_string = "";
                mode = 102; // 102 for team message
            }
            else if (keyboard_check_pressed(KEY_PUBCHAT))
            {
                typing = true;
                instance_create(0, 0, FakeMenu);
                keyboard_string = "";
                mode = 101; // 101 for global message
            }
            else if (keyboard_check_pressed(KEY_SHOWCHAT))
            {
                fade_disabled = not fade_disabled;
            }
        }
        else
        {
            if (keyboard_check_pressed(KEY_PUBCHAT))
            {
                typing = true;
                instance_create(0, 0, FakeMenu);
                keyboard_string = "";
                mode = 101; // 101 for global message
            }
            else if (keyboard_check_pressed(KEY_TEAMCHAT))
            {
                typing = true;
                instance_create(0, 0, FakeMenu);
                keyboard_string = "";
                mode = 102; // 102 for team message
            }
            else if (keyboard_check_pressed(KEY_SHOWCHAT))
            {
                fade_disabled = not fade_disabled;
            }
        }
    }

    // Receiving chat from other players
    while (PluginPacketGetBuffer(WarChatPPS) != -1)
    {
        d = PluginPacketGetBuffer(WarChatPPS);
        cmd = read_ubyte(d);

        switch(cmd)
        {
            // Client confirms to server that it is warchat-capable
            case 99:
                if(global.isHost)
                {
                    with(PluginPacketGetPlayer(WarChatPPS))
                    {
                        has_warchat = true;
                    }
                }
                break;

            // Announcements that do not have a source player
            case 100:
                len = read_ubyte(d);
                msg = read_string(d, len);
                ds_list_add(lines, msg);
                ds_list_add(times, current_time/30);
                ds_list_add(teams, TEAM_ANNOUCEMENTS);
                ds_list_add(namecolors, $FFFFFF);
                break;

            // Global chat messages
            case 101:
                len = read_ubyte(d);
                msg = read_string(d, len);
                playerID = read_ubyte(d);

                // Server has to package the message properly and send it to all clients with warchat
                if (global.isHost)
                {
                    msg = PluginPacketGetPlayer(WarChatPPS).name + ": " + msg;
                    var buf;
                    buf = buffer_create();

                    write_ubyte(buf, 101);
                    write_ubyte(buf, string_length(msg)); // len
                    write_string(buf, msg); // msg
                    playerID = ds_list_find_index(global.players, PluginPacketGetPlayer(WarChatPPS));
                    write_ubyte(buf, playerID);

                    with (Player)
                    {
                        if (id != global.myself and variable_local_exists("has_warchat"))
                            PluginPacketSendTo(WarChatPPS, buf, id);
                    }
                    buffer_destroy(buf);
                }

                player = ds_list_find_value(global.players, playerID);

                // Split the message into the appropriate lines with appropriate metadata (colors, origin time, etc)
                var new_line;
                var rollover;
                rollover = msg;
                var first;
                first = true;
                while (true)
                {
                    new_line = string_delete(rollover, line_length+1, 255);
                    rollover = string_delete(rollover, 1, line_length);
                    ds_list_add(lines, new_line);
                    ds_list_add(times, current_time/30);
                    ds_list_add(teams, TEAM_ANNOUCEMENTS);

                    if (first)
                    {
                        if player.team == TEAM_RED
                        {
                            namecolor = color_red;
                        }
                        else if player.team == TEAM_BLUE
                        {
                            namecolor = color_blue;
                        }
                        else if player.team == TEAM_SPECTATOR
                        {
                            namecolor = color_green;
                        }

                        var r, g, b, hash;
                        hash = md5_bin(player.name + string(player));
                        r = min(255, max(0, (namecolor & $0000FF) + color_variation*(ord(string_char_at(hash, 1)) - ord(string_char_at(hash, 2)))));
                        g = min(255, max(0, ((namecolor & $00FF00)>>8) + color_variation*(ord(string_char_at(hash, 3)) - ord(string_char_at(hash, 4)))));
                        b = min(255, max(0, ((namecolor & $FF0000)>>16) + color_variation*(ord(string_char_at(hash, 5)) - ord(string_char_at(hash, 5)))));
                        namecolor = r + (g<<8) + (b<<16);

                        ds_list_add(namecolors, namecolor);
                    }
                    else
                    {
                        ds_list_add(namecolors, $FFFFFF);
                    }
                    first = false;

                    if(string_count(" ", rollover) == string_length(rollover))
                        break;
                };
                break;

            // Team-only messages
            case 102:
                len = read_ubyte(d);
                msg = read_string(d, len);
                playerID = read_ubyte(d);

                // Server has to package the message properly and send it to all clients with warchat in the targeted team
                if (global.isHost)
                {
                    msg = PluginPacketGetPlayer(WarChatPPS).name + ": " + msg;
                    var buf;
                    buf = buffer_create();

                    write_ubyte(buf, 102); // 102 for team message
                    write_ubyte(buf, string_length(msg)); // len
                    write_string(buf, msg); // msg

                    playerID = ds_list_find_index(global.players, PluginPacketGetPlayer(WarChatPPS));
                    write_ubyte(buf, playerID);

                    with (Player)
                    {
                        if (id != global.myself and variable_local_exists("has_warchat"))
                            if (team == PluginPacketGetPlayer(WarChatPPS).team and id != global.myself)
                                PluginPacketSendTo(WarChatPPS, buf, id)
                    }
                    buffer_destroy(buf);

                    // Prevent host from "receiving" enemy messages
                    if (global.myself.team != PluginPacketGetPlayer(WarChatPPS).team)
                        exit;
                }

                player = ds_list_find_value(global.players, playerID);

                // Split the message into the appropriate lines with appropriate metadata (colors, origin time, etc)
                var new_line;
                var rollover;
                rollover = msg;
                var first;
                first = true;
                while (true)
                {
                    new_line = string_delete(rollover, line_length+1, 255);
                    rollover = string_delete(rollover, 1, line_length);
                    ds_list_add(lines, new_line);
                    ds_list_add(times, current_time/30);
                    ds_list_add(teams, player.team);

                    if (first)
                    {

                        if player.team == TEAM_RED
                        {
                            namecolor = color_red;
                        }
                        else if player.team == TEAM_BLUE
                        {
                            namecolor = color_blue;
                        }
                        else if player.team == TEAM_SPECTATOR
                        {
                            namecolor = color_green;
                        }

                        var r, g, b, hash;
                        hash = md5_bin(player.name + string(player));
                        r = min(255, max(0, (namecolor & $0000FF) + color_variation*(ord(string_char_at(hash, 1)) - ord(string_char_at(hash, 2)))));
                        g = min(255, max(0, ((namecolor & $00FF00)>>8) + color_variation*(ord(string_char_at(hash, 3)) - ord(string_char_at(hash, 4)))));
                        b = min(255, max(0, ((namecolor & $FF0000)>>16) + color_variation*(ord(string_char_at(hash, 5)) - ord(string_char_at(hash, 5)))));
                        namecolor = r + (g<<8) + (b<<16);

                        ds_list_add(namecolors, namecolor);
                    }
                    else
                    {
                        ds_list_add(namecolors, $FFFFFF);
                    }
                    first = false;

                    if(string_count(" ", rollover) == string_length(rollover))
                        break;

                };
                break;
        }

        PluginPacketPop(WarChatPPS);
    }

    while (ds_list_size(lines) > scrollback)
        ds_list_delete(lines, 0);
    while (ds_list_size(times) > scrollback)
        ds_list_delete(times, 0);
    while (ds_list_size(teams) > scrollback)
        ds_list_delete(teams, 0);
    while (ds_list_size(namecolors) > scrollback)
        ds_list_delete(namecolors, 0);
');

object_event_add(WarChatWindow, ev_draw, 0, '

    if (x >= 0)
        xs = x;
    else
        xs = view_wview + x - w;

    if (y >= 0)
        ys = y;
    else
        ys = view_hview + y - h;

    xs += view_xview;
    ys += view_yview;

    // Draw chatbox
    if (fade_disabled)
    {
        draw_set_alpha(0.5);
        draw_set_color(backcolor);
        draw_rectangle(xs, ys, xs + w - 1, ys + h - inputh - 1, false);
        if (typing)
        {
            draw_set_color(entryback);
            draw_rectangle(xs, ys + h - inputh, xs + w - 1, ys + h - 1, false);
        }
    }

    // Draw chat lines as appropriate
    draw_set_halign(fa_left);
    draw_set_valign(fa_top);
    draw_set_alpha(1);
    draw_set_color(c_white);
    draw_set_font(console_font);
    skipline = 0;
    for (i = 0; i < ds_list_size(lines) and i < floor((h-inputh-margins*2)/lineh); i += 1)
    {
        if (!fade_disabled and i >= forcedraw) // Fadeout for recent messages when not in chatbox mode
        {
            var t;
            t = current_time/30 - ds_list_find_value(times, ds_list_size(times)-i-1);
            // A case for t <= 200 is not necessary because those should always come before t > 200 messages.
            if (t > fadestart and t < fadestart+fadelength)
            {
                // Reusing t as the interpolation scalar
                // Reusing variables like this is criminal, I know, but in this case is harmless, easy and also "t" makes sense in both contexts
                t = 1 - (t-fadestart)/fadelength;
                // Cubic interpolation: 3t^2 - 2t^3 (probably unnecessary, but does not really hurt)
                draw_set_alpha(t*t*(3 - 2*t));
            }
            else if (t >= fadestart+fadelength)
            {
                break;
            }
        }
        var str;

        str = ds_list_find_value(lines, ds_list_size(lines)-i-1);
        str = string_replace_all(str, "#", "\#");
        str = string_replace_all(str, chr(10), "");
        str = string_replace_all(str, chr(13), "");
        var _str;
        _str = string_delete(str, 1, 0*line_length);
        str = string_delete(str, line_length+1, string_length(_str)-line_length);

        // dropshadow
        draw_set_color(c_black);
        draw_text(xs+margins+1, 1+ys + h - inputh - margins - (i+1)*lineh, str);

        // top
        var team;
        var name;
        var namecolor;
        var isnamecolored;
        isnamecolored = 0;

        // find name and color of name
        name = string_pos(":", str); // length
        name = string_delete(str, name, string_length(str)-name+1); // name

        namecolor = ds_list_find_value(namecolors, ds_list_size(namecolors)-i-1);
        isnamecolored = (namecolor != $FFFFFF) and (namecolor != 0);

        // Find the targeted team, set appropriate color
        team = ds_list_find_value(teams, ds_list_size(teams)-i-1);
        if(team == TEAM_RED)
            draw_set_color(color_red);
        else if(team == TEAM_BLUE)
            draw_set_color(color_blue);
        else if(team == TEAM_SPECTATOR)
            draw_set_color(color_green);
        else
            draw_set_color(c_white);

        draw_text(xs+margins, ys + h - inputh - margins - (i+1)*lineh, str);

        if(isnamecolored)
        {
            draw_set_color(namecolor);
            draw_text(xs+margins, ys + h - inputh - margins - (i+1)*lineh, name);
        }
    }
    if (typing)
    {
        var str;
        str = string_replace_all(keyboard_string, "#", "\#");
        str = string_replace_all(str, chr(10), "");
        str = string_replace_all(str, chr(13), "");
        var _str;
        _str = string_delete(str, 1, 0*line_length-string_length(global.myself.name)-2);
        str = string_delete(str, line_length-string_length(global.myself.name)-2+1, string_length(_str)-line_length-string_length(global.myself.name)-2);

        // dropshadow
        draw_set_color(c_black);
        draw_text(xs+margins+1, 1+ys + h - inputh + (inputh-lineh)/2, str);

        // top
        if(mode == 102 and global.myself.team == TEAM_RED)
            draw_set_color(color_red);
        else if(mode == 102 and global.myself.team == TEAM_BLUE)
            draw_set_color(color_blue);
        else
            draw_set_color(c_white);

        draw_text(xs+margins, ys + h - inputh + (inputh-lineh)/2, str);
    }

    // Reset font
    draw_set_font(global.gg2Font);
');


I am not 100% certain the pseudo-random color generation works well, it needs testing and ideally someone to check what values ord(md5_bin(...)) gives.

Requesting an upload to the server plugin database.
« Last Edit: August 31, 2025, 04:01:03 pm by MedO »
Logged

Orpheon

  • Moderator
  • *****
  • Karma: 15
  • Offline Offline
  • Posts: 6409
  • Developer
Re: Warchat v4
« Reply #1 on: December 22, 2014, 10:29:57 am »

Added rebinding support through controls.gg2.
Code: [Select]
[Controls]
publicchat=89
teamchat=85
showchat=84
PrioritizeTeamChat=17

PrioritizeTeamChat might need some explanation. By default, if you set publicchat and teamchat to the same key, it will open a public chat. PrioritizeTeamChat lets you to modify that by pressing a different key. This allows one to create setups such as the old warchat "enter for public, ctrl-enter for team", which was voiced as a desire.
Logged

Phantom Brave

  • All Hail Classicwell
  • Moderator
  • *****
  • Karma: 70
  • Offline Offline
  • Posts: 12519
  • Another one --
Re: Warchat v4
« Reply #2 on: December 22, 2014, 10:33:53 am »

Added, replacing old warchat.
Logged

http://steamcommunity.com/id/wareya/
ladies and gentlemen i would like to announce that the fact of the matter is up that the fact of the matter is a fact and it matters

Heenok

  • 2013 Haxxy Award Winner
  • *
  • Karma: 8
  • Offline Offline
  • Posts: 289
Re: Warchat v4
« Reply #3 on: December 28, 2014, 08:17:18 pm »

here some suggestions
-only use shades of blue and red please, no purple/green, and ideally keep the colour constant for the same player
-place the chatbox higher so that it doesn't overlap with other ui stuff
(click to show/hide)
-when you play in full screen some artifacts appears in the text characters (maybe make the font bigger?)

-display name changes and joining/leaving server like on lorgan's chat
-like the other chat, could it be possible to scroll to look at the chat log, and preserve a part of the log between maps so you can read what people were spamming at the end of the match?
-if you use shift during your chat input, the scoreboard will popup for one frame when you send your message (really minor issue, probably doesn't happen if you map the scoreboard to another key)



from the end user point of view, the only improvement over chat_v2 that i can notice for the moment is the ability to copy paste while a lot of other features are missing

and using a spam macro, it appears that there's no cooldown or automute that prevent spam, or was it because i was the host?


Logged

Phantom Brave

  • All Hail Classicwell
  • Moderator
  • *****
  • Karma: 70
  • Offline Offline
  • Posts: 12519
  • Another one --
Re: Warchat v4
« Reply #4 on: December 28, 2014, 09:49:21 pm »

those artefacts show up on any anti-aliased font. don't know why you guys like using that sort of garbage in gg2. old warchat used the default gg2 font for a reason.
Logged

http://steamcommunity.com/id/wareya/
ladies and gentlemen i would like to announce that the fact of the matter is up that the fact of the matter is a fact and it matters

12 [pl/de]

  • New Account
  • Karma: 0
  • Offline Offline
  • Posts: 2
Re: Warchat v4
« Reply #5 on: February 12, 2015, 08:54:53 am »

Why does Warchat v4 clears OR resets the chat field?

In chat_2 you was able to see post from the previous match.
Logged

Phantom Brave

  • All Hail Classicwell
  • Moderator
  • *****
  • Karma: 70
  • Offline Offline
  • Posts: 12519
  • Another one --
Re: Warchat v4
« Reply #6 on: February 12, 2015, 04:32:56 pm »

Not sure why it does that. It's not intentional on my part. Orpheon might have added it. If it's important enough it will be added in a later version.
Logged

http://steamcommunity.com/id/wareya/
ladies and gentlemen i would like to announce that the fact of the matter is up that the fact of the matter is a fact and it matters

Poop

  • 2013 Haxxy Award Winner
  • *
  • Karma: 4
  • Offline Offline
  • Posts: 949
Re: Warchat v4
« Reply #7 on: February 12, 2015, 04:37:43 pm »

Because War Chat is designed for communication between serious players. Strategy and stuff.
that doesn't explain anything tho.

Phantom Brave

  • All Hail Classicwell
  • Moderator
  • *****
  • Karma: 70
  • Offline Offline
  • Posts: 12519
  • Another one --
Re: Warchat v4
« Reply #8 on: February 12, 2015, 05:06:05 pm »

warchat is a play on my name, it doesn't actually have anything to do with wars
« Last Edit: February 12, 2015, 05:06:16 pm by Phantom Brave »
Logged

http://steamcommunity.com/id/wareya/
ladies and gentlemen i would like to announce that the fact of the matter is up that the fact of the matter is a fact and it matters

Saniblues

  • Onion Knight
  • Administrator
  • *****
  • Karma: -1304
  • Offline Offline
  • Posts: 12205
Re: Warchat v4
« Reply #9 on: February 12, 2015, 09:34:06 pm »

So it it like "Wario" or "Wear" in Wareya?
Logged
Quote from: mop
Quote from: MR MAGN3TIC
I don't like it.  :nah:
Oh, well, you might as well pack up and stop now, because he doesn't like it
I'm bored out of my skull, Lets play a different game!
Lets take a visit down below And cast the world in flames!

ZaSpai

  • Ray Bann's Minion
  • *
  • Karma: 14
  • Offline Offline
  • Posts: 2169
  • "Eeh?! We're just allies!"
Re: Warchat v4
« Reply #10 on: February 12, 2015, 10:42:04 pm »

now I can't get waruchyatto out of my head as a pronunciation :/
unfortunate implications over waru(i)

Just testing it now it feels very smooth (sadly simplefaith isn't the best map to see white text :p) apart from the aforementioned messages not saving from last round issue

Would it be possible for teamspeak to have player names in a slightly more saturated team color (not pure FF0000 or 0000FF obviously)? just so it pops out a little more for teamspeak cf allchat
Logged
Right behind you when you most expect it | classicwell master race

Phantom Brave

  • All Hail Classicwell
  • Moderator
  • *****
  • Karma: 70
  • Offline Offline
  • Posts: 12519
  • Another one --
Re: Warchat v4
« Reply #11 on: February 13, 2015, 09:12:36 am »

So it it like "Wario" or "Wear" in Wareya?
It's like "war".
Logged

http://steamcommunity.com/id/wareya/
ladies and gentlemen i would like to announce that the fact of the matter is up that the fact of the matter is a fact and it matters

Chorus

  • Full Member
  • ***
  • Karma: 1
  • Offline Offline
  • Posts: 327
Re: Warchat v4
« Reply #12 on: February 28, 2015, 06:24:25 pm »

Is there no server sent plugin for this? I don't code, but server sent plugins are easier to handle than without them.

ZaSpai

  • Ray Bann's Minion
  • *
  • Karma: 14
  • Offline Offline
  • Posts: 2169
  • "Eeh?! We're just allies!"
Re: Warchat v4
« Reply #13 on: February 28, 2015, 07:37:41 pm »

Isn't it just the latest version of warchat??
Logged
Right behind you when you most expect it | classicwell master race

Phantom Brave

  • All Hail Classicwell
  • Moderator
  • *****
  • Karma: 70
  • Offline Offline
  • Posts: 12519
  • Another one --
Re: Warchat v4
« Reply #14 on: March 01, 2015, 04:11:35 am »

Yes.
Logged

http://steamcommunity.com/id/wareya/
ladies and gentlemen i would like to announce that the fact of the matter is up that the fact of the matter is a fact and it matters
Pages: [1] 2
 

Page created in 0.046 seconds with 37 queries.