renderasm.cpp 83 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446
  1. void HLineTDGlass50( void )
  2. {
  3. if ( xa < xb ) {
  4. _asm {
  5. mov edi,xa
  6. sar edi, 16
  7. mov xa16,edi
  8. mov eax,xb;
  9. sar eax, 16
  10. mov xb16,eax
  11. sub eax,edi;
  12. jz END_PAINT
  13. mov ecx,eax
  14. mov ebx,WinEX
  15. cmp edi,ebx;
  16. jg END_PAINT;
  17. mov ebx,0;
  18. cmp xb16,ebx;
  19. jl END_PAINT;
  20. mov ebx,ecx;
  21. cmp ebx,1;
  22. jle L01
  23. lea ebx,[offset DivTbl + ebx*4]
  24. mov ebx,[ebx]
  25. mov eax,txb;
  26. sub eax,txa;
  27. imul ebx;
  28. mov ctdx,edx
  29. mov eax,tyb;
  30. sub eax,tya;
  31. imul ebx;
  32. mov ctdy,edx
  33. }L01: __asm {
  34. mov ebx,tya
  35. mov edx,txa
  36. cmp xa16,0;
  37. jge L011
  38. mov eax,ctdy;
  39. imul xa16
  40. sub ebx,eax
  41. mov eax,ctdx
  42. imul xa16
  43. mov edx,txa;
  44. sub edx,eax
  45. add ecx,xa16
  46. jz END_PAINT
  47. mov xa16,0
  48. } L011: __asm {
  49. mov eax,WinW
  50. cmp xb16,eax
  51. jl L012
  52. sub xb16,eax
  53. sub ecx,xb16
  54. jz END_PAINT
  55. } L012:
  56. __asm {
  57. mov edi, Y1
  58. mov esi,xa16
  59. shl edi, 11
  60. lea esi,[esi*2]
  61. add edi, lpVideoBuf
  62. push ebp
  63. add edi,esi
  64. mov ebp,lpTextureAddr
  65. } } else {
  66. __asm {
  67. mov edi,xb
  68. sar edi, 16
  69. mov xb16,edi
  70. mov eax,xa;
  71. sar eax, 16
  72. mov xa16,eax
  73. sub eax,edi;
  74. jz END_PAINT
  75. mov ecx,eax
  76. mov ebx,WinEX;
  77. cmp edi,ebx;
  78. jg END_PAINT;
  79. mov ebx,0;
  80. cmp xa16,ebx;
  81. jl END_PAINT;
  82. mov ebx,ecx;
  83. cmp ebx,1;
  84. jle L02
  85. lea ebx,[offset DivTbl + ebx*4]
  86. mov ebx,[ebx]
  87. mov eax,txa;
  88. sub eax,txb;
  89. imul ebx;
  90. mov ctdx,edx
  91. mov eax,tya;
  92. sub eax,tyb;
  93. imul ebx;
  94. mov ctdy,edx
  95. } L02: __asm {
  96. mov ebx,tyb;
  97. mov edx,txb;
  98. cmp xb16,0;
  99. jge L021
  100. mov eax,ctdy;
  101. imul xb16
  102. sub ebx,eax
  103. mov eax,ctdx
  104. imul xb16
  105. mov edx,txb;
  106. sub edx,eax
  107. add ecx,xb16
  108. jz END_PAINT
  109. mov xb16,0
  110. }L021: __asm{
  111. mov eax,WinW
  112. cmp xa16,eax
  113. jl L022
  114. sub xa16,eax
  115. sub ecx,xa16
  116. jz END_PAINT
  117. }L022:
  118. __asm{
  119. mov edi, Y1
  120. mov esi,xb16
  121. shl edi, 11
  122. lea esi,[esi*2]
  123. add edi, lpVideoBuf
  124. push ebp
  125. add edi,esi
  126. mov ebp,lpTextureAddr
  127. } }
  128. L9:
  129. __asm {
  130. mov eax,edx
  131. mov esi,ebx
  132. shr eax,18
  133. shr esi,18
  134. shl esi,5
  135. add esi,eax
  136. mov si,word ptr[ebp + esi*2]
  137. and esi,0x7bde
  138. mov ax,word ptr [edi]
  139. and eax,0x7bde
  140. add eax,esi
  141. shr eax,1
  142. add edx,ctdx
  143. add ebx,ctdy
  144. mov word ptr[edi],ax
  145. add edi,2
  146. dec ecx
  147. jnz L9
  148. pop ebp
  149. }
  150. END_PAINT: ;
  151. }
  152. void HLineTDGlass25( void )
  153. {
  154. if ( xa < xb ) {
  155. _asm {
  156. mov edi,xa
  157. sar edi, 16
  158. mov xa16,edi
  159. mov eax,xb;
  160. sar eax, 16
  161. mov xb16,eax
  162. sub eax,edi;
  163. jz END_PAINT
  164. mov ecx,eax
  165. mov ebx,WinEX;
  166. cmp edi,ebx;
  167. jg END_PAINT;
  168. mov ebx,0;
  169. cmp xb16,ebx;
  170. jl END_PAINT;
  171. mov ebx,ecx;
  172. cmp ebx,1;
  173. jle L01
  174. lea ebx,[offset DivTbl + ebx*4]
  175. mov ebx,[ebx]
  176. mov eax,txb;
  177. sub eax,txa;
  178. imul ebx;
  179. mov ctdx,edx
  180. mov eax,tyb;
  181. sub eax,tya;
  182. imul ebx;
  183. mov ctdy,edx
  184. }L01: __asm {
  185. mov ebx,tya
  186. mov edx,txa
  187. cmp xa16,0;
  188. jge L011
  189. mov eax,ctdy;
  190. imul xa16
  191. sub ebx,eax
  192. mov eax,ctdx
  193. imul xa16
  194. mov edx,txa;
  195. sub edx,eax
  196. add ecx,xa16
  197. jz END_PAINT
  198. mov xa16,0
  199. } L011: __asm {
  200. mov eax,WinW
  201. cmp xb16,eax
  202. jl L012
  203. sub xb16,eax
  204. sub ecx,xb16
  205. jz END_PAINT
  206. } L012:
  207. __asm {
  208. mov edi, Y1
  209. mov esi,xa16
  210. shl edi, 11
  211. lea esi,[esi*2]
  212. add edi, lpVideoBuf
  213. push ebp
  214. add edi,esi
  215. mov ebp,lpTextureAddr
  216. } } else {
  217. __asm {
  218. mov edi,xb
  219. sar edi, 16
  220. mov xb16,edi
  221. mov eax,xa;
  222. sar eax, 16
  223. mov xa16,eax
  224. sub eax,edi;
  225. jz END_PAINT
  226. mov ecx,eax
  227. mov ebx,WinEX;
  228. cmp edi,ebx;
  229. jg END_PAINT;
  230. mov ebx,0;
  231. cmp xa16,ebx;
  232. jl END_PAINT;
  233. mov ebx,ecx;
  234. cmp ebx,1;
  235. jle L02
  236. lea ebx,[offset DivTbl + ebx*4]
  237. mov ebx,[ebx]
  238. mov eax,txa;
  239. sub eax,txb;
  240. imul ebx;
  241. mov ctdx,edx
  242. mov eax,tya;
  243. sub eax,tyb;
  244. imul ebx;
  245. mov ctdy,edx
  246. } L02: __asm {
  247. mov ebx,tyb;
  248. mov edx,txb;
  249. cmp xb16,0;
  250. jge L021
  251. mov eax,ctdy;
  252. imul xb16
  253. sub ebx,eax
  254. mov eax,ctdx
  255. imul xb16
  256. mov edx,txb;
  257. sub edx,eax
  258. add ecx,xb16
  259. jz END_PAINT
  260. mov xb16,0
  261. }L021: __asm{
  262. mov eax,WinW
  263. cmp xa16,eax
  264. jl L022
  265. sub xa16,eax
  266. sub ecx,xa16
  267. jz END_PAINT
  268. }L022:
  269. __asm{
  270. mov edi, Y1
  271. mov esi,xb16
  272. shl edi, 11
  273. lea esi,[esi*2]
  274. add edi, lpVideoBuf
  275. push ebp
  276. add edi,esi
  277. mov ebp,lpTextureAddr
  278. } }
  279. L9:
  280. __asm {
  281. mov eax,edx
  282. mov esi,ebx
  283. shr eax,18
  284. shr esi,18
  285. shl esi,5
  286. add esi,eax
  287. mov ax,word ptr[ebp + esi*2]
  288. and eax,0x739c
  289. shr eax,2
  290. mov si,word ptr [edi]
  291. and esi,0x739c
  292. shr esi,2
  293. sub si,word ptr [edi]
  294. sub eax,esi
  295. add edx,ctdx
  296. add ebx,ctdy
  297. mov word ptr[edi],ax
  298. add edi,2
  299. dec ecx
  300. jnz L9
  301. pop ebp
  302. }
  303. END_PAINT: ;
  304. }
  305. void HLineTDGlass75( void )
  306. {
  307. if ( xa < xb ) {
  308. _asm {
  309. mov edi,xa
  310. sar edi, 16
  311. mov xa16,edi
  312. mov eax,xb;
  313. sar eax, 16
  314. mov xb16,eax
  315. sub eax,edi;
  316. jz END_PAINT
  317. mov ecx,eax
  318. mov ebx,WinEX;
  319. cmp edi,ebx;
  320. jg END_PAINT;
  321. mov ebx,0;
  322. cmp xb16,ebx;
  323. jl END_PAINT;
  324. mov ebx,ecx;
  325. cmp ebx,1;
  326. jle L01
  327. lea ebx,[offset DivTbl + ebx*4]
  328. mov ebx,[ebx]
  329. mov eax,txb;
  330. sub eax,txa;
  331. imul ebx;
  332. mov ctdx,edx
  333. mov eax,tyb;
  334. sub eax,tya;
  335. imul ebx;
  336. mov ctdy,edx
  337. }L01: __asm {
  338. mov ebx,tya
  339. mov edx,txa
  340. cmp xa16,0;
  341. jge L011
  342. mov eax,ctdy;
  343. imul xa16
  344. sub ebx,eax
  345. mov eax,ctdx
  346. imul xa16
  347. mov edx,txa;
  348. sub edx,eax
  349. add ecx,xa16
  350. jz END_PAINT
  351. mov xa16,0
  352. } L011: __asm {
  353. mov eax,WinW
  354. cmp xb16,eax
  355. jl L012
  356. sub xb16,eax
  357. sub ecx,xb16
  358. jz END_PAINT
  359. } L012:
  360. __asm {
  361. mov edi, Y1
  362. mov esi,xa16
  363. shl edi, 11
  364. lea esi,[esi*2]
  365. add edi, lpVideoBuf
  366. push ebp
  367. add edi,esi
  368. mov ebp,lpTextureAddr
  369. } } else {
  370. __asm {
  371. mov edi,xb
  372. sar edi, 16
  373. mov xb16,edi
  374. mov eax,xa;
  375. sar eax, 16
  376. mov xa16,eax
  377. sub eax,edi;
  378. jz END_PAINT
  379. mov ecx,eax
  380. mov ebx,WinEX;
  381. cmp edi,ebx;
  382. jg END_PAINT;
  383. mov ebx,0;
  384. cmp xa16,ebx;
  385. jl END_PAINT;
  386. mov ebx,ecx;
  387. cmp ebx,1;
  388. jle L02
  389. lea ebx,[offset DivTbl + ebx*4]
  390. mov ebx,[ebx]
  391. mov eax,txa;
  392. sub eax,txb;
  393. imul ebx;
  394. mov ctdx,edx
  395. mov eax,tya;
  396. sub eax,tyb;
  397. imul ebx;
  398. mov ctdy,edx
  399. } L02: __asm {
  400. mov ebx,tyb;
  401. mov edx,txb;
  402. cmp xb16,0;
  403. jge L021
  404. mov eax,ctdy;
  405. imul xb16
  406. sub ebx,eax
  407. mov eax,ctdx
  408. imul xb16
  409. mov edx,txb;
  410. sub edx,eax
  411. add ecx,xb16
  412. jz END_PAINT
  413. mov xb16,0
  414. }L021: __asm{
  415. mov eax,WinW
  416. cmp xa16,eax
  417. jl L022
  418. sub xa16,eax
  419. sub ecx,xa16
  420. jz END_PAINT
  421. }L022:
  422. __asm{
  423. mov edi, Y1
  424. mov esi,xb16
  425. shl edi, 11
  426. lea esi,[esi*2]
  427. add edi, lpVideoBuf
  428. push ebp
  429. add edi,esi
  430. mov ebp,lpTextureAddr
  431. } }
  432. L9:
  433. __asm {
  434. mov eax,edx
  435. mov esi,ebx
  436. shr eax,18
  437. shr esi,18
  438. shl esi,5
  439. add esi,eax
  440. mov ax,word ptr[ebp + esi*2]
  441. and eax,0x739c
  442. shr eax,2
  443. neg ax
  444. add ax,word ptr[ebp + esi*2]
  445. mov si,word ptr [edi]
  446. and esi,0x739c
  447. shr esi,2
  448. add eax,esi
  449. add edx,ctdx
  450. add ebx,ctdy
  451. mov word ptr[edi],ax
  452. add edi,2
  453. dec ecx
  454. jnz L9
  455. pop ebp
  456. }
  457. END_PAINT: ;
  458. }
  459. void HLineTBGlass25( void )
  460. {
  461. if ( xa < xb ) {
  462. _asm {
  463. mov edi,xa
  464. sar edi, 16
  465. mov xa16,edi
  466. mov eax,xb;
  467. sar eax, 16
  468. mov xb16,eax
  469. sub eax,edi;
  470. jz END_PAINT
  471. mov ecx,eax
  472. mov ebx,WinEX;
  473. cmp edi,ebx;
  474. jg END_PAINT;
  475. mov ebx,0;
  476. cmp xb16,ebx;
  477. jl END_PAINT;
  478. mov ebx,ecx;
  479. cmp ebx,1;
  480. jle L01
  481. lea ebx,[offset DivTbl + ebx*4]
  482. mov ebx,[ebx]
  483. mov eax,txb;
  484. sub eax,txa;
  485. imul ebx;
  486. mov ctdx,edx
  487. mov eax,tyb;
  488. sub eax,tya;
  489. imul ebx;
  490. mov ctdy,edx
  491. }L01: __asm {
  492. mov ebx,tya
  493. mov edx,txa
  494. cmp xa16,0;
  495. jge L011
  496. mov eax,ctdy;
  497. imul xa16
  498. sub ebx,eax
  499. mov eax,ctdx
  500. imul xa16
  501. mov edx,txa;
  502. sub edx,eax
  503. add ecx,xa16
  504. jz END_PAINT
  505. mov xa16,0
  506. } L011: __asm {
  507. mov eax,WinW
  508. cmp xb16,eax
  509. jl L012
  510. sub xb16,eax
  511. sub ecx,xb16
  512. jz END_PAINT
  513. } L012:
  514. __asm {
  515. mov edi, Y1
  516. mov esi,xa16
  517. shl edi, 11
  518. lea esi,[esi*2]
  519. add edi, lpVideoBuf
  520. push ebp
  521. add edi,esi
  522. mov ebp,lpTextureAddr
  523. } } else {
  524. __asm {
  525. mov edi,xb
  526. sar edi, 16
  527. mov xb16,edi
  528. mov eax,xa;
  529. sar eax, 16
  530. mov xa16,eax
  531. sub eax,edi;
  532. jz END_PAINT
  533. mov ecx,eax
  534. mov ebx,WinEX;
  535. cmp edi,ebx;
  536. jg END_PAINT;
  537. mov ebx,0;
  538. cmp xa16,ebx;
  539. jl END_PAINT;
  540. mov ebx,ecx;
  541. cmp ebx,1;
  542. jle L02
  543. lea ebx,[offset DivTbl + ebx*4]
  544. mov ebx,[ebx]
  545. mov eax,txa;
  546. sub eax,txb;
  547. imul ebx;
  548. mov ctdx,edx
  549. mov eax,tya;
  550. sub eax,tyb;
  551. imul ebx;
  552. mov ctdy,edx
  553. } L02: __asm {
  554. mov ebx,tyb;
  555. mov edx,txb;
  556. cmp xb16,0;
  557. jge L021
  558. mov eax,ctdy;
  559. imul xb16
  560. sub ebx,eax
  561. mov eax,ctdx
  562. imul xb16
  563. mov edx,txb;
  564. sub edx,eax
  565. add ecx,xb16
  566. jz END_PAINT
  567. mov xb16,0
  568. }L021: __asm{
  569. mov eax,WinW
  570. cmp xa16,eax
  571. jl L022
  572. sub xa16,eax
  573. sub ecx,xa16
  574. jz END_PAINT
  575. }L022:
  576. __asm{
  577. mov edi, Y1
  578. mov esi,xb16
  579. shl edi, 11
  580. lea esi,[esi*2]
  581. add edi, lpVideoBuf
  582. push ebp
  583. add edi,esi
  584. mov ebp,lpTextureAddr
  585. } }
  586. L9:
  587. __asm {
  588. mov eax,edx
  589. mov esi,ebx
  590. shr eax,17
  591. and eax,63
  592. shr esi,17
  593. and esi,63
  594. shl esi,6
  595. add esi,eax
  596. mov ax,word ptr[ebp + esi*2]
  597. and eax,0x739c*2
  598. shr eax,3
  599. mov si,word ptr [edi]
  600. and esi,0x739c
  601. shr esi,2
  602. sub si,word ptr [edi]
  603. sub eax,esi
  604. add edx,ctdx
  605. add ebx,ctdy
  606. mov word ptr[edi],ax
  607. add edi,2
  608. dec ecx
  609. jnz L9
  610. pop ebp
  611. }
  612. END_PAINT: ;
  613. }
  614. void HLineTxGOURAUD( void )
  615. {
  616. __asm push ebp
  617. if ( xa < xb ) {
  618. _asm {
  619. mov edi,xa
  620. sar edi, 16
  621. dec edi
  622. mov xa16,edi
  623. mov eax,xb;
  624. sar eax, 16
  625. inc eax
  626. mov xb16,eax
  627. sub eax,edi;
  628. jz END_PAINT
  629. mov ecx,eax
  630. mov ebx,WinEX;
  631. cmp edi,ebx;
  632. jg END_PAINT;
  633. mov ebx,0;
  634. cmp xb16,ebx;
  635. jl END_PAINT;
  636. mov ebx,ecx;
  637. cmp ebx,1;
  638. jle L01
  639. lea ebx,[offset DivTbl + ebx*4]
  640. mov ebx,[ebx]
  641. mov eax,txb;
  642. sub eax,txa;
  643. imul ebx;
  644. mov ctdx,edx
  645. mov eax,tyb;
  646. sub eax,tya;
  647. imul ebx;
  648. mov ctdy,edx
  649. mov eax,ltb;
  650. sub eax,lta;
  651. imul ebx;
  652. mov cdlt,edx
  653. }L01: __asm {
  654. mov ebx,tya
  655. mov edx,txa
  656. mov ebp,lta
  657. cmp xa16,0;
  658. jge L011
  659. mov eax,cdlt;
  660. imul xa16
  661. sub ebp,eax
  662. mov eax,ctdy;
  663. imul xa16
  664. sub ebx,eax
  665. mov eax,ctdx
  666. imul xa16
  667. mov edx,txa;
  668. sub edx,eax
  669. add ecx,xa16
  670. jz END_PAINT
  671. mov xa16,0
  672. } L011: __asm {
  673. mov eax,WinW
  674. cmp xb16,eax
  675. jl L012
  676. sub xb16,eax
  677. sub ecx,xb16
  678. jz END_PAINT
  679. } L012:
  680. __asm {
  681. mov edi, Y1
  682. mov esi,xa16
  683. shl edi, 11
  684. lea esi,[esi*2]
  685. add edi, lpVideoBuf
  686. mov _sp,esp
  687. add edi,esi
  688. mov esp,lpTextureAddr
  689. } } else {
  690. __asm {
  691. mov edi,xb
  692. sar edi, 16
  693. dec edi
  694. mov xb16,edi
  695. mov eax,xa;
  696. sar eax, 16
  697. inc eax
  698. mov xa16,eax
  699. sub eax,edi;
  700. jz END_PAINT
  701. mov ecx,eax
  702. mov ebx,WinEX;
  703. cmp edi,ebx;
  704. jg END_PAINT;
  705. mov ebx,0;
  706. cmp xa16,ebx;
  707. jl END_PAINT;
  708. mov ebx,ecx;
  709. cmp ebx,1;
  710. jle L02
  711. lea ebx,[offset DivTbl + ebx*4]
  712. mov ebx,[ebx]
  713. mov eax,txa;
  714. sub eax,txb;
  715. imul ebx;
  716. mov ctdx,edx
  717. mov eax,tya;
  718. sub eax,tyb;
  719. imul ebx;
  720. mov ctdy,edx
  721. mov eax,lta;
  722. sub eax,ltb;
  723. imul ebx;
  724. mov cdlt,edx
  725. } L02: __asm {
  726. mov ebx,tyb;
  727. mov edx,txb;
  728. mov ebp,ltb
  729. cmp xb16,0;
  730. jge L021
  731. mov eax,cdlt;
  732. imul xb16
  733. sub ebp,eax
  734. mov eax,ctdy;
  735. imul xb16
  736. sub ebx,eax
  737. mov eax,ctdx
  738. imul xb16
  739. mov edx,txb;
  740. sub edx,eax
  741. add ecx,xb16
  742. jz END_PAINT
  743. mov xb16,0
  744. }L021: __asm{
  745. mov eax,WinW
  746. cmp xa16,eax
  747. jl L022
  748. sub xa16,eax
  749. sub ecx,xa16
  750. jz END_PAINT
  751. }L022:
  752. __asm{
  753. mov edi, Y1
  754. mov esi,xb16
  755. shl edi, 11
  756. lea esi,[esi*2]
  757. add edi, lpVideoBuf
  758. mov _sp,esp
  759. add edi,esi
  760. mov esp,lpTextureAddr
  761. } }
  762. __asm sal ctdy,7
  763. __asm nop
  764. __asm shl ebx,7
  765. L9:
  766. __asm {
  767. mov esi,ebx
  768. mov eax,ebp
  769. and esi,0x3F800000
  770. add esi,edx
  771. shr esi,16
  772. mov ax,word ptr[esp + esi*2]
  773. add edx,ctdx
  774. mov ax,word ptr[offset FadeTab + eax]
  775. add ebx,ctdy
  776. add ebp,cdlt
  777. mov word ptr[edi], ax
  778. add edi,2
  779. dec ecx
  780. jnz L9
  781. mov esp,_sp
  782. }
  783. END_PAINT:
  784. __asm pop ebp
  785. } // HLineTxA //
  786. void HLineTxB( void )
  787. {
  788. __asm push ebp
  789. if ( xa < xb ) {
  790. _asm {
  791. mov edi,xa
  792. sar edi, 16
  793. dec edi
  794. mov xa16,edi
  795. mov eax,xb;
  796. sar eax, 16
  797. inc eax
  798. mov xb16,eax
  799. sub eax,edi;
  800. jz END_PAINT
  801. mov ecx,eax
  802. mov ebx,WinEX;
  803. cmp edi,ebx;
  804. jg END_PAINT;
  805. mov ebx,0;
  806. cmp xb16,ebx;
  807. jl END_PAINT;
  808. mov ebx,ecx;
  809. cmp ebx,1;
  810. jle L01
  811. lea ebx,[offset DivTbl + ebx*4]
  812. mov ebx,[ebx]
  813. mov eax,txb;
  814. sub eax,txa;
  815. imul ebx;
  816. mov ctdx,edx
  817. mov eax,tyb;
  818. sub eax,tya;
  819. imul ebx;
  820. mov ctdy,edx
  821. mov eax,ltb;
  822. sub eax,lta;
  823. imul ebx;
  824. mov cdlt,edx
  825. }L01: __asm {
  826. mov ebx,tya
  827. mov edx,txa
  828. mov ebp,lta
  829. cmp xa16,0;
  830. jge L011
  831. mov eax,cdlt;
  832. imul xa16
  833. sub ebp,eax
  834. mov eax,ctdy;
  835. imul xa16
  836. sub ebx,eax
  837. mov eax,ctdx
  838. imul xa16
  839. mov edx,txa;
  840. sub edx,eax
  841. add ecx,xa16
  842. jz END_PAINT
  843. mov xa16,0
  844. } L011: __asm {
  845. mov eax,WinW
  846. cmp xb16,eax
  847. jl L012
  848. sub xb16,eax
  849. sub ecx,xb16
  850. jz END_PAINT
  851. } L012:
  852. __asm {
  853. mov edi, Y1
  854. mov esi,xa16
  855. shl edi, 11
  856. lea esi,[esi*2]
  857. add edi, lpVideoBuf
  858. mov _sp,esp
  859. add edi,esi
  860. mov esp,lpTextureAddr
  861. } } else {
  862. __asm {
  863. mov edi,xb
  864. sar edi, 16
  865. dec edi
  866. mov xb16,edi
  867. mov eax,xa;
  868. sar eax, 16
  869. inc eax
  870. mov xa16,eax
  871. sub eax,edi;
  872. jz END_PAINT
  873. mov ecx,eax
  874. mov ebx,WinEX;
  875. cmp edi,ebx;
  876. jg END_PAINT;
  877. mov ebx,0;
  878. cmp xa16,ebx;
  879. jl END_PAINT;
  880. mov ebx,ecx;
  881. cmp ebx,1;
  882. jle L02
  883. lea ebx,[offset DivTbl + ebx*4]
  884. mov ebx,[ebx]
  885. mov eax,txa;
  886. sub eax,txb;
  887. imul ebx;
  888. mov ctdx,edx
  889. mov eax,tya;
  890. sub eax,tyb;
  891. imul ebx;
  892. mov ctdy,edx
  893. mov eax,lta;
  894. sub eax,ltb;
  895. imul ebx;
  896. mov cdlt,edx
  897. } L02: __asm {
  898. mov ebx,tyb;
  899. mov edx,txb;
  900. mov ebp,ltb
  901. cmp xb16,0;
  902. jge L021
  903. mov eax,cdlt;
  904. imul xb16
  905. sub ebp,eax
  906. mov eax,ctdy;
  907. imul xb16
  908. sub ebx,eax
  909. mov eax,ctdx
  910. imul xb16
  911. mov edx,txb;
  912. sub edx,eax
  913. add ecx,xb16
  914. jz END_PAINT
  915. mov xb16,0
  916. }L021: __asm{
  917. mov eax,WinW
  918. cmp xa16,eax
  919. jl L022
  920. sub xa16,eax
  921. sub ecx,xa16
  922. jz END_PAINT
  923. }L022:
  924. __asm{
  925. mov edi, Y1
  926. mov esi,xb16
  927. shl edi, 11
  928. lea esi,[esi*2]
  929. add edi, lpVideoBuf
  930. mov _sp,esp
  931. add edi,esi
  932. mov esp,lpTextureAddr
  933. } }
  934. __asm sal ctdy,6
  935. __asm nop
  936. __asm shl ebx,6
  937. L9:
  938. __asm {
  939. mov esi,ebx
  940. mov eax,ebp
  941. and esi,0x3F800000
  942. add esi,edx
  943. shr esi,17
  944. mov ax,word ptr[esp + esi*2]
  945. add edx,ctdx
  946. mov ax,word ptr[offset FadeTab + eax]
  947. add ebx,ctdy
  948. add ebp,cdlt
  949. mov word ptr[edi],ax
  950. add edi,2
  951. dec ecx
  952. jnz L9
  953. mov esp,_sp
  954. }
  955. END_PAINT:
  956. __asm pop ebp
  957. } // HLineTxA //
  958. void HLineTxC( void )
  959. {
  960. __asm push ebp
  961. if ( xa < xb ) {
  962. _asm {
  963. mov edi,xa
  964. sar edi, 16
  965. mov xa16,edi
  966. mov eax,xb;
  967. sar eax, 16
  968. mov xb16,eax
  969. sub eax,edi;
  970. jz END_PAINT
  971. mov ecx,eax
  972. mov ebx,WinEX;
  973. cmp edi,ebx;
  974. jg END_PAINT;
  975. mov ebx,0;
  976. cmp xb16,ebx;
  977. jl END_PAINT;
  978. mov ebx,ecx;
  979. cmp ebx,1;
  980. jle L01
  981. lea ebx,[offset DivTbl + ebx*4]
  982. mov ebx,[ebx]
  983. mov eax,txb;
  984. sub eax,txa;
  985. imul ebx;
  986. mov ctdx,edx
  987. mov eax,tyb;
  988. sub eax,tya;
  989. imul ebx;
  990. mov ctdy,edx
  991. mov eax,ltb;
  992. sub eax,lta;
  993. imul ebx;
  994. mov cdlt,edx
  995. }L01: __asm {
  996. mov ebx,tya
  997. mov edx,txa
  998. mov ebp,lta
  999. cmp xa16,0;
  1000. jge L011
  1001. mov eax,cdlt;
  1002. imul xa16
  1003. sub ebp,eax
  1004. mov eax,ctdy;
  1005. imul xa16
  1006. sub ebx,eax
  1007. mov eax,ctdx
  1008. imul xa16
  1009. mov edx,txa;
  1010. sub edx,eax
  1011. add ecx,xa16
  1012. jz END_PAINT
  1013. mov xa16,0
  1014. } L011: __asm {
  1015. mov eax,WinW
  1016. cmp xb16,eax
  1017. jl L012
  1018. sub xb16,eax
  1019. sub ecx,xb16
  1020. jz END_PAINT
  1021. } L012:
  1022. __asm {
  1023. mov edi, Y1
  1024. mov esi,xa16
  1025. shl edi, 11
  1026. lea esi,[esi*2]
  1027. add edi, lpVideoBuf
  1028. mov _sp,esp
  1029. add edi,esi
  1030. mov esp,lpTextureAddr
  1031. } } else {
  1032. __asm {
  1033. mov edi,xb
  1034. sar edi, 16
  1035. mov xb16,edi
  1036. mov eax,xa;
  1037. sar eax, 16
  1038. mov xa16,eax
  1039. sub eax,edi;
  1040. jz END_PAINT
  1041. mov ecx,eax
  1042. mov ebx,WinEX;
  1043. cmp edi,ebx;
  1044. jg END_PAINT;
  1045. mov ebx,0;
  1046. cmp xa16,ebx;
  1047. jl END_PAINT;
  1048. mov ebx,ecx;
  1049. cmp ebx,1;
  1050. jle L02
  1051. lea ebx,[offset DivTbl + ebx*4]
  1052. mov ebx,[ebx]
  1053. mov eax,txa;
  1054. sub eax,txb;
  1055. imul ebx;
  1056. mov ctdx,edx
  1057. mov eax,tya;
  1058. sub eax,tyb;
  1059. imul ebx;
  1060. mov ctdy,edx
  1061. mov eax,lta;
  1062. sub eax,ltb;
  1063. imul ebx;
  1064. mov cdlt,edx
  1065. } L02: __asm {
  1066. mov ebx,tyb;
  1067. mov edx,txb;
  1068. mov ebp,ltb
  1069. cmp xb16,0;
  1070. jge L021
  1071. mov eax,cdlt;
  1072. imul xb16
  1073. sub ebp,eax
  1074. mov eax,ctdy;
  1075. imul xb16
  1076. sub ebx,eax
  1077. mov eax,ctdx
  1078. imul xb16
  1079. mov edx,txb;
  1080. sub edx,eax
  1081. add ecx,xb16
  1082. jz END_PAINT
  1083. mov xb16,0
  1084. }L021: __asm{
  1085. mov eax,WinW
  1086. cmp xa16,eax
  1087. jl L022
  1088. sub xa16,eax
  1089. sub ecx,xa16
  1090. jz END_PAINT
  1091. }L022:
  1092. __asm{
  1093. mov edi, Y1
  1094. mov esi,xb16
  1095. shl edi, 11
  1096. lea esi,[esi*2]
  1097. add edi, lpVideoBuf
  1098. mov _sp,esp
  1099. add edi,esi
  1100. mov esp,lpTextureAddr
  1101. } }
  1102. __asm {
  1103. shl ebx,5
  1104. nop
  1105. sal ctdy,5
  1106. }
  1107. L9:
  1108. __asm {
  1109. mov esi,ebx
  1110. mov eax,ebp
  1111. and esi,0xFF800000
  1112. add esi,edx
  1113. shr esi,18
  1114. mov ax,word ptr[esp + esi*2]
  1115. add edx,ctdx
  1116. mov ax,word ptr[offset FadeTab + eax]
  1117. add ebx,ctdy
  1118. add ebp,cdlt
  1119. mov word ptr[edi],ax
  1120. add edi,2
  1121. dec ecx
  1122. jnz L9
  1123. mov esp,_sp
  1124. }
  1125. END_PAINT:
  1126. __asm pop ebp
  1127. } // HLineTxC //
  1128. void HLineTxModel( void )
  1129. {
  1130. __asm push ebp
  1131. if ( xa < xb ) {
  1132. _asm {
  1133. movsx edi,word ptr[offset xa + 2]
  1134. movsx ecx,word ptr[offset xb + 2]
  1135. mov xa16,edi
  1136. mov xb16,ecx
  1137. sub ecx,edi
  1138. jz END_PAINT
  1139. mov ebx,WinEX
  1140. xor edx,edx
  1141. cmp edi,ebx
  1142. jg END_PAINT;
  1143. cmp xb16,edx
  1144. jl END_PAINT;
  1145. mov ebx,ecx
  1146. cmp ebx,1
  1147. jle L01
  1148. mov ebx,[offset DivTbl + ebx*4]
  1149. mov eax,txb;
  1150. sub eax,txa;
  1151. imul ebx;
  1152. mov ctdx,edx
  1153. mov eax,tyb;
  1154. sub eax,tya;
  1155. imul ebx;
  1156. mov ctdy,edx
  1157. }L01: __asm {
  1158. mov ebx,tya
  1159. mov edx,txa
  1160. cmp xa16,0;
  1161. jge L011
  1162. mov eax,ctdy;
  1163. imul xa16
  1164. sub ebx,eax
  1165. mov eax,ctdx
  1166. imul xa16
  1167. mov edx,txa;
  1168. sub edx,eax
  1169. add ecx,xa16
  1170. jz END_PAINT
  1171. mov xa16,0
  1172. } L011: __asm {
  1173. mov eax,WinW
  1174. cmp xb16,eax
  1175. jl L012
  1176. sub xb16,eax
  1177. sub ecx,xb16
  1178. jz END_PAINT
  1179. } L012:
  1180. __asm {
  1181. mov edi, Y1
  1182. mov esi,xa16
  1183. shl edi, 11
  1184. lea esi,[esi*2]
  1185. add edi, lpVideoBuf
  1186. mov _sp,esp
  1187. add edi,esi
  1188. mov esp,lpTextureAddr
  1189. } } else {
  1190. __asm {
  1191. movsx ecx,word ptr[offset xa + 2]
  1192. movsx edi,word ptr[offset xb + 2]
  1193. mov xa16,ecx
  1194. mov xb16,edi
  1195. sub ecx,edi;
  1196. jz END_PAINT
  1197. mov ebx,WinEX
  1198. xor edx,edx
  1199. cmp edi,ebx;
  1200. jg END_PAINT;
  1201. cmp xa16,edx
  1202. jl END_PAINT;
  1203. mov ebx,ecx;
  1204. cmp ebx,1;
  1205. jle L02
  1206. mov ebx,[offset DivTbl + ebx*4]
  1207. mov eax,txa;
  1208. sub eax,txb;
  1209. imul ebx;
  1210. mov ctdx,edx
  1211. mov eax,tya;
  1212. sub eax,tyb;
  1213. imul ebx;
  1214. mov ctdy,edx
  1215. } L02: __asm {
  1216. mov ebx,tyb;
  1217. mov edx,txb;
  1218. cmp xb16,0;
  1219. jge L021
  1220. mov eax,ctdy;
  1221. imul xb16
  1222. sub ebx,eax
  1223. mov eax,ctdx
  1224. imul xb16
  1225. mov edx,txb;
  1226. sub edx,eax
  1227. add ecx,xb16
  1228. jz END_PAINT
  1229. mov xb16,0
  1230. }L021: __asm{
  1231. mov eax,WinW
  1232. cmp xa16,eax
  1233. jl L022
  1234. sub xa16,eax
  1235. sub ecx,xa16
  1236. jz END_PAINT
  1237. }L022:
  1238. __asm{
  1239. mov edi, Y1
  1240. mov esi,xb16
  1241. shl edi, 11
  1242. lea esi,[esi*2]
  1243. add edi, lpVideoBuf
  1244. mov _sp,esp
  1245. add edi,esi
  1246. mov esp,lpTextureAddr
  1247. } }
  1248. __asm {
  1249. mov ebp, iModelFade
  1250. sub edi,2
  1251. shl ctdy,8
  1252. shl ebx,8
  1253. xor eax,eax
  1254. cmp OpacityMode,0
  1255. jz L9
  1256. test OpacityMode,sfTransparent
  1257. jnz L11
  1258. jmp L10
  1259. }
  1260. //================ normal loop ==========================//
  1261. L9:
  1262. __asm {
  1263. mov esi,ebx
  1264. add edi,2
  1265. and esi,0xFF000000
  1266. add esi,edx
  1267. shr esi,16
  1268. mov ax,word ptr[esp + esi*2]
  1269. mov ax,word ptr[ebp + eax]
  1270. mov word ptr[edi], ax
  1271. add edx,ctdx
  1272. add ebx,ctdy
  1273. dec ecx
  1274. jnz L9
  1275. mov esp,_sp
  1276. jmp END_PAINT
  1277. }
  1278. //================ opacity loop ==========================//
  1279. L10:
  1280. __asm {
  1281. mov esi,ebx
  1282. add edi,2
  1283. and esi,0xFF000000
  1284. add esi,edx
  1285. shr esi,16
  1286. mov ax,word ptr[esp + esi*2]
  1287. cmp eax,0
  1288. jz LSKIP
  1289. mov ax,word ptr[ebp + eax]
  1290. mov word ptr[edi], ax
  1291. } LSKIP: __asm {
  1292. add edx,ctdx
  1293. add ebx,ctdy
  1294. dec ecx
  1295. jnz L10
  1296. mov esp,_sp
  1297. jmp END_PAINT
  1298. }
  1299. //================ opacity loop ==========================//
  1300. L11:
  1301. __asm {
  1302. mov esi,ebx
  1303. add edi,2
  1304. and esi,0xFF000000
  1305. add esi,edx
  1306. shr esi,16
  1307. mov ax,word ptr[esp + esi*2]
  1308. cmp eax,0
  1309. jz LSKIP2
  1310. mov ax,word ptr[ebp + eax]
  1311. mov si,word ptr[edi]
  1312. and eax,0x7bde
  1313. and esi,0x7bde
  1314. add eax,esi
  1315. shr eax,1
  1316. mov word ptr[edi], ax
  1317. } LSKIP2: __asm {
  1318. add edx,ctdx
  1319. add ebx,ctdy
  1320. dec ecx
  1321. jnz L11
  1322. mov esp,_sp
  1323. }
  1324. END_PAINT:
  1325. __asm pop ebp
  1326. } // HLineTxModel //
  1327. void HLineTxModel2( void )
  1328. {
  1329. __asm push ebp
  1330. if ( xa < xb ) {
  1331. _asm {
  1332. movsx edi,word ptr[offset xa + 2]
  1333. movsx ecx,word ptr[offset xb + 2]
  1334. mov xa16,edi
  1335. mov xb16,ecx
  1336. sub ecx,edi
  1337. jz END_PAINT
  1338. mov ebx,WinEX
  1339. xor edx,edx
  1340. cmp edi,ebx
  1341. jg END_PAINT;
  1342. cmp xb16,edx
  1343. jl END_PAINT;
  1344. mov ebx,ecx
  1345. cmp ebx,1
  1346. jle L01
  1347. mov ebx,[offset DivTbl + ebx*4]
  1348. mov eax,txb;
  1349. sub eax,txa;
  1350. imul ebx;
  1351. mov ctdx,edx
  1352. mov eax,tyb;
  1353. sub eax,tya;
  1354. imul ebx;
  1355. mov ctdy,edx
  1356. }L01: __asm {
  1357. mov ebx,tya
  1358. mov edx,txa
  1359. cmp xa16,0;
  1360. jge L011
  1361. mov eax,ctdy;
  1362. imul xa16
  1363. sub ebx,eax
  1364. mov eax,ctdx
  1365. imul xa16
  1366. mov edx,txa;
  1367. sub edx,eax
  1368. add ecx,xa16
  1369. jz END_PAINT
  1370. mov xa16,0
  1371. } L011: __asm {
  1372. mov eax,WinW
  1373. cmp xb16,eax
  1374. jl L012
  1375. sub xb16,eax
  1376. sub ecx,xb16
  1377. jz END_PAINT
  1378. } L012:
  1379. __asm {
  1380. mov edi, Y1
  1381. mov esi,xa16
  1382. shl edi, 11
  1383. lea esi,[esi*2]
  1384. add edi, lpVideoBuf
  1385. mov _sp,esp
  1386. add edi,esi
  1387. mov esp,lpTextureAddr
  1388. } } else {
  1389. __asm {
  1390. movsx ecx,word ptr[offset xa + 2]
  1391. movsx edi,word ptr[offset xb + 2]
  1392. mov xa16,ecx
  1393. mov xb16,edi
  1394. sub ecx,edi;
  1395. jz END_PAINT
  1396. mov ebx,WinEX
  1397. xor edx,edx
  1398. cmp edi,ebx;
  1399. jg END_PAINT;
  1400. cmp xa16,edx
  1401. jl END_PAINT;
  1402. mov ebx,ecx;
  1403. cmp ebx,1;
  1404. jle L02
  1405. mov ebx,[offset DivTbl + ebx*4]
  1406. mov eax,txa;
  1407. sub eax,txb;
  1408. imul ebx;
  1409. mov ctdx,edx
  1410. mov eax,tya;
  1411. sub eax,tyb;
  1412. imul ebx;
  1413. mov ctdy,edx
  1414. } L02: __asm {
  1415. mov ebx,tyb;
  1416. mov edx,txb;
  1417. cmp xb16,0;
  1418. jge L021
  1419. mov eax,ctdy;
  1420. imul xb16
  1421. sub ebx,eax
  1422. mov eax,ctdx
  1423. imul xb16
  1424. mov edx,txb;
  1425. sub edx,eax
  1426. add ecx,xb16
  1427. jz END_PAINT
  1428. mov xb16,0
  1429. }L021: __asm{
  1430. mov eax,WinW
  1431. cmp xa16,eax
  1432. jl L022
  1433. sub xa16,eax
  1434. sub ecx,xa16
  1435. jz END_PAINT
  1436. }L022:
  1437. __asm{
  1438. mov edi, Y1
  1439. mov esi,xb16
  1440. shl edi, 11
  1441. lea esi,[esi*2]
  1442. add edi, lpVideoBuf
  1443. mov _sp,esp
  1444. add edi,esi
  1445. mov esp,lpTextureAddr
  1446. } }
  1447. __asm {
  1448. mov ebp, iModelFade
  1449. sub edi,2
  1450. shl ctdy,7
  1451. shl ebx,7
  1452. xor eax,eax
  1453. cmp OpacityMode,0
  1454. jnz L10
  1455. }
  1456. //================ normal loop ==========================//
  1457. L9:
  1458. __asm {
  1459. mov esi,ebx
  1460. add edi,2
  1461. and esi,0xFF000000
  1462. add esi,edx
  1463. shr esi,17
  1464. mov ax,word ptr[esp + esi*2]
  1465. mov ax,word ptr[ebp + eax]
  1466. mov word ptr[edi], ax
  1467. add edx,ctdx
  1468. add ebx,ctdy
  1469. dec ecx
  1470. jnz L9
  1471. mov esp,_sp
  1472. jmp END_PAINT
  1473. }
  1474. //================ opacity loop ==========================//
  1475. L10:
  1476. __asm {
  1477. mov esi,ebx
  1478. add edi,2
  1479. and esi,0xFF000000
  1480. add esi,edx
  1481. shr esi,17
  1482. mov ax,word ptr[esp + esi*2]
  1483. cmp eax,0
  1484. jz LSKIP
  1485. mov ax,word ptr[ebp + eax]
  1486. mov word ptr[edi], ax
  1487. } LSKIP: __asm {
  1488. add edx,ctdx
  1489. add ebx,ctdy
  1490. dec ecx
  1491. jnz L10
  1492. mov esp,_sp
  1493. }
  1494. END_PAINT:
  1495. __asm pop ebp
  1496. } // HLineTxModel //
  1497. void HLineTxModel3( void )
  1498. {
  1499. __asm push ebp
  1500. if ( xa < xb ) {
  1501. _asm {
  1502. movsx edi,word ptr[offset xa + 2]
  1503. movsx ecx,word ptr[offset xb + 2]
  1504. mov xa16,edi
  1505. mov xb16,ecx
  1506. sub ecx,edi
  1507. jz END_PAINT
  1508. mov ebx,WinEX
  1509. xor edx,edx
  1510. cmp edi,ebx
  1511. jg END_PAINT;
  1512. cmp xb16,edx
  1513. jl END_PAINT;
  1514. mov ebx,ecx
  1515. cmp ebx,1
  1516. jle L01
  1517. mov ebx,[offset DivTbl + ebx*4]
  1518. mov eax,txb;
  1519. sub eax,txa;
  1520. imul ebx;
  1521. mov ctdx,edx
  1522. mov eax,tyb;
  1523. sub eax,tya;
  1524. imul ebx;
  1525. mov ctdy,edx
  1526. }L01: __asm {
  1527. mov ebx,tya
  1528. mov edx,txa
  1529. cmp xa16,0;
  1530. jge L011
  1531. mov eax,ctdy;
  1532. imul xa16
  1533. sub ebx,eax
  1534. mov eax,ctdx
  1535. imul xa16
  1536. mov edx,txa;
  1537. sub edx,eax
  1538. add ecx,xa16
  1539. jz END_PAINT
  1540. mov xa16,0
  1541. } L011: __asm {
  1542. mov eax,WinW
  1543. cmp xb16,eax
  1544. jl L012
  1545. sub xb16,eax
  1546. sub ecx,xb16
  1547. jz END_PAINT
  1548. } L012:
  1549. __asm {
  1550. mov edi, Y1
  1551. mov esi,xa16
  1552. shl edi, 11
  1553. lea esi,[esi*2]
  1554. add edi, lpVideoBuf
  1555. mov _sp,esp
  1556. add edi,esi
  1557. mov esp,lpTextureAddr
  1558. } } else {
  1559. __asm {
  1560. movsx ecx,word ptr[offset xa + 2]
  1561. movsx edi,word ptr[offset xb + 2]
  1562. mov xa16,ecx
  1563. mov xb16,edi
  1564. sub ecx,edi;
  1565. jz END_PAINT
  1566. mov ebx,WinEX
  1567. xor edx,edx
  1568. cmp edi,ebx;
  1569. jg END_PAINT;
  1570. cmp xa16,edx
  1571. jl END_PAINT;
  1572. mov ebx,ecx;
  1573. cmp ebx,1;
  1574. jle L02
  1575. mov ebx,[offset DivTbl + ebx*4]
  1576. mov eax,txa;
  1577. sub eax,txb;
  1578. imul ebx;
  1579. mov ctdx,edx
  1580. mov eax,tya;
  1581. sub eax,tyb;
  1582. imul ebx;
  1583. mov ctdy,edx
  1584. } L02: __asm {
  1585. mov ebx,tyb;
  1586. mov edx,txb;
  1587. cmp xb16,0;
  1588. jge L021
  1589. mov eax,ctdy;
  1590. imul xb16
  1591. sub ebx,eax
  1592. mov eax,ctdx
  1593. imul xb16
  1594. mov edx,txb;
  1595. sub edx,eax
  1596. add ecx,xb16
  1597. jz END_PAINT
  1598. mov xb16,0
  1599. }L021: __asm{
  1600. mov eax,WinW
  1601. cmp xa16,eax
  1602. jl L022
  1603. sub xa16,eax
  1604. sub ecx,xa16
  1605. jz END_PAINT
  1606. }L022:
  1607. __asm{
  1608. mov edi, Y1
  1609. mov esi,xb16
  1610. shl edi, 11
  1611. lea esi,[esi*2]
  1612. add edi, lpVideoBuf
  1613. mov _sp,esp
  1614. add edi,esi
  1615. mov esp,lpTextureAddr
  1616. } }
  1617. __asm {
  1618. mov ebp, iModelFade
  1619. sub edi,2
  1620. shl ctdy,6
  1621. shl ebx,6
  1622. xor eax,eax
  1623. cmp OpacityMode,0
  1624. jnz L10
  1625. }
  1626. //================ normal loop ==========================//
  1627. L9:
  1628. __asm {
  1629. mov esi,ebx
  1630. add edi,2
  1631. and esi,0xFF000000
  1632. add esi,edx
  1633. shr esi,18
  1634. mov ax,word ptr[esp + esi*2]
  1635. mov ax,word ptr[ebp + eax]
  1636. mov word ptr[edi], ax
  1637. add edx,ctdx
  1638. add ebx,ctdy
  1639. dec ecx
  1640. jnz L9
  1641. mov esp,_sp
  1642. jmp END_PAINT
  1643. }
  1644. //================ opacity loop ==========================//
  1645. L10:
  1646. __asm {
  1647. mov esi,ebx
  1648. add edi,2
  1649. and esi,0xFF000000
  1650. add esi,edx
  1651. shr esi,18
  1652. mov ax,word ptr[esp + esi*2]
  1653. cmp eax,0
  1654. jz LSKIP
  1655. mov ax,word ptr[ebp + eax]
  1656. mov word ptr[edi], ax
  1657. } LSKIP: __asm {
  1658. add edx,ctdx
  1659. add ebx,ctdy
  1660. dec ecx
  1661. jnz L10
  1662. mov esp,_sp
  1663. }
  1664. END_PAINT:
  1665. __asm pop ebp
  1666. } // HLineTxModel //
  1667. void HLineTxModelBMP( void )
  1668. {
  1669. _asm {
  1670. push ebp
  1671. movsx edi,word ptr[offset xa + 2]
  1672. movsx ecx,word ptr[offset xb + 2]
  1673. mov xa16,edi
  1674. mov xb16,ecx
  1675. sub ecx,edi
  1676. jz END_PAINT
  1677. mov ebx,WinEX
  1678. xor edx,edx
  1679. cmp edi,ebx
  1680. jg END_PAINT;
  1681. cmp xb16,edx
  1682. jl END_PAINT;
  1683. mov ebx,ecx
  1684. cmp ebx,1
  1685. jle L01
  1686. mov ebx,[offset DivTbl + ebx*4]
  1687. mov eax,128*256*256
  1688. imul ebx
  1689. mov ctdx,edx
  1690. }L01: __asm {
  1691. mov ebx,0
  1692. cmp xa16,0;
  1693. jge L011
  1694. mov eax,ctdx;
  1695. imul xa16
  1696. sub ebx,eax
  1697. add ecx,xa16
  1698. jz END_PAINT
  1699. mov xa16,0
  1700. } L011: __asm {
  1701. mov eax,WinW
  1702. cmp xb16,eax
  1703. jl L012
  1704. sub xb16,eax
  1705. sub ecx,xb16
  1706. jz END_PAINT
  1707. } L012: __asm {
  1708. mov edi, Y1
  1709. mov esi,xa16
  1710. shl edi, 11
  1711. lea esi,[esi*2]
  1712. add edi, lpVideoBuf
  1713. mov _sp,esp
  1714. add edi,esi
  1715. mov esp,lpTextureAddr
  1716. mov ebp, iModelFade
  1717. sub edi,2
  1718. //shl ebx,7
  1719. xor eax,eax
  1720. mov edx, ctdx
  1721. }
  1722. //================ opacity loop ==========================//
  1723. L10:
  1724. __asm {
  1725. mov esi,ebx
  1726. add edi,2
  1727. shr esi,16
  1728. mov ax,word ptr[esp + esi*2]
  1729. cmp eax,0
  1730. jz LSKIP
  1731. mov ax,word ptr[ebp + eax]
  1732. mov word ptr[edi], ax
  1733. } LSKIP: __asm {
  1734. add ebx,edx
  1735. dec ecx
  1736. jnz L10
  1737. mov esp,_sp
  1738. }
  1739. END_PAINT:
  1740. __asm pop ebp
  1741. }
  1742. void HLineTxModel25( void )
  1743. {
  1744. __asm push ebp
  1745. if ( xa < xb ) {
  1746. _asm {
  1747. mov edi,xa
  1748. sar edi, 16
  1749. mov xa16,edi
  1750. mov eax,xb;
  1751. sar eax, 16
  1752. mov xb16,eax
  1753. sub eax,edi;
  1754. jz END_PAINT
  1755. mov ecx,eax
  1756. mov ebx,WinEX;
  1757. cmp edi,ebx;
  1758. jg END_PAINT;
  1759. mov ebx,0;
  1760. cmp xb16,ebx;
  1761. jl END_PAINT;
  1762. mov ebx,ecx;
  1763. cmp ebx,1;
  1764. jle L01
  1765. lea ebx,[offset DivTbl + ebx*4]
  1766. mov ebx,[ebx]
  1767. mov eax,txb;
  1768. sub eax,txa;
  1769. imul ebx;
  1770. mov ctdx,edx
  1771. mov eax,tyb;
  1772. sub eax,tya;
  1773. imul ebx;
  1774. mov ctdy,edx
  1775. }L01: __asm {
  1776. mov ebx,tya
  1777. mov edx,txa
  1778. cmp xa16,0;
  1779. jge L011
  1780. mov eax,ctdy;
  1781. imul xa16
  1782. sub ebx,eax
  1783. mov eax,ctdx
  1784. imul xa16
  1785. mov edx,txa;
  1786. sub edx,eax
  1787. add ecx,xa16
  1788. jz END_PAINT
  1789. mov xa16,0
  1790. } L011: __asm {
  1791. mov eax,WinW
  1792. cmp xb16,eax
  1793. jl L012
  1794. sub xb16,eax
  1795. sub ecx,xb16
  1796. jz END_PAINT
  1797. } L012:
  1798. __asm {
  1799. mov edi, Y1
  1800. mov esi,xa16
  1801. shl edi, 11
  1802. lea esi,[esi*2]
  1803. add edi, lpVideoBuf
  1804. mov _sp,esp
  1805. add edi,esi
  1806. mov esp,lpTextureAddr
  1807. } } else {
  1808. __asm {
  1809. mov edi,xb
  1810. sar edi, 16
  1811. mov xb16,edi
  1812. mov eax,xa;
  1813. sar eax, 16
  1814. mov xa16,eax
  1815. sub eax,edi;
  1816. jz END_PAINT
  1817. mov ecx,eax
  1818. mov ebx,WinEX;
  1819. cmp edi,ebx;
  1820. jg END_PAINT;
  1821. mov ebx,0;
  1822. cmp xa16,ebx;
  1823. jl END_PAINT;
  1824. mov ebx,ecx;
  1825. cmp ebx,1;
  1826. jle L02
  1827. lea ebx,[offset DivTbl + ebx*4]
  1828. mov ebx,[ebx]
  1829. mov eax,txa;
  1830. sub eax,txb;
  1831. imul ebx;
  1832. mov ctdx,edx
  1833. mov eax,tya;
  1834. sub eax,tyb;
  1835. imul ebx;
  1836. mov ctdy,edx
  1837. } L02: __asm {
  1838. mov ebx,tyb;
  1839. mov edx,txb;
  1840. cmp xb16,0;
  1841. jge L021
  1842. mov eax,ctdy;
  1843. imul xb16
  1844. sub ebx,eax
  1845. mov eax,ctdx
  1846. imul xb16
  1847. mov edx,txb;
  1848. sub edx,eax
  1849. add ecx,xb16
  1850. jz END_PAINT
  1851. mov xb16,0
  1852. }L021: __asm{
  1853. mov eax,WinW
  1854. cmp xa16,eax
  1855. jl L022
  1856. sub xa16,eax
  1857. sub ecx,xa16
  1858. jz END_PAINT
  1859. }L022:
  1860. __asm{
  1861. mov edi, Y1
  1862. mov esi,xb16
  1863. shl edi, 11
  1864. lea esi,[esi*2]
  1865. add edi, lpVideoBuf
  1866. mov _sp,esp
  1867. add edi,esi
  1868. mov esp,lpTextureAddr
  1869. } }
  1870. __asm mov ebp, iModelFade
  1871. __asm sub edi,2
  1872. L9:
  1873. __asm {
  1874. mov eax,edx
  1875. mov esi,ebx
  1876. shr eax,18
  1877. and esi,0xFFFC0000
  1878. shr esi,12
  1879. add edi,2
  1880. add esi,eax
  1881. mov ax,word ptr[esp + esi*2]
  1882. cmp eax,0
  1883. je L10
  1884. and eax,0x739c*2
  1885. shr eax,3
  1886. mov si,word ptr [edi]
  1887. and esi,0x739c
  1888. shr esi,2
  1889. sub si,word ptr [edi]
  1890. sub eax,esi
  1891. mov word ptr[edi], ax
  1892. } L10: __asm {
  1893. add edx,ctdx
  1894. add ebx,ctdy
  1895. dec ecx
  1896. jnz L9
  1897. mov esp,_sp
  1898. }
  1899. END_PAINT:
  1900. __asm pop ebp
  1901. } // HLineTxModel //
  1902. void HLineTxModel50( void )
  1903. {
  1904. __asm push ebp
  1905. if ( xa < xb ) {
  1906. _asm {
  1907. mov edi,xa
  1908. sar edi, 16
  1909. mov xa16,edi
  1910. mov eax,xb;
  1911. sar eax, 16
  1912. mov xb16,eax
  1913. sub eax,edi;
  1914. jz END_PAINT
  1915. mov ecx,eax
  1916. mov ebx,WinEX;
  1917. cmp edi,ebx;
  1918. jg END_PAINT;
  1919. mov ebx,0;
  1920. cmp xb16,ebx;
  1921. jl END_PAINT;
  1922. mov ebx,ecx;
  1923. cmp ebx,1;
  1924. jle L01
  1925. lea ebx,[offset DivTbl + ebx*4]
  1926. mov ebx,[ebx]
  1927. mov eax,txb;
  1928. sub eax,txa;
  1929. imul ebx;
  1930. mov ctdx,edx
  1931. mov eax,tyb;
  1932. sub eax,tya;
  1933. imul ebx;
  1934. mov ctdy,edx
  1935. }L01: __asm {
  1936. mov ebx,tya
  1937. mov edx,txa
  1938. cmp xa16,0;
  1939. jge L011
  1940. mov eax,ctdy;
  1941. imul xa16
  1942. sub ebx,eax
  1943. mov eax,ctdx
  1944. imul xa16
  1945. mov edx,txa;
  1946. sub edx,eax
  1947. add ecx,xa16
  1948. jz END_PAINT
  1949. mov xa16,0
  1950. } L011: __asm {
  1951. mov eax,WinW
  1952. cmp xb16,eax
  1953. jl L012
  1954. sub xb16,eax
  1955. sub ecx,xb16
  1956. jz END_PAINT
  1957. } L012:
  1958. __asm {
  1959. mov edi, Y1
  1960. mov esi,xa16
  1961. shl edi, 11
  1962. lea esi,[esi*2]
  1963. add edi, lpVideoBuf
  1964. mov _sp,esp
  1965. add edi,esi
  1966. mov esp,lpTextureAddr
  1967. } } else {
  1968. __asm {
  1969. mov edi,xb
  1970. sar edi, 16
  1971. mov xb16,edi
  1972. mov eax,xa;
  1973. sar eax, 16
  1974. mov xa16,eax
  1975. sub eax,edi;
  1976. jz END_PAINT
  1977. mov ecx,eax
  1978. mov ebx,WinEX;
  1979. cmp edi,ebx;
  1980. jg END_PAINT;
  1981. mov ebx,0;
  1982. cmp xa16,ebx;
  1983. jl END_PAINT;
  1984. mov ebx,ecx;
  1985. cmp ebx,1;
  1986. jle L02
  1987. lea ebx,[offset DivTbl + ebx*4]
  1988. mov ebx,[ebx]
  1989. mov eax,txa;
  1990. sub eax,txb;
  1991. imul ebx;
  1992. mov ctdx,edx
  1993. mov eax,tya;
  1994. sub eax,tyb;
  1995. imul ebx;
  1996. mov ctdy,edx
  1997. } L02: __asm {
  1998. mov ebx,tyb;
  1999. mov edx,txb;
  2000. cmp xb16,0;
  2001. jge L021
  2002. mov eax,ctdy;
  2003. imul xb16
  2004. sub ebx,eax
  2005. mov eax,ctdx
  2006. imul xb16
  2007. mov edx,txb;
  2008. sub edx,eax
  2009. add ecx,xb16
  2010. jz END_PAINT
  2011. mov xb16,0
  2012. }L021: __asm{
  2013. mov eax,WinW
  2014. cmp xa16,eax
  2015. jl L022
  2016. sub xa16,eax
  2017. sub ecx,xa16
  2018. jz END_PAINT
  2019. }L022:
  2020. __asm{
  2021. mov edi, Y1
  2022. mov esi,xb16
  2023. shl edi, 11
  2024. lea esi,[esi*2]
  2025. add edi, lpVideoBuf
  2026. mov _sp,esp
  2027. add edi,esi
  2028. mov esp,lpTextureAddr
  2029. } }
  2030. __asm mov ebp, iModelFade
  2031. __asm sub edi,2
  2032. L9:
  2033. __asm {
  2034. mov eax,edx
  2035. mov esi,ebx
  2036. shr eax,18
  2037. and esi,0xFFFC0000
  2038. shr esi,12
  2039. add edi,2
  2040. add esi,eax
  2041. mov ax,word ptr[esp + esi*2]
  2042. cmp eax,0
  2043. je L10
  2044. and eax,0x7bde*2
  2045. mov si,word ptr [edi]
  2046. shr eax,1
  2047. and esi,0x7bde
  2048. add eax,esi
  2049. shr eax,1
  2050. mov word ptr[edi], ax
  2051. } L10: __asm {
  2052. add edx,ctdx
  2053. add ebx,ctdy
  2054. dec ecx
  2055. jnz L9
  2056. mov esp,_sp
  2057. }
  2058. END_PAINT:
  2059. __asm pop ebp
  2060. } // HLineTxModel //
  2061. void HLineTxModel75( void )
  2062. {
  2063. __asm push ebp
  2064. if ( xa < xb ) {
  2065. _asm {
  2066. mov edi,xa
  2067. sar edi, 16
  2068. mov xa16,edi
  2069. mov eax,xb;
  2070. sar eax, 16
  2071. mov xb16,eax
  2072. sub eax,edi;
  2073. jz END_PAINT
  2074. mov ecx,eax
  2075. mov ebx,WinEX;
  2076. cmp edi,ebx;
  2077. jg END_PAINT;
  2078. mov ebx,0;
  2079. cmp xb16,ebx;
  2080. jl END_PAINT;
  2081. mov ebx,ecx;
  2082. cmp ebx,1;
  2083. jle L01
  2084. lea ebx,[offset DivTbl + ebx*4]
  2085. mov ebx,[ebx]
  2086. mov eax,txb;
  2087. sub eax,txa;
  2088. imul ebx;
  2089. mov ctdx,edx
  2090. mov eax,tyb;
  2091. sub eax,tya;
  2092. imul ebx;
  2093. mov ctdy,edx
  2094. }L01: __asm {
  2095. mov ebx,tya
  2096. mov edx,txa
  2097. cmp xa16,0;
  2098. jge L011
  2099. mov eax,ctdy;
  2100. imul xa16
  2101. sub ebx,eax
  2102. mov eax,ctdx
  2103. imul xa16
  2104. mov edx,txa;
  2105. sub edx,eax
  2106. add ecx,xa16
  2107. jz END_PAINT
  2108. mov xa16,0
  2109. } L011: __asm {
  2110. mov eax,WinW
  2111. cmp xb16,eax
  2112. jl L012
  2113. sub xb16,eax
  2114. sub ecx,xb16
  2115. jz END_PAINT
  2116. } L012:
  2117. __asm {
  2118. mov edi, Y1
  2119. mov esi,xa16
  2120. shl edi, 11
  2121. lea esi,[esi*2]
  2122. add edi, lpVideoBuf
  2123. mov _sp,esp
  2124. add edi,esi
  2125. mov esp,lpTextureAddr
  2126. } } else {
  2127. __asm {
  2128. mov edi,xb
  2129. sar edi, 16
  2130. mov xb16,edi
  2131. mov eax,xa;
  2132. sar eax, 16
  2133. mov xa16,eax
  2134. sub eax,edi;
  2135. jz END_PAINT
  2136. mov ecx,eax
  2137. mov ebx,WinEX;
  2138. cmp edi,ebx;
  2139. jg END_PAINT;
  2140. mov ebx,0;
  2141. cmp xa16,ebx;
  2142. jl END_PAINT;
  2143. mov ebx,ecx;
  2144. cmp ebx,1;
  2145. jle L02
  2146. lea ebx,[offset DivTbl + ebx*4]
  2147. mov ebx,[ebx]
  2148. mov eax,txa;
  2149. sub eax,txb;
  2150. imul ebx;
  2151. mov ctdx,edx
  2152. mov eax,tya;
  2153. sub eax,tyb;
  2154. imul ebx;
  2155. mov ctdy,edx
  2156. } L02: __asm {
  2157. mov ebx,tyb;
  2158. mov edx,txb;
  2159. cmp xb16,0;
  2160. jge L021
  2161. mov eax,ctdy;
  2162. imul xb16
  2163. sub ebx,eax
  2164. mov eax,ctdx
  2165. imul xb16
  2166. mov edx,txb;
  2167. sub edx,eax
  2168. add ecx,xb16
  2169. jz END_PAINT
  2170. mov xb16,0
  2171. }L021: __asm{
  2172. mov eax,WinW
  2173. cmp xa16,eax
  2174. jl L022
  2175. sub xa16,eax
  2176. sub ecx,xa16
  2177. jz END_PAINT
  2178. }L022:
  2179. __asm{
  2180. mov edi, Y1
  2181. mov esi,xb16
  2182. shl edi, 11
  2183. lea esi,[esi*2]
  2184. add edi, lpVideoBuf
  2185. mov _sp,esp
  2186. add edi,esi
  2187. mov esp,lpTextureAddr
  2188. } }
  2189. __asm mov ebp, iModelFade
  2190. __asm sub edi,2
  2191. L9:
  2192. __asm {
  2193. mov eax,edx
  2194. mov esi,ebx
  2195. shr eax,18
  2196. and esi,0xFFFC0000
  2197. shr esi,12
  2198. add edi,2
  2199. add esi,eax
  2200. mov ax,word ptr[esp + esi*2]
  2201. cmp eax,0
  2202. je L10
  2203. and eax,(0x739c*2)
  2204. shr eax,2
  2205. neg eax
  2206. add ax,word ptr[esp + esi*2]
  2207. shr eax,1
  2208. mov si,word ptr [edi]
  2209. and esi,0x739c
  2210. shr esi,2
  2211. add eax,esi
  2212. mov word ptr[edi], ax
  2213. } L10: __asm {
  2214. add edx,ctdx
  2215. add ebx,ctdy
  2216. dec ecx
  2217. jnz L9
  2218. mov esp,_sp
  2219. }
  2220. END_PAINT:
  2221. __asm pop ebp
  2222. } // HLineTxModel //
  2223. void DrawTexturedFace()
  2224. {
  2225. __asm {
  2226. inc dFacesCount
  2227. mov ebx, dword ptr[offset scrp + 4]
  2228. mov ecx, dword ptr[offset scrp + 4 + 32]
  2229. mov edx, dword ptr[offset scrp + 4 + 64]
  2230. cmp ebx,ecx
  2231. jge L20 // == if BX<CX then ==}
  2232. // === if ebx<edx then v1:=0 else v1:=2; ====}
  2233. cmp ebx,edx
  2234. jge L11
  2235. mov v1,0
  2236. jmp L12 }
  2237. L11: v1 = 2;
  2238. L12:
  2239. //== if ecx>=edx then v3:=1 else v3:=2; ====}
  2240. __asm {
  2241. cmp ecx,edx
  2242. jl L13
  2243. mov v3,1
  2244. jmp L14 }
  2245. L13: v3 = 2;
  2246. L14:
  2247. __asm {
  2248. jmp L30 }
  2249. L20:
  2250. //=============================================================}
  2251. //==== if ecx<edx then v1:=1 else v1:=2; ====}
  2252. __asm {
  2253. cmp ecx,edx
  2254. jge L21
  2255. mov v1,1
  2256. jmp L22 }
  2257. L21: v1 = 2;
  2258. L22:
  2259. //==== if ebx>=edx then v3:=0 else v3:=2; ====}
  2260. __asm {
  2261. cmp ebx,edx
  2262. jl L23
  2263. mov v3,0
  2264. jmp L24 }
  2265. L23: v3 = 2;
  2266. L24:
  2267. //==== End find v1,v3 ==================================================}
  2268. // ;{=== find v2 ====}
  2269. L30:
  2270. __asm {
  2271. mov eax,0
  2272. cmp eax,v1
  2273. je L31
  2274. cmp eax,v3
  2275. je L31
  2276. jmp L39 }
  2277. L31:
  2278. __asm {
  2279. inc eax
  2280. cmp eax,v1
  2281. je L32
  2282. cmp eax,v3
  2283. je L32
  2284. jmp L39 }
  2285. L32:
  2286. __asm {
  2287. inc eax }
  2288. L39:
  2289. __asm {
  2290. mov v2,eax }
  2291. __asm {
  2292. //================== fill x,y,tx,ty ====================//
  2293. mov ebx,v1
  2294. shl ebx,5
  2295. mov eax,dword ptr[offset scrp + ebx]
  2296. mov x1,eax
  2297. mov eax,dword ptr[offset scrp + 4 + ebx]
  2298. mov Y1,eax
  2299. mov eax,dword ptr[offset scrp + 8 + ebx]
  2300. mov tx1,eax
  2301. mov eax,dword ptr[offset scrp + 12 + ebx]
  2302. mov ty1,eax
  2303. mov eax,dword ptr[offset scrp + 16 + ebx]
  2304. shl eax,16
  2305. add eax,8000h
  2306. mov lt1,eax
  2307. mov ebx,v2
  2308. shl ebx,5
  2309. mov eax,dword ptr[offset scrp + ebx]
  2310. mov x2,eax;
  2311. mov eax,dword ptr[offset scrp + 4 + ebx]
  2312. mov y2,eax
  2313. mov eax,dword ptr[offset scrp + 8 + ebx]
  2314. mov tx2,eax
  2315. mov eax,dword ptr[offset scrp + 12 + ebx]
  2316. mov ty2,eax
  2317. mov eax,dword ptr[offset scrp + 16 + ebx]
  2318. shl eax,16
  2319. add eax,8000h
  2320. mov lt2,eax
  2321. mov ebx,v3
  2322. shl ebx,5
  2323. mov eax,dword ptr[offset scrp + ebx]
  2324. mov x3,eax;
  2325. mov eax,dword ptr[offset scrp + 4 + ebx]
  2326. mov y3,eax
  2327. mov eax,dword ptr[offset scrp + 8 + ebx]
  2328. mov tx3,eax
  2329. mov eax,dword ptr[offset scrp + 12 + ebx]
  2330. mov ty3,eax
  2331. mov eax,dword ptr[offset scrp + 16 + ebx]
  2332. shl eax,16
  2333. add eax,8000h
  2334. mov lt3,eax
  2335. //======================================== calc l1,l2,l3 =============//
  2336. mov eax,y2
  2337. sub eax,Y1
  2338. mov l1,eax
  2339. mov eax,y3
  2340. sub eax,y2
  2341. mov l2,eax
  2342. mov eax,y3
  2343. sub eax,Y1
  2344. mov l3,eax
  2345. //======================================== calc dx,dtx,dty ===========}
  2346. //============================================= 1->2 =================}
  2347. mov eax,tx1
  2348. mov txa,eax
  2349. mov txb,eax
  2350. mov eax,ty1
  2351. mov tya,eax
  2352. mov tyb,eax
  2353. mov eax,lt1
  2354. mov lta,eax
  2355. mov ltb,eax
  2356. mov eax,x1
  2357. shl eax,16
  2358. add eax,8000h
  2359. mov xa,eax
  2360. mov xb,eax
  2361. mov ebx,l1
  2362. cmp ebx,0
  2363. je L101
  2364. lea ebx,[offset DivTbl + ebx*4]
  2365. mov ebx, [ebx]
  2366. mov eax,lt2
  2367. sub eax,lt1
  2368. imul ebx
  2369. mov dlt1,edx
  2370. mov eax,tx2
  2371. sub eax,tx1
  2372. imul ebx
  2373. mov dtx1,edx
  2374. mov eax,ty2
  2375. sub eax,ty1
  2376. imul ebx
  2377. mov dty1,edx
  2378. mov eax,x2
  2379. sub eax,x1
  2380. sal eax,16
  2381. imul ebx
  2382. mov dx1,edx
  2383. }
  2384. //;{============================================= 2->3 ===========}
  2385. L101:
  2386. __asm {
  2387. mov ebx,l2
  2388. cmp ebx,0
  2389. je L102
  2390. lea ebx,[offset DivTbl + ebx*4]
  2391. mov ebx,[ebx]
  2392. mov eax,lt3
  2393. sub eax,lt2
  2394. imul ebx
  2395. mov dlt2,edx
  2396. mov eax,tx3
  2397. sub eax,tx2
  2398. imul ebx
  2399. mov dtx2,edx
  2400. mov eax,ty3
  2401. sub eax,ty2
  2402. imul ebx
  2403. mov dty2,edx
  2404. mov eax,x3
  2405. sub eax,x2
  2406. sal eax,16
  2407. imul ebx
  2408. mov dx2,edx
  2409. }
  2410. //;{============================================= 1->3 ===========}
  2411. L102:
  2412. __asm {
  2413. mov ebx,l3
  2414. cmp ebx,0
  2415. je L103
  2416. lea ebx,[offset DivTbl + ebx*4]
  2417. mov ebx,[ebx]
  2418. mov eax,lt3
  2419. sub eax,lt1
  2420. imul ebx
  2421. mov dlt3,edx
  2422. mov eax,tx3
  2423. sub eax,tx1
  2424. imul ebx
  2425. mov dtx3,edx
  2426. mov eax,ty3
  2427. sub eax,ty1
  2428. imul ebx
  2429. mov dty3,edx
  2430. mov eax,x3
  2431. sub eax,x1
  2432. sal eax,16
  2433. imul ebx
  2434. mov dx3,edx
  2435. }
  2436. L103:
  2437. L201:
  2438. _asm {
  2439. mov eax,Y1
  2440. cmp eax,y2
  2441. jge L205
  2442. cmp eax,0
  2443. jl L203
  2444. cmp eax,WinEY
  2445. jg L400
  2446. call HLineT
  2447. }
  2448. L203:
  2449. __asm {
  2450. mov eax,dlt3
  2451. add lta,eax
  2452. mov eax,dtx3
  2453. add txa,eax
  2454. mov eax,dty3
  2455. add tya,eax
  2456. mov eax,dx3
  2457. add xa,eax
  2458. ;{====}
  2459. mov eax,dlt1
  2460. add ltb,eax
  2461. mov eax,dtx1
  2462. add txb,eax
  2463. mov eax,dty1
  2464. add tyb,eax
  2465. mov eax,dx1
  2466. add xb,eax
  2467. inc Y1
  2468. jmp L201
  2469. }
  2470. //=============== 2->3 =================}
  2471. L205:
  2472. __asm {
  2473. mov eax,lt2
  2474. mov ltb,eax
  2475. mov eax,tx2
  2476. mov txb,eax
  2477. mov eax,ty2
  2478. mov tyb,eax
  2479. mov eax,x2
  2480. sal eax,16
  2481. add eax,8000h
  2482. mov xb,eax
  2483. }
  2484. L301:
  2485. __asm {
  2486. mov eax,Y1
  2487. cmp eax,y3
  2488. jge L400
  2489. cmp eax,0
  2490. jl L303
  2491. cmp eax,WinEY
  2492. jg L400
  2493. call HLineT }
  2494. L303:
  2495. __asm {
  2496. mov eax,dlt3
  2497. add lta,eax
  2498. mov eax,dtx3
  2499. add txa,eax
  2500. mov eax,dty3
  2501. add tya,eax
  2502. mov eax,dx3
  2503. add xa,eax
  2504. mov eax,dlt2
  2505. add ltb,eax
  2506. mov eax,dtx2
  2507. add txb,eax
  2508. mov eax,dty2
  2509. add tyb,eax
  2510. mov eax,dx2
  2511. add xb,eax
  2512. inc Y1;
  2513. jmp L301
  2514. }
  2515. L400: ;
  2516. }
  2517. void DrawModelFace()
  2518. {
  2519. __asm {
  2520. inc dFacesCount
  2521. mov ebx, dword ptr[offset mscrp + 4]
  2522. mov ecx, dword ptr[offset mscrp + 4 + 16]
  2523. mov edx, dword ptr[offset mscrp + 4 + 32]
  2524. cmp ebx,ecx
  2525. jge L20 // == if BX<CX then ==}
  2526. // === if ebx<edx then v1:=0 else v1:=2; ====}
  2527. cmp ebx,edx
  2528. jge L11
  2529. mov v1,0
  2530. jmp L12 }
  2531. L11: v1 = 2;
  2532. L12:
  2533. //== if ecx>=edx then v3:=1 else v3:=2; ====}
  2534. __asm {
  2535. cmp ecx,edx
  2536. jl L13
  2537. mov v3,1
  2538. jmp L14 }
  2539. L13: v3 = 2;
  2540. L14:
  2541. __asm {
  2542. jmp L30 }
  2543. L20:
  2544. //=============================================================}
  2545. //==== if ecx<edx then v1:=1 else v1:=2; ====}
  2546. __asm {
  2547. cmp ecx,edx
  2548. jge L21
  2549. mov v1,1
  2550. jmp L22 }
  2551. L21: v1 = 2;
  2552. L22:
  2553. //==== if ebx>=edx then v3:=0 else v3:=2; ====}
  2554. __asm {
  2555. cmp ebx,edx
  2556. jl L23
  2557. mov v3,0
  2558. jmp L24 }
  2559. L23: v3 = 2;
  2560. L24:
  2561. //==== End find v1,v3 ==================================================}
  2562. // ;{=== find v2 ====}
  2563. L30:
  2564. __asm {
  2565. mov eax,0
  2566. cmp eax,v1
  2567. je L31
  2568. cmp eax,v3
  2569. je L31
  2570. jmp L39 }
  2571. L31:
  2572. __asm {
  2573. inc eax
  2574. cmp eax,v1
  2575. je L32
  2576. cmp eax,v3
  2577. je L32
  2578. jmp L39 }
  2579. L32:
  2580. __asm {
  2581. inc eax }
  2582. L39:
  2583. __asm {
  2584. mov v2,eax }
  2585. __asm {
  2586. //================== fill x,y,tx,ty ====================//
  2587. mov ebx,v1
  2588. shl ebx,4
  2589. mov eax,dword ptr[offset mscrp + ebx]
  2590. mov x1,eax
  2591. mov eax,dword ptr[offset mscrp + 4 + ebx]
  2592. mov Y1,eax
  2593. mov eax,dword ptr[offset mscrp + 8 + ebx]
  2594. mov tx1,eax
  2595. mov eax,dword ptr[offset mscrp + 12 + ebx]
  2596. mov ty1,eax
  2597. mov ebx,v2
  2598. shl ebx,4
  2599. mov eax,dword ptr[offset mscrp + ebx]
  2600. mov x2,eax;
  2601. mov eax,dword ptr[offset mscrp + 4 + ebx]
  2602. mov y2,eax
  2603. mov eax,dword ptr[offset mscrp + 8 + ebx]
  2604. mov tx2,eax
  2605. mov eax,dword ptr[offset mscrp + 12 + ebx]
  2606. mov ty2,eax
  2607. mov ebx,v3
  2608. shl ebx,4
  2609. mov eax,dword ptr[offset mscrp + ebx]
  2610. mov x3,eax;
  2611. mov eax,dword ptr[offset mscrp + 4 + ebx]
  2612. mov y3,eax
  2613. mov eax,dword ptr[offset mscrp + 8 + ebx]
  2614. mov tx3,eax
  2615. mov eax,dword ptr[offset mscrp + 12 + ebx]
  2616. mov ty3,eax
  2617. cmp y3,0
  2618. jl L400
  2619. //======================================== calc l1,l2,l3 =============//
  2620. mov eax,y2
  2621. sub eax,Y1
  2622. mov l1,eax
  2623. mov eax,y3
  2624. sub eax,y2
  2625. mov l2,eax
  2626. mov eax,y3
  2627. sub eax,Y1
  2628. mov l3,eax
  2629. //======================================== calc dx,dtx,dty ===========}
  2630. //============================================= 1->2 =================}
  2631. mov eax,tx1
  2632. mov txa,eax
  2633. mov txb,eax
  2634. mov eax,ty1
  2635. mov tya,eax
  2636. mov tyb,eax
  2637. mov eax,x1
  2638. shl eax,16
  2639. add eax,8000h
  2640. mov xa,eax
  2641. mov xb,eax
  2642. mov ebx,l1
  2643. cmp ebx,0
  2644. je L101
  2645. lea ebx,[offset DivTbl + ebx*4]
  2646. mov ebx, [ebx]
  2647. mov eax,tx2
  2648. sub eax,tx1
  2649. imul ebx
  2650. mov dtx1,edx
  2651. mov eax,ty2
  2652. sub eax,ty1
  2653. imul ebx
  2654. mov dty1,edx
  2655. mov eax,x2
  2656. sub eax,x1
  2657. sal eax,16
  2658. imul ebx
  2659. mov dx1,edx
  2660. }
  2661. //;{============================================= 2->3 ===========}
  2662. L101:
  2663. __asm {
  2664. mov ebx,l2
  2665. cmp ebx,0
  2666. je L102
  2667. lea ebx,[offset DivTbl + ebx*4]
  2668. mov ebx,[ebx]
  2669. mov eax,tx3
  2670. sub eax,tx2
  2671. imul ebx
  2672. mov dtx2,edx
  2673. mov eax,ty3
  2674. sub eax,ty2
  2675. imul ebx
  2676. mov dty2,edx
  2677. mov eax,x3
  2678. sub eax,x2
  2679. sal eax,16
  2680. imul ebx
  2681. mov dx2,edx
  2682. }
  2683. //;{============================================= 1->3 ===========}
  2684. L102:
  2685. __asm {
  2686. mov ebx,l3
  2687. cmp ebx,0
  2688. je L103
  2689. lea ebx,[offset DivTbl + ebx*4]
  2690. mov ebx,[ebx]
  2691. mov eax,tx3
  2692. sub eax,tx1
  2693. imul ebx
  2694. mov dtx3,edx
  2695. mov eax,ty3
  2696. sub eax,ty1
  2697. imul ebx
  2698. mov dty3,edx
  2699. mov eax,x3
  2700. sub eax,x1
  2701. sal eax,16
  2702. imul ebx
  2703. mov dx3,edx
  2704. }
  2705. L103:
  2706. L201:
  2707. _asm {
  2708. mov eax,Y1
  2709. cmp eax,y2
  2710. jge L205
  2711. cmp eax,0
  2712. jl L203
  2713. cmp eax,WinEY
  2714. jg L400
  2715. call HLineT
  2716. }
  2717. L203:
  2718. __asm {
  2719. mov eax,dtx3
  2720. add txa,eax
  2721. mov eax,dty3
  2722. add tya,eax
  2723. mov eax,dx3
  2724. add xa,eax
  2725. ;{====}
  2726. mov eax,dtx1
  2727. add txb,eax
  2728. mov eax,dty1
  2729. add tyb,eax
  2730. mov eax,dx1
  2731. add xb,eax
  2732. inc Y1
  2733. jmp L201
  2734. }
  2735. //=============== 2->3 =================}
  2736. L205:
  2737. __asm {
  2738. mov eax,tx2
  2739. mov txb,eax
  2740. mov eax,ty2
  2741. mov tyb,eax
  2742. mov eax,x2
  2743. sal eax,16
  2744. add eax,8000h
  2745. mov xb,eax
  2746. }
  2747. L301:
  2748. __asm {
  2749. mov eax,Y1
  2750. cmp eax,y3
  2751. jge L400
  2752. cmp eax,0
  2753. jl L303
  2754. cmp eax,WinEY
  2755. jg L400
  2756. call HLineT }
  2757. L303:
  2758. __asm {
  2759. mov eax,dtx3
  2760. add txa,eax
  2761. mov eax,dty3
  2762. add tya,eax
  2763. mov eax,dx3
  2764. add xa,eax
  2765. mov eax,dtx2
  2766. add txb,eax
  2767. mov eax,dty2
  2768. add tyb,eax
  2769. mov eax,dx2
  2770. add xb,eax
  2771. inc Y1;
  2772. jmp L301
  2773. }
  2774. L400: ;
  2775. }
  2776. void DrawModelFaces()
  2777. {
  2778. LBEGIN:
  2779. __asm {
  2780. inc dFacesCount
  2781. mov edi, Current
  2782. shl edi, 6
  2783. add edi, mptr
  2784. add edi, 0x4010
  2785. mov eax, [edi+0x2C]
  2786. mov Current, eax
  2787. //mov ebx, iModelBaseFade
  2788. mov eax, [edi + 0x24]
  2789. /*test eax, sfDark
  2790. jz DSKIP
  2791. add ebx, 12*256*256
  2792. } DSKIP: __asm {*/
  2793. and eax, (0x0004+0x0008)
  2794. mov OpacityMode,eax
  2795. //mov iModelFade,ebx
  2796. mov eax, [edi+0]
  2797. mov ebx, dword ptr[offset gScrp + 4 + eax*8]
  2798. mov eax, [edi+4]
  2799. mov ecx, [offset gScrp + 4 + eax*8]
  2800. mov eax, [edi+8]
  2801. mov edx, [offset gScrp + 4 + eax*8]
  2802. cmp ebx,ecx
  2803. jge L20 // == if BX<CX then ==}
  2804. // === if ebx<edx then v1:=0 else v1:=2; ====}
  2805. cmp ebx,edx
  2806. jge L11
  2807. mov v1,0
  2808. jmp L12 }
  2809. L11: v1 = 2;
  2810. L12:
  2811. //== if ecx>=edx then v3:=1 else v3:=2; ====}
  2812. __asm {
  2813. cmp ecx,edx
  2814. jl L13
  2815. mov v3,1
  2816. jmp L14 }
  2817. L13: v3 = 2;
  2818. L14:
  2819. __asm {
  2820. jmp L30 }
  2821. L20:
  2822. //=============================================================}
  2823. //==== if ecx<edx then v1:=1 else v1:=2; ====}
  2824. __asm {
  2825. cmp ecx,edx
  2826. jge L21
  2827. mov v1,1
  2828. jmp L22 }
  2829. L21: v1 = 2;
  2830. L22:
  2831. //==== if ebx>=edx then v3:=0 else v3:=2; ====}
  2832. __asm {
  2833. cmp ebx,edx
  2834. jl L23
  2835. mov v3,0
  2836. jmp L24 }
  2837. L23: v3 = 2;
  2838. L24:
  2839. //==== End find v1,v3 ==================================================}
  2840. // ;{=== find v2 ====}
  2841. L30:
  2842. __asm {
  2843. mov eax,0
  2844. cmp eax,v1
  2845. je L31
  2846. cmp eax,v3
  2847. je L31
  2848. jmp L39 }
  2849. L31:
  2850. __asm {
  2851. inc eax
  2852. cmp eax,v1
  2853. je L32
  2854. cmp eax,v3
  2855. je L32
  2856. jmp L39 }
  2857. L32:
  2858. __asm {
  2859. inc eax }
  2860. L39:
  2861. __asm {
  2862. mov v2,eax }
  2863. __asm {
  2864. //================== fill x,y,tx,ty ====================//
  2865. mov ebx,v1
  2866. mov eax, [edi + ebx*4 + 12]
  2867. mov tx1, eax
  2868. mov eax, [edi + ebx*4 + 12+12]
  2869. mov ty1, eax
  2870. mov ebx,[edi + ebx*4]
  2871. shl ebx,3
  2872. mov eax,dword ptr[offset gScrp + ebx]
  2873. mov x1,eax
  2874. mov eax,dword ptr[offset gScrp + 4 + ebx]
  2875. mov Y1,eax
  2876. mov ebx,v2
  2877. mov eax, [edi + ebx*4 + 12]
  2878. mov tx2, eax
  2879. mov eax, [edi + ebx*4 + 12+12]
  2880. mov ty2, eax
  2881. mov ebx,[edi + ebx*4]
  2882. shl ebx,3
  2883. mov eax,dword ptr[offset gScrp + ebx]
  2884. mov x2,eax
  2885. mov eax,dword ptr[offset gScrp + 4 + ebx]
  2886. mov y2,eax
  2887. mov ebx,v3
  2888. mov eax, [edi + ebx*4 + 12]
  2889. mov tx3, eax
  2890. mov eax, [edi + ebx*4 + 12+12]
  2891. mov ty3, eax
  2892. mov ebx,[edi + ebx*4]
  2893. shl ebx,3
  2894. mov eax,dword ptr[offset gScrp + ebx]
  2895. mov x3,eax
  2896. mov eax,dword ptr[offset gScrp + 4 + ebx]
  2897. mov y3,eax
  2898. cmp y3,0
  2899. jl L400
  2900. //======================================== calc l1,l2,l3 =============//
  2901. mov eax,y2
  2902. sub eax,Y1
  2903. mov l1,eax
  2904. mov eax,y3
  2905. sub eax,y2
  2906. mov l2,eax
  2907. mov eax,y3
  2908. sub eax,Y1
  2909. mov l3,eax
  2910. //======================================== calc dx,dtx,dty ===========}
  2911. //============================================= 1->2 =================}
  2912. mov eax,tx1
  2913. mov txa,eax
  2914. mov txb,eax
  2915. mov eax,ty1
  2916. mov tya,eax
  2917. mov tyb,eax
  2918. mov eax,x1
  2919. shl eax,16
  2920. add eax,8000h
  2921. mov xa,eax
  2922. mov xb,eax
  2923. mov ebx,l1
  2924. cmp ebx,0
  2925. jle L101
  2926. mov ebx, [offset DivTbl + ebx*4]
  2927. mov eax,tx2
  2928. sub eax,tx1
  2929. imul ebx
  2930. mov dtx1,edx
  2931. mov eax,ty2
  2932. sub eax,ty1
  2933. imul ebx
  2934. mov dty1,edx
  2935. mov eax,x2
  2936. sub eax,x1
  2937. sal eax,16
  2938. imul ebx
  2939. mov dx1,edx
  2940. }
  2941. //;{============================================= 2->3 ===========}
  2942. L101:
  2943. __asm {
  2944. mov ebx,l2
  2945. cmp ebx,0
  2946. jle L102
  2947. mov ebx, [offset DivTbl + ebx*4]
  2948. mov eax,tx3
  2949. sub eax,tx2
  2950. imul ebx
  2951. mov dtx2,edx
  2952. mov eax,ty3
  2953. sub eax,ty2
  2954. imul ebx
  2955. mov dty2,edx
  2956. mov eax,x3
  2957. sub eax,x2
  2958. sal eax,16
  2959. imul ebx
  2960. mov dx2,edx
  2961. }
  2962. //;{============================================= 1->3 ===========}
  2963. L102:
  2964. __asm {
  2965. mov ebx,l3
  2966. cmp ebx,0
  2967. jle L103
  2968. mov ebx, [offset DivTbl + ebx*4]
  2969. mov eax,tx3
  2970. sub eax,tx1
  2971. imul ebx
  2972. mov dtx3,edx
  2973. mov eax,ty3
  2974. sub eax,ty1
  2975. imul ebx
  2976. mov dty3,edx
  2977. mov eax,x3
  2978. sub eax,x1
  2979. sal eax,16
  2980. imul ebx
  2981. mov dx3,edx
  2982. }
  2983. L103:
  2984. L201:
  2985. _asm {
  2986. mov eax,Y1
  2987. cmp eax,y2
  2988. jge L205
  2989. cmp eax,0
  2990. jl L203
  2991. cmp eax,WinEY
  2992. jg L400
  2993. call HLineT
  2994. }
  2995. L203:
  2996. __asm {
  2997. mov eax,dtx3
  2998. add txa,eax
  2999. mov eax,dty3
  3000. add tya,eax
  3001. mov eax,dx3
  3002. add xa,eax
  3003. ;{====}
  3004. mov eax,dtx1
  3005. add txb,eax
  3006. mov eax,dty1
  3007. add tyb,eax
  3008. mov eax,dx1
  3009. add xb,eax
  3010. inc Y1
  3011. jmp L201
  3012. }
  3013. //=============== 2->3 =================}
  3014. L205:
  3015. __asm {
  3016. mov eax,tx2
  3017. mov txb,eax
  3018. mov eax,ty2
  3019. mov tyb,eax
  3020. mov eax,x2
  3021. sal eax,16
  3022. add eax,8000h
  3023. mov xb,eax
  3024. }
  3025. L301:
  3026. __asm {
  3027. mov eax,Y1
  3028. cmp eax,y3
  3029. jge L400
  3030. cmp eax,0
  3031. jl L303
  3032. cmp eax,WinEY
  3033. jg L400
  3034. call HLineT }
  3035. L303:
  3036. __asm {
  3037. mov eax,dtx3
  3038. add txa,eax
  3039. mov eax,dty3
  3040. add tya,eax
  3041. mov eax,dx3
  3042. add xa,eax
  3043. mov eax,dtx2
  3044. add txb,eax
  3045. mov eax,dty2
  3046. add tyb,eax
  3047. mov eax,dx2
  3048. add xb,eax
  3049. inc Y1;
  3050. jmp L301
  3051. }
  3052. L400:
  3053. if (Current!=-1) goto LBEGIN;
  3054. }
  3055. void RenderSkyLine(int y)
  3056. {
  3057. __asm {
  3058. shl ctdx,8
  3059. shl ctdy,8
  3060. mov ebx,txa
  3061. shl ebx,8
  3062. mov edx,tya
  3063. shl edx,8
  3064. mov ecx,WinW
  3065. mov edi,y
  3066. shl edi,11
  3067. add edi,lpVideoBuf
  3068. push ebp
  3069. mov _sp,esp
  3070. mov ebp,ctdx
  3071. mov esp,ctdy
  3072. } L0: __asm {
  3073. mov eax,ebx
  3074. mov esi,edx
  3075. shr eax,24
  3076. shr esi,24
  3077. shl esi,8
  3078. add esi,eax
  3079. mov ax,word ptr[offset SkyPic + esi*2]
  3080. mov word ptr[edi],ax
  3081. add edi,2
  3082. add ebx, ebp
  3083. add edx, esp
  3084. dec cx
  3085. jnz L0
  3086. mov esp,_sp
  3087. pop ebp
  3088. }
  3089. }
  3090. void RenderSkyLineLo(int y)
  3091. {
  3092. __asm {
  3093. shl ctdx,9
  3094. shl ctdy,9
  3095. mov ebx,txa
  3096. shl ebx,8
  3097. mov edx,tya
  3098. shl edx,8
  3099. mov ecx,WinW
  3100. shr ecx,1
  3101. mov edi,y
  3102. shl edi,11
  3103. add edi,lpVideoBuf
  3104. push ebp
  3105. mov _sp,esp
  3106. mov ebp,ctdx
  3107. mov esp,ctdy
  3108. } L0: __asm {
  3109. mov eax,ebx
  3110. mov esi,edx
  3111. shr eax,24
  3112. shr esi,24
  3113. shl esi,8
  3114. add esi,eax
  3115. mov ax,word ptr[offset SkyPic + esi*2]
  3116. mov word ptr[edi],ax
  3117. mov word ptr[edi+2],ax
  3118. add edi,4
  3119. add ebx, ebp
  3120. add edx, esp
  3121. dec cx
  3122. jnz L0
  3123. mov esp,_sp
  3124. pop ebp
  3125. }
  3126. }
  3127. void RenderSkyLineFadeLo(int y, int FadeLevel)
  3128. {
  3129. __asm {
  3130. shl ctdx,9
  3131. shl ctdy,9
  3132. mov ebx,txa
  3133. shl ebx,8
  3134. mov edx,tya
  3135. shl edx,8
  3136. mov ecx,WinW
  3137. shr ecx,1
  3138. mov edi,y
  3139. shl edi,11
  3140. add edi,lpVideoBuf
  3141. mov eax,FadeLevel
  3142. shl eax,15
  3143. add eax,offset SkyFade
  3144. push ebp
  3145. mov _sp,esp
  3146. mov ebp,ctdx
  3147. mov esp,eax
  3148. } L0: __asm {
  3149. mov eax,ebx
  3150. mov esi,edx
  3151. shr eax,25
  3152. shr esi,25
  3153. shl esi,7
  3154. add esi,eax
  3155. mov ax,word ptr[esp + esi*2]
  3156. mov word ptr[edi],ax
  3157. mov word ptr[edi+2],ax
  3158. add edi,4
  3159. add ebx, ebp
  3160. add edx, ctdy
  3161. dec cx
  3162. jnz L0
  3163. mov esp,_sp
  3164. pop ebp
  3165. }
  3166. }
  3167. void RenderSkyLineFade(int y, int FadeLevel)
  3168. {
  3169. __asm {
  3170. shl ctdx,8
  3171. shl ctdy,8
  3172. mov ebx,txa
  3173. shl ebx,8
  3174. mov edx,tya
  3175. shl edx,8
  3176. mov ecx,WinW
  3177. mov edi,y
  3178. shl edi,11
  3179. add edi,lpVideoBuf
  3180. mov eax,FadeLevel
  3181. shl eax,15
  3182. add eax,offset SkyFade
  3183. push ebp
  3184. mov _sp,esp
  3185. mov ebp,ctdx
  3186. mov esp,eax
  3187. } L0: __asm {
  3188. mov eax,ebx
  3189. mov esi,edx
  3190. shr eax,25
  3191. shr esi,25
  3192. shl esi,7
  3193. add esi,eax
  3194. mov ax,word ptr[esp + esi*2]
  3195. mov word ptr[edi],ax
  3196. add edi,2
  3197. add ebx, ebp
  3198. add edx, ctdy
  3199. dec cx
  3200. jnz L0
  3201. mov esp,_sp
  3202. pop ebp
  3203. }
  3204. }
  3205. void DrawCorrectedTexturedFace()
  3206. {
  3207. __asm {
  3208. inc dFacesCount
  3209. mov ebx, dword ptr[offset scrp + 4]
  3210. mov ecx, dword ptr[offset scrp + 4 + 32]
  3211. mov edx, dword ptr[offset scrp + 4 + 64]
  3212. cmp ebx,ecx
  3213. jge L20 // == if BX<CX then ==}
  3214. // === if ebx<edx then v1:=0 else v1:=2; ====}
  3215. cmp ebx,edx
  3216. jge L11
  3217. mov v1,0
  3218. jmp L12 }
  3219. L11: v1 = 2;
  3220. L12:
  3221. //== if ecx>=edx then v3:=1 else v3:=2; ====}
  3222. __asm {
  3223. cmp ecx,edx
  3224. jl L13
  3225. mov v3,1
  3226. jmp L14 }
  3227. L13: v3 = 2;
  3228. L14:
  3229. __asm {
  3230. jmp L30 }
  3231. L20:
  3232. //=============================================================}
  3233. //==== if ecx<edx then v1:=1 else v1:=2; ====}
  3234. __asm {
  3235. cmp ecx,edx
  3236. jge L21
  3237. mov v1,1
  3238. jmp L22 }
  3239. L21: v1 = 2;
  3240. L22:
  3241. //==== if ebx>=edx then v3:=0 else v3:=2; ====}
  3242. __asm {
  3243. cmp ebx,edx
  3244. jl L23
  3245. mov v3,0
  3246. jmp L24 }
  3247. L23: v3 = 2;
  3248. L24:
  3249. //==== End find v1,v3 ==================================================}
  3250. // ;{=== find v2 ====}
  3251. L30:
  3252. __asm {
  3253. mov eax,0
  3254. cmp eax,v1
  3255. je L31
  3256. cmp eax,v3
  3257. je L31
  3258. jmp L39 }
  3259. L31:
  3260. __asm {
  3261. inc eax
  3262. cmp eax,v1
  3263. je L32
  3264. cmp eax,v3
  3265. je L32
  3266. jmp L39 }
  3267. L32:
  3268. __asm {
  3269. inc eax }
  3270. L39:
  3271. __asm {
  3272. mov v2,eax }
  3273. __asm {
  3274. //================== fill x,y,tx,ty ====================//
  3275. mov ebx,v1
  3276. shl ebx,5
  3277. mov eax,dword ptr[offset scrp + ebx]
  3278. mov x1,eax
  3279. mov eax,dword ptr[offset scrp + 4 + ebx]
  3280. mov Y1,eax
  3281. mov eax,dword ptr[offset scrp + 8 + ebx]
  3282. mov tx1,eax
  3283. mov eax,dword ptr[offset scrp + 12 + ebx]
  3284. mov ty1,eax
  3285. mov eax,dword ptr[offset scrp + 16 + ebx]
  3286. shl eax,16
  3287. add eax,8000h
  3288. mov lt1,eax
  3289. mov eax,dword ptr[offset scrp + 20 + ebx]
  3290. mov zdepth1,eax
  3291. mov ebx,v2
  3292. shl ebx,5
  3293. mov eax,dword ptr[offset scrp + ebx]
  3294. mov x2,eax;
  3295. mov eax,dword ptr[offset scrp + 4 + ebx]
  3296. mov y2,eax
  3297. mov eax,dword ptr[offset scrp + 8 + ebx]
  3298. mov tx2,eax
  3299. mov eax,dword ptr[offset scrp + 12 + ebx]
  3300. mov ty2,eax
  3301. mov eax,dword ptr[offset scrp + 16 + ebx]
  3302. shl eax,16
  3303. add eax,8000h
  3304. mov lt2,eax
  3305. mov eax,dword ptr[offset scrp + 20 + ebx]
  3306. mov zdepth2,eax
  3307. mov ebx,v3
  3308. shl ebx,5
  3309. mov eax,dword ptr[offset scrp + ebx]
  3310. mov x3,eax;
  3311. mov eax,dword ptr[offset scrp + 4 + ebx]
  3312. mov y3,eax
  3313. mov eax,dword ptr[offset scrp + 8 + ebx]
  3314. mov tx3,eax
  3315. mov eax,dword ptr[offset scrp + 12 + ebx]
  3316. mov ty3,eax
  3317. mov eax,dword ptr[offset scrp + 16 + ebx]
  3318. shl eax,16
  3319. add eax,8000h
  3320. mov lt3,eax
  3321. mov eax,dword ptr[offset scrp + 20 + ebx]
  3322. mov zdepth3,eax
  3323. //======================================== calc l1,l2,l3 =============//
  3324. mov eax,y2
  3325. sub eax,Y1
  3326. mov l1,eax
  3327. mov eax,y3
  3328. sub eax,y2
  3329. mov l2,eax
  3330. mov eax,y3
  3331. sub eax,Y1
  3332. mov l3,eax
  3333. //======================================== calc dx,dtx,dty ===========}
  3334. //============================================= 1->2 =================}
  3335. mov eax,tx1
  3336. mov txa,eax
  3337. mov txb,eax
  3338. mov eax,ty1
  3339. mov tya,eax
  3340. mov tyb,eax
  3341. mov eax,lt1
  3342. mov lta,eax
  3343. mov ltb,eax
  3344. mov eax,x1
  3345. shl eax,16
  3346. add eax,8000h
  3347. mov xa,eax
  3348. mov xb,eax
  3349. mov ebx,l1
  3350. cmp ebx,0
  3351. je L101
  3352. shl ebx,2
  3353. add ebx,offset DivTbl
  3354. mov ebx, [ebx]
  3355. mov eax,lt2
  3356. sub eax,lt1
  3357. imul ebx
  3358. mov dlt1,edx
  3359. mov eax,tx2
  3360. sub eax,tx1
  3361. imul ebx
  3362. mov dtx1,edx
  3363. mov eax,ty2
  3364. sub eax,ty1
  3365. imul ebx
  3366. mov dty1,edx
  3367. mov eax,x2
  3368. sub eax,x1
  3369. sal eax,16
  3370. imul ebx
  3371. mov dx1,edx
  3372. }
  3373. k = (float)(zdepth2 - zdepth1) / (float)(zdepth1 + zdepth2);
  3374. k = k*Soft_Persp_K;
  3375. if (k>0.99f) k=0.99f;
  3376. if (k<-0.99f) k= -0.99f;
  3377. ddtx1 = (int)(dtx1 * 2 * k / l1);
  3378. ddty1 = (int)(dty1 * 2 * k / l1);
  3379. dtx1 = (int)(dtx1 * (1-k) * 0.995);
  3380. dty1 = (int)(dty1 * (1-k) * 0.995);
  3381. //;{============================================= 2->3 ===========}
  3382. L101:
  3383. __asm {
  3384. mov ebx,l2
  3385. cmp ebx,0
  3386. je L102
  3387. shl ebx,2
  3388. add ebx, offset DivTbl
  3389. mov ebx,[ebx]
  3390. mov eax,lt3
  3391. sub eax,lt2
  3392. imul ebx
  3393. mov dlt2,edx
  3394. mov eax,tx3
  3395. sub eax,tx2
  3396. imul ebx
  3397. mov dtx2,edx
  3398. mov eax,ty3
  3399. sub eax,ty2
  3400. imul ebx
  3401. mov dty2,edx
  3402. mov eax,x3
  3403. sub eax,x2
  3404. sal eax,16
  3405. imul ebx
  3406. mov dx2,edx
  3407. }
  3408. k = (float)(zdepth3 - zdepth2) / (float)(zdepth2 + zdepth3 );
  3409. k = k*Soft_Persp_K;
  3410. if (k>0.99f) k=0.99f;
  3411. if (k<-0.99f) k= -0.99f;
  3412. ddtx2 = (int)(dtx2 * 2 * k / l2);
  3413. ddty2 = (int)(dty2 * 2 * k / l2);
  3414. dtx2 = (int)(dtx2 * (1-k) * 0.995);
  3415. dty2 = (int)(dty2 * (1-k) * 0.995);
  3416. //;{============================================= 1->3 ===========}
  3417. L102:
  3418. __asm {
  3419. mov ebx,l3
  3420. cmp ebx,0
  3421. je L103
  3422. shl ebx,2
  3423. add ebx, offset DivTbl
  3424. mov ebx,[ebx]
  3425. mov eax,lt3
  3426. sub eax,lt1
  3427. imul ebx
  3428. mov dlt3,edx
  3429. mov eax,tx3
  3430. sub eax,tx1
  3431. imul ebx
  3432. mov dtx3,edx
  3433. mov eax,ty3
  3434. sub eax,ty1
  3435. imul ebx
  3436. mov dty3,edx
  3437. mov eax,x3
  3438. sub eax,x1
  3439. sal eax,16
  3440. imul ebx
  3441. mov dx3,edx
  3442. }
  3443. k = (float)(zdepth3 - zdepth1) / (float)(zdepth1 + zdepth3 );
  3444. k = k*Soft_Persp_K;
  3445. if (k>0.99f) k=0.99f;
  3446. if (k<-0.99f) k= -0.99f;
  3447. ddtx3 = (int)(dtx3 * 2 * k / l3);
  3448. ddty3 = (int)(dty3 * 2 * k / l3);
  3449. dtx3 = (int)(dtx3 * (1-k) * 0.995);
  3450. dty3 = (int)(dty3 * (1-k) * 0.995);
  3451. L103:
  3452. L201:
  3453. _asm {
  3454. mov eax,Y1
  3455. cmp eax,y2
  3456. jge L205
  3457. cmp eax,0
  3458. jl L203
  3459. cmp eax,WinEY
  3460. jg L400
  3461. call HLineT
  3462. }
  3463. L203:
  3464. __asm {
  3465. mov eax,dlt3
  3466. add lta,eax
  3467. mov eax,dtx3
  3468. add txa,eax
  3469. mov eax,dty3
  3470. add tya,eax
  3471. mov eax,ddtx3
  3472. add dtx3,eax
  3473. mov eax,ddty3
  3474. add dty3,eax
  3475. mov eax,dx3
  3476. add xa,eax
  3477. ;{====}
  3478. mov eax,dlt1
  3479. add ltb,eax
  3480. mov eax,dtx1
  3481. add txb,eax
  3482. mov eax,dty1
  3483. add tyb,eax
  3484. mov eax,ddtx1
  3485. add dtx1,eax
  3486. mov eax,ddty1
  3487. add dty1,eax
  3488. mov eax,dx1
  3489. add xb,eax
  3490. inc Y1
  3491. jmp L201
  3492. }
  3493. //=============== 2->3 =================}
  3494. L205:
  3495. __asm {
  3496. mov eax,lt2
  3497. mov ltb,eax
  3498. mov eax,tx2
  3499. mov txb,eax
  3500. mov eax,ty2
  3501. mov tyb,eax
  3502. mov eax,x2
  3503. sal eax,16
  3504. add eax,8000h
  3505. mov xb,eax
  3506. }
  3507. L301:
  3508. __asm {
  3509. mov eax,Y1
  3510. cmp eax,y3
  3511. jge L400
  3512. cmp eax,0
  3513. jl L303
  3514. cmp eax,WinEY
  3515. jg L400
  3516. call HLineT }
  3517. L303:
  3518. __asm {
  3519. mov eax,dlt3
  3520. add lta,eax
  3521. mov eax,dtx3
  3522. add txa,eax
  3523. mov eax,dty3
  3524. add tya,eax
  3525. mov eax,ddtx3
  3526. add dtx3,eax
  3527. mov eax,ddty3
  3528. add dty3,eax
  3529. mov eax,dx3
  3530. add xa,eax
  3531. mov eax,dlt2
  3532. add ltb,eax
  3533. mov eax,dtx2
  3534. add txb,eax
  3535. mov eax,dty2
  3536. add tyb,eax
  3537. mov eax,ddtx2
  3538. add dtx2,eax
  3539. mov eax,ddty2
  3540. add dty2,eax
  3541. mov eax,dx2
  3542. add xb,eax
  3543. inc Y1;
  3544. jmp L301
  3545. }
  3546. L400: ;
  3547. }