Building is permitted. Use render targets.
Edit: I have code, enjoy.
Put CreateLargeCharacters; in @Initialize.
Dump this somewhere else:
sub CreateLargeCharacters{
//"Building"
CreateRenderTarget("retroLarge", 512, 512);
SetRenderTarget("retroLarge");
//mapping pixels in the shape of numbers, [character][row][column], 1 = solid, 0 = transparent
let numberPixels = [
["111","101","101","101","111"], //0
["010","010","010","010","010"], //1
["111","001","111","100","111"], //2
["111","001","011","001","111"], //3
["101","101","111","001","001"], //4
["111","100","111","001","111"], //5
["111","100","111","101","111"], //6
["111","101","001","001","001"], //7
["111","101","111","101","111"], //8
["111","101","111","001","111"], //9
];
SetTexture(retro);
SetGraphicRect(0, 0, 4, 4);
//paints numbers on the image, exactly like they are in retro but 4x their size
ascent(i in 0..10){
ascent(j in 0..5){
ascent(k in 0..3){
if(numberPixels[i][j][k]=='1'){
DrawGraphic(2 + i*16 + k*4, 2 + j*4);
}
}
}
}
//mapping pixels in the shape of characters, [character][row][column], 1 = solid, 0 = transparent
let characterPixels = [
["010","101","111","101","101"], //A
["110","101","110","101","110"], //B
["011","100","100","100","011"], //C
["110","101","101","101","110"], //D
["111","100","110","100","111"], //E
["111","100","110","100","100"], //F
["011","100","101","101","011"], //G
["101","101","111","101","101"], //H
["111","010","010","010","111"], //I
["001","001","001","101","010"], //J
["101","101","110","101","101"], //K
["100","100","100","100","111"], //L
["101","111","111","101","101"], //M
["101","101","111","111","101"], //N
["010","101","101","101","010"], //O
["110","101","110","100","100"], //P
["010","101","101","101","011"], //Q
["110","101","110","101","101"], //R
["011","100","010","001","110"], //S
["111","010","010","010","010"], //T
["101","101","101","101","011"], //U
["101","101","101","101","010"], //V
["101","101","111","111","111"], //W
["101","101","010","101","101"], //X
["101","101","010","010","010"], //Y
["111","001","010","100","111"], //Z
];
ascent(i in 0..26){
ascent(j in 0..5){
ascent(k in 0..3){
if(characterPixels[i][j][k]=='1'){
DrawGraphic(2 + i*16 + k*4, 26 + j*4);
}
}
}
}
SetRenderTarget("DEFAULT");
}
task DrawBigInteger(x, y, Number, scale, layer){
let number = ToString(Number);
loop(7){
number = erase(number, length(number)-1);
}
function GetNumberXRect(num){
return ((num-48)*16);
}
let rect = [];
let objArr = [];
ascent(i in 0..length(number)){
rect = rect ~ [GetNumberXRect(number[i])];
objArr = objArr ~ [Obj_Create(OBJ_EFFECT)];
}
ascent(i in 0..length(number)){
ObjEffect_SetTexture(objArr[i], "retroLarge");
ObjEffect_SetPrimitiveType(objArr[i], PRIMITIVE_TRIANGLEFAN);
ObjEffect_SetLayer(objArr[i], layer);
ObjEffect_SetScale(objArr[i], scale, scale);
ObjEffect_CreateVertex(objArr[i], 4);
ObjEffect_SetVertexUV(objArr[i], 0, 0 + rect[i], 0);
ObjEffect_SetVertexUV(objArr[i], 1, 16 + rect[i], 0);
ObjEffect_SetVertexUV(objArr[i], 2, 16 + rect[i], 24);
ObjEffect_SetVertexUV(objArr[i], 3, 0 + rect[i], 24);
ObjEffect_SetVertexXY(objArr[i], 0, -8, -12);
ObjEffect_SetVertexXY(objArr[i], 1, 8, -12);
ObjEffect_SetVertexXY(objArr[i], 2, 8, 12);
ObjEffect_SetVertexXY(objArr[i], 3, -8, 12);
Obj_SetPosition(objArr[i], x + i*14*scale, y);
}
yield;
yield;
ascent(i in 0..length(number)){
Obj_Delete(objArr[i]);
}
}
task DrawBigString(x, y, string, scale, layer){
function GetCharXRect(car){
if(car== ' '){
return 460;
}else if((car-0)<97){
return ((car-65)*16);
}else{
return ((car-97)*16);
}
}
let rect = [];
let objArr = [];
ascent(i in 0..length(string)){
rect = rect ~ [GetCharXRect(string[i])];
objArr = objArr ~ [Obj_Create(OBJ_EFFECT)];
}
ascent(i in 0..length(string)){
ObjEffect_SetTexture(objArr[i], "retroLarge");
ObjEffect_SetPrimitiveType(objArr[i], PRIMITIVE_TRIANGLEFAN);
ObjEffect_SetLayer(objArr[i], layer);
ObjEffect_SetScale(objArr[i], scale, scale);
ObjEffect_CreateVertex(objArr[i], 4);
ObjEffect_SetVertexUV(objArr[i], 0, 0 + rect[i], 24);
ObjEffect_SetVertexUV(objArr[i], 1, 16 + rect[i], 24);
ObjEffect_SetVertexUV(objArr[i], 2, 16 + rect[i], 48);
ObjEffect_SetVertexUV(objArr[i], 3, 0 + rect[i], 48);
ObjEffect_SetVertexXY(objArr[i], 0, -8, -12);
ObjEffect_SetVertexXY(objArr[i], 1, 8, -12);
ObjEffect_SetVertexXY(objArr[i], 2, 8, 12);
ObjEffect_SetVertexXY(objArr[i], 3, -8, 12);
Obj_SetPosition(objArr[i], x + i*14*scale, y);
}
yield;
yield;
ascent(i in 0..length(string)){
Obj_Delete(objArr[i]);
}
}
Adds:
DrawBigInteger(x, y, integer, scale, layer);
Draws a large positive integer at the location. Each character is 12x20 with 2 pixel spacing between. I don't recommend scaling them to anything but 1, they will blur otherwise.
DrawBigString(x, y, "String", scale, layer);
Draws a large alphabetical string at the location. No special characters, only the 26 letters and a space. Characters are automatically converted to upper case. Again, scaling them to anything but 1 will blur the letters, don't do it.
These functions are not optimized so if you want to draw a million things at once I'd advise taking a look at them and rebuilding them to your specifications.
ilu drakles