Set of web tools to convert and manipulate fxi, g1r and g1m files
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
G1rFxiTools/common/functions.php

188 lines
7.2 KiB

<?php
$Fxi2RawArray = array(
255 => "18", 254 => "19", 253 => "1a", 252 => "1b", 251 => "1c",
250 => "1d", 249 => "1e", 248 => "1f", 247 => "10", 246 => "11",
245 => "12", 244 => "13", 243 => "14", 242 => "15", 241 => "16",
240 => "17", 239 => "08", 238 => "09", 237 => "0a", 236 => "0b",
235 => "0c", 234 => "0d", 233 => "0e", 232 => "0f", 231 => "00",
230 => "01", 229 => "02", 228 => "03", 227 => "04", 226 => "05",
225 => "06", 224 => "07", 223 => "38", 222 => "39", 221 => "3a",
220 => "3b", 219 => "3c", 218 => "3d", 217 => "3e", 216 => "3f",
215 => "30", 214 => "31", 213 => "32", 212 => "33", 211 => "34",
210 => "35", 209 => "36", 208 => "37", 207 => "28", 206 => "29",
205 => "2a", 204 => "2b", 203 => "2c", 202 => "2d", 201 => "2e",
200 => "2f", 199 => "20", 198 => "21", 197 => "22", 196 => "23",
195 => "24", 194 => "25", 193 => "26", 192 => "27", 191 => "58",
190 => "59", 189 => "5a", 188 => "5b", 187 => "5c", 186 => "5d",
185 => "5e", 184 => "5f", 183 => "50", 182 => "51", 181 => "52",
180 => "53", 179 => "54", 178 => "55", 177 => "56", 176 => "57",
175 => "48", 174 => "49", 173 => "4a", 172 => "4b", 171 => "4c",
170 => "4d", 169 => "4e", 168 => "4f", 167 => "40", 166 => "41",
165 => "42", 164 => "43", 163 => "44", 162 => "45", 161 => "46",
160 => "47", 159 => "78", 158 => "79", 157 => "7a", 156 => "7b",
155 => "7c", 154 => "7d", 153 => "7e", 152 => "7f", 151 => "70",
150 => "71", 149 => "72", 148 => "73", 147 => "74", 146 => "75",
145 => "76", 144 => "77", 143 => "68", 142 => "69", 141 => "6a",
140 => "6b", 139 => "6c", 138 => "6d", 137 => "6e", 136 => "6f",
135 => "60", 134 => "61", 133 => "62", 132 => "63", 131 => "64",
130 => "65", 129 => "66", 128 => "67", 127 => "98", 126 => "99",
125 => "9a", 124 => "9b", 123 => "9c", 122 => "9d", 121 => "9e",
120 => "9f", 119 => "90", 118 => "91", 117 => "92", 116 => "93",
115 => "94", 114 => "95", 113 => "96", 112 => "97", 111 => "88",
110 => "89", 109 => "8a", 108 => "8b", 107 => "8c", 106 => "8d",
105 => "8e", 104 => "8f", 103 => "80", 102 => "81", 101 => "82",
100 => "83", 99 => "84", 98 => "85", 97 => "86", 96 => "87",
95 => "b8", 94 => "b9", 93 => "ba", 92 => "bb", 91 => "bc",
90 => "bd", 89 => "be", 88 => "bf", 87 => "b0", 86 => "b1",
85 => "b2", 84 => "b3", 83 => "b4", 82 => "b5", 81 => "b6",
80 => "b7", 79 => "a8", 78 => "a9", 77 => "aa", 76 => "ab",
75 => "ac", 74 => "ad", 73 => "ae", 72 => "af", 71 => "a0",
70 => "a1", 69 => "a2", 68 => "a3", 67 => "a4", 66 => "a5",
65 => "a6", 64 => "a7", 63 => "d8", 62 => "d9", 61 => "da",
60 => "db", 59 => "dc", 58 => "dd", 57 => "de", 56 => "df",
55 => "d0", 54 => "d1", 53 => "d2", 52 => "d3", 51 => "d4",
50 => "d5", 49 => "d6", 48 => "d7", 47 => "c8", 46 => "c9",
45 => "ca", 44 => "cb", 43 => "cc", 42 => "cd", 41 => "ce",
40 => "cf", 39 => "c0", 38 => "c1", 37 => "c2", 36 => "c3",
35 => "c4", 34 => "c5", 33 => "c6", 32 => "c7", 31 => "f8",
30 => "f9", 29 => "fa", 28 => "fb", 27 => "fc", 26 => "fd",
25 => "fe", 24 => "ff", 23 => "f0", 22 => "f1", 21 => "f2",
20 => "f3", 19 => "f4", 18 => "f5", 17 => "f6", 16 => "f7",
15 => "e8", 14 => "e9", 13 => "ea", 12 => "eb", 11 => "ec",
10 => "ed", 9 => "ee", 8 => "ef", 7 => "e0", 6 => "e1",
5 => "e2", 4 => "e3", 3 => "e4", 2 => "e5", 1 => "e6",
0 => "e7",
);
function fxiDecode($text)
{
global $Fxi2RawArray;
$fileSize = strlen($text);
$Return="";
for($i = 0 ; $i < $fileSize; $i++)
{
if(isset($Fxi2RawArray[ord($text[$i])]))
{
$Return.= $Fxi2RawArray[ord($text[$i])];
}
else
{
echo "Erreur : caractere non reconnu (erreur impossible)";exit;
}
}
return $Return;
}
function getFxiPic($text) //transform fxi pic an array of 4 array reprent all 4 colors. array of colors are coded like a g1m sheet (natural organisation : one bit represente one pixel) ; color order : Blue, orange, green, white
{
$textSize = strlen($text);
$actuelColor = 0;
$x = 15;
$y = 63;
for($i = 8 ; $i < $textSize; $i+=2)
{
//changement de couleur
if($i >=($actuelColor*2056+2056) )
{
$actuelColor++;
$i+=8;
$x = 15;
$y = 63;
}
//changement de colonne
if($y<0)
{
$y=63;
$x--;
}
//enregistrement de la case
$Return[$actuelColor][$y*16+$x] = hexdec($text[$i].$text[$i+1]);
$y--;
}
return $Return;
}
function getG1mPic($text) //transform G1m pic an array of 4 array reprent all 2 colors. array of colors are coded like a g1m sheet (natural organisation : one bit represente one pixel) ; color order : Blue, orange, green, white
{
$textSize = strlen($text);
$actuelColor = 0;
$i = 0;
while($actuelColor < 2 && $actuelColor*2048+$i<$textSize)
{
if($i >= 2048 )
{
$i = 0;
$actuelColor++;
}
$Return[$actuelColor][$i/2] = hexdec($text[$actuelColor*2048+$i].$text[$actuelColor*2048+$i+1]);
$i+=2;
}
// print_r($Return);exit;
return $Return;
}
//color=array(array(255,0,0),array(0, 0, 255),array(0, 128, 0),array(66, 174, 9))
function imageResizeAlpha($src, $coef)
{
$w = imagesx($src)*$coef;
$h = imagesy($src)*$coef;
$temp = imagecreatetruecolor($w, $h);
imagealphablending($temp, false);
imagesavealpha($temp, true);
$trans_layer_overlay = imagecolorallocatealpha($temp, 0, 0, 0, 127);
imagefill($temp, 0, 0, $trans_layer_overlay);
imagecopyresized($temp, $src, 0, 0, 0, 0, $w, $h, imagesx($src), imagesy($src));
return $temp;
}
//=array(array(255,0,0),array(0, 0, 255),array(0, 128, 0),array(66, 174, 9))
// $actualPic = 1;
//0 = rouge
//1 = bleu
//2 = vert
//3 = white
function writePics($pics, $colors, $size=3)
{
$nbrPics = count($pics);
header("Content-type: image/png");
$image = imagecreate(128,64);
$fond = imagecolorallocate($image, 255,255,255);
imagecolortransparent($image,$fond);
for($actualPic = 0 ; $actualPic < $nbrPics; $actualPic++)
{
// echo $actualPic;
$AColor = imagecolorallocate($image, $colors[$actualPic][0], $colors[$actualPic][1], $colors[$actualPic][2]);
for($xy = 0 ; $xy < 1024; $xy++)
{
$y = (int)($xy/16);
$x = ($xy%16)*8;
if($pics[$actualPic][$xy]&1)//00000001
ImageSetPixel($image, $x+7, $y, $AColor);
if(($pics[$actualPic][$xy]&2)>>1)//00000010
ImageSetPixel($image, $x+6, $y, $AColor);
if(($pics[$actualPic][$xy]&4)>>2)//00000100
ImageSetPixel($image, $x+5, $y, $AColor);
if(($pics[$actualPic][$xy]&8)>>3)//00001000
ImageSetPixel($image, $x+4, $y, $AColor);
if(($pics[$actualPic][$xy]&16)>>4)//00010000
ImageSetPixel($image, $x+3, $y, $AColor);
if(($pics[$actualPic][$xy]&32)>>5)//00100000
ImageSetPixel($image, $x+2, $y, $AColor);
if(($pics[$actualPic][$xy]&64)>>6)//01000000
ImageSetPixel($image, $x+1, $y, $AColor);
if(($pics[$actualPic][$xy]&128)>>7)//10000000
ImageSetPixel($image, $x, $y, $AColor);
}
}
//resizing
if($size >=2)
{
$image = imageResizeAlpha($image,$size);
}
//senging
imagepng($image);
}
?>