Advertisement
Kiosani

Small Example of Wings Option z28 (Jewel of Life) into main.exe 1.03.08 CHS S4.1 by Nemesis

Jul 8th, 2021 (edited)
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.38 KB | None | 0 0
  1. #define oAddAdditionalLife_Hook 0x005090AA // 1.03H CHS
  2. #define oAddAdditionalLife_Default 0x00509171 // 1.03H CHS
  3.  
  4. enum eItemOption
  5. {
  6. Damage = 80, //-> Additional Damage +<N>
  7. WizardryDamage = 81,
  8. CurseSpell = 82,
  9. Defense = 84, //-> Additional Defense +<N>
  10. Luck = 85, //-> Default: 0
  11. HPRecovery = 86,
  12. IncreaseDamage = 95, //-> Increase Damage +<N>%
  13. IncreaseSpeed = 98, //-> Increase Attacking(Wizardry)speed +<N>
  14. IgnorOpDefense = 103,
  15. ReturnAttack = 106, //-> Return's the enemy's attack power in <N>%
  16. CompleteLife = 107, //-> Complete recovery of life in <N>% rate
  17. CompleteMana = 108, //-> Complete recovery of Mana in <N>% rate
  18. };
  19.  
  20. #pragma optimize("t"on)
  21. void MASM cWings::AddAdditionalOption()
  22. {
  23. static BYTE btAddAdditionalOption_Value;
  24. static BYTE btAddAdditionalOption_Stat;
  25. static BYTE btAddAdditionalOption_Number;
  26. // ----
  27. static DWORD dwAddAdditionalOption_Pointer;
  28. static DWORD dwAddAdditionalOption_NewOption;
  29. static DWORD dwAddAdditionalOption_Buffer;
  30. // ----
  31. _asm
  32. {
  33. MOV EDX,DWORD PTR SS:[EBP+0x8]
  34. // ----
  35. MOVSX EAX,WORD PTR DS:[EDX]
  36. MOV dwAddAdditionalOption_Pointer,EAX
  37. // ----
  38. MOV EDX,DWORD PTR SS:[EBP-0x14]
  39. MOV dwAddAdditionalOption_NewOption,EDX
  40. // ----
  41. MOV CL,BYTE PTR SS:[EBP-0x10]
  42. MOV btAddAdditionalOption_Value,CL
  43. }
  44. // ----
  45. switch(dwAddAdditionalOption_Pointer)
  46. {
  47. case GET_ITEM_INDEX(12,43):
  48. {
  49. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  50. {
  51. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  52. btAddAdditionalOption_Number = WizardryDamage;
  53. }
  54. else
  55. {
  56. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  57. {
  58. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  59. btAddAdditionalOption_Number = CurseSpell;
  60. }
  61. else
  62. {
  63. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  64. btAddAdditionalOption_Number = HPRecovery;
  65. }
  66. }
  67. }
  68. break;
  69. case GET_ITEM_INDEX(12,236):
  70. {
  71. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  72. {
  73. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  74. btAddAdditionalOption_Number = WizardryDamage;
  75. }
  76. else
  77. {
  78. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  79. {
  80. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  81. btAddAdditionalOption_Number = Defense;
  82. }
  83. else
  84. {
  85. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  86. btAddAdditionalOption_Number = HPRecovery;
  87. }
  88. }
  89. }
  90. break;
  91. case GET_ITEM_INDEX(12,237):
  92. {
  93. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  94. {
  95. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  96. btAddAdditionalOption_Number = Damage;
  97. }
  98. else
  99. {
  100. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  101. {
  102. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  103. btAddAdditionalOption_Number = Defense;
  104. }
  105. else
  106. {
  107. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  108. btAddAdditionalOption_Number = HPRecovery;
  109. }
  110. }
  111. }
  112. break;
  113. case GET_ITEM_INDEX(12,238):
  114. {
  115. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  116. {
  117. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  118. btAddAdditionalOption_Number = Damage;
  119. }
  120. else
  121. {
  122. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  123. {
  124. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  125. btAddAdditionalOption_Number = Defense;
  126. }
  127. else
  128. {
  129. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  130. btAddAdditionalOption_Number = HPRecovery;
  131. }
  132. }
  133. }
  134. break;
  135. case GET_ITEM_INDEX(12,239):
  136. {
  137. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  138. {
  139. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  140. btAddAdditionalOption_Number = Damage;
  141. }
  142. else
  143. {
  144. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  145. {
  146. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  147. btAddAdditionalOption_Number = Defense;
  148. }
  149. else
  150. {
  151. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  152. btAddAdditionalOption_Number = HPRecovery;
  153. }
  154. }
  155. }
  156. break;
  157. case GET_ITEM_INDEX(12,240):
  158. {
  159. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  160. {
  161. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  162. btAddAdditionalOption_Number = WizardryDamage;
  163. }
  164. else
  165. {
  166. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  167. {
  168. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  169. btAddAdditionalOption_Number = Defense;
  170. }
  171. else
  172. {
  173. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  174. btAddAdditionalOption_Number = HPRecovery;
  175. }
  176. }
  177. }
  178. break;
  179. case GET_ITEM_INDEX(12,241):
  180. {
  181. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  182. {
  183. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  184. btAddAdditionalOption_Number = Damage;
  185. }
  186. else
  187. {
  188. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  189. {
  190. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  191. btAddAdditionalOption_Number = Defense;
  192. }
  193. else
  194. {
  195. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  196. btAddAdditionalOption_Number = HPRecovery;
  197. }
  198. }
  199. }
  200. break;
  201. case GET_ITEM_INDEX(12,242):
  202. {
  203. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  204. {
  205. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  206. btAddAdditionalOption_Number = Damage;
  207. }
  208. else
  209. {
  210. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  211. {
  212. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  213. btAddAdditionalOption_Number = Defense;
  214. }
  215. else
  216. {
  217. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  218. btAddAdditionalOption_Number = HPRecovery;
  219. }
  220. }
  221. }
  222. break;
  223. case GET_ITEM_INDEX(12,243):
  224. {
  225. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  226. {
  227. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  228. btAddAdditionalOption_Number = Damage;
  229. }
  230. else
  231. {
  232. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  233. {
  234. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  235. btAddAdditionalOption_Number = WizardryDamage;
  236. }
  237. else
  238. {
  239. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  240. btAddAdditionalOption_Number = HPRecovery;
  241. }
  242. }
  243. }
  244. break;
  245. case GET_ITEM_INDEX(12,244):
  246. {
  247. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  248. {
  249. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  250. btAddAdditionalOption_Number = Damage;
  251. }
  252. else
  253. {
  254. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  255. {
  256. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  257. btAddAdditionalOption_Number = Defense;
  258. }
  259. else
  260. {
  261. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  262. btAddAdditionalOption_Number = HPRecovery;
  263. }
  264. }
  265. }
  266. break;
  267. case GET_ITEM_INDEX(12,245):
  268. {
  269. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  270. {
  271. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  272. btAddAdditionalOption_Number = WizardryDamage;
  273. }
  274. else
  275. {
  276. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  277. {
  278. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  279. btAddAdditionalOption_Number = CurseSpell;
  280. }
  281. else
  282. {
  283. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  284. btAddAdditionalOption_Number = HPRecovery;
  285. }
  286. }
  287. }
  288. break;
  289. case GET_ITEM_INDEX(12,246):
  290. {
  291. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  292. {
  293. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  294. btAddAdditionalOption_Number = WizardryDamage;
  295. }
  296. else
  297. {
  298. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  299. {
  300. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  301. btAddAdditionalOption_Number = Defense;
  302. }
  303. else
  304. {
  305. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  306. btAddAdditionalOption_Number = HPRecovery;
  307. }
  308. }
  309. }
  310. break;
  311. case GET_ITEM_INDEX(12,247):
  312. {
  313. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  314. {
  315. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  316. btAddAdditionalOption_Number = WizardryDamage;
  317. }
  318. else
  319. {
  320. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  321. {
  322. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  323. btAddAdditionalOption_Number = Defense;
  324. }
  325. else
  326. {
  327. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  328. btAddAdditionalOption_Number = HPRecovery;
  329. }
  330. }
  331. }
  332. break;
  333. case GET_ITEM_INDEX(12,248):
  334. {
  335. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  336. {
  337. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  338. btAddAdditionalOption_Number = WizardryDamage;
  339. }
  340. else
  341. {
  342. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  343. {
  344. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  345. btAddAdditionalOption_Number = Defense;
  346. }
  347. else
  348. {
  349. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  350. btAddAdditionalOption_Number = HPRecovery;
  351. }
  352. }
  353. }
  354. break;
  355. case GET_ITEM_INDEX(12,249):
  356. {
  357. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  358. {
  359. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  360. btAddAdditionalOption_Number = Damage;
  361. }
  362. else
  363. {
  364. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  365. {
  366. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  367. btAddAdditionalOption_Number = Defense;
  368. }
  369. else
  370. {
  371. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  372. btAddAdditionalOption_Number = HPRecovery;
  373. }
  374. }
  375. }
  376. break;
  377. case GET_ITEM_INDEX(12,250):
  378. {
  379. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  380. {
  381. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  382. btAddAdditionalOption_Number = Damage;
  383. }
  384. else
  385. {
  386. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  387. {
  388. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  389. btAddAdditionalOption_Number = Defense;
  390. }
  391. else
  392. {
  393. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  394. btAddAdditionalOption_Number = HPRecovery;
  395. }
  396. }
  397. }
  398. break;
  399. case GET_ITEM_INDEX(12,251):
  400. {
  401. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  402. {
  403. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  404. btAddAdditionalOption_Number = WizardryDamage;
  405. }
  406. else
  407. {
  408. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  409. {
  410. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  411. btAddAdditionalOption_Number = Defense;
  412. }
  413. else
  414. {
  415. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  416. btAddAdditionalOption_Number = HPRecovery;
  417. }
  418. }
  419. }
  420. break;
  421. case GET_ITEM_INDEX(12,252): // -> Deathless Wings (Added: 22-12-16)
  422. {
  423. if((dwAddAdditionalOption_NewOption >> 4) & 1)
  424. {
  425. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  426. btAddAdditionalOption_Number = Damage;
  427. }
  428. else
  429. {
  430. if((dwAddAdditionalOption_NewOption >> 5) & 1)
  431. {
  432. btAddAdditionalOption_Stat = btAddAdditionalOption_Value * 4;
  433. btAddAdditionalOption_Number = Defense;
  434. }
  435. else
  436. {
  437. btAddAdditionalOption_Stat = btAddAdditionalOption_Value;
  438. btAddAdditionalOption_Number = HPRecovery;
  439. }
  440. }
  441. }
  442. break;
  443. // ----
  444. default:
  445. {
  446. _asm
  447. {
  448. MOV dwAddAdditionalOption_Buffer,oAddAdditionalLife_Default
  449. JMP dwAddAdditionalOption_Buffer
  450. }
  451. }
  452. break;
  453. }
  454. _asm
  455. {
  456. MOV EDX,DWORD PTR SS:[EBP-0x10]
  457. SHL EDX,2
  458. // ----
  459. MOV EAX,DWORD PTR SS:[EBP+0x8]
  460. XOR ECX,ECX
  461. // ----
  462. MOV CL,BYTE PTR DS:[EAX+0x25]
  463. MOV EAX,DWORD PTR SS:[EBP+0x8]
  464. MOV DL,btAddAdditionalOption_Stat
  465. MOV BYTE PTR DS:[ECX+EAX+0x2E],DL
  466. // ----
  467. XOR EDX,EDX
  468. MOV DL,BYTE PTR DS:[EAX+0x25]
  469. MOV CL,btAddAdditionalOption_Number
  470. MOV BYTE PTR DS:[EDX+EAX+0x26],CL
  471. // ----
  472. ADD DL,1
  473. MOV BYTE PTR DS:[EAX+0x25],DL
  474. // ----
  475. MOV dwAddAdditionalOption_Buffer,oAddAdditionalLife_Default
  476. JMP dwAddAdditionalOption_Buffer
  477. }
  478. }
  479. #pragma optimize("t",off)
  480.  
  481. void cWings::InitAddAdditionalOption()
  482. {
  483. gToolKit.SetRange((LPVOID)oAddAdditionalLife_Hook,199,ASM::NOP);
  484. gToolKit.SetJmp((LPVOID)oAddAdditionalLife_Hook,this->AddAdditionalOption);
  485. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement