FTTFont.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  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. }
  199. //-------------------------------------------------------------------------------------------------
  200. //001FCEC0 //^_-
  201. //单元测试: 没有调用到,IDA交叉引用也没有
  202. //笑脸减的原因:用系统库函数 vswprintf 代替了 xvsnprintf
  203. 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, ...) {
  204. }
  205. //-------------------------------------------------------------------------------------------------
  206. //001FCF30
  207. //^_^
  208. 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) {
  209. }
  210. //-------------------------------------------------------------------------------------------------
  211. //001FCF68 //^_-
  212. //单元测试: 没有调用到,IDA交叉引用也没有
  213. //笑脸减的原因:用系统库函数vswprintf代替了 xvsnprintf
  214. 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, ...) {
  215. }
  216. //-------------------------------------------------------------------------------------------------
  217. //001FCFD8
  218. //^_^
  219. void FTTFont_PrintWrapRotUnicode(float a1, float a2, EFontWrapType a3, float a4, float a5, float a6, float a7, float a8, wchar_t const* a9)
  220. {
  221. srand(time(NULL));
  222. int ret = rand();
  223. printf("%x%x%x%x%x%x%x%x%x%x", ret, a1, a2, a3, a4, a5, a6, a7, a8, a9);
  224. return;
  225. }
  226. //-------------------------------------------------------------------------------------------------
  227. //001FD020 //^_-
  228. //单元测试: 没有调用到,IDA交叉引用也没有
  229. //笑脸减的原因:用系统库函数vswprintf代替了 xvsnprintf
  230. void FTTFont_PrintWrapRotfUnicode(float f_r0,
  231. float f_r1,
  232. EFontWrapType efontwraptype_r2,
  233. float f_r3,
  234. float f_arg_0,
  235. float f_arg_4,
  236. float f_arg_8,
  237. float f_arg_c,
  238. wchar_t const *p_wc_arg_10, ...) {
  239. }
  240. //-------------------------------------------------------------------------------------------------
  241. //001FD0EC
  242. void FTTFont_GetTextDimensionsf(char const *, ...) {
  243. }
  244. //-------------------------------------------------------------------------------------------------
  245. //001FD154
  246. void FTTFont_GetTextDimensionsWrap(EFontWrapType, float, char const *) {
  247. }
  248. //-------------------------------------------------------------------------------------------------
  249. //001FD198
  250. void FTTFont_GetTextDimensionsWrapf(EFontWrapType, float, char const *, ...) {
  251. }
  252. //-------------------------------------------------------------------------------------------------
  253. //001FD1FC
  254. void FTTFont_GetTextWidth(char const *) {
  255. }
  256. //-------------------------------------------------------------------------------------------------
  257. //001FD238
  258. void FTTFont_GetTextWidthf(char const *, ...) {
  259. }
  260. //-------------------------------------------------------------------------------------------------
  261. //001FD2A0 //^_^
  262. TextDimensions FTTFont_GetUnicodeTextDimensions(wchar_t const *p_wc_r1) {
  263. return pTFTTString_5A9818->field_0.field_0->GetTextDimensions(pTFTTString_5A9818, true, EFontWrapType_0, 0, p_wc_r1);
  264. }
  265. //-------------------------------------------------------------------------------------------------
  266. //001FD2C4
  267. void FTTFont_GetUnicodeTextDimensionsf(wchar_t const *, ...) {
  268. }
  269. //-------------------------------------------------------------------------------------------------
  270. //001FD32C //^_^
  271. TextDimensions FTTFont_GetUnicodeTextDimensionsWrap(EFontWrapType efontwraptype_r1_arg, float f_r2_arg, wchar_t const *p_wc_r3_arg) {
  272. return pTFTTString_5A9818->field_0.field_0->GetTextDimensions(pTFTTString_5A9818,
  273. true,
  274. efontwraptype_r1_arg,
  275. f_r2_arg,
  276. p_wc_r3_arg);
  277. }
  278. //-------------------------------------------------------------------------------------------------
  279. //001FD350
  280. void FTTFont_GetUnicodeTextDimensionsWrapf(EFontWrapType, float, wchar_t const *, ...) {
  281. }
  282. //-------------------------------------------------------------------------------------------------
  283. //001FD3AC //^_^
  284. float FTTFont_GetUnicodeTextWidth(wchar_t const *p_wc_r0_arg) {
  285. return 0;
  286. }
  287. //-------------------------------------------------------------------------------------------------
  288. //001FD3D0
  289. void FTTFont_GetUnicodeTextWidthf(wchar_t const *, ...) {
  290. }
  291. //-------------------------------------------------------------------------------------------------
  292. //001FD444
  293. void FTTFont_GetCharWidth(char) {
  294. }
  295. //-------------------------------------------------------------------------------------------------
  296. //001FD458
  297. void FTTFont_GetUnicodeCharWidth(wchar_t) {
  298. }
  299. //-------------------------------------------------------------------------------------------------
  300. //001FD46C
  301. void FTTFont_GetUnicodeCharAdvance(wchar_t, wchar_t) {
  302. }
  303. //-------------------------------------------------------------------------------------------------
  304. //001FD484
  305. void FTTFont_GetNumTexturePages(ushort) {
  306. }
  307. //-------------------------------------------------------------------------------------------------
  308. //001FD498 //^_^
  309. CFTTTexture *FTTFont_GetTexture(ushort us_r0, ushort us_r1) {
  310. return dword_5A9814[us_r0]->pp_cftttexture_field_28[us_r1];
  311. }
  312. //001FD4B0 //^_^
  313. wchar_t FTTFont_GetCustomGlyphChar(wchar_t const *p_wc_r0) {
  314. return pTFTTString_5A9818->field_0.field_0->GetCustomGlyphChar(p_wc_r0);
  315. }
  316. //001FD4C4 //^_^
  317. wchar_t **FTTFont_GetGlyphEscapeChars(int &d_r0) {
  318. return pTFTTString_5A9818->field_0.field_0->GetGlyphEscapeChars(d_r0);
  319. }
  320. //-------------------------------------------------------------------------------------------------
  321. //001FD4D8 //^_-
  322. //环境不支持,调用不到该函数,没法进行测试。这个函数跟商店有关。
  323. void FTTFont_RemoveCurrencySymbols(wchar_t *p_wc_r0_arg) {
  324. LOGI("FTTFont_RemoveCurrencySymbols entry");
  325. LOGI("FTTFont_RemoveCurrencySymbols end");
  326. }
  327. //-------------------------------------------------------------------------------------------------
  328. //001FD548 //^_-
  329. //单元测试: 没有调用到,IDA交叉引用也没有
  330. //1.001FD57C和001FD584处的条件交换了位置
  331. //2.001FD584的条件判断由CS变成了HI
  332. bool FTTFont_RemoveSpecialCharacters(wchar_t *p_wc_r0, bool b_r1) {
  333. return 0;
  334. }
  335. //-------------------------------------------------------------------------------------------------
  336. //001FD59C //^_^
  337. wchar_t FTTFont_RemoveAccent(wchar_t wc_r0_arg, bool b_r1_arg) {
  338. return 0;
  339. }
  340. //-------------------------------------------------------------------------------------------------
  341. //001FD0B0 //^_^
  342. TextDimensions FTTFont_GetTextDimensions(char const *pc_r1_arg) {
  343. TextDimensions r;
  344. return r;
  345. }