Wymaga testu w g1. Wskazówki od Lehony przydatne były.
// Ported from g2 into g1 - CHICKEN
const int PS_X = 0;
const int PS_Y = 1;
const int PS_VMax = 8192;
var int Print_Screen[2];
var int Print_Ratio; //float
func void _Print_Ratio() {
Print_Ratio = mkf(Print_Screen[PS_X]);
Print_Ratio = divf(Print_Ratio, mkf(Print_Screen[PS_Y]));
};
func void Print_GetScreenSize() {
Print_Screen[PS_X] = STR_ToInt(MEM_GetGothOpt("VIDEO", "zVidResFullscreenX"));
Print_Screen[PS_Y] = STR_ToInt(MEM_GetGothOpt("VIDEO", "zVidResFullscreenY"));
_Print_Ratio();
};
func int Print_ToVirtual(var int pxl, var int dim) {
Print_GetScreenSize();
pxl *= 8192;
if(dim == PS_X) {
return pxl / Print_Screen[PS_X];
}
else if(dim == PS_Y) {
return pxl / Print_Screen[PS_Y];
};
return pxl / dim;
};
const int zFontMan = 9291548;
const int zCFontMan__Load = 7204928;
const int zCFontMan__GetFont = 7205408;
const int zCFont__GetFontX = 7209488;
const int zCFont__GetFontY = 7209472;
func int zCFontMan_Load(var string font) {
CALL_zStringPtrParam(font);
CALL__thiscall(MEM_ReadInt(zFontMan), zCFontMan__Load);
return CALL_RetValAsInt();
};
func int Print_GetFont(var string font) {
var int loadFont; loadFont = zCFontMan_Load(font);
CALL_IntParam(loadFont);
CALL__thiscall(MEM_ReadInt(zFontMan), zCFontMan__GetFont);
return CALL_RetValAsInt();
};
func int Print_GetStringWidth(var string s, var string font) {
var int adr; adr = Print_GetFont(font);
CALL_zStringPtrParam(s);
CALL__thiscall(adr, zCFont__GetFontX);
return CALL_RetValAsInt();
};
func int Print_GetFontHeight(var string font) {
var int adr; adr = Print_GetFont(font);
CALL__thiscall(adr, zCFont__GetFontY);
return CALL_RetValAsInt();
};
func void PrintColored(var string msg, var int posx, var int posy, var string font, var int timeInMs, var int color){
PrintScreen ("", -1, -1, "", 2);
MEM_InitGlobalInst();
var zCView view; view = _^(MEM_Game.array_view[0]);
if (view.textLines_next) {
var zCList list; list = _^(view.textLines_next);
var zCViewText viewT; viewT = _^(list.data);
viewT._vtbl = 8251988; //0x7DEA54 g1
viewT.timed = (timeInMs != -1);
if (timeInMs != -1) { viewT.timer = mkf(timeInMs); };
viewT.inPrintWin = 0;
viewT.font = Print_GetFont(font);
viewT.color = color;
viewT.colored = 1;
viewT.posx = posx;
if (posx == -1) {
viewT.posx = (PS_VMax - Print_ToVirtual(Print_GetStringWidth(msg, font), PS_X)) / 2;
};
viewT.posy = posy;
if (posy == -1) {
viewT.posy = (PS_VMax - Print_ToVirtual(Print_GetFontHeight(font), PS_Y)) / 2;
};
viewT.text = msg;
//Print(viewT.text);
};
};
Testowałem w g2, nie wiem jak w g1. Trochę rzeczy pożyczyłem z LeGo.
Adresy przeportowane.
Czas liczony w milisekundach, a kolor trzeba podać w RGBA.