hey so i've seen a lot of carts which have a function for printing a string of text in the centre of the area on the x axis which they have depicted, and it often ends up looking something like this:
-- actual function function cprint(txt,centre,y,c) print(txt,centre-#txt*2,y,c) end -- example function _init() cls() end function _draw() cprint("Centre:64",64,0,7) for x=0,127,8 do for y=16,127,8 do line(x,0,x,127,8) line(0,y,127,0,8) end end cprint("Hello World!",64,62,7) end |

but often one thing that they don't account for is the extra space in which the characters with an id over 127 cover. for example,
-- chr(151) cprint("❎❎❎❎❎❎❎",64,62,7) cprint("❎❎❎❎❎❎",64,68,7) cprint("❎❎❎❎",64,74,7) |

in order to fix this, i first built a function which returns how many characters in the string are doubled in length,
function has_double(str) local letters=0 for i=1,#str do local char_code=ord(sub(str,i,i)) if char_code>=128 and char_code<=255 then letters+=1 end end return letters end |
then i implemented it into the "cprint" function as so
function cprint(txt,centre,y,c) for i=1,#txt do local added_letters=has_double(txt) print(text,centre-(#txt+added_letters)*2,y,c) end end |

feel free to copy
[Please log in to post a comment]