Quantcast
Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. The Diamond Casino Heist
      2. Find Lobbies & Players
      3. Guides & Strategies
      4. Vehicles
      5. Content Creator
      6. Help & Support
    2. Red Dead Online

      1. Frontier Pursuits
      2. Find Lobbies & Outlaws
      3. Help & Support
    3. Crews

    1. Red Dead Redemption 2

      1. PC
      2. Gameplay
      3. Missions
      4. Help & Support
    2. Red Dead Redemption

    1. Grand Theft Auto Series

    2. GTA 6

      1. St Andrews Cathedral
    3. GTA V

      1. PC
      2. Guides & Strategies
      3. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA Chinatown Wars

    6. GTA Vice City Stories

    7. GTA Liberty City Stories

    8. GTA San Andreas

      1. Guides & Strategies
      2. Help & Support
    9. GTA Vice City

      1. Guides & Strategies
      2. Help & Support
    10. GTA III

      1. Guides & Strategies
      2. Help & Support
    11. Top Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. DYOM
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    3. Gangs

    1. Announcements

    2. Support

    3. Suggestions

Sign in to follow this  
kagikn

How to draw long multibyte strings

Recommended Posts

kagikn

There are workarounds to add long single-byte characters to the stack in GTA, but as for long multibyte strings, there aren't any workarounds.
I thought I needed to find how to draw long multibyte strings when I was making Insane Stunt Bonus V (I'll upload to GTA5-Mods.com when I release it) and trying to draw long Japanese texts.
Anyway, this is how to get sliced multibyte strings whose byte lengths are properly limited to 99 or less.

// in C#public static string[] ToSlicedStrings(string input, int maxByteLengthPerString = 99){    if (maxByteLengthPerString < 0)    {        throw new ArgumentOutOfRangeException("maxLengthPerString");    }    if (string.IsNullOrEmpty(input) || maxByteLengthPerString == 0)    {        return new string[0];    }    var utf8ByteCount = Encoding.UTF8.GetByteCount(input);    if (utf8ByteCount <= maxByteLengthPerString )    {        return new string[] { input };    }    var initListCapacity = utf8ByteCount / maxByteLengthPerString;    if (utf8ByteCount % maxByteLengthPerString > 0)    {        initListCapacity += 1;    }    var stringList = new List<string>(initListCapacity);    var startIndex = 0;    for (int i = 0; i < input.Length; i++)    {        var length = i - startIndex;        if (Encoding.UTF8.GetByteCount(input.Substring(startIndex, length)) > maxByteLengthPerString)        {            stringList.Add(input.Substring(startIndex, length - 1));            i -= 1;            startIndex = (startIndex + length - 1);        }    }    stringList.Add(input.Substring(startIndex, input.Length - startIndex));    return stringList.ToArray();}// I'll change the method name if I find a better name or somebody tells me.// Probably I could do with StringBuilder but I need to test it before I post it here.

When you use some natives like ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME or _BEGIN_TEXT_COMMAND_WIDTH, you can use these strings by calling _SET_TEXT_COMPONENT_FORMAT with CELL_EMAIL_BCON and then calling those natives repeatedly with individual strings.

Yeah, I will post a workaround for C++, but I need to make one first.

 

EDIT: Fixed not slicing at a correct position.

Edited by kagikn
  • Like 1

Share this post


Link to post
Share on other sites
uNiverselEgacy

This looks quite inefficient. Just write a custom UTF8 decoder. It only takes several lines of code.

Share this post


Link to post
Share on other sites
kagikn

Could you show me an example? I can't come up with anything better in performance. I tried a similar method using StringBuilder, but it was worse in performance.

This methods costs about 1600 ticks for 100-200 byte string, and this doesn't cost much FPS (at least calling Enum.GetValues with Control enum costs way more time)

If you slice strings by using Math.Min when you slice ASCII characters, you can save many (timer) ticks, though.

Edited by kagikn

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.