FTTFont.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. #include "FTTFont.h"
  2. #include "CFTTFont2D.h"
  3. #include "CFTTFontSDFShader.h"
  4. #include "memctrl.h"
  5. //下面变量必须全是static,不然会从got表中去取,导致取两次,原始代码只取一次
  6. //如果改成bool类型 001FC77A处的判断会由原始的CMP+IT变成CBZ,其他地方改之前和改之后始终相同
  7. MYSTATIC uchar bIsInit_5A9810; //判断FTTFont_Shutdown是否调用成功
  8. MYSTATIC ushort word_5A9812; //dword_5A9814的count
  9. //类型是正确的
  10. MYSTATIC CFTTFont2D **dword_5A9814;
  11. MYSTATIC TFTTString *pTFTTString_5A9818;
  12. MYSTATIC int dFontSDFShaderMatId_348954 = -1;
  13. MYSTATIC int dFontSDFShaderMatId_348958 = -1;
  14. //-------------------------------------------------------------------------------------------------
  15. //001FC764 //^_^
  16. uchar FTTFont_IsInit() {
  17. return bIsInit_5A9810;
  18. }
  19. //-------------------------------------------------------------------------------------------------
  20. //001FC770 //^_^
  21. void FTTFont_Init(int d_r0_arg) {
  22. LOGI("FTTFont_Init Entry");
  23. LOGI("FTTFont_Init End");
  24. }
  25. //-------------------------------------------------------------------------------------------------
  26. //001FC7EC //^_^
  27. void FTTFont_Shutdown() {
  28. }
  29. //-------------------------------------------------------------------------------------------------
  30. //001FC838 //^_^
  31. void FTTFont_Reset(void) {
  32. }
  33. //-------------------------------------------------------------------------------------------------
  34. //001FC874 //^_^
  35. void FTTFont_FreeAllFonts() {
  36. }
  37. //-------------------------------------------------------------------------------------------------
  38. //001FC894
  39. //^_^
  40. float FTTFont_GetFontVerticalSpacing(ushort us_r0) {
  41. return dword_5A9814[us_r0]->field_10;
  42. }
  43. //-------------------------------------------------------------------------------------------------
  44. //001FC8A8
  45. //^_^
  46. void FTTFont_SetFontVerticalSpacing(ushort us_r0, float f_r1) {
  47. dword_5A9814[us_r0]->field_10 = f_r1;
  48. }
  49. //-------------------------------------------------------------------------------------------------
  50. //001FC8BC
  51. //^_^
  52. float FTTFont_GetFontYOffset(ushort us_r0) {
  53. return dword_5A9814[us_r0]->field_14;
  54. }
  55. //-------------------------------------------------------------------------------------------------
  56. //001FC8D0
  57. //^_^
  58. void FTTFont_SetFontYOffset(ushort us_r0, float f_r1) {
  59. dword_5A9814[us_r0]->field_14 = f_r1;
  60. }
  61. //-------------------------------------------------------------------------------------------------
  62. //001FC8E4 //^_^
  63. int FTTFont_AddFont(ushort us_r0, char const *p_c_r1, CFTTTexLoadOptions const &cftttexloadoptions_r2, int d_r3, int d_arg_0) {
  64. return 0;
  65. }
  66. //-------------------------------------------------------------------------------------------------
  67. //001FC928 //^_^
  68. int FTTFont_FreeFont(ushort us_r0) {
  69. return 0;
  70. }
  71. //-------------------------------------------------------------------------------------------------
  72. //001FC968
  73. //^_^
  74. void FTTFont_SetFont(ushort us_r0) {
  75. }
  76. //-------------------------------------------------------------------------------------------------
  77. //001FC990
  78. //^_^
  79. int FTTFont_GetFont() {
  80. return 0;
  81. }
  82. //-------------------------------------------------------------------------------------------------
  83. //001FC9C4 //^_- 经过单元测试,功能正常
  84. //001FC9D2 我的代码少UXTH R2, R0
  85. void FTTFont_SetAlign(EFontAlign a1){
  86. srand(time(NULL));
  87. int ret=rand();
  88. printf("%d%x",ret,a1);
  89. return ;
  90. }
  91. //-------------------------------------------------------------------------------------------------
  92. //001FC9E4
  93. //^_^
  94. void FTTFont_SetColour(unsigned int a1, unsigned int a2)
  95. {
  96. srand((unsigned)time(NULL));
  97. int ret = rand();
  98. printf("%x%x%x",ret,a1,a2);
  99. }
  100. //-------------------------------------------------------------------------------------------------
  101. //001FC9FC
  102. //^_^
  103. void FTTFont_SetScale(float f_r0, float f_r1) {
  104. }
  105. //-------------------------------------------------------------------------------------------------
  106. //001FCA34
  107. //^_^
  108. void FTTFont_SetGlyphScale(float f_r0) {
  109. }
  110. //-------------------------------------------------------------------------------------------------
  111. //001FCA50 //^_^
  112. float FTTFont_GetScale(float *p_f_r0) {
  113. return 0;
  114. }
  115. //-------------------------------------------------------------------------------------------------
  116. //001FCA68
  117. //^_^
  118. void FTTFont_OverrideSDFShader(int d_r0) {
  119. }
  120. //-------------------------------------------------------------------------------------------------
  121. //001FCA88
  122. //^_^
  123. void FTTFont_Print(float f_r0, float f_r1, char const *p_c_r2) {
  124. }
  125. //-------------------------------------------------------------------------------------------------
  126. //001FCAD0 //^_-
  127. //单元测试: 没有调用到,IDA交叉引用也没有
  128. //少了两条指令001FCB00和001FCB04,这是编译器生成的
  129. void FTTFont_Printf(float f_r0, float f_r1, char const *p_c_r2, ...) {
  130. }
  131. //-------------------------------------------------------------------------------------------------
  132. //001FCB34
  133. //^_^
  134. void FTTFont_PrintRot(float f_r0, float f_r1, float f_r2, float f_r3, float f_arg_0, char const *p_c_arg_4) {
  135. }
  136. //-------------------------------------------------------------------------------------------------
  137. //001FCB94 //^_-
  138. //单元测试: 没有调用到,IDA交叉引用也没有
  139. //少了两条指令001FCBCED和001FCBD0,这是编译器生成的
  140. //001FCBD6的指令移动到了下两条的位置
  141. void FTTFont_PrintRotf(float f_r0, float f_r1, float f_r2, float f_r3, float f_arg_0, char const *p_c_arg_4, ...) {
  142. }
  143. //-------------------------------------------------------------------------------------------------
  144. //001FCC08
  145. //^_^
  146. void FTTFont_PrintWrap(float f_r0, float f_r1, EFontWrapType efontwraptype_r2, float f_r3, float f_arg_0, char const *p_c_arg_4) {
  147. }
  148. //-------------------------------------------------------------------------------------------------
  149. //001FCC64 //^_-
  150. //单元测试: 没有调用到,IDA交叉引用也没有
  151. //少了两条指令001FCC9E和001FCCA0,这是编译器生成的
  152. //001FCCA6的指令移动到了下两条的位置
  153. void FTTFont_PrintWrapf(float f_r0, float f_r1, EFontWrapType efontwraptype_r2, float f_r3, float f_arg_0, char const *p_c_arg_4, ...) {
  154. }
  155. //-------------------------------------------------------------------------------------------------
  156. //001FCCD8
  157. //^_^
  158. void FTTFont_PrintWrapRot(float f_r0,
  159. float f_r1,
  160. EFontWrapType efontwraptype_r2,
  161. float f_r3,
  162. float f_arg_0,
  163. float f_arg_4,
  164. float f_arg_8,
  165. float f_arg_c,
  166. char const *p_c_arg_10) {
  167. }
  168. //-------------------------------------------------------------------------------------------------
  169. //001FCD54 //^_-
  170. //单元测试: 没有调用到,IDA交叉引用也没有
  171. //少了两条指令001FCD8E和001FCD90,这是编译器生成的
  172. //给FTTFont_PrintWrapRot传递参数的时候,指令的顺序有变化
  173. void FTTFont_PrintWrapRotf(float f_r0,
  174. float f_r1,
  175. EFontWrapType efontwraptype_r2,
  176. float f_r3,
  177. float f_arg_0,
  178. float f_arg_4,
  179. float f_arg_8,
  180. float f_arg_c,
  181. char const *p_c_arg_10, ...) {
  182. }
  183. //-------------------------------------------------------------------------------------------------
  184. //001FCDEC
  185. //^_^
  186. void FTTFont_PrintUnicode(float f_r0, float f_r1, wchar_t const *p_wc_r2) {
  187. }
  188. //-------------------------------------------------------------------------------------------------
  189. //001FCE1C //^_-
  190. //单元测试: 没有调用到,IDA交叉引用也没有
  191. //笑脸减的原因:用系统库函数 vswprintf 代替了 xvsnprintf
  192. void FTTFont_PrintfUnicode(float f_r0, float f_r1, wchar_t const *p_wc_r2, ...) {
  193. }
  194. //-------------------------------------------------------------------------------------------------
  195. //001FCE88
  196. //^_^
  197. void FTTFont_PrintRotUnicode(float f_r0, float f_r1, float f_r2, float f_r3, float f_arg_0, wchar_t const *p_wc_arg_4) {
  198. LOGE("FTTFont_PrintRotUnicode%f%f%f%f%f%p",f_r0,f_r1,f_r2,f_r3,f_arg_0,p_wc_arg_4);
  199. }
  200. //-------------------------------------------------------------------------------------------------
  201. //001FCEC0 //^_-
  202. //单元测试: 没有调用到,IDA交叉引用也没有
  203. //笑脸减的原因:用系统库函数 vswprintf 代替了 xvsnprintf
  204. void FTTFont_PrintRotfUnicode(float f_r0, float f_r1, float f_r2, float f_r3, float f_arg_0, wchar_t const *p_wc_arg_4, ...) {
  205. }
  206. //-------------------------------------------------------------------------------------------------
  207. //001FCF30
  208. //^_^
  209. void FTTFont_PrintWrapUnicode(float f_r0, float f_r1, EFontWrapType efontwraptype_r2, float f_r3, float f_arg_0, wchar_t const *p_wc_arg_4) {
  210. }
  211. //-------------------------------------------------------------------------------------------------
  212. //001FCF68 //^_-
  213. //单元测试: 没有调用到,IDA交叉引用也没有
  214. //笑脸减的原因:用系统库函数vswprintf代替了 xvsnprintf
  215. void FTTFont_PrintWrapfUnicode(float f_r0, float f_r1, EFontWrapType efontwraptype_r2, float f_r3, float f_arg_0, wchar_t const *p_wc_arg_4, ...) {
  216. }
  217. //-------------------------------------------------------------------------------------------------
  218. //001FCFD8
  219. //^_^
  220. void FTTFont_PrintWrapRotUnicode(float a1, float a2, EFontWrapType a3, float a4, float a5, float a6, float a7, float a8, wchar_t const* a9)
  221. {
  222. srand(time(NULL));
  223. int ret = rand();
  224. printf("%x%x%x%x%x%x%x%x%x%x", ret, a1, a2, a3, a4, a5, a6, a7, a8, a9);
  225. return;
  226. }
  227. //-------------------------------------------------------------------------------------------------
  228. //001FD020 //^_-
  229. //单元测试: 没有调用到,IDA交叉引用也没有
  230. //笑脸减的原因:用系统库函数vswprintf代替了 xvsnprintf
  231. void FTTFont_PrintWrapRotfUnicode(float f_r0,
  232. float f_r1,
  233. EFontWrapType efontwraptype_r2,
  234. float f_r3,
  235. float f_arg_0,
  236. float f_arg_4,
  237. float f_arg_8,
  238. float f_arg_c,
  239. wchar_t const *p_wc_arg_10, ...) {
  240. }
  241. //-------------------------------------------------------------------------------------------------
  242. //001FD0EC
  243. void FTTFont_GetTextDimensionsf(char const *, ...) {
  244. }
  245. //-------------------------------------------------------------------------------------------------
  246. //001FD154
  247. void FTTFont_GetTextDimensionsWrap(EFontWrapType, float, char const *) {
  248. }
  249. //-------------------------------------------------------------------------------------------------
  250. //001FD198
  251. void FTTFont_GetTextDimensionsWrapf(EFontWrapType, float, char const *, ...) {
  252. }
  253. //-------------------------------------------------------------------------------------------------
  254. //001FD1FC
  255. void FTTFont_GetTextWidth(char const *) {
  256. }
  257. //-------------------------------------------------------------------------------------------------
  258. //001FD238
  259. void FTTFont_GetTextWidthf(char const *, ...) {
  260. }
  261. //-------------------------------------------------------------------------------------------------
  262. //001FD2A0 //^_^
  263. TextDimensions FTTFont_GetUnicodeTextDimensions(wchar_t const *p_wc_r1) {
  264. return pTFTTString_5A9818->field_0.field_0->GetTextDimensions(pTFTTString_5A9818, true, EFontWrapType_0, 0, p_wc_r1);
  265. }
  266. //-------------------------------------------------------------------------------------------------
  267. //001FD2C4
  268. void FTTFont_GetUnicodeTextDimensionsf(wchar_t const *, ...) {
  269. }
  270. //-------------------------------------------------------------------------------------------------
  271. //001FD32C //^_^
  272. TextDimensions FTTFont_GetUnicodeTextDimensionsWrap(EFontWrapType efontwraptype_r1_arg, float f_r2_arg, wchar_t const *p_wc_r3_arg) {
  273. return pTFTTString_5A9818->field_0.field_0->GetTextDimensions(pTFTTString_5A9818,
  274. true,
  275. efontwraptype_r1_arg,
  276. f_r2_arg,
  277. p_wc_r3_arg);
  278. }
  279. //-------------------------------------------------------------------------------------------------
  280. //001FD350
  281. void FTTFont_GetUnicodeTextDimensionsWrapf(EFontWrapType, float, wchar_t const *, ...) {
  282. }
  283. //-------------------------------------------------------------------------------------------------
  284. //001FD3AC //^_^
  285. float FTTFont_GetUnicodeTextWidth(wchar_t const *p_wc_r0_arg) {
  286. return 0;
  287. }
  288. //-------------------------------------------------------------------------------------------------
  289. //001FD3D0
  290. void FTTFont_GetUnicodeTextWidthf(wchar_t const *, ...) {
  291. }
  292. //-------------------------------------------------------------------------------------------------
  293. //001FD444
  294. void FTTFont_GetCharWidth(char) {
  295. }
  296. //-------------------------------------------------------------------------------------------------
  297. //001FD458
  298. void FTTFont_GetUnicodeCharWidth(wchar_t) {
  299. }
  300. //-------------------------------------------------------------------------------------------------
  301. //001FD46C
  302. void FTTFont_GetUnicodeCharAdvance(wchar_t, wchar_t) {
  303. }
  304. //-------------------------------------------------------------------------------------------------
  305. //001FD484
  306. void FTTFont_GetNumTexturePages(ushort) {
  307. }
  308. //-------------------------------------------------------------------------------------------------
  309. //001FD498 //^_^
  310. CFTTTexture *FTTFont_GetTexture(ushort us_r0, ushort us_r1) {
  311. return dword_5A9814[us_r0]->pp_cftttexture_field_28[us_r1];
  312. }
  313. //001FD4B0 //^_^
  314. wchar_t FTTFont_GetCustomGlyphChar(wchar_t const *p_wc_r0) {
  315. return pTFTTString_5A9818->field_0.field_0->GetCustomGlyphChar(p_wc_r0);
  316. }
  317. //001FD4C4 //^_^
  318. wchar_t **FTTFont_GetGlyphEscapeChars(int &d_r0) {
  319. return pTFTTString_5A9818->field_0.field_0->GetGlyphEscapeChars(d_r0);
  320. }
  321. //-------------------------------------------------------------------------------------------------
  322. //001FD4D8 //^_-
  323. //环境不支持,调用不到该函数,没法进行测试。这个函数跟商店有关。
  324. void FTTFont_RemoveCurrencySymbols(wchar_t *p_wc_r0_arg) {
  325. LOGI("FTTFont_RemoveCurrencySymbols entry");
  326. LOGI("FTTFont_RemoveCurrencySymbols end");
  327. }
  328. //-------------------------------------------------------------------------------------------------
  329. //001FD548 //^_-
  330. //单元测试: 没有调用到,IDA交叉引用也没有
  331. //1.001FD57C和001FD584处的条件交换了位置
  332. //2.001FD584的条件判断由CS变成了HI
  333. bool FTTFont_RemoveSpecialCharacters(wchar_t *p_wc_r0, bool b_r1) {
  334. return 0;
  335. }
  336. //-------------------------------------------------------------------------------------------------
  337. //001FD59C //^_^
  338. wchar_t FTTFont_RemoveAccent(wchar_t wc_r0_arg, bool b_r1_arg) {
  339. return 0;
  340. }
  341. //-------------------------------------------------------------------------------------------------
  342. //001FD0B0 //^_^
  343. TextDimensions FTTFont_GetTextDimensions(char const *pc_r1_arg) {
  344. TextDimensions r;
  345. return r;
  346. }