From fdf355590f5b7369223bda3d1b6deeaea48e2f11 Mon Sep 17 00:00:00 2001 From: James Monroe Date: Thu, 4 Apr 2013 15:49:50 -0500 Subject: [PATCH] Jedi Outcast Patch v1.02 --- CODE-mp/Debug/HA312W32.DLL | Bin 0 -> 382464 bytes CODE-mp/Debug/SHW32.DLL | Bin 0 -> 112720 bytes CODE-mp/Debug/vssver.scc | Bin 0 -> 96 bytes CODE-mp/base/games.log | 810 + CODE-mp/base/jk2mpconfig.cfg | 408 + CODE-mp/base/qconsole.log | 351 + CODE-mp/base/screenshots/shot0000.jpg | Bin 0 -> 75953 bytes CODE-mp/base/server.cfg | 17 + CODE-mp/base/vm/cgame.map | 1597 ++ CODE-mp/base/vm/jk2mpgame.map | 1602 ++ CODE-mp/base/vm/ui.map | 1011 + CODE-mp/base/vm/ui.qvm | Bin 0 -> 313480 bytes CODE-mp/cgame/cg_draw.c | 74 +- CODE-mp/cgame/cg_event.c | 2 +- CODE-mp/cgame/cg_info.c | 3 +- CODE-mp/cgame/cg_local.h | 5 +- CODE-mp/cgame/cg_scoreboard.c | 7 +- CODE-mp/cgame/vm/cgame.map | 1597 ++ CODE-mp/cgame/vssver.scc | Bin 768 -> 768 bytes CODE-mp/client/cl_console.cpp | 4 +- CODE-mp/client/cl_main.cpp | 22 +- CODE-mp/client/vssver.scc | Bin 528 -> 528 bytes CODE-mp/game/ai_main.c | 2 +- CODE-mp/game/g_client.c | 4 +- CODE-mp/game/g_cmds.c | 3 +- CODE-mp/game/g_main.c | 3 +- CODE-mp/game/vm/ai_util.asm | 6119 ++++++ CODE-mp/game/vm/ai_wpnav.asm | 20600 +++++++++++++++++++ CODE-mp/game/vm/bg_lib.asm | 5877 ++++++ CODE-mp/game/vm/bg_misc.asm | 17606 ++++++++++++++++ CODE-mp/game/vm/bg_panimate.asm | 26161 ++++++++++++++++++++++++ CODE-mp/game/vm/bg_saber.asm | 12002 +++++++++++ CODE-mp/game/vm/bg_slidemove.asm | 2878 +++ CODE-mp/game/vm/bg_weapons.asm | 538 + CODE-mp/game/vm/g_active.asm | 12167 +++++++++++ CODE-mp/game/vm/g_arenas.asm | 1517 ++ CODE-mp/game/vm/g_bot.asm | 8798 ++++++++ CODE-mp/game/vm/g_client.asm | 12441 +++++++++++ CODE-mp/game/vm/g_cmds.asm | 19339 ++++++++++++++++++ CODE-mp/game/vm/g_combat.asm | 16391 +++++++++++++++ CODE-mp/game/vm/g_items.asm | 14214 +++++++++++++ CODE-mp/game/vm/g_log.asm | 12534 ++++++++++++ CODE-mp/game/vm/g_main.asm | 13554 ++++++++++++ CODE-mp/game/vm/g_mem.asm | 1010 + CODE-mp/game/vm/g_misc.asm | 10286 ++++++++++ CODE-mp/game/vm/g_missile.asm | 6199 ++++++ CODE-mp/game/vm/g_mover.asm | 14777 +++++++++++++ CODE-mp/game/vm/g_object.asm | 2906 +++ CODE-mp/game/vm/g_saga.asm | 3057 +++ CODE-mp/game/vm/g_session.asm | 1708 ++ CODE-mp/game/vm/g_spawn.asm | 6635 ++++++ CODE-mp/game/vm/g_svcmds.asm | 3631 ++++ CODE-mp/game/vm/g_syscalls.asm | 6193 ++++++ CODE-mp/game/vm/g_target.asm | 3664 ++++ CODE-mp/game/vm/g_team.asm | 7813 +++++++ CODE-mp/game/vm/g_trigger.asm | 4248 ++++ CODE-mp/game/vm/g_utils.asm | 6889 +++++++ CODE-mp/game/vm/g_weapon.asm | 20558 +++++++++++++++++++ CODE-mp/game/vm/jk2mpgame.map | 1602 ++ CODE-mp/game/vm/q_math.asm | 8572 ++++++++ CODE-mp/game/vm/q_shared.asm | 6916 +++++++ CODE-mp/game/vm/w_saber.asm | 20070 ++++++++++++++++++ CODE-mp/game/vssver.scc | Bin 1120 -> 1120 bytes CODE-mp/ghoul2/G2_API.cpp | 1 - CODE-mp/ghoul2/vssver.scc | Bin 176 -> 176 bytes CODE-mp/jk2mp.dsp | 4 + CODE-mp/jk2mp.dsw | 34 +- CODE-mp/jk2mp.opt | Bin 97792 -> 87552 bytes CODE-mp/jk2mp.plg | 508 +- CODE-mp/mssccprj.scc | 5 + CODE-mp/null/null_glimp.c | 69 + CODE-mp/null/null_renderer.c | 21 + CODE-mp/null/null_snddma.c | 49 + CODE-mp/qcommon/cm_load.cpp | 8 + CODE-mp/qcommon/cm_local.h | 7 + CODE-mp/qcommon/common.cpp | 2 +- CODE-mp/qcommon/cvar.cpp | 2 +- CODE-mp/qcommon/game_version.h | 2 +- CODE-mp/qcommon/strip.cpp | 4 +- CODE-mp/qcommon/vssver.scc | Bin 752 -> 752 bytes CODE-mp/renderer/tr_ghoul2.cpp | 8 +- CODE-mp/renderer/tr_init.cpp | 6 +- CODE-mp/renderer/tr_local.h | 1 + CODE-mp/renderer/tr_model.cpp | 3 +- CODE-mp/renderer/vssver.scc | Bin 656 -> 656 bytes CODE-mp/server/sv_client.cpp | 4 +- CODE-mp/server/sv_game.cpp | 18 +- CODE-mp/server/sv_init.cpp | 2 +- CODE-mp/server/vssver.scc | Bin 208 -> 208 bytes CODE-mp/ui/ui_main.c | 305 +- CODE-mp/ui/ui_shared.c | 35 +- CODE-mp/ui/ui_shared.h | 1 + CODE-mp/ui/vm/bg_lib.asm | 5877 ++++++ CODE-mp/ui/vm/bg_misc.asm | 17606 ++++++++++++++++ CODE-mp/ui/vm/bg_weapons.asm | 538 + CODE-mp/ui/vm/q_math.asm | 8572 ++++++++ CODE-mp/ui/vm/q_shared.asm | 6916 +++++++ CODE-mp/ui/vm/ui.map | 1011 + CODE-mp/ui/vm/ui.qvm | Bin 0 -> 313480 bytes CODE-mp/ui/vm/ui_atoms.asm | 5137 +++++ CODE-mp/ui/vm/ui_force.asm | 7692 +++++++ CODE-mp/ui/vm/ui_gameinfo.asm | 3127 +++ CODE-mp/ui/vm/ui_util.asm | 0 CODE-mp/ui/vssver.scc | Bin 304 -> 304 bytes CODE-mp/unix/makefile | 20 +- CODE-mp/unix/unix_shared.c | 2 +- CODE-mp/unix/vssver.scc | Bin 240 -> 240 bytes CODE-mp/vssver.scc | Bin 80 -> 128 bytes CODE-mp/win32/vssver.scc | Bin 272 -> 272 bytes CODE-mp/win32/win_syscon.cpp | 2 +- CODE-mp/win32/win_wndproc.cpp | 11 +- code/SHDebug/HA312W32.DLL | Bin 0 -> 382464 bytes code/SHDebug/SHW32.DLL | Bin 0 -> 112720 bytes code/SHDebug/vssver.scc | Bin 0 -> 64 bytes code/StarWars.opt | Bin 76800 -> 98304 bytes code/cgame/cg_consolecmds.cpp | 2 +- code/cgame/cg_draw.cpp | 3 - code/cgame/cg_ents.cpp | 2 +- code/cgame/cg_main.cpp | 5 +- code/cgame/cg_players.cpp | 7 - code/cgame/vssver.scc | Bin 896 -> 896 bytes code/client/cl_cin.cpp | 2 +- code/client/cl_console.cpp | 2 +- code/client/cl_main.cpp | 8 +- code/client/cl_parse.cpp | 7 - code/client/vssver.scc | Bin 480 -> 480 bytes code/game/AI_Jedi.cpp | 13 +- code/game/NPC.cpp | 12 +- code/game/NPC_behavior.cpp | 1 - code/game/NPC_combat.cpp | 5 +- code/game/NPC_move.cpp | 2 +- code/game/NPC_reactions.cpp | 36 +- code/game/NPC_spawn.cpp | 12 - code/game/NPC_utils.cpp | 4 - code/game/Q3_Interface.cpp | 11 +- code/game/bg_panimate.cpp | 3 - code/game/bg_pmove.cpp | 7 +- code/game/g_active.cpp | 27 +- code/game/g_client.cpp | 6 +- code/game/g_combat.cpp | 50 +- code/game/g_fx.cpp | 22 +- code/game/g_main.cpp | 58 +- code/game/g_misc.cpp | 4 - code/game/g_navigator.cpp | 31 - code/game/g_navigator.h | 1 - code/game/g_navnew.cpp | 70 +- code/game/g_savegame.cpp | 4 +- code/game/g_turret.cpp | 4 - code/game/g_utils.cpp | 5 - code/game/g_weapon.cpp | 2 +- code/game/vssver.scc | Bin 1952 -> 1952 bytes code/game/wp_saber.cpp | 65 +- code/qcommon/common.cpp | 19 +- code/qcommon/cvar.cpp | 32 +- code/qcommon/stv_version.h | 2 +- code/qcommon/vssver.scc | Bin 512 -> 512 bytes code/renderer/tr_init.cpp | 4 +- code/renderer/vssver.scc | Bin 784 -> 784 bytes code/server/sv_game.cpp | 17 +- code/server/sv_init.cpp | 2 +- code/server/sv_savegame.cpp | 36 +- code/server/vssver.scc | Bin 208 -> 208 bytes code/starwars.plg | 892 +- code/ui/ui_atoms.cpp | 2 +- code/ui/ui_main.cpp | 4 +- code/ui/vssver.scc | Bin 272 -> 272 bytes code/win32/vssver.scc | Bin 352 -> 352 bytes code/win32/win_glimp.cpp | 6 +- code/win32/win_input.cpp | 6 +- 169 files changed, 404814 insertions(+), 1303 deletions(-) create mode 100644 CODE-mp/Debug/HA312W32.DLL create mode 100644 CODE-mp/Debug/SHW32.DLL create mode 100644 CODE-mp/Debug/vssver.scc create mode 100644 CODE-mp/base/games.log create mode 100644 CODE-mp/base/jk2mpconfig.cfg create mode 100644 CODE-mp/base/qconsole.log create mode 100644 CODE-mp/base/screenshots/shot0000.jpg create mode 100644 CODE-mp/base/server.cfg create mode 100644 CODE-mp/base/vm/cgame.map create mode 100644 CODE-mp/base/vm/jk2mpgame.map create mode 100644 CODE-mp/base/vm/ui.map create mode 100644 CODE-mp/base/vm/ui.qvm create mode 100644 CODE-mp/cgame/vm/cgame.map create mode 100644 CODE-mp/game/vm/ai_util.asm create mode 100644 CODE-mp/game/vm/ai_wpnav.asm create mode 100644 CODE-mp/game/vm/bg_lib.asm create mode 100644 CODE-mp/game/vm/bg_misc.asm create mode 100644 CODE-mp/game/vm/bg_panimate.asm create mode 100644 CODE-mp/game/vm/bg_saber.asm create mode 100644 CODE-mp/game/vm/bg_slidemove.asm create mode 100644 CODE-mp/game/vm/bg_weapons.asm create mode 100644 CODE-mp/game/vm/g_active.asm create mode 100644 CODE-mp/game/vm/g_arenas.asm create mode 100644 CODE-mp/game/vm/g_bot.asm create mode 100644 CODE-mp/game/vm/g_client.asm create mode 100644 CODE-mp/game/vm/g_cmds.asm create mode 100644 CODE-mp/game/vm/g_combat.asm create mode 100644 CODE-mp/game/vm/g_items.asm create mode 100644 CODE-mp/game/vm/g_log.asm create mode 100644 CODE-mp/game/vm/g_main.asm create mode 100644 CODE-mp/game/vm/g_mem.asm create mode 100644 CODE-mp/game/vm/g_misc.asm create mode 100644 CODE-mp/game/vm/g_missile.asm create mode 100644 CODE-mp/game/vm/g_mover.asm create mode 100644 CODE-mp/game/vm/g_object.asm create mode 100644 CODE-mp/game/vm/g_saga.asm create mode 100644 CODE-mp/game/vm/g_session.asm create mode 100644 CODE-mp/game/vm/g_spawn.asm create mode 100644 CODE-mp/game/vm/g_svcmds.asm create mode 100644 CODE-mp/game/vm/g_syscalls.asm create mode 100644 CODE-mp/game/vm/g_target.asm create mode 100644 CODE-mp/game/vm/g_team.asm create mode 100644 CODE-mp/game/vm/g_trigger.asm create mode 100644 CODE-mp/game/vm/g_utils.asm create mode 100644 CODE-mp/game/vm/g_weapon.asm create mode 100644 CODE-mp/game/vm/jk2mpgame.map create mode 100644 CODE-mp/game/vm/q_math.asm create mode 100644 CODE-mp/game/vm/q_shared.asm create mode 100644 CODE-mp/game/vm/w_saber.asm create mode 100644 CODE-mp/mssccprj.scc create mode 100644 CODE-mp/null/null_glimp.c create mode 100644 CODE-mp/null/null_renderer.c create mode 100644 CODE-mp/null/null_snddma.c create mode 100644 CODE-mp/ui/vm/bg_lib.asm create mode 100644 CODE-mp/ui/vm/bg_misc.asm create mode 100644 CODE-mp/ui/vm/bg_weapons.asm create mode 100644 CODE-mp/ui/vm/q_math.asm create mode 100644 CODE-mp/ui/vm/q_shared.asm create mode 100644 CODE-mp/ui/vm/ui.map create mode 100644 CODE-mp/ui/vm/ui.qvm create mode 100644 CODE-mp/ui/vm/ui_atoms.asm create mode 100644 CODE-mp/ui/vm/ui_force.asm create mode 100644 CODE-mp/ui/vm/ui_gameinfo.asm create mode 100644 CODE-mp/ui/vm/ui_util.asm create mode 100644 code/SHDebug/HA312W32.DLL create mode 100644 code/SHDebug/SHW32.DLL create mode 100644 code/SHDebug/vssver.scc diff --git a/CODE-mp/Debug/HA312W32.DLL b/CODE-mp/Debug/HA312W32.DLL new file mode 100644 index 0000000000000000000000000000000000000000..2b1ea82afed700e0a470d611edc9c044016ab2c0 GIT binary patch literal 382464 zcmd4434B}Cl|TNpSXOMsQi76*!~p>cbz&1t9Uwvu*m1l-HaU*vP)GtTysDl6sr{6s zC5z3oftQOI=GW;=rppWrUFfgtOt(;$+A)a|)&LEJ(j`#ZJ|mV;rcOv8`hU;4@5yo& zNa_6lpT9pJOM36#ckj99o^$Tm?tP0tb&ujw6vd7ITuxE8Pp{@l&s1xwq)H{Ei> zjkCv(FNs)9#~T%8k)uR;Yv#8uwR=0Dc+M$xI6tYp?^KjE_@AsOx9-7r05t*x?Y0vB zjav>}x$x;yO622l4-e+Sw~G`M;|~wfbNO%Uvf8a|KaXy^mDeZY`#QJc9#8d-`&;W) zYAbQC&ZR6ruIOZ!UVyjeWCh3Fo2}irLBqYnN33ztSZNXp{=$H2_NTkM>DK#`@WErJ ztFeDQiZU>}`-bba>lMXE2&o1TJb1#@=wF?p?48{u>%9Xs(U=r3zMUu3tD7yWDGPp# z@;J(Wg71J7~PoUF(=1TK{z>OFcwy}H>q%6g1*;9emDc_%!yKl zi;3hzJ_1@k0(k0cP zqi+oFyJQ}!*WTi|v>D$Q;CmUqH$Pr}>9zQ_{}whbThh3w=99B;ShGf1vV6g!MYHj* zw6`@bvu-voxYGJnzaUW`w=e7l{(thF=nz`Or;4Uo4>+|Y4>+_*2{U=GqUevg`v+2! zw&(D-deu<+_H6(-o|{xX>1!qWqeKjfc4p>w{(;~5@&m!Im1I4++kb?cVnHMjPncKZ zrz)1r(jW7V3_8VOtyXZce%O&J8Ev9vWYA%7fmW6w3R z6N@5l{S9}UsGnmjh`19S?P^UU6|S6rMFq@PQ^MT-@AiDP z@O;T;y+i6l4*7(>xk^c8#F|J&d#5{LR;;7?zA<&>1d0o2e&e})r#r<-Z`)T(k^_L( z+`&))hpF*nS{6e*5g0{SN&9X$7Da->fw>B37cxXO0~k?tr_!m!+Y+V^tgb&6!c0tv zn-_kU2j)5)#l!3Op^1Q^l>m)FLZ{*2jwM+Tfq}ZT`j4WmGk~wJbF(62BkDK;vv1S1 zU_LMlH7{cxKsP|Y0U#35NB>d;21uIe|0|o?zx^PlJGQ@DwT3Hp_r5|D;CiC>Ju2!d zdXTOh`qh9Qt7hRM8bUO+tfw?L!Oz|okw!HnXBdun(n~^?)1ae$Iwr9Li*9S z@NJ$gdz;xbr$47vBuqc9fyof4=>n=~J#|+#)dr#i!#hDF;s>we5;VP{-Tdu$j)QlB z1uxH$YY43c2}ZFz5+pdSQM4{=PnZ|w;q<2)-mv=GSP{&ArsidV3CiHv!ZF&<;5Jpg}Dt9!^0nG%u!^uuCl4Rq5T2I{(ftJ{;hn}7>R(n;^ z>=eIOXXO4-&jeJX`7b?BuBERi8eIR|?Zk>JR~xI!iCeux1>E}NlL^p-7tkxI$>`b# zargKKxt#3AT{Ez1NHmp;7O%0Sd{w5-P11Di^LWS&g7%7dxzXx1TFS>3gZ_MA5R5+P z!jOp;+ci&gL8K~G#BgCW;pF}KF@B#}d(0SpL-csWqt)@Z3jl|;xuU5K1b30XIi#d2 zt%8k_ij=oEN7J=_8i1P9+UdrCK6jJ`6v%q%NlbKwY|r2K0ufgec-7zc1b)g^Qj=v1 z{yTn-dm~M=CiwfmPZc+K#cH=`_Qo=)ahawNZYkM@=mwuQF}WiT|C=eEBhl=OZt#vN zdEPGZilsiIo<7l-(c&8cG93QCN6?;xKno```3AoxA1j=6-%wln)(Z2vZ&6q7bbNo! zfOvdx*!k{v#pC)bu6O@$R!iSO+&P0(Vpr3gSX1q~sS+Q>3G?-}Otm%%S?G0bCj~R* z$9z`l2ONV3yyKOyqSWjm!Bo1twIg9({~!FI*xCG35@}P%?|ob~ z8p@0sHPhe&&sPFW^j!f^r9>eCdZqqe(fZE09prgRoxA)_ZnM##ujgO zj%f5olfIN!H2R`Rn&vssRwa|Z!7{;X+~PweqZw7a#s;6U$;%xOAr~37cc+%(vO4|n z-46qC;zG!_OGINhnk=U_%cIFK+FX!tbDP!XKa``A(GaH373IdtaMoj7Q*K-nHqJ)F zAw`R|nGb)1aO8&k5D+1^KLAa!JF?Q?A7Y5b6J|Wq0L--sSG?wB^A|j=UNIz>4d2i` z&rI1?GKBw^@IQ?Izv6#fXj=&hjy4h)zK(WrmMU&86Puxh{IOVaML_IiDV%ZZ7?qOk zkjx?SR32SRb2D1<{^#YGn!;j9xltd+!y-{`#LLx86Nnn0WiLFQr$LZX z&y&|NMK#QcHq7nvU@)!}bRhTrJa57j4Rb1Y#v10X_x653l5E|~jyCgOu&RRcXa2(+ zY7ncD@Wf4rR9GzWzUrDG(H-g^Nd+)eNvOuHAxt>N?2WD^YHjjG*AlfppC8xd5_)63 zZzXCGx#DvJB(|~HOOHPJB)Ej-yPBzkX_l$;R+n!p$<#qsC`!*O&O2LzYRy1_%m;m3 z8wqx_>q8YFlpw@y2wGCOy;JFE>vSc|H{PR>K<1{RSdx$Z505J?NL=;4!t!d#oY<1u z^+D8lyq#9r%hnKPXqEkiHHqo973!f~E}H9NhzH4d-7MB<<;c(VE~4lH*oc04z3crG z^`!3#sJ)xZo_`$5a(TX;O1mAcv=ghoPs)>3b~93+YR8z$)!t3?a5y(r!lXL&<_jMFnXnB-_BGVn2!3rL*)uxCj5>l~T8Kf9XqL=CI=L(}7~q={anjXNNiAA8bUu0Fz-3?gt@d!p2&6x~al&JmAve z$@zIu8}guDW-kTMCQzTRXaQ0bRu^Rd`M$HVZ!ErNi@zq!MfWO7C3+&6(>y0niy+p# zeK1DjKo4FhXTD|W`ie|FlToJL8$NGaiBV4jgf3H86>l}k3|G+{X5L0UO`k1)R3fZ) z6^2qGsJ2wTfccR2Qtuy$lOjAQF=*HJMzcmMzlil^lo|1_`hs%QwSGd3N>S{wGc=`+1x zx?;Fud&PeL9VzH(Cjn&=gEHR&WyM%fF0H)40^&^xgsShjaI3j>ckinNiWp4So?$`q zl!WA|Q$UgdT1n$1<{M+5FND1}F=6h$hmcM7`NW!mztcFs7CrsV#`$^)z(*SApf`{t z?DLRlA?=)Ol3@QHf8Rf$SCl|uo2zJDve1{V4}iG?!i!q&{yngzC!mfG6dy1qfacw5 zuFhvHhq}En;^xP-Pol6K3ZU0z)VsCvBsq$tIQs@OGl??~$l|fk5b*|ms~M|r(#io6 zbo`*d{}!5XnC|ciz*L@!pJ8e`-sx^N-&0vGMC41CO zHUROf_^Xt|VpV`dv1lL{P8=jMrOo{2-8P9#v89uHD6JPdaUQarIC|cRW0zY_9Q{W? z6>&YSeQqEQ?u4cQnPfKyM42k;t5h+bS)vszv3LFFMj2u;c(X<9tr?JZE;D5%v(KFi zB9JG87wWH9^}a%kfg5DC1=1VGE8q`S#Yuq-vF1z{llSuLgSmK=M`MV>;n(t4ShE&sITDu*?#J zt|OM5ctXmFCoDNJ-@?Lt#saSLSoqdo84D*a*JJ4AsdQ>q<%B@+GV&5-8l z@-j8!awsf%ja0z62AZ+cSQ#WS+!P@(oS$g@NY(n)(IS$<5W-8&t;=2^cxGz`4*i;D zmIs%g+X?pkVod3cWo$RdNiLY*rgP=|Hl0hd7+0dPOpLz)U8pmP;Wb+PNz9h&Vi;6v zS~V7j)Ok)NRfZlt_LVkWG(wuy%~l6Zry6Yxb^FvJm!i&~2O2}-35?!Yc&ulS6TU{( zDAWA1G5tL_9}ex$MzBn9<$2Xg*Cb}~5qGsiD}iT;i6kXgzA2s4q?Eb*vqVpjGXB2p zfKW6zqboe%mIhCBg;Vo)PM6iD$ZEza4{8`qPWoKyF}i^a5A~;Qw#jENR!Ye-YEhMv zzUqCkUs6o$rNX6;us&Dv69mTV)r@kYBVKPTGD>f}+-VWg81okXo#W7*Y4qMZXIlwD zBX(OT8FZ;NyVXO3fbN{+8kj+HD2rHNkz6f>;wnuZ_Yj`MFyQUl6>AKl{>}ON<)^B@ zk_HZf#X?rdbKo~G>zEy`7t))npd1*RL!*4O6nu1E<%=}~JYpJcet91=Mz|$btG(BS zvA|>E^4cfsKi87|RWkw~0HjQ)l6=MGuA$23(p8WS&=k7^Q2dRBkwbs=|8UUgE;qWv z>EInkTQGXDMf9f)MMG%iC={n$&kx^e3+umQJ%`0eSKkxw@Kp_vT(GvOl+IMp~sV@Xh z-Oc?$f>XDl8aV^hGBi|2#shi@mtRZQuB4q=HMqJ(`uh99a1=@nszR?cSFk-xRZ2?0?hWM?|XXn-o|$w-M;8gQ7VU+ple?+@GIdi8&URQV{Ed?${Gs zmg-q|eDJ9A&K0@AKRDG~v(K!8whk6V6Rsh#G^h`_u8a+?3nxq9M3Nl;sZXB-fBKNy zu{xw?8VQ1HrCV@hDB$mZ5H~tV4N6jMmZA-pWod1KD&+6`8r5zJhz)KG2T$o+;C&1y zr|0{6>-v-QCDw-_^6!lEId4+VNZ zAks@e`~VSD*VN>t`CdbIul_!RFi>oG(!TGbeZ{!c68sSRB=GIHKQnPypes`4ODc&e9J% zwb?ZTJG`WAyE#N-es=-k#b@2?-LUAMiftt+A1{xiH+!mZbEkc?po>CTPq&Fpd~LK! zCy1A!*&dccs5f^6!|j@${I@(F_pY|7Bk!VsizNNej}peyZt?&tqJ%AnVR3Z;Zq{qW z)uHIs!S$aKSB7K5sn`2+DOYp$DR6cukU9%phuJ|}9S6y_b`~Yfv}qA*>H#XHr6Jx* zzohglV{T!h7!t5K$SHm`ILD|D86|42o}AGkhZact7?_#?C~)HFyWbrda>3d1M1CZm z6Gy`C!=dB#P0Sl~d!tapTm{LON&DbNfE)nLu$mGZTz}0d!H~9jS-Sk|zk*c*f?+)~ zPcVfl!r!iG)-pF+&MnLzaO2hA2&glhm_UeSXb`}bT2v(E9u%qdZgqP#%S1wFh{AoS zCW5_W%Jo0z@B1!+**PlwmxI zg%9-#8x`}(YzowjkhBQnL9ZJ1c7?@m2n)I_7gxHmFq#LcV@w#xIkqcxJyn!Op_c+b zsX+qA>F-m4MfzFi@4p5=tx&JOZ;7-S3Cu8B4#iuS<-@%sxx@b3DycqbsBSnRD|?CF z7Ge0Pk2ZZS!@U)haVb_(3Z^6?LXA)KnA(TdhN(bn3oPoRvuk6UgP zjE|{xS={_FPgH=PL>!7*B7S548#K2L73*3#`{BgOfB~PQDq?EvSa-V`%XGWQVRMZ$ zirc9_qu+>An@L}FsdM#tNse@%3GZHeZW3Jpe`;)3S1}p_&;6X1YOxr4ykjM~C)f$5 zl5L|_9z!ED>a?l6#AAh*iU_aptUqR9tV8z?iDxX&HJ0?)?oGF(yPW`$0_Xv8R&=2U zs`UhkuZOQ;d~r#=C)z?Jc6z4kEos)t`n5aFN>kCqTQ4nW)F- zbq-V5fQIVv_m$zN3N}a2MBi%ZE*~CoiG|MS)de6#t$u8!-|GHc`?gao^ceM|^our+ zc-k6S+~ax)(}$qR#?UdgyHx!dtYWGWOW%rE6x?4QW_K<8D7$MC>@IQ$2HEZ^WxFeQ z-1;aQEJL7y?Jiu2Qn4ur+0EY0n!egukxGth2e;+v~EbCLiIvOmnj=uQ5lzkch9dLIjqwK2f2>lvs1I%aw7L{MEPDuRL~N+!RC2(IUFproNcj3I-%%ZtM`?vj=~=2k)JOVhKfqWE2Fg24^^7#z1_)6D8vJ^ky@b}*jP?dQA`=uhz_tl!0rJDey;c8@jE4)RD?TdO6IRR{aAwxz5`W zH^*T*NmV;ve=Lan4Dy>kYV&M9p)Yqg^K29OO%vwr63FcMF?oKJZZT0wkwhxD#S!SG ze=E%*L|R)MSr4Ue=W^&Q0tEzi1&P@5ws_5(=KV;yQ{l#*3QWZ^T~3jS?M#hRd(q_K zE$gNxKghH7OKpmh!DDEZ)(WzNNp}$(Mfs+9s*T*E-$29RxcPw$^x`6zhbX7{+DNy* zXem99;H+IjB8K%LG#7&9@j~ybY|a6X`VLs)sY}sLl_=pTz`IK@D8ep6sV{32*!d*` zHI{}0fo3g`!=L2g(6&1)f-WD1#9zsrHZb#8`P#v8UF}r2gT6Sr1&$$alw{ z0-~ORxUqYp#;Frk%r7HXsjwcl^Fx$*+e(sOLdQ~Dx_cQn^pOKdHytAlS{0b0{c7(Y z-ru6?S?9=OJsR>AvK}jE3{`?LbKRvMIU+0DEw-<_6!~#^*wI6K-24heH3o;}sKrWv z03np9F`0MOg~bv@=O(Yo4`NTN{eX|0dv&&FfQ(BZ(C-5 z_5cYiqzw4`_kc$GU-tJ8;(H8s=ed>Cg*7j;=Du}RZmfF_<|w%{coB^4T<;V+VasQy zqBHTS2pRXby^7mBRLKll85U0RIL3BP8>q`p6BAXjY_>#iY+u*7*br+8GTyA!O5ABP zRj@|nBWA;%#Qb3Gj(~(b2GUn5lP}v=@~POi68iogzAI|wzomZUX#*lzz_vw>h~J5L1N zv6_*(R;n1L^_)Hsh;9g^SXF2_LD~2}5MU%kYz^E}Hg2_VJH=8qQJ;?N=r*o`@?`~dDzO-ldYG>A zeh9wV*lY-ieHO*-_20FR*iv|C0O|}^j~s+risqokx!wUmv#I8DB5Z~`H3P>7$Pg2q zSEa1KZmgR2p%JpNmYR%^onWaQAF}!1Q@_5r$P%Yk4C@r?SDUQ%vDB~sFJf5M+TlV* z$IZvo-t#}mvFxzeH;Go z!T%2Y7Yv8;Nj4& zFc;iRPmmEgC7$!wfXhE>4?rMc{^TZxU+w`oeuoJWjpe9rOQ_JV0v&4q%k98g zP;8F)`$;vX{8+N`U{8NhHf72^0H$9TxNp&;9lv$`R*tBv=ph;y;Zr=140|bhY_+X* z88qfSoTpCOa#M#{B^ysK_QeLfr*+}sJdNoVr1A_{OHM7E@oZai4|+{~Nj z9C|11u1jBgM_~9raTl;_<5lW^eTjM(Ep0%Joz9OynPc_(_85C>0$7`deB)o!EM*c|CF z7s$tuciUmkmA`pJx*4c^?$A4Gowyky7^Gq=RB5EZZT!c>v7_jQJjk+}?>C=-7%^m2 zimX25iydD7F0B+HUHYOM?;p5{Id4DO{2<^0SC`-;#s7QVPO{fJo zg-04(J*kOsQ8&0d;$|m&x$qJaJHb<^igqj%9GQJq?Y$uq$YF_k6(3RDTaV<=#ZCm- zbAE)=MX4HHtaLj?R*lBGOT{%__P^ej#U0RKM2&7zx@Sjk@*+2}(cLD4ZyjQ>H*PHP znl*ri`ka@`AP0Yf3*bhN#Fv?uo=XiLM1@6ak%u^=HI9qgWLF*bV3{ir)y5Mr-N01-ex2uy8iV(4 zGR@@AAW31%BJ+!eSS5BMZ;>OmQ4**Vb1S2D0jAxvE1IR%+1}`AO z8Kmx@bCuLp@%bRc1Su8l0M~QiltcT6e~vq17f>LRF4Ndhwma#=Rw~4cl0Dc>1#qk1 z{ifK>rmgwe&*i(ml|Y?Wj;e|_xifbk{etJN0^7D|Y}cZg^-IExiyiAkxJWz;<%$BR zs}EEeAj&1j$R47&OWEO`CAps5crLUW_Swx=p;?B<+IvSRr=U!$`PyNo7~s?k#E+}g zA{8?KxEIkGMJas;^}@zQ@=8pikiP2$?XsFZmAkf%PvWYwi0%;z?pzd^;W~^@@>WC! zUx7MDzX$Uc8SC;8@J^y8%p1m53xn6EI)Hz*MK$L8{Qbum$)KlP&fotI;TLnz>1Z{# z?qzQbBo*y(z=QQ=k>Xm9zyC>k0*jYa5h}1;XP8ha`DY5#;D{S8ZXYJnDHC4{(tlVC zU(t}Cmk9OPh>5xmrk8GrB#fK~8Rb!pXe~^I$o-|HLH8@%rPP++FY6 z5z*K&{~Z)ov{lP-J@9i6{~PWc@9Kt|dnW!VzomjRfbg9K191lwP+JbXAtANveGWQX z5!cwU_1D{NBfIuwKJ=3{OetT|r%t}~v6FV94_%6b4`d*pB$OIk6shy;4-y8zgF&P< zyhMZC7^zlLQ($b-Ocos(srTekUP!8HAX>4cQ`Toc@-5uNXoFH4fR)>by^;R@f5Fxz zV(=8cMWZvClx7Cc%5C*Ld7{x1P0FYd-~I>tHcSh)hZ>!tonl7ApF|@CqOIU3(G>%1 zTpiFRNH;!QrS*ANDWslFWn53A$X%6a;eZuwwW^C_PU>2hnN>9Q$2c^vll(->t>&Nk zrrU0!P@l8*lc2d!dwSI@v6&M8onk0<*nj&!6H>Sje;=*Hs;E%KK2?9!k@}2Ewk4%( zrOUms-*>lR^`WrOLMax+qEd-*?1=daKZ)E~H!7rJGCd5F7V5gtKrRQjpDGqhWPm~_ zc4F6%+W%b2Erzn*-apbTx^@DlJJwJfw8@?5X>s+K{?T#S>n^aGz@WVyqBSV~qKeC; z;EWw!S7Nk6GB}Av#WH8?h19F0pW6OAvd=y32ymSB03s-~qG*yB#G>jWYzYtrS()qM z^Gk(I6;E*#^sVKAte@iq}Q5ahix7_-=1g_ z?}8G|f9-SYFuqu8bNpMXxqhREL&!sH=dKhL6!QyRux?J`;Ilp)LyOYS^rT!PSY z8p)lpQzUmDkC(jDC^S;+#O|ek%Tq~DEf0|Ap0y7ZaUfpq&A(okANy^@q?Te3v^5TK z0cjk$eW0)#rD8!|6VBL`S-O&Mo)*hJNA$tjNRFWlQDUWovEQwKeyqAt#_EQ+fV2(l zJug%^^3LK@8R&9NQ-5)Ii*&0ksGke*;bX$C+-vPKfoyfh20`}$B=aC*+q$f4oH_ru zq!$E+OyhC+gT*Rqz#AjwuzIFJ4-S*f$D8Kgy@W7gMGuDPHW^Pah!;cX1QTY>YAPp# zI4EKLc-F9<@ldy!B04u9+=#tmMU-MOuy9)m_Iq7^kaZccp8{oMD^Fs<-!WdPLjX5n zzJ-kfQp=TFEO;pyi8HD zrGU5rxpjB^g@;k|GOladPk1zL-u@O>sLbdC9>B-~SE`q#g9ajye}kd_#7dqQ8Fo0% z(6@4~3fEKQG7$+dJ4jY|og09y?eE(`p7c{I-}j@K3^mCRCk%^>8}{$QPmA9n%`GaB z2MIHLEIXV^`-bLFA@``;GyKGbiQTcLh-bd7;uvayF zTV<^jjpB^35a_QOMdi!VFbU#Jxv+!uy}9!S;hpKf8aIa*;6qmP_wNIo zI5=Tb!Q_r-BvHoWN_%1_+A_|zs#5b=w8&YNHWh8;Axp}2dNY^3*cM+%=NiK(mDJGT zDlM2?2taFImV@{+%Nj3`CJ83GBJA(u)qQb(phL3Ga5tvnq-~~3==qVlTu&;PTvpJ! zG1@w23u3J97>j1(TF2qx^U)mR3;8JgZB6s~U~*+a8;!CJa)P~z`9M$A)D{fGCtjB# zs5$j5$cJmcZ|AECJ?WDj^?@khS zNK)i;gYvgW2L-`z?WZf4vm>KfM7NNrIkmix6QQlK=S*x;D(8_;qmtEK{p~7oD8Fe8 zvi>a2c@LbP#DL+P7v*i{iwVL5JKJsGKjv;e=q!@3a0EvH$WgM>)!xq%LCFFqXt|MT z85{m`l!Vq))-fi_tG&(KEm@rR+|B>+J$IAa%&R2u1<@Gy(5biIjgC*Q%87!RxsF@n zm6+JYo|zK`_IijJueAyf+Don$RzK}EYDQnBmcYC)W0Ue4bYev+@o;rrZ zwiYhqvD;n}@c!7-+@!ER#c60Ko8M1ygDeGp_~G+=56v&U-xdj9ew=vjgAV}RCZ~E8%Qi1d`q+m{`ZL*8{%ciF?Y#r!^z zzcmIu%)h?l?5!_yD?Go~Ll>|mMbOvjQU1-}mphN}g3@+cB?!6XER+L0XdV9R3c9 zF^3VH+H_?xxpEJZVg$95Z)%e|J?&=ve10Y@pYdgaeZ#20xD08;G0# z@+`d47&BQ25Y*YrZ8e0C=aP!jte(w5XDY%PHyz**fy8V#e-kN8PW5HoyPASzp5maw zHb_{pJADtyVIHhfvv+V95r1OXn!Ua6VQLikTDoSXZzEIyRgsztNB0{*`D zz!NNgOK8sheZ#~f7#JctEN%ULFXB%60h+ZM_;7hbP2+QJ`E&41BoF)hcT+2p*-1A7 zkAD?+lK+_Jape<|x4%NoOI`_sS3XB*Tu$aJGJcoIPyzx8v|qWLS=k9zZbN=0voctU zt=^fkkq|gJa1!el6HbH$;fB=|(<;uw1z8V@@ciK^or=0ES}c|xrFGf+Vw3_T-tu=?lg+kXTp zNmhT4?V}W)+?{ljtHAP)n}2SWXtxe@bq^Jh^#U&^8~*vb1z69YIZ2Mn6!W_#U<_$(%qZBo^-E zAH+t|tHwNrQaTkafXZ$3I6*$<&gmoR?} z0~M;R2Y*9|F90%OPQ|Q%)Z}5RKqe}CfzUI!B9c!`0~H7pJT58)52bOqR0lfo#WO$% zsuCWSnQyT}DL_eW+8V6V$Z5ZE`+me%&;j7@sL7e7<9HTuRs|S&sNj6#R~xwiHL?4g z3u#ANx;d_m>oD8vsn9LP{|1fmvBZYgm`4{j5%Lpk&sZIj+B+I^b`O~sfr`<3J`C+1 zf-L79Jy2Tb;$VpRI0ew0hUo^C5cOc28PE(2&uPc7=THj4oYrL`(>7k2fctc-l@H%F zzs0`PaQ0IOxFC(56q?k;%wx-XbO*o<830tZP?GB&pxqWcB;te2ad`j zZW#b=WdZNw!}QL<)3vRgPTU@vMor?_L4SWeKnApZiW3VWc1-M6>#W4;dBsY`eK){R zx`u1^Z2$hFSXEce!eP0_l5jdvWh{ws>YUM3p&GZF;1o*HLGp;cQk|NGTh#}1AGJq9HJUz|X_`yt?Pr>5j{!OyUBp{PjHWuHX@SwyV%$y#JR5ur zu~uqf%!Nd+Lm8z9r)1JkzQT|ctr-VC^2y}}@1GiRIkahr#?{SdtY*(K{{-3@wSn@R zs3Hh>vR@49ZUo6=hccKqMVkc{av<7QcM(00)jbue85!PzqC}!*#Jo}_84v##ZWPex z{08oAECtD7rHV66%ZbbZS-J@Xn=rq@@%!Tl_To{3O_=`;i-$6W=s5E_(6-S8;!2pL z!|=SO{MZ2waDEL$fgrOpK#1iS$aJCs;%^*;MwzNOw3;<0nPQCbyXR3xur`Okx;&gk zJha~W=2OF6dsLiift~POf9>Vd#KoYM7d<3vkBanyd}Sm+h@&_Z$|cVg;|LwByRo?4 zSVyx*di39eTWdoYu!;?-P1WiJ75SZLv1hu@>;;SAOz8>wW(eGAz~yRUwh@oPG2bGrob3F>JLPj2^WSma60ei$Jkzy~ z_mPtW4dZxfGLIuW4n#AX2Wb!JbY6OJ_UM349FJVz#*D{$U&D6E%NWn!|GtK3Q*C$g zFEL*^I0iS*)eq+&DM>_XE~9Dg-!hnGmW286H#m$L4+3SV41wo z{9E2YLGX&rb#zh{R24{f_)0(G-4oawuub+)bcK#jAS~P)<+m~LTk}zohyQU}0=XRM zXlHUxn4OYH0gIM^xL?gnka6)ETk$a;io3T1MaFo#Vd3nH;LlMsjs7x!2o@ZJOqPeV|L0PiaC{cKsZvvrngs_l zRBBQSF)L!7H+pGmn6fL!oEMDuDq!*8jAfh=vu<+o6(~Paf4qdn9)aqmV`EkYQZHCr zX!tBY3qRy6p8)(I6-X{Q6DVMIQpP?jli!IxhW~gptA^zJWvq))X2dTj9&WLf%)|aY zDHo2`Ml_!ysh8l4M;MW}*+%4*4>%02rumnd-;Odw+}=>{4l*8bln)t?@>W3)+nrF# z3QVYz^1p2E@0Q0>dd;ENnw-w+@d`9r;Pq6TEeCNjcsIxg|895_<|<&0pavMHe>&jI z(}CNbf;Qv_chD<-Ad>7;f<*9c9N!lbzZO@y#WJrduJlR!!ZjFsKJ~iwj-F>LZ+`%) z>gd)kZt`UKNM33a=%nqm^nnvjN~EXp{v)=PVOwJ(Lc)yav4e9nPWMGfr4pD^&8nUM zjPnch%azm@z|%+)>r(Mb7IGOzjU{fRGM=S2sQOXF95{?XS>@%@YggL~;rOb!#hrA5 z`#USz&C&=Bp6s^1z2I*|LEsq0n;hoteca#wDDD(&{?`wC)?b^8^jB=!Rw6c&p@1|Q zoZW-4=~`?V^F^1qv9AdoGaJdR{QiDQ0Z-lqTqHHJJ&(ZVfz%;GaT!V&LQsA9=O}^r$MFd5=C?gu##;m6!Y>E>!~bfP1E@%xvV{Ip46(^c(}C6T9w)y$_Oh!nO=T{kU zM**x7dfCtOD&IPu@dhr#d+~Q zo_6X8`z9U%K$th2f%Rkg3-c&EI8fK$_n-1cQU1n15%B2e5g>|&7E#2CTCGIi?Bl&o z*>QBLY#k2J^I&->dc;MwHY2L((w}lmKqX{xnWLH{I~DM?6M$vNC;J5f79e$_6b($F zh*@rpv z-H&&cw3?-*jEFI0h;srS`Qo;c-{POX58*#}>$Z~F_;10#Et}|@QBtyc1ngLPg zh6==~9!66r3$s21EWnGwul=hT*xF1Djwc*V;pYGW^WN%Alb2Mwf=imNRYSagBtV;j zfl53(TXckCdyyZrG??8~vuA5dF1_eZcXVk`E5;f8IA+itdwksuR@-_^)yQQA7pU!2VdC4n-C+a2cBQh{uV4f$^)7ZlDO#evy4Dd4vIa20J1 z`fuAtw>yHd$LaKTlGvz&Ou>rEy*O%HCVIOYp-n0>G!Wad&Z-ATOp`BLnQnzbwADH9 zD5`V?fXZ?-V#F<6V!O0H0CR>4LN(7BWpv7LB4nWmNH_y2E!h9>K@iBH(1txUD$z)w zpfzKIZ0fkh1oMA9J}V3G`9-lblJ?zcA+v&!`E2(`BJ)=mgpJIb&dMW`c(lXxNh^zy z`CZ&$WTI*RZC}R~BlDl>Hjw#jAuUu_s(Rin?&HNRFIF_AJIGA3zokH=Dr;jo?bl_F0KZYY|pcc!0M%f~HfW~fO$8_^7 zP)HG|rTgkpej`3*o+}!s9M5$l7_?0&3(E6^@_XFwF#o{TgqsQFDcngforR`tl1SG( z4Tx!(d?Kk{CoaL{LZ5Qr-6~)K{LsFjVuRugr3XijZNVA={@9Mj6l8Nlz*p|Y;dXo& zzGLLE9<7Yiip6rr5il4Ds~}ZHD^wWf!qsAt;|N9KMx`1f4ijn1EtYV&X4I_4#sknB zv3U>@(5_32Tu7CpD7W~ronBxdHdL{Us}#?G#)48uOa~n};UuxKvFpO@bMDAnL6Izq@#Wr(;G;msCJG<71wgBm->4u8f zj`ge1lC88>4&t2d#p$++Xj^dfl{=Z5J*=1+lQBwTNzhml!j9*1h$dR@NHEb$08SK4 z5>{w8_+hM&!ikSC7`5M_m*W5%oLzxkSPpq;7rEOuRAoIl)L`(>PQG6xnu1vuj!%cN zhn;LM%IzVQkK<)7bk<>dNk!$Ldgu@iw4uEmu_x9iut`18701aa>S7h+Z$eEmBr9P9 z;H6L(DV~Q|7|vLoInoezYv;v~w4J*Ia7gl>#Q0=w&pox+Th6`R(OOaDxiaaSE-O;LoTRg zp0+Cn`I<)2=DN}G(Ku5z+m?T07J!Si&M>{ycZSQnsm4|)pTjgs=P zpy9J&Vexw79KFEnBu%JsG`75j3g0@XT#`hAAu!Hzs9jSS+46F)Bu7V!MKKV3E@H4S z+2iKA^BEyRF%bL82K0fr^;5otP`^S+A@S2;i-H-X!yzBOj!@`E+NaYfmd=amoIUrv zehfCdH#ux*i0bn~L-;UPW{3OWaO=56utY+bU)olr+)&q9L}X5 z_wih0{n#DK6~1fqFG2wTO3B?Jrdx!`JE6o#Re(uD;gpz35A zU!w~8CNC0`en3^7z&Xa3q&L3C&1Zv5f}EO;NTU}OQNQCkUr5_YP@Loj=C6I z5N(B34vd$^%>`f>&_dR0qj72KL26ZV%uc0$E830gm zvtEJ(BKVVNJb+Q6WImGi=^PTd_3>>mDszH%Vf13!u%Mloi#ds&<)cNoh17s(+@Bqf zRbm|eVjQ++NiwD~J;rpXRknHss zF*Voez>6k`m&_Y*#cYte2yYdQ(*ToqqP=uuU)*e&?L;9`Rk&`agKvJihp>XzS-obX zZ&DiX>zoF}15u}f**cH@7hGdF5$HB;8yy zz1RVdhLv*y9t zHu~Q5t>@TtP3s6*_4ggdf&mY*Erdz%no0`6V1& zv>*~m-^Gqm{jp#>7hn~?U=!0F4lEBkQbGNwUn`MH-_fbo3#o}%dLN@n+<}+$^1$e82}~WPHN> zHPaid!exRNXyalUC8a|YAd7>&ZiVdgYw7(^tfL5hF4oxemjd_{M`-JS`0KmhH27}D z3GvAu|nR=P6lr^RMM2KbPZ^?KFFs z`Ws;uF;yL8lJJpx^u~GlUO(g)u>S{xN#!?nhd*X;0y$;Kk_$kJA>NDg-f&13W?Jmm zkKzC^=u`mws6+b=F0~h7s7*ma(iZTH6iY=9k+T&hpsWc2gH!7f&kbtj`r&!xrM*F$ zh^NYGa#=dK;G3w9CoMB;uHe(9Wk@a`=%bJv-=`pIP!1Gt>MP9aSjh)ytvV#MyOKUufQOD2`VQJpI>V5q zfj0ALM7HH(Fg4jr1qVnK3SoaTK!jS!=)=|_Y^_3sWS+9NJBhd6_{fGOpMqX{x1uEw zp$4(muxp{SB5r=cZWM2f<)RQDEC;g}L6%{k+Pep@43D*xVcQ+~;$@%TI6S7$Y*Ee2 z#>#SX?<=X5VD55EZXAd1A~uET`Pm=k}6EHpu{xtW6)v$vK(Ml2+n2xd5?&xisF|2Rfo<#@{&WxN( zy9~}8NF&RcQ+20|`P1oeA%d}^)%*gZof8z{A&?>e1CR|%t-#=R{BEE&MBSo!{Nf^d zCor^RS~eu1M65-STa`On?w6A()qh?gWrAPfVg{J;giMg9SQ*~f-v98Iabl<&Ez5a& zU%tN*fojyG+*S(2U&5<&eUkO0SIqj{il)AffBOCr{(oj&({CGXz!yS+2$r_P zZVjb>@G!u};aDKBknm!q!tpvC;QoHz((9ur%Vd40yP@|ec~HCdjVc%x2B^J}b~FhE zNc8;&H@6$@RNyT=WvX~x?foNyg}oo_eLU5{du@xmmqxFSq#By&6->KR`_c3fYI+CU zn1Y`4E)iFHV}q%~n1;$EWgAP(yei*m2?S5F`X2kW5>A9^11t*)a1JcuynQ;uL#zn4 zi=#L?5l7R3`#^3GyYN-vH@(*$r?u5$jSb1ILwst93&)LA#f~DcMmr~gvx%j)=!%=o z_Yxs+42o0-c4LB-g0xD8P~G20Ijr*Jq|}-6gk{>1R~$Qo zp1=PB2s^-1u4wn>CyQDh?E`*nu7J~h&V@Cxxh_j5Lqy<_LqZe}KOw^?ojw=63=#Q} zRTz|*u*^J$!~4O~qitFFba;syDCkB(bhMgWOC52%Q9WVaEnhlBN@t5$T1R0NT}CTq zG)x96^(}}fZ{_uw0EO&%<8%&${mb zR`*;HeS&uUI%i?ST_A52EcyHd%r;2DQ36VE2T;%ka0;XO))c!7PCvK%n4!<3<`vDG z8&5xwJMLgFo7A5kz~lh1g04W?-TFMz`4sI;zArAOq@dgjnIgW6C*X$Vd-^;wz!Yts zZ6Kdlcp9S^Pj*;qZc;ht6!9){JZxF3nIe7`H_SgwMHqw>omFFoI66`(Aqwpo_y@^% zg{Kjrg~#fehbSSNU%Mim4oz;$>F_5PjgYL%dt>ROj2+JHQgBJqant%n?FPH0NNB4c&Wpy z+{VP@&iun0Z6gXz1+9 ze1!&jCyqn=R)?9A_pCwL!WrL^JV$BJnveA6fcW?QfY7|=Oh}d|7D7;#MT@ly^^BLV zQh#9qq($^csoI&{(~M$~$u#rqt z9L>pW2Wr%kUfhYq!rY_E%s zG{KlTcxV?Xc-r*N8ztQClfi9o5hx$!Qkt)Lr#ClgF2S0cREw|CQh7c(%^V@1)qI*3 z1L#tS5I~9oYNC1w$5yC$`6lKRHX+*|EleWmt+4$<|4g9%IR7t*16sdW>}#7x2+B0l zX}LrCCL$ziN1k~d7&B8a4kh-%YK%Lx+>$3{N_-ul;z}V}3p9FfXzO1H95{7&K!OKtSXZ#ua`s ze!9J*liOjwiTRNW-vqUH3r#LIf31Lh2dqH7oAp3II}x&>Zk>`ZFD49E!o~+?Y7^Ki^~Alb zGnbq6H9|b(B4#BoX;FU-wgFR!965BPI^sEOVP4j5(rXlo%F}`ACJ9ToFTic! zCgRq-bep6*p~|66!s}hz%%7fRd1{YaOQt4&f>Fv&ZW`@mACWBvoL)%#o_{rtiHx`1 z_5EHJ&5=b{OC}%)zKa6$L9F#aF6}R@QlKPTsEMcBDB-BK6?-bb#rhNBvPm=%;T2ot zmZ*6XTdKaz7QZ{)a9x|^rc52L>zO)sb7bl$$_r*7Qi4enq{F!UeH$Qn2)7+LBVq>o zIDF{_Yn#6}Zx0my0vS#@u79&q_6?pOPNE(#4xDB{hl~X*C~bSdJ7mQ}=^YaP4cNej zybn-n`#^pGFA&CqLG1ATWT|9R?ASlP&!01L!R#lf`{0LKW?Aq8CzLq=(zWSpJ@32T(X(#- zE%#F3!A0y50G@OE3}nKk{y01i^kilsG%-Qbp%YYK_&<>?RilMDv?(8*2D4;Sl6~2O z?;w`oU!pXQCN7|%SEB6SDt8PXc3`h+WHL_fJ#0?Lm;Z-{MF#IS7;*gt)yiG+>{`IP zT#1MSEqM3X<_k1yc#lvy_3+wIv^+qfc3l@=0V0uc{h8ZibzV#p!5&d z;n>^jpRx(Fdl<(TkX0#i~6e-oP_3(F`U;me0 z+|N7q(ILNvzN0OX415nUzDs!0$p)VgolZ?4a|0kKq~=ql9;yT}L?U?X0)x@|;2!}A zC~crt79_xbdQLxTV==u8UKgUZ;}{9&R+4nzh}X%!f&tRmFyEysprzV%%=J6W8M)j7 zAOLU_D1czQUh-7VPYX9O9<2u2LgZp!0$?p!p%HP+6pQuv>=&R84XX#nG78mcv0}r`S)u!}?ILfrV zHJ*EcAY{xFO|O7H>n>|H?5}jKQ^O;B%>61a7M}T z$=){>5gZHfc128E%}5;lkI0uTmniYM4*VO$90rhJ%bVTA!;$OcLm}`}8(y_a{6w;) zcPB9rpIU;{jnqW&SOuFp-rf(86QFc!zztkWbl^_;cc^YE5j&_Y<9d+AsmoAa<I~}AT{i3k-50h(T*c>(+#zV z8ZN*kf_oS5XWGGx`THoD4uA*T{(cOTo(|yQx_I)iB!Ti)*HFBjX4l{M3~ph#0VEq&HB1I6}@*hyV5-d~p{L+HuztofXSkxosRd zi*_qg2`a?XEocQ(Meq`>R2tvW0a+t)lXYDtb2#VD) zRb!yM-|z;ef3JNzPw`ZasAWH^lWtZn@KTmMe?9Vhi@(TJz&0J6g*aA#)AMn&Nj?sE z$HmPnY4%|xb03HwB|1aqm)S8P+ov@V2!P-*kKwc%kSm&|2k1VyH9+ru!z*`?5sTy3 zqD6I-7_t05`hq7VIzNavfV2do^#L4A{B9o7GbE&34auvrdJA$q1Nonymv@b|co86X z2m!@ zHCE{Jl%7sL9wk#`yFX>VLx!gUO(2|oKTk(fAi6e)X_!=O3*@`_)OWn1B^X^x6Es@V zWtRlRl3>E94~Rq%V=>}E^F=<6+)cT0JXxTlGe8LLs8<^=>H;zDH}wu25Krc28~}Nb zB8c`s(sqy(ov=iwtdJw-H4?v&R)!~x_DOchND}{& z@?tFaV19FxOh8++07<6i)ukl8-R3HMLz(Tsm;Z+cX<&)uA|f{PcO@*}N0|_X;J;n$ z6QQtXiKw$pYwk*xe=A>()mqjdG}KwHYeKB`C+n}v*SFduGT}OK`;m;HlQpcLl+niH zEi9)*JFA@h@cHJg{X4*_k0xzAut`nHX~IRmF`@mnw+ueefXH7 zyiGb4Nq#9$kVjd>kX~A5ySp;O6ri$#*2|HSJS}1V${ulQ+Nkg7O-$>@3S8&m_}4rf z-J@`fc5oLu7W(;Rn)8tyq?t=iO5Tf*jy0b}bPt2G5-;a* z;^m804VvWpsDjvCcRzi@of<&i_*&El`J-hg0z}-}i7>-?dVBuLF;mSOu_`4iX`!&kNB| zka8h=*2>Je3msMVY!0ghrOjExJtcI0!-tcO!)LM|bdj%3pt;P(5eNgn3QRT*DKSwT-fV>cPift}TMUw#AoLj<*P2kA-%?|RR@V7;7y z_=#J`bJLPtdHn5{XJ_>fa3T9j4gyL>lvQ85(9*0kMT`!bDLL<(?Rh6Y&+xnx05+C$ zGf2Eq&+_lS7CCen8~;O?piB7DlpZEVY;&<6wCd~g?)nnYpU`j=^nLUba4eq;@s88M zEDpA|y-&p6I7vOH-c<0nZ+oX@2%+~`BRh!cI3E>46Fc2|DT9~(T1Iv_3@*^H&-39U z36+-kO9QG=Wt zo`U-!}{BSM+gy_X2>|eitQmOSGwwQvDAk+Zynr%gCfKc?zd1Z@%j97 z+`X&Ds1ePiNliw26JbY&e1R?zcN_EF;#LZQYqVb=^;vxrustzJu`Ah1TDC%(AW#lB zB3{1jK>nhFw`fj)tpcZESE8$UFpw8y&ig zln)Tox%fdk&g&;^r}zxH@2B7}4c0aD;zaI;M7||l(X>fw0xhlZOoYkbc4#Nb7B&l5$w6&rwjG0GcrDuD2s1H$jET(GVvC;Jk+c0Gi(<(;v+zCx zX&uHgcrQstd?4PSc?v8qfasm$uTD7_$(Xf!>*kO;(%x|H9nv>2-gd}YVrqYK|Dc3TlrMf>%Z;a=^6nW zeK_#{u=YKGO;y+bX_L0Gq$EIq0tJEwEwn0H(AH9IDQ!V4CaF#R#~&wVS;sb%1aMMm zeJ${K#Np(tV>*SeZe!p5bKmK2I2DV<7LU=MmT=_F*i|R@urdjkJ-Oc%O$T zhbO{L>WT|{!;XS#Yw3$&OX(l6)%<=OZ&|PKXuwJaggF|dlPBxAQnF-^g)u?uB{>sF z#f>kh8lVfvMFm1&)$IH6il$S7+OYnS;31uXpeWtlmvq89Ik-Cxz(yDfXp$gb2!x-4 z>b|9jwcJ5;-1b`J>XqS)r&nU_i_BYvTbvntXdQ$W4Tu6#aUkYX;f5c`bS6&+_P>)< z{+?Fk<0_g5R3X;yq$-3z6Q~8j65a`24Zpji(4+j&L?GU-WR`ZXb|{Nhm|reEuqKHg zxPzVX-tGQ_-n+P622Ltb3qUVaN+7F_CU=zMQ9!A|CcFn0N8|+rygQ9FbxsI3c%n1I zFON`F;2+^!$Oz=uGJ1gC#7*Mhn`4FBc_OmTE`4+YNuoEop^qnEV-4Am;t){<2=K<|pD9u%oKL@ZfF z{Ys?#T2HYmi)|1NP+0NXWRFd;lfLe9Qg|em9)1GSEPmXegq9`(Z5-4+U|m*BZIqHL zmLu7QX(3mvh*X5++k>)qrChNJ*}UuImS%K7u2>&w*-Q^D)F0WQ@b^;GBc9}PTodD@ zauQT^e?3Isy`ee0taiOlv7gH8BjQ3;4Gv(dZP+gj@x*LcT?^6jP*-7XJz>eWyb$PxO>S z5;*)2z)l#nD@SLUOkusHF_zB^2fCNw2PN0W@d=i zj(V*A7mIbi=%8$t7g^;+Hmp=6B_X~cq!>7Usk6v8TKbnd#k}4oo2iOIQ3YJ_lO!ou zT9-nzrkKHVjR)xoqC%`Z3#^Zc;2TbMlC4w7&OSP6wyvR-omN6x(wy)TP51~+Yr)?% z(`xN-F!F3ME$%J*D6!>zdR7p{g|p^hu}L!(ynqv1$7*u&<4Ek4xN3SsS>T^dtF8cw z17Q-PbYT&7BvNP`!R~2i1OGqWgj@$38EGW}J~##}l93PORi}o&t<@X(5ALtor+#$hS^Dd*<^CEv=S7x;;7VG#`aejT5q_9y9LH`p$3y*{o+5FOR%Iip0mZ1p5SI|LypdRQKddQ zHiN5A9;g2O!~QWmf{)k<5l+2_x#*!&?_q{dtt#UYQktwSxMu}sS8Jm?^GuZ_+3h^Z;;5_>$#GQ9UL;WYPN+tt078$SAn*zhBG)V^3;a8sR83@Jky!0^ic;xEi zk%tO%_3`+cPkpLXj0eOcj6{<*5^}f|CX-tm=+ya6kw@*if@*W> zP&xplm_ZE~Uq1}eNcBtqsSz+)X@8-Z)`aSz+H>ptHy`b}_4a0a)Q05tTuOajyuDns zhrtD+cy#eh-u&SyA zZ~-MdP`DVyTp*h~uTr1ugEcFj0dl6vfJG^?p4n%s zPP7A;zC|_ML7f(?v;sf)2r~yJ)=c@S5bDq?7_fZZB+5hWNi)}B7%G~M26}N}p-*0~ zZ8&7$9zD2G>yZN^n%tvIpE@DlBatLJ<>NkkRVBdVr<_oDbqDXy1LYmXp^rx_9$v9F z+*&OLvX?e@rjW)C1+|U;DfO336=NaXS|VsYKE~Mr0lO4!JoDb+TW{u>Ws_v z5lq$Jhi)5Qe^*xx-ru#mhuz=xqMCoLzrSl8w7=y(wFK5{f?`wk_vb5y*I#M=;Qc*0 z{PEo?su^~Flh^zB9DPw5bdF~E)S5YZk1)1Ccc5@Ne}wOybSi>3X}UCcePv6FI@}-8_E>>F=BOB=vVCIEK!XtUk42 zHXUEXk&oa@2!l&9PlP?cqT}oI+;VucSN;9hw2p)4E{!yp`9@*@{^eqk`ST!h@YPH> zoW5hG5JZ$0c-uts2pBP3i_Q{K3BQGNO=yP3i>3%OMej74z3OGZV+Oa2X1ZK;8iIZv zkb6Wh4FXQB%XR!E6XzNun$Av~Cq*@>kd&ZL!EXsaBliGQcxfizGFXwc zW%JVJK~Z#$Pkr(df>c{J2bq$t<%}0l3of%*`53-r)!fx2H^kSTlymeW-hYx1k&K3` z;%La&OCX;e6CaD3Qei?+%<%DXE_-*erV=Bved^=0&W;bqG94eIfsc|^#cQ)Qq|9D( zcBH(A5NV7B~Z`S6(#o<@vGT32WaC(k2`SN+9*i+MDMSP^zl#D@kl`JeD6 zig1;uPeknb>#YsYyT4sZH6VtS7W@H~BxIO|RJH9EwXubJzwOold2R6d^uhW;=abE+ zuDB?UuR)i%!#6Xgl(Q{yyLp2&kWyBCQ{e7Ibhy*!SE42ZrSzu{u#X&#eGqCOq6(4i z^SiX(4ir&yeCnDD_1>luVbq&MKhGwjw(};`(bmh%AX!9RQA~XumWX;#R70H-4E|;ZU9Z;>O{1_I2JKQD-5J_mju7V9`9x&K?ofr0#5r{tiyh zqrW>SJ&(csFVH&;IVQ#W(A4TxO`_{qA0~+$tOE2jx*F6M1qtvjvsanSlO2;e?+sfNQTavG4|IgAGMPIlXX) z4i}U)HbS!yo`jnP^6HSK>2fT!7*pMOc8z0=JE)kU!S#@dN+WY9QhWAWSNFh2NK8Ov zZWr*S)j0II_>O@KrR?UpqML@fI0${FoR2Hk4LTo3`qU3+=%bZtK3;$Q@JMtPZ#+}a zN9V)CCead6O==QNF&|U*H?(%p{vu#WZ~jpI4K@s~zvaB~Ox@o%9vXIk7m8}m*5CMk zf@evR(p2NQ&1ZBk(Vv%SuX>|j z!vg8SHI#>!`wCMqyw0_0Wom{=5{<$$v|2So$~b#XVda^ z0d0Kh8g#G;dKTw1Dflg;R@a}2`Pm5HGMAn&Xc#Kk1cwc`HoBmF^{cJgsCDb=neh;m z_`E|`{@;U5rqI;gsqtr6_WbE5f-&}y7#4s5CZli3km#EoN8fjTIS_pg(;(=pwrT=c z96|_RNf6Ew5XR*$+GBr3e2oVEPuKAkG+}Gr=<=(}AULot6K3_9avRNrXm%HW6ZcPr z*TQ-+8wSVg%%T){ed@>mJYJW@@jCt&|5m(qV|z;yF!?qSTRvJz#J?2h2V=2|)z1(5 zi@%2Pi1R1Xz>1nXG{*GN?HXgs!zqGN?_`Shc*V?xb~ zX3j5%w|Uh+cs2BctK4w1vw1@-79M}H6KC9TCUmmXitlh1Z>mU-OsDDz_Ru&A{saYm zqx2;BI>7FN8q#*@*j+3Z$wu~*QqNJ%yI)Ay_STbVk~JKtC1MP!VMY|r3JRU&#|?yW zUe(7oLpUTwG*TTu*yjx9ICy*)Dh3TEa*(01!Fg~3_6Df0TE9&sA`Gl1Cz2R*@I&BN zSGxs{PoPG2=Uth~oi{uai`dYd3D*of>Pu{bV~LLG56Uo^UnB2~aV1Nm37yggrMGdz zqc^%V2yR)_3$vI6#c9k^oL7O=e37;whS;N;r^RVZ+mO;GZ^4EL~Hx-pWybtD=e;vUu~V&udvEQF^?7DmB{Ky<5y89V%Bmqz7X8kKhqr1EiE zFB=gaZp&kWsnKO69N&boz*0|(-ocGd#LE+@{V2Tq46FYspQgzZ`%$KFa;2h~;$II^ zp6XXOv7Hc+^3*sf#~;4Zg&F}PO++QFAGSQ|o|~BciA6}R>O+`W7QcA~*LvQ7Gb-~w zs=%wR`<9psbcA)ah~OK_*IVc#J%Cq9AJEEcyko&$h3SPU!rz!yr(U5EPB%MWDIGcn z0j}lzkS&lb(NRgBH~CmAS-%O+G7#@`d1vh4vo0{(4&uiSKF`I`oz>eo-lxKF-4x%b zCf37L{8yU|iK92c89eIWCyUuY76Z&{!>wZA0YBSU*pxmajbLdWD1?>s#ulz^?5$9z z8fQwcZfaz2T{`qkxeCeJG|4m$iE{mMY}>?4SvSm?!VYB8Lv&wcT!Z?-0ipsT(s2pe z-1Gw=5BDYLijwsFllTDxovuy%fai#w&b&4=w&@AHlmgZ>8r~ZGN+#pf2rA(8sMiT; z46aN z2DL(TC_1sFi+X|EbPQ!&QtcR?F#7gP8v3F5v60?#2c@@!{&)cQHPRbNbhv*!DM4@a zhE6WT6jNtjLrJ!?YPDYDJt}Fnw1ar~OT2QmhFU(f=?yt}ZxY|Hn}=~g`Ld{XkmZTb z&yDz)FbsT96eIQ}K@&K|6ci}AW8$DF5%wKtN6GWNrAtQ12%J7MwXtFWN62SAqCF^T zNsWR2{KqxS{_E!nL-c=w=zo)LwA7@LM1wk>EkodO_AHv8=P#ftSo8DWm=XFmMm>3# zh68AJ?5z(Y$*_vw_#!7_rmoXh@PS_Wm-scNlr>PNoeVhkGx^xi%8@#$45NA8BzOK1$R2`O4eQW-s;I))^Zxyv z`tRxQn@+vInzoC0c0X-bqe%`o7o6~`K^}hC{+{Jn)4|)^WDML4-*Eo~1}2Lt5*X;; z|A~Y4|DTc%-yEa&e}H`W-T7j?&n_Rj&ZV3zAJQJez=Qwyd5s6#TS<)2x#+mYnC`2W z+!w&^y)A7J`7kaVUO#N%u#z_8EF9LUFS6#RpKvG{g~Mlb;ZTYThkCju97-gd#ihK} zya5-k9AOSgLNx@GU%ChdR$Toc3GW$Q!i(1#Q&_^QgqPb9kOu`+knlPP6!?$pFX7RV zcYh(Lub&DsrL2C80g3B;;@3F()6b+~(9hZA8}7UM{ZZ6)CmSXA+hSbKMjXT0V*F`p zoP@~jjDdvi$L)P!mhMKJH#7-Z{>>!h!~SAIoqEr+1OSoH1f#qc(W!*D82>C4J@*~K z4*H;-N>I_)rzEK8>a$YO1OZsol}tsWj8J0!p~~d_XiB>I1vj0bo5X%IA^*pBAUOWj z#N8wd^(j8J4Oi84V(2gbms8T&7thyt%SznSqFl!E{#hm4Pec)&TLL_m=lj`5Pc!J7 zhOm!L)!%;h(MppONEG7z{Ub$>VShz(u?0B> zA=3~Mfh?@;Bz;A_u=<1(r=2&m8Wouexi;j~{E0s>MDZ~iL>#*DTlW!tQDm1&sq9IZ zP*~Pa6zQZo;lcB&K|b||_mCmXM7NNO)Trl+YNS~HdYtbdA`_kvvN|?{ z;?B(sUm$gur9YpJPDMKuq;hp zSys0SdPQg!B}NP<9*`itYc5Dl6_M)WhcSJk2PHly9MF zZAko2(IFuT{i{m_%x4#aC-6p^#o$i?I-F`R%@qW>4smng^Ey4mgwUW~{NzAFa3qwH z|BTX7S6IRkA;o<_d@3Q1rBYB@FK1e1hL)_L+{>T~1!d`36_h)F%ix0uk`$D~JSUpR zv>4Y*YF8ur%cpK3pT@^O)p+-_yGfye6GMI?Qw({Nb;u!qj)%OjL2cG7a84L`1y-(s zn(^~_yUZ&WMTb+~6Bl-sMGo9M*A}b>O#Vq;wUo_;X!1`2_t({C=zZM55U*HfJ!wajUI z=WeVr$*aG5As_ye95+Vz9>Oxg$I&I#4!9LLo8j|cd4wDkGwyt>WHTs&Tz>E+uqI(! zHgYQuX7^EeB*JK_H?nw$cutB8|g@lMcfbvfrxi<)yQ^|o8 zAv&QgPKlIL4ne2d<>KTkxQX#iwLT8mzY(Ksyuhcv2->2q43|~b&lWI{j9j3+BCg?s z@lBETIow%uaX=^7lyZ&-I|2xDZ?y7wpOv#7V%eHG>!&p0UCJ_TF^vbI=f%{oe((!@ z;1g1n?W?(a)YUoKV%nevvKbw;m~y1Y_-S8*`jCMt#9~U(kh1-C>g_x(B9#5vkCE#H z_ydoTQ%F<;7oflM?lU1##fhLEPJoVca85|}(9I}k;D~&Qv*n93vDk*N?dcUjDup_9 zL{rFGX0j zd^FG z!?rGRelLQMj#L)sOP%>LM;?XqBmRZ^mK?0K&g)S>$YGKO{%UO^7U{rHq>z@=6t7jj z{}5If#J|myrDyRJ9gCi4BC09<0Oxp6R0Wd-WkI2=9Kc(}Gh4pD9S`b%Ve&_wIgCeH z+5=G4p52h>fpWr=)agN$c>CFp;gv&q98a?H3;d;fy~-2x5Vpz6ll*=+|81w2_mD?a zS=vv}{$lz5o%B#W3vZ|$WjFu*1^=aB9+CSGaM?Y0?vkFsUlL7X8C!AWrR30GZ*Uv_ z`qT@bq@@6t@omfGrIr-;bCu(Q&Z=^iD+|iVa?(>!wgO+cH6nddhzr3E;GwJ9`sx{z z$p`P}I2I*VgK^DnzIGam0ZVYSy$m;IF`(?EPC2fHC|rUKxw@l-`LJ9CgHv2rwj%fp z?x;~{c+wi^YJ*&T3s#Y*IRL0Sv1V%UJy=tSwe`Q51CiZ!;yeU9Jh)lU)=gJeIaJ#( zv8kaKAPuo^VG&o6 zFIVOw_H7z|_#<`n0{-M~=N&bcSo|&w$d!4ZEFdi)*G<8VYNdrI+Pq?J9gbC$7MgJ7 zGJnbQX33RKp+80i1c&0CE!R21V>EYwfv!py?0UK?&;9sgh$VDh!#S_`Hc0uenSaOAP^Y=EGj| zSVBwVc=PK@hxCFlZ;`#_3aK()Yhs?L)PCN)FwG*ch(a9VahbVeDXP9nu9yp1g3Jmu zaaiy-Vr{|nba;E4Ol>t57EGpgq-bHCde{9LtF^aY03HBefEaLl+a!9H?wVq~w==^gLrFIHvvQEAW-bI=F9|tyDVYidjmXRrVIsjH}2~ z>fEw-K?GjTD)W_p$Q9QVwKLE9?C0E>2uA83$)r-$PL)gQSgG&owRck(@>#YW6o&lx zh#lG5mI*EkD&arM7F~+gyDCWPH${Egj0`9XrXciQKzctbAe~ANog07|duDHCtT{X$ zFU(Nxti#eUf_eq6?R7+98V^FxHHGbU>hh~-oGg@5k&9mAVVS&mJ~1)+Rc~D;`^&qk z=c7f$0$kE@BcS>XKJ@()!}m9}-}G*+_R;eg-yK96Vs<<9f9Ynk!(qvAWM*YKtoq9o z-{&|S*$&4Dq}UueB7LO8VP_KH^$orq9MXpQh_7%DKoz>-u+RY^Etg7 zDz}Za=y;TSX+`oX572t$gQB`leTN-xI*A$<&y*Lrm5sDk$d$#)1GGHJb+eUwdC^!j ziy7KE@@lwwUjg>iRRg^-ax9y#t-S$yJVIWD(hD7XqJy=t`c_epu9qJqy zKI5fa;a0y3&nuK3&IN~$+*v4B(SUJF49)3J}@0o_lXbtD|N+gHC_2kR= zEq5=YnMx9Auu^p=p3}tywFu1Ezx;882QeXNDD~&F5Yrt z%i)&yPvf{tc>&uOtUcya0X!!A>aE2^_zG8Gdee!3T;Z~%(_d6eu?$gAB6*4kR<=ej zhAtGp5Q;KL5xIoyum&n3vG&7XH&Z_fYw{RSAdw_iuKbn+HBC6-oq$YjW;w)G@>>FLt;CHn@LC_VuOy1B7pE}C$)-u$LEw06v8`aAkP#x+ z<-P&BUKg=kBIF1mZ1q;VtdaHB!aamf@@TBB)&_ClCE=R%C3a2PPe+B~X_5K4Z@`ad zXtK8Ac8aBuS6u%UV#TdSjEQ6yF(fa-eh*Qg z2bRRp9B*fu-cIOdLSGo?8lg){-&0

9q^0& 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�v84zg~zu&kQ3}5oQPSR5L^;$39b(wiWOb}N$(1M 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 z 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 Q);^4@xszbMn4aVQ4_fB7S^xk5 literal 0 HcmV?d00001 diff --git a/CODE-mp/Debug/vssver.scc b/CODE-mp/Debug/vssver.scc new file mode 100644 index 0000000000000000000000000000000000000000..90c96a2c24b3954888b4b34c822d0d569eb1a870 GIT binary patch literal 96 zcmXpJVq~y1nfcuPzlLj9*7D~uCC~M@nG{TR=VSl_dmyc{@5CXi)iRchKoKV(KdqH5 V^jn^$IEe27mCuMN2lGAAsurfaces )) +size = 264: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2624 (sizeof( skin_t )) +size = 12968: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3787 (size * sizeof(char *)) +size = 393864: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3744 (sum + numShaders*2) +size = 1252520: c:\projects\jk2\code-mp\renderer\tr_init.cpp, line: 1053 (sizeof( *backEndData[0] ) + sizeof(srfPoly_t) * max_polys + sizeof(polyVert_t) * max_polyverts) +1806304 Hunk memory +10 hunk blocks +]\logfile 0 +]\hunksmalllog + +================ +Hunk Small log +================ +size = 6032: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2699 (size) +size = 54120: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2694 (sizeof( stages[i] )) +size = 86184: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2650 (sizeof( shader_t )) +size = 72: c:\projects\jk2\code-mp\renderer\tr_model.cpp, line: 621 (sizeof( modelHash_t )) +size = 272: c:\projects\jk2\code-mp\renderer\tr_model.cpp, line: 578 (sizeof( *tr.models[tr.numModels] )) +size = 8: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2627 (sizeof( *skin->surfaces )) +size = 264: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2624 (sizeof( skin_t )) +size = 12968: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3787 (size * sizeof(char *)) +size = 393864: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3744 (sum + numShaders*2) +size = 1252520: c:\projects\jk2\code-mp\renderer\tr_init.cpp, line: 1053 (sizeof( *backEndData[0] ) + sizeof(srfPoly_t) * max_polys + sizeof(polyVert_t) * max_polyverts) +1806304 Hunk memory +10 hunk blocks +]\logfile 2 +]\hunksmalllog + +================ +Hunk Small log +================ +size = 6032: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2699 (size) +size = 54120: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2694 (sizeof( stages[i] )) +size = 86184: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2650 (sizeof( shader_t )) +size = 72: c:\projects\jk2\code-mp\renderer\tr_model.cpp, line: 621 (sizeof( modelHash_t )) +size = 272: c:\projects\jk2\code-mp\renderer\tr_model.cpp, line: 578 (sizeof( *tr.models[tr.numModels] )) +size = 8: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2627 (sizeof( *skin->surfaces )) +size = 264: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2624 (sizeof( skin_t )) +size = 12968: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3787 (size * sizeof(char *)) +size = 393864: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3744 (sum + numShaders*2) +size = 1252520: c:\projects\jk2\code-mp\renderer\tr_init.cpp, line: 1053 (sizeof( *backEndData[0] ) + sizeof(srfPoly_t) * max_polys + sizeof(polyVert_t) * max_polyverts) +1806304 Hunk memory +10 hunk blocks +]\dedicated 1 +dedicated will be changed upon restarting. +----- CL_Shutdown ----- +RE_Shutdown( 0 ) +RE_Shutdown( 1 ) +Shutting down OpenGL subsystem +...wglMakeCurrent( NULL, NULL ): success +...deleting GL context: success +...releasing DC: success +...destroying window +...shutting down QGL +...unloading OpenGL DLL +----------------------- +Hitch warning: 1943 msec frame time + +================ +Hunk Small log +================ +size = 6032: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2699 (size) +size = 54120: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2694 (sizeof( stages[i] )) +size = 86184: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2650 (sizeof( shader_t )) +size = 72: c:\projects\jk2\code-mp\renderer\tr_model.cpp, line: 621 (sizeof( modelHash_t )) +size = 272: c:\projects\jk2\code-mp\renderer\tr_model.cpp, line: 578 (sizeof( *tr.models[tr.numModels] )) +size = 8: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2627 (sizeof( *skin->surfaces )) +size = 264: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2624 (sizeof( skin_t )) +size = 12968: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3787 (size * sizeof(char *)) +size = 393864: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3744 (sum + numShaders*2) +size = 1252520: c:\projects\jk2\code-mp\renderer\tr_init.cpp, line: 1053 (sizeof( *backEndData[0] ) + sizeof(srfPoly_t) * max_polys + sizeof(polyVert_t) * max_polyverts) +1806304 Hunk memory +10 hunk blocks +Hitch warning: 1869 msec frame time +dedicated will be changed upon restarting. +----- Client Initialization ----- +Cmd_AddCommand: toggleconsole already defined +Cmd_AddCommand: messagemode already defined +Cmd_AddCommand: messagemode2 already defined +Cmd_AddCommand: messagemode3 already defined +Cmd_AddCommand: messagemode4 already defined +Cmd_AddCommand: clear already defined +Cmd_AddCommand: condump already defined +Cmd_AddCommand: centerview already defined +Cmd_AddCommand: +taunt already defined +Cmd_AddCommand: -taunt already defined +Cmd_AddCommand: +moveup already defined +Cmd_AddCommand: -moveup already defined +Cmd_AddCommand: +movedown already defined +Cmd_AddCommand: -movedown already defined +Cmd_AddCommand: +left already defined +Cmd_AddCommand: -left already defined +Cmd_AddCommand: +right already defined +Cmd_AddCommand: -right already defined +Cmd_AddCommand: +forward already defined +Cmd_AddCommand: -forward already defined +Cmd_AddCommand: +back already defined +Cmd_AddCommand: -back already defined +Cmd_AddCommand: +lookup already defined +Cmd_AddCommand: -lookup already defined +Cmd_AddCommand: +lookdown already defined +Cmd_AddCommand: -lookdown already defined +Cmd_AddCommand: +strafe already defined +Cmd_AddCommand: -strafe already defined +Cmd_AddCommand: +moveleft already defined +Cmd_AddCommand: -moveleft already defined +Cmd_AddCommand: +moveright already defined +Cmd_AddCommand: -moveright already defined +Cmd_AddCommand: +speed already defined +Cmd_AddCommand: -speed already defined +Cmd_AddCommand: +attack already defined +Cmd_AddCommand: -attack already defined +Cmd_AddCommand: +use already defined +Cmd_AddCommand: -use already defined +Cmd_AddCommand: +force_grip already defined +Cmd_AddCommand: -force_grip already defined +Cmd_AddCommand: +altattack already defined +Cmd_AddCommand: -altattack already defined +Cmd_AddCommand: +useforce already defined +Cmd_AddCommand: -useforce already defined +Cmd_AddCommand: +force_lightning already defined +Cmd_AddCommand: -force_lightning already defined +Cmd_AddCommand: +force_drain already defined +Cmd_AddCommand: -force_drain already defined +Cmd_AddCommand: +button0 already defined +Cmd_AddCommand: -button0 already defined +Cmd_AddCommand: +button1 already defined +Cmd_AddCommand: -button1 already defined +Cmd_AddCommand: +button2 already defined +Cmd_AddCommand: -button2 already defined +Cmd_AddCommand: +button3 already defined +Cmd_AddCommand: -button3 already defined +Cmd_AddCommand: +button4 already defined +Cmd_AddCommand: -button4 already defined +Cmd_AddCommand: +button5 already defined +Cmd_AddCommand: -button5 already defined +Cmd_AddCommand: +button6 already defined +Cmd_AddCommand: -button6 already defined +Cmd_AddCommand: +button7 already defined +Cmd_AddCommand: -button7 already defined +Cmd_AddCommand: +button8 already defined +Cmd_AddCommand: -button8 already defined +Cmd_AddCommand: +button9 already defined +Cmd_AddCommand: -button9 already defined +Cmd_AddCommand: +button10 already defined +Cmd_AddCommand: -button10 already defined +Cmd_AddCommand: +button11 already defined +Cmd_AddCommand: -button11 already defined +Cmd_AddCommand: +button12 already defined +Cmd_AddCommand: -button12 already defined +Cmd_AddCommand: +button13 already defined +Cmd_AddCommand: -button13 already defined +Cmd_AddCommand: +button14 already defined +Cmd_AddCommand: -button14 already defined +Cmd_AddCommand: +mlook already defined +Cmd_AddCommand: -mlook already defined +Cmd_AddCommand: sv_saberswitch already defined +Cmd_AddCommand: engage_duel already defined +Cmd_AddCommand: force_heal already defined +Cmd_AddCommand: force_speed already defined +Cmd_AddCommand: force_pull already defined +Cmd_AddCommand: force_distract already defined +Cmd_AddCommand: force_rage already defined +Cmd_AddCommand: force_protect already defined +Cmd_AddCommand: force_absorb already defined +Cmd_AddCommand: force_healother already defined +Cmd_AddCommand: force_forcepowerother already defined +Cmd_AddCommand: force_seeing already defined +Cmd_AddCommand: use_seeker already defined +Cmd_AddCommand: use_field already defined +Cmd_AddCommand: use_bacta already defined +Cmd_AddCommand: use_electrobinoculars already defined +Cmd_AddCommand: zoom already defined +Cmd_AddCommand: use_sentry already defined +Cmd_AddCommand: saberAttackCycle already defined +Cmd_AddCommand: force_throw already defined +Cmd_AddCommand: clientinfo already defined +Cmd_AddCommand: reconnect already defined +Cmd_AddCommand: fs_openedList already defined +Cmd_AddCommand: fs_referencedList already defined +----- Initializing Renderer ---- +------------------------------- +----- Client Initialization Complete ----- +----- R_Init ----- +Cmd_AddCommand: screenshot_tga already defined +Initializing OpenGL subsystem +...initializing QGL +...calling LoadLibrary( 'C:\WINDOWS\System32\opengl32.dll' ): succeeded +...setting mode 3: 640 480 W +...created window@0,0 (646x512) +Initializing OpenGL driver +...getting DC: succeeded +...GLW_ChoosePFD( 32, 24, 8 ) +...50 PFDs found +...hardware acceleration found +...PIXELFORMAT 8 selected +...creating GL context: succeeded +...making context current: succeeded +Initializing OpenGL extensions +...GL_S3_s3tc available +...GL_EXT_texture_compression_s3tc available +...no tc preference specified +.....using GL_EXT_texture_compression_s3tc +...using GL_EXT_texture_env_add +...GL_EXT_texture_filter_anisotropic available +...using GL_EXT_texture_filter_anisotropic +...Using GL_EXT_texture_edge_clamp +...using WGL_EXT_swap_control +...using GL_ARB_multitexture +...using GL_EXT_compiled_vertex_array +...using GL_EXT_point_parameters + +GL_VENDOR: NVIDIA Corporation +GL_RENDERER: GeForce2 MX/AGP/SSE2 +GL_VERSION: 1.3.0 +GL_EXTENSIONS: GL_ARB_imaging GL_ARB_multitexture GL_ARB_texture_compression GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_texture_env_combine GL_ARB_texture_env_dot3 GL_ARB_transpose_matrix GL_S3_s3tc GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_compiled_vertex_array GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_packed_pixels GL_EXT_paletted_texture GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_shared_texture_palette GL_EXT_stencil_wrap GL_EXT_texture_compression_s3tc GL_EXT_texture_edge_clamp GL_EXT_texture_env_add GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_EXT_texture_cube_map GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod GL_EXT_texture_lod_bias GL_EXT_texture_object GL_EXT_vertex_array GL_EXT_vertex_weighting GL_IBM_texture_mirrored_repeat GL_KTX_buffer_region GL_NV_blend_square GL_NV_evaluators GL_NV_fence GL_NV_fog_distance GL_NV_light_max_exponent GL_NV_packed_depth_stencil GL_NV_register_combiners GL_NV_texgen_emboss GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_NV_texture_rectangle GL_NV_vertex_array_range GL_NV_vertex_array_range2 GL_NV_vertex_program GL_SGIS_generate_mipmap GL_SGIS_multitexture GL_SGIS_texture_lod GL_WIN_swap_hint WGL_EXT_swap_control +GL_MAX_TEXTURE_SIZE: 2048 +GL_MAX_ACTIVE_TEXTURES_ARB: 2 + +PIXELFORMAT: color(32-bits) Z(24-bit) stencil(8-bits) +MODE: 3, 640 x 480 windowed hz:60 +GAMMA: hardware w/ 0 overbright bits +CPU: Intel Pentium IV +rendering primitives: single glDrawElements +texturemode: GL_LINEAR_MIPMAP_LINEAR +picmip: 0 +texture bits: 0 +lightmap texture bits: 0 +multitexture: enabled +compiled vertex arrays: enabled +texenv add: enabled +compressed textures: enabled +compressed lightmaps: disabled +texture compression method: GL_EXT_texture_compression_s3tc +anisotropic filtering: enabled +Initializing Shaders +...loading 'shaders/zoom.shader' +...loading 'shaders/yavin.shader' +...loading 'shaders/ui.shader' +...loading 'shaders/test.shader' +...loading 'shaders/system.shader' +...loading 'shaders/sprites.shader' +...loading 'shaders/skies.shader' +...loading 'shaders/scavenger.shader' +...loading 'shaders/sabers.shader' +...loading 'shaders/players.shader' +...loading 'shaders/nar_shaddaa.shader' +...loading 'shaders/mp.shader' +...loading 'shaders/models.shader' +...loading 'shaders/metashader.shader' +...loading 'shaders/marks.shader' +...loading 'shaders/jeffd_test.shader' +...loading 'shaders/items.shader' +...loading 'shaders/imperial.shader' +...loading 'shaders/gfx.shader' +...loading 'shaders/fogs.shader' +...loading 'shaders/flares.shader' +...loading 'shaders/explosions.shader' +...loading 'shaders/effects.shader' +...loading 'shaders/doomgiver.shader' +...loading 'shaders/decals.shader' +...loading 'shaders/common.shader' +...loading 'shaders/cinematics.shader' +...loading 'shaders/bespin.shader' +----- finished R_Init ----- + +------- sound initialization ------- +Cmd_AddCommand: soundstop already defined +Initializing DirectSound +locked hardware. ok +------------------------------------ +----- Sound Info ----- +sound system is muted + 1 stereo +32768 samples + 16 samplebits + 1 submission_chunk +22050 speed +0x110d86e0 dma buffer +No background file. + +0.01MB audio data: ( 0.01MB WAV/MP3 ) + ( 0.00MB Music ) +0.01MB in sfx_t alloc data (WAV/MP3) loaded this level +---------------------- +Loading dll file ui. +Parsing menu file:ui/jk2mp/main.menu +Parsing menu file:ui/jk2mp/joinserver.menu +Parsing menu file:ui/jk2mp/player.menu +Parsing menu file:ui/jk2mp/createserver.menu +Parsing menu file:ui/jk2mp/connect.menu +Parsing menu file:ui/jk2mp/rules.menu +Parsing menu file:ui/jk2mp/rules_games.menu +Parsing menu file:ui/jk2mp/rules_force.menu +Parsing menu file:ui/jk2mp/rules_weapons.menu +Parsing menu file:ui/jk2mp/rules_items.menu +Parsing menu file:ui/jk2mp/controls.menu +Parsing menu file:ui/jk2mp/setup.menu +Parsing menu file:ui/jk2mp/demo.menu +Parsing menu file:ui/jk2mp/password.menu +Parsing menu file:ui/jk2mp/quit.menu +Parsing menu file:ui/jk2mp/error.menu +Parsing menu file:ui/jk2mp/serverinfo.menu +Parsing menu file:ui/jk2mp/findplayer.menu +Parsing menu file:ui/jk2mp/createfavorite.menu +Parsing menu file:ui/jk2mp/multiplayer.menu +Parsing menu file:ui/jk2mp/cdkey.menu +Parsing menu file:ui/jk2mp/advancedcreateserver.menu +Parsing menu file:ui/jk2mp/credits.menu +Parsing menu file:ui/jk2mp/vid_warning.menu +Parsing menu file:ui/jk2mp/videodriver.menu +UI menu load time = 2031 milli seconds +28 bots parsed + +================ +Hunk Small log +================ +size = 12064: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2699 (size) +size = 108240: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2694 (sizeof( stages[i] )) +size = 172368: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 2650 (sizeof( shader_t )) +size = 144: c:\projects\jk2\code-mp\renderer\tr_model.cpp, line: 621 (sizeof( modelHash_t )) +size = 544: c:\projects\jk2\code-mp\renderer\tr_model.cpp, line: 578 (sizeof( *tr.models[tr.numModels] )) +size = 16: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2627 (sizeof( *skin->surfaces )) +size = 528: c:\projects\jk2\code-mp\renderer\tr_image.cpp, line: 2624 (sizeof( skin_t )) +size = 25936: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3787 (size * sizeof(char *)) +size = 787728: c:\projects\jk2\code-mp\renderer\tr_shader.cpp, line: 3744 (sum + numShaders*2) +size = 2505040: c:\projects\jk2\code-mp\renderer\tr_init.cpp, line: 1053 (sizeof( *backEndData[0] ) + sizeof(srfPoly_t) * max_polys + sizeof(polyVert_t) * max_polyverts) +3612608 Hunk memory +10 hunk blocks +----- CL_Shutdown ----- +RE_Shutdown( 0 ) +RE_Shutdown( 1 ) +Shutting down OpenGL subsystem +...wglMakeCurrent( NULL, NULL ): success +...deleting GL context: success +...releasing DC: success +...destroying window +...shutting down QGL +...unloading OpenGL DLL +----------------------- diff --git a/CODE-mp/base/screenshots/shot0000.jpg b/CODE-mp/base/screenshots/shot0000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b167ea0d3248d4c37838f87714012546adee47ab GIT binary patch literal 75953 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 AQ~&?~ literal 0 HcmV?d00001 diff --git a/CODE-mp/base/server.cfg b/CODE-mp/base/server.cfg new file mode 100644 index 0000000..4268a7f --- /dev/null +++ b/CODE-mp/base/server.cfg @@ -0,0 +1,17 @@ +// Server Config +seta sv_hostname "jkii-dedicated v1.01" +seta sv_maxclients 8 +seta g_motd "report problems to drews@engr.wisc.edu" +sv_pure 0 +sv_maxRate 10000 +seta g_inactivity 0 +seta rconpassword "raven2" +g_allowvote 1 + + +set d1 "set timelimit 20; set capturelimit 20; map ffa_deathstar; set nextmap vstr d2" +set d2 "set timelimit 20; set capturelimit 20; map ffa_imperial; set nextmap vstr d3" +set d3 "map ffa_bespin; set nextmap vstr d4" +set d4 "map ffa_raven; set nextmap vstr d5" +set d5 "map ffa_yavin; set nextmap vstr d1" +vstr d1 diff --git a/CODE-mp/base/vm/cgame.map b/CODE-mp/base/vm/cgame.map new file mode 100644 index 0000000..78ad754 --- /dev/null +++ b/CODE-mp/base/vm/cgame.map @@ -0,0 +1,1597 @@ +0 fffffed3 trap_CG_RegisterSharedMemory +0 fffffed4 trap_G2API_SetNewOrigin +0 fffffed5 trap_G2API_SetSurfaceOnOff +0 fffffed6 trap_G2API_SetRootSurface +0 fffffed7 trap_G2API_SetBoltInfo +0 fffffed8 trap_G2API_AddBolt +0 fffffed9 trap_G2API_RemoveGhoul2Model +0 fffffeda trap_G2API_HasGhoul2ModelOnIndex +0 fffffedb trap_G2API_DuplicateGhoul2Instance +0 fffffedc trap_G2API_CopySpecificGhoul2Model +0 fffffedd trap_G2API_CopyGhoul2Instance +0 fffffede trap_G2API_GetGLAName +0 fffffedf trap_G2API_SetBoneAnim +0 fffffee0 trap_G2API_SetBoneAngles +0 fffffee1 trap_G2API_CleanGhoul2Models +0 fffffee2 trap_G2API_InitGhoul2Model +0 fffffee3 trap_G2API_GetBoltMatrix_NoReconstruct +0 fffffee4 trap_G2API_GetBoltMatrix +0 fffffee5 trap_G2API_GiveMeVectorFromMatrix +0 fffffee6 trap_G2_HaveWeGhoul2Models +0 fffffee7 trap_G2_SetGhoul2ModelIndexes +0 fffffee8 trap_G2_ListModelBones +0 fffffee9 trap_G2_ListModelSurfaces +0 fffffeea trap_ROFF_Purge_Ent +0 fffffeeb trap_ROFF_Play +0 fffffeec trap_ROFF_Cache +0 fffffeed trap_ROFF_UpdateEntities +0 fffffeee trap_ROFF_Clean +0 fffffeef trap_SP_Register +0 fffffef0 trap_SP_GetStringTextString +0 fffffef1 trap_SP_Print +0 fffffef2 trap_FX_AddSprite +0 fffffef3 trap_FX_AddPrimitive +0 fffffef4 trap_FX_AddBezier +0 fffffef5 trap_FX_AddPoly +0 fffffef6 trap_FX_AdjustTime +0 fffffef7 trap_FX_FreeSystem +0 fffffef8 trap_FX_InitSystem +0 fffffef9 trap_FX_AddScheduledEffects +0 fffffefa trap_FX_PlayBoltedEffectID +0 fffffefb trap_FX_PlayEntityEffectID +0 fffffefc trap_FX_PlayEffectID +0 fffffefd trap_FX_PlaySimpleEffectID +0 fffffefe trap_FX_PlayEntityEffect +0 fffffeff trap_FX_PlayEffect +0 ffffff00 trap_FX_PlaySimpleEffect +0 ffffff01 trap_FX_RegisterEffect +0 ffffff02 trap_R_inPVS +0 ffffff03 trap_GetEntityToken +0 ffffff04 trap_CIN_SetExtents +0 ffffff05 trap_CIN_DrawCinematic +0 ffffff06 trap_CIN_RunCinematic +0 ffffff07 trap_CIN_StopCinematic +0 ffffff08 trap_CIN_PlayCinematic +0 ffffff09 trap_SnapVector +0 ffffff0a trap_RealTime +0 ffffff0b trap_S_StopBackgroundTrack +0 ffffff0c trap_PC_RemoveAllGlobalDefines +0 ffffff0d trap_PC_LoadGlobalDefines +0 ffffff0e trap_PC_SourceFileAndLine +0 ffffff0f trap_PC_ReadToken +0 ffffff10 trap_PC_FreeSource +0 ffffff11 trap_PC_LoadSource +0 ffffff12 trap_PC_AddGlobalDefine +0 ffffff13 trap_Key_GetKey +0 ffffff14 trap_Key_SetCatcher +0 ffffff15 trap_Key_GetCatcher +0 ffffff16 trap_Key_IsDown +0 ffffff17 trap_MemoryRemaining +0 ffffff1a trap_OpenUIMenu +0 ffffff1b trap_SetClientTurnExtent +0 ffffff1c trap_SetClientForceAngle +0 ffffff1d trap_SetUserCmdValue +0 ffffff1e trap_GetUserCmd +0 ffffff1f trap_GetCurrentCmdNumber +0 ffffff20 trap_GetServerCommand +0 ffffff21 trap_GetSnapshot +0 ffffff22 trap_GetCurrentSnapshotNumber +0 ffffff23 trap_GetGameState +0 ffffff24 trap_GetGlconfig +0 ffffff25 trap_FX_AddLine +0 ffffff26 trap_R_GetBModelVerts +0 ffffff27 trap_R_SetLightStyle +0 ffffff28 trap_R_GetLightStyle +0 ffffff29 trap_R_RemapShader +0 ffffff2a trap_R_DrawRotatePic2 +0 ffffff2b trap_R_DrawRotatePic +0 ffffff2c trap_R_LerpTag +0 ffffff2d trap_R_ModelBounds +0 ffffff2e trap_R_DrawStretchPic +0 ffffff2f trap_R_SetColor +0 ffffff30 trap_R_RenderScene +0 ffffff31 trap_R_AddAdditiveLightToScene +0 ffffff32 trap_R_AddLightToScene +0 ffffff33 trap_R_LightForPoint +0 ffffff34 trap_R_AddPolysToScene +0 ffffff35 trap_R_AddPolyToScene +0 ffffff36 trap_R_AddRefEntityToScene +0 ffffff37 trap_R_ClearScene +0 ffffff8e asin +0 ffffff8f acos +0 ffffff90 ceil +0 ffffff91 floor +0 ffffff92 perpendicularvector +0 ffffff93 anglevectors +0 ffffff94 matrixmultiply +0 ffffff95 sqrt +0 ffffff96 atan2 +0 ffffff97 cos +0 ffffff98 sin +0 ffffff99 strncpy +0 ffffff9a memcpy +0 ffffff9b memset +0 ffffffcb trap_AnyLanguage_ReadCharFromString +0 ffffffcc trap_R_Font_DrawString +0 ffffffcd trap_R_Font_HeightPixels +0 ffffffce trap_R_Font_StrLenChars +0 ffffffcf trap_R_Font_StrLenPixels +0 ffffffd0 trap_R_RegisterFont +0 ffffffd1 trap_R_RegisterShaderNoMip +0 ffffffd2 trap_R_RegisterShader +0 ffffffd3 trap_R_RegisterSkin +0 ffffffd4 trap_R_RegisterModel +0 ffffffd5 trap_R_LoadWorldMap +0 ffffffd6 trap_S_StartBackgroundTrack +0 ffffffd7 trap_S_RegisterSound +0 ffffffd8 trap_S_Respatialize +0 ffffffd9 trap_S_StopLoopingSound +0 ffffffda trap_S_AddRealLoopingSound +0 ffffffdb trap_S_UpdateEntityPosition +0 ffffffdc trap_S_AddLoopingSound +0 ffffffdd trap_S_ClearLoopingSounds +0 ffffffde trap_S_StartLocalSound +0 ffffffdf trap_S_StartSound +0 ffffffe0 trap_S_MuteSound +0 ffffffe1 trap_CM_MarkFragments +0 ffffffe2 trap_CM_TransformedCapsuleTrace +0 ffffffe3 trap_CM_TransformedBoxTrace +0 ffffffe4 trap_CM_CapsuleTrace +0 ffffffe5 trap_CM_BoxTrace +0 ffffffe6 trap_CM_TransformedPointContents +0 ffffffe7 trap_CM_PointContents +0 ffffffe8 trap_CM_TempCapsuleModel +0 ffffffe9 trap_CM_TempBoxModel +0 ffffffea trap_CM_InlineModel +0 ffffffeb trap_CM_NumInlineModels +0 ffffffec trap_CM_LoadMap +0 ffffffed trap_UpdateScreen +0 ffffffee trap_SendClientCommand +0 ffffffef trap_RemoveCommand +0 fffffff0 trap_AddCommand +0 fffffff1 trap_SendConsoleCommand +0 fffffff2 trap_FS_FCloseFile +0 fffffff3 trap_FS_Write +0 fffffff4 trap_FS_Read +0 fffffff5 trap_FS_FOpenFile +0 fffffff6 trap_Args +0 fffffff7 trap_Argv +0 fffffff8 trap_Argc +0 fffffff9 trap_Cvar_VariableStringBuffer +0 fffffffa trap_Cvar_Set +0 fffffffb trap_Cvar_Update +0 fffffffc trap_Cvar_Register +0 fffffffd trap_Milliseconds +0 fffffffe trap_Error +0 ffffffff trap_Print +0 0 vmMain +0 122 C_PointContents +0 138 C_GetLerpOrigin +0 14a C_GetLerpAngles +0 15c C_GetModelScale +0 16e C_Trace +0 19a C_GetBoltPos +0 20d C_ImpactMark +0 24c CG_RegisterCvars +0 332 CG_ForceModelChange +0 368 CG_UpdateCvars +0 3bb CG_CrosshairPlayer +0 3d4 CG_LastAttacker +0 3e5 CG_Printf +0 3fe CG_Error +0 417 Com_Error +0 432 Com_Printf +0 44d CG_Argv +0 45c CG_RegisterItemSounds +0 4f5 CG_RegisterSounds +0 a8e CG_RegisterEffects +0 abc CG_RegisterGraphics +0 1137 CG_GetStripEdString +0 1167 CG_BuildSpectatorString +0 11bb CG_RegisterClients +0 1206 CG_ConfigString +0 1227 CG_StartMusic +0 126a CG_GetMenuBuffer +0 12ce CG_Asset_Parse +0 156d CG_ParseMenu +0 15d8 CG_Load_Menu +0 1628 CG_OwnerDrawHandleKey +0 162d CG_FeederCount +0 1689 CG_SetScoreSelection +0 1720 CG_InfoFromScoreIndex +0 1773 CG_FeederItemText +0 18e3 CG_FeederItemImage +0 18e8 CG_FeederSelection +0 1933 CG_Cvar_Get +0 1952 CG_Text_PaintWithCursor +0 1976 CG_OwnerDrawWidth +0 1a07 CG_PlayCinematic +0 1a26 CG_StopCinematic +0 1a2f CG_DrawCinematic +0 1a4e CG_RunCinematicFrame +0 1a57 CG_LoadHudMenu +0 1af2 CG_AssetCache +0 1b9f CG_Init_CG +0 1bab CG_Init_CGents +0 1bb7 CG_InitItems +0 1bc3 CG_Init +0 1f8c CG_Shutdown +0 1f98 CG_NextForcePower_f +0 1fdc CG_PrevForcePower_f +0 2020 CG_NextInventory_f +0 206a CG_PrevInventory_f +0 20b4 CG_TargetCommand_f +0 20e6 CG_SizeUp_f +0 20fc CG_SizeDown_f +0 2112 CG_Viewpos_f +0 212c CG_ScoresDown_f +0 2151 CG_ScoresUp_f +0 215f CG_scrollScoresDown_f +0 2188 CG_scrollScoresUp_f +0 21b1 CG_spWin_f +0 21e6 CG_spLose_f +0 221b CG_TellTarget_f +0 2246 CG_TellAttacker_f +0 2271 CG_VoiceTellTarget_f +0 229c CG_VoiceTellAttacker_f +0 22c7 CG_NextTeamMember_f +0 22cd CG_PrevTeamMember_f +0 22d3 CG_NextOrder_f +0 2346 CG_ConfirmOrder_f +0 2376 CG_DenyOrder_f +0 2397 CG_TaskOffense_f +0 23ce CG_TaskDefense_f +0 23ed CG_TaskPatrol_f +0 240c CG_TaskCamp_f +0 242b CG_TaskFollow_f +0 244a CG_TaskRetrieve_f +0 2469 CG_TaskEscort_f +0 2488 CG_TaskOwnFlag_f +0 2499 CG_TauntKillInsult_f +0 24a1 CG_TauntPraise_f +0 24a9 CG_TauntTaunt_f +0 24b1 CG_TauntDeathInsult_f +0 24b9 CG_TauntGauntlet_f +0 24c1 CG_TaskSuicide_f +0 24e3 CG_StartOrbit_f +0 252b CG_ConsoleCommand +0 2569 CG_InitConsoleCommands +0 268f MenuFontToHandle +0 26b6 CG_Text_Width +0 26d4 CG_Text_Height +0 26ef CG_Text_Paint +0 275f CG_DrawZoomMask +0 2ab7 CG_Draw3DModel +0 2b25 CG_DrawHead +0 2b5e CG_DrawFlagModel +0 2c43 DrawAmmo +0 2c4c CG_DrawHUDLeftFrame1 +0 2c6c CG_DrawHUDLeftFrame2 +0 2c8c DrawHealthArmor +0 2ef2 CG_DrawHealth +0 2f99 CG_DrawArmor +0 30e0 CG_DrawHUDRightFrame1 +0 3100 CG_DrawHUDRightFrame2 +0 3120 CG_DrawAmmo +0 3286 CG_DrawForcePower +0 3322 CG_DrawHUD +0 35af ForcePower_Valid +0 35dc CG_DrawForceSelect +0 3827 CG_DrawInvenSelect +0 3ac2 CG_DrawStats +0 3ad6 CG_DrawTeamBackground +0 3b13 CG_DrawMiniScoreboard +0 3ba0 CG_DrawEnemyInfo +0 3d3e CG_DrawSnapshot +0 3d7e CG_DrawFPS +0 3e0b CG_DrawTimer +0 3e73 CG_DrawTeamOverlay +0 41b2 CG_DrawPowerupIcons +0 4296 CG_DrawUpperRight +0 4302 CG_AddLagometerFrameInfo +0 4322 CG_AddLagometerSnapshotInfo +0 4365 CG_DrawDisconnect +0 443e CG_DrawLagometer +0 464d CG_CenterPrint +0 468b CG_DrawCenterString +0 476d CG_DrawCrosshair +0 496d CG_WorldCoordToScreenCoordFloat +0 4a16 CG_WorldCoordToScreenCoord +0 4a37 CG_SaberClashFlare +0 4b09 CG_DrawHolocronIcons +0 4b93 CG_IsDurationPower +0 4bbc CG_DrawActivePowers +0 4c82 CG_DrawRocketLocking +0 4e3a CG_ScanForCrosshairEntity +0 4f89 CG_DrawCrosshairNames +0 5032 CG_DrawSpectator +0 51a1 CG_DrawVote +0 5212 CG_DrawTeamVote +0 5362 CG_DrawScoreboard +0 536c CG_DrawIntermission +0 537b CG_DrawFollow +0 53fd CG_DrawAmmoWarning +0 5400 CG_DrawWarmup +0 5604 CG_DrawTimedMenus +0 5625 CG_DrawFlagStatus +0 56f7 CG_Draw2D +0 5d04 CG_DrawTourneyScoreboard +0 5d07 CG_DrawActive +0 5d92 CG_DrawRect +0 5dc4 CG_GetColorForHealth +0 5e62 CG_DrawSides +0 5eb8 CG_DrawTopBottom +0 5f0e CG_FillRect2 +0 5f3d CG_FillRect +0 5f6c CG_DrawPic +0 5f93 CG_DrawRotatePic +0 5fbd CG_DrawRotatePic2 +0 5fe7 CG_DrawChar +0 604e CG_DrawStringExt +0 615a CG_DrawBigString +0 6192 CG_DrawBigStringColor +0 61b8 CG_DrawSmallString +0 61ec CG_DrawSmallStringColor +0 620d CG_DrawStrlen +0 6255 CG_TileClearBox +0 629c CG_TileClear +0 6333 CG_FadeColor +0 6377 CG_ColorForGivenHealth +0 63c6 CG_ColorForHealth +0 642b CG_DrawNumField +0 665b UI_DrawProportionalString +0 66e4 UI_DrawScaledProportionalString +0 675b CG_BubbleTrail +0 68f9 CG_SmokePuff +0 6a5c CG_TestLine +0 6b2d CG_ThrowChunk +0 6be0 CG_DoGlassQuad +0 6d4d CG_CalcBiLerp +0 734a CG_CalcHeightWidth +0 74f7 CG_InitGlass +0 754e Vector2Set +0 755d CG_DoGlass +0 77d9 CG_GlassShatter +0 7811 CG_GlassShatter_Old +0 79a7 CG_CreateDebris +0 7bc4 CG_ScorePlum +0 7c8c CG_ExplosionEffects +0 7cd2 CG_MakeExplosion +0 7e91 CG_SurfaceExplosion +0 8136 CG_Bleed +0 819d CG_LaunchGib +0 821c CG_GibPlayer +0 84ab CG_LaunchExplode +0 852a CG_BigExplode +0 8684 CG_PositionEntityOnTag +0 8758 CG_PositionRotatedEntityOnTag +0 8829 CG_SetEntitySoundPosition +0 8886 CG_EntityEffects +0 897a FX_AddOrientedLine +0 8a42 FX_DrawPortableShield +0 8b56 CG_Special +0 8b79 CG_SetGhoul2Info +0 8ba2 CG_CreateBBRefEnts +0 8ba5 G2_BoltToGhoul2Model +0 8c56 ScaleModelAxis +0 8d5e CG_General +0 9b00 CG_Speaker +0 9b71 CG_GreyItem +0 9b9e CG_Item +0 a276 CG_Missile +0 a637 CG_Mover +0 a6b1 CG_Beam +0 a6e5 CG_Portal +0 a75c CG_AdjustPositionForMover +0 a813 LerpBoneAngleOverrides +0 a816 CG_InterpolateEntityPosition +0 a8dc CG_CalcEntityLerpPositions +0 a981 CG_TeamBase +0 a9d1 CG_AddCEntity +0 aa86 CG_ManualEntityRender +0 aa8f CG_AddPacketEntities +0 ab78 CG_ROFF_NotetrackCallback +0 ae52 CG_PlaceString +0 af6e CG_Obituary +0 b2cf CG_ToggleBinoculars +0 b339 CG_UseItem +0 b3ec CG_ItemPickup +0 b507 CG_PainEvent +0 b562 CG_ReattachLimb +0 b5da CG_BodyQueueCopy +0 b7b8 CG_TeamName +0 b7d5 CG_PrintCTFMessage +0 b8f1 CG_GetCTFMessageEvent +0 b932 DoFall +0 ba00 CG_InClientBitflags +0 ba4f CG_EntityEvent +0 d308 CG_CheckEvents +0 d39e CG_LoadingString +0 d3ae CG_LoadingItem +0 d3c9 CG_LoadingClient +0 d3f6 CG_DrawInformation +0 da64 CG_LoadBar +0 db22 CG_ClearLightStyles +0 db44 CG_RunLightStyles +0 dc0e CG_SetLightstyle +0 dc99 CG_InitLocalEntities +0 dccf CG_FreeLocalEntity +0 dd08 CG_AllocLocalEntity +0 dd46 CG_BloodTrail +0 ddbb CG_FragmentBounceMark +0 de5e CG_FragmentBounceSound +0 de77 CG_ReflectVelocity +0 df6d CG_AddFragment +0 e0e8 CG_AddFadeRGB +0 e1ba CG_AddFadeScaleModel +0 e371 CG_AddMoveScaleFade +0 e45c CG_AddPuff +0 e568 CG_AddScaleFade +0 e601 CG_AddFallScaleFade +0 e6b3 CG_AddExplosion +0 e724 CG_AddSpriteExplosion +0 e7f0 CG_AddRefEntity +0 e80b CG_AddScorePlum +0 ea41 CG_AddOLine +0 eb65 CG_AddLine +0 eb78 CG_AddLocalEntities +0 ec28 CG_InitMarkPolys +0 ec5e CG_FreeMarkPoly +0 ec97 CG_AllocMark +0 ecee CG_ImpactMark +0 efc8 CG_AddMarks +0 f292 CG_ClearParticles +0 f335 CG_AddParticleToScene +0 10b51 CG_AddParticles +0 10d56 CG_ParticleSnowFlurry +0 10ef2 CG_ParticleSnow +0 11048 CG_ParticleBubble +0 111c7 CG_ParticleSmoke +0 112c6 CG_ParticleBulletDebris +0 11387 CG_ParticleExplosion +0 11492 CG_AddParticleShrapnel +0 11495 CG_NewParticleArea +0 115d6 CG_SnowLink +0 1161c CG_ParticleImpactSmokePuff +0 116ff CG_Particle_Bleed +0 117e3 CG_Particle_OilParticle +0 118e5 CG_Particle_OilSlick +0 11a26 CG_OilSlickRemove +0 11a71 ValidBloodPool +0 11b77 CG_BloodPool +0 11c70 CG_ParticleBloodCloud +0 11dac CG_ParticleSparks +0 11f22 CG_ParticleDust +0 12128 CG_ParticleMisc +0 121c8 CG_CustomSound +0 12236 CG_NeedAnimSequence +0 1226b CG_RegisterClientModelname +0 127bb CG_ColorFromString +0 1281f CG_LoadClientInfo +0 12b11 CG_CopyClientInfoModel +0 12c40 CG_ScanForExistingClientInfo +0 12cfe CG_SetDeferredClientInfo +0 12e28 CG_NewClientInfo +0 13218 CG_ActualLoadDeferredPlayers +0 13260 CG_LoadDeferredPlayers +0 13266 CG_InRoll +0 13290 CG_InRollAnim +0 132b2 CG_SetLerpFrameAnimation +0 1371a CG_FirstAnimFrame +0 1375d CG_InWalkingAnim +0 137b4 CG_FootstepForSurface +0 1384e CG_FootStep +0 138cc CG_RunLerpFrame +0 13d75 CG_ClearLerpFrame +0 13dba CG_PlayerAnimation +0 13ea0 CG_SwingAngles +0 13faa CG_SwingAnglesATST +0 140db CG_AddPainTwitch +0 14122 CG_G2SetBoneAngles +0 14159 CG_G2ClientSpineAngles +0 14497 CG_G2PlayerAngles +0 14a88 CG_HasteTrail +0 14b05 CG_PlayerFlag +0 14c22 CG_PlayerPowerups +0 14cf0 CG_PlayerFloatSprite +0 14d3c CG_PlayerShadow +0 14df9 CG_PlayerSplash +0 14eec CG_ForcePushBlur +0 14feb CG_ForceGripEffect +0 15108 CG_AddRefEntityWithPowerups +0 15176 CG_PlayerShieldHit +0 151ea CG_DrawPlayerShield +0 1529e CG_PlayerHitFX +0 152c9 CG_LightVerts +0 153f9 CG_DoSaber +0 1561a CG_GetTagWorldPosition +0 156e3 CG_CreateSaberMarks +0 159e2 CG_AddSaberBlade +0 1605f CG_IsMindTricked +0 160b1 CG_DrawPlayerSphere +0 1614e CG_AddLightningBeam +0 162f1 CG_AddRandomLightning +0 163e7 CG_ThereIsAMaster +0 16412 CG_Player +0 182e9 CG_ResetPlayerEntity +0 1844e CG_CheckAmmo +0 18451 CG_DamageFeedback +0 18594 CG_Respawn +0 185a5 CG_CheckPlayerstateEvents +0 18687 CG_CheckChangedPredictableEvents +0 18714 CG_CheckLocalSounds +0 1890c CG_TransitionPlayerState +0 189c2 CG_BuildSolidList +0 18a51 CG_ClipMoveToEntities +0 18b62 CG_Trace +0 18ba6 CG_PointContents +0 18c16 CG_InterpolatePlayerState +0 18d4b CG_TouchItem +0 18e3d CG_TouchTriggerPrediction +0 18ef4 CG_EntityStateToPlayerState +0 1908e CG_PredictPlayerState +0 19409 CGSagaGetValueGroup +0 19504 CGSagaGetPairedValue +0 196dc CG_InitSagaMode +0 1976f CG_SagaRoundOver +0 19846 CG_SagaObjectiveCompleted +0 19969 CG_DrawClientScore +0 19c25 CG_TeamScoreboard +0 19ca2 CG_GetTeamCount +0 19ce4 CG_DrawOldScoreboard +0 1a2cc CG_ValidOrder +0 1a2fe CG_ParseScores +0 1a532 CG_ParseTeamInfo +0 1a601 CG_ParseServerinfo +0 1a7be CG_ParseWarmup +0 1a7dd CG_SetConfigValues +0 1a8f9 CG_ShaderStateChanged +0 1a9b1 CG_ConfigStringModified +0 1ac68 CG_AddToTeamChat +0 1ade3 CG_KillCEntityInstances +0 1aef4 CG_MapRestart +0 1af7e CG_ParseVoiceChats +0 1b1e1 CG_LoadVoiceChats +0 1b243 CG_HeadModelVoiceChats +0 1b2dd CG_GetVoiceChat +0 1b351 CG_VoiceChatListForClient +0 1b36d CG_PlayVoiceChat +0 1b3e7 CG_PlayBufferedVoiceChats +0 1b415 CG_AddBufferedVoiceChat +0 1b454 CG_VoiceChatLocal +0 1b506 CG_VoiceChat +0 1b59f CG_RemoveChatEscapeChar +0 1b5e5 CG_CheckSVStripEdRef +0 1b712 CG_ServerCommand +0 1ba31 CG_ExecuteNewServerCommands +0 1ba58 CG_ResetEntity +0 1ba9c CG_TransitionEntity +0 1bac9 CG_SetInitialSnapshot +0 1bb8a CG_TransitionSnapshot +0 1bc90 CG_SetNextSnap +0 1bd77 CG_ReadNextSnapshot +0 1bde6 CG_ProcessSnapshots +0 1be96 CreepToPosition +0 1c063 TurretClientRun +0 1c365 CG_TestModel_f +0 1c3f0 CG_TestGun_f +0 1c3fc CG_TestModelNextFrame_f +0 1c412 CG_TestModelPrevFrame_f +0 1c42f CG_TestModelNextSkin_f +0 1c445 CG_TestModelPrevSkin_f +0 1c462 CG_AddTestModel +0 1c4ed CG_CalcVrect +0 1c55a CG_StepOffset +0 1c57c CG_CalcIdealThirdPersonViewTarget +0 1c5bc CG_CalcIdealThirdPersonViewLocation +0 1c5f5 CG_ResetThirdPersonViewDamp +0 1c662 CG_UpdateThirdPersonTargetDamp +0 1c6e9 CG_UpdateThirdPersonCameraDamp +0 1c7af CG_OffsetThirdPersonView +0 1c8d5 CG_OffsetFirstPersonView +0 1cb02 CG_ZoomDown_f +0 1cb12 CG_ZoomUp_f +0 1cb22 CG_CalcFOVFromX +0 1cb5d CG_CalcFov +0 1ccda CG_DamageBlendBlob +0 1cf22 CheckOutOfConstrict +0 1cf8d CG_CalcViewValues +0 1d0b4 CG_PowerupTimerSounds +0 1d0f4 CG_AddBufferedSound +0 1d11e CG_PlayBufferedSounds +0 1d157 CG_UpdateSoundTrackers +0 1d1b0 CG_SE_UpdateShake +0 1d293 CG_SE_UpdateMusic +0 1d2fc CG_CalcScreenEffects +0 1d309 CGCam_Shake +0 1d31f CGCam_SetMusicMult +0 1d33e CG_DrawActiveFrame +0 1d558 CG_RegisterWeapon +0 1e0a5 CG_SetGhoul2InfoRef +0 1e0e2 CG_RegisterItemVisuals +0 1e244 CG_MapTorsoToWeaponFrame +0 1e346 CG_CalculateWeaponPosition +0 1e42b CG_LightningBolt +0 1e450 CG_AddWeaponWithPowerups +0 1e47f CG_AddPlayerWeapon +0 1e984 CG_AddViewWeapon +0 1eb35 CG_DrawIconBackground +0 1ed0c CG_WeaponCheck +0 1ed45 CG_WeaponSelectable +0 1eda6 CG_DrawWeaponSelect +0 1f0f6 CG_NextWeapon_f +0 1f15c CG_PrevWeapon_f +0 1f1c2 CG_Weapon_f +0 1f2ed CG_OutOfAmmoChange +0 1f336 CG_FireATST +0 1f354 CG_GetClientWeaponMuzzleBoltPoint +0 1f3ca CG_FireWeapon +0 1f592 CG_MissileHitWall +0 1f672 CG_MissileHitPlayer +0 1f76b CG_Tracer +0 1f978 CG_CalcMuzzlePoint +0 1fb66 CG_InitG2Weapons +0 1fbf2 CG_ShutDownG2Weapons +0 1fc0c CG_CopyG2WeaponInstance +0 1fc43 CG_CheckPlayerG2Weapons +0 1fd67 FX_BlasterProjectileThink +0 1fd89 FX_BlasterAltFireThink +0 1fdab FX_BlasterWeaponHitWall +0 1fdba FX_BlasterWeaponHitPlayer +0 1fddb FX_BowcasterProjectileThink +0 1fdfd FX_BowcasterHitWall +0 1fe0c FX_BowcasterHitPlayer +0 1fe1b FX_BowcasterAltProjectileThink +0 1fe3d FX_BryarProjectileThink +0 1fe5f FX_BryarHitWall +0 1fe6e FX_BryarHitPlayer +0 1fe8f FX_BryarAltProjectileThink +0 1fed1 FX_BryarAltHitWall +0 1ff15 FX_BryarAltHitPlayer +0 1ff36 FX_TurretProjectileThink +0 1ff58 FX_TurretHitWall +0 1ff67 FX_TurretHitPlayer +0 1ff88 FX_DEMP2_ProjectileThink +0 1ffaa FX_DEMP2_HitWall +0 1ffb9 FX_DEMP2_HitPlayer +0 1ffc8 FX_DEMP2_AltBeam +0 1ffcb FX_DEMP2_AltDetonate +0 2003d FX_DisruptorMainShot +0 20074 FX_DisruptorAltShot +0 200e1 FX_DisruptorAltMiss +0 201bd FX_DisruptorAltHit +0 201cc FX_DisruptorHitWall +0 201db FX_DisruptorHitPlayer +0 201ea FX_FlechetteProjectileThink +0 2020c FX_FlechetteWeaponHitWall +0 2021b FX_FlechetteWeaponHitPlayer +0 2022a FX_FlechetteAltProjectileThink +0 2024c FX_RepeaterProjectileThink +0 2026e FX_RepeaterHitWall +0 2027d FX_RepeaterHitPlayer +0 2028c FX_RepeaterAltProjectileThink +0 202ae FX_RepeaterAltHitWall +0 202bd FX_RepeaterAltHitPlayer +0 202cc FX_RocketProjectileThink +0 202ee FX_RocketHitWall +0 202fd FX_RocketHitPlayer +0 2030c FX_RocketAltProjectileThink +0 2032e FX_ForceDrained +0 20365 PM_SlideMove +0 20755 PM_StepSlideMove +0 20aa4 BG_InSpecialJump +0 20ac9 BG_InSaberStandAnim +0 20aef BG_DirectFlippingAnim +0 20b0e BG_SaberInAttack +0 20b3b BG_SaberInSpecial +0 20b58 BG_SaberInIdle +0 20b75 BG_FlippingAnim +0 20bbd BG_SpinningSaberAnim +0 20cd5 BG_SaberInSpecialAttack +0 20cfe BG_InRoll +0 20d24 BG_InDeathAnim +0 20d49 PM_SaberInParry +0 20d5e PM_SaberInReflect +0 20d73 PM_SaberInStart +0 20d88 PM_InSaberAnim +0 20d9f PM_InKnockDown +0 20dcc PM_PainAnim +0 20deb PM_JumpingAnim +0 20e0a PM_LandingAnim +0 20e51 PM_SpinningAnim +0 20e5e PM_InOnGroundAnim +0 20ebb PM_InRollComplete +0 20ee1 PM_AnimLength +0 20f0e PM_DebugLegsAnim +0 20f59 BG_ParseAnimationFile +0 210d1 PM_StartLegsAnim +0 21156 PM_ContinueLegsAnim +0 21176 PM_ForceLegsAnim +0 211e6 PM_StartTorsoAnim +0 21241 PM_SetLegsAnimTimer +0 2125f PM_SetTorsoAnimTimer +0 2127d BG_SaberStartTransAnim +0 212cc PM_SetAnimFinal +0 21508 PM_SetAnim +0 21581 PM_GetSaberStance +0 2159e PM_DoSlowFall +0 215c1 PM_AddEvent +0 215d0 PM_AddEventWithParm +0 215e0 PM_AddTouchEnt +0 21635 PM_ClipVelocity +0 216ae PM_Friction +0 217aa PM_Accelerate +0 21826 PM_CmdScale +0 218bd PM_SetMovementDir +0 21a09 PM_ForceJumpingUp +0 21ac8 PM_JumpForDir +0 21b6b PM_SetPMViewAngle +0 21bac PM_AdjustAngleForWallRun +0 21db0 PM_CheckJump +0 22b4c PM_CheckWaterJump +0 22c33 PM_WaterJumpMove +0 22c74 PM_WaterMove +0 22da5 PM_FlyMove +0 22e30 PM_AirMove +0 22ef3 PM_WalkMove +0 23195 PM_DeadMove +0 2320e PM_NoclipMove +0 23380 PM_FootstepForSurface +0 23399 PM_TryRoll +0 235aa PM_CrashLand +0 238bb PM_CorrectAllSolid +0 239a2 PM_GroundTraceMissed +0 23b0d PM_GroundTrace +0 23ca0 PM_SetWaterLevel +0 23d6d PM_CheckDuck +0 23f43 PM_Use +0 23f8c PM_RunningAnim +0 23fba PM_Footsteps +0 24231 PM_WaterEvents +0 24288 PM_BeginWeaponChange +0 242ee PM_FinishWeaponChange +0 24341 PM_DoChargedWeapons +0 2481b PM_ItemUsable +0 24a46 PM_Weapon +0 25373 PM_Animate +0 253d1 PM_DropTimers +0 2545b PM_UpdateViewAngles +0 254ff PM_AdjustAttackStates +0 25877 BG_CmdForRoll +0 258cc BG_AdjustClientSpeed +0 25c7f PmoveSingle +0 260f5 Pmove +0 261a1 swapfunc +0 26228 med3 +0 262ab qsort +0 26664 strlen +0 2667f strcat +0 266c2 strcpy +0 266f7 strcmp +0 26730 strchr +0 2674f strstr +0 26795 tolower +0 267ad toupper +0 267c5 memmove +0 2680c tan +0 26823 srand +0 2682a rand +0 2683f atof +0 26904 _atof +0 269cf atoi +0 26a47 _atoi +0 26ac9 abs +0 26ade fabs +0 26af3 AddInt +0 26bce AddFloat +0 26cdc AddString +0 26d73 vsprintf +0 26f0b sscanf +0 26f76 BG_LegalizedForcePowers +0 27343 vectoyaw +0 2739d BG_HasYsalamiri +0 273cc BG_CanUseFPNow +0 27433 BG_FindItemForPowerup +0 2746f BG_FindItemForHoldable +0 274a9 BG_FindItemForWeapon +0 274dc BG_FindItem +0 27505 BG_PlayerTouchesItem +0 27565 BG_ProperForceIndex +0 27588 BG_CycleForce +0 27660 BG_GetItemIndexByTag +0 27690 BG_CycleInven +0 276fc BG_CanItemBeGrabbed +0 278f9 BG_EvaluateTrajectory +0 27ac7 BG_EvaluateTrajectoryDelta +0 27bc1 BG_AddPredictableEventToPlayerstate +0 27bfc BG_TouchJumpPad +0 27c60 BG_PlayerStateToEntityState +0 27f6b BG_PlayerStateToEntityStateExtraPolate +0 28283 BG_SwingAngles +0 28388 BG_AddPainTwitch +0 283c9 BG_G2PlayerAngles +0 28566 BG_Alloc +0 285a6 BG_AllocUnaligned +0 285d9 BG_TempAlloc +0 28611 BG_TempFree +0 2863e BG_StringAlloc +0 28661 BG_OutOfMemory +0 28673 PM_irand_timesync +0 286a8 BG_ForcePowerDrain +0 28766 PM_AttackMoveForQuad +0 2879b PM_SaberAnimTransitionAnim +0 28880 PM_SaberMoveQuadrantForMovement +0 288e5 PM_SaberInBounce +0 2890a PM_SaberInTransition +0 2891f PM_SaberKataDone +0 28965 PM_SetAnimFrame +0 2896f PM_SaberLockBreak +0 28c38 PM_SaberLocked +0 28e5c PM_SaberInBrokenParry +0 28e71 PM_BrokenParryForParry +0 28eb3 PM_CanBackstab +0 28f34 PM_SaberFlipOverAttackMove +0 29035 PM_SomeoneInFront +0 290c5 PM_SaberLungeAttackMove +0 2910f PM_SaberJumpAttackMove +0 2917c PM_GroundDistance +0 291e5 PM_SaberAttackForMovement +0 29339 PM_WeaponLightsaber +0 29b41 PM_SetSaberMove +0 29d0e Q_rand +0 29d23 Q_random +0 29d35 Q_crandom +0 29d46 VectorCompare +0 29d7e VectorLength +0 29db1 VectorLengthSquared +0 29ddd Distance +0 29e1e DistanceSquared +0 29e6c VectorNormalizeFast +0 29ecb VectorInverse +0 29ef3 CrossProduct +0 29f6c ClampChar +0 29f83 ClampShort +0 29f9a DirToByte +0 29ff5 ByteToDir +0 2a013 ColorBytes3 +0 2a082 ColorBytes4 +0 2a114 NormalizeColor +0 2a18a PlaneFromPoints +0 2a248 RotatePointAroundVector +0 2a353 RotateAroundDirection +0 2a397 vectoangles +0 2a453 AnglesToAxis +0 2a488 AxisClear +0 2a4bf AxisCopy +0 2a4e3 ProjectPointOnPlane +0 2a59e MakeNormalVectors +0 2a649 VectorRotate +0 2a6e6 Q_rsqrt +0 2a71d Q_fabs +0 2a72d LerpAngle +0 2a75e AngleSubtract +0 2a783 AnglesSubtract +0 2a7d1 AngleMod +0 2a7e3 AngleNormalize360 +0 2a7f1 AngleNormalize180 +0 2a80c AngleDelta +0 2a81c SetPlaneSignbits +0 2a849 BoxOnPlaneSide +0 2ac0a RadiusFromBounds +0 2ac5d ClearBounds +0 2ac94 AddPointToBounds +0 2ad2d VectorNormalize +0 2ad9d VectorNormalize2 +0 2ae2b _VectorMA +0 2ae6d _DotProduct +0 2aea2 _VectorSubtract +0 2aedb _VectorAdd +0 2af14 _VectorCopy +0 2af3b _VectorScale +0 2af6b Vector4Scale +0 2afad Q_log2 +0 2afcc MatrixMultiply +0 2b1a1 AngleVectors +0 2b299 PerpendicularVector +0 2b305 Rand_Init +0 2b30c flrand +0 2b347 irand +0 2b379 powf +0 2b39c GetIDForString +0 2b3e1 GetStringForID +0 2b41d Com_Clamp +0 2b437 COM_SkipPath +0 2b45b COM_StripExtension +0 2b491 COM_DefaultExtension +0 2b4d9 ShortSwap +0 2b4f9 ShortNoSwap +0 2b504 LongSwap +0 2b537 LongNoSwap +0 2b53d Long64Swap +0 2b57a Long64NoSwap +0 2b582 FloatSwap +0 2b598 FloatNoSwap +0 2b59f COM_BeginParseSession +0 2b5b1 COM_GetCurrentParseLine +0 2b5b7 COM_Parse +0 2b5c6 COM_ParseError +0 2b5e6 COM_ParseWarning +0 2b606 SkipWhitespace +0 2b63d COM_Compress +0 2b790 COM_ParseExt +0 2b8dc COM_MatchToken +0 2b905 SkipBracedSection +0 2b943 SkipRestOfLine +0 2b97b Parse1DMatrix +0 2b9ba Parse2DMatrix +0 2b9f5 Parse3DMatrix +0 2ba3a Q_isprint +0 2ba4f Q_islower +0 2ba64 Q_isupper +0 2ba79 Q_isalpha +0 2ba9a Q_strrchr +0 2bace Q_strncpyz +0 2bb09 Q_stricmpn +0 2bb94 Q_strncmp +0 2bbe6 Q_stricmp +0 2bc0e Q_strlwr +0 2bc34 Q_strupr +0 2bc5a Q_strcat +0 2bc86 Q_PrintStrlen +0 2bcd6 Q_CleanStr +0 2bd3c Com_sprintf +0 2bd7b va +0 2bda8 Info_ValueForKey +0 2be88 Info_NextPair +0 2bf26 Info_RemoveKey +0 2bff6 Info_RemoveKey_Big +0 2c0c6 Info_Validate +0 2c0ed Info_SetValueForKey +0 2c1bd Info_SetValueForKey_Big +0 2c285 Q_irand +0 2c29d UI_Alloc +0 2c2d7 UI_InitMemory +0 2c2e0 UI_OutOfMemory +0 2c2e6 hashForString +0 2c326 String_Alloc +0 2c3ff String_Report +0 2c448 String_Init +0 2c48c PC_SourceWarning +0 2c4bc PC_SourceError +0 2c4ec LerpColor +0 2c547 Float_Parse +0 2c573 PC_Float_Parse +0 2c5c8 Color_Parse +0 2c5f5 PC_Color_Parse +0 2c622 Int_Parse +0 2c64e PC_Int_Parse +0 2c6a6 Rect_Parse +0 2c6ed PC_Rect_Parse +0 2c734 String_Parse +0 2c760 PC_String_Parse +0 2c7d5 PC_Script_Parse +0 2c857 Init_Display +0 2c85e GradientBar_Paint +0 2c8a4 Window_Init +0 2c8e0 Fade +0 2c951 Window_Paint +0 2cc9b Item_SetScreenCoords +0 2cd2f Item_UpdatePosition +0 2cd82 Menu_UpdatePosition +0 2cdd9 Menu_PostParse +0 2ce05 Menu_ClearFocus +0 2ce88 IsVisible +0 2ceab Rect_ContainsPoint +0 2cef0 Menu_ItemsMatchingGroup +0 2cf4c Menu_GetMatchingItemByNumber +0 2cfb9 Script_SetColor +0 2d053 Script_SetAsset +0 2d06c Script_SetBackground +0 2d08e Menu_FindItemByName +0 2d0dd Script_SetTeamColor +0 2d112 Script_SetItemColor +0 2d1eb Script_SetItemRect +0 2d269 Menu_ShowItemByName +0 2d2db Menu_FadeItemByName +0 2d354 Menus_FindByName +0 2d385 Menus_ShowByName +0 2d39d Menus_OpenByName +0 2d3a6 Menu_RunCloseScript +0 2d3d5 Menus_CloseByName +0 2d435 Menus_CloseAll +0 2d46b Script_Show +0 2d48b Script_Hide +0 2d4ab Script_FadeIn +0 2d4cb Script_FadeOut +0 2d4eb Script_Open +0 2d503 Script_Close +0 2d52d Menu_TransitionItemByName +0 2d618 Script_Defer +0 2d63f Script_RunDeferred +0 2d659 Script_Transition +0 2d6bb Menu_OrbitItemByName +0 2d728 Script_Orbit +0 2d796 Script_SetFocus +0 2d821 Script_SetPlayerModel +0 2d83f Script_SetPlayerHead +0 2d85d Script_SetCvar +0 2d889 Script_SetCvarToCvar +0 2d8c2 Script_Exec +0 2d8e9 Script_Play +0 2d912 Script_playLooped +0 2d93e Item_RunScript +0 2d9db Item_EnableShowViaCvar +0 2dab4 Item_SetFocus +0 2dc20 Item_TextScroll_MaxScroll +0 2dc4f Item_TextScroll_ThumbPosition +0 2dc99 Item_TextScroll_ThumbDrawPosition +0 2dd02 Item_TextScroll_OverLB +0 2ddea Item_TextScroll_MouseEnter +0 2de1b Item_TextScroll_HandleKey +0 2dfb1 Item_ListBox_MaxScroll +0 2e00b Item_ListBox_ThumbPosition +0 2e092 Item_ListBox_ThumbDrawPosition +0 2e157 Item_Slider_ThumbPosition +0 2e1ef Item_Slider_OverSlider +0 2e224 Item_ListBox_OverLB +0 2e3ef Item_ListBox_MouseEnter +0 2e524 Item_MouseEnter +0 2e646 Item_MouseLeave +0 2e692 Menu_HitTest +0 2e6d0 Item_SetMouseOver +0 2e6f9 Item_OwnerDraw_HandleKey +0 2e733 Item_ListBox_HandleKey +0 2ec50 Item_YesNo_HandleKey +0 2ecd6 Item_Multi_CountSettings +0 2ecee Item_Multi_FindCvarByValue +0 2ed73 Item_Multi_Setting +0 2ee04 Item_Multi_HandleKey +0 2eef7 Item_TextField_HandleKey +0 2f27b Scroll_TextScroll_AutoFunc +0 2f2d8 Scroll_TextScroll_ThumbFunc +0 2f3c7 Scroll_ListBox_AutoFunc +0 2f424 Scroll_ListBox_ThumbFunc +0 2f5ab Scroll_Slider_ThumbFunc +0 2f645 Item_StartCapture +0 2f7ba Item_StopCapture +0 2f7bd Item_Slider_HandleKey +0 2f8b9 Item_HandleKey +0 2f9c9 Item_Action +0 2f9e0 Menu_SetPrevCursorItem +0 2fab6 Menu_SetNextCursorItem +0 2fb83 Window_CloseCinematic +0 2fbab Menu_CloseCinematics +0 2fbff Display_CloseCinematics +0 2fc1c Menus_Activate +0 2fc73 Display_VisibleMenuCount +0 2fc9d Menus_HandleOOBClick +0 2fd60 Item_CorrectedTextRect +0 2fd88 Menu_HandleKey +0 300a9 ToWindowCoords +0 300f1 Rect_ToWindowCoords +0 30106 Item_SetTextExtents +0 302aa Item_TextColor +0 303f0 Item_Text_AutoWrapped_Paint +0 305a0 Item_Text_Wrapped_Paint +0 306ad Item_Text_Paint +0 3079e Item_TextField_Paint +0 30914 Item_YesNo_Paint +0 30a48 Item_Multi_Paint +0 30b36 Controls_GetKeyAssignment +0 30b94 Controls_GetConfig +0 30bc6 Controls_SetConfig +0 30c1d Controls_SetDefaults +0 30c50 BindingIDFromName +0 30c7d BindingFromName +0 30d0e Item_Slider_Paint +0 30e11 Item_Bind_Paint +0 30fea Display_KeyBindPending +0 30ff0 Item_Bind_HandleKey +0 311fb Item_Model_Paint +0 3132b Item_Image_Paint +0 31372 Item_TextScroll_Paint +0 31504 Item_ListBox_Paint +0 31abb Item_OwnerDraw_Paint +0 31d81 Item_Paint +0 3236b Menu_Init +0 323a2 Menu_GetFocusedItem +0 323e1 Menu_GetFocused +0 3241c Menu_ScrollFeeder +0 3246f Menu_SetFeederSelection +0 32504 Menus_AnyFullScreenVisible +0 32538 Menus_ActivateByName +0 325c7 Item_Init +0 325e0 Menu_HandleMouseMove +0 32738 Menu_Paint +0 32893 Item_ValidateTypeData +0 32957 KeywordHash_Key +0 329bb KeywordHash_Add +0 329e1 KeywordHash_Find +0 32a1c ItemParse_name +0 32a35 ItemParse_focusSound +0 32a5d ItemParse_text +0 32a76 ItemParse_descText +0 32a8f ItemParse_text2 +0 32aa8 ItemParse_text2alignx +0 32ac1 ItemParse_text2aligny +0 32ada ItemParse_group +0 32af3 ItemParse_asset_model +0 32b33 ItemParse_asset_shader +0 32b59 ItemParse_model_origin +0 32b9f ItemParse_model_fovx +0 32bc5 ItemParse_model_fovy +0 32beb ItemParse_model_rotation +0 32c11 ItemParse_model_angle +0 32c35 ItemParse_rect +0 32c4e ItemParse_flag +0 32cb9 ItemParse_style +0 32cd7 ItemParse_decoration +0 32cea ItemParse_notselectable +0 32d0d ItemParse_wrapped +0 32d20 ItemParse_autowrapped +0 32d33 ItemParse_horizontalscroll +0 32d46 ItemParse_type +0 32d65 ItemParse_elementwidth +0 32d8b ItemParse_elementheight +0 32db1 ItemParse_feeder +0 32dca ItemParse_elementtype +0 32dfb ItemParse_columns +0 32e9e ItemParse_border +0 32eb7 ItemParse_bordersize +0 32ed0 ItemParse_visible +0 32ef8 ItemParse_ownerdraw +0 32f17 ItemParse_align +0 32f30 ItemParse_textalign +0 32f4e ItemParse_textalignx +0 32f67 ItemParse_textaligny +0 32f80 ItemParse_textscale +0 32f99 ItemParse_textstyle +0 32fb2 ItemParse_backcolor +0 32fe1 ItemParse_forecolor +0 3301e ItemParse_bordercolor +0 3304d ItemParse_outlinecolor +0 33066 ItemParse_background +0 3308c ItemParse_cinematic +0 330a5 ItemParse_doubleClick +0 330d6 ItemParse_onFocus +0 330ef ItemParse_leaveFocus +0 33108 ItemParse_mouseEnter +0 33121 ItemParse_mouseExit +0 3313a ItemParse_mouseEnterText +0 33153 ItemParse_mouseExitText +0 3316c ItemParse_action +0 33185 ItemParse_special +0 3319e ItemParse_cvarTest +0 331b7 ItemParse_cvar +0 33218 ItemParse_font +0 33237 ItemParse_maxChars +0 3326c ItemParse_maxPaintChars +0 332a1 ItemParse_maxLineChars +0 332d6 ItemParse_lineHeight +0 3330c ItemParse_cvarFloat +0 3336b ItemParse_cvarStrList +0 3342d ItemParse_cvarFloatList +0 334eb ItemParse_addColorRange +0 3354d ItemParse_ownerdrawFlag +0 33572 ItemParse_enableCvar +0 33591 ItemParse_disableCvar +0 335b0 ItemParse_showCvar +0 335cf ItemParse_hideCvar +0 335ee ItemParse_Appearance_slot +0 33607 Item_SetupKeywordHash +0 33633 Item_Parse +0 336b2 Item_TextScroll_BuildLines +0 337f1 Item_InitControls +0 3382e MenuParse_font +0 33871 MenuParse_name +0 3389e MenuParse_fullscreen +0 338bb MenuParse_rect +0 338d6 MenuParse_style +0 338f8 MenuParse_visible +0 33924 MenuParse_onOpen +0 33941 MenuParse_onClose +0 3395e MenuParse_onESC +0 3397b MenuParse_border +0 33998 MenuParse_borderSize +0 339b5 MenuParse_backcolor +0 339e8 MenuParse_descAlignment +0 33a0a MenuParse_descX +0 33a27 MenuParse_descY +0 33a44 MenuParse_descScale +0 33a61 MenuParse_descColor +0 33a94 MenuParse_forecolor +0 33ad5 MenuParse_bordercolor +0 33b08 MenuParse_focuscolor +0 33b3b MenuParse_disablecolor +0 33b6e MenuParse_outlinecolor +0 33b8b MenuParse_background +0 33bb5 MenuParse_cinematic +0 33bd2 MenuParse_ownerdrawFlag +0 33bfb MenuParse_ownerdraw +0 33c18 MenuParse_popup +0 33c2f MenuParse_outOfBounds +0 33c46 MenuParse_soundLoop +0 33c63 MenuParse_fadeClamp +0 33c80 MenuParse_fadeAmount +0 33c9d MenuParse_fadeCycle +0 33cba MenuParse_itemDef +0 33d3f MenuParse_appearanceIncrement +0 33d5c Menu_SetupKeywordHash +0 33d88 Menu_Parse +0 33e07 Menu_New +0 33e3b Menu_Count +0 33e41 Menu_PaintAll +0 33ed8 Menu_Reset +0 33ede Display_GetContext +0 33ee4 Display_CaptureItem +0 33f19 Display_MouseMove +0 33f91 Display_CursorType +0 33fdd Display_HandleKey +0 3400a Window_CacheContents +0 34043 Item_CacheContents +0 34050 Menu_CacheContents +0 3409c Display_CacheAll +0 340b9 Menu_OverActiveItem +0 3416c CG_InitTeamChat +0 3418a CG_SetPrintString +0 341aa CG_CheckOrderPending +0 3428b CG_SetSelectedPlayerName +0 342d8 CG_GetSelectedPlayer +0 342ea CG_SelectNextPlayer +0 3430c CG_SelectPrevPlayer +0 3432f CG_StatusHandle +0 3437b CG_GetValue +0 34461 CG_OtherTeamHasFlag +0 34496 CG_YourTeamHasFlag +0 344cb CG_OwnerDrawVisible +0 345e8 CG_GetKillerText +0 3460a CG_GetGameStatusText +0 34682 CG_GameTypeString +0 346bf CG_Text_Paint_Limit +0 347ab CG_DrawNewTeamInfo +0 34a16 CG_DrawTeamSpectators +0 34b61 CG_DrawMedal +0 34ca9 CG_OwnerDraw +0 34cac CG_MouseEvent +0 34d3e CG_HideTeamMenu +0 34d4b CG_ShowTeamMenu +0 34d53 CG_EventHandling +0 34d6d CG_KeyEvent +0 34dc6 CG_ClientNumFromName +0 34dfd CG_ShowResponseHead +0 34e10 CG_RunMenuScript +0 34e13 CG_DeferMenuScript +0 34e18 CG_GetTeamColor +1 4 colorTable +1 434 HolocronIcons +1 47c forceModelModificationCount +1 4e4 cvarTable +1 be4 cvarTableSize +1 c8c forceTicPos +1 ddc ammoTicPos +1 f2c commands +1 10ac menuScoreboard +1 10b0 bluehudtint +1 10c0 redhudtint +1 10d0 showPowersName +1 115c g_saberFlashTime +1 1160 g_saberFlashPos +1 1180 cgRageTime +1 1184 cgRageFadeTime +1 1188 cgRageFadeVal +1 118c cgRageRecTime +1 1190 cgRageRecFadeTime +1 1194 cgRageRecFadeVal +1 1198 cgAbsorbTime +1 119c cgAbsorbFadeTime +1 11a0 cgAbsorbFadeVal +1 11a4 cgProtectTime +1 11a8 cgProtectFadeTime +1 11ac cgProtectFadeVal +1 11b0 cgYsalTime +1 11b4 cgYsalFadeTime +1 11b8 cgYsalFadeVal +1 11bc gCGHasFallVector +1 11e0 forceHolocronModels +1 1724 shaderAnimNames +1 17a4 shaderAnimCounts +1 1824 shaderAnimSTRatio +1 18a4 cl_numparticles +1 18a8 initparticles +1 18ac roll +1 18b0 cg_customSoundNames +1 193c cgQueueLoad +1 1a28 cgAnnouncerTime +1 1a74 numValidOrders +1 1a78 cameramins +1 1a84 cameramaxs +1 1a90 cameraCurTarget +1 1a9c cameraCurLoc +1 1aa8 cameraOldLoc +1 1ab4 cameraNewLoc +1 1ac0 cameraLastFrame +1 1ac4 cameraLastYaw +1 1ac8 cameraStiffFactor +1 1b08 cgWeapFrame +1 1b0c cgWeapFrameTime +1 1c00 WHITE +1 1c18 WP_MuzzlePoint +1 1cd8 weaponData +1 2058 ammoData +1 2080 animTable +1 46a8 BGPAFtextLoaded +1 46ac gPMDoSlowFall +1 46b0 pm_stopspeed +1 46b4 pm_duckScale +1 46b8 pm_swimScale +1 46bc pm_wadeScale +1 46c0 pm_accelerate +1 46c4 pm_airaccelerate +1 46c8 pm_wateraccelerate +1 46cc pm_flyaccelerate +1 46d0 pm_friction +1 46d4 pm_waterfriction +1 46d8 pm_flightfriction +1 46dc pm_spectatorfriction +1 46e0 c_pmove +1 46e4 forceSpeedLevels +1 46f4 forcePowerNeeded +1 4814 forceJumpHeight +1 4824 forceJumpStrength +1 48c8 randSeed +1 493c forceMasteryLevels +1 495c forceMasteryPoints +1 497c bgForcePowerCost +1 4a9c forcePowerSorted +1 4ae4 forcePowerDarkLight +1 4b2c WeaponReadyAnim +1 4b6c WeaponAttackAnim +1 4bac bg_itemlist +1 5468 bg_numItems +1 54c0 eventnames +1 5698 bg_poolSize +1 569c bg_poolTail +1 56a0 saberMoveData +1 6910 transitionMove +1 6bb8 vec3_origin +1 6bc4 axisDefault +1 1a2c validOrders +1 6be8 colorBlack +1 6bf8 colorRed +1 6c08 colorGreen +1 6c18 colorBlue +1 6c28 colorYellow +1 6c38 colorMagenta +1 6c48 colorCyan +1 6c58 colorWhite +1 6c68 colorLtGrey +1 6c78 colorMdGrey +1 6c88 colorDkGrey +1 6c98 colorLtBlue +1 6ca8 colorDkBlue +1 6cb8 g_color_table +1 6d38 bytedirs +1 74f0 holdrand +1 74fc captureFunc +1 7500 captureData +1 7504 itemCapture +1 7508 DC +1 750c g_waitingForKey +1 7510 g_editingField +1 7514 g_bindItem +1 7518 g_editItem +1 751c menuCount +1 7520 openMenuCount +1 7524 debugMode +1 7528 lastListBoxClickTime +1 752c itemFlags +1 753c styles +1 7558 alignment +1 7568 types +1 75a8 strPoolIndex +1 75ac strHandleCount +1 75b8 FPMessageTime +1 75bc ui_deferredScriptItem +1 75c0 commandList +1 7680 scriptCommandCount +1 7748 g_bindings +1 8018 itemParseKeywords +1 8378 menuParseKeywords +1 852c drawTeamOverlayModificationCount +1 7fa0 g_bindCount +2 752ae8 _stackStart +2 762ae8 _stackEnd +3 8400 cg_pmove_msec +3 8510 cg_debugSaber +3 8620 cgDC +3 b440 cg_debugBB +3 b550 ui_myteam +3 b660 cg_recordSPDemoName +3 b770 cg_recordSPDemo +3 b880 cg_singlePlayerActive +3 b990 cg_enableBreath +3 baa0 cg_enableDust +3 bbb0 cg_singlePlayer +3 bcc0 cg_currentSelectedPlayerName +3 bdd0 cg_currentSelectedPlayer +3 bee0 cg_blueTeamName +3 bff0 cg_redTeamName +3 c100 cg_trueLightning +3 c210 cg_noProjectileTrail +3 c320 cg_noTaunt +3 c430 cg_bigFont +3 c540 cg_smallFont +3 c650 cg_cameraMode +3 c760 cg_timescale +3 c870 cg_timescaleFadeSpeed +3 c980 cg_timescaleFadeEnd +3 ca90 cg_cameraOrbitDelay +3 cba0 cg_cameraOrbit +3 ccb0 pmove_msec +3 cdc0 pmove_fixed +3 ced0 cg_smoothClients +3 cfe0 cg_hudFiles +3 d0f0 cg_scorePlum +3 d200 cg_noVoiceText +3 d310 cg_noVoiceChats +3 d420 cg_teamChatsOnly +3 d530 cg_drawFriend +3 d640 cg_deferPlayers +3 d750 cg_predictItems +3 d860 cg_blood +3 d970 cg_paused +3 da80 cg_buildScript +3 db90 cg_forceModel +3 dca0 cg_stats +3 ddb0 cg_teamChatHeight +3 dec0 cg_teamChatTime +3 dfd0 cg_synchronousClients +3 e0e0 cg_drawEnemyInfo +3 e1f0 cg_lagometer +3 e300 cg_stereoSeparation +3 e410 cg_thirdPersonHorzOffset +3 e520 cg_thirdPersonAlpha +3 e630 cg_thirdPersonTargetDamp +3 e740 cg_thirdPersonCameraDamp +3 e850 cg_thirdPersonVertOffset +3 e960 cg_thirdPersonPitchOffset +3 ea70 cg_thirdPersonAngle +3 eb80 cg_thirdPersonRange +3 ec90 cg_thirdPerson +3 eda0 cg_dismember +3 eeb0 cg_animBlend +3 efc0 cg_auraShell +3 f0d0 cg_speedTrail +3 f1e0 cg_saberTrail +3 f2f0 cg_saberContact +3 f400 cg_swingAngles +3 f510 cg_zoomFov +3 f620 cg_fov +3 f730 cg_simpleItems +3 f840 cg_ignore +3 f950 cg_autoswitch +3 fa60 cg_tracerLength +3 fb70 cg_tracerWidth +3 fc80 cg_tracerChance +3 fd90 cg_viewsize +3 fea0 cg_drawGun +3 ffb0 cg_gun_z +3 100c0 cg_gun_y +3 101d0 cg_gun_x +3 102e0 cg_gun_frame +3 103f0 cg_addMarks +3 10500 cg_footsteps +3 10610 cg_showmiss +3 10720 cg_noPlayerAnims +3 10830 cg_nopredict +3 10940 cg_errorDecay +3 10a50 cg_debugEvents +3 10b60 cg_debugPosition +3 10c70 cg_debugAnim +3 10d80 cg_animSpeed +3 10e90 cg_draw2D +3 10fa0 cg_drawStatus +3 110b0 cg_crosshairHealth +3 111c0 cg_crosshairSize +3 112d0 cg_crosshairY +3 113e0 cg_crosshairX +3 114f0 cg_teamOverlayUserinfo +3 11600 cg_drawTeamOverlay +3 11710 cg_drawRewards +3 11820 cg_dynamicCrosshair +3 11930 cg_drawScores +3 11a40 cg_drawCrosshairNames +3 11b50 cg_drawCrosshair +3 11c60 cg_drawAmmoWarning +3 11d70 cg_drawIcons +3 11e80 cg_draw3dIcons +3 11f90 cg_drawSnapshot +3 120a0 cg_drawFPS +3 121b0 cg_drawTimer +3 122c0 cg_gibs +3 123d0 cg_shadows +3 124e0 cg_bobroll +3 125f0 cg_bobpitch +3 12700 cg_bobup +3 12810 cg_runroll +3 12920 cg_runpitch +3 12a30 cg_centertime +3 12b40 cg_items +3 16340 cg_weapons +3 17040 cg_entities +3 1f7040 cg +3 220948 cgs +3 232190 gCGFallVector +3 23219c lagometer +3 2327a4 lastvalidlockdif +3 2327a8 hudTintColor +3 2327ac teamChat2 +3 2328ac teamChat1 +3 2329ac systemChat +3 232aac numSortedTeamPlayers +3 232ab0 sortedTeamPlayers +3 232b4c offZ +3 23318c offX +3 23380c lastofs +3 233810 cl_lightstyle +3 237a10 cg_freeLocalEntities +3 237a14 cg_activeLocalEntities +3 237be0 cg_localEntities +3 2713e0 oldtime +3 2713e4 rup +3 2713f0 rright +3 2713fc rforward +3 271408 pvup +3 271414 pvright +3 271420 pvforward +3 27142c particles +3 29042c free_particles +3 290430 active_particles +3 290434 numShaderAnims +3 290438 shaderAnims +3 292438 markTotal +3 29243c cg_freeMarkPolys +3 292440 cg_activeMarkPolys +3 292560 cg_markPolys +3 2a4560 cgBoneAnglePostSet +3 2a4598 cgSendPS +3 2af098 cg_triggerEntities +3 2af498 cg_numTriggerEntities +3 2af49c cg_solidEntities +3 2af89c cg_numSolidEntities +3 2af8a0 cg_pmove +3 2afa18 cg_saga_valid +3 2afa1c cg_saga_info +3 2b1a1c localClient +3 2b1a20 voiceChatBuffer +3 2b4120 voiceChatLists +3 4dcb60 zoomFov +3 4dcb64 cameraIdealLoc +3 4dcb70 cameraIdealTarget +3 4dcb7c cameraFocusLoc +3 4dcb88 cameraFocusAngles +3 4dcb94 cameraup +3 4dcba0 camerafwd +3 4dcbac cgScreenEffects +3 4dcbcc g2WeaponInstances +3 4dcc0c BGPAFtext +3 4e684c bgGlobalAnimations +3 4edf84 pml +3 4ee410 pm +3 4ee414 bg_pool +3 6f7e2c com_lines +3 6f7e30 com_parsename +3 6f8230 com_token +3 6fa640 menuParseKeywordHash +3 6fae40 itemParseKeywordHash +3 6fb640 g_nameBind2 +3 6fb660 g_nameBind1 +3 6fb680 ui_deferredScript +3 6fbe80 strHandle +3 6fde80 strPool +3 71de80 outOfMemory +3 71de84 allocPoint +3 71de88 memoryPool +3 73de88 menuStack +3 73dec8 Menus +3 752ac8 scrollInfo diff --git a/CODE-mp/base/vm/jk2mpgame.map b/CODE-mp/base/vm/jk2mpgame.map new file mode 100644 index 0000000..28b48ba --- /dev/null +++ b/CODE-mp/base/vm/jk2mpgame.map @@ -0,0 +1,1602 @@ +0 fffffda8 trap_G2API_CleanGhoul2Models +0 fffffda9 trap_G2API_RemoveGhoul2Model +0 fffffdaa trap_G2API_HasGhoul2ModelOnIndex +0 fffffdab trap_G2API_DuplicateGhoul2Instance +0 fffffdac trap_G2API_CopySpecificGhoul2Model +0 fffffdad trap_G2API_CopyGhoul2Instance +0 fffffdae trap_G2API_GetGLAName +0 fffffdaf trap_G2API_SetBoneAnim +0 fffffdb0 trap_G2API_SetBoneAngles +0 fffffdb1 trap_G2API_SetBoltInfo +0 fffffdb2 trap_G2API_AddBolt +0 fffffdb3 trap_G2API_InitGhoul2Model +0 fffffdb4 trap_G2API_GetBoltMatrix_NoReconstruct +0 fffffdb5 trap_G2API_GetBoltMatrix +0 fffffdb6 trap_G2_SetGhoul2ModelIndexes +0 fffffdb7 trap_G2_HaveWeGhoul2Models +0 fffffdb8 trap_G2_ListModelSurfaces +0 fffffdb9 trap_G2_ListModelBones +0 fffffdba trap_PC_SourceFileAndLine +0 fffffdbb trap_PC_ReadToken +0 fffffdbc trap_PC_FreeSource +0 fffffdbd trap_PC_LoadSource +0 fffffdbe trap_AAS_PointReachabilityAreaIndex +0 fffffdbf trap_AAS_PredictRoute +0 fffffdc0 trap_AAS_AlternativeRouteGoals +0 fffffdc1 trap_BotAddAvoidSpot +0 fffffdc2 trap_BotSetAvoidGoalTime +0 fffffdc3 trap_BotPredictVisiblePosition +0 fffffdc4 trap_BotRemoveFromAvoidGoals +0 fffffdc5 trap_BotGetChatMessage +0 fffffdc6 trap_BotNumInitialChats +0 fffffdc7 trap_BotGetMapLocationGoal +0 fffffdc8 trap_BotGetNextCampSpotGoal +0 fffffdc9 trap_BotMutateGoalFuzzyLogic +0 fffffdca trap_BotInterbreedGoalFuzzyLogic +0 fffffdcb trap_GeneticParentsAndChildSelection +0 fffffdcc trap_BotResetWeaponState +0 fffffdcd trap_BotFreeWeaponState +0 fffffdce trap_BotAllocWeaponState +0 fffffdcf trap_BotLoadWeaponWeights +0 fffffdd0 trap_BotGetWeaponInfo +0 fffffdd1 trap_BotChooseBestFightWeapon +0 fffffdd2 trap_BotInitMoveState +0 fffffdd3 trap_BotFreeMoveState +0 fffffdd4 trap_BotAllocMoveState +0 fffffdd5 trap_BotMovementViewTarget +0 fffffdd6 trap_BotReachabilityArea +0 fffffdd7 trap_BotResetLastAvoidReach +0 fffffdd8 trap_BotResetAvoidReach +0 fffffdd9 trap_BotMoveInDirection +0 fffffdda trap_BotMoveToGoal +0 fffffddb trap_BotResetMoveState +0 fffffddc trap_BotFreeGoalState +0 fffffddd trap_BotAllocGoalState +0 fffffdde trap_BotSaveGoalFuzzyLogic +0 fffffddf trap_BotFreeItemWeights +0 fffffde0 trap_BotLoadItemWeights +0 fffffde1 trap_BotUpdateEntityItems +0 fffffde2 trap_BotInitLevelItems +0 fffffde3 trap_BotAvoidGoalTime +0 fffffde4 trap_BotGetLevelItemGoal +0 fffffde5 trap_BotItemGoalInVisButNotVisible +0 fffffde6 trap_BotTouchingGoal +0 fffffde7 trap_BotChooseNBGItem +0 fffffde8 trap_BotChooseLTGItem +0 fffffde9 trap_BotGetSecondGoal +0 fffffdea trap_BotGetTopGoal +0 fffffdeb trap_BotGoalName +0 fffffdec trap_BotDumpGoalStack +0 fffffded trap_BotDumpAvoidGoals +0 fffffdee trap_BotEmptyGoalStack +0 fffffdef trap_BotPopGoal +0 fffffdf0 trap_BotPushGoal +0 fffffdf1 trap_BotResetAvoidGoals +0 fffffdf2 trap_BotResetGoalState +0 fffffdf3 trap_BotSetChatName +0 fffffdf4 trap_BotSetChatGender +0 fffffdf5 trap_BotLoadChatFile +0 fffffdf6 trap_BotReplaceSynonyms +0 fffffdf7 trap_UnifyWhiteSpaces +0 fffffdf8 trap_BotMatchVariable +0 fffffdf9 trap_BotFindMatch +0 fffffdfa trap_StringContains +0 fffffdfb trap_BotEnterChat +0 fffffdfc trap_BotChatLength +0 fffffdfd trap_BotReplyChat +0 fffffdfe trap_BotInitialChat +0 fffffdff trap_BotNumConsoleMessages +0 fffffe00 trap_BotNextConsoleMessage +0 fffffe01 trap_BotRemoveConsoleMessage +0 fffffe02 trap_BotQueueConsoleMessage +0 fffffe03 trap_BotFreeChatState +0 fffffe04 trap_BotAllocChatState +0 fffffe05 trap_Characteristic_String +0 fffffe06 trap_Characteristic_BInteger +0 fffffe07 trap_Characteristic_Integer +0 fffffe08 trap_Characteristic_BFloat +0 fffffe09 trap_Characteristic_Float +0 fffffe0a trap_BotFreeCharacter +0 fffffe0b trap_BotLoadCharacter +0 fffffe56 trap_EA_ResetInput +0 fffffe57 trap_EA_GetInput +0 fffffe58 trap_EA_EndRegular +0 fffffe59 trap_EA_View +0 fffffe5a trap_EA_Move +0 fffffe5b trap_EA_DelayedJump +0 fffffe5c trap_EA_Jump +0 fffffe5d trap_EA_SelectWeapon +0 fffffe5e trap_EA_MoveRight +0 fffffe5f trap_EA_MoveLeft +0 fffffe60 trap_EA_MoveBack +0 fffffe61 trap_EA_MoveForward +0 fffffe62 trap_EA_MoveDown +0 fffffe63 trap_EA_MoveUp +0 fffffe64 trap_EA_Crouch +0 fffffe65 trap_EA_Respawn +0 fffffe66 trap_EA_Use +0 fffffe67 trap_EA_ForcePower +0 fffffe68 trap_EA_Alt_Attack +0 fffffe69 trap_EA_Attack +0 fffffe6a trap_EA_Talk +0 fffffe6b trap_EA_Gesture +0 fffffe6c trap_EA_Action +0 fffffe6d trap_EA_Command +0 fffffe6e trap_EA_SayTeam +0 fffffe6f trap_EA_Say +0 fffffec1 trap_AAS_PredictClientMovement +0 fffffec2 trap_AAS_Swimming +0 fffffec3 trap_AAS_AreaTravelTimeToGoalArea +0 fffffec4 trap_AAS_AreaReachability +0 fffffec5 trap_AAS_IntForBSPEpairKey +0 fffffec6 trap_AAS_FloatForBSPEpairKey +0 fffffec7 trap_AAS_VectorForBSPEpairKey +0 fffffec8 trap_AAS_ValueForBSPEpairKey +0 fffffec9 trap_AAS_NextBSPEntity +0 fffffeca trap_AAS_PointContents +0 fffffecb trap_AAS_TraceAreas +0 fffffecc trap_AAS_PointAreaNum +0 fffffecd trap_AAS_Time +0 fffffece trap_AAS_PresenceTypeBoundingBox +0 fffffecf trap_AAS_Initialized +0 fffffed0 trap_AAS_EntityInfo +0 fffffed1 trap_AAS_AreaInfo +0 fffffed2 trap_AAS_BBoxAreas +0 fffffed3 trap_AAS_EnableRoutingArea +0 ffffff2c trap_BotUserCommand +0 ffffff2d trap_BotGetServerCommand +0 ffffff2e trap_BotGetSnapshotEntity +0 ffffff2f trap_BotLibTest +0 ffffff30 trap_BotLibUpdateEntity +0 ffffff31 trap_BotLibLoadMap +0 ffffff32 trap_BotLibStartFrame +0 ffffff33 trap_BotLibDefine +0 ffffff34 trap_BotLibVarGet +0 ffffff35 trap_BotLibVarSet +0 ffffff36 trap_BotLibShutdown +0 ffffff37 trap_BotLibSetup +0 ffffff8c asin +0 ffffff8d acos +0 ffffff90 ceil +0 ffffff91 floor +0 ffffff92 perpendicularvector +0 ffffff93 anglevectors +0 ffffff94 matrixmultiply +0 ffffff95 sqrt +0 ffffff96 atan2 +0 ffffff97 cos +0 ffffff98 sin +0 ffffff99 strncpy +0 ffffff9a memcpy +0 ffffff9b memset +0 ffffffcc trap_ROFF_Purge_Ent +0 ffffffcd trap_ROFF_Play +0 ffffffce trap_ROFF_Cache +0 ffffffcf trap_ROFF_UpdateEntities +0 ffffffd0 trap_ROFF_Clean +0 ffffffd1 trap_SP_GetStringTextString +0 ffffffd2 trap_SP_RegisterServer +0 ffffffd3 trap_EntityContactCapsule +0 ffffffd4 trap_TraceCapsule +0 ffffffd5 trap_SnapVector +0 ffffffd6 trap_RealTime +0 ffffffd7 trap_DebugPolygonDelete +0 ffffffd8 trap_DebugPolygonCreate +0 ffffffd9 trap_FS_GetFileList +0 ffffffda trap_GetEntityToken +0 ffffffdb trap_GetUsercmd +0 ffffffdc trap_BotFreeClient +0 ffffffdd trap_BotAllocateClient +0 ffffffde trap_EntityContact +0 ffffffdf trap_EntitiesInBox +0 ffffffe0 trap_UnlinkEntity +0 ffffffe1 trap_LinkEntity +0 ffffffe2 trap_AreasConnected +0 ffffffe3 trap_AdjustAreaPortalState +0 ffffffe4 trap_InPVSIgnorePortals +0 ffffffe5 trap_InPVS +0 ffffffe6 trap_PointContents +0 ffffffe7 trap_Trace +0 ffffffe8 trap_SetBrushModel +0 ffffffe9 trap_GetServerinfo +0 ffffffea trap_SetUserinfo +0 ffffffeb trap_GetUserinfo +0 ffffffec trap_GetConfigstring +0 ffffffed trap_SetConfigstring +0 ffffffee trap_SendServerCommand +0 ffffffef trap_DropClient +0 fffffff0 trap_LocateGameData +0 fffffff1 trap_SendConsoleCommand +0 fffffff2 trap_FS_FCloseFile +0 fffffff3 trap_FS_Write +0 fffffff4 trap_FS_Read +0 fffffff5 trap_FS_FOpenFile +0 fffffff6 trap_Argv +0 fffffff7 trap_Argc +0 fffffff8 trap_Cvar_VariableStringBuffer +0 fffffff9 trap_Cvar_VariableIntegerValue +0 fffffffa trap_Cvar_Set +0 fffffffb trap_Cvar_Update +0 fffffffc trap_Cvar_Register +0 fffffffd trap_Milliseconds +0 fffffffe trap_Error +0 ffffffff trap_Printf +0 0 vmMain +0 a5 G_Printf +0 be G_Error +0 d7 G_FindTeams +0 1db G_RemapTeamShaders +0 1de G_RegisterCvars +0 252 G_UpdateCvars +0 2c6 G_InitGame +0 42d G_ShutdownGame +0 465 Com_Error +0 480 Com_Printf +0 49b AddTournamentPlayer +0 514 RemoveTournamentLoser +0 53b RemoveTournamentWinner +0 562 AdjustTournamentScores +0 5c8 SortRanks +0 69d CalculateRanks +0 94d SendScoreboardMessageToAllClients +0 976 MoveClientToIntermission +0 9e6 FindIntermissionPoint +0 a54 BeginIntermission +0 ac7 DuelLimitHit +0 afe DuelResetWinsLosses +0 b2f ExitLevel +0 bbc G_LogPrintf +0 c28 LogExit +0 d11 CheckIntermissionExit +0 e86 ScoreIsTied +0 ecf CheckExitRules +0 103a CheckTournament +0 115d CheckVote +0 1241 PrintTeam +0 126c SetLeader +0 132f CheckTeamLeader +0 13c7 CheckTeamVote +0 14c0 CheckCvars +0 14ed G_RunThink +0 1526 G_RunFrame +0 170d G_GetStripEdString +0 171e BotStraightTPOrderCheck +0 1788 BotSelectWeapon +0 179a BotReportStatus +0 17f9 BotOrder +0 1994 BotMindTricked +0 1a0b BotAI_Print +0 1a0e IsTeamplay +0 1a1b BotAI_GetClientState +0 1a4c BotAI_GetEntityState +0 1a91 BotAI_GetSnapshotEntity +0 1ac2 BotEntityInfo +0 1ace NumBots +0 1ad4 AngleDifference +0 1afc BotChangeViewAngle +0 1b68 BotChangeViewAngles +0 1d07 BotInputToUserCommand +0 1fb3 BotUpdateInput +0 2076 BotAIRegularUpdate +0 2087 RemoveColorEscapeSequences +0 20fb BotAI +0 224c BotScheduleBotThink +0 228a PlayersInGame +0 22cb BotAISetupClient +0 23eb BotAIShutdownClient +0 243a BotResetState +0 2525 BotAILoadMap +0 255f OrgVisible +0 2585 WPOrgVisible +0 261a OrgVisibleBox +0 264a CheckForFunc +0 269d GetNearestVisibleWP +0 2763 PassWayCheck +0 27fd TotalTrailDistance +0 28d6 CheckForShorterRoutes +0 2a28 WPConstantRoutine +0 2b82 BotCTFGuardDuty +0 2b9e WPTouchRoutine +0 2d65 MoveTowardIdealAngles +0 2d75 BotTrace_Strafe +0 2f13 BotTrace_Jump +0 304c BotTrace_Duck +0 3130 PassStandardEnemyChecks +0 3305 BotDamageNotification +0 3406 BotCanHear +0 3504 UpdateEventTracker +0 3567 InFieldOfVision +0 35e9 PassLovedOneCheck +0 36b9 ScanForEnemies +0 38cb WaitingForNow +0 39a1 BotGetWeaponRange +0 39f1 BotIsAChickenWuss +0 3aeb GetNearestBadThing +0 3d9a BotDefendFlag +0 3e0f BotGetEnemyFlag +0 3e84 BotGetFlagBack +0 3f7c BotGuardFlagCarrier +0 4074 BotGetFlagHome +0 40e9 GetNewFlagPoint +0 4200 CTFTakesPriority +0 450b EntityVisibleBox +0 4548 Saga_TargetClosestObjective +0 476c Saga_DefendFromAttackers +0 4862 Saga_CountDefenders +0 48c8 Saga_CountTeammates +0 4919 SagaTakesPriority +0 4c31 JMTakesPriority +0 4d18 BotHasAssociated +0 4dd7 GetBestIdleGoal +0 4ec2 GetIdealDestination +0 5481 CommanderBotCTFAI +0 5757 CommanderBotSagaAI +0 5882 BotDoTeamplayAI +0 58ad CommanderBotTeamplayAI +0 5a54 CommanderBotAI +0 5a7d MeleeCombatHandling +0 5bdb SaberCombatHandling +0 5f8b BotWeaponCanLead +0 5fcf BotAimLeading +0 6126 BotAimOffsetGoalAngles +0 6328 ShouldSecondaryFire +0 6430 CombatBotAI +0 6612 BotFallbackNavigation +0 66b5 BotTryAnotherWeapon +0 6735 BotWeaponSelectable +0 676b BotSelectIdealWeapon +0 6909 BotSelectChoiceWeapon +0 6997 BotSelectMelee +0 69c8 GetLoveLevel +0 6a5d BotLovedOneDied +0 6baa BotDeathNotify +0 6c30 StrafeTracing +0 6d16 PrimFiring +0 6d47 KeepPrimFromFiring +0 6d7c AltFiring +0 6dad KeepAltFromFiring +0 6de2 CheckForFriendInLOF +0 6ea9 BotScanForLeader +0 6f39 BotReplyGreetings +0 6fa8 CTFFlagMovement +0 718a BotCheckDetPacks +0 72d0 BotUseInventoryItem +0 73aa BotSurfaceNear +0 740f BotWeaponBlockable +0 7444 StandardBotAI +0 930f BotAIStartFrame +0 940d BotAISetup +0 9497 BotAIShutdown +0 94d5 B_TempAlloc +0 94e2 B_TempFree +0 94eb B_Alloc +0 94f8 B_Free +0 94fb B_InitAlloc +0 9507 B_CleanupAlloc +0 950a GetValueGroup +0 9605 GetPairedValue +0 97ab BotDoChat +0 9a78 ParseEmotionalAttachments +0 9bbb ReadChatGroups +0 9c4b BotUtilizePersonality +0 a0ef GetFlagStr +0 a3ea G_TestLine +0 a424 BotWaypointRender +0 a652 TransferWPData +0 a776 CreateNewWP +0 a814 CreateNewWP_FromObject +0 a97f RemoveWP +0 a9d5 RemoveWP_InTrail +0 aaba CreateNewWP_InTrail +0 ac09 TeleportToWP +0 ac8f WPFlagsModify +0 acce NotWithinRange +0 ad03 NodeHere +0 ad95 CanGetToVector +0 adc4 CanGetToVectorTravel +0 aee8 ConnectTrail +0 b4f9 OpposingEnds +0 b577 DoorBlockingSection +0 b65a RepairPaths +0 b78c OrgVisibleCurve +0 b7ec CanForceJumpTo +0 b8d7 CalculatePaths +0 bb51 GetObjectThatTargets +0 bb80 CalculateSagaGoals +0 bcad GetNearestVisibleWPToItem +0 bd99 CalculateWeightGoals +0 bf69 CalculateJumpRoutes +0 c08d LoadPathData +0 c434 FlagObjects +0 c660 SavePathData +0 c9a1 LoadPath_ThisLevel +0 ca3c GetClosestSpawn +0 cada GetNextSpawnInIndex +0 cb7e AcceptBotCommand +0 cff1 swapfunc +0 d078 med3 +0 d0fb qsort +0 d4b4 strlen +0 d4cf strcat +0 d512 strcpy +0 d547 strcmp +0 d580 strchr +0 d59f strstr +0 d5e5 tolower +0 d5fd toupper +0 d615 memmove +0 d65c tan +0 d673 srand +0 d67a rand +0 d68f atof +0 d754 _atof +0 d81f atoi +0 d897 _atoi +0 d919 abs +0 d92e fabs +0 d943 AddInt +0 da1e AddFloat +0 db2c AddString +0 dbc3 vsprintf +0 dd5b sscanf +0 ddc6 BG_LegalizedForcePowers +0 e193 vectoyaw +0 e1ed BG_HasYsalamiri +0 e21c BG_CanUseFPNow +0 e283 BG_FindItemForPowerup +0 e2bf BG_FindItemForHoldable +0 e2f9 BG_FindItemForWeapon +0 e32c BG_FindItem +0 e355 BG_PlayerTouchesItem +0 e3b5 BG_ProperForceIndex +0 e3d8 BG_CycleForce +0 e4b0 BG_GetItemIndexByTag +0 e4e0 BG_CycleInven +0 e54c BG_CanItemBeGrabbed +0 e749 BG_EvaluateTrajectory +0 e917 BG_EvaluateTrajectoryDelta +0 ea11 BG_AddPredictableEventToPlayerstate +0 ea4c BG_TouchJumpPad +0 eab0 BG_PlayerStateToEntityState +0 edbb BG_PlayerStateToEntityStateExtraPolate +0 f0d3 BG_SwingAngles +0 f1d8 BG_AddPainTwitch +0 f219 BG_G2PlayerAngles +0 f3b6 BG_Alloc +0 f3f6 BG_AllocUnaligned +0 f429 BG_TempAlloc +0 f461 BG_TempFree +0 f48e BG_StringAlloc +0 f4b1 BG_OutOfMemory +0 f4c3 PM_GetSaberStance +0 f4e0 PM_DoSlowFall +0 f503 PM_AddEvent +0 f512 PM_AddEventWithParm +0 f522 PM_AddTouchEnt +0 f577 PM_ClipVelocity +0 f5f0 PM_Friction +0 f6ec PM_Accelerate +0 f768 PM_CmdScale +0 f7ff PM_SetMovementDir +0 f94b PM_ForceJumpingUp +0 fa0a PM_JumpForDir +0 faad PM_SetPMViewAngle +0 faee PM_AdjustAngleForWallRun +0 fcf2 PM_CheckJump +0 10a8e PM_CheckWaterJump +0 10b75 PM_WaterJumpMove +0 10bb6 PM_WaterMove +0 10ce7 PM_FlyMove +0 10d72 PM_AirMove +0 10e35 PM_WalkMove +0 110d7 PM_DeadMove +0 11150 PM_NoclipMove +0 112c2 PM_FootstepForSurface +0 112db PM_TryRoll +0 114ec PM_CrashLand +0 117fd PM_CorrectAllSolid +0 118e4 PM_GroundTraceMissed +0 11a4f PM_GroundTrace +0 11be2 PM_SetWaterLevel +0 11caf PM_CheckDuck +0 11e85 PM_Use +0 11ece PM_RunningAnim +0 11efc PM_Footsteps +0 12173 PM_WaterEvents +0 121ca PM_BeginWeaponChange +0 12230 PM_FinishWeaponChange +0 12283 PM_DoChargedWeapons +0 1275d PM_ItemUsable +0 12988 PM_Weapon +0 132b5 PM_Animate +0 13313 PM_DropTimers +0 1339d PM_UpdateViewAngles +0 13441 PM_AdjustAttackStates +0 137b9 BG_CmdForRoll +0 1380e BG_AdjustClientSpeed +0 13bc1 PmoveSingle +0 14037 Pmove +0 140e3 BG_InSpecialJump +0 14108 BG_InSaberStandAnim +0 1412e BG_DirectFlippingAnim +0 1414d BG_SaberInAttack +0 1417a BG_SaberInSpecial +0 14197 BG_SaberInIdle +0 141b4 BG_FlippingAnim +0 141fc BG_SpinningSaberAnim +0 14314 BG_SaberInSpecialAttack +0 1433d BG_InRoll +0 14363 BG_InDeathAnim +0 14388 PM_SaberInParry +0 1439d PM_SaberInReflect +0 143b2 PM_SaberInStart +0 143c7 PM_InSaberAnim +0 143de PM_InKnockDown +0 1440b PM_PainAnim +0 1442a PM_JumpingAnim +0 14449 PM_LandingAnim +0 14490 PM_SpinningAnim +0 1449d PM_InOnGroundAnim +0 144fa PM_InRollComplete +0 14520 PM_AnimLength +0 1454d PM_DebugLegsAnim +0 14598 BG_ParseAnimationFile +0 14710 PM_StartLegsAnim +0 14795 PM_ContinueLegsAnim +0 147b5 PM_ForceLegsAnim +0 14825 PM_StartTorsoAnim +0 14880 PM_SetLegsAnimTimer +0 1489e PM_SetTorsoAnimTimer +0 148bc BG_SaberStartTransAnim +0 1490b PM_SetAnimFinal +0 14b47 PM_SetAnim +0 14bc0 PM_SlideMove +0 14fb0 PM_StepSlideMove +0 152ff PM_irand_timesync +0 15334 BG_ForcePowerDrain +0 153f2 PM_AttackMoveForQuad +0 15427 PM_SaberAnimTransitionAnim +0 1550c PM_SaberMoveQuadrantForMovement +0 15571 PM_SaberInBounce +0 15596 PM_SaberInTransition +0 155ab PM_SaberKataDone +0 155f1 PM_SetAnimFrame +0 155fb PM_SaberLockBreak +0 158c4 PM_SaberLocked +0 15ae8 PM_SaberInBrokenParry +0 15afd PM_BrokenParryForParry +0 15b3f PM_CanBackstab +0 15bc0 PM_SaberFlipOverAttackMove +0 15cc1 PM_SomeoneInFront +0 15d51 PM_SaberLungeAttackMove +0 15d9b PM_SaberJumpAttackMove +0 15e08 PM_GroundDistance +0 15e71 PM_SaberAttackForMovement +0 15fc5 PM_WeaponLightsaber +0 167cd PM_SetSaberMove +0 1699a P_SetTwitchInfo +0 169b2 P_DamageFeedback +0 16abc P_WorldEffects +0 16c63 DoImpact +0 16edd G_SetClientSound +0 16f0e ClientImpacts +0 16fb1 G_TouchTriggers +0 17193 G_MoverTouchPushTriggers +0 17343 SpectatorThink +0 173ea ClientInactivityTimer +0 1748c ClientTimerActions +0 174ee ClientIntermissionThink +0 17549 ClientEvents +0 176e1 SendPendingPredictableEvents +0 17788 G_UpdateForceSightBroadcasts +0 17868 G_UpdateJediMasterBroadcasts +0 1794a G_UpdateClientBroadcasts +0 17965 ClientThink_real +0 18611 G_CheckClientTimeouts +0 1863e ClientThink +0 18679 G_RunClient +0 186a0 SpectatorClientEndFrame +0 18777 ClientEndFrame +0 1884f UpdateTournamentInfo +0 18a34 trap_Cvar_VariableValue +0 18a4a G_ParseInfos +0 18b38 G_LoadArenasFromFile +0 18bb8 G_GetMapTypeBits +0 18c5a G_DoesMapSupportGametype +0 18ced G_RefreshNextMap +0 18dfa G_LoadArenas +0 18eac G_GetArenaInfoByMap +0 18ee7 PlayerIntroSound +0 18f38 G_AddRandomBot +0 190a5 G_RemoveRandomBot +0 19111 G_CountHumanPlayers +0 19164 G_CountBotPlayers +0 191e1 G_CheckMinimumPlayers +0 1935e G_CheckBotSpawn +0 193be AddBotToSpawnQueue +0 193fb G_RemoveQueuedBotBegin +0 1941f G_BotConnect +0 19481 G_AddBot +0 1979a Svcmd_AddBot_f +0 19831 Svcmd_BotList_f +0 198e5 G_SpawnBots +0 19997 G_LoadBotsFromFile +0 19a17 G_LoadBots +0 19aa4 G_GetBotInfoByNumber +0 19acf G_GetBotInfoByName +0 19b0e G_InitBots +0 19c00 SP_info_player_deathmatch +0 19c39 SP_info_player_start +0 19c48 SP_info_player_imperial +0 19c5b SP_info_player_rebel +0 19c6e SP_info_player_intermission +0 19c71 ThrowSaberToAttacker +0 19e38 JMSaberThink +0 19f33 JMSaberTouch +0 1a0b3 SP_info_jedimaster_start +0 1a16d SpotWouldTelefrag +0 1a1ee SelectNearestDeathmatchSpawnPoint +0 1a252 SelectRandomDeathmatchSpawnPoint +0 1a2b2 SelectRandomFurthestSpawnPoint +0 1a422 SelectSpawnPoint +0 1a435 SelectInitialSpawnPoint +0 1a49a SelectSpectatorSpawnPoint +0 1a4aa InitBodyQue +0 1a4da BodySink +0 1a50c CopyToBodyQue +0 1a6f8 SetClientViewAngle +0 1a750 respawn +0 1a786 TeamCount +0 1a7c7 TeamLeader +0 1a808 PickTeam +0 1a842 ClientCleanName +0 1a937 SetupGameGhoul2Model +0 1aae6 ClientUserinfoChanged +0 1adc2 ClientConnect +0 1af17 ClientBegin +0 1b1dc ClientSpawn +0 1b6ec ClientDisconnect +0 1b879 DeathmatchScoreboardMessage +0 1b9b2 Cmd_Score_f +0 1b9bb CheatsOk +0 1ba0f ConcatArgs +0 1ba7a SanitizeString +0 1bacc ClientNumberFromString +0 1bb98 Cmd_Give_f +0 1be44 Cmd_God_f +0 1be89 Cmd_Notarget_f +0 1bece Cmd_Noclip_f +0 1bf21 Cmd_LevelShot_f +0 1bf52 Cmd_TeamTask_f +0 1bfa9 Cmd_Kill_f +0 1c027 G_GetDuelWinner +0 1c06c BroadcastTeamChange +0 1c142 SetTeam +0 1c3bb StopFollowing +0 1c413 Cmd_Team_f +0 1c523 Cmd_ForceChanged_f +0 1c58b Cmd_Follow_f +0 1c625 Cmd_FollowCycle_f +0 1c6ca G_SayTo +0 1c75b G_Say +0 1c8bd Cmd_Say_f +0 1c8f6 Cmd_Tell_f +0 1c9a0 G_VoiceTo +0 1ca16 G_Voice +0 1ca7a Cmd_Voice_f +0 1cab6 Cmd_VoiceTell_f +0 1cb66 Cmd_VoiceTaunt_f +0 1cd25 Cmd_GameCommand_f +0 1cd9a Cmd_Where_f +0 1cdbc Cmd_CallVote_f +0 1d103 Cmd_Vote_f +0 1d201 Cmd_CallTeamVote_f +0 1d56f Cmd_TeamVote_f +0 1d6a6 Cmd_SetViewpos_f +0 1d73e Cmd_Stats_f +0 1d741 G_ItemUsable +0 1d976 Cmd_ToggleSaber_f +0 1da1a Cmd_SaberAttackCycle_f +0 1da8a G_OtherPlayersDueling +0 1dad1 Cmd_EngageDuel_f +0 1dddf ClientCommand +0 1e31c ObjectDie +0 1e335 G_GetHitLocation +0 1e58b ExplodeDeath +0 1e61d ScorePlum +0 1e652 AddScore +0 1e694 TossClientWeapon +0 1e830 TossClientItems +0 1e938 LookAtKiller +0 1ea0a GibEntity +0 1ea2a BodyRid +0 1ea39 body_die +0 1eae2 CheckAlmostCapture +0 1eae5 G_PickDeathAnim +0 1ed63 G_GetJediMaster +0 1edab player_die +0 1f4b3 CheckArmor +0 1f537 G_ApplyKnockback +0 1f6ce RaySphereIntersections +0 1f878 LimbTouch +0 1f87b LimbThink +0 1f8f1 G_GetDismemberBolt +0 1fa5a G_Dismember +0 1fc51 G_GetHitQuad +0 1fd15 G_CheckForDismemberment +0 1fda7 G_ThereIsAMaster +0 1fde2 G_Damage +0 20722 CanDamage +0 2084d G_RadiusDamage +0 209ca adjustRespawnTime +0 20a2b ShieldRemove +0 20a4e ShieldThink +0 20a7b ShieldDie +0 20a8f ShieldPain +0 20ab2 ShieldGoSolid +0 20b53 ShieldGoNotSolid +0 20b96 ShieldTouch +0 20bf2 CreateShield +0 20e5d PlaceShield +0 21028 ItemUse_Binoculars +0 2109d ItemUse_Shield +0 210a6 SentryTouch +0 210a9 pas_fire +0 21125 G_SetEnemy +0 21138 pas_find_enemies +0 212d5 pas_adjust_enemy +0 213a4 sentryExpire +0 213bb pas_think +0 217b0 turret_die +0 21858 SP_PAS +0 218e3 ItemUse_Sentry +0 21aaa ItemUse_Seeker +0 21ad8 ItemUse_MedPack +0 21b60 Pickup_Powerup +0 21ce8 Pickup_Holdable +0 21d42 Add_Ammo +0 21d98 Pickup_Ammo +0 21de3 Pickup_Weapon +0 21ee0 Pickup_Health +0 21f80 Pickup_Armor +0 21fec RespawnItem +0 220cd Touch_Item +0 22454 LaunchItem +0 225bd Drop_Item +0 22620 Use_Item +0 22629 FinishSpawningItem +0 228cf G_CheckTeamItems +0 22925 ClearRegisteredItems +0 22955 RegisterItem +0 2296d SaveRegisteredItems +0 229b5 G_ItemDisabled +0 229ce G_SpawnItem +0 22a30 G_BounceItem +0 22c25 G_RunItem +0 22cf3 G_LogWeaponInit +0 22d50 G_LogWeaponPickup +0 22d70 G_LogWeaponFire +0 22dd6 G_LogWeaponDamage +0 22dfd G_LogWeaponKill +0 22e23 G_LogWeaponFrag +0 22e52 G_LogWeaponDeath +0 22e78 G_LogWeaponPowerup +0 22e9e G_LogWeaponItem +0 22ec4 G_LogWeaponOutput +0 23d5c CalculateEfficiency +0 23dea CalculateSharpshooter +0 23e74 CalculateUntouchable +0 23ebf CalculateLogistics +0 23f98 CalculateTactician +0 2410e CalculateDemolitionist +0 241ed CalculateStreak +0 241f2 CalculateTeamMVP +0 24268 CalculateTeamMVPByRank +0 242f6 CalculateTeamDefender +0 2436c CalculateTeamWarrior +0 243e2 CalculateTeamCarrier +0 24458 CalculateTeamInterceptor +0 244db CalculateTeamRedShirt +0 2455e CalculateTeamAward +0 245d9 CalculateSection31Award +0 24635 CalculateAwards +0 247d6 GetMaxDeathsForClient +0 2481c GetMaxKillsForClient +0 24862 GetFavoriteTargetForClient +0 248af GetWorstEnemyForClient +0 24912 GetFavoriteWeaponForClient +0 2499a G_ClearClientLog +0 24ab4 G_Alloc +0 24aff G_InitMemory +0 24b05 Svcmd_GameMem_f +0 24b12 SP_info_camp +0 24b24 SP_info_null +0 24b2d SP_info_notnull +0 24b3f SP_light +0 24b48 TeleportPlayer +0 24c73 SP_misc_teleporter_dest +0 24c76 SP_misc_model +0 24c7f SP_misc_G2model +0 24c88 locateCamera +0 24d67 SP_misc_portal_surface +0 24dd9 SP_misc_portal_camera +0 24e2f HolocronRespawn +0 24e42 HolocronPopOut +0 24ebb HolocronTouch +0 2502f HolocronThink +0 252dc SP_misc_holocron +0 25486 Use_Shooter +0 25580 InitShooter_Finish +0 255a4 InitShooter +0 25612 SP_shooter_blaster +0 2561d check_recharge +0 2565c EnergyShieldStationSettings +0 25691 shield_power_converter_use +0 25795 SP_misc_shield_floor_unit +0 25901 SP_misc_model_shield_power_converter +0 259c7 EnergyAmmoStationSettings +0 259e3 ammo_power_converter_use +0 25ae5 SP_misc_model_ammo_power_converter +0 25b9e EnergyHealthStationSettings +0 25bba health_power_converter_use +0 25c63 SP_misc_model_health_power_converter +0 25d1c DmgBoxHit +0 25d1f DmgBoxUpdateSelf +0 25db6 DmgBoxAbsorb_Die +0 25dbf DmgBoxAbsorb_Pain +0 25dc8 CreateNewDamageBox +0 25e45 ATST_ManageDamageBoxes +0 26015 G_PlayerBecomeATST +0 2608c fx_runner_think +0 260da fx_runner_use +0 26123 fx_runner_link +0 26216 SP_fx_runner +0 26325 G_ReflectMissile +0 265bb G_DeflectMissile +0 266e6 G_BounceMissile +0 268ce G_ExplodeMissile +0 2699c G_RunStuckMissile +0 26a1d G_BounceProjectile +0 26adc CreateMissile +0 26bbf G_MissileImpact +0 2712e G_RunMissile +0 2734f G_TestEntityPosition +0 273d6 G_CreateRotationMatrix +0 273f8 G_TransposeMatrix +0 27439 G_RotatePoint +0 274a5 G_TryPushingEntity +0 27797 G_MoverPush +0 27ae4 G_MoverTeam +0 27c17 G_RunMover +0 27c48 SetMoverState +0 27d87 MatchTeam +0 27da7 ReturnToPos1 +0 27ddc Reached_BinaryMover +0 27ee5 Use_BinaryMover +0 2802a InitMover +0 281ba Blocked_Door +0 2830d Touch_DoorTriggerSpectator +0 283e6 Touch_DoorTrigger +0 28438 Think_SpawnNewDoorTrigger +0 2853a Think_MatchTeam +0 28550 SP_func_door +0 2876e Touch_Plat +0 287f2 Touch_PlatCenterTrigger +0 28833 SpawnPlatTrigger +0 28921 SP_func_plat +0 28a94 Touch_Button +0 28ab7 SP_func_button +0 28c24 Think_BeginMoving +0 28c34 Reached_Train +0 28d19 Think_SetupTrainTargets +0 28dd0 SP_path_corner +0 28df1 SP_func_train +0 28e86 SP_func_static +0 28eb9 SP_func_rotating +0 28f5f SP_func_bobbing +0 29011 SP_func_pendulum +0 290ca BreakableBrushDie +0 291ca BreakableBrushPain +0 291cd BrushThink +0 291f0 BreakableBrushUse +0 2921a SP_func_breakable +0 2938d GlassDie +0 29427 GlassDie_Old +0 29498 GlassPain +0 2949b GlassUse +0 29590 SP_func_glass +0 2961d func_wait_return_solid +0 296ad func_usable_think +0 296d3 func_usable_use +0 297a0 func_usable_pain +0 297bb func_usable_die +0 297d8 SP_func_usable +0 29881 pitch_roll_for_slope +0 29a0f G_BounceObject +0 29b4e G_RunObject +0 29dde G_StopObjectMoving +0 29e1d G_StartObjectMoving +0 29e7c InitSagaMode +0 29f58 UseSagaTarget +0 29fcf SagaBroadcast_OBJECTIVECOMPLETE +0 2a010 SagaBroadcast_ROUNDOVER +0 2a04a BroadcastObjectiveCompletion +0 2a091 AddSagaWinningTeamPoints +0 2a0ee SagaRoundComplete +0 2a148 SagaObjectiveCompleted +0 2a1aa StripTabs +0 2a1ea sagaTriggerUse +0 2a2f0 SP_info_saga_objective +0 2a343 G_WriteClientSessionData +0 2a3ab G_ReadSessionData +0 2a42f G_InitSessionData +0 2a50c G_InitWorldSession +0 2a52f G_WriteSessionData +0 2a56a G_SpawnString +0 2a5ae G_SpawnFloat +0 2a5d0 G_SpawnInt +0 2a5f2 G_SpawnVector +0 2a621 SP_item_botroam +0 2a624 G_CallSpawn +0 2a6a3 G_NewString +0 2a727 G_ParseField +0 2a80f G_SpawnGEntityFromSpawnVars +0 2a8fa G_AddSpawnVarToken +0 2a93b G_ParseSpawnVars +0 2a9cb SP_worldspawn +0 2abd8 G_SpawnEntitiesFromString +0 2ac01 StringToFilter +0 2acb4 UpdateIPBans +0 2ad0c G_FilterPacket +0 2adbf AddIP +0 2ae15 G_ProcessIPBans +0 2ae6b Svcmd_AddIP_f +0 2ae8b Svcmd_RemoveIP_f +0 2aef3 Svcmd_EntityList_f +0 2afad ClientForString +0 2b044 Svcmd_ForceTeam_f +0 2b07a ConsoleCommand +0 2b16a Use_Target_Give +0 2b1c4 SP_target_give +0 2b1cd Use_target_remove_powerups +0 2b219 SP_target_remove_powerups +0 2b222 Think_Target_Delay +0 2b235 Use_Target_Delay +0 2b287 SP_target_delay +0 2b2ba Use_Target_Score +0 2b2d2 SP_target_score +0 2b2e8 Use_Target_Print +0 2b36f SP_target_print +0 2b378 Use_Target_Speaker +0 2b3f7 SP_target_speaker +0 2b4d9 target_laser_think +0 2b635 target_laser_on +0 2b650 target_laser_off +0 2b65f target_laser_use +0 2b67e target_laser_start +0 2b70f SP_target_laser +0 2b721 target_teleporter_use +0 2b756 SP_target_teleporter +0 2b77d target_relay_use +0 2b80e SP_target_relay +0 2b817 target_kill_use +0 2b838 SP_target_kill +0 2b841 SP_target_position +0 2b853 target_location_linkup +0 2b8c3 SP_target_location +0 2b8e4 Team_InitGame +0 2b917 OtherTeam +0 2b92d TeamName +0 2b94a OtherTeamName +0 2b967 TeamColorString +0 2b984 PrintCTFMessage +0 2b9dc AddTeamScore +0 2ba67 OnSameTeam +0 2baaf Team_SetFlagStatus +0 2bb13 Team_CheckDroppedItem +0 2bb4d Team_ForceGesture +0 2bb92 Team_FragBonuses +0 2c0f1 Team_CheckHurtCarrier +0 2c187 Team_ResetFlag +0 2c1f1 Team_ResetFlags +0 2c206 Team_ReturnFlagSound +0 2c243 Team_TakeFlagSound +0 2c2b2 Team_CaptureFlagSound +0 2c2ef Team_ReturnFlag +0 2c312 Team_FreeEntity +0 2c346 Team_DroppedFlagThink +0 2c387 Team_TouchOurFlag +0 2c5df Team_TouchEnemyFlag +0 2c62f Pickup_Team +0 2c6a6 Team_GetLocation +0 2c720 Team_GetLocationMsg +0 2c787 SelectRandomTeamSpawnPoint +0 2c835 SelectCTFSpawnPoint +0 2c87a SelectSagaSpawnPoint +0 2c8bf SortClients +0 2c8ca TeamplayInfoMessage +0 2ca28 CheckTeamStatus +0 2cadd SP_team_CTF_redplayer +0 2cae0 SP_team_CTF_blueplayer +0 2cae3 SP_team_CTF_redspawn +0 2cae6 SP_team_CTF_bluespawn +0 2cae9 InitTrigger +0 2cb28 multi_wait +0 2cb31 multi_trigger +0 2ccec Use_Multi +0 2ccf8 Touch_Multi +0 2cd0d SP_trigger_multiple +0 2cd90 trigger_always_think +0 2cda6 SP_trigger_always +0 2cdb8 trigger_push_touch +0 2cdd0 AimAtTarget +0 2ced5 SP_trigger_push +0 2cf12 Use_target_push +0 2cf5d SP_target_push +0 2d014 trigger_teleporter_touch +0 2d06f SP_trigger_teleport +0 2d0b6 hurt_use +0 2d0f8 hurt_touch +0 2d297 SP_trigger_hurt +0 2d2fd func_timer_think +0 2d33b func_timer_use +0 2d35a SP_func_timer +0 2d3d4 AddRemap +0 2d443 BuildShaderStateConfig +0 2d489 G_FindConfigstringIndex +0 2d4f5 G_SkinIndex +0 2d508 G_ModelIndex +0 2d51b G_SoundIndex +0 2d52e G_EffectIndex +0 2d541 G_TeamCommand +0 2d57f G_Find +0 2d5ce G_RadiusList +0 2d6ee G_PickTarget +0 2d754 G_UseTargets +0 2d7f3 tv +0 2d821 vtos +0 2d85d G_SetMovedir +0 2d8b2 G_InitGentity +0 2d8da G_Spawn +0 2d988 G_EntitiesFree +0 2d9b3 G_SendG2KillQueue +0 2d9f7 G_KillG2Queue +0 2da25 G_FreeEntity +0 2dad0 G_TempEntity +0 2db1e GetTrackerEnt +0 2db54 G_SoundTempEntity +0 2dba8 G_KillBox +0 2dc74 G_AddPredictableEvent +0 2dc8f G_AddEvent +0 2dd08 G_PlayEffect +0 2dd30 G_ScreenShake +0 2dd80 G_MuteSound +0 2ddc4 G_Sound +0 2de97 G_SoundAtLoc +0 2deae G_EntitySound +0 2ded6 ValidUseTarget +0 2def3 TryUse +0 2df8f G_PointInBounds +0 2dfcf G_BoxInBounds +0 2e082 G_SetAngles +0 2e09a G_ClearTrace +0 2e0cb G_SetOrigin +0 2e10a DebugLine +0 2e20d G_ROFF_NotetrackCallback +0 2e2c0 touch_NULL +0 2e2c3 W_TraceSetStart +0 2e385 WP_FireBryarPistol +0 2e45b WP_FireTurretMissile +0 2e4b2 WP_FireGenericBlasterMissile +0 2e4fb WP_FireBlasterMissile +0 2e549 WP_FireEmplacedMissile +0 2e5ac WP_FireBlaster +0 2e603 WP_DisruptorMainFire +0 2e82d WP_DisruptorAltFire +0 2ebd6 WP_FireDisruptor +0 2ec0d WP_BowcasterAltFire +0 2ec97 WP_BowcasterMainFire +0 2eddc WP_FireBowcaster +0 2edf1 WP_RepeaterMainFire +0 2ee38 WP_RepeaterAltFire +0 2eeda WP_FireRepeater +0 2ef34 WP_DEMP2_MainFire +0 2efb0 DEMP2_AltRadiusDamage +0 2f1f4 DEMP2_AltDetonate +0 2f275 WP_DEMP2_AltFire +0 2f36e WP_FireDEMP2 +0 2f383 WP_FlechetteMainFire +0 2f468 prox_mine_think +0 2f4f6 WP_TraceSetStart +0 2f5ae WP_ExplosiveDie +0 2f5b7 WP_flechette_alt_blow +0 2f5d2 WP_CreateFlechetteBouncyThing +0 2f6a3 WP_FlechetteAltFire +0 2f71a WP_FireFlechette +0 2f72f rocketThink +0 2f9b0 WP_FireRocket +0 2fb10 thermalDetonatorExplode +0 2fbee thermalThinkStandard +0 2fc15 WP_FireThermalDetonator +0 2fda7 WP_DropThermal +0 2fdc7 laserTrapExplode +0 2fe51 laserTrapDelayedExplode +0 2fe99 touchLaserTrap +0 2ff00 laserTrapThink +0 2ffc7 laserTrapStick +0 300da TrapThink +0 300ec CreateLaserTrap +0 3028d WP_PlaceLaserTrap +0 303c1 VectorNPos +0 30428 charge_stick +0 30685 DetPackBlow +0 306ee DetPackPain +0 3070f DetPackDie +0 30730 drop_charge +0 308d3 BlowDetpacks +0 30942 CheatsOn +0 3094f WP_DropDetPack +0 30a91 WP_FireStunBaton +0 30bf6 SnapVectorTowards +0 30c3f LogAccuracyHit +0 30c8e CalcMuzzlePoint +0 30dc3 CalcMuzzlePointOrigin +0 30e4d FireWeapon +0 30fe0 WP_FireEmplaced +0 310e4 emplaced_gun_use +0 312dd emplaced_gun_realuse +0 312eb emplaced_gun_pain +0 312f5 emplaced_gun_update +0 315d9 emplaced_gun_die +0 315fa SP_emplaced_gun +0 31778 G_PreDefSound +0 31796 InFront +0 31810 WP_InitForcePowers +0 31d0c WP_SpawnInitForcePowers +0 31f49 ForcePowerUsableOn +0 32011 WP_ForcePowerAvailable +0 32063 WP_ForcePowerInUse +0 3207b WP_ForcePowerUsable +0 32154 WP_AbsorbConversion +0 321f7 WP_ForcePowerRegenerate +0 3224f WP_ForcePowerStart +0 32564 ForceHeal +0 32685 WP_AddToClientBitflags +0 326ea ForceTeamHeal +0 3292c ForceTeamForceReplenish +0 32b0a ForceGrip +0 32c4b ForceSpeed +0 32ccd ForceSeeing +0 32d3c ForceProtect +0 32dcf ForceAbsorb +0 32e62 ForceRage +0 32f0f ForceLightning +0 32f8d ForceLightningDamage +0 3309c ForceShootLightning +0 3338c ForceDrain +0 3340a ForceDrainDamage +0 335eb ForceShootDrain +0 3392e ForceJumpCharge +0 33a68 WP_GetVelocityForForceJump +0 33c1c ForceJump +0 33ced WP_AddAsMindtricked +0 33d52 ForceTelepathy +0 3418e GEntity_UseFunc +0 341a5 CanCounterThrow +0 3420f ForceThrow +0 34ef0 WP_ForcePowerStop +0 35131 DoGripAction +0 356d6 G_IsMindTricked +0 3573d RemoveTrickedEnt +0 357a6 WP_UpdateMindtrickEnts +0 358f0 WP_ForcePowerRun +0 35c47 WP_DoSpecificPower +0 35e5c FindGenericEnemyIndex +0 35f93 SeekerDroneUpdate +0 36375 HolocronUpdate +0 3650c JediMasterUpdate +0 3660a WP_ForcePowersUpdate +0 36fa3 Jedi_DodgeEvasion +0 3710a RandFloat +0 37124 SaberUpdateSelf +0 37219 SaberGotHit +0 37237 WP_SaberInitBladeData +0 372f0 G_G2ClientSpineAngles +0 3757b G_G2PlayerAngles +0 378d0 SaberAttacking +0 378ea WP_SabersCheckLock2 +0 37c8f WP_SabersCheckLock +0 38385 CheckSaberDamage +0 38c50 CheckThrownSaberDamaged +0 390ac saberCheckRadiusDamage +0 39117 saberMoveBack +0 3914d SaberBounceSound +0 39163 DeadSaberThink +0 39184 MakeDeadSaber +0 392d2 saberBackToOwner +0 3954f thrownSaberTouch +0 39624 saberFirstThrown +0 39933 WP_SaberPositionUpdate +0 3a276 WP_MissileBlockForBlock +0 3a2a4 WP_SaberBlockNonRandom +0 3a3b0 WP_SaberBlock +0 3a50f WP_SaberCanBlock +0 3a724 HasSetSaberOnly +0 3a76b Q_rand +0 3a780 Q_random +0 3a792 Q_crandom +0 3a7a3 VectorCompare +0 3a7db VectorLength +0 3a80e VectorLengthSquared +0 3a83a Distance +0 3a87b DistanceSquared +0 3a8c9 VectorNormalizeFast +0 3a928 VectorInverse +0 3a950 CrossProduct +0 3a9c9 ClampChar +0 3a9e0 ClampShort +0 3a9f7 DirToByte +0 3aa52 ByteToDir +0 3aa70 ColorBytes3 +0 3aadf ColorBytes4 +0 3ab71 NormalizeColor +0 3abe7 PlaneFromPoints +0 3aca5 RotatePointAroundVector +0 3adb0 RotateAroundDirection +0 3adf4 vectoangles +0 3aeb0 AnglesToAxis +0 3aee5 AxisClear +0 3af1c AxisCopy +0 3af40 ProjectPointOnPlane +0 3affb MakeNormalVectors +0 3b0a6 VectorRotate +0 3b143 Q_rsqrt +0 3b17a Q_fabs +0 3b18a LerpAngle +0 3b1bb AngleSubtract +0 3b1e0 AnglesSubtract +0 3b22e AngleMod +0 3b240 AngleNormalize360 +0 3b24e AngleNormalize180 +0 3b269 AngleDelta +0 3b279 SetPlaneSignbits +0 3b2a6 BoxOnPlaneSide +0 3b667 RadiusFromBounds +0 3b6ba ClearBounds +0 3b6f1 AddPointToBounds +0 3b78a VectorNormalize +0 3b7fa VectorNormalize2 +0 3b888 _VectorMA +0 3b8ca _DotProduct +0 3b8ff _VectorSubtract +0 3b938 _VectorAdd +0 3b971 _VectorCopy +0 3b998 _VectorScale +0 3b9c8 Vector4Scale +0 3ba0a Q_log2 +0 3ba29 MatrixMultiply +0 3bbfe AngleVectors +0 3bcf6 PerpendicularVector +0 3bd62 Rand_Init +0 3bd69 flrand +0 3bda4 irand +0 3bdd6 powf +0 3bdf9 GetIDForString +0 3be3e GetStringForID +0 3be7a Com_Clamp +0 3be94 COM_SkipPath +0 3beb8 COM_StripExtension +0 3beee COM_DefaultExtension +0 3bf36 ShortSwap +0 3bf56 ShortNoSwap +0 3bf61 LongSwap +0 3bf94 LongNoSwap +0 3bf9a Long64Swap +0 3bfd7 Long64NoSwap +0 3bfdf FloatSwap +0 3bff5 FloatNoSwap +0 3bffc COM_BeginParseSession +0 3c00e COM_GetCurrentParseLine +0 3c014 COM_Parse +0 3c023 COM_ParseError +0 3c043 COM_ParseWarning +0 3c063 SkipWhitespace +0 3c09a COM_Compress +0 3c1ed COM_ParseExt +0 3c339 COM_MatchToken +0 3c362 SkipBracedSection +0 3c3a0 SkipRestOfLine +0 3c3d8 Parse1DMatrix +0 3c417 Parse2DMatrix +0 3c452 Parse3DMatrix +0 3c497 Q_isprint +0 3c4ac Q_islower +0 3c4c1 Q_isupper +0 3c4d6 Q_isalpha +0 3c4f7 Q_strrchr +0 3c52b Q_strncpyz +0 3c566 Q_stricmpn +0 3c5f1 Q_strncmp +0 3c643 Q_stricmp +0 3c66b Q_strlwr +0 3c691 Q_strupr +0 3c6b7 Q_strcat +0 3c6e3 Q_PrintStrlen +0 3c733 Q_CleanStr +0 3c799 Com_sprintf +0 3c7d8 va +0 3c805 Info_ValueForKey +0 3c8e5 Info_NextPair +0 3c983 Info_RemoveKey +0 3ca53 Info_RemoveKey_Big +0 3cb23 Info_Validate +0 3cb4a Info_SetValueForKey +0 3cc1a Info_SetValueForKey_Big +0 3cce2 Q_irand +1 4 gDuelExit +1 8 gDuelist1 +1 c gDuelist2 +1 10 gameCvarTable +1 7f0 gameCvarTableSize +1 824 gDidDuelStuff +1 82c g_LastFrameTime +1 830 g_TimeSinceLastFrame +1 834 ctfStateNames +1 850 ctfStateDescriptions +1 868 sagaStateDescriptions +1 874 teamplayStateDescriptions +1 93c gWPRenderTime +1 940 gDeactivated +1 944 gBotEdit +1 948 gWPRenderedFrame +1 94c gWPNum +1 950 gLastPrintedIndex +1 954 gLevelFlags +1 958 botGlobalNavWeaponWeights +1 998 randSeed +1 a0c forceMasteryLevels +1 a2c forceMasteryPoints +1 a4c bgForcePowerCost +1 b6c forcePowerSorted +1 bb4 forcePowerDarkLight +1 bfc WeaponReadyAnim +1 c3c WeaponAttackAnim +1 c7c bg_itemlist +1 1538 bg_numItems +1 1590 eventnames +1 1768 bg_poolSize +1 176c bg_poolTail +1 1770 gPMDoSlowFall +1 1774 pm_stopspeed +1 1778 pm_duckScale +1 177c pm_swimScale +1 1780 pm_wadeScale +1 1784 pm_accelerate +1 1788 pm_airaccelerate +1 178c pm_wateraccelerate +1 1790 pm_flyaccelerate +1 1794 pm_friction +1 1798 pm_waterfriction +1 179c pm_flightfriction +1 17a0 pm_spectatorfriction +1 17a4 c_pmove +1 17a8 forceSpeedLevels +1 17b8 forcePowerNeeded +1 18d8 forceJumpHeight +1 18e8 forceJumpStrength +1 198c animTable +1 3fb4 BGPAFtextLoaded +1 3fb8 WP_MuzzlePoint +1 4078 weaponData +1 43f8 ammoData +1 4420 saberMoveData +1 5690 transitionMove +1 59bc playerMins +1 59c8 playerMaxs +1 59d4 gJMSaberEnt +1 59d8 g2SaberInstance +1 59f8 gc_orders +1 5a14 gameNames +1 5a50 modNames +1 5ca0 shieldLoopSound +1 5ca4 shieldAttachSound +1 5ca8 shieldActivateSound +1 5cac shieldDeactivateSound +1 5cb0 shieldDamageSound +1 5cf0 weaponFromMOD +1 5d88 weaponNameFromIndex +1 5df8 fields +1 5f78 spawns +1 61b4 defaultStyles +1 6334 precachedKyle +1 6370 remapCount +1 63a4 gG2KillNum +1 8404 speedLoopSound +1 8408 rageLoopSound +1 840c protectLoopSound +1 8410 absorbLoopSound +1 8414 seeLoopSound +1 8418 ysalamiriLoopSound +1 841c forcePowerMinRank +1 86b4 saberSpinSound +1 86b8 saberOffSound +1 86bc saberOnSound +1 86c0 saberHumSound +1 8748 vec3_origin +1 8754 axisDefault +1 8778 colorBlack +1 8788 colorRed +1 8798 colorGreen +1 87a8 colorBlue +1 87b8 colorYellow +1 87c8 colorMagenta +1 87d8 colorCyan +1 87e8 colorWhite +1 87f8 colorLtGrey +1 8808 colorMdGrey +1 8818 colorDkGrey +1 8828 colorLtBlue +1 8838 colorDkBlue +1 8848 g_color_table +1 88c8 bytedirs +1 9080 holdrand +2 ac10 ctfFlagStatusRemap +2 3c324c _stackStart +2 3d324c _stackEnd +3 0 g_listEntity +3 110 g_podiumDrop +3 220 g_podiumDist +3 330 g_statLogFile +3 440 g_statLog +3 550 g_logSync +3 660 g_log +3 770 g_MaxHolocronCarry +3 880 g_clients +3 e400 g_timeouttospec +3 e510 g_forceDodge +3 e620 g_dismember +3 e730 g_singlePlayer +3 e840 g_enableBreath +3 e950 g_enableDust +3 ea60 g_rankings +3 eb70 pmove_msec +3 ec80 pmove_fixed +3 ed90 g_smoothClients +3 eea0 g_blueteam +3 efb0 g_redteam +3 f0c0 g_debugUp +3 f1d0 g_debugRight +3 f2e0 g_debugForward +3 f3f0 g_filterBan +3 f500 g_banIPs +3 f610 g_teamForceBalance +3 f720 g_teamAutoJoin +3 f830 g_allowVote +3 f940 g_blood +3 fa50 g_doWarmup +3 fb60 g_warmup +3 fc70 g_motd +3 fd80 g_synchronousClients +3 fe90 g_adaptRespawn +3 ffa0 g_weaponTeamRespawn +3 100b0 g_weaponRespawn +3 101c0 g_debugDamage +3 102d0 g_debugAlloc +3 103e0 g_debugMove +3 104f0 g_inactivity +3 10600 g_forcerespawn +3 10710 g_quadfactor +3 10820 g_knockback +3 10930 g_speed +3 10a40 g_gravity +3 10b50 g_needpass +3 10c60 g_password +3 10d70 g_friendlySaber +3 10e80 g_friendlyFire +3 10f90 g_saberInterpolate +3 110a0 g_capturelimit +3 111b0 g_timelimit +3 112c0 g_duel_fraglimit +3 113d0 g_fraglimit +3 114e0 g_duelWeaponDisable +3 115f0 g_weaponDisable +3 11700 g_forcePowerDisable +3 11810 g_spawnInvulnerability +3 11920 g_forceRegenTime +3 11a30 g_saberLocking +3 11b40 g_privateDuel +3 11c50 g_forceBasedTeams +3 11d60 g_maxForceRank +3 11e70 g_dmflags +3 11f80 g_autoMapCycle +3 12090 g_restarted +3 121a0 g_maxGameClients +3 122b0 g_maxclients +3 123c0 g_cheats +3 124d0 g_dedicated +3 125e0 g_gametype +3 126f0 g_entities +3 e16f0 level +3 e3a78 g_ff_objectives +3 e3b94 droppedBlueFlag +3 e3b98 droppedRedFlag +3 e3b9c gBotEventTracker +3 e3d9c regularupdate_time +3 e3da0 numbots +3 e3da4 botstates +3 e3e24 floattime +3 e3e28 eFlagBlue +3 e3e2c eFlagRed +3 e3e30 oFlagBlue +3 e3e34 flagBlue +3 e3e38 oFlagRed +3 e3e3c flagRed +3 e3e40 bot_wp_visconnect +3 e3f50 bot_wp_distconnect +3 e4060 bot_wp_clearweight +3 e4170 bot_wp_edit +3 e4280 bot_wp_info +3 e4390 bot_camp +3 e44a0 bot_attachments +3 e45b0 bot_forgimmick +3 e46c0 bot_forcepowers +3 e47d0 gBotChatBuffer +3 1247d0 nodenum +3 1247d4 nodetable +3 1447d4 gWPArray +3 1487d4 bg_pool +3 33c7d4 pml +3 33cc60 pm +3 33cc64 BGPAFtext +3 3468a4 bgGlobalAnimations +3 34dfdc podium3 +3 34dfe0 podium2 +3 34dfe4 podium1 +3 34dfec bot_minplayers +3 34e0fc botSpawnQueue +3 34e17c g_arenaInfos +3 34f17c g_numArenas +3 34f180 g_botInfos +3 350180 g_numBots +3 350184 Client_Force +3 35408c itemRegistered +3 35448c G_WeaponLogItems +3 354c8c G_WeaponLogPowerups +3 35500c G_WeaponLogClientTouch +3 35508c G_WeaponLogLastTime +3 35510c G_WeaponLogTime +3 35590c G_WeaponLogFrags +3 35690c G_WeaponLogDeaths +3 35710c G_WeaponLogKills +3 35840c G_WeaponLogDamage +3 35970c G_WeaponLogFired +3 359f0c G_WeaponLogPickups +3 35a70c allocPoint +3 35a710 memoryPool +3 39a710 gExplSound +3 39a714 pushed_p +3 39a718 pushed +3 3a2718 imperial_attackers +3 3a271c rebel_attackers +3 3a2720 rebel_goals_completed +3 3a2724 rebel_goals_required +3 3a2728 imperial_goals_completed +3 3a272c imperial_goals_required +3 3a2730 saga_round_over +3 3a2734 saga_valid +3 3a2738 saga_info +3 3a4738 numIPFilters +3 3a473c ipFilters +3 3a673c teamgame +3 3a6758 gTrigFallSound +3 3a7cfc gG2KillIndex +3 3a7dfc remappedShaders +3 3abffc ent_list +3 3acffc muzzle +3 3ad008 up +3 3ad014 right +3 3ad020 forward +3 3ad02c s_quadFactor +3 3c2a48 com_lines +3 3c2a4c com_parsename +3 3c2e4c com_token diff --git a/CODE-mp/base/vm/ui.map b/CODE-mp/base/vm/ui.map new file mode 100644 index 0000000..08c7fa5 --- /dev/null +++ b/CODE-mp/base/vm/ui.map @@ -0,0 +1,1011 @@ +0 ffffff35 trap_G2API_SetBoneAngles +0 ffffff36 trap_SP_GetStringTextString +0 ffffff37 trap_SP_Register +0 ffffff8c matrixmultiply +0 ffffff8d asin +0 ffffff8e acos +0 ffffff91 ceil +0 ffffff92 perpendicularvector +0 ffffff93 anglevectors +0 ffffff94 floor +0 ffffff95 sqrt +0 ffffff96 atan2 +0 ffffff97 cos +0 ffffff98 sin +0 ffffff99 strncpy +0 ffffff9a memcpy +0 ffffff9b memset +0 ffffffa3 trap_LAN_CompareServers +0 ffffffa4 trap_LAN_ServerIsVisible +0 ffffffa5 trap_LAN_GetServerPing +0 ffffffa6 trap_LAN_ServerStatus +0 ffffffa7 trap_R_RemapShader +0 ffffffa8 trap_CIN_SetExtents +0 ffffffa9 trap_CIN_DrawCinematic +0 ffffffaa trap_CIN_RunCinematic +0 ffffffab trap_CIN_StopCinematic +0 ffffffac trap_CIN_PlayCinematic +0 ffffffad trap_LAN_RemoveServer +0 ffffffae trap_LAN_AddServer +0 ffffffaf trap_LAN_SaveCachedServers +0 ffffffb0 trap_LAN_LoadCachedServers +0 ffffffb1 trap_LAN_ResetPings +0 ffffffb2 trap_LAN_UpdateVisiblePings +0 ffffffb3 trap_LAN_MarkServerVisible +0 ffffffb4 trap_LAN_GetServerInfo +0 ffffffb5 trap_LAN_GetServerAddressString +0 ffffffb6 trap_LAN_GetServerCount +0 ffffffb7 trap_RealTime +0 ffffffb8 trap_S_StartBackgroundTrack +0 ffffffb9 trap_S_StopBackgroundTrack +0 ffffffba trap_PC_RemoveAllGlobalDefines +0 ffffffbb trap_PC_LoadGlobalDefines +0 ffffffbc trap_PC_SourceFileAndLine +0 ffffffbd trap_PC_ReadToken +0 ffffffbe trap_PC_FreeSource +0 ffffffbf trap_PC_LoadSource +0 ffffffc0 trap_PC_AddGlobalDefine +0 ffffffc1 trap_R_ModelBounds +0 ffffffc2 trap_AnyLanguage_ReadCharFromString +0 ffffffc3 trap_R_Font_DrawString +0 ffffffc4 trap_R_Font_HeightPixels +0 ffffffc5 trap_R_Font_StrLenChars +0 ffffffc6 trap_R_Font_StrLenPixels +0 ffffffc7 trap_R_RegisterFont +0 ffffffc8 trap_VerifyCDKey +0 ffffffc9 trap_SetCDKey +0 ffffffca trap_GetCDKey +0 ffffffcb trap_MemoryRemaining +0 ffffffcc trap_Cvar_Update +0 ffffffcd trap_Cvar_Register +0 ffffffce trap_LAN_GetPingInfo +0 ffffffcf trap_LAN_GetPing +0 ffffffd0 trap_LAN_ClearPing +0 ffffffd1 trap_LAN_GetPingQueueCount +0 ffffffd2 trap_GetConfigString +0 ffffffd3 trap_GetClientState +0 ffffffd4 trap_GetGlconfig +0 ffffffd5 trap_GetClipboardData +0 ffffffd6 trap_Key_SetCatcher +0 ffffffd7 trap_Key_GetCatcher +0 ffffffd8 trap_Key_ClearStates +0 ffffffd9 trap_Key_SetOverstrikeMode +0 ffffffda trap_Key_GetOverstrikeMode +0 ffffffdb trap_Key_IsDown +0 ffffffdc trap_Key_SetBinding +0 ffffffdd trap_Key_GetBindingBuf +0 ffffffde trap_Key_KeynumToStringBuf +0 ffffffdf trap_S_StartLocalSound +0 ffffffe0 trap_S_RegisterSound +0 ffffffe2 trap_CM_LerpTag +0 ffffffe3 trap_UpdateScreen +0 ffffffe4 trap_R_DrawStretchPic +0 ffffffe5 trap_R_SetColor +0 ffffffe6 trap_R_RenderScene +0 ffffffe7 trap_R_AddLightToScene +0 ffffffe8 trap_R_AddPolyToScene +0 ffffffe9 trap_R_AddRefEntityToScene +0 ffffffea trap_R_ClearScene +0 ffffffeb trap_R_RegisterShaderNoMip +0 ffffffec trap_R_RegisterSkin +0 ffffffed trap_R_RegisterModel +0 ffffffee trap_FS_GetFileList +0 ffffffef trap_FS_FCloseFile +0 fffffff0 trap_FS_Write +0 fffffff1 trap_FS_Read +0 fffffff2 trap_FS_FOpenFile +0 fffffff3 trap_Cmd_ExecuteText +0 fffffff4 trap_Argv +0 fffffff5 trap_Argc +0 fffffff6 trap_Cvar_InfoStringBuffer +0 fffffff7 trap_Cvar_Create +0 fffffff8 trap_Cvar_Reset +0 fffffff9 trap_Cvar_SetValue +0 fffffffa trap_Cvar_VariableStringBuffer +0 fffffffb trap_Cvar_VariableValue +0 fffffffc trap_Cvar_Set +0 fffffffd trap_Milliseconds +0 fffffffe trap_Print +0 ffffffff trap_Error +0 0 vmMain +0 7f AssetCache +0 512 UI_GetStripEdString +0 52d _UI_Refresh +0 671 _UI_Shutdown +0 677 GetMenuBuffer +0 6dd Asset_Parse +0 9c1 UI_Report +0 9c7 UI_ParseMenu +0 a35 Load_Menu +0 a7e UI_LoadMenus +0 b1e UI_Load +0 b84 UI_DrawHandicap +0 bce UI_DrawClanName +0 bfb UI_SetCapFragLimits +0 c4e UI_DrawGameType +0 c7a UI_DrawNetGameType +0 cbd UI_DrawAutoSwitch +0 d25 UI_DrawJoinGameType +0 d61 UI_TeamIndexFromName +0 d9c UI_DrawClanLogo +0 e49 UI_DrawClanCinematic +0 f5d UI_DrawPreviewCinematic +0 fc7 UI_DrawSkill +0 1013 UI_DrawGenericNum +0 1057 UI_DrawForceMastery +0 10a2 UI_DrawSkinColor +0 1107 UI_DrawForceSide +0 128b UI_DrawTeamName +0 12f6 UI_DrawTeamMember +0 13c0 UI_DrawEffects +0 13e8 UI_DrawMapPreview +0 157 _UI_DrawSides +0 1ad _UI_DrawTopBottom +0 203 _UI_DrawRect +0 235 MenuFontToHandle +0 25c Text_Width +0 27a Text_Height +0 295 Text_Paint +0 305 Text_PaintWithCursor +0 3dc Text_Paint_Limit +0 4c8 UI_ShowPostGame +0 4e9 UI_DrawCenteredPic +0 1499 UI_DrawMapTimeToBeat +0 14fe UI_DrawMapCinematic +0 15df UpdateForceStatus +0 1786 UI_DrawNetSource +0 17d2 UI_DrawNetMapPreview +0 1821 UI_DrawNetMapCinematic +0 1879 UI_DrawNetFilter +0 18c5 UI_DrawTier +0 1911 UI_DrawTierMap +0 198f UI_EnglishMapName +0 19c1 UI_DrawTierMapName +0 1a26 UI_DrawTierGameType +0 1a89 UI_AIFromName +0 1abb UI_NextOpponent +0 1b0e UI_PriorOpponent +0 1b65 UI_DrawPlayerLogo +0 1c09 UI_DrawPlayerLogoMetal +0 1cad UI_DrawPlayerLogoName +0 1d51 UI_DrawOpponentLogo +0 1df5 UI_DrawOpponentLogoMetal +0 1e99 UI_DrawOpponentLogoName +0 1f3d UI_DrawAllMapsSelection +0 1f84 UI_DrawOpponentName +0 1fb1 UI_OwnerDrawWidth +0 228b UI_DrawBotName +0 22d0 UI_DrawBotSkill +0 230e UI_DrawRedBlue +0 2341 UI_DrawCrosshair +0 237f UI_BuildPlayerList +0 24fd UI_DrawSelectedPlayer +0 2538 UI_DrawServerRefreshDate +0 260b UI_DrawServerMOTD +0 2758 UI_DrawKeyBindStatus +0 278f UI_DrawGLInfo +0 2944 UI_Version +0 2984 UI_OwnerDraw +0 2dda UI_OwnerDrawVisible +0 2f65 UI_Handicap_HandleKey +0 2fcb UI_Effects_HandleKey +0 3038 UI_ClanName_HandleKey +0 30c2 UI_GameType_HandleKey +0 3191 UI_NetGameType_HandleKey +0 321c UI_AutoSwitch_HandleKey +0 3277 UI_JoinGameType_HandleKey +0 32da UI_Skill_HandleKey +0 3337 UI_TeamName_HandleKey +0 33b2 UI_TeamMember_HandleKey +0 3468 UI_NetSource_HandleKey +0 34d4 UI_NetFilter_HandleKey +0 3526 UI_OpponentName_HandleKey +0 354f UI_BotName_HandleKey +0 35a2 UI_BotSkill_HandleKey +0 35ef UI_RedBlue_HandleKey +0 3617 UI_Crosshair_HandleKey +0 3671 UI_SelectedPlayer_HandleKey +0 36ef UI_OwnerDrawHandleKey +0 3906 UI_GetValue +0 390b UI_ServersQsortCompare +0 3926 UI_ServersSort +0 3944 UI_LoadMods +0 39c5 UI_LoadMovies +0 3a3b UI_LoadDemos +0 3ae5 UI_SetNextMap +0 3b1d UI_StartSkirmish +0 3f8c UI_Update +0 4237 UI_DeferMenuScript +0 42bf UI_UpdateVideoSetup +0 43a2 UI_GetVideoSetup +0 4539 UI_RunMenuScript +0 5174 UI_GetTeamColor +0 5177 UI_MapCountByGameType +0 51fd UI_hasSkinForBase +0 524e UI_HeadCountByTeam +0 53ae UI_HeadCountByColor +0 5404 UI_InsertServerIntoDisplayList +0 544b UI_RemoveServerFromDisplayList +0 5496 UI_BinaryServerInsertion +0 5512 UI_BuildServerDisplayList +0 56de UI_SortServerStatusInfo +0 57df UI_GetServerStatusInfo +0 5b5e stristr +0 5bc0 UI_BuildFindPlayerList +0 5e3f UI_BuildServerStatus +0 5ea0 UI_FeederCount +0 5f32 UI_SelectedMap +0 5f71 UI_SelectedHead +0 5fb0 UI_SelectedTeamHead +0 6018 UI_GetIndexFromSelection +0 6049 UI_UpdatePendingPings +0 605b UI_FeederItemText +0 635c UI_FeederItemImage +0 6504 UI_FeederSelection +0 6804 GameType_Parse +0 68ff MapList_Parse +0 6a42 UI_ParseGameInfo +0 6ad8 UI_Pause +0 6b03 UI_PlayCinematic +0 6b22 UI_StopCinematic +0 6baf UI_DrawCinematic +0 6bce UI_RunCinematicFrame +0 6bd7 UI_LoadForceConfig_List +0 6ca7 UI_BuildQ3Model_List +0 6e6f _UI_Init +0 7050 _UI_KeyEvent +0 70a0 _UI_MouseEvent +0 70ee UI_LoadNonIngame +0 7113 _UI_SetActiveMenu +0 7223 _UI_IsFullscreen +0 722d UI_ReadableSize +0 72e2 UI_PrintTime +0 7343 Text_PaintCenter +0 7378 UI_DisplayDownloadInfo +0 7597 UI_DrawConnectScreen +0 7744 UI_RegisterCvars +0 7779 UI_UpdateCvars +0 779c UI_StopServerRefresh +0 77da UI_DoServerRefresh +0 783b UI_StartServerRefresh +0 790c Com_Error +0 792e Com_Printf +0 7950 UI_ClampCvar +0 796a UI_StartDemoLoop +0 7974 UI_Argv +0 7983 UI_Cvar_VariableString +0 7992 UI_SetBestScores +0 7c21 UI_LoadBestScores +0 7ca5 UI_ClearScores +0 7d2a UI_Cache_f +0 7d5b UI_CalcPostGameStats +0 7fda UI_ConsoleCommand +0 80e8 UI_Shutdown +0 80eb UI_DrawNamedPic +0 811d UI_DrawHandlePic +0 816c UI_FillRect +0 819b UI_DrawSides +0 81e8 UI_DrawTopBottom +0 8235 UI_DrawRect +0 8261 UI_SetColor +0 826a UI_UpdateScreen +0 8270 UI_DrawTextBox +0 82d3 UI_CursorInRect +0 82fe UI_InitForceShaders +0 83f1 UI_DrawForceStars +0 8485 UI_UpdateClientForcePowers +0 8501 UI_TranslateFCFIndex +0 8516 UI_SaveForceTemplate +0 864b UpdateForceUsed +0 87fb UI_ReadLegalForce +0 8a7a UI_UpdateForcePowers +0 8c64 UI_SkinColor_HandleKey +0 8cbb UI_ForceSide_HandleKey +0 8d80 UI_ForceMaxRank_HandleKey +0 8de6 UI_ForcePowerRank_HandleKey +0 8f23 UI_ForceConfigHandle +0 926f UI_Alloc +0 92a9 UI_InitMemory +0 92b2 UI_OutOfMemory +0 92b8 hashForString +0 92f8 String_Alloc +0 93d1 String_Report +0 941a String_Init +0 945e PC_SourceWarning +0 948e PC_SourceError +0 94be LerpColor +0 9519 Float_Parse +0 9545 PC_Float_Parse +0 959a Color_Parse +0 95c7 PC_Color_Parse +0 95f4 Int_Parse +0 9620 PC_Int_Parse +0 9678 Rect_Parse +0 96bf PC_Rect_Parse +0 9706 String_Parse +0 9732 PC_String_Parse +0 97a7 PC_Script_Parse +0 9829 Init_Display +0 9830 GradientBar_Paint +0 9876 Window_Init +0 98b2 Fade +0 9923 Window_Paint +0 9c6d Item_SetScreenCoords +0 9d01 Item_UpdatePosition +0 9d54 Menu_UpdatePosition +0 9dab Menu_PostParse +0 9dd7 Menu_ClearFocus +0 9e5a IsVisible +0 9e7d Rect_ContainsPoint +0 9ec2 Menu_ItemsMatchingGroup +0 9f1e Menu_GetMatchingItemByNumber +0 9f8b Script_SetColor +0 a025 Script_SetAsset +0 a03e Script_SetBackground +0 a060 Menu_FindItemByName +0 a0af Script_SetTeamColor +0 a0e4 Script_SetItemColor +0 a1bd Script_SetItemRect +0 a23b Menu_ShowItemByName +0 a2ad Menu_FadeItemByName +0 a326 Menus_FindByName +0 a357 Menus_ShowByName +0 a36f Menus_OpenByName +0 a378 Menu_RunCloseScript +0 a3a7 Menus_CloseByName +0 a407 Menus_CloseAll +0 a43d Script_Show +0 a45d Script_Hide +0 a47d Script_FadeIn +0 a49d Script_FadeOut +0 a4bd Script_Open +0 a4d5 Script_Close +0 a4ff Menu_TransitionItemByName +0 a5ea Script_Defer +0 a611 Script_RunDeferred +0 a62b Script_Transition +0 a68d Menu_OrbitItemByName +0 a6fa Script_Orbit +0 a768 Script_SetFocus +0 a7f3 Script_SetPlayerModel +0 a811 Script_SetPlayerHead +0 a82f Script_SetCvar +0 a85b Script_SetCvarToCvar +0 a894 Script_Exec +0 a8bb Script_Play +0 a8e4 Script_playLooped +0 a910 Item_RunScript +0 a9ad Item_EnableShowViaCvar +0 aa86 Item_SetFocus +0 abf2 Item_TextScroll_MaxScroll +0 ac21 Item_TextScroll_ThumbPosition +0 ac6b Item_TextScroll_ThumbDrawPosition +0 acd4 Item_TextScroll_OverLB +0 adbc Item_TextScroll_MouseEnter +0 aded Item_TextScroll_HandleKey +0 af83 Item_ListBox_MaxScroll +0 afdd Item_ListBox_ThumbPosition +0 b064 Item_ListBox_ThumbDrawPosition +0 b129 Item_Slider_ThumbPosition +0 b1c1 Item_Slider_OverSlider +0 b1f6 Item_ListBox_OverLB +0 b3c1 Item_ListBox_MouseEnter +0 b4f6 Item_MouseEnter +0 b618 Item_MouseLeave +0 b664 Menu_HitTest +0 b6a2 Item_SetMouseOver +0 b6cb Item_OwnerDraw_HandleKey +0 b705 Item_ListBox_HandleKey +0 bc22 Item_YesNo_HandleKey +0 bca8 Item_Multi_CountSettings +0 bcc0 Item_Multi_FindCvarByValue +0 bd45 Item_Multi_Setting +0 bdd6 Item_Multi_HandleKey +0 bec9 Item_TextField_HandleKey +0 c24d Scroll_TextScroll_AutoFunc +0 c2aa Scroll_TextScroll_ThumbFunc +0 c399 Scroll_ListBox_AutoFunc +0 c3f6 Scroll_ListBox_ThumbFunc +0 c57d Scroll_Slider_ThumbFunc +0 c617 Item_StartCapture +0 c78c Item_StopCapture +0 c78f Item_Slider_HandleKey +0 c88b Item_HandleKey +0 c99b Item_Action +0 c9b2 Menu_SetPrevCursorItem +0 ca88 Menu_SetNextCursorItem +0 cb55 Window_CloseCinematic +0 cb7d Menu_CloseCinematics +0 cbd1 Display_CloseCinematics +0 cbee Menus_Activate +0 cc45 Display_VisibleMenuCount +0 cc6f Menus_HandleOOBClick +0 cd32 Item_CorrectedTextRect +0 cd5a Menu_HandleKey +0 d07b ToWindowCoords +0 d0c3 Rect_ToWindowCoords +0 d0d8 Item_SetTextExtents +0 d27c Item_TextColor +0 d3c2 Item_Text_AutoWrapped_Paint +0 d572 Item_Text_Wrapped_Paint +0 d67f Item_Text_Paint +0 d770 Item_TextField_Paint +0 d8e6 Item_YesNo_Paint +0 da1a Item_Multi_Paint +0 db08 Controls_GetKeyAssignment +0 db66 Controls_GetConfig +0 db98 Controls_SetConfig +0 dbef Controls_SetDefaults +0 dc22 BindingIDFromName +0 dc4f BindingFromName +0 dce0 Item_Slider_Paint +0 dde3 Item_Bind_Paint +0 dfbc Display_KeyBindPending +0 dfc2 Item_Bind_HandleKey +0 e1cd Item_Model_Paint +0 e2fd Item_Image_Paint +0 e344 Item_TextScroll_Paint +0 e4d6 Item_ListBox_Paint +0 ea8d Item_OwnerDraw_Paint +0 ed53 Item_Paint +0 f33d Menu_Init +0 f374 Menu_GetFocusedItem +0 f3b3 Menu_GetFocused +0 f3ee Menu_ScrollFeeder +0 f441 Menu_SetFeederSelection +0 f4d6 Menus_AnyFullScreenVisible +0 f50a Menus_ActivateByName +0 f599 Item_Init +0 f5b2 Menu_HandleMouseMove +0 f70a Menu_Paint +0 f865 Item_ValidateTypeData +0 f929 KeywordHash_Key +0 f98d KeywordHash_Add +0 f9b3 KeywordHash_Find +0 f9ee ItemParse_name +0 fa07 ItemParse_focusSound +0 fa2f ItemParse_text +0 fa48 ItemParse_descText +0 fa61 ItemParse_text2 +0 fa7a ItemParse_text2alignx +0 fa93 ItemParse_text2aligny +0 faac ItemParse_group +0 fac5 ItemParse_asset_model +0 fb05 ItemParse_asset_shader +0 fb2b ItemParse_model_origin +0 fb71 ItemParse_model_fovx +0 fb97 ItemParse_model_fovy +0 fbbd ItemParse_model_rotation +0 fbe3 ItemParse_model_angle +0 fc07 ItemParse_rect +0 fc20 ItemParse_flag +0 fc8b ItemParse_style +0 fca9 ItemParse_decoration +0 fcbc ItemParse_notselectable +0 fcdf ItemParse_wrapped +0 fcf2 ItemParse_autowrapped +0 fd05 ItemParse_horizontalscroll +0 fd18 ItemParse_type +0 fd37 ItemParse_elementwidth +0 fd5d ItemParse_elementheight +0 fd83 ItemParse_feeder +0 fd9c ItemParse_elementtype +0 fdcd ItemParse_columns +0 fe70 ItemParse_border +0 fe89 ItemParse_bordersize +0 fea2 ItemParse_visible +0 feca ItemParse_ownerdraw +0 fee9 ItemParse_align +0 ff02 ItemParse_textalign +0 ff20 ItemParse_textalignx +0 ff39 ItemParse_textaligny +0 ff52 ItemParse_textscale +0 ff6b ItemParse_textstyle +0 ff84 ItemParse_backcolor +0 ffb3 ItemParse_forecolor +0 fff0 ItemParse_bordercolor +0 1001f ItemParse_outlinecolor +0 10038 ItemParse_background +0 1005e ItemParse_cinematic +0 10077 ItemParse_doubleClick +0 100a8 ItemParse_onFocus +0 100c1 ItemParse_leaveFocus +0 100da ItemParse_mouseEnter +0 100f3 ItemParse_mouseExit +0 1010c ItemParse_mouseEnterText +0 10125 ItemParse_mouseExitText +0 1013e ItemParse_action +0 10157 ItemParse_special +0 10170 ItemParse_cvarTest +0 10189 ItemParse_cvar +0 101ea ItemParse_font +0 10209 ItemParse_maxChars +0 1023e ItemParse_maxPaintChars +0 10273 ItemParse_maxLineChars +0 102a8 ItemParse_lineHeight +0 102de ItemParse_cvarFloat +0 1033d ItemParse_cvarStrList +0 103ff ItemParse_cvarFloatList +0 104bd ItemParse_addColorRange +0 1051f ItemParse_ownerdrawFlag +0 10544 ItemParse_enableCvar +0 10563 ItemParse_disableCvar +0 10582 ItemParse_showCvar +0 105a1 ItemParse_hideCvar +0 105c0 ItemParse_Appearance_slot +0 105d9 Item_SetupKeywordHash +0 10605 Item_Parse +0 10684 Item_TextScroll_BuildLines +0 107c3 Item_InitControls +0 10800 MenuParse_font +0 10843 MenuParse_name +0 10870 MenuParse_fullscreen +0 1088d MenuParse_rect +0 108a8 MenuParse_style +0 108ca MenuParse_visible +0 108f6 MenuParse_onOpen +0 10913 MenuParse_onClose +0 10930 MenuParse_onESC +0 1094d MenuParse_border +0 1096a MenuParse_borderSize +0 10987 MenuParse_backcolor +0 109ba MenuParse_descAlignment +0 109dc MenuParse_descX +0 109f9 MenuParse_descY +0 10a16 MenuParse_descScale +0 10a33 MenuParse_descColor +0 10a66 MenuParse_forecolor +0 10aa7 MenuParse_bordercolor +0 10ada MenuParse_focuscolor +0 10b0d MenuParse_disablecolor +0 10b40 MenuParse_outlinecolor +0 10b5d MenuParse_background +0 10b87 MenuParse_cinematic +0 10ba4 MenuParse_ownerdrawFlag +0 10bcd MenuParse_ownerdraw +0 10bea MenuParse_popup +0 10c01 MenuParse_outOfBounds +0 10c18 MenuParse_soundLoop +0 10c35 MenuParse_fadeClamp +0 10c52 MenuParse_fadeAmount +0 10c6f MenuParse_fadeCycle +0 10c8c MenuParse_itemDef +0 10d11 MenuParse_appearanceIncrement +0 10d2e Menu_SetupKeywordHash +0 10d5a Menu_Parse +0 10dd9 Menu_New +0 10e0d Menu_Count +0 10e13 Menu_PaintAll +0 10eaa Menu_Reset +0 10eb0 Display_GetContext +0 10eb6 Display_CaptureItem +0 10eeb Display_MouseMove +0 10f63 Display_CursorType +0 10faf Display_HandleKey +0 10fdc Window_CacheContents +0 11015 Item_CacheContents +0 11022 Menu_CacheContents +0 1106e Display_CacheAll +0 1108b Menu_OverActiveItem +0 1113e UI_ParseInfos +0 1122c UI_LoadArenasFromFile +0 112ac UI_LoadArenas +0 114ca UI_LoadBotsFromFile +0 1157b UI_LoadBots +0 115fc UI_GetBotInfoByNumber +0 11627 UI_GetBotInfoByName +0 11666 UI_GetNumBots +0 1166c UI_GetBotNameByNumber +0 1168e BG_LegalizedForcePowers +0 11a5b vectoyaw +0 11ab5 BG_HasYsalamiri +0 11ae4 BG_CanUseFPNow +0 11b4b BG_FindItemForPowerup +0 11b87 BG_FindItemForHoldable +0 11bc1 BG_FindItemForWeapon +0 11bf4 BG_FindItem +0 11c1d BG_PlayerTouchesItem +0 11c7d BG_ProperForceIndex +0 11ca0 BG_CycleForce +0 11d78 BG_GetItemIndexByTag +0 11da8 BG_CycleInven +0 11e14 BG_CanItemBeGrabbed +0 12011 BG_EvaluateTrajectory +0 121df BG_EvaluateTrajectoryDelta +0 122d9 BG_AddPredictableEventToPlayerstate +0 12314 BG_TouchJumpPad +0 12378 BG_PlayerStateToEntityState +0 12683 BG_PlayerStateToEntityStateExtraPolate +0 1299b BG_SwingAngles +0 12aa0 BG_AddPainTwitch +0 12ae1 BG_G2PlayerAngles +0 12c7e BG_Alloc +0 12cbe BG_AllocUnaligned +0 12cf1 BG_TempAlloc +0 12d29 BG_TempFree +0 12d56 BG_StringAlloc +0 12d79 BG_OutOfMemory +0 12d8b swapfunc +0 12e12 med3 +0 12e95 qsort +0 1324e strlen +0 13269 strcat +0 132ac strcpy +0 132e1 strcmp +0 1331a strchr +0 13339 strstr +0 1337f tolower +0 13397 toupper +0 133af memmove +0 133f6 tan +0 1340d srand +0 13414 rand +0 13429 atof +0 134ee _atof +0 135b9 atoi +0 13631 _atoi +0 136b3 abs +0 136c8 fabs +0 136dd AddInt +0 137b8 AddFloat +0 138c6 AddString +0 1395d vsprintf +0 13af5 sscanf +0 13b60 Q_rand +0 13b75 Q_random +0 13b87 Q_crandom +0 13b98 VectorCompare +0 13bd0 VectorLength +0 13c03 VectorLengthSquared +0 13c2f Distance +0 13c70 DistanceSquared +0 13cbe VectorNormalizeFast +0 13d1d VectorInverse +0 13d45 CrossProduct +0 13dbe ClampChar +0 13dd5 ClampShort +0 13dec DirToByte +0 13e47 ByteToDir +0 13e65 ColorBytes3 +0 13ed4 ColorBytes4 +0 13f66 NormalizeColor +0 13fdc PlaneFromPoints +0 1409a RotatePointAroundVector +0 141a5 RotateAroundDirection +0 141e9 vectoangles +0 142a5 AnglesToAxis +0 142da AxisClear +0 14311 AxisCopy +0 14335 ProjectPointOnPlane +0 143f0 MakeNormalVectors +0 1449b VectorRotate +0 14538 Q_rsqrt +0 1456f Q_fabs +0 1457f LerpAngle +0 145b0 AngleSubtract +0 145d5 AnglesSubtract +0 14623 AngleMod +0 14635 AngleNormalize360 +0 14643 AngleNormalize180 +0 1465e AngleDelta +0 1466e SetPlaneSignbits +0 1469b BoxOnPlaneSide +0 14a5c RadiusFromBounds +0 14aaf ClearBounds +0 14ae6 AddPointToBounds +0 14b7f VectorNormalize +0 14bef VectorNormalize2 +0 14c7d _VectorMA +0 14cbf _DotProduct +0 14cf4 _VectorSubtract +0 14d2d _VectorAdd +0 14d66 _VectorCopy +0 14d8d _VectorScale +0 14dbd Vector4Scale +0 14dff Q_log2 +0 14e1e MatrixMultiply +0 14ff3 AngleVectors +0 150eb PerpendicularVector +0 15157 Rand_Init +0 1515e flrand +0 15199 irand +0 151cb powf +0 151ee GetIDForString +0 15233 GetStringForID +0 1526f Com_Clamp +0 15289 COM_SkipPath +0 152ad COM_StripExtension +0 152e3 COM_DefaultExtension +0 1532b ShortSwap +0 1534b ShortNoSwap +0 15356 LongSwap +0 15389 LongNoSwap +0 1538f Long64Swap +0 153cc Long64NoSwap +0 153d4 FloatSwap +0 153ea FloatNoSwap +0 153f1 COM_BeginParseSession +0 15403 COM_GetCurrentParseLine +0 15409 COM_Parse +0 15418 COM_ParseError +0 15438 COM_ParseWarning +0 15458 SkipWhitespace +0 1548f COM_Compress +0 155e2 COM_ParseExt +0 1572e COM_MatchToken +0 15757 SkipBracedSection +0 15795 SkipRestOfLine +0 157cd Parse1DMatrix +0 1580c Parse2DMatrix +0 15847 Parse3DMatrix +0 1588c Q_isprint +0 158a1 Q_islower +0 158b6 Q_isupper +0 158cb Q_isalpha +0 158ec Q_strrchr +0 15920 Q_strncpyz +0 1595b Q_stricmpn +0 159e6 Q_strncmp +0 15a38 Q_stricmp +0 15a60 Q_strlwr +0 15a86 Q_strupr +0 15aac Q_strcat +0 15ad8 Q_PrintStrlen +0 15b28 Q_CleanStr +0 15b8e Com_sprintf +0 15bcd va +0 15bfa Info_ValueForKey +0 15cda Info_NextPair +0 15d78 Info_RemoveKey +0 15e48 Info_RemoveKey_Big +0 15f18 Info_Validate +0 15f3f Info_SetValueForKey +0 1600f Info_SetValueForKey_Big +0 160d7 Q_irand +1 4 MonthAbbrev +1 34 skillLevels +1 48 numSkillLevels +1 4c netSources +1 58 numNetSources +1 5c serverFilters +1 6c teamArenaGameTypes +1 94 numTeamArenaGameTypes +1 98 numServerFilters +1 9c netnames +1 ac gamecodetoui +1 c8 uitogamecode +1 e4 uiSkinColor +1 130 frameCount +1 134 defaultMenu +1 138 handicapValues +1 18c updateModel +1 190 q3Model +1 5c8 gUISelectedMap +1 5d0 serverStatusCvars +1 6ac cvarTable +1 e0c cvarTableSize +1 e10 newUI +1 e14 uiForceSide +1 e18 uiForceRank +1 e1c uiMaxRank +1 e20 uiMaxPoints +1 e24 uiForceUsed +1 e28 uiForceAvailable +1 e2c gTouchedForce +1 e30 uiForcePowersRank +1 e78 uiForcePowerDarkLight +1 ec0 gCustRank +1 ec4 gCustSide +1 ec8 gCustPowersRank +1 f10 captureFunc +1 f14 captureData +1 f18 itemCapture +1 f1c DC +1 f20 g_waitingForKey +1 f24 g_editingField +1 f28 g_bindItem +1 f2c g_editItem +1 f30 menuCount +1 f34 openMenuCount +1 f38 debugMode +1 f3c lastListBoxClickTime +1 f40 itemFlags +1 f50 styles +1 f6c alignment +1 f7c types +1 fbc strPoolIndex +1 fc0 strHandleCount +1 fcc FPMessageTime +1 fd0 ui_deferredScriptItem +1 fd4 commandList +1 1094 scriptCommandCount +1 115c g_bindings +1 1a2c itemParseKeywords +1 1d8c menuParseKeywords +1 1f40 forceMasteryLevels +1 1f60 forceMasteryPoints +1 1f80 bgForcePowerCost +1 20a0 forcePowerSorted +1 20e8 forcePowerDarkLight +1 2130 WeaponReadyAnim +1 2170 WeaponAttackAnim +1 21b0 bg_itemlist +1 2a6c bg_numItems +1 2ac4 eventnames +1 2c9c bg_poolSize +1 2ca0 bg_poolTail +1 2ca4 WP_MuzzlePoint +1 2d64 weaponData +1 30e4 ammoData +1 310c randSeed +1 3180 vec3_origin +1 318c axisDefault +1 31b0 colorBlack +1 31c0 colorRed +1 31d0 colorGreen +1 31e0 colorBlue +1 31f0 colorYellow +1 3200 colorMagenta +1 3210 colorCyan +1 3220 colorWhite +1 3230 colorLtGrey +1 3240 colorMdGrey +1 3250 colorDkGrey +1 3260 colorLtBlue +1 3270 colorDkBlue +1 3280 g_color_table +1 3300 bytedirs +1 3ab8 holdrand +1 19b4 g_bindCount +2 0 holdSPString +2 4af664 _stackStart +2 4bf664 _stackEnd +3 8c40 k_language +3 8d50 s_language +3 8e60 ui_realWarmUp +3 8f70 ui_realCaptureLimit +3 9080 ui_recordSPDemo +3 9190 ui_hudFiles +3 92a0 ui_Q3Model +3 93b0 ui_findPlayer +3 94c0 ui_scoreCaptures +3 95d0 ui_teamName +3 96e0 ui_blueteam8 +3 97f0 ui_blueteam7 +3 9900 ui_blueteam6 +3 9a10 ui_blueteam5 +3 9b20 ui_blueteam4 +3 9c30 ui_blueteam3 +3 9d40 ui_blueteam2 +3 9e50 ui_blueteam1 +3 9f60 ui_blueteam +3 a070 ui_redteam8 +3 a180 ui_redteam7 +3 a290 ui_redteam6 +3 a3a0 ui_redteam5 +3 a4b0 ui_redteam4 +3 a5c0 ui_redteam3 +3 a6d0 ui_redteam2 +3 a7e0 ui_redteam1 +3 a8f0 ui_redteam +3 aa00 lastLoadingText +3 ae00 lastConnState +3 ae04 parsedFPMessage +3 b204 ui_rankChange +3 b314 startTime +3 b318 ui_initialized +3 b428 ui_debug +3 b538 uiInfo +3 22894 ui_serverStatusTimeOut +3 229a4 ui_bigFont +3 22ab4 ui_smallFont +3 22bc4 ui_scoreTime +3 22cd4 ui_scoreShutoutBonus +3 22de4 ui_scoreSkillBonus +3 22ef4 ui_scoreTimeBonus +3 23004 ui_scoreBase +3 23114 ui_scoreTeam +3 23224 ui_scorePerfect +3 23334 ui_scoreScore +3 23444 ui_scoreGauntlets +3 23554 ui_scoreAssists +3 23664 ui_scoreDefends +3 23774 ui_scoreExcellents +3 23884 ui_scoreImpressives +3 23994 ui_scoreAccuracy +3 23aa4 ui_singlePlayerActive +3 23bb4 ui_lastServerRefresh_3 +3 23cc4 ui_lastServerRefresh_2 +3 23dd4 ui_lastServerRefresh_1 +3 23ee4 ui_lastServerRefresh_0 +3 23ff4 ui_selectedPlayerName +3 24104 ui_selectedPlayer +3 24214 ui_currentOpponent +3 24324 ui_mapIndex +3 24434 ui_currentNetMap +3 24544 ui_currentMap +3 24654 ui_currentTier +3 24764 ui_menuFiles +3 24874 ui_opponentName +3 24984 ui_dedicated +3 24a94 ui_serverFilterType +3 24ba4 ui_netSource +3 24cb4 ui_joinGameType +3 24dc4 ui_actualNetGameType +3 24ed4 ui_netGameType +3 24fe4 ui_gameType +3 250f4 ui_fragLimit +3 25204 ui_captureLimit +3 25314 ui_cdkeychecked +3 25424 ui_server16 +3 25534 ui_server15 +3 25644 ui_server14 +3 25754 ui_server13 +3 25864 ui_server12 +3 25974 ui_server11 +3 25a84 ui_server10 +3 25b94 ui_server9 +3 25ca4 ui_server8 +3 25db4 ui_server7 +3 25ec4 ui_server6 +3 25fd4 ui_server5 +3 260e4 ui_server4 +3 261f4 ui_server3 +3 26304 ui_server2 +3 26414 ui_server1 +3 26524 ui_marks +3 26634 ui_drawCrosshairNames +3 26744 ui_drawCrosshair +3 26854 ui_browserShowEmpty +3 26964 ui_browserShowFull +3 26a74 ui_browserSortKey +3 26b84 ui_browserGameType +3 26c94 ui_browserMaster +3 26da4 ui_spSelection +3 26eb4 ui_spSkill +3 26fc4 ui_spVideos +3 270d4 ui_spAwards +3 271e4 ui_spScores5 +3 272f4 ui_spScores4 +3 27404 ui_spScores3 +3 27514 ui_spScores2 +3 27624 ui_spScores1 +3 27734 ui_botsFile +3 27844 ui_arenasFile +3 27954 ui_ctf_friendly +3 27a64 ui_ctf_timelimit +3 27b74 ui_ctf_capturelimit +3 27c84 ui_team_friendly +3 27d94 ui_team_timelimit +3 27ea4 ui_team_fraglimit +3 27fb4 ui_selectedModelIndex +3 280c4 ui_tourney_timelimit +3 281d4 ui_tourney_fraglimit +3 282e4 ui_ffa_timelimit +3 283f4 ui_ffa_fraglimit +3 28d04 m_entersound +3 28d08 uiForceStarShaders +3 28d50 ui_forcePowerDisable +3 28e60 ui_freeSaber +3 28f70 uiSaberColorShaders +3 2af98 menuParseKeywordHash +3 2b798 itemParseKeywordHash +3 2bf98 g_nameBind2 +3 2bfb8 g_nameBind1 +3 2bfd8 ui_deferredScript +3 2c7d8 strHandle +3 2e7d8 strPool +3 8e7d8 outOfMemory +3 8e7dc allocPoint +3 8e7e0 memoryPool +3 28e7e0 menuStack +3 28e820 Menus +3 2a3420 scrollInfo +3 2a3440 ui_arenaInfos +3 2a4440 ui_numArenas +3 2a4444 ui_botInfos +3 2a5444 ui_numBots +3 2a5448 bg_pool +3 4aee60 com_lines +3 4aee64 com_parsename +3 4af264 com_token diff --git a/CODE-mp/base/vm/ui.qvm b/CODE-mp/base/vm/ui.qvm new file mode 100644 index 0000000000000000000000000000000000000000..9cc3c1d629cf33cffba5f50d97ff868d65717d12 GIT binary patch literal 313480 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�~#RTK58Q-4Z=^&qx7d1eyt*j1PKkt*#* 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 literal 0 HcmV?d00001 diff --git a/CODE-mp/cgame/cg_draw.c b/CODE-mp/cgame/cg_draw.c index 3df5c33..4718634 100644 --- a/CODE-mp/cgame/cg_draw.c +++ b/CODE-mp/cgame/cg_draw.c @@ -30,24 +30,24 @@ char teamChat2[256]; char *showPowersName[] = { - "HEAL2",//FP_HEAL - "JUMP2",//FP_LEVITATION - "SPEED2",//FP_SPEED - "PUSH2",//FP_PUSH - "PULL2",//FP_PULL - "MINDTRICK2",//FP_TELEPTAHY - "GRIP2",//FP_GRIP - "LIGHTNING2",//FP_LIGHTNING - "DARK_RAGE2",//FP_RAGE - "PROTECT2",//FP_PROTECT - "ABSORB2",//FP_ABSORB - "TEAM_HEAL2",//FP_TEAM_HEAL - "TEAM_REPLENISH2",//FP_TEAM_FORCE - "DRAIN2",//FP_DRAIN - "SEEING2",//FP_SEE - "SABER_OFFENSE2",//FP_SABERATTACK - "SABER_DEFENSE2",//FP_SABERDEFEND - "SABER_THROW2",//FP_SABERTHROW + "Heal",//FP_HEAL + "Jump",//FP_LEVITATION + "Speed",//FP_SPEED + "Push",//FP_PUSH + "Pull",//FP_PULL + "Mind Trick",//FP_TELEPTAHY + "Grip",//FP_GRIP + "Lightning",//FP_LIGHTNING + "Dark Rage",//FP_RAGE + "Protect",//FP_PROTECT + "Absorb",//FP_ABSORB + "Team Heal",//FP_TEAM_HEAL + "Team Replenish",//FP_TEAM_FORCE + "Drain",//FP_DRAIN + "Seeing",//FP_SEE + "Saber Attack",//FP_SABERATTACK + "Saber Defend",//FP_SABERDEFEND + "Saber Throw",//FP_SABERTHROW NULL }; @@ -1358,7 +1358,7 @@ void CG_DrawForceSelect( void ) if ( showPowersName[cg.forceSelect] ) { - UI_DrawProportionalString(320, y + 30, CG_GetStripEdString("INGAME", showPowersName[cg.forceSelect]), UI_CENTER | UI_SMALLFONT, colorTable[CT_ICON_BLUE]); + UI_DrawProportionalString(320, y + 30, showPowersName[cg.forceSelect], UI_CENTER | UI_SMALLFONT, colorTable[CT_ICON_BLUE]); } } @@ -1664,7 +1664,7 @@ static float CG_DrawMiniScoreboard ( float y ) Q_strcat ( temp, MAX_QPATH, " 2nd: " ); Q_strcat ( temp, MAX_QPATH, cgs.scores2==SCORE_NOT_PRESENT?"-":(va("%i",cgs.scores2)) ); - CG_Text_Paint( 630 - CG_Text_Width ( temp, 0.7f, FONT_SMALL ), y, 0.7f, colorWhite, temp, 0, 0, ITEM_TEXTSTYLE_SHADOWEDMORE, FONT_MEDIUM ); + CG_Text_Paint( 630 - CG_Text_Width ( temp, 0.75f, FONT_SMALL ), y, 0.75f, colorWhite, temp, 0, 0, ITEM_TEXTSTYLE_SHADOWEDMORE, FONT_MEDIUM ); y += 15; */ //rww - no longer doing this. Since the attacker now shows who is first, we print the score there. @@ -1698,16 +1698,13 @@ static float CG_DrawEnemyInfo ( float y ) if ( cgs.gametype == GT_JEDIMASTER ) { - //title = "Jedi Master"; - title = CG_GetStripEdString("INGAMETEXT", "MASTERY7"); + title = "Jedi Master"; clientNum = cgs.jediMaster; if ( clientNum < 0 ) { //return y; -// title = "Get Saber!"; - title = CG_GetStripEdString("INGAMETEXT", "GET_SABER"); - + title = "Get Saber!"; size = ICON_SIZE * 1.25; y += 5; @@ -1717,25 +1714,23 @@ static float CG_DrawEnemyInfo ( float y ) y += size; /* - CG_Text_Paint( 630 - CG_Text_Width ( ci->name, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, ci->name, 0, 0, 0, FONT_MEDIUM ); + CG_Text_Paint( 630 - CG_Text_Width ( ci->name, 0.75f, FONT_MEDIUM ), y, 0.75f, colorWhite, ci->name, 0, 0, 0, FONT_MEDIUM ); y += 15; */ - CG_Text_Paint( 630 - CG_Text_Width ( title, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, title, 0, 0, 0, FONT_MEDIUM ); + CG_Text_Paint( 630 - CG_Text_Width ( title, 0.75f, FONT_MEDIUM ), y, 0.75f, colorWhite, title, 0, 0, 0, FONT_MEDIUM ); return y + BIGCHAR_HEIGHT + 2; } } else if ( cg.snap->ps.duelInProgress ) { -// title = "Dueling"; - title = CG_GetStripEdString("INGAMETEXT", "DUELING"); + title = "Dueling"; clientNum = cg.snap->ps.duelIndex; } else if ( cgs.gametype == GT_TOURNAMENT && cgs.clientinfo[cg.snap->ps.clientNum].team != TEAM_SPECTATOR) { -// title = "Dueling"; - title = CG_GetStripEdString("INGAMETEXT", "DUELING"); + title = "Dueling"; if (cg.snap->ps.clientNum == cgs.duelist1) { clientNum = cgs.duelist2; @@ -1802,10 +1797,10 @@ static float CG_DrawEnemyInfo ( float y ) y += size; - CG_Text_Paint( 630 - CG_Text_Width ( ci->name, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, ci->name, 0, 0, 0, FONT_MEDIUM ); + CG_Text_Paint( 630 - CG_Text_Width ( ci->name, 0.75f, FONT_MEDIUM ), y, 0.75f, colorWhite, ci->name, 0, 0, 0, FONT_MEDIUM ); y += 15; - CG_Text_Paint( 630 - CG_Text_Width ( title, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, title, 0, 0, 0, FONT_MEDIUM ); + CG_Text_Paint( 630 - CG_Text_Width ( title, 0.75f, FONT_MEDIUM ), y, 0.75f, colorWhite, title, 0, 0, 0, FONT_MEDIUM ); return y + BIGCHAR_HEIGHT + 2; } @@ -3271,7 +3266,7 @@ CG_DrawSpectator static void CG_DrawSpectator(void) { const char* s; - s = CG_GetStripEdString("INGAMETEXT", "SPECTATOR"); + s = "SPECTATOR"; if (cgs.gametype == GT_TOURNAMENT && cgs.duelist1 != -1 && cgs.duelist2 != -1) @@ -3298,7 +3293,7 @@ static void CG_DrawSpectator(void) if ( cgs.gametype == GT_TOURNAMENT ) { - s = CG_GetStripEdString("INGAMETEXT", "WAITING_TO_PLAY"); // "waiting to play"; + s = "waiting to play"; CG_Text_Paint ( 320 - CG_Text_Width ( s, 1.0f, 3 ) / 2, 440, 1.0f, colorWhite, s, 0, 0, 0, 3 ); } else //if ( cgs.gametype >= GT_TEAM ) @@ -3514,8 +3509,7 @@ static qboolean CG_DrawFollow( void ) return qfalse; } -// s = "following"; - s = CG_GetStripEdString("INGAMETEXT", "FOLLOWING"); + s = "following"; CG_Text_Paint ( 320 - CG_Text_Width ( s, 1.0f, FONT_MEDIUM ) / 2, 60, 1.0f, colorWhite, s, 0, 0, 0, FONT_MEDIUM ); s = cgs.clientinfo[ cg.snap->ps.clientNum ].name; @@ -3607,8 +3601,7 @@ static void CG_DrawWarmup( void ) { } if ( sec < 0 ) { -// s = "Waiting for players"; - s = CG_GetStripEdString("INGAMETEXT", "WAITING_FOR_PLAYERS"); + s = "Waiting for players"; w = CG_DrawStrlen( s ) * BIGCHAR_WIDTH; CG_DrawBigString(320 - w / 2, 24, s, 1.0F); cg.warmupCount = 0; @@ -3661,8 +3654,7 @@ static void CG_DrawWarmup( void ) { cg.warmup = 0; sec = 0; } -// s = va( "Starts in: %i", sec + 1 ); - s = va( "%s: %i",CG_GetStripEdString("INGAMETEXT", "STARTS_IN"), sec + 1 ); + s = va( "Starts in: %i", sec + 1 ); if ( sec != cg.warmupCount ) { cg.warmupCount = sec; switch ( sec ) { diff --git a/CODE-mp/cgame/cg_event.c b/CODE-mp/cgame/cg_event.c index 134311a..e37406f 100644 --- a/CODE-mp/cgame/cg_event.c +++ b/CODE-mp/cgame/cg_event.c @@ -1231,7 +1231,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) { const char *strText = CG_GetStripEdString("INGAMETEXT", "PICKUPLINE"); //Com_Printf("%s %s\n", strText, showPowersName[index]); - CG_CenterPrint( va("%s %s\n", strText, CG_GetStripEdString("INGAME",showPowersName[index])), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH ); + CG_CenterPrint( va("%s %s\n", strText, showPowersName[index]), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH ); } //Show the player their force selection bar in case picking the holocron up changed the current selection diff --git a/CODE-mp/cgame/cg_info.c b/CODE-mp/cgame/cg_info.c index 57e1250..81ec063 100644 --- a/CODE-mp/cgame/cg_info.c +++ b/CODE-mp/cgame/cg_info.c @@ -152,8 +152,7 @@ void CG_DrawInformation( void ) { // pure server s = Info_ValueForKey( sysInfo, "sv_pure" ); if ( s[0] == '1' ) { - const char *psPure = CG_GetStripEdString("INGAMETEXT", "PURE_SERVER"); - UI_DrawProportionalString( 320, y, psPure, + UI_DrawProportionalString( 320, y, "Pure Server", UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite ); y += PROP_HEIGHT; } diff --git a/CODE-mp/cgame/cg_local.h b/CODE-mp/cgame/cg_local.h index 00db1a8..c06e173 100644 --- a/CODE-mp/cgame/cg_local.h +++ b/CODE-mp/cgame/cg_local.h @@ -76,8 +76,9 @@ #define TEAM_OVERLAY_MAXNAME_WIDTH 12 #define TEAM_OVERLAY_MAXLOCATION_WIDTH 16 -#define DEFAULT_MODEL "kyle" -#define DEFAULT_TEAM_MODEL "kyle" +#define DEFAULT_MODEL "kyle/default" +#define DEFAULT_TEAM_MODEL "kyle/default" +#define DEFAULT_TEAM_HEAD "kyle/default" #define DEFAULT_FORCEPOWERS "5-1-000000000000000000" //"rank-side-heal.lev.speed.push.pull.tele.grip.lightning.rage.protect.absorb.teamheal.teamforce.drain.see" diff --git a/CODE-mp/cgame/cg_scoreboard.c b/CODE-mp/cgame/cg_scoreboard.c index 74d2204..aa4f940 100644 --- a/CODE-mp/cgame/cg_scoreboard.c +++ b/CODE-mp/cgame/cg_scoreboard.c @@ -173,7 +173,7 @@ static void CG_DrawClientScore( int y, score_t *score, float *color, float fade, // add the "ready" marker for intermission exiting if ( cg.snap->ps.stats[ STAT_CLIENTS_READY ] & ( 1 << score->client ) ) { - CG_Text_Paint (SB_NAME_X - 64, y + 2, 0.7f * scale, colorWhite, CG_GetStripEdString("INGAMETEXT", "READY"),0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM ); + CG_Text_Paint (SB_NAME_X - 64, y + 2, 0.7f * scale, colorWhite, "READY" ,0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM ); } } @@ -371,10 +371,7 @@ qboolean CG_DrawOldScoreboard( void ) { CG_Text_Paint ( SB_NAME_X, y, 1.0f, colorWhite, "Name", 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM ); if (cgs.gametype == GT_TOURNAMENT) { - char sWL[100]; - trap_SP_GetStringTextString("INGAMETEXT_W_L", sWL, sizeof(sWL)); - - CG_Text_Paint ( SB_SCORE_X, y, 1.0f, colorWhite, sWL, 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM ); + CG_Text_Paint ( SB_SCORE_X, y, 1.0f, colorWhite, "W/L", 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM ); } else { diff --git a/CODE-mp/cgame/vm/cgame.map b/CODE-mp/cgame/vm/cgame.map new file mode 100644 index 0000000..78ad754 --- /dev/null +++ b/CODE-mp/cgame/vm/cgame.map @@ -0,0 +1,1597 @@ +0 fffffed3 trap_CG_RegisterSharedMemory +0 fffffed4 trap_G2API_SetNewOrigin +0 fffffed5 trap_G2API_SetSurfaceOnOff +0 fffffed6 trap_G2API_SetRootSurface +0 fffffed7 trap_G2API_SetBoltInfo +0 fffffed8 trap_G2API_AddBolt +0 fffffed9 trap_G2API_RemoveGhoul2Model +0 fffffeda trap_G2API_HasGhoul2ModelOnIndex +0 fffffedb trap_G2API_DuplicateGhoul2Instance +0 fffffedc trap_G2API_CopySpecificGhoul2Model +0 fffffedd trap_G2API_CopyGhoul2Instance +0 fffffede trap_G2API_GetGLAName +0 fffffedf trap_G2API_SetBoneAnim +0 fffffee0 trap_G2API_SetBoneAngles +0 fffffee1 trap_G2API_CleanGhoul2Models +0 fffffee2 trap_G2API_InitGhoul2Model +0 fffffee3 trap_G2API_GetBoltMatrix_NoReconstruct +0 fffffee4 trap_G2API_GetBoltMatrix +0 fffffee5 trap_G2API_GiveMeVectorFromMatrix +0 fffffee6 trap_G2_HaveWeGhoul2Models +0 fffffee7 trap_G2_SetGhoul2ModelIndexes +0 fffffee8 trap_G2_ListModelBones +0 fffffee9 trap_G2_ListModelSurfaces +0 fffffeea trap_ROFF_Purge_Ent +0 fffffeeb trap_ROFF_Play +0 fffffeec trap_ROFF_Cache +0 fffffeed trap_ROFF_UpdateEntities +0 fffffeee trap_ROFF_Clean +0 fffffeef trap_SP_Register +0 fffffef0 trap_SP_GetStringTextString +0 fffffef1 trap_SP_Print +0 fffffef2 trap_FX_AddSprite +0 fffffef3 trap_FX_AddPrimitive +0 fffffef4 trap_FX_AddBezier +0 fffffef5 trap_FX_AddPoly +0 fffffef6 trap_FX_AdjustTime +0 fffffef7 trap_FX_FreeSystem +0 fffffef8 trap_FX_InitSystem +0 fffffef9 trap_FX_AddScheduledEffects +0 fffffefa trap_FX_PlayBoltedEffectID +0 fffffefb trap_FX_PlayEntityEffectID +0 fffffefc trap_FX_PlayEffectID +0 fffffefd trap_FX_PlaySimpleEffectID +0 fffffefe trap_FX_PlayEntityEffect +0 fffffeff trap_FX_PlayEffect +0 ffffff00 trap_FX_PlaySimpleEffect +0 ffffff01 trap_FX_RegisterEffect +0 ffffff02 trap_R_inPVS +0 ffffff03 trap_GetEntityToken +0 ffffff04 trap_CIN_SetExtents +0 ffffff05 trap_CIN_DrawCinematic +0 ffffff06 trap_CIN_RunCinematic +0 ffffff07 trap_CIN_StopCinematic +0 ffffff08 trap_CIN_PlayCinematic +0 ffffff09 trap_SnapVector +0 ffffff0a trap_RealTime +0 ffffff0b trap_S_StopBackgroundTrack +0 ffffff0c trap_PC_RemoveAllGlobalDefines +0 ffffff0d trap_PC_LoadGlobalDefines +0 ffffff0e trap_PC_SourceFileAndLine +0 ffffff0f trap_PC_ReadToken +0 ffffff10 trap_PC_FreeSource +0 ffffff11 trap_PC_LoadSource +0 ffffff12 trap_PC_AddGlobalDefine +0 ffffff13 trap_Key_GetKey +0 ffffff14 trap_Key_SetCatcher +0 ffffff15 trap_Key_GetCatcher +0 ffffff16 trap_Key_IsDown +0 ffffff17 trap_MemoryRemaining +0 ffffff1a trap_OpenUIMenu +0 ffffff1b trap_SetClientTurnExtent +0 ffffff1c trap_SetClientForceAngle +0 ffffff1d trap_SetUserCmdValue +0 ffffff1e trap_GetUserCmd +0 ffffff1f trap_GetCurrentCmdNumber +0 ffffff20 trap_GetServerCommand +0 ffffff21 trap_GetSnapshot +0 ffffff22 trap_GetCurrentSnapshotNumber +0 ffffff23 trap_GetGameState +0 ffffff24 trap_GetGlconfig +0 ffffff25 trap_FX_AddLine +0 ffffff26 trap_R_GetBModelVerts +0 ffffff27 trap_R_SetLightStyle +0 ffffff28 trap_R_GetLightStyle +0 ffffff29 trap_R_RemapShader +0 ffffff2a trap_R_DrawRotatePic2 +0 ffffff2b trap_R_DrawRotatePic +0 ffffff2c trap_R_LerpTag +0 ffffff2d trap_R_ModelBounds +0 ffffff2e trap_R_DrawStretchPic +0 ffffff2f trap_R_SetColor +0 ffffff30 trap_R_RenderScene +0 ffffff31 trap_R_AddAdditiveLightToScene +0 ffffff32 trap_R_AddLightToScene +0 ffffff33 trap_R_LightForPoint +0 ffffff34 trap_R_AddPolysToScene +0 ffffff35 trap_R_AddPolyToScene +0 ffffff36 trap_R_AddRefEntityToScene +0 ffffff37 trap_R_ClearScene +0 ffffff8e asin +0 ffffff8f acos +0 ffffff90 ceil +0 ffffff91 floor +0 ffffff92 perpendicularvector +0 ffffff93 anglevectors +0 ffffff94 matrixmultiply +0 ffffff95 sqrt +0 ffffff96 atan2 +0 ffffff97 cos +0 ffffff98 sin +0 ffffff99 strncpy +0 ffffff9a memcpy +0 ffffff9b memset +0 ffffffcb trap_AnyLanguage_ReadCharFromString +0 ffffffcc trap_R_Font_DrawString +0 ffffffcd trap_R_Font_HeightPixels +0 ffffffce trap_R_Font_StrLenChars +0 ffffffcf trap_R_Font_StrLenPixels +0 ffffffd0 trap_R_RegisterFont +0 ffffffd1 trap_R_RegisterShaderNoMip +0 ffffffd2 trap_R_RegisterShader +0 ffffffd3 trap_R_RegisterSkin +0 ffffffd4 trap_R_RegisterModel +0 ffffffd5 trap_R_LoadWorldMap +0 ffffffd6 trap_S_StartBackgroundTrack +0 ffffffd7 trap_S_RegisterSound +0 ffffffd8 trap_S_Respatialize +0 ffffffd9 trap_S_StopLoopingSound +0 ffffffda trap_S_AddRealLoopingSound +0 ffffffdb trap_S_UpdateEntityPosition +0 ffffffdc trap_S_AddLoopingSound +0 ffffffdd trap_S_ClearLoopingSounds +0 ffffffde trap_S_StartLocalSound +0 ffffffdf trap_S_StartSound +0 ffffffe0 trap_S_MuteSound +0 ffffffe1 trap_CM_MarkFragments +0 ffffffe2 trap_CM_TransformedCapsuleTrace +0 ffffffe3 trap_CM_TransformedBoxTrace +0 ffffffe4 trap_CM_CapsuleTrace +0 ffffffe5 trap_CM_BoxTrace +0 ffffffe6 trap_CM_TransformedPointContents +0 ffffffe7 trap_CM_PointContents +0 ffffffe8 trap_CM_TempCapsuleModel +0 ffffffe9 trap_CM_TempBoxModel +0 ffffffea trap_CM_InlineModel +0 ffffffeb trap_CM_NumInlineModels +0 ffffffec trap_CM_LoadMap +0 ffffffed trap_UpdateScreen +0 ffffffee trap_SendClientCommand +0 ffffffef trap_RemoveCommand +0 fffffff0 trap_AddCommand +0 fffffff1 trap_SendConsoleCommand +0 fffffff2 trap_FS_FCloseFile +0 fffffff3 trap_FS_Write +0 fffffff4 trap_FS_Read +0 fffffff5 trap_FS_FOpenFile +0 fffffff6 trap_Args +0 fffffff7 trap_Argv +0 fffffff8 trap_Argc +0 fffffff9 trap_Cvar_VariableStringBuffer +0 fffffffa trap_Cvar_Set +0 fffffffb trap_Cvar_Update +0 fffffffc trap_Cvar_Register +0 fffffffd trap_Milliseconds +0 fffffffe trap_Error +0 ffffffff trap_Print +0 0 vmMain +0 122 C_PointContents +0 138 C_GetLerpOrigin +0 14a C_GetLerpAngles +0 15c C_GetModelScale +0 16e C_Trace +0 19a C_GetBoltPos +0 20d C_ImpactMark +0 24c CG_RegisterCvars +0 332 CG_ForceModelChange +0 368 CG_UpdateCvars +0 3bb CG_CrosshairPlayer +0 3d4 CG_LastAttacker +0 3e5 CG_Printf +0 3fe CG_Error +0 417 Com_Error +0 432 Com_Printf +0 44d CG_Argv +0 45c CG_RegisterItemSounds +0 4f5 CG_RegisterSounds +0 a8e CG_RegisterEffects +0 abc CG_RegisterGraphics +0 1137 CG_GetStripEdString +0 1167 CG_BuildSpectatorString +0 11bb CG_RegisterClients +0 1206 CG_ConfigString +0 1227 CG_StartMusic +0 126a CG_GetMenuBuffer +0 12ce CG_Asset_Parse +0 156d CG_ParseMenu +0 15d8 CG_Load_Menu +0 1628 CG_OwnerDrawHandleKey +0 162d CG_FeederCount +0 1689 CG_SetScoreSelection +0 1720 CG_InfoFromScoreIndex +0 1773 CG_FeederItemText +0 18e3 CG_FeederItemImage +0 18e8 CG_FeederSelection +0 1933 CG_Cvar_Get +0 1952 CG_Text_PaintWithCursor +0 1976 CG_OwnerDrawWidth +0 1a07 CG_PlayCinematic +0 1a26 CG_StopCinematic +0 1a2f CG_DrawCinematic +0 1a4e CG_RunCinematicFrame +0 1a57 CG_LoadHudMenu +0 1af2 CG_AssetCache +0 1b9f CG_Init_CG +0 1bab CG_Init_CGents +0 1bb7 CG_InitItems +0 1bc3 CG_Init +0 1f8c CG_Shutdown +0 1f98 CG_NextForcePower_f +0 1fdc CG_PrevForcePower_f +0 2020 CG_NextInventory_f +0 206a CG_PrevInventory_f +0 20b4 CG_TargetCommand_f +0 20e6 CG_SizeUp_f +0 20fc CG_SizeDown_f +0 2112 CG_Viewpos_f +0 212c CG_ScoresDown_f +0 2151 CG_ScoresUp_f +0 215f CG_scrollScoresDown_f +0 2188 CG_scrollScoresUp_f +0 21b1 CG_spWin_f +0 21e6 CG_spLose_f +0 221b CG_TellTarget_f +0 2246 CG_TellAttacker_f +0 2271 CG_VoiceTellTarget_f +0 229c CG_VoiceTellAttacker_f +0 22c7 CG_NextTeamMember_f +0 22cd CG_PrevTeamMember_f +0 22d3 CG_NextOrder_f +0 2346 CG_ConfirmOrder_f +0 2376 CG_DenyOrder_f +0 2397 CG_TaskOffense_f +0 23ce CG_TaskDefense_f +0 23ed CG_TaskPatrol_f +0 240c CG_TaskCamp_f +0 242b CG_TaskFollow_f +0 244a CG_TaskRetrieve_f +0 2469 CG_TaskEscort_f +0 2488 CG_TaskOwnFlag_f +0 2499 CG_TauntKillInsult_f +0 24a1 CG_TauntPraise_f +0 24a9 CG_TauntTaunt_f +0 24b1 CG_TauntDeathInsult_f +0 24b9 CG_TauntGauntlet_f +0 24c1 CG_TaskSuicide_f +0 24e3 CG_StartOrbit_f +0 252b CG_ConsoleCommand +0 2569 CG_InitConsoleCommands +0 268f MenuFontToHandle +0 26b6 CG_Text_Width +0 26d4 CG_Text_Height +0 26ef CG_Text_Paint +0 275f CG_DrawZoomMask +0 2ab7 CG_Draw3DModel +0 2b25 CG_DrawHead +0 2b5e CG_DrawFlagModel +0 2c43 DrawAmmo +0 2c4c CG_DrawHUDLeftFrame1 +0 2c6c CG_DrawHUDLeftFrame2 +0 2c8c DrawHealthArmor +0 2ef2 CG_DrawHealth +0 2f99 CG_DrawArmor +0 30e0 CG_DrawHUDRightFrame1 +0 3100 CG_DrawHUDRightFrame2 +0 3120 CG_DrawAmmo +0 3286 CG_DrawForcePower +0 3322 CG_DrawHUD +0 35af ForcePower_Valid +0 35dc CG_DrawForceSelect +0 3827 CG_DrawInvenSelect +0 3ac2 CG_DrawStats +0 3ad6 CG_DrawTeamBackground +0 3b13 CG_DrawMiniScoreboard +0 3ba0 CG_DrawEnemyInfo +0 3d3e CG_DrawSnapshot +0 3d7e CG_DrawFPS +0 3e0b CG_DrawTimer +0 3e73 CG_DrawTeamOverlay +0 41b2 CG_DrawPowerupIcons +0 4296 CG_DrawUpperRight +0 4302 CG_AddLagometerFrameInfo +0 4322 CG_AddLagometerSnapshotInfo +0 4365 CG_DrawDisconnect +0 443e CG_DrawLagometer +0 464d CG_CenterPrint +0 468b CG_DrawCenterString +0 476d CG_DrawCrosshair +0 496d CG_WorldCoordToScreenCoordFloat +0 4a16 CG_WorldCoordToScreenCoord +0 4a37 CG_SaberClashFlare +0 4b09 CG_DrawHolocronIcons +0 4b93 CG_IsDurationPower +0 4bbc CG_DrawActivePowers +0 4c82 CG_DrawRocketLocking +0 4e3a CG_ScanForCrosshairEntity +0 4f89 CG_DrawCrosshairNames +0 5032 CG_DrawSpectator +0 51a1 CG_DrawVote +0 5212 CG_DrawTeamVote +0 5362 CG_DrawScoreboard +0 536c CG_DrawIntermission +0 537b CG_DrawFollow +0 53fd CG_DrawAmmoWarning +0 5400 CG_DrawWarmup +0 5604 CG_DrawTimedMenus +0 5625 CG_DrawFlagStatus +0 56f7 CG_Draw2D +0 5d04 CG_DrawTourneyScoreboard +0 5d07 CG_DrawActive +0 5d92 CG_DrawRect +0 5dc4 CG_GetColorForHealth +0 5e62 CG_DrawSides +0 5eb8 CG_DrawTopBottom +0 5f0e CG_FillRect2 +0 5f3d CG_FillRect +0 5f6c CG_DrawPic +0 5f93 CG_DrawRotatePic +0 5fbd CG_DrawRotatePic2 +0 5fe7 CG_DrawChar +0 604e CG_DrawStringExt +0 615a CG_DrawBigString +0 6192 CG_DrawBigStringColor +0 61b8 CG_DrawSmallString +0 61ec CG_DrawSmallStringColor +0 620d CG_DrawStrlen +0 6255 CG_TileClearBox +0 629c CG_TileClear +0 6333 CG_FadeColor +0 6377 CG_ColorForGivenHealth +0 63c6 CG_ColorForHealth +0 642b CG_DrawNumField +0 665b UI_DrawProportionalString +0 66e4 UI_DrawScaledProportionalString +0 675b CG_BubbleTrail +0 68f9 CG_SmokePuff +0 6a5c CG_TestLine +0 6b2d CG_ThrowChunk +0 6be0 CG_DoGlassQuad +0 6d4d CG_CalcBiLerp +0 734a CG_CalcHeightWidth +0 74f7 CG_InitGlass +0 754e Vector2Set +0 755d CG_DoGlass +0 77d9 CG_GlassShatter +0 7811 CG_GlassShatter_Old +0 79a7 CG_CreateDebris +0 7bc4 CG_ScorePlum +0 7c8c CG_ExplosionEffects +0 7cd2 CG_MakeExplosion +0 7e91 CG_SurfaceExplosion +0 8136 CG_Bleed +0 819d CG_LaunchGib +0 821c CG_GibPlayer +0 84ab CG_LaunchExplode +0 852a CG_BigExplode +0 8684 CG_PositionEntityOnTag +0 8758 CG_PositionRotatedEntityOnTag +0 8829 CG_SetEntitySoundPosition +0 8886 CG_EntityEffects +0 897a FX_AddOrientedLine +0 8a42 FX_DrawPortableShield +0 8b56 CG_Special +0 8b79 CG_SetGhoul2Info +0 8ba2 CG_CreateBBRefEnts +0 8ba5 G2_BoltToGhoul2Model +0 8c56 ScaleModelAxis +0 8d5e CG_General +0 9b00 CG_Speaker +0 9b71 CG_GreyItem +0 9b9e CG_Item +0 a276 CG_Missile +0 a637 CG_Mover +0 a6b1 CG_Beam +0 a6e5 CG_Portal +0 a75c CG_AdjustPositionForMover +0 a813 LerpBoneAngleOverrides +0 a816 CG_InterpolateEntityPosition +0 a8dc CG_CalcEntityLerpPositions +0 a981 CG_TeamBase +0 a9d1 CG_AddCEntity +0 aa86 CG_ManualEntityRender +0 aa8f CG_AddPacketEntities +0 ab78 CG_ROFF_NotetrackCallback +0 ae52 CG_PlaceString +0 af6e CG_Obituary +0 b2cf CG_ToggleBinoculars +0 b339 CG_UseItem +0 b3ec CG_ItemPickup +0 b507 CG_PainEvent +0 b562 CG_ReattachLimb +0 b5da CG_BodyQueueCopy +0 b7b8 CG_TeamName +0 b7d5 CG_PrintCTFMessage +0 b8f1 CG_GetCTFMessageEvent +0 b932 DoFall +0 ba00 CG_InClientBitflags +0 ba4f CG_EntityEvent +0 d308 CG_CheckEvents +0 d39e CG_LoadingString +0 d3ae CG_LoadingItem +0 d3c9 CG_LoadingClient +0 d3f6 CG_DrawInformation +0 da64 CG_LoadBar +0 db22 CG_ClearLightStyles +0 db44 CG_RunLightStyles +0 dc0e CG_SetLightstyle +0 dc99 CG_InitLocalEntities +0 dccf CG_FreeLocalEntity +0 dd08 CG_AllocLocalEntity +0 dd46 CG_BloodTrail +0 ddbb CG_FragmentBounceMark +0 de5e CG_FragmentBounceSound +0 de77 CG_ReflectVelocity +0 df6d CG_AddFragment +0 e0e8 CG_AddFadeRGB +0 e1ba CG_AddFadeScaleModel +0 e371 CG_AddMoveScaleFade +0 e45c CG_AddPuff +0 e568 CG_AddScaleFade +0 e601 CG_AddFallScaleFade +0 e6b3 CG_AddExplosion +0 e724 CG_AddSpriteExplosion +0 e7f0 CG_AddRefEntity +0 e80b CG_AddScorePlum +0 ea41 CG_AddOLine +0 eb65 CG_AddLine +0 eb78 CG_AddLocalEntities +0 ec28 CG_InitMarkPolys +0 ec5e CG_FreeMarkPoly +0 ec97 CG_AllocMark +0 ecee CG_ImpactMark +0 efc8 CG_AddMarks +0 f292 CG_ClearParticles +0 f335 CG_AddParticleToScene +0 10b51 CG_AddParticles +0 10d56 CG_ParticleSnowFlurry +0 10ef2 CG_ParticleSnow +0 11048 CG_ParticleBubble +0 111c7 CG_ParticleSmoke +0 112c6 CG_ParticleBulletDebris +0 11387 CG_ParticleExplosion +0 11492 CG_AddParticleShrapnel +0 11495 CG_NewParticleArea +0 115d6 CG_SnowLink +0 1161c CG_ParticleImpactSmokePuff +0 116ff CG_Particle_Bleed +0 117e3 CG_Particle_OilParticle +0 118e5 CG_Particle_OilSlick +0 11a26 CG_OilSlickRemove +0 11a71 ValidBloodPool +0 11b77 CG_BloodPool +0 11c70 CG_ParticleBloodCloud +0 11dac CG_ParticleSparks +0 11f22 CG_ParticleDust +0 12128 CG_ParticleMisc +0 121c8 CG_CustomSound +0 12236 CG_NeedAnimSequence +0 1226b CG_RegisterClientModelname +0 127bb CG_ColorFromString +0 1281f CG_LoadClientInfo +0 12b11 CG_CopyClientInfoModel +0 12c40 CG_ScanForExistingClientInfo +0 12cfe CG_SetDeferredClientInfo +0 12e28 CG_NewClientInfo +0 13218 CG_ActualLoadDeferredPlayers +0 13260 CG_LoadDeferredPlayers +0 13266 CG_InRoll +0 13290 CG_InRollAnim +0 132b2 CG_SetLerpFrameAnimation +0 1371a CG_FirstAnimFrame +0 1375d CG_InWalkingAnim +0 137b4 CG_FootstepForSurface +0 1384e CG_FootStep +0 138cc CG_RunLerpFrame +0 13d75 CG_ClearLerpFrame +0 13dba CG_PlayerAnimation +0 13ea0 CG_SwingAngles +0 13faa CG_SwingAnglesATST +0 140db CG_AddPainTwitch +0 14122 CG_G2SetBoneAngles +0 14159 CG_G2ClientSpineAngles +0 14497 CG_G2PlayerAngles +0 14a88 CG_HasteTrail +0 14b05 CG_PlayerFlag +0 14c22 CG_PlayerPowerups +0 14cf0 CG_PlayerFloatSprite +0 14d3c CG_PlayerShadow +0 14df9 CG_PlayerSplash +0 14eec CG_ForcePushBlur +0 14feb CG_ForceGripEffect +0 15108 CG_AddRefEntityWithPowerups +0 15176 CG_PlayerShieldHit +0 151ea CG_DrawPlayerShield +0 1529e CG_PlayerHitFX +0 152c9 CG_LightVerts +0 153f9 CG_DoSaber +0 1561a CG_GetTagWorldPosition +0 156e3 CG_CreateSaberMarks +0 159e2 CG_AddSaberBlade +0 1605f CG_IsMindTricked +0 160b1 CG_DrawPlayerSphere +0 1614e CG_AddLightningBeam +0 162f1 CG_AddRandomLightning +0 163e7 CG_ThereIsAMaster +0 16412 CG_Player +0 182e9 CG_ResetPlayerEntity +0 1844e CG_CheckAmmo +0 18451 CG_DamageFeedback +0 18594 CG_Respawn +0 185a5 CG_CheckPlayerstateEvents +0 18687 CG_CheckChangedPredictableEvents +0 18714 CG_CheckLocalSounds +0 1890c CG_TransitionPlayerState +0 189c2 CG_BuildSolidList +0 18a51 CG_ClipMoveToEntities +0 18b62 CG_Trace +0 18ba6 CG_PointContents +0 18c16 CG_InterpolatePlayerState +0 18d4b CG_TouchItem +0 18e3d CG_TouchTriggerPrediction +0 18ef4 CG_EntityStateToPlayerState +0 1908e CG_PredictPlayerState +0 19409 CGSagaGetValueGroup +0 19504 CGSagaGetPairedValue +0 196dc CG_InitSagaMode +0 1976f CG_SagaRoundOver +0 19846 CG_SagaObjectiveCompleted +0 19969 CG_DrawClientScore +0 19c25 CG_TeamScoreboard +0 19ca2 CG_GetTeamCount +0 19ce4 CG_DrawOldScoreboard +0 1a2cc CG_ValidOrder +0 1a2fe CG_ParseScores +0 1a532 CG_ParseTeamInfo +0 1a601 CG_ParseServerinfo +0 1a7be CG_ParseWarmup +0 1a7dd CG_SetConfigValues +0 1a8f9 CG_ShaderStateChanged +0 1a9b1 CG_ConfigStringModified +0 1ac68 CG_AddToTeamChat +0 1ade3 CG_KillCEntityInstances +0 1aef4 CG_MapRestart +0 1af7e CG_ParseVoiceChats +0 1b1e1 CG_LoadVoiceChats +0 1b243 CG_HeadModelVoiceChats +0 1b2dd CG_GetVoiceChat +0 1b351 CG_VoiceChatListForClient +0 1b36d CG_PlayVoiceChat +0 1b3e7 CG_PlayBufferedVoiceChats +0 1b415 CG_AddBufferedVoiceChat +0 1b454 CG_VoiceChatLocal +0 1b506 CG_VoiceChat +0 1b59f CG_RemoveChatEscapeChar +0 1b5e5 CG_CheckSVStripEdRef +0 1b712 CG_ServerCommand +0 1ba31 CG_ExecuteNewServerCommands +0 1ba58 CG_ResetEntity +0 1ba9c CG_TransitionEntity +0 1bac9 CG_SetInitialSnapshot +0 1bb8a CG_TransitionSnapshot +0 1bc90 CG_SetNextSnap +0 1bd77 CG_ReadNextSnapshot +0 1bde6 CG_ProcessSnapshots +0 1be96 CreepToPosition +0 1c063 TurretClientRun +0 1c365 CG_TestModel_f +0 1c3f0 CG_TestGun_f +0 1c3fc CG_TestModelNextFrame_f +0 1c412 CG_TestModelPrevFrame_f +0 1c42f CG_TestModelNextSkin_f +0 1c445 CG_TestModelPrevSkin_f +0 1c462 CG_AddTestModel +0 1c4ed CG_CalcVrect +0 1c55a CG_StepOffset +0 1c57c CG_CalcIdealThirdPersonViewTarget +0 1c5bc CG_CalcIdealThirdPersonViewLocation +0 1c5f5 CG_ResetThirdPersonViewDamp +0 1c662 CG_UpdateThirdPersonTargetDamp +0 1c6e9 CG_UpdateThirdPersonCameraDamp +0 1c7af CG_OffsetThirdPersonView +0 1c8d5 CG_OffsetFirstPersonView +0 1cb02 CG_ZoomDown_f +0 1cb12 CG_ZoomUp_f +0 1cb22 CG_CalcFOVFromX +0 1cb5d CG_CalcFov +0 1ccda CG_DamageBlendBlob +0 1cf22 CheckOutOfConstrict +0 1cf8d CG_CalcViewValues +0 1d0b4 CG_PowerupTimerSounds +0 1d0f4 CG_AddBufferedSound +0 1d11e CG_PlayBufferedSounds +0 1d157 CG_UpdateSoundTrackers +0 1d1b0 CG_SE_UpdateShake +0 1d293 CG_SE_UpdateMusic +0 1d2fc CG_CalcScreenEffects +0 1d309 CGCam_Shake +0 1d31f CGCam_SetMusicMult +0 1d33e CG_DrawActiveFrame +0 1d558 CG_RegisterWeapon +0 1e0a5 CG_SetGhoul2InfoRef +0 1e0e2 CG_RegisterItemVisuals +0 1e244 CG_MapTorsoToWeaponFrame +0 1e346 CG_CalculateWeaponPosition +0 1e42b CG_LightningBolt +0 1e450 CG_AddWeaponWithPowerups +0 1e47f CG_AddPlayerWeapon +0 1e984 CG_AddViewWeapon +0 1eb35 CG_DrawIconBackground +0 1ed0c CG_WeaponCheck +0 1ed45 CG_WeaponSelectable +0 1eda6 CG_DrawWeaponSelect +0 1f0f6 CG_NextWeapon_f +0 1f15c CG_PrevWeapon_f +0 1f1c2 CG_Weapon_f +0 1f2ed CG_OutOfAmmoChange +0 1f336 CG_FireATST +0 1f354 CG_GetClientWeaponMuzzleBoltPoint +0 1f3ca CG_FireWeapon +0 1f592 CG_MissileHitWall +0 1f672 CG_MissileHitPlayer +0 1f76b CG_Tracer +0 1f978 CG_CalcMuzzlePoint +0 1fb66 CG_InitG2Weapons +0 1fbf2 CG_ShutDownG2Weapons +0 1fc0c CG_CopyG2WeaponInstance +0 1fc43 CG_CheckPlayerG2Weapons +0 1fd67 FX_BlasterProjectileThink +0 1fd89 FX_BlasterAltFireThink +0 1fdab FX_BlasterWeaponHitWall +0 1fdba FX_BlasterWeaponHitPlayer +0 1fddb FX_BowcasterProjectileThink +0 1fdfd FX_BowcasterHitWall +0 1fe0c FX_BowcasterHitPlayer +0 1fe1b FX_BowcasterAltProjectileThink +0 1fe3d FX_BryarProjectileThink +0 1fe5f FX_BryarHitWall +0 1fe6e FX_BryarHitPlayer +0 1fe8f FX_BryarAltProjectileThink +0 1fed1 FX_BryarAltHitWall +0 1ff15 FX_BryarAltHitPlayer +0 1ff36 FX_TurretProjectileThink +0 1ff58 FX_TurretHitWall +0 1ff67 FX_TurretHitPlayer +0 1ff88 FX_DEMP2_ProjectileThink +0 1ffaa FX_DEMP2_HitWall +0 1ffb9 FX_DEMP2_HitPlayer +0 1ffc8 FX_DEMP2_AltBeam +0 1ffcb FX_DEMP2_AltDetonate +0 2003d FX_DisruptorMainShot +0 20074 FX_DisruptorAltShot +0 200e1 FX_DisruptorAltMiss +0 201bd FX_DisruptorAltHit +0 201cc FX_DisruptorHitWall +0 201db FX_DisruptorHitPlayer +0 201ea FX_FlechetteProjectileThink +0 2020c FX_FlechetteWeaponHitWall +0 2021b FX_FlechetteWeaponHitPlayer +0 2022a FX_FlechetteAltProjectileThink +0 2024c FX_RepeaterProjectileThink +0 2026e FX_RepeaterHitWall +0 2027d FX_RepeaterHitPlayer +0 2028c FX_RepeaterAltProjectileThink +0 202ae FX_RepeaterAltHitWall +0 202bd FX_RepeaterAltHitPlayer +0 202cc FX_RocketProjectileThink +0 202ee FX_RocketHitWall +0 202fd FX_RocketHitPlayer +0 2030c FX_RocketAltProjectileThink +0 2032e FX_ForceDrained +0 20365 PM_SlideMove +0 20755 PM_StepSlideMove +0 20aa4 BG_InSpecialJump +0 20ac9 BG_InSaberStandAnim +0 20aef BG_DirectFlippingAnim +0 20b0e BG_SaberInAttack +0 20b3b BG_SaberInSpecial +0 20b58 BG_SaberInIdle +0 20b75 BG_FlippingAnim +0 20bbd BG_SpinningSaberAnim +0 20cd5 BG_SaberInSpecialAttack +0 20cfe BG_InRoll +0 20d24 BG_InDeathAnim +0 20d49 PM_SaberInParry +0 20d5e PM_SaberInReflect +0 20d73 PM_SaberInStart +0 20d88 PM_InSaberAnim +0 20d9f PM_InKnockDown +0 20dcc PM_PainAnim +0 20deb PM_JumpingAnim +0 20e0a PM_LandingAnim +0 20e51 PM_SpinningAnim +0 20e5e PM_InOnGroundAnim +0 20ebb PM_InRollComplete +0 20ee1 PM_AnimLength +0 20f0e PM_DebugLegsAnim +0 20f59 BG_ParseAnimationFile +0 210d1 PM_StartLegsAnim +0 21156 PM_ContinueLegsAnim +0 21176 PM_ForceLegsAnim +0 211e6 PM_StartTorsoAnim +0 21241 PM_SetLegsAnimTimer +0 2125f PM_SetTorsoAnimTimer +0 2127d BG_SaberStartTransAnim +0 212cc PM_SetAnimFinal +0 21508 PM_SetAnim +0 21581 PM_GetSaberStance +0 2159e PM_DoSlowFall +0 215c1 PM_AddEvent +0 215d0 PM_AddEventWithParm +0 215e0 PM_AddTouchEnt +0 21635 PM_ClipVelocity +0 216ae PM_Friction +0 217aa PM_Accelerate +0 21826 PM_CmdScale +0 218bd PM_SetMovementDir +0 21a09 PM_ForceJumpingUp +0 21ac8 PM_JumpForDir +0 21b6b PM_SetPMViewAngle +0 21bac PM_AdjustAngleForWallRun +0 21db0 PM_CheckJump +0 22b4c PM_CheckWaterJump +0 22c33 PM_WaterJumpMove +0 22c74 PM_WaterMove +0 22da5 PM_FlyMove +0 22e30 PM_AirMove +0 22ef3 PM_WalkMove +0 23195 PM_DeadMove +0 2320e PM_NoclipMove +0 23380 PM_FootstepForSurface +0 23399 PM_TryRoll +0 235aa PM_CrashLand +0 238bb PM_CorrectAllSolid +0 239a2 PM_GroundTraceMissed +0 23b0d PM_GroundTrace +0 23ca0 PM_SetWaterLevel +0 23d6d PM_CheckDuck +0 23f43 PM_Use +0 23f8c PM_RunningAnim +0 23fba PM_Footsteps +0 24231 PM_WaterEvents +0 24288 PM_BeginWeaponChange +0 242ee PM_FinishWeaponChange +0 24341 PM_DoChargedWeapons +0 2481b PM_ItemUsable +0 24a46 PM_Weapon +0 25373 PM_Animate +0 253d1 PM_DropTimers +0 2545b PM_UpdateViewAngles +0 254ff PM_AdjustAttackStates +0 25877 BG_CmdForRoll +0 258cc BG_AdjustClientSpeed +0 25c7f PmoveSingle +0 260f5 Pmove +0 261a1 swapfunc +0 26228 med3 +0 262ab qsort +0 26664 strlen +0 2667f strcat +0 266c2 strcpy +0 266f7 strcmp +0 26730 strchr +0 2674f strstr +0 26795 tolower +0 267ad toupper +0 267c5 memmove +0 2680c tan +0 26823 srand +0 2682a rand +0 2683f atof +0 26904 _atof +0 269cf atoi +0 26a47 _atoi +0 26ac9 abs +0 26ade fabs +0 26af3 AddInt +0 26bce AddFloat +0 26cdc AddString +0 26d73 vsprintf +0 26f0b sscanf +0 26f76 BG_LegalizedForcePowers +0 27343 vectoyaw +0 2739d BG_HasYsalamiri +0 273cc BG_CanUseFPNow +0 27433 BG_FindItemForPowerup +0 2746f BG_FindItemForHoldable +0 274a9 BG_FindItemForWeapon +0 274dc BG_FindItem +0 27505 BG_PlayerTouchesItem +0 27565 BG_ProperForceIndex +0 27588 BG_CycleForce +0 27660 BG_GetItemIndexByTag +0 27690 BG_CycleInven +0 276fc BG_CanItemBeGrabbed +0 278f9 BG_EvaluateTrajectory +0 27ac7 BG_EvaluateTrajectoryDelta +0 27bc1 BG_AddPredictableEventToPlayerstate +0 27bfc BG_TouchJumpPad +0 27c60 BG_PlayerStateToEntityState +0 27f6b BG_PlayerStateToEntityStateExtraPolate +0 28283 BG_SwingAngles +0 28388 BG_AddPainTwitch +0 283c9 BG_G2PlayerAngles +0 28566 BG_Alloc +0 285a6 BG_AllocUnaligned +0 285d9 BG_TempAlloc +0 28611 BG_TempFree +0 2863e BG_StringAlloc +0 28661 BG_OutOfMemory +0 28673 PM_irand_timesync +0 286a8 BG_ForcePowerDrain +0 28766 PM_AttackMoveForQuad +0 2879b PM_SaberAnimTransitionAnim +0 28880 PM_SaberMoveQuadrantForMovement +0 288e5 PM_SaberInBounce +0 2890a PM_SaberInTransition +0 2891f PM_SaberKataDone +0 28965 PM_SetAnimFrame +0 2896f PM_SaberLockBreak +0 28c38 PM_SaberLocked +0 28e5c PM_SaberInBrokenParry +0 28e71 PM_BrokenParryForParry +0 28eb3 PM_CanBackstab +0 28f34 PM_SaberFlipOverAttackMove +0 29035 PM_SomeoneInFront +0 290c5 PM_SaberLungeAttackMove +0 2910f PM_SaberJumpAttackMove +0 2917c PM_GroundDistance +0 291e5 PM_SaberAttackForMovement +0 29339 PM_WeaponLightsaber +0 29b41 PM_SetSaberMove +0 29d0e Q_rand +0 29d23 Q_random +0 29d35 Q_crandom +0 29d46 VectorCompare +0 29d7e VectorLength +0 29db1 VectorLengthSquared +0 29ddd Distance +0 29e1e DistanceSquared +0 29e6c VectorNormalizeFast +0 29ecb VectorInverse +0 29ef3 CrossProduct +0 29f6c ClampChar +0 29f83 ClampShort +0 29f9a DirToByte +0 29ff5 ByteToDir +0 2a013 ColorBytes3 +0 2a082 ColorBytes4 +0 2a114 NormalizeColor +0 2a18a PlaneFromPoints +0 2a248 RotatePointAroundVector +0 2a353 RotateAroundDirection +0 2a397 vectoangles +0 2a453 AnglesToAxis +0 2a488 AxisClear +0 2a4bf AxisCopy +0 2a4e3 ProjectPointOnPlane +0 2a59e MakeNormalVectors +0 2a649 VectorRotate +0 2a6e6 Q_rsqrt +0 2a71d Q_fabs +0 2a72d LerpAngle +0 2a75e AngleSubtract +0 2a783 AnglesSubtract +0 2a7d1 AngleMod +0 2a7e3 AngleNormalize360 +0 2a7f1 AngleNormalize180 +0 2a80c AngleDelta +0 2a81c SetPlaneSignbits +0 2a849 BoxOnPlaneSide +0 2ac0a RadiusFromBounds +0 2ac5d ClearBounds +0 2ac94 AddPointToBounds +0 2ad2d VectorNormalize +0 2ad9d VectorNormalize2 +0 2ae2b _VectorMA +0 2ae6d _DotProduct +0 2aea2 _VectorSubtract +0 2aedb _VectorAdd +0 2af14 _VectorCopy +0 2af3b _VectorScale +0 2af6b Vector4Scale +0 2afad Q_log2 +0 2afcc MatrixMultiply +0 2b1a1 AngleVectors +0 2b299 PerpendicularVector +0 2b305 Rand_Init +0 2b30c flrand +0 2b347 irand +0 2b379 powf +0 2b39c GetIDForString +0 2b3e1 GetStringForID +0 2b41d Com_Clamp +0 2b437 COM_SkipPath +0 2b45b COM_StripExtension +0 2b491 COM_DefaultExtension +0 2b4d9 ShortSwap +0 2b4f9 ShortNoSwap +0 2b504 LongSwap +0 2b537 LongNoSwap +0 2b53d Long64Swap +0 2b57a Long64NoSwap +0 2b582 FloatSwap +0 2b598 FloatNoSwap +0 2b59f COM_BeginParseSession +0 2b5b1 COM_GetCurrentParseLine +0 2b5b7 COM_Parse +0 2b5c6 COM_ParseError +0 2b5e6 COM_ParseWarning +0 2b606 SkipWhitespace +0 2b63d COM_Compress +0 2b790 COM_ParseExt +0 2b8dc COM_MatchToken +0 2b905 SkipBracedSection +0 2b943 SkipRestOfLine +0 2b97b Parse1DMatrix +0 2b9ba Parse2DMatrix +0 2b9f5 Parse3DMatrix +0 2ba3a Q_isprint +0 2ba4f Q_islower +0 2ba64 Q_isupper +0 2ba79 Q_isalpha +0 2ba9a Q_strrchr +0 2bace Q_strncpyz +0 2bb09 Q_stricmpn +0 2bb94 Q_strncmp +0 2bbe6 Q_stricmp +0 2bc0e Q_strlwr +0 2bc34 Q_strupr +0 2bc5a Q_strcat +0 2bc86 Q_PrintStrlen +0 2bcd6 Q_CleanStr +0 2bd3c Com_sprintf +0 2bd7b va +0 2bda8 Info_ValueForKey +0 2be88 Info_NextPair +0 2bf26 Info_RemoveKey +0 2bff6 Info_RemoveKey_Big +0 2c0c6 Info_Validate +0 2c0ed Info_SetValueForKey +0 2c1bd Info_SetValueForKey_Big +0 2c285 Q_irand +0 2c29d UI_Alloc +0 2c2d7 UI_InitMemory +0 2c2e0 UI_OutOfMemory +0 2c2e6 hashForString +0 2c326 String_Alloc +0 2c3ff String_Report +0 2c448 String_Init +0 2c48c PC_SourceWarning +0 2c4bc PC_SourceError +0 2c4ec LerpColor +0 2c547 Float_Parse +0 2c573 PC_Float_Parse +0 2c5c8 Color_Parse +0 2c5f5 PC_Color_Parse +0 2c622 Int_Parse +0 2c64e PC_Int_Parse +0 2c6a6 Rect_Parse +0 2c6ed PC_Rect_Parse +0 2c734 String_Parse +0 2c760 PC_String_Parse +0 2c7d5 PC_Script_Parse +0 2c857 Init_Display +0 2c85e GradientBar_Paint +0 2c8a4 Window_Init +0 2c8e0 Fade +0 2c951 Window_Paint +0 2cc9b Item_SetScreenCoords +0 2cd2f Item_UpdatePosition +0 2cd82 Menu_UpdatePosition +0 2cdd9 Menu_PostParse +0 2ce05 Menu_ClearFocus +0 2ce88 IsVisible +0 2ceab Rect_ContainsPoint +0 2cef0 Menu_ItemsMatchingGroup +0 2cf4c Menu_GetMatchingItemByNumber +0 2cfb9 Script_SetColor +0 2d053 Script_SetAsset +0 2d06c Script_SetBackground +0 2d08e Menu_FindItemByName +0 2d0dd Script_SetTeamColor +0 2d112 Script_SetItemColor +0 2d1eb Script_SetItemRect +0 2d269 Menu_ShowItemByName +0 2d2db Menu_FadeItemByName +0 2d354 Menus_FindByName +0 2d385 Menus_ShowByName +0 2d39d Menus_OpenByName +0 2d3a6 Menu_RunCloseScript +0 2d3d5 Menus_CloseByName +0 2d435 Menus_CloseAll +0 2d46b Script_Show +0 2d48b Script_Hide +0 2d4ab Script_FadeIn +0 2d4cb Script_FadeOut +0 2d4eb Script_Open +0 2d503 Script_Close +0 2d52d Menu_TransitionItemByName +0 2d618 Script_Defer +0 2d63f Script_RunDeferred +0 2d659 Script_Transition +0 2d6bb Menu_OrbitItemByName +0 2d728 Script_Orbit +0 2d796 Script_SetFocus +0 2d821 Script_SetPlayerModel +0 2d83f Script_SetPlayerHead +0 2d85d Script_SetCvar +0 2d889 Script_SetCvarToCvar +0 2d8c2 Script_Exec +0 2d8e9 Script_Play +0 2d912 Script_playLooped +0 2d93e Item_RunScript +0 2d9db Item_EnableShowViaCvar +0 2dab4 Item_SetFocus +0 2dc20 Item_TextScroll_MaxScroll +0 2dc4f Item_TextScroll_ThumbPosition +0 2dc99 Item_TextScroll_ThumbDrawPosition +0 2dd02 Item_TextScroll_OverLB +0 2ddea Item_TextScroll_MouseEnter +0 2de1b Item_TextScroll_HandleKey +0 2dfb1 Item_ListBox_MaxScroll +0 2e00b Item_ListBox_ThumbPosition +0 2e092 Item_ListBox_ThumbDrawPosition +0 2e157 Item_Slider_ThumbPosition +0 2e1ef Item_Slider_OverSlider +0 2e224 Item_ListBox_OverLB +0 2e3ef Item_ListBox_MouseEnter +0 2e524 Item_MouseEnter +0 2e646 Item_MouseLeave +0 2e692 Menu_HitTest +0 2e6d0 Item_SetMouseOver +0 2e6f9 Item_OwnerDraw_HandleKey +0 2e733 Item_ListBox_HandleKey +0 2ec50 Item_YesNo_HandleKey +0 2ecd6 Item_Multi_CountSettings +0 2ecee Item_Multi_FindCvarByValue +0 2ed73 Item_Multi_Setting +0 2ee04 Item_Multi_HandleKey +0 2eef7 Item_TextField_HandleKey +0 2f27b Scroll_TextScroll_AutoFunc +0 2f2d8 Scroll_TextScroll_ThumbFunc +0 2f3c7 Scroll_ListBox_AutoFunc +0 2f424 Scroll_ListBox_ThumbFunc +0 2f5ab Scroll_Slider_ThumbFunc +0 2f645 Item_StartCapture +0 2f7ba Item_StopCapture +0 2f7bd Item_Slider_HandleKey +0 2f8b9 Item_HandleKey +0 2f9c9 Item_Action +0 2f9e0 Menu_SetPrevCursorItem +0 2fab6 Menu_SetNextCursorItem +0 2fb83 Window_CloseCinematic +0 2fbab Menu_CloseCinematics +0 2fbff Display_CloseCinematics +0 2fc1c Menus_Activate +0 2fc73 Display_VisibleMenuCount +0 2fc9d Menus_HandleOOBClick +0 2fd60 Item_CorrectedTextRect +0 2fd88 Menu_HandleKey +0 300a9 ToWindowCoords +0 300f1 Rect_ToWindowCoords +0 30106 Item_SetTextExtents +0 302aa Item_TextColor +0 303f0 Item_Text_AutoWrapped_Paint +0 305a0 Item_Text_Wrapped_Paint +0 306ad Item_Text_Paint +0 3079e Item_TextField_Paint +0 30914 Item_YesNo_Paint +0 30a48 Item_Multi_Paint +0 30b36 Controls_GetKeyAssignment +0 30b94 Controls_GetConfig +0 30bc6 Controls_SetConfig +0 30c1d Controls_SetDefaults +0 30c50 BindingIDFromName +0 30c7d BindingFromName +0 30d0e Item_Slider_Paint +0 30e11 Item_Bind_Paint +0 30fea Display_KeyBindPending +0 30ff0 Item_Bind_HandleKey +0 311fb Item_Model_Paint +0 3132b Item_Image_Paint +0 31372 Item_TextScroll_Paint +0 31504 Item_ListBox_Paint +0 31abb Item_OwnerDraw_Paint +0 31d81 Item_Paint +0 3236b Menu_Init +0 323a2 Menu_GetFocusedItem +0 323e1 Menu_GetFocused +0 3241c Menu_ScrollFeeder +0 3246f Menu_SetFeederSelection +0 32504 Menus_AnyFullScreenVisible +0 32538 Menus_ActivateByName +0 325c7 Item_Init +0 325e0 Menu_HandleMouseMove +0 32738 Menu_Paint +0 32893 Item_ValidateTypeData +0 32957 KeywordHash_Key +0 329bb KeywordHash_Add +0 329e1 KeywordHash_Find +0 32a1c ItemParse_name +0 32a35 ItemParse_focusSound +0 32a5d ItemParse_text +0 32a76 ItemParse_descText +0 32a8f ItemParse_text2 +0 32aa8 ItemParse_text2alignx +0 32ac1 ItemParse_text2aligny +0 32ada ItemParse_group +0 32af3 ItemParse_asset_model +0 32b33 ItemParse_asset_shader +0 32b59 ItemParse_model_origin +0 32b9f ItemParse_model_fovx +0 32bc5 ItemParse_model_fovy +0 32beb ItemParse_model_rotation +0 32c11 ItemParse_model_angle +0 32c35 ItemParse_rect +0 32c4e ItemParse_flag +0 32cb9 ItemParse_style +0 32cd7 ItemParse_decoration +0 32cea ItemParse_notselectable +0 32d0d ItemParse_wrapped +0 32d20 ItemParse_autowrapped +0 32d33 ItemParse_horizontalscroll +0 32d46 ItemParse_type +0 32d65 ItemParse_elementwidth +0 32d8b ItemParse_elementheight +0 32db1 ItemParse_feeder +0 32dca ItemParse_elementtype +0 32dfb ItemParse_columns +0 32e9e ItemParse_border +0 32eb7 ItemParse_bordersize +0 32ed0 ItemParse_visible +0 32ef8 ItemParse_ownerdraw +0 32f17 ItemParse_align +0 32f30 ItemParse_textalign +0 32f4e ItemParse_textalignx +0 32f67 ItemParse_textaligny +0 32f80 ItemParse_textscale +0 32f99 ItemParse_textstyle +0 32fb2 ItemParse_backcolor +0 32fe1 ItemParse_forecolor +0 3301e ItemParse_bordercolor +0 3304d ItemParse_outlinecolor +0 33066 ItemParse_background +0 3308c ItemParse_cinematic +0 330a5 ItemParse_doubleClick +0 330d6 ItemParse_onFocus +0 330ef ItemParse_leaveFocus +0 33108 ItemParse_mouseEnter +0 33121 ItemParse_mouseExit +0 3313a ItemParse_mouseEnterText +0 33153 ItemParse_mouseExitText +0 3316c ItemParse_action +0 33185 ItemParse_special +0 3319e ItemParse_cvarTest +0 331b7 ItemParse_cvar +0 33218 ItemParse_font +0 33237 ItemParse_maxChars +0 3326c ItemParse_maxPaintChars +0 332a1 ItemParse_maxLineChars +0 332d6 ItemParse_lineHeight +0 3330c ItemParse_cvarFloat +0 3336b ItemParse_cvarStrList +0 3342d ItemParse_cvarFloatList +0 334eb ItemParse_addColorRange +0 3354d ItemParse_ownerdrawFlag +0 33572 ItemParse_enableCvar +0 33591 ItemParse_disableCvar +0 335b0 ItemParse_showCvar +0 335cf ItemParse_hideCvar +0 335ee ItemParse_Appearance_slot +0 33607 Item_SetupKeywordHash +0 33633 Item_Parse +0 336b2 Item_TextScroll_BuildLines +0 337f1 Item_InitControls +0 3382e MenuParse_font +0 33871 MenuParse_name +0 3389e MenuParse_fullscreen +0 338bb MenuParse_rect +0 338d6 MenuParse_style +0 338f8 MenuParse_visible +0 33924 MenuParse_onOpen +0 33941 MenuParse_onClose +0 3395e MenuParse_onESC +0 3397b MenuParse_border +0 33998 MenuParse_borderSize +0 339b5 MenuParse_backcolor +0 339e8 MenuParse_descAlignment +0 33a0a MenuParse_descX +0 33a27 MenuParse_descY +0 33a44 MenuParse_descScale +0 33a61 MenuParse_descColor +0 33a94 MenuParse_forecolor +0 33ad5 MenuParse_bordercolor +0 33b08 MenuParse_focuscolor +0 33b3b MenuParse_disablecolor +0 33b6e MenuParse_outlinecolor +0 33b8b MenuParse_background +0 33bb5 MenuParse_cinematic +0 33bd2 MenuParse_ownerdrawFlag +0 33bfb MenuParse_ownerdraw +0 33c18 MenuParse_popup +0 33c2f MenuParse_outOfBounds +0 33c46 MenuParse_soundLoop +0 33c63 MenuParse_fadeClamp +0 33c80 MenuParse_fadeAmount +0 33c9d MenuParse_fadeCycle +0 33cba MenuParse_itemDef +0 33d3f MenuParse_appearanceIncrement +0 33d5c Menu_SetupKeywordHash +0 33d88 Menu_Parse +0 33e07 Menu_New +0 33e3b Menu_Count +0 33e41 Menu_PaintAll +0 33ed8 Menu_Reset +0 33ede Display_GetContext +0 33ee4 Display_CaptureItem +0 33f19 Display_MouseMove +0 33f91 Display_CursorType +0 33fdd Display_HandleKey +0 3400a Window_CacheContents +0 34043 Item_CacheContents +0 34050 Menu_CacheContents +0 3409c Display_CacheAll +0 340b9 Menu_OverActiveItem +0 3416c CG_InitTeamChat +0 3418a CG_SetPrintString +0 341aa CG_CheckOrderPending +0 3428b CG_SetSelectedPlayerName +0 342d8 CG_GetSelectedPlayer +0 342ea CG_SelectNextPlayer +0 3430c CG_SelectPrevPlayer +0 3432f CG_StatusHandle +0 3437b CG_GetValue +0 34461 CG_OtherTeamHasFlag +0 34496 CG_YourTeamHasFlag +0 344cb CG_OwnerDrawVisible +0 345e8 CG_GetKillerText +0 3460a CG_GetGameStatusText +0 34682 CG_GameTypeString +0 346bf CG_Text_Paint_Limit +0 347ab CG_DrawNewTeamInfo +0 34a16 CG_DrawTeamSpectators +0 34b61 CG_DrawMedal +0 34ca9 CG_OwnerDraw +0 34cac CG_MouseEvent +0 34d3e CG_HideTeamMenu +0 34d4b CG_ShowTeamMenu +0 34d53 CG_EventHandling +0 34d6d CG_KeyEvent +0 34dc6 CG_ClientNumFromName +0 34dfd CG_ShowResponseHead +0 34e10 CG_RunMenuScript +0 34e13 CG_DeferMenuScript +0 34e18 CG_GetTeamColor +1 4 colorTable +1 434 HolocronIcons +1 47c forceModelModificationCount +1 4e4 cvarTable +1 be4 cvarTableSize +1 c8c forceTicPos +1 ddc ammoTicPos +1 f2c commands +1 10ac menuScoreboard +1 10b0 bluehudtint +1 10c0 redhudtint +1 10d0 showPowersName +1 115c g_saberFlashTime +1 1160 g_saberFlashPos +1 1180 cgRageTime +1 1184 cgRageFadeTime +1 1188 cgRageFadeVal +1 118c cgRageRecTime +1 1190 cgRageRecFadeTime +1 1194 cgRageRecFadeVal +1 1198 cgAbsorbTime +1 119c cgAbsorbFadeTime +1 11a0 cgAbsorbFadeVal +1 11a4 cgProtectTime +1 11a8 cgProtectFadeTime +1 11ac cgProtectFadeVal +1 11b0 cgYsalTime +1 11b4 cgYsalFadeTime +1 11b8 cgYsalFadeVal +1 11bc gCGHasFallVector +1 11e0 forceHolocronModels +1 1724 shaderAnimNames +1 17a4 shaderAnimCounts +1 1824 shaderAnimSTRatio +1 18a4 cl_numparticles +1 18a8 initparticles +1 18ac roll +1 18b0 cg_customSoundNames +1 193c cgQueueLoad +1 1a28 cgAnnouncerTime +1 1a74 numValidOrders +1 1a78 cameramins +1 1a84 cameramaxs +1 1a90 cameraCurTarget +1 1a9c cameraCurLoc +1 1aa8 cameraOldLoc +1 1ab4 cameraNewLoc +1 1ac0 cameraLastFrame +1 1ac4 cameraLastYaw +1 1ac8 cameraStiffFactor +1 1b08 cgWeapFrame +1 1b0c cgWeapFrameTime +1 1c00 WHITE +1 1c18 WP_MuzzlePoint +1 1cd8 weaponData +1 2058 ammoData +1 2080 animTable +1 46a8 BGPAFtextLoaded +1 46ac gPMDoSlowFall +1 46b0 pm_stopspeed +1 46b4 pm_duckScale +1 46b8 pm_swimScale +1 46bc pm_wadeScale +1 46c0 pm_accelerate +1 46c4 pm_airaccelerate +1 46c8 pm_wateraccelerate +1 46cc pm_flyaccelerate +1 46d0 pm_friction +1 46d4 pm_waterfriction +1 46d8 pm_flightfriction +1 46dc pm_spectatorfriction +1 46e0 c_pmove +1 46e4 forceSpeedLevels +1 46f4 forcePowerNeeded +1 4814 forceJumpHeight +1 4824 forceJumpStrength +1 48c8 randSeed +1 493c forceMasteryLevels +1 495c forceMasteryPoints +1 497c bgForcePowerCost +1 4a9c forcePowerSorted +1 4ae4 forcePowerDarkLight +1 4b2c WeaponReadyAnim +1 4b6c WeaponAttackAnim +1 4bac bg_itemlist +1 5468 bg_numItems +1 54c0 eventnames +1 5698 bg_poolSize +1 569c bg_poolTail +1 56a0 saberMoveData +1 6910 transitionMove +1 6bb8 vec3_origin +1 6bc4 axisDefault +1 1a2c validOrders +1 6be8 colorBlack +1 6bf8 colorRed +1 6c08 colorGreen +1 6c18 colorBlue +1 6c28 colorYellow +1 6c38 colorMagenta +1 6c48 colorCyan +1 6c58 colorWhite +1 6c68 colorLtGrey +1 6c78 colorMdGrey +1 6c88 colorDkGrey +1 6c98 colorLtBlue +1 6ca8 colorDkBlue +1 6cb8 g_color_table +1 6d38 bytedirs +1 74f0 holdrand +1 74fc captureFunc +1 7500 captureData +1 7504 itemCapture +1 7508 DC +1 750c g_waitingForKey +1 7510 g_editingField +1 7514 g_bindItem +1 7518 g_editItem +1 751c menuCount +1 7520 openMenuCount +1 7524 debugMode +1 7528 lastListBoxClickTime +1 752c itemFlags +1 753c styles +1 7558 alignment +1 7568 types +1 75a8 strPoolIndex +1 75ac strHandleCount +1 75b8 FPMessageTime +1 75bc ui_deferredScriptItem +1 75c0 commandList +1 7680 scriptCommandCount +1 7748 g_bindings +1 8018 itemParseKeywords +1 8378 menuParseKeywords +1 852c drawTeamOverlayModificationCount +1 7fa0 g_bindCount +2 752ae8 _stackStart +2 762ae8 _stackEnd +3 8400 cg_pmove_msec +3 8510 cg_debugSaber +3 8620 cgDC +3 b440 cg_debugBB +3 b550 ui_myteam +3 b660 cg_recordSPDemoName +3 b770 cg_recordSPDemo +3 b880 cg_singlePlayerActive +3 b990 cg_enableBreath +3 baa0 cg_enableDust +3 bbb0 cg_singlePlayer +3 bcc0 cg_currentSelectedPlayerName +3 bdd0 cg_currentSelectedPlayer +3 bee0 cg_blueTeamName +3 bff0 cg_redTeamName +3 c100 cg_trueLightning +3 c210 cg_noProjectileTrail +3 c320 cg_noTaunt +3 c430 cg_bigFont +3 c540 cg_smallFont +3 c650 cg_cameraMode +3 c760 cg_timescale +3 c870 cg_timescaleFadeSpeed +3 c980 cg_timescaleFadeEnd +3 ca90 cg_cameraOrbitDelay +3 cba0 cg_cameraOrbit +3 ccb0 pmove_msec +3 cdc0 pmove_fixed +3 ced0 cg_smoothClients +3 cfe0 cg_hudFiles +3 d0f0 cg_scorePlum +3 d200 cg_noVoiceText +3 d310 cg_noVoiceChats +3 d420 cg_teamChatsOnly +3 d530 cg_drawFriend +3 d640 cg_deferPlayers +3 d750 cg_predictItems +3 d860 cg_blood +3 d970 cg_paused +3 da80 cg_buildScript +3 db90 cg_forceModel +3 dca0 cg_stats +3 ddb0 cg_teamChatHeight +3 dec0 cg_teamChatTime +3 dfd0 cg_synchronousClients +3 e0e0 cg_drawEnemyInfo +3 e1f0 cg_lagometer +3 e300 cg_stereoSeparation +3 e410 cg_thirdPersonHorzOffset +3 e520 cg_thirdPersonAlpha +3 e630 cg_thirdPersonTargetDamp +3 e740 cg_thirdPersonCameraDamp +3 e850 cg_thirdPersonVertOffset +3 e960 cg_thirdPersonPitchOffset +3 ea70 cg_thirdPersonAngle +3 eb80 cg_thirdPersonRange +3 ec90 cg_thirdPerson +3 eda0 cg_dismember +3 eeb0 cg_animBlend +3 efc0 cg_auraShell +3 f0d0 cg_speedTrail +3 f1e0 cg_saberTrail +3 f2f0 cg_saberContact +3 f400 cg_swingAngles +3 f510 cg_zoomFov +3 f620 cg_fov +3 f730 cg_simpleItems +3 f840 cg_ignore +3 f950 cg_autoswitch +3 fa60 cg_tracerLength +3 fb70 cg_tracerWidth +3 fc80 cg_tracerChance +3 fd90 cg_viewsize +3 fea0 cg_drawGun +3 ffb0 cg_gun_z +3 100c0 cg_gun_y +3 101d0 cg_gun_x +3 102e0 cg_gun_frame +3 103f0 cg_addMarks +3 10500 cg_footsteps +3 10610 cg_showmiss +3 10720 cg_noPlayerAnims +3 10830 cg_nopredict +3 10940 cg_errorDecay +3 10a50 cg_debugEvents +3 10b60 cg_debugPosition +3 10c70 cg_debugAnim +3 10d80 cg_animSpeed +3 10e90 cg_draw2D +3 10fa0 cg_drawStatus +3 110b0 cg_crosshairHealth +3 111c0 cg_crosshairSize +3 112d0 cg_crosshairY +3 113e0 cg_crosshairX +3 114f0 cg_teamOverlayUserinfo +3 11600 cg_drawTeamOverlay +3 11710 cg_drawRewards +3 11820 cg_dynamicCrosshair +3 11930 cg_drawScores +3 11a40 cg_drawCrosshairNames +3 11b50 cg_drawCrosshair +3 11c60 cg_drawAmmoWarning +3 11d70 cg_drawIcons +3 11e80 cg_draw3dIcons +3 11f90 cg_drawSnapshot +3 120a0 cg_drawFPS +3 121b0 cg_drawTimer +3 122c0 cg_gibs +3 123d0 cg_shadows +3 124e0 cg_bobroll +3 125f0 cg_bobpitch +3 12700 cg_bobup +3 12810 cg_runroll +3 12920 cg_runpitch +3 12a30 cg_centertime +3 12b40 cg_items +3 16340 cg_weapons +3 17040 cg_entities +3 1f7040 cg +3 220948 cgs +3 232190 gCGFallVector +3 23219c lagometer +3 2327a4 lastvalidlockdif +3 2327a8 hudTintColor +3 2327ac teamChat2 +3 2328ac teamChat1 +3 2329ac systemChat +3 232aac numSortedTeamPlayers +3 232ab0 sortedTeamPlayers +3 232b4c offZ +3 23318c offX +3 23380c lastofs +3 233810 cl_lightstyle +3 237a10 cg_freeLocalEntities +3 237a14 cg_activeLocalEntities +3 237be0 cg_localEntities +3 2713e0 oldtime +3 2713e4 rup +3 2713f0 rright +3 2713fc rforward +3 271408 pvup +3 271414 pvright +3 271420 pvforward +3 27142c particles +3 29042c free_particles +3 290430 active_particles +3 290434 numShaderAnims +3 290438 shaderAnims +3 292438 markTotal +3 29243c cg_freeMarkPolys +3 292440 cg_activeMarkPolys +3 292560 cg_markPolys +3 2a4560 cgBoneAnglePostSet +3 2a4598 cgSendPS +3 2af098 cg_triggerEntities +3 2af498 cg_numTriggerEntities +3 2af49c cg_solidEntities +3 2af89c cg_numSolidEntities +3 2af8a0 cg_pmove +3 2afa18 cg_saga_valid +3 2afa1c cg_saga_info +3 2b1a1c localClient +3 2b1a20 voiceChatBuffer +3 2b4120 voiceChatLists +3 4dcb60 zoomFov +3 4dcb64 cameraIdealLoc +3 4dcb70 cameraIdealTarget +3 4dcb7c cameraFocusLoc +3 4dcb88 cameraFocusAngles +3 4dcb94 cameraup +3 4dcba0 camerafwd +3 4dcbac cgScreenEffects +3 4dcbcc g2WeaponInstances +3 4dcc0c BGPAFtext +3 4e684c bgGlobalAnimations +3 4edf84 pml +3 4ee410 pm +3 4ee414 bg_pool +3 6f7e2c com_lines +3 6f7e30 com_parsename +3 6f8230 com_token +3 6fa640 menuParseKeywordHash +3 6fae40 itemParseKeywordHash +3 6fb640 g_nameBind2 +3 6fb660 g_nameBind1 +3 6fb680 ui_deferredScript +3 6fbe80 strHandle +3 6fde80 strPool +3 71de80 outOfMemory +3 71de84 allocPoint +3 71de88 memoryPool +3 73de88 menuStack +3 73dec8 Menus +3 752ac8 scrollInfo diff --git a/CODE-mp/cgame/vssver.scc b/CODE-mp/cgame/vssver.scc index db0bad1def9e771b568d73e6b0c7cff939483db2..41f72b7182433dd6e3c5a56cd70521ecfebaeac1 100644 GIT binary patch delta 84 zcmV-a0IUCi27m^T6a@HqpW%@hObMr}Gd+Uanje;tZ8sU(%#*BTD9jhh0000O0{{R_ qaG+D#mA+{xk-aAgzxxW2Sd-er!;$T$36y=x^_b-oj})_=0b>E)1tkdp delta 84 zcmV-a0IUCi27m^T6a-FPK(Ub+ObPw%OnW_7Yz>`}Z8sS?wZjyg3CPvT0000O0{{To qwMCPHB!iPFk-aAglB*NsFhy#6#F6c%2^i0s1Y<*Z4HdJU0b>Cyu^*=Z diff --git a/CODE-mp/client/cl_console.cpp b/CODE-mp/client/cl_console.cpp index b83bf57..bd9a990 100644 --- a/CODE-mp/client/cl_console.cpp +++ b/CODE-mp/client/cl_console.cpp @@ -130,7 +130,7 @@ void Con_Dump_f (void) if (Cmd_Argc() != 2) { - Com_Printf (SP_GetStringText(CON_TEXT_DUMP_USAGE)); + Com_Printf(SP_GetStringText(CON_TEXT_DUMP_USAGE)); return; } @@ -139,7 +139,7 @@ void Con_Dump_f (void) f = FS_FOpenFileWrite( Cmd_Argv( 1 ) ); if (!f) { - Com_Printf (S_COLOR_RED"ERROR: couldn't open.\n"); + Com_Printf ("ERROR: couldn't open.\n"); return; } diff --git a/CODE-mp/client/cl_main.cpp b/CODE-mp/client/cl_main.cpp index 3756a11..f539be8 100644 --- a/CODE-mp/client/cl_main.cpp +++ b/CODE-mp/client/cl_main.cpp @@ -758,6 +758,9 @@ void CL_Disconnect( qboolean showMainMenu ) { cls.state = CA_DISCONNECTED; + // allow cheats locally + Cvar_Set( "sv_cheats", "1" ); + // not connected to a pure server anymore cl_connectedToPureServer = qfalse; } @@ -1030,7 +1033,23 @@ void CL_Connect_f( void ) { if ( !Cvar_VariableValue("fs_restrict") && !Sys_CheckCD() ) { - Com_Error( ERR_NEED_CD, SP_GetStringTextString("CON_TEXT_NEED_CD") ); //"Game CD not in drive" ); + int iLanguage = Cvar_VariableValue("sp_language"); + //rww - we don't have an actual cvar object for sp_language to use here. + + if (iLanguage) // dunno if SP files are loaded at this point if no CD... + { + switch (iLanguage) + { + case SP_LANGUAGE_GERMAN: + Com_Error( ERR_NEED_CD, "Spiel CD nicht im Laufwerk" ); + break; // keep compiler happy + case SP_LANGUAGE_FRENCH: + Com_Error( ERR_NEED_CD, "CD de jeu pas dans le lecteur" ); + break; // keep compiler happy + } + } + + Com_Error( ERR_NEED_CD, "Game CD not in drive" ); } if ( Cmd_Argc() != 2 ) { @@ -1219,7 +1238,6 @@ void CL_Vid_Restart_f( void ) { // if not running a server clear the whole hunk if ( !com_sv_running->integer ) { - CM_ClearMap(); // clear the whole hunk Hunk_Clear(); } diff --git a/CODE-mp/client/vssver.scc b/CODE-mp/client/vssver.scc index 964e7490e2fcc09d454282f09038365de8b6f819..bb36b37d633c76321b0d53c6a7acc8a3b8594dd0 100644 GIT binary patch delta 41 zcmV+^0M`GI1ds%f6a=87yX%n{ED2hPU|tkV$?yu1O(zM1{h4Kzyi-{|v3-*PRG<*$ delta 41 zcmV+^0M`GI1ds%f6a+yPB$<&IED6~8_R2K`8O(zKx*g~;!OQ#V*v3-*PJ82KJ diff --git a/CODE-mp/game/ai_main.c b/CODE-mp/game/ai_main.c index 710cb22..3631713 100644 --- a/CODE-mp/game/ai_main.c +++ b/CODE-mp/game/ai_main.c @@ -6914,7 +6914,7 @@ void StandardBotAI(bot_state_t *bs, float thinktime) else { #endif - if (bot_forcepowers.integer && !g_forcePowerDisable.integer) + if (bot_forcepowers.integer) { trap_EA_ForcePower(bs->client); } diff --git a/CODE-mp/game/g_client.c b/CODE-mp/game/g_client.c index 8da145f..837badd 100644 --- a/CODE-mp/game/g_client.c +++ b/CODE-mp/game/g_client.c @@ -1315,9 +1315,7 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) { value = Info_ValueForKey (userinfo, "password"); if ( g_password.string[0] && Q_stricmp( g_password.string, "none" ) && strcmp( g_password.string, value) != 0) { - static char sTemp[1024]; - Q_strncpyz(sTemp, G_GetStripEdString("SVINGAME","INVALID_PASSWORD"), sizeof (sTemp) ); - return sTemp;// return "Invalid password"; + return "Invalid password"; } } diff --git a/CODE-mp/game/g_cmds.c b/CODE-mp/game/g_cmds.c index 0169acc..f746abf 100644 --- a/CODE-mp/game/g_cmds.c +++ b/CODE-mp/game/g_cmds.c @@ -2417,8 +2417,7 @@ void ClientCommand( int clientNum ) { { if (Q_stricmp(cmd, "addbot") == 0) { //because addbot isn't a recognized command unless you're the server, but it is in the menus regardless -// trap_SendServerCommand( clientNum, va("print \"You can only add bots as the server.\n\"" ) ); - trap_SendServerCommand( clientNum, va("print \"%s.\n\"", G_GetStripEdString("SVINGAME", "ONLY_ADD_BOTS_AS_SERVER"))); + trap_SendServerCommand( clientNum, va("print \"You can only add bots as the server.\n\"" ) ); } else { diff --git a/CODE-mp/game/g_main.c b/CODE-mp/game/g_main.c index 42563f7..fffc221 100644 --- a/CODE-mp/game/g_main.c +++ b/CODE-mp/game/g_main.c @@ -1502,8 +1502,7 @@ void CheckExitRules( void ) { if ( g_timelimit.integer && !level.warmupTime ) { if ( level.time - level.startTime >= g_timelimit.integer*60000 ) { -// trap_SendServerCommand( -1, "print \"Timelimit hit.\n\""); - trap_SendServerCommand( -1, va("print \"%s.\n\"",G_GetStripEdString("SVINGAME", "TIMELIMIT_HIT"))); + trap_SendServerCommand( -1, "print \"Timelimit hit.\n\""); LogExit( "Timelimit hit." ); return; } diff --git a/CODE-mp/game/vm/ai_util.asm b/CODE-mp/game/vm/ai_util.asm new file mode 100644 index 0000000..591377a --- /dev/null +++ b/CODE-mp/game/vm/ai_util.asm @@ -0,0 +1,6119 @@ +export B_TempAlloc +code +proc B_TempAlloc 4 4 +file "../ai_util.c" +line 15 +;1:#include "g_local.h" +;2:#include "q_shared.h" +;3:#include "botlib.h" +;4:#include "ai_main.h" +;5: +;6:#ifdef BOT_ZMALLOC +;7:#define MAX_BALLOC 8192 +;8: +;9:void *BAllocList[MAX_BALLOC]; +;10:#endif +;11: +;12:char gBotChatBuffer[MAX_CLIENTS][MAX_CHAT_BUFFER_SIZE]; +;13: +;14:void *B_TempAlloc(int size) +;15:{ +line 16 +;16: return BG_TempAlloc(size); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +ADDRGP4 BG_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $81 +endproc B_TempAlloc 4 4 +export B_TempFree +proc B_TempFree 0 4 +line 20 +;17:} +;18: +;19:void B_TempFree(int size) +;20:{ +line 21 +;21: BG_TempFree(size); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 BG_TempFree +CALLV +pop +line 22 +;22:} +LABELV $82 +endproc B_TempFree 0 4 +export B_Alloc +proc B_Alloc 4 4 +line 26 +;23: +;24: +;25:void *B_Alloc(int size) +;26:{ +line 77 +;27:#ifdef BOT_ZMALLOC +;28: void *ptr = NULL; +;29: int i = 0; +;30: +;31:#ifdef BOTMEMTRACK +;32: int free = 0; +;33: int used = 0; +;34: +;35: while (i < MAX_BALLOC) +;36: { +;37: if (!BAllocList[i]) +;38: { +;39: free++; +;40: } +;41: else +;42: { +;43: used++; +;44: } +;45: +;46: i++; +;47: } +;48: +;49: G_Printf("Allocations used: %i\nFree allocation slots: %i\n", used, free); +;50: +;51: i = 0; +;52:#endif +;53: +;54: ptr = trap_BotGetMemoryGame(size); +;55: +;56: while (i < MAX_BALLOC) +;57: { +;58: if (!BAllocList[i]) +;59: { +;60: BAllocList[i] = ptr; +;61: break; +;62: } +;63: i++; +;64: } +;65: +;66: if (i == MAX_BALLOC) +;67: { +;68: //If this happens we'll have to rely on this chunk being freed manually with B_Free, which it hopefully will be +;69:#ifdef DEBUG +;70: G_Printf("WARNING: MAXIMUM B_ALLOC ALLOCATIONS EXCEEDED\n"); +;71:#endif +;72: } +;73: +;74: return ptr; +;75:#else +;76: +;77: return BG_Alloc(size); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +ADDRGP4 BG_Alloc +CALLP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $83 +endproc B_Alloc 4 4 +export B_Free +proc B_Free 0 0 +line 83 +;78: +;79:#endif +;80:} +;81: +;82:void B_Free(void *ptr) +;83:{ +line 131 +;84:#ifdef BOT_ZMALLOC +;85: int i = 0; +;86: +;87:#ifdef BOTMEMTRACK +;88: int free = 0; +;89: int used = 0; +;90: +;91: while (i < MAX_BALLOC) +;92: { +;93: if (!BAllocList[i]) +;94: { +;95: free++; +;96: } +;97: else +;98: { +;99: used++; +;100: } +;101: +;102: i++; +;103: } +;104: +;105: G_Printf("Allocations used: %i\nFree allocation slots: %i\n", used, free); +;106: +;107: i = 0; +;108:#endif +;109: +;110: while (i < MAX_BALLOC) +;111: { +;112: if (BAllocList[i] == ptr) +;113: { +;114: BAllocList[i] = NULL; +;115: break; +;116: } +;117: +;118: i++; +;119: } +;120: +;121: if (i == MAX_BALLOC) +;122: { +;123: //Likely because the limit was exceeded and we're now freeing the chunk manually as we hoped would happen +;124:#ifdef DEBUG +;125: G_Printf("WARNING: Freeing allocation which is not in the allocation structure\n"); +;126:#endif +;127: } +;128: +;129: trap_BotFreeMemoryGame(ptr); +;130:#endif +;131:} +LABELV $84 +endproc B_Free 0 0 +export B_InitAlloc +proc B_InitAlloc 0 12 +line 134 +;132: +;133:void B_InitAlloc(void) +;134:{ +line 139 +;135:#ifdef BOT_ZMALLOC +;136: memset(BAllocList, 0, sizeof(BAllocList)); +;137:#endif +;138: +;139: memset(gWPArray, 0, sizeof(gWPArray)); +ADDRGP4 gWPArray +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 16384 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 140 +;140:} +LABELV $85 +endproc B_InitAlloc 0 12 +export B_CleanupAlloc +proc B_CleanupAlloc 0 0 +line 143 +;141: +;142:void B_CleanupAlloc(void) +;143:{ +line 158 +;144:#ifdef BOT_ZMALLOC +;145: int i = 0; +;146: +;147: while (i < MAX_BALLOC) +;148: { +;149: if (BAllocList[i]) +;150: { +;151: trap_BotFreeMemoryGame(BAllocList[i]); +;152: BAllocList[i] = NULL; +;153: } +;154: +;155: i++; +;156: } +;157:#endif +;158:} +LABELV $86 +endproc B_CleanupAlloc 0 0 +export GetValueGroup +proc GetValueGroup 44 8 +line 161 +;159: +;160:int GetValueGroup(char *buf, char *group, char *outbuf) +;161:{ +line 167 +;162: char *place, *placesecond; +;163: int iplace; +;164: int failure; +;165: int i; +;166: int startpoint, startletter; +;167: int subg = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 169 +;168: +;169: i = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 171 +;170: +;171: iplace = 0; +ADDRLP4 28 +CNSTI4 0 +ASGNI4 +line 173 +;172: +;173: place = strstr(buf, group); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 32 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 32 +INDIRP4 +ASGNP4 +line 175 +;174: +;175: if (!place) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $88 +line 176 +;176: { +line 177 +;177: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $87 +JUMPV +LABELV $88 +line 180 +;178: } +;179: +;180: startpoint = place - buf + strlen(group) + 1; +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 36 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDRLP4 36 +INDIRI4 +ADDI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 181 +;181: startletter = (place - buf) - 1; +ADDRLP4 20 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 183 +;182: +;183: failure = 0; +ADDRLP4 24 +CNSTI4 0 +ASGNI4 +ADDRGP4 $91 +JUMPV +LABELV $90 +line 186 +;184: +;185: while (buf[startpoint+1] != '{' || buf[startletter] != '\n') +;186: { +line 187 +;187: placesecond = strstr(place+1, group); +ADDRLP4 8 +INDIRP4 +CNSTI4 1 +ADDP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 40 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 40 +INDIRP4 +ASGNP4 +line 189 +;188: +;189: if (placesecond) +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $93 +line 190 +;190: { +line 191 +;191: startpoint += (placesecond - place); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDI4 +ASGNI4 +line 192 +;192: startletter += (placesecond - place); +ADDRLP4 20 +ADDRLP4 20 +INDIRI4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDI4 +ASGNI4 +line 193 +;193: place = placesecond; +ADDRLP4 8 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 194 +;194: } +ADDRGP4 $94 +JUMPV +LABELV $93 +line 196 +;195: else +;196: { +line 197 +;197: failure = 1; +ADDRLP4 24 +CNSTI4 1 +ASGNI4 +line 198 +;198: break; +ADDRGP4 $92 +JUMPV +LABELV $94 +line 200 +;199: } +;200: } +LABELV $91 +line 185 +ADDRLP4 40 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ADDRLP4 40 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 123 +NEI4 $90 +ADDRLP4 20 +INDIRI4 +ADDRLP4 40 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 10 +NEI4 $90 +LABELV $92 +line 202 +;201: +;202: if (failure) +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +EQI4 $98 +line 203 +;203: { +line 204 +;204: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $87 +JUMPV +LABELV $97 +line 211 +;205: } +;206: +;207: //we have found the proper group name if we made it here, so find the opening brace and read into the outbuf +;208: //until hitting the end brace +;209: +;210: while (buf[startpoint] != '{') +;211: { +line 212 +;212: startpoint++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 213 +;213: } +LABELV $98 +line 210 +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 123 +NEI4 $97 +line 215 +;214: +;215: startpoint++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $101 +JUMPV +LABELV $100 +line 218 +;216: +;217: while (buf[startpoint] != '}' || subg) +;218: { +line 219 +;219: if (buf[startpoint] == '{') +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 123 +NEI4 $103 +line 220 +;220: { +line 221 +;221: subg++; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 222 +;222: } +ADDRGP4 $104 +JUMPV +LABELV $103 +line 223 +;223: else if (buf[startpoint] == '}') +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 125 +NEI4 $105 +line 224 +;224: { +line 225 +;225: subg--; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 226 +;226: } +LABELV $105 +LABELV $104 +line 227 +;227: outbuf[i] = buf[startpoint]; +ADDRLP4 12 +INDIRI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 228 +;228: i++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 229 +;229: startpoint++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 230 +;230: } +LABELV $101 +line 217 +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 125 +NEI4 $100 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $100 +line 231 +;231: outbuf[i] = '\0'; +ADDRLP4 12 +INDIRI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 233 +;232: +;233: return 1; +CNSTI4 1 +RETI4 +LABELV $87 +endproc GetValueGroup 44 8 +export GetPairedValue +proc GetPairedValue 64 8 +line 237 +;234:} +;235: +;236:int GetPairedValue(char *buf, char *key, char *outbuf) +;237:{ +line 242 +;238: char *place, *placesecond; +;239: int startpoint, startletter; +;240: int i, found; +;241: +;242: if (!buf || !key || !outbuf) +ADDRLP4 24 +CNSTU4 0 +ASGNU4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 24 +INDIRU4 +EQU4 $111 +ADDRFP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 24 +INDIRU4 +EQU4 $111 +ADDRFP4 8 +INDIRP4 +CVPU4 4 +ADDRLP4 24 +INDIRU4 +NEU4 $108 +LABELV $111 +line 243 +;243: { +line 244 +;244: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $107 +JUMPV +LABELV $108 +line 247 +;245: } +;246: +;247: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $113 +JUMPV +LABELV $112 +line 250 +;248: +;249: while (buf[i] && buf[i] != '\0') +;250: { +line 251 +;251: if (buf[i] == '/') +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 47 +NEI4 $115 +line 252 +;252: { +line 253 +;253: if (buf[i+1] && buf[i+1] != '\0' && buf[i+1] == '/') +ADDRLP4 28 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 32 +CNSTI4 0 +ASGNI4 +ADDRLP4 28 +INDIRI4 +ADDRLP4 32 +INDIRI4 +EQI4 $117 +ADDRLP4 28 +INDIRI4 +ADDRLP4 32 +INDIRI4 +EQI4 $117 +ADDRLP4 28 +INDIRI4 +CNSTI4 47 +NEI4 $117 +line 254 +;254: { +ADDRGP4 $120 +JUMPV +LABELV $119 +line 256 +;255: while (buf[i] != '\n') +;256: { +line 257 +;257: buf[i] = '/'; +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CNSTI1 47 +ASGNI1 +line 258 +;258: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 259 +;259: } +LABELV $120 +line 255 +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 10 +NEI4 $119 +line 260 +;260: } +LABELV $117 +line 261 +;261: } +LABELV $115 +line 262 +;262: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 263 +;263: } +LABELV $113 +line 249 +ADDRLP4 28 +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 32 +CNSTI4 0 +ASGNI4 +ADDRLP4 28 +INDIRI4 +ADDRLP4 32 +INDIRI4 +EQI4 $122 +ADDRLP4 28 +INDIRI4 +ADDRLP4 32 +INDIRI4 +NEI4 $112 +LABELV $122 +line 265 +;264: +;265: place = strstr(buf, key); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 36 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 36 +INDIRP4 +ASGNP4 +line 267 +;266: +;267: if (!place) +ADDRLP4 12 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $123 +line 268 +;268: { +line 269 +;269: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $107 +JUMPV +LABELV $123 +line 272 +;270: } +;271: //tab == 9 +;272: startpoint = place - buf + strlen(key); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 40 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDRLP4 40 +INDIRI4 +ADDI4 +ASGNI4 +line 273 +;273: startletter = (place - buf) - 1; +ADDRLP4 8 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 275 +;274: +;275: found = 0; +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +ADDRGP4 $126 +JUMPV +LABELV $125 +line 278 +;276: +;277: while (!found) +;278: { +line 279 +;279: if (startletter == 0 || !buf[startletter] || buf[startletter] == '\0' || buf[startletter] == 9 || buf[startletter] == ' ' || buf[startletter] == '\n') +ADDRLP4 48 +CNSTI4 0 +ASGNI4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 48 +INDIRI4 +EQI4 $134 +ADDRLP4 52 +ADDRLP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 52 +INDIRI4 +ADDRLP4 48 +INDIRI4 +EQI4 $134 +ADDRLP4 52 +INDIRI4 +ADDRLP4 48 +INDIRI4 +EQI4 $134 +ADDRLP4 52 +INDIRI4 +CNSTI4 9 +EQI4 $134 +ADDRLP4 52 +INDIRI4 +CNSTI4 32 +EQI4 $134 +ADDRLP4 52 +INDIRI4 +CNSTI4 10 +NEI4 $128 +LABELV $134 +line 280 +;280: { +line 281 +;281: if (buf[startpoint] == '\0' || buf[startpoint] == 9 || buf[startpoint] == ' ' || buf[startpoint] == '\n') +ADDRLP4 56 +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 0 +EQI4 $139 +ADDRLP4 56 +INDIRI4 +CNSTI4 9 +EQI4 $139 +ADDRLP4 56 +INDIRI4 +CNSTI4 32 +EQI4 $139 +ADDRLP4 56 +INDIRI4 +CNSTI4 10 +NEI4 $135 +LABELV $139 +line 282 +;282: { +line 283 +;283: found = 1; +ADDRLP4 20 +CNSTI4 1 +ASGNI4 +line 284 +;284: break; +ADDRGP4 $127 +JUMPV +LABELV $135 +line 286 +;285: } +;286: } +LABELV $128 +line 288 +;287: +;288: placesecond = strstr(place+1, key); +ADDRLP4 12 +INDIRP4 +CNSTI4 1 +ADDP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 56 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 16 +ADDRLP4 56 +INDIRP4 +ASGNP4 +line 290 +;289: +;290: if (placesecond) +ADDRLP4 16 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $140 +line 291 +;291: { +line 292 +;292: startpoint += placesecond - place; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 16 +INDIRP4 +CVPU4 4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDI4 +ASGNI4 +line 293 +;293: startletter += placesecond - place; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +ADDRLP4 16 +INDIRP4 +CVPU4 4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDI4 +ASGNI4 +line 294 +;294: place = placesecond; +ADDRLP4 12 +ADDRLP4 16 +INDIRP4 +ASGNP4 +line 295 +;295: } +ADDRGP4 $141 +JUMPV +LABELV $140 +line 297 +;296: else +;297: { +line 298 +;298: place = NULL; +ADDRLP4 12 +CNSTP4 0 +ASGNP4 +line 299 +;299: break; +ADDRGP4 $127 +JUMPV +LABELV $141 +line 302 +;300: } +;301: +;302: } +LABELV $126 +line 277 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +EQI4 $125 +LABELV $127 +line 304 +;303: +;304: if (!found || !place || !buf[startpoint] || buf[startpoint] == '\0') +ADDRLP4 44 +CNSTI4 0 +ASGNI4 +ADDRLP4 20 +INDIRI4 +ADDRLP4 44 +INDIRI4 +EQI4 $146 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $146 +ADDRLP4 48 +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 48 +INDIRI4 +ADDRLP4 44 +INDIRI4 +EQI4 $146 +ADDRLP4 48 +INDIRI4 +ADDRLP4 44 +INDIRI4 +NEI4 $148 +LABELV $146 +line 305 +;305: { +line 306 +;306: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $107 +JUMPV +LABELV $147 +line 310 +;307: } +;308: +;309: while (buf[startpoint] == ' ' || buf[startpoint] == 9 || buf[startpoint] == '\n') +;310: { +line 311 +;311: startpoint++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 312 +;312: } +LABELV $148 +line 309 +ADDRLP4 52 +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 32 +EQI4 $147 +ADDRLP4 52 +INDIRI4 +CNSTI4 9 +EQI4 $147 +ADDRLP4 52 +INDIRI4 +CNSTI4 10 +EQI4 $147 +line 314 +;313: +;314: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $151 +JUMPV +LABELV $150 +line 317 +;315: +;316: while (buf[startpoint] && buf[startpoint] != '\0' && buf[startpoint] != '\n') +;317: { +line 318 +;318: outbuf[i] = buf[startpoint]; +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 319 +;319: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 320 +;320: startpoint++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 321 +;321: } +LABELV $151 +line 316 +ADDRLP4 56 +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 60 +CNSTI4 0 +ASGNI4 +ADDRLP4 56 +INDIRI4 +ADDRLP4 60 +INDIRI4 +EQI4 $154 +ADDRLP4 56 +INDIRI4 +ADDRLP4 60 +INDIRI4 +EQI4 $154 +ADDRLP4 56 +INDIRI4 +CNSTI4 10 +NEI4 $150 +LABELV $154 +line 323 +;322: +;323: outbuf[i] = '\0'; +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 325 +;324: +;325: return 1; +CNSTI4 1 +RETI4 +LABELV $107 +endproc GetPairedValue 64 8 +export BotDoChat +proc BotDoChat 96 12 +line 329 +;326:} +;327: +;328:int BotDoChat(bot_state_t *bs, char *section, int always) +;329:{ +line 340 +;330: char *chatgroup; +;331: int rVal; +;332: int inc_1; +;333: int inc_2; +;334: int inc_n; +;335: int lines; +;336: int checkedline; +;337: int getthisline; +;338: gentity_t *cobject; +;339: +;340: if (!bs->canChat) +ADDRFP4 0 +INDIRP4 +CNSTI4 2080 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $156 +line 341 +;341: { +line 342 +;342: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $155 +JUMPV +LABELV $156 +line 345 +;343: } +;344: +;345: if (bs->doChat) +ADDRFP4 0 +INDIRP4 +CNSTI4 2224 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $158 +line 346 +;346: { //already have a chat scheduled +line 347 +;347: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $155 +JUMPV +LABELV $158 +line 350 +;348: } +;349: +;350: if (trap_Cvar_VariableIntegerValue("sp_language")) +ADDRGP4 $162 +ARGP4 +ADDRLP4 36 +ADDRGP4 trap_Cvar_VariableIntegerValue +CALLI4 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 0 +EQI4 $160 +line 351 +;351: { //no chatting unless English. +line 352 +;352: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $155 +JUMPV +LABELV $160 +line 355 +;353: } +;354: +;355: if (Q_irand(1, 10) > bs->chatFrequency && !always) +CNSTI4 1 +ARGI4 +CNSTI4 10 +ARGI4 +ADDRLP4 40 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRLP4 40 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2084 +ADDP4 +INDIRI4 +LEI4 $163 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $163 +line 356 +;356: { +line 357 +;357: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $155 +JUMPV +LABELV $163 +line 360 +;358: } +;359: +;360: bs->chatTeam = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 2228 +ADDP4 +CNSTI4 0 +ASGNI4 +line 362 +;361: +;362: chatgroup = (char *)B_TempAlloc(MAX_CHAT_BUFFER_SIZE); +CNSTI4 8192 +ARGI4 +ADDRLP4 44 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 44 +INDIRP4 +ASGNP4 +line 364 +;363: +;364: rVal = GetValueGroup(gBotChatBuffer[bs->client], section, chatgroup); +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CNSTI4 13 +LSHI4 +ADDRGP4 gBotChatBuffer +ADDP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 48 +ADDRGP4 GetValueGroup +CALLI4 +ASGNI4 +ADDRLP4 32 +ADDRLP4 48 +INDIRI4 +ASGNI4 +line 366 +;365: +;366: if (!rVal) //the bot has no group defined for the specified chat event +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +NEI4 $165 +line 367 +;367: { +line 368 +;368: B_TempFree(MAX_CHAT_BUFFER_SIZE); //chatgroup +CNSTI4 8192 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 369 +;369: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $155 +JUMPV +LABELV $165 +line 372 +;370: } +;371: +;372: inc_1 = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 373 +;373: inc_2 = 2; +ADDRLP4 8 +CNSTI4 2 +ASGNI4 +ADDRGP4 $168 +JUMPV +LABELV $167 +line 376 +;374: +;375: while (chatgroup[inc_2] && chatgroup[inc_2] != '\0') +;376: { +line 377 +;377: if (chatgroup[inc_2] != 13 && chatgroup[inc_2] != 9) +ADDRLP4 52 +ADDRLP4 8 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 13 +EQI4 $170 +ADDRLP4 52 +INDIRI4 +CNSTI4 9 +EQI4 $170 +line 378 +;378: { +line 379 +;379: chatgroup[inc_1] = chatgroup[inc_2]; +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 380 +;380: inc_1++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 381 +;381: } +LABELV $170 +line 382 +;382: inc_2++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 383 +;383: } +LABELV $168 +line 375 +ADDRLP4 52 +ADDRLP4 8 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 56 +CNSTI4 0 +ASGNI4 +ADDRLP4 52 +INDIRI4 +ADDRLP4 56 +INDIRI4 +EQI4 $172 +ADDRLP4 52 +INDIRI4 +ADDRLP4 56 +INDIRI4 +NEI4 $167 +LABELV $172 +line 384 +;384: chatgroup[inc_1] = '\0'; +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 386 +;385: +;386: inc_1 = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 388 +;387: +;388: lines = 0; +ADDRLP4 28 +CNSTI4 0 +ASGNI4 +ADDRGP4 $174 +JUMPV +LABELV $173 +line 391 +;389: +;390: while (chatgroup[inc_1] && chatgroup[inc_1] != '\0') +;391: { +line 392 +;392: if (chatgroup[inc_1] == '\n') +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 10 +NEI4 $176 +line 393 +;393: { +line 394 +;394: lines++; +ADDRLP4 28 +ADDRLP4 28 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 395 +;395: } +LABELV $176 +line 396 +;396: inc_1++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 397 +;397: } +LABELV $174 +line 390 +ADDRLP4 60 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 64 +CNSTI4 0 +ASGNI4 +ADDRLP4 60 +INDIRI4 +ADDRLP4 64 +INDIRI4 +EQI4 $178 +ADDRLP4 60 +INDIRI4 +ADDRLP4 64 +INDIRI4 +NEI4 $173 +LABELV $178 +line 399 +;398: +;399: if (!lines) +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +NEI4 $179 +line 400 +;400: { +line 401 +;401: B_TempFree(MAX_CHAT_BUFFER_SIZE); //chatgroup +CNSTI4 8192 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 402 +;402: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $155 +JUMPV +LABELV $179 +line 405 +;403: } +;404: +;405: getthisline = Q_irand(0, (lines+1)); +CNSTI4 0 +ARGI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRLP4 68 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRLP4 20 +ADDRLP4 68 +INDIRI4 +ASGNI4 +line 407 +;406: +;407: if (getthisline < 1) +ADDRLP4 20 +INDIRI4 +CNSTI4 1 +GEI4 $181 +line 408 +;408: { +line 409 +;409: getthisline = 1; +ADDRLP4 20 +CNSTI4 1 +ASGNI4 +line 410 +;410: } +LABELV $181 +line 411 +;411: if (getthisline > lines) +ADDRLP4 20 +INDIRI4 +ADDRLP4 28 +INDIRI4 +LEI4 $183 +line 412 +;412: { +line 413 +;413: getthisline = lines; +ADDRLP4 20 +ADDRLP4 28 +INDIRI4 +ASGNI4 +line 414 +;414: } +LABELV $183 +line 416 +;415: +;416: checkedline = 1; +ADDRLP4 24 +CNSTI4 1 +ASGNI4 +line 418 +;417: +;418: inc_1 = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $186 +JUMPV +LABELV $185 +line 421 +;419: +;420: while (checkedline != getthisline) +;421: { +line 422 +;422: if (chatgroup[inc_1] && chatgroup[inc_1] != '\0') +ADDRLP4 72 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRLP4 72 +INDIRI4 +ADDRLP4 76 +INDIRI4 +EQI4 $188 +ADDRLP4 72 +INDIRI4 +ADDRLP4 76 +INDIRI4 +EQI4 $188 +line 423 +;423: { +line 424 +;424: if (chatgroup[inc_1] == '\n') +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 10 +NEI4 $190 +line 425 +;425: { +line 426 +;426: inc_1++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 427 +;427: checkedline++; +ADDRLP4 24 +ADDRLP4 24 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 428 +;428: } +LABELV $190 +line 429 +;429: } +LABELV $188 +line 431 +;430: +;431: if (checkedline == getthisline) +ADDRLP4 24 +INDIRI4 +ADDRLP4 20 +INDIRI4 +NEI4 $192 +line 432 +;432: { +line 433 +;433: break; +ADDRGP4 $187 +JUMPV +LABELV $192 +line 436 +;434: } +;435: +;436: inc_1++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 437 +;437: } +LABELV $186 +line 420 +ADDRLP4 24 +INDIRI4 +ADDRLP4 20 +INDIRI4 +NEI4 $185 +LABELV $187 +line 440 +;438: +;439: //we're at the starting position of the desired line here +;440: inc_2 = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $195 +JUMPV +LABELV $194 +line 443 +;441: +;442: while (chatgroup[inc_1] != '\n') +;443: { +line 444 +;444: chatgroup[inc_2] = chatgroup[inc_1]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 445 +;445: inc_2++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 446 +;446: inc_1++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 447 +;447: } +LABELV $195 +line 442 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 10 +NEI4 $194 +line 448 +;448: chatgroup[inc_2] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 451 +;449: +;450: //trap_EA_Say(bs->client, chatgroup); +;451: inc_1 = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 452 +;452: inc_2 = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 454 +;453: +;454: if (strlen(chatgroup) > MAX_CHAT_LINE_SIZE) +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 128 +LEI4 $200 +line 455 +;455: { +line 456 +;456: B_TempFree(MAX_CHAT_BUFFER_SIZE); //chatgroup +CNSTI4 8192 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 457 +;457: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $155 +JUMPV +LABELV $199 +line 461 +;458: } +;459: +;460: while (chatgroup[inc_1]) +;461: { +line 462 +;462: if (chatgroup[inc_1] == '%' && chatgroup[inc_1+1] != '%') +ADDRLP4 84 +CNSTI4 37 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 84 +INDIRI4 +NEI4 $202 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 84 +INDIRI4 +EQI4 $202 +line 463 +;463: { +line 464 +;464: inc_1++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 466 +;465: +;466: if (chatgroup[inc_1] == 's' && bs->chatObject) +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 115 +NEI4 $204 +ADDRFP4 0 +INDIRP4 +CNSTI4 2232 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $204 +line 467 +;467: { +line 468 +;468: cobject = bs->chatObject; +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +CNSTI4 2232 +ADDP4 +INDIRP4 +ASGNP4 +line 469 +;469: } +ADDRGP4 $205 +JUMPV +LABELV $204 +line 470 +;470: else if (chatgroup[inc_1] == 'a' && bs->chatAltObject) +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 97 +NEI4 $206 +ADDRFP4 0 +INDIRP4 +CNSTI4 2236 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $206 +line 471 +;471: { +line 472 +;472: cobject = bs->chatAltObject; +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +CNSTI4 2236 +ADDP4 +INDIRP4 +ASGNP4 +line 473 +;473: } +ADDRGP4 $207 +JUMPV +LABELV $206 +line 475 +;474: else +;475: { +line 476 +;476: cobject = NULL; +ADDRLP4 16 +CNSTP4 0 +ASGNP4 +line 477 +;477: } +LABELV $207 +LABELV $205 +line 479 +;478: +;479: if (cobject && cobject->client) +ADDRLP4 92 +CNSTU4 0 +ASGNU4 +ADDRLP4 16 +INDIRP4 +CVPU4 4 +ADDRLP4 92 +INDIRU4 +EQU4 $203 +ADDRLP4 16 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 92 +INDIRU4 +EQU4 $203 +line 480 +;480: { +line 481 +;481: inc_n = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRGP4 $211 +JUMPV +LABELV $210 +line 484 +;482: +;483: while (cobject->client->pers.netname[inc_n]) +;484: { +line 485 +;485: bs->currentChat[inc_2] = cobject->client->pers.netname[inc_n]; +ADDRLP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2088 +ADDP4 +ADDP4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ADDP4 +INDIRI1 +ASGNI1 +line 486 +;486: inc_2++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 487 +;487: inc_n++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 488 +;488: } +LABELV $211 +line 483 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $210 +line 489 +;489: inc_2--; //to make up for the auto-increment below +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 490 +;490: } +line 491 +;491: } +ADDRGP4 $203 +JUMPV +LABELV $202 +line 493 +;492: else +;493: { +line 494 +;494: bs->currentChat[inc_2] = chatgroup[inc_1]; +ADDRLP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2088 +ADDP4 +ADDP4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 495 +;495: } +LABELV $203 +line 496 +;496: inc_2++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 497 +;497: inc_1++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 498 +;498: } +LABELV $200 +line 460 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $199 +line 499 +;499: bs->currentChat[inc_2] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2088 +ADDP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 501 +;500: +;501: if (strcmp(section, "GeneralGreetings") == 0) +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $215 +ARGP4 +ADDRLP4 76 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 0 +NEI4 $213 +line 502 +;502: { +line 503 +;503: bs->doChat = 2; +ADDRFP4 0 +INDIRP4 +CNSTI4 2224 +ADDP4 +CNSTI4 2 +ASGNI4 +line 504 +;504: } +ADDRGP4 $214 +JUMPV +LABELV $213 +line 506 +;505: else +;506: { +line 507 +;507: bs->doChat = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 2224 +ADDP4 +CNSTI4 1 +ASGNI4 +line 508 +;508: } +LABELV $214 +line 509 +;509: bs->chatTime_stored = (strlen(bs->currentChat)*45)+Q_irand(1300, 1500); +ADDRLP4 80 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 80 +INDIRP4 +CNSTI4 2088 +ADDP4 +ARGP4 +ADDRLP4 84 +ADDRGP4 strlen +CALLI4 +ASGNI4 +CNSTI4 1300 +ARGI4 +CNSTI4 1500 +ARGI4 +ADDRLP4 88 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRLP4 80 +INDIRP4 +CNSTI4 2220 +ADDP4 +CNSTI4 45 +ADDRLP4 84 +INDIRI4 +MULI4 +ADDRLP4 88 +INDIRI4 +ADDI4 +CVIF4 4 +ASGNF4 +line 510 +;510: bs->chatTime = level.time + bs->chatTime_stored; +ADDRLP4 92 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 92 +INDIRP4 +CNSTI4 2216 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CVIF4 4 +ADDRLP4 92 +INDIRP4 +CNSTI4 2220 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +line 512 +;511: +;512: B_TempFree(MAX_CHAT_BUFFER_SIZE); //chatgroup +CNSTI4 8192 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 514 +;513: +;514: return 1; +CNSTI4 1 +RETI4 +LABELV $155 +endproc BotDoChat 96 12 +export ParseEmotionalAttachments +proc ParseEmotionalAttachments 60 4 +line 518 +;515:} +;516: +;517:void ParseEmotionalAttachments(bot_state_t *bs, char *buf) +;518:{ +line 519 +;519: int i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 520 +;520: int i_c = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $219 +JUMPV +line 524 +;521: char tbuf[16]; +;522: +;523: while (buf[i] && buf[i] != '}') +;524: { +LABELV $221 +line 526 +;525: while (buf[i] == ' ' || buf[i] == '{' || buf[i] == 9 || buf[i] == 13 || buf[i] == '\n') +;526: { +line 527 +;527: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 528 +;528: } +LABELV $222 +line 525 +ADDRLP4 24 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 32 +EQI4 $221 +ADDRLP4 24 +INDIRI4 +CNSTI4 123 +EQI4 $221 +ADDRLP4 24 +INDIRI4 +CNSTI4 9 +EQI4 $221 +ADDRLP4 24 +INDIRI4 +CNSTI4 13 +EQI4 $221 +ADDRLP4 24 +INDIRI4 +CNSTI4 10 +EQI4 $221 +line 530 +;529: +;530: if (buf[i] && buf[i] != '}') +ADDRLP4 28 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +EQI4 $220 +ADDRLP4 28 +INDIRI4 +CNSTI4 125 +EQI4 $220 +line 531 +;531: { +line 532 +;532: i_c = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $227 +JUMPV +LABELV $226 +line 534 +;533: while (buf[i] != '{' && buf[i] != 9 && buf[i] != 13 && buf[i] != '\n') +;534: { +line 535 +;535: bs->loved[bs->lovednum].name[i_c] = buf[i]; +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 68 +ADDRLP4 32 +INDIRP4 +CNSTI4 2600 +ADDP4 +INDIRI4 +MULI4 +ADDRLP4 32 +INDIRP4 +CNSTI4 2328 +ADDP4 +ADDP4 +CNSTI4 4 +ADDP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 536 +;536: i_c++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 537 +;537: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 538 +;538: } +LABELV $227 +line 533 +ADDRLP4 32 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 123 +EQI4 $231 +ADDRLP4 32 +INDIRI4 +CNSTI4 9 +EQI4 $231 +ADDRLP4 32 +INDIRI4 +CNSTI4 13 +EQI4 $231 +ADDRLP4 32 +INDIRI4 +CNSTI4 10 +NEI4 $226 +LABELV $231 +line 539 +;539: bs->loved[bs->lovednum].name[i_c] = '\0'; +ADDRLP4 36 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 68 +ADDRLP4 36 +INDIRP4 +CNSTI4 2600 +ADDP4 +INDIRI4 +MULI4 +ADDRLP4 36 +INDIRP4 +CNSTI4 2328 +ADDP4 +ADDP4 +CNSTI4 4 +ADDP4 +ADDP4 +CNSTI1 0 +ASGNI1 +ADDRGP4 $233 +JUMPV +LABELV $232 +line 542 +;540: +;541: while (buf[i] == ' ' || buf[i] == '{' || buf[i] == 9 || buf[i] == 13 || buf[i] == '\n') +;542: { +line 543 +;543: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 544 +;544: } +LABELV $233 +line 541 +ADDRLP4 40 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 40 +INDIRI4 +CNSTI4 32 +EQI4 $232 +ADDRLP4 40 +INDIRI4 +CNSTI4 123 +EQI4 $232 +ADDRLP4 40 +INDIRI4 +CNSTI4 9 +EQI4 $232 +ADDRLP4 40 +INDIRI4 +CNSTI4 13 +EQI4 $232 +ADDRLP4 40 +INDIRI4 +CNSTI4 10 +EQI4 $232 +line 546 +;545: +;546: i_c = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $236 +JUMPV +LABELV $235 +line 549 +;547: +;548: while (buf[i] != '{' && buf[i] != 9 && buf[i] != 13 && buf[i] != '\n') +;549: { +line 550 +;550: tbuf[i_c] = buf[i]; +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 551 +;551: i_c++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 552 +;552: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 553 +;553: } +LABELV $236 +line 548 +ADDRLP4 44 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 123 +EQI4 $240 +ADDRLP4 44 +INDIRI4 +CNSTI4 9 +EQI4 $240 +ADDRLP4 44 +INDIRI4 +CNSTI4 13 +EQI4 $240 +ADDRLP4 44 +INDIRI4 +CNSTI4 10 +NEI4 $235 +LABELV $240 +line 554 +;554: tbuf[i_c] = '\0'; +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +ADDP4 +CNSTI1 0 +ASGNI1 +line 556 +;555: +;556: bs->loved[bs->lovednum].level = atoi(tbuf); +ADDRLP4 8 +ARGP4 +ADDRLP4 48 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 52 +ADDRFP4 0 +INDIRP4 +ASGNP4 +CNSTI4 68 +ADDRLP4 52 +INDIRP4 +CNSTI4 2600 +ADDP4 +INDIRI4 +MULI4 +ADDRLP4 52 +INDIRP4 +CNSTI4 2328 +ADDP4 +ADDP4 +ADDRLP4 48 +INDIRI4 +ASGNI4 +line 558 +;557: +;558: bs->lovednum++; +ADDRLP4 56 +ADDRFP4 0 +INDIRP4 +CNSTI4 2600 +ADDP4 +ASGNP4 +ADDRLP4 56 +INDIRP4 +ADDRLP4 56 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 559 +;559: } +line 561 +;560: else +;561: { +line 562 +;562: break; +LABELV $225 +line 565 +;563: } +;564: +;565: if (bs->lovednum >= MAX_LOVED_ONES) +ADDRFP4 0 +INDIRP4 +CNSTI4 2600 +ADDP4 +INDIRI4 +CNSTI4 4 +LTI4 $241 +line 566 +;566: { +line 567 +;567: return; +ADDRGP4 $217 +JUMPV +LABELV $241 +line 570 +;568: } +;569: +;570: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 571 +;571: } +LABELV $219 +line 523 +ADDRLP4 24 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +EQI4 $243 +ADDRLP4 24 +INDIRI4 +CNSTI4 125 +NEI4 $222 +LABELV $243 +LABELV $220 +line 572 +;572:} +LABELV $217 +endproc ParseEmotionalAttachments 60 4 +export ReadChatGroups +proc ReadChatGroups 28 8 +line 575 +;573: +;574:int ReadChatGroups(bot_state_t *bs, char *buf) +;575:{ +line 580 +;576: char *cgroupbegin; +;577: int cgbplace; +;578: int i; +;579: +;580: cgroupbegin = strstr(buf, "BEGIN_CHAT_GROUPS"); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $245 +ARGP4 +ADDRLP4 12 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 12 +INDIRP4 +ASGNP4 +line 582 +;581: +;582: if (!cgroupbegin) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $246 +line 583 +;583: { +line 584 +;584: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $244 +JUMPV +LABELV $246 +line 587 +;585: } +;586: +;587: if (strlen(cgroupbegin) >= MAX_CHAT_BUFFER_SIZE) +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 16 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 8192 +LTI4 $248 +line 588 +;588: { +line 589 +;589: G_Printf(S_COLOR_RED "Error: Personality chat section exceeds max size\n"); +ADDRGP4 $250 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 590 +;590: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $244 +JUMPV +LABELV $248 +line 593 +;591: } +;592: +;593: cgbplace = cgroupbegin - buf+1; +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +ADDRFP4 4 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $252 +JUMPV +LABELV $251 +line 596 +;594: +;595: while (buf[cgbplace] != '\n') +;596: { +line 597 +;597: cgbplace++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 598 +;598: } +LABELV $252 +line 595 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 10 +NEI4 $251 +line 600 +;599: +;600: i = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $255 +JUMPV +LABELV $254 +line 603 +;601: +;602: while (buf[cgbplace] && buf[cgbplace] != '\0') +;603: { +line 604 +;604: gBotChatBuffer[bs->client][i] = buf[cgbplace]; +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CNSTI4 13 +LSHI4 +ADDRGP4 gBotChatBuffer +ADDP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 605 +;605: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 606 +;606: cgbplace++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 607 +;607: } +LABELV $255 +line 602 +ADDRLP4 20 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 24 +CNSTI4 0 +ASGNI4 +ADDRLP4 20 +INDIRI4 +ADDRLP4 24 +INDIRI4 +EQI4 $257 +ADDRLP4 20 +INDIRI4 +ADDRLP4 24 +INDIRI4 +NEI4 $254 +LABELV $257 +line 609 +;608: +;609: gBotChatBuffer[bs->client][i] = '\0'; +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CNSTI4 13 +LSHI4 +ADDRGP4 gBotChatBuffer +ADDP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 611 +;610: +;611: return 1; +CNSTI4 1 +RETI4 +LABELV $244 +endproc ReadChatGroups 28 8 +export BotUtilizePersonality +proc BotUtilizePersonality 160 16 +line 615 +;612:} +;613: +;614:void BotUtilizePersonality(bot_state_t *bs) +;615:{ +line 621 +;616: fileHandle_t f; +;617: int len, rlen; +;618: int failed; +;619: int i; +;620: //char buf[131072]; +;621: char *buf = (char *)B_TempAlloc(131072); +CNSTI4 131072 +ARGI4 +ADDRLP4 32 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 16 +ADDRLP4 32 +INDIRP4 +ASGNP4 +line 624 +;622: char *readbuf, *group; +;623: +;624: len = trap_FS_FOpenFile(bs->settings.personalityfile, &f, FS_READ); +ADDRFP4 0 +INDIRP4 +CNSTI4 1412 +ADDP4 +ARGP4 +ADDRLP4 24 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 36 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 36 +INDIRI4 +ASGNI4 +line 626 +;625: +;626: failed = 0; +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +line 628 +;627: +;628: if (!f) +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +NEI4 $259 +line 629 +;629: { +line 630 +;630: G_Printf(S_COLOR_RED "Error: Specified personality not found\n"); +ADDRGP4 $261 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 631 +;631: B_TempFree(131072); //buf +CNSTI4 131072 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 632 +;632: return; +ADDRGP4 $258 +JUMPV +LABELV $259 +line 635 +;633: } +;634: +;635: if (len >= 131072) +ADDRLP4 0 +INDIRI4 +CNSTI4 131072 +LTI4 $262 +line 636 +;636: { +line 637 +;637: G_Printf(S_COLOR_RED "Personality file exceeds maximum length\n"); +ADDRGP4 $264 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 638 +;638: B_TempFree(131072); //buf +CNSTI4 131072 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 639 +;639: return; +ADDRGP4 $258 +JUMPV +LABELV $262 +line 642 +;640: } +;641: +;642: trap_FS_Read(buf, len, f); +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 24 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 644 +;643: +;644: rlen = len; +ADDRLP4 28 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRGP4 $266 +JUMPV +LABELV $265 +line 647 +;645: +;646: while (len < 131072) +;647: { //kill all characters after the file length, since sometimes FS_Read doesn't do that entirely (or so it seems) +line 648 +;648: buf[len] = '\0'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 16 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 649 +;649: len++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 650 +;650: } +LABELV $266 +line 646 +ADDRLP4 0 +INDIRI4 +CNSTI4 131072 +LTI4 $265 +line 652 +;651: +;652: len = rlen; +ADDRLP4 0 +ADDRLP4 28 +INDIRI4 +ASGNI4 +line 654 +;653: +;654: readbuf = (char *)B_TempAlloc(1024); +CNSTI4 1024 +ARGI4 +ADDRLP4 40 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 40 +INDIRP4 +ASGNP4 +line 655 +;655: group = (char *)B_TempAlloc(65536); +CNSTI4 65536 +ARGI4 +ADDRLP4 44 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 44 +INDIRP4 +ASGNP4 +line 657 +;656: +;657: if (!GetValueGroup(buf, "GeneralBotInfo", group)) +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRGP4 $270 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 48 +ADDRGP4 GetValueGroup +CALLI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $268 +line 658 +;658: { +line 659 +;659: G_Printf(S_COLOR_RED "Personality file contains no GeneralBotInfo group\n"); +ADDRGP4 $271 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 660 +;660: failed = 1; //set failed so we know to set everything to default values +ADDRLP4 20 +CNSTI4 1 +ASGNI4 +line 661 +;661: } +LABELV $268 +line 663 +;662: +;663: if (!failed && GetPairedValue(group, "reflex", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $272 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $274 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 52 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 0 +EQI4 $272 +line 664 +;664: { +line 665 +;665: bs->skills.reflex = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 56 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2304 +ADDP4 +ADDRLP4 56 +INDIRI4 +ASGNI4 +line 666 +;666: } +ADDRGP4 $273 +JUMPV +LABELV $272 +line 668 +;667: else +;668: { +line 669 +;669: bs->skills.reflex = 100; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2304 +ADDP4 +CNSTI4 100 +ASGNI4 +line 670 +;670: } +LABELV $273 +line 672 +;671: +;672: if (!failed && GetPairedValue(group, "accuracy", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $275 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $277 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 56 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 0 +EQI4 $275 +line 673 +;673: { +line 674 +;674: bs->skills.accuracy = atof(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 60 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2308 +ADDP4 +ADDRLP4 60 +INDIRF4 +ASGNF4 +line 675 +;675: } +ADDRGP4 $276 +JUMPV +LABELV $275 +line 677 +;676: else +;677: { +line 678 +;678: bs->skills.accuracy = 10; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2308 +ADDP4 +CNSTF4 1092616192 +ASGNF4 +line 679 +;679: } +LABELV $276 +line 681 +;680: +;681: if (!failed && GetPairedValue(group, "turnspeed", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $278 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $280 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 60 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 60 +INDIRI4 +CNSTI4 0 +EQI4 $278 +line 682 +;682: { +line 683 +;683: bs->skills.turnspeed = atof(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 64 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2312 +ADDP4 +ADDRLP4 64 +INDIRF4 +ASGNF4 +line 684 +;684: } +ADDRGP4 $279 +JUMPV +LABELV $278 +line 686 +;685: else +;686: { +line 687 +;687: bs->skills.turnspeed = 0.01f; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2312 +ADDP4 +CNSTF4 1008981770 +ASGNF4 +line 688 +;688: } +LABELV $279 +line 690 +;689: +;690: if (!failed && GetPairedValue(group, "turnspeed_combat", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $281 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $283 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 64 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +CNSTI4 0 +EQI4 $281 +line 691 +;691: { +line 692 +;692: bs->skills.turnspeed_combat = atof(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 68 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2316 +ADDP4 +ADDRLP4 68 +INDIRF4 +ASGNF4 +line 693 +;693: } +ADDRGP4 $282 +JUMPV +LABELV $281 +line 695 +;694: else +;695: { +line 696 +;696: bs->skills.turnspeed_combat = 0.05f; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2316 +ADDP4 +CNSTF4 1028443341 +ASGNF4 +line 697 +;697: } +LABELV $282 +line 699 +;698: +;699: if (!failed && GetPairedValue(group, "maxturn", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $284 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $286 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 68 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 68 +INDIRI4 +CNSTI4 0 +EQI4 $284 +line 700 +;700: { +line 701 +;701: bs->skills.maxturn = atof(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2320 +ADDP4 +ADDRLP4 72 +INDIRF4 +ASGNF4 +line 702 +;702: } +ADDRGP4 $285 +JUMPV +LABELV $284 +line 704 +;703: else +;704: { +line 705 +;705: bs->skills.maxturn = 360; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2320 +ADDP4 +CNSTF4 1135869952 +ASGNF4 +line 706 +;706: } +LABELV $285 +line 708 +;707: +;708: if (!failed && GetPairedValue(group, "perfectaim", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $287 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $289 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +EQI4 $287 +line 709 +;709: { +line 710 +;710: bs->skills.perfectaim = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 76 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2324 +ADDP4 +ADDRLP4 76 +INDIRI4 +ASGNI4 +line 711 +;711: } +ADDRGP4 $288 +JUMPV +LABELV $287 +line 713 +;712: else +;713: { +line 714 +;714: bs->skills.perfectaim = 0; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2324 +ADDP4 +CNSTI4 0 +ASGNI4 +line 715 +;715: } +LABELV $288 +line 717 +;716: +;717: if (!failed && GetPairedValue(group, "chatability", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $290 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $292 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 76 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 0 +EQI4 $290 +line 718 +;718: { +line 719 +;719: bs->canChat = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2080 +ADDP4 +ADDRLP4 80 +INDIRI4 +ASGNI4 +line 720 +;720: } +ADDRGP4 $291 +JUMPV +LABELV $290 +line 722 +;721: else +;722: { +line 723 +;723: bs->canChat = 0; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2080 +ADDP4 +CNSTI4 0 +ASGNI4 +line 724 +;724: } +LABELV $291 +line 726 +;725: +;726: if (!failed && GetPairedValue(group, "chatfrequency", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $293 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $295 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 80 +INDIRI4 +CNSTI4 0 +EQI4 $293 +line 727 +;727: { +line 728 +;728: bs->chatFrequency = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 84 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2084 +ADDP4 +ADDRLP4 84 +INDIRI4 +ASGNI4 +line 729 +;729: } +ADDRGP4 $294 +JUMPV +LABELV $293 +line 731 +;730: else +;731: { +line 732 +;732: bs->chatFrequency = 5; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2084 +ADDP4 +CNSTI4 5 +ASGNI4 +line 733 +;733: } +LABELV $294 +line 735 +;734: +;735: if (!failed && GetPairedValue(group, "hatelevel", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $296 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $298 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 84 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 0 +EQI4 $296 +line 736 +;736: { +line 737 +;737: bs->loved_death_thresh = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 88 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2604 +ADDP4 +ADDRLP4 88 +INDIRI4 +ASGNI4 +line 738 +;738: } +ADDRGP4 $297 +JUMPV +LABELV $296 +line 740 +;739: else +;740: { +line 741 +;741: bs->loved_death_thresh = 3; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2604 +ADDP4 +CNSTI4 3 +ASGNI4 +line 742 +;742: } +LABELV $297 +line 744 +;743: +;744: if (!failed && GetPairedValue(group, "camper", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $299 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $301 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 88 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 88 +INDIRI4 +CNSTI4 0 +EQI4 $299 +line 745 +;745: { +line 746 +;746: bs->isCamper = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 92 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2048 +ADDP4 +ADDRLP4 92 +INDIRI4 +ASGNI4 +line 747 +;747: } +ADDRGP4 $300 +JUMPV +LABELV $299 +line 749 +;748: else +;749: { +line 750 +;750: bs->isCamper = 0; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2048 +ADDP4 +CNSTI4 0 +ASGNI4 +line 751 +;751: } +LABELV $300 +line 753 +;752: +;753: if (!failed && GetPairedValue(group, "saberspecialist", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $302 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $304 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 92 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 92 +INDIRI4 +CNSTI4 0 +EQI4 $302 +line 754 +;754: { +line 755 +;755: bs->saberSpecialist = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 96 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2076 +ADDP4 +ADDRLP4 96 +INDIRI4 +ASGNI4 +line 756 +;756: } +ADDRGP4 $303 +JUMPV +LABELV $302 +line 758 +;757: else +;758: { +line 759 +;759: bs->saberSpecialist = 0; //default +ADDRFP4 0 +INDIRP4 +CNSTI4 2076 +ADDP4 +CNSTI4 0 +ASGNI4 +line 760 +;760: } +LABELV $303 +line 762 +;761: +;762: if (!failed && GetPairedValue(group, "forceinfo", readbuf)) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $305 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $307 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 96 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 96 +INDIRI4 +CNSTI4 0 +EQI4 $305 +line 763 +;763: { +line 764 +;764: Com_sprintf(bs->forceinfo, sizeof(bs->forceinfo), "%s\0", readbuf); +ADDRFP4 0 +INDIRP4 +CNSTI4 2732 +ADDP4 +ARGP4 +CNSTI4 2048 +ARGI4 +ADDRGP4 $308 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 765 +;765: } +ADDRGP4 $306 +JUMPV +LABELV $305 +line 767 +;766: else +;767: { +line 768 +;768: Com_sprintf(bs->forceinfo, sizeof(bs->forceinfo), "%s\0", DEFAULT_FORCEPOWERS); +ADDRFP4 0 +INDIRP4 +CNSTI4 2732 +ADDP4 +ARGP4 +CNSTI4 2048 +ARGI4 +ADDRGP4 $308 +ARGP4 +ADDRGP4 $309 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 769 +;769: } +LABELV $306 +line 771 +;770: +;771: i = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $311 +JUMPV +LABELV $310 +line 774 +;772: +;773: while (i < MAX_CHAT_BUFFER_SIZE) +;774: { //clear out the chat buffer for this bot +line 775 +;775: gBotChatBuffer[bs->client][i] = '\0'; +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CNSTI4 13 +LSHI4 +ADDRGP4 gBotChatBuffer +ADDP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 776 +;776: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 777 +;777: } +LABELV $311 +line 773 +ADDRLP4 4 +INDIRI4 +CNSTI4 8192 +LTI4 $310 +line 779 +;778: +;779: if (bs->canChat) +ADDRFP4 0 +INDIRP4 +CNSTI4 2080 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $313 +line 780 +;780: { +line 781 +;781: if (!ReadChatGroups(bs, buf)) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRLP4 100 +ADDRGP4 ReadChatGroups +CALLI4 +ASGNI4 +ADDRLP4 100 +INDIRI4 +CNSTI4 0 +NEI4 $315 +line 782 +;782: { +line 783 +;783: bs->canChat = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 2080 +ADDP4 +CNSTI4 0 +ASGNI4 +line 784 +;784: } +LABELV $315 +line 785 +;785: } +LABELV $313 +line 787 +;786: +;787: if (GetValueGroup(buf, "BotWeaponWeights", group)) +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRGP4 $319 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 100 +ADDRGP4 GetValueGroup +CALLI4 +ASGNI4 +ADDRLP4 100 +INDIRI4 +CNSTI4 0 +EQI4 $317 +line 788 +;788: { +line 789 +;789: if (GetPairedValue(group, "WP_STUN_BATON", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $322 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 104 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 104 +INDIRI4 +CNSTI4 0 +EQI4 $320 +line 790 +;790: { +line 791 +;791: bs->botWeaponWeights[WP_STUN_BATON] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 108 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2616 +ADDP4 +ADDRLP4 108 +INDIRI4 +CVIF4 4 +ASGNF4 +line 792 +;792: } +LABELV $320 +line 794 +;793: +;794: if (GetPairedValue(group, "WP_SABER", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $325 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 108 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 108 +INDIRI4 +CNSTI4 0 +EQI4 $323 +line 795 +;795: { +line 796 +;796: bs->botWeaponWeights[WP_SABER] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 112 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2620 +ADDP4 +ADDRLP4 112 +INDIRI4 +CVIF4 4 +ASGNF4 +line 797 +;797: } +LABELV $323 +line 799 +;798: +;799: if (GetPairedValue(group, "WP_BRYAR_PISTOL", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $328 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 112 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 112 +INDIRI4 +CNSTI4 0 +EQI4 $326 +line 800 +;800: { +line 801 +;801: bs->botWeaponWeights[WP_BRYAR_PISTOL] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 116 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2624 +ADDP4 +ADDRLP4 116 +INDIRI4 +CVIF4 4 +ASGNF4 +line 802 +;802: } +LABELV $326 +line 804 +;803: +;804: if (GetPairedValue(group, "WP_BLASTER", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $331 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 116 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 116 +INDIRI4 +CNSTI4 0 +EQI4 $329 +line 805 +;805: { +line 806 +;806: bs->botWeaponWeights[WP_BLASTER] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 120 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2628 +ADDP4 +ADDRLP4 120 +INDIRI4 +CVIF4 4 +ASGNF4 +line 807 +;807: } +LABELV $329 +line 809 +;808: +;809: if (GetPairedValue(group, "WP_DISRUPTOR", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $334 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 120 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 120 +INDIRI4 +CNSTI4 0 +EQI4 $332 +line 810 +;810: { +line 811 +;811: bs->botWeaponWeights[WP_DISRUPTOR] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 124 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2632 +ADDP4 +ADDRLP4 124 +INDIRI4 +CVIF4 4 +ASGNF4 +line 812 +;812: } +LABELV $332 +line 814 +;813: +;814: if (GetPairedValue(group, "WP_BOWCASTER", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $337 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 124 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 124 +INDIRI4 +CNSTI4 0 +EQI4 $335 +line 815 +;815: { +line 816 +;816: bs->botWeaponWeights[WP_BOWCASTER] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 128 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2636 +ADDP4 +ADDRLP4 128 +INDIRI4 +CVIF4 4 +ASGNF4 +line 817 +;817: } +LABELV $335 +line 819 +;818: +;819: if (GetPairedValue(group, "WP_REPEATER", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $340 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 128 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 128 +INDIRI4 +CNSTI4 0 +EQI4 $338 +line 820 +;820: { +line 821 +;821: bs->botWeaponWeights[WP_REPEATER] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 132 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2640 +ADDP4 +ADDRLP4 132 +INDIRI4 +CVIF4 4 +ASGNF4 +line 822 +;822: } +LABELV $338 +line 824 +;823: +;824: if (GetPairedValue(group, "WP_DEMP2", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $343 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 132 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 132 +INDIRI4 +CNSTI4 0 +EQI4 $341 +line 825 +;825: { +line 826 +;826: bs->botWeaponWeights[WP_DEMP2] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 136 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2644 +ADDP4 +ADDRLP4 136 +INDIRI4 +CVIF4 4 +ASGNF4 +line 827 +;827: } +LABELV $341 +line 829 +;828: +;829: if (GetPairedValue(group, "WP_FLECHETTE", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $346 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 136 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 136 +INDIRI4 +CNSTI4 0 +EQI4 $344 +line 830 +;830: { +line 831 +;831: bs->botWeaponWeights[WP_FLECHETTE] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 140 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2648 +ADDP4 +ADDRLP4 140 +INDIRI4 +CVIF4 4 +ASGNF4 +line 832 +;832: } +LABELV $344 +line 834 +;833: +;834: if (GetPairedValue(group, "WP_ROCKET_LAUNCHER", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $349 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 140 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 140 +INDIRI4 +CNSTI4 0 +EQI4 $347 +line 835 +;835: { +line 836 +;836: bs->botWeaponWeights[WP_ROCKET_LAUNCHER] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 144 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2652 +ADDP4 +ADDRLP4 144 +INDIRI4 +CVIF4 4 +ASGNF4 +line 837 +;837: } +LABELV $347 +line 839 +;838: +;839: if (GetPairedValue(group, "WP_THERMAL", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $352 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 144 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 144 +INDIRI4 +CNSTI4 0 +EQI4 $350 +line 840 +;840: { +line 841 +;841: bs->botWeaponWeights[WP_THERMAL] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 148 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2656 +ADDP4 +ADDRLP4 148 +INDIRI4 +CVIF4 4 +ASGNF4 +line 842 +;842: } +LABELV $350 +line 844 +;843: +;844: if (GetPairedValue(group, "WP_TRIP_MINE", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $355 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 148 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 148 +INDIRI4 +CNSTI4 0 +EQI4 $353 +line 845 +;845: { +line 846 +;846: bs->botWeaponWeights[WP_TRIP_MINE] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 152 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2660 +ADDP4 +ADDRLP4 152 +INDIRI4 +CVIF4 4 +ASGNF4 +line 847 +;847: } +LABELV $353 +line 849 +;848: +;849: if (GetPairedValue(group, "WP_DET_PACK", readbuf)) +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $358 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 152 +ADDRGP4 GetPairedValue +CALLI4 +ASGNI4 +ADDRLP4 152 +INDIRI4 +CNSTI4 0 +EQI4 $356 +line 850 +;850: { +line 851 +;851: bs->botWeaponWeights[WP_DET_PACK] = atoi(readbuf); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 156 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 2664 +ADDP4 +ADDRLP4 156 +INDIRI4 +CVIF4 4 +ASGNF4 +line 852 +;852: } +LABELV $356 +line 853 +;853: } +LABELV $317 +line 855 +;854: +;855: bs->lovednum = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 2600 +ADDP4 +CNSTI4 0 +ASGNI4 +line 857 +;856: +;857: if (GetValueGroup(buf, "EmotionalAttachments", group)) +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRGP4 $361 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 104 +ADDRGP4 GetValueGroup +CALLI4 +ASGNI4 +ADDRLP4 104 +INDIRI4 +CNSTI4 0 +EQI4 $359 +line 858 +;858: { +line 859 +;859: ParseEmotionalAttachments(bs, group); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 ParseEmotionalAttachments +CALLV +pop +line 860 +;860: } +LABELV $359 +line 862 +;861: +;862: B_TempFree(131072); //buf +CNSTI4 131072 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 863 +;863: B_TempFree(1024); //readbuf +CNSTI4 1024 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 864 +;864: B_TempFree(65536); //group +CNSTI4 65536 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 865 +;865: trap_FS_FCloseFile(f); +ADDRLP4 24 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 866 +;866:} +LABELV $258 +endproc BotUtilizePersonality 160 16 +import floattime +import gLevelFlags +import nodenum +import nodetable +import gLastPrintedIndex +import gWPNum +import gWPArray +import gWPRenderedFrame +import gBotEdit +import gDeactivated +import gWPRenderTime +bss +export gBotChatBuffer +align 1 +LABELV gBotChatBuffer +skip 262144 +import eFlagBlue +import eFlagRed +import oFlagBlue +import flagBlue +import oFlagRed +import flagRed +import bot_wp_visconnect +import bot_wp_distconnect +import bot_wp_clearweight +import bot_wp_edit +import bot_wp_info +import bot_camp +import bot_attachments +import bot_forgimmick +import bot_forcepowers +import ConcatArgs +import GetBestIdleGoal +import GetNearestVisibleWP +import BotIsAChickenWuss +import OrgVisibleBox +import BotWaypointRender +import StandardBotAI +import NumBots +import BotResetState +import GetBotLibAPI +import trap_ROFF_Purge_Ent +import trap_ROFF_Play +import trap_ROFF_Cache +import trap_ROFF_UpdateEntities +import trap_ROFF_Clean +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_SnapVector +import trap_GeneticParentsAndChildSelection +import trap_BotResetWeaponState +import trap_BotFreeWeaponState +import trap_BotAllocWeaponState +import trap_BotLoadWeaponWeights +import trap_BotGetWeaponInfo +import trap_BotChooseBestFightWeapon +import trap_BotAddAvoidSpot +import trap_BotInitMoveState +import trap_BotFreeMoveState +import trap_BotAllocMoveState +import trap_BotPredictVisiblePosition +import trap_BotMovementViewTarget +import trap_BotReachabilityArea +import trap_BotResetLastAvoidReach +import trap_BotResetAvoidReach +import trap_BotMoveInDirection +import trap_BotMoveToGoal +import trap_BotResetMoveState +import trap_BotFreeGoalState +import trap_BotAllocGoalState +import trap_BotMutateGoalFuzzyLogic +import trap_BotSaveGoalFuzzyLogic +import trap_BotInterbreedGoalFuzzyLogic +import trap_BotFreeItemWeights +import trap_BotLoadItemWeights +import trap_BotUpdateEntityItems +import trap_BotInitLevelItems +import trap_BotSetAvoidGoalTime +import trap_BotAvoidGoalTime +import trap_BotGetLevelItemGoal +import trap_BotGetMapLocationGoal +import trap_BotGetNextCampSpotGoal +import trap_BotItemGoalInVisButNotVisible +import trap_BotTouchingGoal +import trap_BotChooseNBGItem +import trap_BotChooseLTGItem +import trap_BotGetSecondGoal +import trap_BotGetTopGoal +import trap_BotGoalName +import trap_BotDumpGoalStack +import trap_BotDumpAvoidGoals +import trap_BotEmptyGoalStack +import trap_BotPopGoal +import trap_BotPushGoal +import trap_BotResetAvoidGoals +import trap_BotRemoveFromAvoidGoals +import trap_BotResetGoalState +import trap_BotSetChatName +import trap_BotSetChatGender +import trap_BotLoadChatFile +import trap_BotReplaceSynonyms +import trap_UnifyWhiteSpaces +import trap_BotMatchVariable +import trap_BotFindMatch +import trap_StringContains +import trap_BotGetChatMessage +import trap_BotEnterChat +import trap_BotChatLength +import trap_BotReplyChat +import trap_BotNumInitialChats +import trap_BotInitialChat +import trap_BotNumConsoleMessages +import trap_BotNextConsoleMessage +import trap_BotRemoveConsoleMessage +import trap_BotQueueConsoleMessage +import trap_BotFreeChatState +import trap_BotAllocChatState +import trap_Characteristic_String +import trap_Characteristic_BInteger +import trap_Characteristic_Integer +import trap_Characteristic_BFloat +import trap_Characteristic_Float +import trap_BotFreeCharacter +import trap_BotLoadCharacter +import trap_EA_ResetInput +import trap_EA_GetInput +import trap_EA_EndRegular +import trap_EA_ForcePower +import trap_EA_Alt_Attack +import trap_EA_View +import trap_EA_Move +import trap_EA_DelayedJump +import trap_EA_Jump +import trap_EA_SelectWeapon +import trap_EA_MoveRight +import trap_EA_MoveLeft +import trap_EA_MoveBack +import trap_EA_MoveForward +import trap_EA_MoveDown +import trap_EA_MoveUp +import trap_EA_Crouch +import trap_EA_Respawn +import trap_EA_Use +import trap_EA_Attack +import trap_EA_Talk +import trap_EA_Gesture +import trap_EA_Action +import trap_EA_Command +import trap_EA_SayTeam +import trap_EA_Say +import trap_AAS_PredictClientMovement +import trap_AAS_Swimming +import trap_AAS_AlternativeRouteGoals +import trap_AAS_PredictRoute +import trap_AAS_EnableRoutingArea +import trap_AAS_AreaTravelTimeToGoalArea +import trap_AAS_AreaReachability +import trap_AAS_IntForBSPEpairKey +import trap_AAS_FloatForBSPEpairKey +import trap_AAS_VectorForBSPEpairKey +import trap_AAS_ValueForBSPEpairKey +import trap_AAS_NextBSPEntity +import trap_AAS_PointContents +import trap_AAS_TraceAreas +import trap_AAS_PointReachabilityAreaIndex +import trap_AAS_PointAreaNum +import trap_AAS_Time +import trap_AAS_PresenceTypeBoundingBox +import trap_AAS_Initialized +import trap_AAS_EntityInfo +import trap_AAS_AreaInfo +import trap_AAS_BBoxAreas +import trap_BotUserCommand +import trap_BotGetServerCommand +import trap_BotGetSnapshotEntity +import trap_BotLibTest +import trap_BotLibUpdateEntity +import trap_BotLibLoadMap +import trap_BotLibStartFrame +import trap_BotLibDefine +import trap_BotLibVarGet +import trap_BotLibVarSet +import trap_BotLibShutdown +import trap_BotLibSetup +import trap_DebugPolygonDelete +import trap_DebugPolygonCreate +import trap_GetEntityToken +import trap_GetUsercmd +import trap_BotFreeClient +import trap_BotAllocateClient +import trap_EntityContact +import trap_EntitiesInBox +import trap_UnlinkEntity +import trap_LinkEntity +import trap_AreasConnected +import trap_AdjustAreaPortalState +import trap_InPVSIgnorePortals +import trap_InPVS +import trap_PointContents +import trap_Trace +import trap_SetBrushModel +import trap_GetServerinfo +import trap_SetUserinfo +import trap_GetUserinfo +import trap_GetConfigstring +import trap_SetConfigstring +import trap_SendServerCommand +import trap_DropClient +import trap_LocateGameData +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableValue +import trap_Cvar_VariableIntegerValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_SendConsoleCommand +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Args +import trap_Argv +import trap_Argc +import trap_Milliseconds +import trap_Error +import trap_Printf +import g_timeouttospec +import g_forceDodge +import g_dismember +import g_singlePlayer +import g_enableBreath +import g_enableDust +import g_rankings +import pmove_msec +import pmove_fixed +import g_smoothClients +import g_blueteam +import g_redteam +import g_debugUp +import g_debugRight +import g_debugForward +import g_filterBan +import g_banIPs +import g_teamForceBalance +import g_teamAutoJoin +import g_allowVote +import g_blood +import g_doWarmup +import g_warmup +import g_motd +import g_synchronousClients +import g_adaptRespawn +import g_weaponTeamRespawn +import g_weaponRespawn +import g_debugDamage +import g_debugAlloc +import g_debugMove +import g_inactivity +import g_forcerespawn +import g_quadfactor +import g_knockback +import g_speed +import g_gravity +import g_needpass +import g_password +import g_friendlySaber +import g_friendlyFire +import g_saberInterpolate +import g_capturelimit +import g_timelimit +import g_duel_fraglimit +import g_fraglimit +import g_duelWeaponDisable +import g_weaponDisable +import g_forcePowerDisable +import g_spawnInvulnerability +import g_forceRegenTime +import g_saberLocking +import g_privateDuel +import g_forceBasedTeams +import g_maxForceRank +import g_dmflags +import g_autoMapCycle +import g_restarted +import g_maxGameClients +import g_maxclients +import g_cheats +import g_dedicated +import g_gametype +import g_entities +import level +import Pickup_Team +import CheckTeamStatus +import TeamplayInfoMessage +import Team_GetLocationMsg +import Team_GetLocation +import SelectSagaSpawnPoint +import SelectCTFSpawnPoint +import Team_FreeEntity +import Team_ReturnFlag +import Team_InitGame +import Team_CheckHurtCarrier +import Team_FragBonuses +import Team_DroppedFlagThink +import AddTeamScore +import TeamColorString +import OtherTeamName +import TeamName +import OtherTeam +import BotAIStartFrame +import BotAIShutdownClient +import BotAISetupClient +import BotAILoadMap +import BotAIShutdown +import BotAISetup +import InFieldOfVision +import BotOrder +import OrgVisible +import InitSagaMode +import G_ClearClientLog +import G_LogExit +import G_LogWeaponOutput +import G_LogWeaponInit +import G_LogWeaponItem +import G_LogWeaponPowerup +import G_LogWeaponFrag +import G_LogWeaponDeath +import G_LogWeaponKill +import G_LogWeaponDamage +import G_LogWeaponFire +import G_LogWeaponPickup +import Jedi_DodgeEvasion +import ForceTelepathy +import ForceThrow +import ForceSeeing +import ForceTeamForceReplenish +import ForceTeamHeal +import ForceAbsorb +import ForceProtect +import ForceGrip +import ForceRage +import ForceSpeed +import ForceHeal +import ForcePowerUsableOn +import WP_ForcePowersUpdate +import WP_SpawnInitForcePowers +import WP_InitForcePowers +import WP_SaberInitBladeData +import WP_SaberCanBlock +import WP_SaberPositionUpdate +import WP_ForcePowerStop +import HasSetSaberOnly +import G_PreDefSound +import G_RefreshNextMap +import G_DoesMapSupportGametype +import BotInterbreedEndMatch +import Svcmd_BotList_f +import Svcmd_AddBot_f +import G_BotConnect +import G_RemoveQueuedBotBegin +import G_CheckBotSpawn +import G_GetBotInfoByName +import G_GetBotInfoByNumber +import G_InitBots +import UpdateTournamentInfo +import G_WriteSessionData +import G_InitWorldSession +import G_InitSessionData +import G_ReadSessionData +import Svcmd_GameMem_f +import G_InitMemory +import G_Alloc +import Team_CheckDroppedItem +import OnSameTeam +import G_RunClient +import ClientEndFrame +import ClientThink +import G_CheckClientTimeouts +import ClientCommand +import ClientBegin +import ClientDisconnect +import ClientUserinfoChanged +import ClientConnect +import G_GetStripEdString +import G_Error +import G_Printf +import SendScoreboardMessageToAllClients +import G_LogPrintf +import G_RunThink +import CheckTeamLeader +import SetLeader +import FindIntermissionPoint +import g_ff_objectives +import DeathmatchScoreboardMessage +import G_SetStats +import MoveClientToIntermission +import BlowDetpacks +import FireWeapon +import G_FilterPacket +import G_ProcessIPBans +import ConsoleCommand +import gJMSaberEnt +import SpotWouldTelefrag +import CalculateRanks +import AddScore +import player_die +import ClientSpawn +import InitBodyQue +import BeginIntermission +import respawn +import CopyToBodyQue +import SelectSpawnPoint +import SetClientViewAngle +import PickTeam +import TeamLeader +import TeamCount +import CheckGauntletAttack +import SnapVectorTowards +import CalcMuzzlePoint +import LogAccuracyHit +import WP_FireGenericBlasterMissile +import WP_FireTurretMissile +import G_PlayerBecomeATST +import ATST_ManageDamageBoxes +import TeleportPlayer +import trigger_teleporter_touch +import Touch_DoorTrigger +import G_RunMover +import WP_FireBlasterMissile +import G_ExplodeMissile +import G_BounceProjectile +import CreateMissile +import G_RunMissile +import G_ReflectMissile +import ExplodeDeath +import TossClientCubes +import TossClientItems +import TossClientWeapon +import body_die +import G_RadiusDamage +import G_Damage +import CanDamage +import trap_G2API_SetBoneAnim +import trap_G2API_GetGLAName +import trap_G2API_SetBoneAngles +import trap_G2API_CleanGhoul2Models +import trap_G2API_RemoveGhoul2Model +import trap_G2API_HasGhoul2ModelOnIndex +import trap_G2API_DuplicateGhoul2Instance +import trap_G2API_CopySpecificGhoul2Model +import trap_G2API_CopyGhoul2Instance +import trap_G2API_SetBoltInfo +import trap_G2API_AddBolt +import trap_G2API_InitGhoul2Model +import trap_G2API_GetBoltMatrix_NoReconstruct +import trap_G2API_GetBoltMatrix +import trap_G2_HaveWeGhoul2Models +import trap_G2_SetGhoul2ModelIndexes +import trap_G2_ListModelBones +import trap_G2_ListModelSurfaces +import G_SkinIndex +import BuildShaderStateConfig +import AddRemap +import G_SetOrigin +import G_AddEvent +import G_AddPredictableEvent +import vtos +import tv +import G_RunObject +import G_TouchSolids +import G_TouchTriggers +import G_EntitiesFree +import G_FreeEntity +import G_KillG2Queue +import G_SendG2KillQueue +import TryUse +import G_EntitySound +import G_SoundAtLoc +import G_Sound +import G_MuteSound +import G_ScreenShake +import G_PlayEffect +import G_TempEntity +import G_Spawn +import G_InitGentity +import G_SetAngles +import G_SetMovedir +import G_UseTargets +import G_PickTarget +import G_RadiusList +import G_Find +import G_KillBox +import G_TeamCommand +import G_EffectIndex +import G_SoundIndex +import G_ModelIndex +import SaveRegisteredItems +import RegisterItem +import ClearRegisteredItems +import Touch_Item +import Add_Ammo +import ArmorIndex +import Think_Weapon +import FinishSpawningItem +import G_SpawnItem +import SetRespawn +import LaunchItem +import Drop_Item +import PrecacheItem +import UseHoldableItem +import RespawnItem +import G_RunItem +import G_CheckTeamItems +import ItemUse_MedPack +import ItemUse_Seeker +import ItemUse_Sentry +import ItemUse_Shield +import ItemUse_Binoculars +import G_GetDuelWinner +import Cmd_EngageDuel_f +import Cmd_ToggleSaber_f +import G_ItemUsable +import Cmd_SaberAttackCycle_f +import Cmd_FollowCycle_f +import SetTeam +import BroadcastTeamChange +import StopFollowing +import Cmd_Score_f +import G_NewString +import G_SpawnEntitiesFromString +import G_SpawnVector +import G_SpawnInt +import G_SpawnFloat +import G_SpawnString +import g2SaberInstance +import precachedKyle +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $361 +char 1 69 +char 1 109 +char 1 111 +char 1 116 +char 1 105 +char 1 111 +char 1 110 +char 1 97 +char 1 108 +char 1 65 +char 1 116 +char 1 116 +char 1 97 +char 1 99 +char 1 104 +char 1 109 +char 1 101 +char 1 110 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $358 +char 1 87 +char 1 80 +char 1 95 +char 1 68 +char 1 69 +char 1 84 +char 1 95 +char 1 80 +char 1 65 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $355 +char 1 87 +char 1 80 +char 1 95 +char 1 84 +char 1 82 +char 1 73 +char 1 80 +char 1 95 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 0 +align 1 +LABELV $352 +char 1 87 +char 1 80 +char 1 95 +char 1 84 +char 1 72 +char 1 69 +char 1 82 +char 1 77 +char 1 65 +char 1 76 +char 1 0 +align 1 +LABELV $349 +char 1 87 +char 1 80 +char 1 95 +char 1 82 +char 1 79 +char 1 67 +char 1 75 +char 1 69 +char 1 84 +char 1 95 +char 1 76 +char 1 65 +char 1 85 +char 1 78 +char 1 67 +char 1 72 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $346 +char 1 87 +char 1 80 +char 1 95 +char 1 70 +char 1 76 +char 1 69 +char 1 67 +char 1 72 +char 1 69 +char 1 84 +char 1 84 +char 1 69 +char 1 0 +align 1 +LABELV $343 +char 1 87 +char 1 80 +char 1 95 +char 1 68 +char 1 69 +char 1 77 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $340 +char 1 87 +char 1 80 +char 1 95 +char 1 82 +char 1 69 +char 1 80 +char 1 69 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $337 +char 1 87 +char 1 80 +char 1 95 +char 1 66 +char 1 79 +char 1 87 +char 1 67 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $334 +char 1 87 +char 1 80 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 0 +align 1 +LABELV $331 +char 1 87 +char 1 80 +char 1 95 +char 1 66 +char 1 76 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $328 +char 1 87 +char 1 80 +char 1 95 +char 1 66 +char 1 82 +char 1 89 +char 1 65 +char 1 82 +char 1 95 +char 1 80 +char 1 73 +char 1 83 +char 1 84 +char 1 79 +char 1 76 +char 1 0 +align 1 +LABELV $325 +char 1 87 +char 1 80 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $322 +char 1 87 +char 1 80 +char 1 95 +char 1 83 +char 1 84 +char 1 85 +char 1 78 +char 1 95 +char 1 66 +char 1 65 +char 1 84 +char 1 79 +char 1 78 +char 1 0 +align 1 +LABELV $319 +char 1 66 +char 1 111 +char 1 116 +char 1 87 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 87 +char 1 101 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $309 +char 1 53 +char 1 45 +char 1 49 +char 1 45 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 0 +align 1 +LABELV $308 +char 1 37 +char 1 115 +char 1 0 +char 1 0 +align 1 +LABELV $307 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 0 +align 1 +LABELV $304 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 115 +char 1 112 +char 1 101 +char 1 99 +char 1 105 +char 1 97 +char 1 108 +char 1 105 +char 1 115 +char 1 116 +char 1 0 +align 1 +LABELV $301 +char 1 99 +char 1 97 +char 1 109 +char 1 112 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $298 +char 1 104 +char 1 97 +char 1 116 +char 1 101 +char 1 108 +char 1 101 +char 1 118 +char 1 101 +char 1 108 +char 1 0 +align 1 +LABELV $295 +char 1 99 +char 1 104 +char 1 97 +char 1 116 +char 1 102 +char 1 114 +char 1 101 +char 1 113 +char 1 117 +char 1 101 +char 1 110 +char 1 99 +char 1 121 +char 1 0 +align 1 +LABELV $292 +char 1 99 +char 1 104 +char 1 97 +char 1 116 +char 1 97 +char 1 98 +char 1 105 +char 1 108 +char 1 105 +char 1 116 +char 1 121 +char 1 0 +align 1 +LABELV $289 +char 1 112 +char 1 101 +char 1 114 +char 1 102 +char 1 101 +char 1 99 +char 1 116 +char 1 97 +char 1 105 +char 1 109 +char 1 0 +align 1 +LABELV $286 +char 1 109 +char 1 97 +char 1 120 +char 1 116 +char 1 117 +char 1 114 +char 1 110 +char 1 0 +align 1 +LABELV $283 +char 1 116 +char 1 117 +char 1 114 +char 1 110 +char 1 115 +char 1 112 +char 1 101 +char 1 101 +char 1 100 +char 1 95 +char 1 99 +char 1 111 +char 1 109 +char 1 98 +char 1 97 +char 1 116 +char 1 0 +align 1 +LABELV $280 +char 1 116 +char 1 117 +char 1 114 +char 1 110 +char 1 115 +char 1 112 +char 1 101 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $277 +char 1 97 +char 1 99 +char 1 99 +char 1 117 +char 1 114 +char 1 97 +char 1 99 +char 1 121 +char 1 0 +align 1 +LABELV $274 +char 1 114 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 120 +char 1 0 +align 1 +LABELV $271 +char 1 94 +char 1 49 +char 1 80 +char 1 101 +char 1 114 +char 1 115 +char 1 111 +char 1 110 +char 1 97 +char 1 108 +char 1 105 +char 1 116 +char 1 121 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 99 +char 1 111 +char 1 110 +char 1 116 +char 1 97 +char 1 105 +char 1 110 +char 1 115 +char 1 32 +char 1 110 +char 1 111 +char 1 32 +char 1 71 +char 1 101 +char 1 110 +char 1 101 +char 1 114 +char 1 97 +char 1 108 +char 1 66 +char 1 111 +char 1 116 +char 1 73 +char 1 110 +char 1 102 +char 1 111 +char 1 32 +char 1 103 +char 1 114 +char 1 111 +char 1 117 +char 1 112 +char 1 10 +char 1 0 +align 1 +LABELV $270 +char 1 71 +char 1 101 +char 1 110 +char 1 101 +char 1 114 +char 1 97 +char 1 108 +char 1 66 +char 1 111 +char 1 116 +char 1 73 +char 1 110 +char 1 102 +char 1 111 +char 1 0 +align 1 +LABELV $264 +char 1 94 +char 1 49 +char 1 80 +char 1 101 +char 1 114 +char 1 115 +char 1 111 +char 1 110 +char 1 97 +char 1 108 +char 1 105 +char 1 116 +char 1 121 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 115 +char 1 32 +char 1 109 +char 1 97 +char 1 120 +char 1 105 +char 1 109 +char 1 117 +char 1 109 +char 1 32 +char 1 108 +char 1 101 +char 1 110 +char 1 103 +char 1 116 +char 1 104 +char 1 10 +char 1 0 +align 1 +LABELV $261 +char 1 94 +char 1 49 +char 1 69 +char 1 114 +char 1 114 +char 1 111 +char 1 114 +char 1 58 +char 1 32 +char 1 83 +char 1 112 +char 1 101 +char 1 99 +char 1 105 +char 1 102 +char 1 105 +char 1 101 +char 1 100 +char 1 32 +char 1 112 +char 1 101 +char 1 114 +char 1 115 +char 1 111 +char 1 110 +char 1 97 +char 1 108 +char 1 105 +char 1 116 +char 1 121 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 102 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $250 +char 1 94 +char 1 49 +char 1 69 +char 1 114 +char 1 114 +char 1 111 +char 1 114 +char 1 58 +char 1 32 +char 1 80 +char 1 101 +char 1 114 +char 1 115 +char 1 111 +char 1 110 +char 1 97 +char 1 108 +char 1 105 +char 1 116 +char 1 121 +char 1 32 +char 1 99 +char 1 104 +char 1 97 +char 1 116 +char 1 32 +char 1 115 +char 1 101 +char 1 99 +char 1 116 +char 1 105 +char 1 111 +char 1 110 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 115 +char 1 32 +char 1 109 +char 1 97 +char 1 120 +char 1 32 +char 1 115 +char 1 105 +char 1 122 +char 1 101 +char 1 10 +char 1 0 +align 1 +LABELV $245 +char 1 66 +char 1 69 +char 1 71 +char 1 73 +char 1 78 +char 1 95 +char 1 67 +char 1 72 +char 1 65 +char 1 84 +char 1 95 +char 1 71 +char 1 82 +char 1 79 +char 1 85 +char 1 80 +char 1 83 +char 1 0 +align 1 +LABELV $215 +char 1 71 +char 1 101 +char 1 110 +char 1 101 +char 1 114 +char 1 97 +char 1 108 +char 1 71 +char 1 114 +char 1 101 +char 1 101 +char 1 116 +char 1 105 +char 1 110 +char 1 103 +char 1 115 +char 1 0 +align 1 +LABELV $162 +char 1 115 +char 1 112 +char 1 95 +char 1 108 +char 1 97 +char 1 110 +char 1 103 +char 1 117 +char 1 97 +char 1 103 +char 1 101 +char 1 0 diff --git a/CODE-mp/game/vm/ai_wpnav.asm b/CODE-mp/game/vm/ai_wpnav.asm new file mode 100644 index 0000000..d93392e --- /dev/null +++ b/CODE-mp/game/vm/ai_wpnav.asm @@ -0,0 +1,20600 @@ +data +export gWPRenderTime +align 4 +LABELV gWPRenderTime +byte 4 0 +export gDeactivated +align 4 +LABELV gDeactivated +byte 4 0 +export gBotEdit +align 4 +LABELV gBotEdit +byte 4 0 +export gWPRenderedFrame +align 4 +LABELV gWPRenderedFrame +byte 4 0 +export gWPNum +align 4 +LABELV gWPNum +byte 4 0 +export gLastPrintedIndex +align 4 +LABELV gLastPrintedIndex +byte 4 -1 +export gLevelFlags +align 4 +LABELV gLevelFlags +byte 4 0 +export GetFlagStr +code +proc GetFlagStr 12 8 +file "../ai_wpnav.c" +line 20 +;1:#include "g_local.h" +;2:#include "q_shared.h" +;3:#include "botlib.h" +;4:#include "ai_main.h" +;5: +;6:float gWPRenderTime = 0; +;7:float gDeactivated = 0; +;8:float gBotEdit = 0; +;9:int gWPRenderedFrame = 0; +;10:wpobject_t *gWPArray[MAX_WPARRAY_SIZE]; +;11:int gWPNum = 0; +;12:int gLastPrintedIndex = -1; +;13: +;14:nodeobject_t nodetable[MAX_NODETABLE_SIZE]; +;15:int nodenum; //so we can connect broken trails +;16: +;17:int gLevelFlags = 0; +;18: +;19:char *GetFlagStr( int flags ) +;20:{ +line 24 +;21: char *flagstr; +;22: int i; +;23: +;24: flagstr = (char *)B_TempAlloc(128); +CNSTI4 128 +ARGI4 +ADDRLP4 8 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 25 +;25: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 27 +;26: +;27: if (!flags) +ADDRFP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $82 +line 28 +;28: { +line 29 +;29: strcpy(flagstr, "none\0"); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $84 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 30 +;30: goto fend; +ADDRGP4 $85 +JUMPV +LABELV $82 +line 33 +;31: } +;32: +;33: if (flags & WPFLAG_JUMP) +ADDRFP4 0 +INDIRI4 +CNSTI4 16 +BANDI4 +CNSTI4 0 +EQI4 $86 +line 34 +;34: { +line 35 +;35: flagstr[i] = 'j'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 106 +ASGNI1 +line 36 +;36: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 37 +;37: } +LABELV $86 +line 39 +;38: +;39: if (flags & WPFLAG_DUCK) +ADDRFP4 0 +INDIRI4 +CNSTI4 32 +BANDI4 +CNSTI4 0 +EQI4 $88 +line 40 +;40: { +line 41 +;41: flagstr[i] = 'd'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 100 +ASGNI1 +line 42 +;42: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 43 +;43: } +LABELV $88 +line 45 +;44: +;45: if (flags & WPFLAG_SNIPEORCAMPSTAND) +ADDRFP4 0 +INDIRI4 +CNSTI4 2048 +BANDI4 +CNSTI4 0 +EQI4 $90 +line 46 +;46: { +line 47 +;47: flagstr[i] = 'c'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 99 +ASGNI1 +line 48 +;48: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 49 +;49: } +LABELV $90 +line 51 +;50: +;51: if (flags & WPFLAG_WAITFORFUNC) +ADDRFP4 0 +INDIRI4 +CNSTI4 4096 +BANDI4 +CNSTI4 0 +EQI4 $92 +line 52 +;52: { +line 53 +;53: flagstr[i] = 'f'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 102 +ASGNI1 +line 54 +;54: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 55 +;55: } +LABELV $92 +line 57 +;56: +;57: if (flags & WPFLAG_SNIPEORCAMP) +ADDRFP4 0 +INDIRI4 +CNSTI4 8192 +BANDI4 +CNSTI4 0 +EQI4 $94 +line 58 +;58: { +line 59 +;59: flagstr[i] = 's'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 115 +ASGNI1 +line 60 +;60: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 61 +;61: } +LABELV $94 +line 63 +;62: +;63: if (flags & WPFLAG_ONEWAY_FWD) +ADDRFP4 0 +INDIRI4 +CNSTI4 16384 +BANDI4 +CNSTI4 0 +EQI4 $96 +line 64 +;64: { +line 65 +;65: flagstr[i] = 'x'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 120 +ASGNI1 +line 66 +;66: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 67 +;67: } +LABELV $96 +line 69 +;68: +;69: if (flags & WPFLAG_ONEWAY_BACK) +ADDRFP4 0 +INDIRI4 +CNSTI4 32768 +BANDI4 +CNSTI4 0 +EQI4 $98 +line 70 +;70: { +line 71 +;71: flagstr[i] = 'y'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 121 +ASGNI1 +line 72 +;72: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 73 +;73: } +LABELV $98 +line 75 +;74: +;75: if (flags & WPFLAG_GOALPOINT) +ADDRFP4 0 +INDIRI4 +CNSTI4 65536 +BANDI4 +CNSTI4 0 +EQI4 $100 +line 76 +;76: { +line 77 +;77: flagstr[i] = 'g'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 103 +ASGNI1 +line 78 +;78: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 79 +;79: } +LABELV $100 +line 81 +;80: +;81: if (flags & WPFLAG_NOVIS) +ADDRFP4 0 +INDIRI4 +CNSTI4 1024 +BANDI4 +CNSTI4 0 +EQI4 $102 +line 82 +;82: { +line 83 +;83: flagstr[i] = 'n'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 110 +ASGNI1 +line 84 +;84: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 85 +;85: } +LABELV $102 +line 87 +;86: +;87: if (flags & WPFLAG_NOMOVEFUNC) +ADDRFP4 0 +INDIRI4 +CNSTI4 2097152 +BANDI4 +CNSTI4 0 +EQI4 $104 +line 88 +;88: { +line 89 +;89: flagstr[i] = 'm'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 109 +ASGNI1 +line 90 +;90: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 91 +;91: } +LABELV $104 +line 93 +;92: +;93: if (flags & WPFLAG_RED_FLAG) +ADDRFP4 0 +INDIRI4 +CNSTI4 131072 +BANDI4 +CNSTI4 0 +EQI4 $106 +line 94 +;94: { +line 95 +;95: if (i) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $108 +line 96 +;96: { +line 97 +;97: flagstr[i] = ' '; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 32 +ASGNI1 +line 98 +;98: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 99 +;99: } +LABELV $108 +line 100 +;100: flagstr[i] = 'r'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 114 +ASGNI1 +line 101 +;101: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 102 +;102: flagstr[i] = 'e'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 101 +ASGNI1 +line 103 +;103: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 104 +;104: flagstr[i] = 'd'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 100 +ASGNI1 +line 105 +;105: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 106 +;106: flagstr[i] = ' '; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 32 +ASGNI1 +line 107 +;107: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 108 +;108: flagstr[i] = 'f'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 102 +ASGNI1 +line 109 +;109: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 110 +;110: flagstr[i] = 'l'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 108 +ASGNI1 +line 111 +;111: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 112 +;112: flagstr[i] = 'a'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 97 +ASGNI1 +line 113 +;113: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 114 +;114: flagstr[i] = 'g'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 103 +ASGNI1 +line 115 +;115: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 116 +;116: } +LABELV $106 +line 118 +;117: +;118: if (flags & WPFLAG_BLUE_FLAG) +ADDRFP4 0 +INDIRI4 +CNSTI4 262144 +BANDI4 +CNSTI4 0 +EQI4 $110 +line 119 +;119: { +line 120 +;120: if (i) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $112 +line 121 +;121: { +line 122 +;122: flagstr[i] = ' '; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 32 +ASGNI1 +line 123 +;123: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 124 +;124: } +LABELV $112 +line 125 +;125: flagstr[i] = 'b'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 98 +ASGNI1 +line 126 +;126: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 127 +;127: flagstr[i] = 'l'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 108 +ASGNI1 +line 128 +;128: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 129 +;129: flagstr[i] = 'u'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 117 +ASGNI1 +line 130 +;130: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 131 +;131: flagstr[i] = 'e'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 101 +ASGNI1 +line 132 +;132: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 133 +;133: flagstr[i] = ' '; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 32 +ASGNI1 +line 134 +;134: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 135 +;135: flagstr[i] = 'f'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 102 +ASGNI1 +line 136 +;136: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 137 +;137: flagstr[i] = 'l'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 108 +ASGNI1 +line 138 +;138: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 139 +;139: flagstr[i] = 'a'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 97 +ASGNI1 +line 140 +;140: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 141 +;141: flagstr[i] = 'g'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 103 +ASGNI1 +line 142 +;142: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 143 +;143: } +LABELV $110 +line 145 +;144: +;145: if (flags & WPFLAG_SAGA_IMPERIALOBJ) +ADDRFP4 0 +INDIRI4 +CNSTI4 1048576 +BANDI4 +CNSTI4 0 +EQI4 $114 +line 146 +;146: { +line 147 +;147: if (i) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $116 +line 148 +;148: { +line 149 +;149: flagstr[i] = ' '; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 32 +ASGNI1 +line 150 +;150: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 151 +;151: } +LABELV $116 +line 152 +;152: flagstr[i] = 's'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 115 +ASGNI1 +line 153 +;153: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 154 +;154: flagstr[i] = 'a'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 97 +ASGNI1 +line 155 +;155: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 156 +;156: flagstr[i] = 'g'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 103 +ASGNI1 +line 157 +;157: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 158 +;158: flagstr[i] = 'a'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 97 +ASGNI1 +line 159 +;159: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 160 +;160: flagstr[i] = '_'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 95 +ASGNI1 +line 161 +;161: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 162 +;162: flagstr[i] = 'i'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 105 +ASGNI1 +line 163 +;163: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 164 +;164: flagstr[i] = 'm'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 109 +ASGNI1 +line 165 +;165: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 166 +;166: flagstr[i] = 'p'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 112 +ASGNI1 +line 167 +;167: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 168 +;168: } +LABELV $114 +line 170 +;169: +;170: if (flags & WPFLAG_SAGA_REBELOBJ) +ADDRFP4 0 +INDIRI4 +CNSTI4 524288 +BANDI4 +CNSTI4 0 +EQI4 $118 +line 171 +;171: { +line 172 +;172: if (i) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $120 +line 173 +;173: { +line 174 +;174: flagstr[i] = ' '; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 32 +ASGNI1 +line 175 +;175: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 176 +;176: } +LABELV $120 +line 177 +;177: flagstr[i] = 's'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 115 +ASGNI1 +line 178 +;178: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 179 +;179: flagstr[i] = 'a'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 97 +ASGNI1 +line 180 +;180: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 181 +;181: flagstr[i] = 'g'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 103 +ASGNI1 +line 182 +;182: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 183 +;183: flagstr[i] = 'a'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 97 +ASGNI1 +line 184 +;184: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 185 +;185: flagstr[i] = '_'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 95 +ASGNI1 +line 186 +;186: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 187 +;187: flagstr[i] = 'r'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 114 +ASGNI1 +line 188 +;188: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 189 +;189: flagstr[i] = 'e'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 101 +ASGNI1 +line 190 +;190: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 191 +;191: flagstr[i] = 'b'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 98 +ASGNI1 +line 192 +;192: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 193 +;193: } +LABELV $118 +line 195 +;194: +;195: flagstr[i] = '\0'; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 197 +;196: +;197: if (i == 0) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $122 +line 198 +;198: { +line 199 +;199: strcpy(flagstr, "unknown\0"); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $124 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 200 +;200: } +LABELV $122 +LABELV $85 +line 203 +;201: +;202:fend: +;203: return flagstr; +ADDRLP4 4 +INDIRP4 +RETP4 +LABELV $81 +endproc GetFlagStr 12 8 +export G_TestLine +proc G_TestLine 12 8 +line 207 +;204:} +;205: +;206:void G_TestLine(vec3_t start, vec3_t end, int color, int time) +;207:{ +line 210 +;208: gentity_t *te; +;209: +;210: te = G_TempEntity( start, EV_TESTLINE ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 99 +ARGI4 +ADDRLP4 4 +ADDRGP4 G_TempEntity +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 211 +;211: VectorCopy(start, te->s.origin); +ADDRLP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 212 +;212: VectorCopy(end, te->s.origin2); +ADDRLP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +ADDRFP4 4 +INDIRP4 +INDIRB +ASGNB 12 +line 213 +;213: te->s.time2 = time; +ADDRLP4 0 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRFP4 12 +INDIRI4 +ASGNI4 +line 214 +;214: te->s.weapon = color; +ADDRLP4 0 +INDIRP4 +CNSTI4 276 +ADDP4 +ADDRFP4 8 +INDIRI4 +ASGNI4 +line 215 +;215: te->r.svFlags |= SVF_BROADCAST; +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 32 +BORI4 +ASGNI4 +line 216 +;216:} +LABELV $125 +endproc G_TestLine 12 8 +export BotWaypointRender +proc BotWaypointRender 88 32 +line 219 +;217: +;218:void BotWaypointRender(void) +;219:{ +line 231 +;220: int i, n; +;221: int inc_checker; +;222: int bestindex; +;223: int gotbestindex; +;224: float bestdist; +;225: float checkdist; +;226: gentity_t *plum; +;227: gentity_t *viewent; +;228: char *flagstr; +;229: vec3_t a; +;230: +;231: if (!gBotEdit) +ADDRGP4 gBotEdit +INDIRF4 +CNSTF4 0 +NEF4 $127 +line 232 +;232: { +line 233 +;233: return; +ADDRGP4 $126 +JUMPV +LABELV $127 +line 236 +;234: } +;235: +;236: bestindex = 0; +ADDRLP4 36 +CNSTI4 0 +ASGNI4 +line 238 +;237: +;238: if (gWPRenderTime > level.time) +ADDRGP4 gWPRenderTime +INDIRF4 +ADDRGP4 level+32 +INDIRI4 +CVIF4 4 +LEF4 $129 +line 239 +;239: { +line 240 +;240: goto checkprint; +ADDRGP4 $132 +JUMPV +LABELV $129 +line 243 +;241: } +;242: +;243: gWPRenderTime = level.time + 100; +ADDRGP4 gWPRenderTime +ADDRGP4 level+32 +INDIRI4 +CNSTI4 100 +ADDI4 +CVIF4 4 +ASGNF4 +line 245 +;244: +;245: i = gWPRenderedFrame; +ADDRLP4 0 +ADDRGP4 gWPRenderedFrame +INDIRI4 +ASGNI4 +line 246 +;246: inc_checker = gWPRenderedFrame; +ADDRLP4 32 +ADDRGP4 gWPRenderedFrame +INDIRI4 +ASGNI4 +ADDRGP4 $135 +JUMPV +LABELV $134 +line 249 +;247: +;248: while (i < gWPNum) +;249: { +line 250 +;250: if (gWPArray[i] && gWPArray[i]->inuse) +ADDRLP4 52 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $137 +ADDRLP4 52 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $137 +line 251 +;251: { +line 252 +;252: plum = G_TempEntity( gWPArray[i]->origin, EV_SCOREPLUM ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 86 +ARGI4 +ADDRLP4 56 +ADDRGP4 G_TempEntity +CALLP4 +ASGNP4 +ADDRLP4 24 +ADDRLP4 56 +INDIRP4 +ASGNP4 +line 253 +;253: plum->r.svFlags |= SVF_BROADCAST; +ADDRLP4 60 +ADDRLP4 24 +INDIRP4 +CNSTI4 304 +ADDP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +ADDRLP4 60 +INDIRP4 +INDIRI4 +CNSTI4 32 +BORI4 +ASGNI4 +line 254 +;254: plum->s.time = i; +ADDRLP4 24 +INDIRP4 +CNSTI4 84 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 256 +;255: +;256: n = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $140 +JUMPV +LABELV $139 +line 259 +;257: +;258: while (n < gWPArray[i]->neighbornum) +;259: { +line 260 +;260: if (gWPArray[i]->neighbors[n].forceJumpTo && gWPArray[gWPArray[i]->neighbors[n].num]) +ADDRLP4 64 +CNSTI4 2 +ASGNI4 +ADDRLP4 68 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 72 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 64 +INDIRI4 +LSHI4 +ADDRLP4 68 +INDIRP4 +ADDP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $142 +ADDRLP4 72 +INDIRP4 +INDIRI4 +ADDRLP4 64 +INDIRI4 +LSHI4 +ADDRLP4 68 +INDIRP4 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $142 +line 261 +;261: { +line 262 +;262: G_TestLine(gWPArray[i]->origin, gWPArray[gWPArray[i]->neighbors[n].num]->origin, 0x0000ff, 5000); +ADDRLP4 76 +CNSTI4 2 +ASGNI4 +ADDRLP4 80 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 84 +ADDRLP4 0 +INDIRI4 +ADDRLP4 76 +INDIRI4 +LSHI4 +ADDRLP4 80 +INDIRP4 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 84 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 84 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +INDIRI4 +ADDRLP4 76 +INDIRI4 +LSHI4 +ADDRLP4 80 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 255 +ARGI4 +CNSTI4 5000 +ARGI4 +ADDRGP4 G_TestLine +CALLV +pop +line 263 +;263: } +LABELV $142 +line 264 +;264: n++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 265 +;265: } +LABELV $140 +line 258 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +LTI4 $139 +line 267 +;266: +;267: gWPRenderedFrame++; +ADDRLP4 64 +ADDRGP4 gWPRenderedFrame +ASGNP4 +ADDRLP4 64 +INDIRP4 +ADDRLP4 64 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 268 +;268: } +ADDRGP4 $138 +JUMPV +LABELV $137 +line 270 +;269: else +;270: { +line 271 +;271: gWPRenderedFrame = 0; +ADDRGP4 gWPRenderedFrame +CNSTI4 0 +ASGNI4 +line 272 +;272: break; +ADDRGP4 $136 +JUMPV +LABELV $138 +line 275 +;273: } +;274: +;275: if ((i - inc_checker) > 4) +ADDRLP4 0 +INDIRI4 +ADDRLP4 32 +INDIRI4 +SUBI4 +CNSTI4 4 +LEI4 $144 +line 276 +;276: { +line 277 +;277: break; //don't render too many at once +ADDRGP4 $136 +JUMPV +LABELV $144 +line 279 +;278: } +;279: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 280 +;280: } +LABELV $135 +line 248 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $134 +LABELV $136 +line 282 +;281: +;282: if (i >= gWPNum) +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $146 +line 283 +;283: { +line 284 +;284: gWPRenderTime = level.time + 1500; //wait a bit after we finish doing the whole trail +ADDRGP4 gWPRenderTime +ADDRGP4 level+32 +INDIRI4 +CNSTI4 1500 +ADDI4 +CVIF4 4 +ASGNF4 +line 285 +;285: gWPRenderedFrame = 0; +ADDRGP4 gWPRenderedFrame +CNSTI4 0 +ASGNI4 +line 286 +;286: } +LABELV $146 +LABELV $132 +line 290 +;287: +;288:checkprint: +;289: +;290: if (!bot_wp_info.value) +ADDRGP4 bot_wp_info+8 +INDIRF4 +CNSTF4 0 +NEF4 $149 +line 291 +;291: { +line 292 +;292: return; +ADDRGP4 $126 +JUMPV +LABELV $149 +line 295 +;293: } +;294: +;295: viewent = &g_entities[0]; //only show info to the first client +ADDRLP4 20 +ADDRGP4 g_entities +ASGNP4 +line 297 +;296: +;297: if (!viewent || !viewent->client) +ADDRLP4 56 +CNSTU4 0 +ASGNU4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +ADDRLP4 56 +INDIRU4 +EQU4 $154 +ADDRLP4 20 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 56 +INDIRU4 +NEU4 $152 +LABELV $154 +line 298 +;298: { //client isn't in the game yet? +line 299 +;299: return; +ADDRGP4 $126 +JUMPV +LABELV $152 +line 302 +;300: } +;301: +;302: bestdist = 256; //max distance for showing point info +ADDRLP4 40 +CNSTF4 1132462080 +ASGNF4 +line 303 +;303: gotbestindex = 0; +ADDRLP4 44 +CNSTI4 0 +ASGNI4 +line 305 +;304: +;305: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $156 +JUMPV +LABELV $155 +line 308 +;306: +;307: while (i < gWPNum) +;308: { +line 309 +;309: if (gWPArray[i] && gWPArray[i]->inuse) +ADDRLP4 60 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $158 +ADDRLP4 60 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $158 +line 310 +;310: { +line 311 +;311: VectorSubtract(viewent->client->ps.origin, gWPArray[i]->origin, a); +ADDRLP4 64 +ADDRLP4 20 +INDIRP4 +CNSTI4 408 +ADDP4 +ASGNP4 +ADDRLP4 68 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 64 +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 68 +INDIRP4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 8+4 +ADDRLP4 64 +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 68 +INDIRP4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 8+8 +ADDRLP4 20 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 313 +;312: +;313: checkdist = VectorLength(a); +ADDRLP4 8 +ARGP4 +ADDRLP4 72 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 28 +ADDRLP4 72 +INDIRF4 +ASGNF4 +line 315 +;314: +;315: if (checkdist < bestdist) +ADDRLP4 28 +INDIRF4 +ADDRLP4 40 +INDIRF4 +GEF4 $162 +line 316 +;316: { +line 317 +;317: bestdist = checkdist; +ADDRLP4 40 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 318 +;318: bestindex = i; +ADDRLP4 36 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 319 +;319: gotbestindex = 1; +ADDRLP4 44 +CNSTI4 1 +ASGNI4 +line 320 +;320: } +LABELV $162 +line 321 +;321: } +LABELV $158 +line 322 +;322: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 323 +;323: } +LABELV $156 +line 307 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $155 +line 325 +;324: +;325: if (gotbestindex && bestindex != gLastPrintedIndex) +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +EQI4 $164 +ADDRLP4 36 +INDIRI4 +ADDRGP4 gLastPrintedIndex +INDIRI4 +EQI4 $164 +line 326 +;326: { +line 327 +;327: flagstr = GetFlagStr(gWPArray[bestindex]->flags); +ADDRLP4 36 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 60 +ADDRGP4 GetFlagStr +CALLP4 +ASGNP4 +ADDRLP4 48 +ADDRLP4 60 +INDIRP4 +ASGNP4 +line 328 +;328: gLastPrintedIndex = bestindex; +ADDRGP4 gLastPrintedIndex +ADDRLP4 36 +INDIRI4 +ASGNI4 +line 329 +;329: G_Printf(S_COLOR_YELLOW "Waypoint %i\nFlags - %i (%s) (w%f)\nOrigin - (%i %i %i)\n", (int)(gWPArray[bestindex]->index), (int)(gWPArray[bestindex]->flags), flagstr, gWPArray[bestindex]->weight, (int)(gWPArray[bestindex]->origin[0]), (int)(gWPArray[bestindex]->origin[1]), (int)(gWPArray[bestindex]->origin[2])); +ADDRGP4 $166 +ARGP4 +ADDRLP4 64 +ADDRLP4 36 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 64 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 48 +INDIRP4 +ARGP4 +ADDRLP4 64 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 64 +INDIRP4 +INDIRF4 +CVFI4 4 +ARGI4 +ADDRLP4 64 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +CVFI4 4 +ARGI4 +ADDRLP4 64 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +CVFI4 4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 331 +;330: //GetFlagStr allocates 128 bytes for this, if it's changed then obviously this must be as well +;331: B_TempFree(128); //flagstr +CNSTI4 128 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 333 +;332: +;333: plum = G_TempEntity( gWPArray[bestindex]->origin, EV_SCOREPLUM ); +ADDRLP4 36 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 86 +ARGI4 +ADDRLP4 68 +ADDRGP4 G_TempEntity +CALLP4 +ASGNP4 +ADDRLP4 24 +ADDRLP4 68 +INDIRP4 +ASGNP4 +line 334 +;334: plum->r.svFlags |= SVF_BROADCAST; +ADDRLP4 72 +ADDRLP4 24 +INDIRP4 +CNSTI4 304 +ADDP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +ADDRLP4 72 +INDIRP4 +INDIRI4 +CNSTI4 32 +BORI4 +ASGNI4 +line 335 +;335: plum->s.time = bestindex; //render it once +ADDRLP4 24 +INDIRP4 +CNSTI4 84 +ADDP4 +ADDRLP4 36 +INDIRI4 +ASGNI4 +line 336 +;336: } +ADDRGP4 $165 +JUMPV +LABELV $164 +line 337 +;337: else if (!gotbestindex) +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +NEI4 $167 +line 338 +;338: { +line 339 +;339: gLastPrintedIndex = -1; +ADDRGP4 gLastPrintedIndex +CNSTI4 -1 +ASGNI4 +line 340 +;340: } +LABELV $167 +LABELV $165 +line 341 +;341:} +LABELV $126 +endproc BotWaypointRender 88 32 +export TransferWPData +proc TransferWPData 84 4 +line 344 +;342: +;343:void TransferWPData(int from, int to) +;344:{ +line 345 +;345: if (!gWPArray[to]) +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $170 +line 346 +;346: { +line 347 +;347: gWPArray[to] = (wpobject_t *)B_Alloc(sizeof(wpobject_t)); +CNSTI4 300 +ARGI4 +ADDRLP4 0 +ADDRGP4 B_Alloc +CALLP4 +ASGNP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 348 +;348: } +LABELV $170 +line 350 +;349: +;350: if (!gWPArray[to]) +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $172 +line 351 +;351: { +line 352 +;352: G_Printf(S_COLOR_RED "FATAL ERROR: Could not allocated memory for waypoint\n"); +ADDRGP4 $174 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 353 +;353: } +LABELV $172 +line 355 +;354: +;355: gWPArray[to]->flags = gWPArray[from]->flags; +ADDRLP4 0 +CNSTI4 2 +ASGNI4 +ADDRLP4 4 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 8 +CNSTI4 28 +ASGNI4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LSHI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LSHI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 356 +;356: gWPArray[to]->weight = gWPArray[from]->weight; +ADDRLP4 12 +CNSTI4 2 +ASGNI4 +ADDRLP4 16 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 20 +CNSTI4 20 +ASGNI4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +LSHI4 +ADDRLP4 16 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 12 +INDIRI4 +LSHI4 +ADDRLP4 16 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 357 +;357: gWPArray[to]->associated_entity = gWPArray[from]->associated_entity; +ADDRLP4 24 +CNSTI4 2 +ASGNI4 +ADDRLP4 28 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 32 +CNSTI4 32 +ASGNI4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 24 +INDIRI4 +LSHI4 +ADDRLP4 28 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 24 +INDIRI4 +LSHI4 +ADDRLP4 28 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 358 +;358: gWPArray[to]->disttonext = gWPArray[from]->disttonext; +ADDRLP4 36 +CNSTI4 2 +ASGNI4 +ADDRLP4 40 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 44 +CNSTI4 24 +ASGNI4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 36 +INDIRI4 +LSHI4 +ADDRLP4 40 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 36 +INDIRI4 +LSHI4 +ADDRLP4 40 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 359 +;359: gWPArray[to]->forceJumpTo = gWPArray[from]->forceJumpTo; +ADDRLP4 48 +CNSTI4 2 +ASGNI4 +ADDRLP4 52 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 56 +CNSTI4 36 +ASGNI4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 48 +INDIRI4 +LSHI4 +ADDRLP4 52 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 48 +INDIRI4 +LSHI4 +ADDRLP4 52 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 360 +;360: gWPArray[to]->index = to; +ADDRLP4 60 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 60 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRLP4 60 +INDIRI4 +ASGNI4 +line 361 +;361: gWPArray[to]->inuse = gWPArray[from]->inuse; +ADDRLP4 64 +CNSTI4 2 +ASGNI4 +ADDRLP4 68 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 72 +CNSTI4 12 +ASGNI4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 64 +INDIRI4 +LSHI4 +ADDRLP4 68 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 72 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 64 +INDIRI4 +LSHI4 +ADDRLP4 68 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 72 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 362 +;362: VectorCopy(gWPArray[from]->origin, gWPArray[to]->origin); +ADDRLP4 76 +CNSTI4 2 +ASGNI4 +ADDRLP4 80 +ADDRGP4 gWPArray +ASGNP4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 76 +INDIRI4 +LSHI4 +ADDRLP4 80 +INDIRP4 +ADDP4 +INDIRP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 76 +INDIRI4 +LSHI4 +ADDRLP4 80 +INDIRP4 +ADDP4 +INDIRP4 +INDIRB +ASGNB 12 +line 363 +;363:} +LABELV $169 +endproc TransferWPData 84 4 +export CreateNewWP +proc CreateNewWP 8 8 +line 366 +;364: +;365:void CreateNewWP(vec3_t origin, int flags) +;366:{ +line 367 +;367: if (gWPNum >= MAX_WPARRAY_SIZE) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 4096 +LTI4 $176 +line 368 +;368: { +line 369 +;369: G_Printf(S_COLOR_YELLOW "Warning: Waypoint limit hit (%i)\n", MAX_WPARRAY_SIZE); +ADDRGP4 $178 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 370 +;370: return; +ADDRGP4 $175 +JUMPV +LABELV $176 +line 373 +;371: } +;372: +;373: if (!gWPArray[gWPNum]) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $179 +line 374 +;374: { +line 375 +;375: gWPArray[gWPNum] = (wpobject_t *)B_Alloc(sizeof(wpobject_t)); +CNSTI4 300 +ARGI4 +ADDRLP4 0 +ADDRGP4 B_Alloc +CALLP4 +ASGNP4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 376 +;376: } +LABELV $179 +line 378 +;377: +;378: if (!gWPArray[gWPNum]) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $181 +line 379 +;379: { +line 380 +;380: G_Printf(S_COLOR_RED "ERROR: Could not allocated memory for waypoint\n"); +ADDRGP4 $183 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 381 +;381: } +LABELV $181 +line 383 +;382: +;383: gWPArray[gWPNum]->flags = flags; +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 384 +;384: gWPArray[gWPNum]->weight = 0; //calculated elsewhere +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +CNSTF4 0 +ASGNF4 +line 385 +;385: gWPArray[gWPNum]->associated_entity = ENTITYNUM_NONE; //set elsewhere +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 32 +ADDP4 +CNSTI4 1023 +ASGNI4 +line 386 +;386: gWPArray[gWPNum]->forceJumpTo = 0; +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTI4 0 +ASGNI4 +line 387 +;387: gWPArray[gWPNum]->disttonext = 0; //calculated elsewhere +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 24 +ADDP4 +CNSTF4 0 +ASGNF4 +line 388 +;388: gWPArray[gWPNum]->index = gWPNum; +ADDRLP4 0 +ADDRGP4 gWPNum +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 389 +;389: gWPArray[gWPNum]->inuse = 1; +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 390 +;390: VectorCopy(origin, gWPArray[gWPNum]->origin); +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 391 +;391: gWPNum++; +ADDRLP4 4 +ADDRGP4 gWPNum +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 392 +;392:} +LABELV $175 +endproc CreateNewWP 8 8 +export CreateNewWP_FromObject +proc CreateNewWP_FromObject 52 4 +line 395 +;393: +;394:void CreateNewWP_FromObject(wpobject_t *wp) +;395:{ +line 398 +;396: int i; +;397: +;398: if (gWPNum >= MAX_WPARRAY_SIZE) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 4096 +LTI4 $185 +line 399 +;399: { +line 400 +;400: return; +ADDRGP4 $184 +JUMPV +LABELV $185 +line 403 +;401: } +;402: +;403: if (!gWPArray[gWPNum]) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $187 +line 404 +;404: { +line 405 +;405: gWPArray[gWPNum] = (wpobject_t *)B_Alloc(sizeof(wpobject_t)); +CNSTI4 300 +ARGI4 +ADDRLP4 4 +ADDRGP4 B_Alloc +CALLP4 +ASGNP4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 406 +;406: } +LABELV $187 +line 408 +;407: +;408: if (!gWPArray[gWPNum]) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $189 +line 409 +;409: { +line 410 +;410: G_Printf(S_COLOR_RED "ERROR: Could not allocated memory for waypoint\n"); +ADDRGP4 $183 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 411 +;411: } +LABELV $189 +line 413 +;412: +;413: gWPArray[gWPNum]->flags = wp->flags; +ADDRLP4 4 +CNSTI4 28 +ASGNI4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 414 +;414: gWPArray[gWPNum]->weight = wp->weight; +ADDRLP4 8 +CNSTI4 20 +ASGNI4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 415 +;415: gWPArray[gWPNum]->associated_entity = wp->associated_entity; +ADDRLP4 12 +CNSTI4 32 +ASGNI4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 416 +;416: gWPArray[gWPNum]->disttonext = wp->disttonext; +ADDRLP4 16 +CNSTI4 24 +ASGNI4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 417 +;417: gWPArray[gWPNum]->forceJumpTo = wp->forceJumpTo; +ADDRLP4 20 +CNSTI4 36 +ASGNI4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 418 +;418: gWPArray[gWPNum]->index = gWPNum; +ADDRLP4 24 +ADDRGP4 gWPNum +INDIRI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRLP4 24 +INDIRI4 +ASGNI4 +line 419 +;419: gWPArray[gWPNum]->inuse = 1; +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 420 +;420: VectorCopy(wp->origin, gWPArray[gWPNum]->origin); +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 421 +;421: gWPArray[gWPNum]->neighbornum = wp->neighbornum; +ADDRLP4 28 +CNSTI4 40 +ASGNI4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 423 +;422: +;423: i = wp->neighbornum; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ASGNI4 +ADDRGP4 $192 +JUMPV +LABELV $191 +line 426 +;424: +;425: while (i >= 0) +;426: { +line 427 +;427: gWPArray[gWPNum]->neighbors[i].num = wp->neighbors[i].num; +ADDRLP4 32 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ASGNI4 +ADDRLP4 36 +CNSTI4 44 +ASGNI4 +ADDRLP4 32 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +ADDP4 +ADDRLP4 32 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 428 +;428: gWPArray[gWPNum]->neighbors[i].forceJumpTo = wp->neighbors[i].forceJumpTo; +ADDRLP4 40 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ASGNI4 +ADDRLP4 44 +CNSTI4 44 +ASGNI4 +ADDRLP4 48 +CNSTI4 4 +ASGNI4 +ADDRLP4 40 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +ADDP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +ADDRLP4 40 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +ADDP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 430 +;429: +;430: i--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 431 +;431: } +LABELV $192 +line 425 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $191 +line 433 +;432: +;433: if (gWPArray[gWPNum]->flags & WPFLAG_RED_FLAG) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +CNSTI4 131072 +BANDI4 +CNSTI4 0 +EQI4 $194 +line 434 +;434: { +line 435 +;435: flagRed = gWPArray[gWPNum]; +ADDRGP4 flagRed +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +line 436 +;436: oFlagRed = flagRed; +ADDRGP4 oFlagRed +ADDRGP4 flagRed +INDIRP4 +ASGNP4 +line 437 +;437: } +ADDRGP4 $195 +JUMPV +LABELV $194 +line 438 +;438: else if (gWPArray[gWPNum]->flags & WPFLAG_BLUE_FLAG) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +CNSTI4 262144 +BANDI4 +CNSTI4 0 +EQI4 $196 +line 439 +;439: { +line 440 +;440: flagBlue = gWPArray[gWPNum]; +ADDRGP4 flagBlue +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +line 441 +;441: oFlagBlue = flagBlue; +ADDRGP4 oFlagBlue +ADDRGP4 flagBlue +INDIRP4 +ASGNP4 +line 442 +;442: } +LABELV $196 +LABELV $195 +line 444 +;443: +;444: gWPNum++; +ADDRLP4 32 +ADDRGP4 gWPNum +ASGNP4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 32 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 445 +;445:} +LABELV $184 +endproc CreateNewWP_FromObject 52 4 +export RemoveWP +proc RemoveWP 8 12 +line 448 +;446: +;447:void RemoveWP(void) +;448:{ +line 449 +;449: if (gWPNum <= 0) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 0 +GTI4 $199 +line 450 +;450: { +line 451 +;451: return; +ADDRGP4 $198 +JUMPV +LABELV $199 +line 454 +;452: } +;453: +;454: gWPNum--; +ADDRLP4 0 +ADDRGP4 gWPNum +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 456 +;455: +;456: if (!gWPArray[gWPNum] || !gWPArray[gWPNum]->inuse) +ADDRLP4 4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $203 +ADDRLP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $201 +LABELV $203 +line 457 +;457: { +line 458 +;458: return; +ADDRGP4 $198 +JUMPV +LABELV $201 +line 462 +;459: } +;460: +;461: //B_Free((wpobject_t *)gWPArray[gWPNum]); +;462: if (gWPArray[gWPNum]) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $204 +line 463 +;463: { +line 464 +;464: memset( gWPArray[gWPNum], 0, sizeof(gWPArray[gWPNum]) ); +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 4 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 465 +;465: } +LABELV $204 +line 469 +;466: +;467: //gWPArray[gWPNum] = NULL; +;468: +;469: if (gWPArray[gWPNum]) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $206 +line 470 +;470: { +line 471 +;471: gWPArray[gWPNum]->inuse = 0; +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 0 +ASGNI4 +line 472 +;472: } +LABELV $206 +line 473 +;473:} +LABELV $198 +endproc RemoveWP 8 12 +export RemoveWP_InTrail +proc RemoveWP_InTrail 28 12 +line 476 +;474: +;475:void RemoveWP_InTrail(int afterindex) +;476:{ +line 482 +;477: int foundindex; +;478: int foundanindex; +;479: int didchange; +;480: int i; +;481: +;482: foundindex = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 483 +;483: foundanindex = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 484 +;484: didchange = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 485 +;485: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 487 +;486: +;487: if (afterindex < 0 || afterindex >= gWPNum) +ADDRLP4 16 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +LTI4 $211 +ADDRLP4 16 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $214 +LABELV $211 +line 488 +;488: { +line 489 +;489: G_Printf(S_COLOR_YELLOW "Waypoint number %i does not exist\n", afterindex); +ADDRGP4 $212 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 490 +;490: return; +ADDRGP4 $208 +JUMPV +LABELV $213 +line 494 +;491: } +;492: +;493: while (i < gWPNum) +;494: { +line 495 +;495: if (gWPArray[i] && gWPArray[i]->inuse && gWPArray[i]->index == afterindex) +ADDRLP4 20 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $216 +ADDRLP4 20 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $216 +ADDRLP4 20 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $216 +line 496 +;496: { +line 497 +;497: foundindex = i; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 498 +;498: foundanindex = 1; +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +line 499 +;499: break; +ADDRGP4 $215 +JUMPV +LABELV $216 +line 502 +;500: } +;501: +;502: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 503 +;503: } +LABELV $214 +line 493 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $213 +LABELV $215 +line 505 +;504: +;505: if (!foundanindex) +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $218 +line 506 +;506: { +line 507 +;507: G_Printf(S_COLOR_YELLOW "Waypoint index %i should exist, but does not (?)\n", afterindex); +ADDRGP4 $220 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 508 +;508: return; +ADDRGP4 $208 +JUMPV +LABELV $218 +line 511 +;509: } +;510: +;511: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $222 +JUMPV +LABELV $221 +line 514 +;512: +;513: while (i <= gWPNum) +;514: { +line 515 +;515: if (gWPArray[i] && gWPArray[i]->index == foundindex) +ADDRLP4 20 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $224 +ADDRLP4 20 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $224 +line 516 +;516: { +line 520 +;517: //B_Free(gWPArray[i]); +;518: +;519: //Keep reusing the memory +;520: memset( gWPArray[i], 0, sizeof(gWPArray[i]) ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 4 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 523 +;521: +;522: //gWPArray[i] = NULL; +;523: gWPArray[i]->inuse = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 0 +ASGNI4 +line 524 +;524: didchange = 1; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 525 +;525: } +ADDRGP4 $225 +JUMPV +LABELV $224 +line 526 +;526: else if (gWPArray[i] && didchange) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $226 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $226 +line 527 +;527: { +line 528 +;528: TransferWPData(i, i-1); +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ARGI4 +ADDRGP4 TransferWPData +CALLV +pop +line 532 +;529: //B_Free(gWPArray[i]); +;530: +;531: //Keep reusing the memory +;532: memset( gWPArray[i], 0, sizeof(gWPArray[i]) ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 4 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 535 +;533: +;534: //gWPArray[i] = NULL; +;535: gWPArray[i]->inuse = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 0 +ASGNI4 +line 536 +;536: } +LABELV $226 +LABELV $225 +line 538 +;537: +;538: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 539 +;539: } +LABELV $222 +line 513 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LEI4 $221 +line 540 +;540: gWPNum--; +ADDRLP4 20 +ADDRGP4 gWPNum +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 20 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 541 +;541:} +LABELV $208 +endproc RemoveWP_InTrail 28 12 +export CreateNewWP_InTrail +proc CreateNewWP_InTrail 32 8 +line 544 +;542: +;543:int CreateNewWP_InTrail(vec3_t origin, int flags, int afterindex) +;544:{ +line 549 +;545: int foundindex; +;546: int foundanindex; +;547: int i; +;548: +;549: foundindex = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 550 +;550: foundanindex = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 551 +;551: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 553 +;552: +;553: if (gWPNum >= MAX_WPARRAY_SIZE) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 4096 +LTI4 $229 +line 554 +;554: { +line 555 +;555: G_Printf(S_COLOR_YELLOW "Warning: Waypoint limit hit (%i)\n", MAX_WPARRAY_SIZE); +ADDRGP4 $178 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 556 +;556: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $228 +JUMPV +LABELV $229 +line 559 +;557: } +;558: +;559: if (afterindex < 0 || afterindex >= gWPNum) +ADDRLP4 12 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +LTI4 $233 +ADDRLP4 12 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $235 +LABELV $233 +line 560 +;560: { +line 561 +;561: G_Printf(S_COLOR_YELLOW "Waypoint number %i does not exist\n", afterindex); +ADDRGP4 $212 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 562 +;562: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $228 +JUMPV +LABELV $234 +line 566 +;563: } +;564: +;565: while (i < gWPNum) +;566: { +line 567 +;567: if (gWPArray[i] && gWPArray[i]->inuse && gWPArray[i]->index == afterindex) +ADDRLP4 16 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $237 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $237 +ADDRLP4 16 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +NEI4 $237 +line 568 +;568: { +line 569 +;569: foundindex = i; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 570 +;570: foundanindex = 1; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 571 +;571: break; +ADDRGP4 $236 +JUMPV +LABELV $237 +line 574 +;572: } +;573: +;574: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 575 +;575: } +LABELV $235 +line 565 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $234 +LABELV $236 +line 577 +;576: +;577: if (!foundanindex) +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $239 +line 578 +;578: { +line 579 +;579: G_Printf(S_COLOR_YELLOW "Waypoint index %i should exist, but does not (?)\n", afterindex); +ADDRGP4 $220 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 580 +;580: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $228 +JUMPV +LABELV $239 +line 583 +;581: } +;582: +;583: i = gWPNum; +ADDRLP4 0 +ADDRGP4 gWPNum +INDIRI4 +ASGNI4 +ADDRGP4 $242 +JUMPV +LABELV $241 +line 586 +;584: +;585: while (i >= 0) +;586: { +line 587 +;587: if (gWPArray[i] && gWPArray[i]->inuse && gWPArray[i]->index != foundindex) +ADDRLP4 16 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $244 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $244 +ADDRLP4 16 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $244 +line 588 +;588: { +line 589 +;589: TransferWPData(i, i+1); +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRGP4 TransferWPData +CALLV +pop +line 590 +;590: } +ADDRGP4 $245 +JUMPV +LABELV $244 +line 591 +;591: else if (gWPArray[i] && gWPArray[i]->inuse && gWPArray[i]->index == foundindex) +ADDRLP4 20 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $246 +ADDRLP4 20 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $246 +ADDRLP4 20 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $246 +line 592 +;592: { +line 593 +;593: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 595 +;594: +;595: if (!gWPArray[i]) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $248 +line 596 +;596: { +line 597 +;597: gWPArray[i] = (wpobject_t *)B_Alloc(sizeof(wpobject_t)); +CNSTI4 300 +ARGI4 +ADDRLP4 24 +ADDRGP4 B_Alloc +CALLP4 +ASGNP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ADDRLP4 24 +INDIRP4 +ASGNP4 +line 598 +;598: } +LABELV $248 +line 600 +;599: +;600: gWPArray[i]->flags = flags; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 601 +;601: gWPArray[i]->weight = 0; //calculated elsewhere +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +CNSTF4 0 +ASGNF4 +line 602 +;602: gWPArray[i]->associated_entity = ENTITYNUM_NONE; //set elsewhere +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 32 +ADDP4 +CNSTI4 1023 +ASGNI4 +line 603 +;603: gWPArray[i]->disttonext = 0; //calculated elsewhere +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 24 +ADDP4 +CNSTF4 0 +ASGNF4 +line 604 +;604: gWPArray[i]->forceJumpTo = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTI4 0 +ASGNI4 +line 605 +;605: gWPArray[i]->index = i; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 606 +;606: gWPArray[i]->inuse = 1; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 607 +;607: VectorCopy(origin, gWPArray[i]->origin); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 608 +;608: gWPNum++; +ADDRLP4 28 +ADDRGP4 gWPNum +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 609 +;609: break; +ADDRGP4 $243 +JUMPV +LABELV $246 +LABELV $245 +line 612 +;610: } +;611: +;612: i--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 613 +;613: } +LABELV $242 +line 585 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $241 +LABELV $243 +line 615 +;614: +;615: return 1; +CNSTI4 1 +RETI4 +LABELV $228 +endproc CreateNewWP_InTrail 32 8 +export TeleportToWP +proc TeleportToWP 28 8 +line 619 +;616:} +;617: +;618:void TeleportToWP(gentity_t *pl, int afterindex) +;619:{ +line 624 +;620: int foundindex; +;621: int foundanindex; +;622: int i; +;623: +;624: if (!pl || !pl->client) +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +CNSTU4 0 +ASGNU4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +ADDRLP4 16 +INDIRU4 +EQU4 $253 +ADDRLP4 12 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 16 +INDIRU4 +NEU4 $251 +LABELV $253 +line 625 +;625: { +line 626 +;626: return; +ADDRGP4 $250 +JUMPV +LABELV $251 +line 629 +;627: } +;628: +;629: foundindex = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 630 +;630: foundanindex = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 631 +;631: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 633 +;632: +;633: if (afterindex < 0 || afterindex >= gWPNum) +ADDRLP4 20 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +LTI4 $256 +ADDRLP4 20 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $258 +LABELV $256 +line 634 +;634: { +line 635 +;635: G_Printf(S_COLOR_YELLOW "Waypoint number %i does not exist\n", afterindex); +ADDRGP4 $212 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 636 +;636: return; +ADDRGP4 $250 +JUMPV +LABELV $257 +line 640 +;637: } +;638: +;639: while (i < gWPNum) +;640: { +line 641 +;641: if (gWPArray[i] && gWPArray[i]->inuse && gWPArray[i]->index == afterindex) +ADDRLP4 24 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $260 +ADDRLP4 24 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $260 +ADDRLP4 24 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ADDRFP4 4 +INDIRI4 +NEI4 $260 +line 642 +;642: { +line 643 +;643: foundindex = i; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 644 +;644: foundanindex = 1; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 645 +;645: break; +ADDRGP4 $259 +JUMPV +LABELV $260 +line 648 +;646: } +;647: +;648: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 649 +;649: } +LABELV $258 +line 639 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $257 +LABELV $259 +line 651 +;650: +;651: if (!foundanindex) +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $262 +line 652 +;652: { +line 653 +;653: G_Printf(S_COLOR_YELLOW "Waypoint index %i should exist, but does not (?)\n", afterindex); +ADDRGP4 $220 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 654 +;654: return; +ADDRGP4 $250 +JUMPV +LABELV $262 +line 657 +;655: } +;656: +;657: VectorCopy(gWPArray[foundindex]->origin, pl->client->ps.origin); +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +INDIRB +ASGNB 12 +line 659 +;658: +;659: return; +LABELV $250 +endproc TeleportToWP 28 8 +export WPFlagsModify +proc WPFlagsModify 12 8 +line 663 +;660:} +;661: +;662:void WPFlagsModify(int wpnum, int flags) +;663:{ +line 664 +;664: if (wpnum < 0 || wpnum >= gWPNum || !gWPArray[wpnum] || !gWPArray[wpnum]->inuse) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +LTI4 $269 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +GEI4 $269 +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $269 +ADDRLP4 8 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $265 +LABELV $269 +line 665 +;665: { +line 666 +;666: G_Printf(S_COLOR_YELLOW "WPFlagsModify: Waypoint %i does not exist\n", wpnum); +ADDRGP4 $270 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 667 +;667: return; +ADDRGP4 $264 +JUMPV +LABELV $265 +line 670 +;668: } +;669: +;670: gWPArray[wpnum]->flags = flags; +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 671 +;671:} +LABELV $264 +endproc WPFlagsModify 12 8 +export NotWithinRange +proc NotWithinRange 16 0 +line 674 +;672: +;673:int NotWithinRange(int base, int extent) +;674:{ +line 675 +;675: if (extent > base && base+5 >= extent) +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +LEI4 $272 +ADDRLP4 4 +INDIRI4 +CNSTI4 5 +ADDI4 +ADDRLP4 0 +INDIRI4 +LTI4 $272 +line 676 +;676: { +line 677 +;677: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $271 +JUMPV +LABELV $272 +line 680 +;678: } +;679: +;680: if (extent < base && base-5 <= extent) +ADDRLP4 8 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 12 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRI4 +GEI4 $274 +ADDRLP4 12 +INDIRI4 +CNSTI4 5 +SUBI4 +ADDRLP4 8 +INDIRI4 +GTI4 $274 +line 681 +;681: { +line 682 +;682: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $271 +JUMPV +LABELV $274 +line 685 +;683: } +;684: +;685: return 1; +CNSTI4 1 +RETI4 +LABELV $271 +endproc NotWithinRange 16 0 +export NodeHere +proc NodeHere 36 0 +line 689 +;686:} +;687: +;688:int NodeHere(vec3_t spot) +;689:{ +line 692 +;690: int i; +;691: +;692: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $278 +JUMPV +LABELV $277 +line 695 +;693: +;694: while (i < nodenum) +;695: { +line 696 +;696: if ((int)nodetable[i].origin[0] == (int)spot[0] && +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ASGNI4 +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRI4 +ADDRGP4 nodetable +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +NEI4 $280 +ADDRLP4 4 +INDIRI4 +ADDRGP4 nodetable+4 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +CVFI4 4 +NEI4 $280 +line 698 +;697: (int)nodetable[i].origin[1] == (int)spot[1]) +;698: { +line 699 +;699: if ((int)nodetable[i].origin[2] == (int)spot[2] || +ADDRLP4 12 +CNSTI4 5 +ASGNI4 +ADDRLP4 16 +ADDRLP4 0 +INDIRI4 +ADDRLP4 12 +INDIRI4 +LSHI4 +ASGNI4 +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +CVFI4 4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 20 +INDIRI4 +EQI4 $291 +ADDRLP4 16 +INDIRI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 20 +INDIRI4 +GEI4 $292 +ADDRLP4 16 +INDIRI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 12 +INDIRI4 +ADDI4 +ADDRLP4 20 +INDIRI4 +GTI4 $291 +LABELV $292 +ADDRLP4 24 +CNSTI4 5 +ASGNI4 +ADDRLP4 28 +ADDRLP4 0 +INDIRI4 +ADDRLP4 24 +INDIRI4 +LSHI4 +ASGNI4 +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +CVFI4 4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 32 +INDIRI4 +LEI4 $283 +ADDRLP4 28 +INDIRI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 24 +INDIRI4 +SUBI4 +ADDRLP4 32 +INDIRI4 +GEI4 $283 +LABELV $291 +line 702 +;700: ((int)nodetable[i].origin[2] < (int)spot[2] && (int)nodetable[i].origin[2]+5 > (int)spot[2]) || +;701: ((int)nodetable[i].origin[2] > (int)spot[2] && (int)nodetable[i].origin[2]-5 < (int)spot[2])) +;702: { +line 703 +;703: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $276 +JUMPV +LABELV $283 +line 705 +;704: } +;705: } +LABELV $280 +line 706 +;706: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 707 +;707: } +LABELV $278 +line 694 +ADDRLP4 0 +INDIRI4 +ADDRGP4 nodenum +INDIRI4 +LTI4 $277 +line 709 +;708: +;709: return 0; +CNSTI4 0 +RETI4 +LABELV $276 +endproc NodeHere 36 0 +export CanGetToVector +proc CanGetToVector 1084 28 +line 713 +;710:} +;711: +;712:int CanGetToVector(vec3_t org1, vec3_t org2, vec3_t mins, vec3_t maxs) +;713:{ +line 716 +;714: trace_t tr; +;715: +;716: trap_Trace(&tr, org1, mins, maxs, org2, -1, MASK_SOLID); +ADDRLP4 0 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 718 +;717: +;718: if (tr.fraction == 1 && !tr.startsolid && !tr.allsolid) +ADDRLP4 0+8 +INDIRF4 +CNSTF4 1065353216 +NEF4 $294 +ADDRLP4 1080 +CNSTI4 0 +ASGNI4 +ADDRLP4 0+4 +INDIRI4 +ADDRLP4 1080 +INDIRI4 +NEI4 $294 +ADDRLP4 0 +INDIRI4 +ADDRLP4 1080 +INDIRI4 +NEI4 $294 +line 719 +;719: { +line 720 +;720: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $293 +JUMPV +LABELV $294 +line 723 +;721: } +;722: +;723: return 0; +CNSTI4 0 +RETI4 +LABELV $293 +endproc CanGetToVector 1084 28 +export CanGetToVectorTravel +proc CanGetToVectorTravel 1192 28 +line 727 +;724:} +;725: +;726:int CanGetToVectorTravel(vec3_t org1, vec3_t org2, vec3_t mins, vec3_t maxs) +;727:{ +line 733 +;728: trace_t tr; +;729: vec3_t a, ang, fwd; +;730: vec3_t midpos, dmid; +;731: float startheight, midheight, fLen; +;732: +;733: mins[2] = -13; +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +CNSTF4 3243245568 +ASGNF4 +line 734 +;734: maxs[2] = 13; +ADDRFP4 12 +INDIRP4 +CNSTI4 8 +ADDP4 +CNSTF4 1095761920 +ASGNF4 +line 736 +;735: +;736: trap_Trace(&tr, org1, mins, maxs, org2, -1, MASK_SOLID); +ADDRLP4 0 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 738 +;737: +;738: if (tr.fraction != 1 || tr.startsolid || tr.allsolid) +ADDRLP4 0+8 +INDIRF4 +CNSTF4 1065353216 +NEF4 $304 +ADDRLP4 1152 +CNSTI4 0 +ASGNI4 +ADDRLP4 0+4 +INDIRI4 +ADDRLP4 1152 +INDIRI4 +NEI4 $304 +ADDRLP4 0 +INDIRI4 +ADDRLP4 1152 +INDIRI4 +EQI4 $299 +LABELV $304 +line 739 +;739: { +line 740 +;740: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $298 +JUMPV +LABELV $299 +line 743 +;741: } +;742: +;743: VectorSubtract(org2, org1, a); +ADDRLP4 1156 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 1160 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1104 +ADDRLP4 1156 +INDIRP4 +INDIRF4 +ADDRLP4 1160 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1164 +CNSTI4 4 +ASGNI4 +ADDRLP4 1104+4 +ADDRLP4 1156 +INDIRP4 +ADDRLP4 1164 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 1160 +INDIRP4 +ADDRLP4 1164 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1168 +CNSTI4 8 +ASGNI4 +ADDRLP4 1104+8 +ADDRFP4 4 +INDIRP4 +ADDRLP4 1168 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 1168 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 745 +;744: +;745: vectoangles(a, ang); +ADDRLP4 1104 +ARGP4 +ADDRLP4 1132 +ARGP4 +ADDRGP4 vectoangles +CALLV +pop +line 747 +;746: +;747: AngleVectors(ang, fwd, NULL, NULL); +ADDRLP4 1132 +ARGP4 +ADDRLP4 1116 +ARGP4 +ADDRLP4 1172 +CNSTP4 0 +ASGNP4 +ADDRLP4 1172 +INDIRP4 +ARGP4 +ADDRLP4 1172 +INDIRP4 +ARGP4 +ADDRGP4 AngleVectors +CALLV +pop +line 749 +;748: +;749: fLen = VectorLength(a)/2; +ADDRLP4 1104 +ARGP4 +ADDRLP4 1176 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 1128 +ADDRLP4 1176 +INDIRF4 +CNSTF4 1073741824 +DIVF4 +ASGNF4 +line 751 +;750: +;751: midpos[0] = org1[0] + fwd[0]*fLen; +ADDRLP4 1080 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRLP4 1116 +INDIRF4 +ADDRLP4 1128 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 752 +;752: midpos[1] = org1[1] + fwd[1]*fLen; +ADDRLP4 1080+4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 1116+4 +INDIRF4 +ADDRLP4 1128 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 753 +;753: midpos[2] = org1[2] + fwd[2]*fLen; +ADDRLP4 1080+8 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 1116+8 +INDIRF4 +ADDRLP4 1128 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 755 +;754: +;755: VectorCopy(org1, dmid); +ADDRLP4 1092 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 756 +;756: dmid[2] -= 1024; +ADDRLP4 1092+8 +ADDRLP4 1092+8 +INDIRF4 +CNSTF4 1149239296 +SUBF4 +ASGNF4 +line 758 +;757: +;758: trap_Trace(&tr, midpos, NULL, NULL, dmid, -1, MASK_SOLID); +ADDRLP4 0 +ARGP4 +ADDRLP4 1080 +ARGP4 +ADDRLP4 1180 +CNSTP4 0 +ASGNP4 +ADDRLP4 1180 +INDIRP4 +ARGP4 +ADDRLP4 1180 +INDIRP4 +ARGP4 +ADDRLP4 1092 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 760 +;759: +;760: startheight = org1[2] - tr.endpos[2]; +ADDRLP4 1144 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 0+12+8 +INDIRF4 +SUBF4 +ASGNF4 +line 762 +;761: +;762: VectorCopy(midpos, dmid); +ADDRLP4 1092 +ADDRLP4 1080 +INDIRB +ASGNB 12 +line 763 +;763: dmid[2] -= 1024; +ADDRLP4 1092+8 +ADDRLP4 1092+8 +INDIRF4 +CNSTF4 1149239296 +SUBF4 +ASGNF4 +line 765 +;764: +;765: trap_Trace(&tr, midpos, NULL, NULL, dmid, -1, MASK_SOLID); +ADDRLP4 0 +ARGP4 +ADDRLP4 1080 +ARGP4 +ADDRLP4 1184 +CNSTP4 0 +ASGNP4 +ADDRLP4 1184 +INDIRP4 +ARGP4 +ADDRLP4 1184 +INDIRP4 +ARGP4 +ADDRLP4 1092 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 767 +;766: +;767: if (tr.startsolid || tr.allsolid) +ADDRLP4 1188 +CNSTI4 0 +ASGNI4 +ADDRLP4 0+4 +INDIRI4 +ADDRLP4 1188 +INDIRI4 +NEI4 $318 +ADDRLP4 0 +INDIRI4 +ADDRLP4 1188 +INDIRI4 +EQI4 $315 +LABELV $318 +line 768 +;768: { +line 769 +;769: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $298 +JUMPV +LABELV $315 +line 772 +;770: } +;771: +;772: midheight = midpos[2] - tr.endpos[2]; +ADDRLP4 1148 +ADDRLP4 1080+8 +INDIRF4 +ADDRLP4 0+12+8 +INDIRF4 +SUBF4 +ASGNF4 +line 774 +;773: +;774: if (midheight > startheight*2) +ADDRLP4 1148 +INDIRF4 +CNSTF4 1073741824 +ADDRLP4 1144 +INDIRF4 +MULF4 +LEF4 $322 +line 775 +;775: { +line 776 +;776: return 0; //too steep of a drop.. can't go on +CNSTI4 0 +RETI4 +ADDRGP4 $298 +JUMPV +LABELV $322 +line 779 +;777: } +;778: +;779: return 1; +CNSTI4 1 +RETI4 +LABELV $298 +endproc CanGetToVectorTravel 1192 28 +export ConnectTrail +proc ConnectTrail 17692 28 +line 783 +;780:} +;781: +;782:int ConnectTrail(int startindex, int endindex) +;783:{ +line 801 +;784: int foundit; +;785: int cancontinue; +;786: int i; +;787: int failsafe; +;788: int successnodeindex; +;789: int insertindex; +;790: int prenodestart; +;791: int extendednodes[MAX_NODETABLE_SIZE]; //for storing checked nodes and not trying to extend them each a bazillion times +;792: float fvecmeas; +;793: float baseheight; +;794: vec3_t a; +;795: vec3_t startplace, starttrace; +;796: vec3_t mins, maxs; +;797: vec3_t testspot; +;798: vec3_t validspotpos; +;799: trace_t tr; +;800: +;801: mins[0] = -15; +ADDRLP4 1108 +CNSTF4 3245342720 +ASGNF4 +line 802 +;802: mins[1] = -15; +ADDRLP4 1108+4 +CNSTF4 3245342720 +ASGNF4 +line 803 +;803: mins[2] = 0; +ADDRLP4 1108+8 +CNSTF4 0 +ASGNF4 +line 804 +;804: maxs[0] = 15; +ADDRLP4 1120 +CNSTF4 1097859072 +ASGNF4 +line 805 +;805: maxs[1] = 15; +ADDRLP4 1120+4 +CNSTF4 1097859072 +ASGNF4 +line 806 +;806: maxs[2] = 0; +ADDRLP4 1120+8 +CNSTF4 0 +ASGNF4 +line 808 +;807: +;808: nodenum = 0; +ADDRGP4 nodenum +CNSTI4 0 +ASGNI4 +line 809 +;809: foundit = 0; +ADDRLP4 17556 +CNSTI4 0 +ASGNI4 +line 811 +;810: +;811: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 813 +;812: +;813: successnodeindex = 0; +ADDRLP4 17560 +CNSTI4 0 +ASGNI4 +ADDRGP4 $330 +JUMPV +LABELV $329 +line 816 +;814: +;815: while (i < MAX_NODETABLE_SIZE) //clear it out before using it +;816: { +line 817 +;817: nodetable[i].flags = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+24 +ADDP4 +CNSTI4 0 +ASGNI4 +line 818 +;818: nodetable[i].index = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+16 +ADDP4 +CNSTI4 0 +ASGNI4 +line 819 +;819: nodetable[i].inuse = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+12 +ADDP4 +CNSTI4 0 +ASGNI4 +line 820 +;820: nodetable[i].neighbornum = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+28 +ADDP4 +CNSTI4 0 +ASGNI4 +line 821 +;821: nodetable[i].origin[0] = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +CNSTF4 0 +ASGNF4 +line 822 +;822: nodetable[i].origin[1] = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+4 +ADDP4 +CNSTF4 0 +ASGNF4 +line 823 +;823: nodetable[i].origin[2] = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +CNSTF4 0 +ASGNF4 +line 824 +;824: nodetable[i].weight = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +CNSTF4 0 +ASGNF4 +line 826 +;825: +;826: extendednodes[i] = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 1148 +ADDP4 +CNSTI4 0 +ASGNI4 +line 828 +;827: +;828: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 829 +;829: } +LABELV $330 +line 815 +ADDRLP4 0 +INDIRI4 +CNSTI4 4096 +LTI4 $329 +line 831 +;830: +;831: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 833 +;832: +;833: G_Printf(S_COLOR_YELLOW "Point %i is not connected to %i - Repairing...\n", startindex, endindex); +ADDRGP4 $339 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 835 +;834: +;835: VectorCopy(gWPArray[startindex]->origin, startplace); +ADDRLP4 17572 +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +INDIRB +ASGNB 12 +line 837 +;836: +;837: VectorCopy(startplace, starttrace); +ADDRLP4 1096 +ADDRLP4 17572 +INDIRB +ASGNB 12 +line 839 +;838: +;839: starttrace[2] -= 4096; +ADDRLP4 1096+8 +ADDRLP4 1096+8 +INDIRF4 +CNSTF4 1166016512 +SUBF4 +ASGNF4 +line 841 +;840: +;841: trap_Trace(&tr, startplace, NULL, NULL, starttrace, -1, MASK_SOLID); +ADDRLP4 16 +ARGP4 +ADDRLP4 17572 +ARGP4 +ADDRLP4 17584 +CNSTP4 0 +ASGNP4 +ADDRLP4 17584 +INDIRP4 +ARGP4 +ADDRLP4 17584 +INDIRP4 +ARGP4 +ADDRLP4 1096 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 843 +;842: +;843: baseheight = startplace[2] - tr.endpos[2]; +ADDRLP4 1144 +ADDRLP4 17572+8 +INDIRF4 +ADDRLP4 16+12+8 +INDIRF4 +SUBF4 +ASGNF4 +line 845 +;844: +;845: cancontinue = 1; +ADDRLP4 17532 +CNSTI4 1 +ASGNI4 +line 847 +;846: +;847: VectorCopy(startplace, nodetable[nodenum].origin); +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ADDRLP4 17572 +INDIRB +ASGNB 12 +line 848 +;848: nodetable[nodenum].weight = 1; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +CNSTF4 1065353216 +ASGNF4 +line 849 +;849: nodetable[nodenum].inuse = 1; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 850 +;850: nodetable[nodenum].index = nodenum; +ADDRLP4 17588 +ADDRGP4 nodenum +INDIRI4 +ASGNI4 +ADDRLP4 17588 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+16 +ADDP4 +ADDRLP4 17588 +INDIRI4 +ASGNI4 +line 851 +;851: nodenum++; +ADDRLP4 17592 +ADDRGP4 nodenum +ASGNP4 +ADDRLP4 17592 +INDIRP4 +ADDRLP4 17592 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $348 +JUMPV +LABELV $347 +line 854 +;852: +;853: while (nodenum < MAX_NODETABLE_SIZE && !foundit && cancontinue) +;854: { +line 855 +;855: cancontinue = 0; +ADDRLP4 17532 +CNSTI4 0 +ASGNI4 +line 856 +;856: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 857 +;857: prenodestart = nodenum; +ADDRLP4 17536 +ADDRGP4 nodenum +INDIRI4 +ASGNI4 +ADDRGP4 $351 +JUMPV +LABELV $350 +line 860 +;858: +;859: while (i < prenodestart) +;860: { +line 861 +;861: if (extendednodes[i] != 1) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 1148 +ADDP4 +INDIRI4 +CNSTI4 1 +EQI4 $353 +line 862 +;862: { +line 863 +;863: VectorSubtract(gWPArray[endindex]->origin, nodetable[i].origin, a); +ADDRLP4 17596 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ASGNP4 +ADDRLP4 17600 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ASGNI4 +ADDRLP4 1132 +ADDRLP4 17596 +INDIRP4 +INDIRP4 +INDIRF4 +ADDRLP4 17600 +INDIRI4 +ADDRGP4 nodetable +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1132+4 +ADDRLP4 17596 +INDIRP4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 17600 +INDIRI4 +ADDRGP4 nodetable+4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1132+8 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 864 +;864: fvecmeas = VectorLength(a); +ADDRLP4 1132 +ARGP4 +ADDRLP4 17604 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 17540 +ADDRLP4 17604 +INDIRF4 +ASGNF4 +line 866 +;865: +;866: if (fvecmeas < 128 && CanGetToVector(gWPArray[endindex]->origin, nodetable[i].origin, mins, maxs)) +ADDRLP4 17540 +INDIRF4 +CNSTF4 1124073472 +GEF4 $359 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 17608 +ADDRGP4 CanGetToVector +CALLI4 +ASGNI4 +ADDRLP4 17608 +INDIRI4 +CNSTI4 0 +EQI4 $359 +line 867 +;867: { +line 868 +;868: foundit = 1; +ADDRLP4 17556 +CNSTI4 1 +ASGNI4 +line 869 +;869: successnodeindex = i; +ADDRLP4 17560 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 870 +;870: break; +ADDRGP4 $352 +JUMPV +LABELV $359 +line 873 +;871: } +;872: +;873: VectorCopy(nodetable[i].origin, testspot); +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +INDIRB +ASGNB 12 +line 874 +;874: testspot[0] += TABLE_BRANCH_DISTANCE; +ADDRLP4 4 +ADDRLP4 4 +INDIRF4 +CNSTF4 1107296256 +ADDF4 +ASGNF4 +line 876 +;875: +;876: VectorCopy(testspot, starttrace); +ADDRLP4 1096 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 878 +;877: +;878: starttrace[2] -= 4096; +ADDRLP4 1096+8 +ADDRLP4 1096+8 +INDIRF4 +CNSTF4 1166016512 +SUBF4 +ASGNF4 +line 880 +;879: +;880: trap_Trace(&tr, testspot, NULL, NULL, starttrace, -1, MASK_SOLID); +ADDRLP4 16 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 17612 +CNSTP4 0 +ASGNP4 +ADDRLP4 17612 +INDIRP4 +ARGP4 +ADDRLP4 17612 +INDIRP4 +ARGP4 +ADDRLP4 1096 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 882 +;881: +;882: testspot[2] = tr.endpos[2]+baseheight; +ADDRLP4 4+8 +ADDRLP4 16+12+8 +INDIRF4 +ADDRLP4 1144 +INDIRF4 +ADDF4 +ASGNF4 +line 884 +;883: +;884: if (!NodeHere(testspot) && !tr.startsolid && !tr.allsolid && CanGetToVector(nodetable[i].origin, testspot, mins, maxs)) +ADDRLP4 4 +ARGP4 +ADDRLP4 17616 +ADDRGP4 NodeHere +CALLI4 +ASGNI4 +ADDRLP4 17620 +CNSTI4 0 +ASGNI4 +ADDRLP4 17616 +INDIRI4 +ADDRLP4 17620 +INDIRI4 +NEI4 $365 +ADDRLP4 16+4 +INDIRI4 +ADDRLP4 17620 +INDIRI4 +NEI4 $365 +ADDRLP4 16 +INDIRI4 +ADDRLP4 17620 +INDIRI4 +NEI4 $365 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 17624 +ADDRGP4 CanGetToVector +CALLI4 +ASGNI4 +ADDRLP4 17624 +INDIRI4 +CNSTI4 0 +EQI4 $365 +line 885 +;885: { +line 886 +;886: VectorCopy(testspot, nodetable[nodenum].origin); +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 887 +;887: nodetable[nodenum].inuse = 1; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 888 +;888: nodetable[nodenum].index = nodenum; +ADDRLP4 17628 +ADDRGP4 nodenum +INDIRI4 +ASGNI4 +ADDRLP4 17628 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+16 +ADDP4 +ADDRLP4 17628 +INDIRI4 +ASGNI4 +line 889 +;889: nodetable[nodenum].weight = nodetable[i].weight+1; +ADDRLP4 17632 +CNSTI4 5 +ASGNI4 +ADDRGP4 nodenum +INDIRI4 +ADDRLP4 17632 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17632 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +INDIRF4 +CNSTF4 1065353216 +ADDF4 +ASGNF4 +line 890 +;890: nodetable[nodenum].neighbornum = i; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+28 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 891 +;891: if ((nodetable[i].origin[2] - nodetable[nodenum].origin[2]) > 50) +ADDRLP4 17636 +CNSTI4 5 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17636 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +ADDRGP4 nodenum +INDIRI4 +ADDRLP4 17636 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +SUBF4 +CNSTF4 1112014848 +LEF4 $373 +line 892 +;892: { //if there's a big drop, make sure we know we can't just magically fly back up +line 893 +;893: nodetable[nodenum].flags = WPFLAG_ONEWAY_FWD; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+24 +ADDP4 +CNSTI4 16384 +ASGNI4 +line 894 +;894: } +LABELV $373 +line 895 +;895: nodenum++; +ADDRLP4 17640 +ADDRGP4 nodenum +ASGNP4 +ADDRLP4 17640 +INDIRP4 +ADDRLP4 17640 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 896 +;896: cancontinue = 1; +ADDRLP4 17532 +CNSTI4 1 +ASGNI4 +line 897 +;897: } +LABELV $365 +line 899 +;898: +;899: if (nodenum >= MAX_NODETABLE_SIZE) +ADDRGP4 nodenum +INDIRI4 +CNSTI4 4096 +LTI4 $378 +line 900 +;900: { +line 901 +;901: break; //failure +ADDRGP4 $352 +JUMPV +LABELV $378 +line 904 +;902: } +;903: +;904: VectorCopy(nodetable[i].origin, testspot); +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +INDIRB +ASGNB 12 +line 905 +;905: testspot[0] -= TABLE_BRANCH_DISTANCE; +ADDRLP4 4 +ADDRLP4 4 +INDIRF4 +CNSTF4 1107296256 +SUBF4 +ASGNF4 +line 907 +;906: +;907: VectorCopy(testspot, starttrace); +ADDRLP4 1096 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 909 +;908: +;909: starttrace[2] -= 4096; +ADDRLP4 1096+8 +ADDRLP4 1096+8 +INDIRF4 +CNSTF4 1166016512 +SUBF4 +ASGNF4 +line 911 +;910: +;911: trap_Trace(&tr, testspot, NULL, NULL, starttrace, -1, MASK_SOLID); +ADDRLP4 16 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 17628 +CNSTP4 0 +ASGNP4 +ADDRLP4 17628 +INDIRP4 +ARGP4 +ADDRLP4 17628 +INDIRP4 +ARGP4 +ADDRLP4 1096 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 913 +;912: +;913: testspot[2] = tr.endpos[2]+baseheight; +ADDRLP4 4+8 +ADDRLP4 16+12+8 +INDIRF4 +ADDRLP4 1144 +INDIRF4 +ADDF4 +ASGNF4 +line 915 +;914: +;915: if (!NodeHere(testspot) && !tr.startsolid && !tr.allsolid && CanGetToVector(nodetable[i].origin, testspot, mins, maxs)) +ADDRLP4 4 +ARGP4 +ADDRLP4 17632 +ADDRGP4 NodeHere +CALLI4 +ASGNI4 +ADDRLP4 17636 +CNSTI4 0 +ASGNI4 +ADDRLP4 17632 +INDIRI4 +ADDRLP4 17636 +INDIRI4 +NEI4 $384 +ADDRLP4 16+4 +INDIRI4 +ADDRLP4 17636 +INDIRI4 +NEI4 $384 +ADDRLP4 16 +INDIRI4 +ADDRLP4 17636 +INDIRI4 +NEI4 $384 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 17640 +ADDRGP4 CanGetToVector +CALLI4 +ASGNI4 +ADDRLP4 17640 +INDIRI4 +CNSTI4 0 +EQI4 $384 +line 916 +;916: { +line 917 +;917: VectorCopy(testspot, nodetable[nodenum].origin); +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 918 +;918: nodetable[nodenum].inuse = 1; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 919 +;919: nodetable[nodenum].index = nodenum; +ADDRLP4 17644 +ADDRGP4 nodenum +INDIRI4 +ASGNI4 +ADDRLP4 17644 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+16 +ADDP4 +ADDRLP4 17644 +INDIRI4 +ASGNI4 +line 920 +;920: nodetable[nodenum].weight = nodetable[i].weight+1; +ADDRLP4 17648 +CNSTI4 5 +ASGNI4 +ADDRGP4 nodenum +INDIRI4 +ADDRLP4 17648 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17648 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +INDIRF4 +CNSTF4 1065353216 +ADDF4 +ASGNF4 +line 921 +;921: nodetable[nodenum].neighbornum = i; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+28 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 922 +;922: if ((nodetable[i].origin[2] - nodetable[nodenum].origin[2]) > 50) +ADDRLP4 17652 +CNSTI4 5 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17652 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +ADDRGP4 nodenum +INDIRI4 +ADDRLP4 17652 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +SUBF4 +CNSTF4 1112014848 +LEF4 $392 +line 923 +;923: { //if there's a big drop, make sure we know we can't just magically fly back up +line 924 +;924: nodetable[nodenum].flags = WPFLAG_ONEWAY_FWD; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+24 +ADDP4 +CNSTI4 16384 +ASGNI4 +line 925 +;925: } +LABELV $392 +line 926 +;926: nodenum++; +ADDRLP4 17656 +ADDRGP4 nodenum +ASGNP4 +ADDRLP4 17656 +INDIRP4 +ADDRLP4 17656 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 927 +;927: cancontinue = 1; +ADDRLP4 17532 +CNSTI4 1 +ASGNI4 +line 928 +;928: } +LABELV $384 +line 930 +;929: +;930: if (nodenum >= MAX_NODETABLE_SIZE) +ADDRGP4 nodenum +INDIRI4 +CNSTI4 4096 +LTI4 $397 +line 931 +;931: { +line 932 +;932: break; //failure +ADDRGP4 $352 +JUMPV +LABELV $397 +line 935 +;933: } +;934: +;935: VectorCopy(nodetable[i].origin, testspot); +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +INDIRB +ASGNB 12 +line 936 +;936: testspot[1] += TABLE_BRANCH_DISTANCE; +ADDRLP4 4+4 +ADDRLP4 4+4 +INDIRF4 +CNSTF4 1107296256 +ADDF4 +ASGNF4 +line 938 +;937: +;938: VectorCopy(testspot, starttrace); +ADDRLP4 1096 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 940 +;939: +;940: starttrace[2] -= 4096; +ADDRLP4 1096+8 +ADDRLP4 1096+8 +INDIRF4 +CNSTF4 1166016512 +SUBF4 +ASGNF4 +line 942 +;941: +;942: trap_Trace(&tr, testspot, NULL, NULL, starttrace, -1, MASK_SOLID); +ADDRLP4 16 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 17644 +CNSTP4 0 +ASGNP4 +ADDRLP4 17644 +INDIRP4 +ARGP4 +ADDRLP4 17644 +INDIRP4 +ARGP4 +ADDRLP4 1096 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 944 +;943: +;944: testspot[2] = tr.endpos[2]+baseheight; +ADDRLP4 4+8 +ADDRLP4 16+12+8 +INDIRF4 +ADDRLP4 1144 +INDIRF4 +ADDF4 +ASGNF4 +line 946 +;945: +;946: if (!NodeHere(testspot) && !tr.startsolid && !tr.allsolid && CanGetToVector(nodetable[i].origin, testspot, mins, maxs)) +ADDRLP4 4 +ARGP4 +ADDRLP4 17648 +ADDRGP4 NodeHere +CALLI4 +ASGNI4 +ADDRLP4 17652 +CNSTI4 0 +ASGNI4 +ADDRLP4 17648 +INDIRI4 +ADDRLP4 17652 +INDIRI4 +NEI4 $404 +ADDRLP4 16+4 +INDIRI4 +ADDRLP4 17652 +INDIRI4 +NEI4 $404 +ADDRLP4 16 +INDIRI4 +ADDRLP4 17652 +INDIRI4 +NEI4 $404 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 17656 +ADDRGP4 CanGetToVector +CALLI4 +ASGNI4 +ADDRLP4 17656 +INDIRI4 +CNSTI4 0 +EQI4 $404 +line 947 +;947: { +line 948 +;948: VectorCopy(testspot, nodetable[nodenum].origin); +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 949 +;949: nodetable[nodenum].inuse = 1; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 950 +;950: nodetable[nodenum].index = nodenum; +ADDRLP4 17660 +ADDRGP4 nodenum +INDIRI4 +ASGNI4 +ADDRLP4 17660 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+16 +ADDP4 +ADDRLP4 17660 +INDIRI4 +ASGNI4 +line 951 +;951: nodetable[nodenum].weight = nodetable[i].weight+1; +ADDRLP4 17664 +CNSTI4 5 +ASGNI4 +ADDRGP4 nodenum +INDIRI4 +ADDRLP4 17664 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17664 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +INDIRF4 +CNSTF4 1065353216 +ADDF4 +ASGNF4 +line 952 +;952: nodetable[nodenum].neighbornum = i; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+28 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 953 +;953: if ((nodetable[i].origin[2] - nodetable[nodenum].origin[2]) > 50) +ADDRLP4 17668 +CNSTI4 5 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17668 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +ADDRGP4 nodenum +INDIRI4 +ADDRLP4 17668 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +SUBF4 +CNSTF4 1112014848 +LEF4 $412 +line 954 +;954: { //if there's a big drop, make sure we know we can't just magically fly back up +line 955 +;955: nodetable[nodenum].flags = WPFLAG_ONEWAY_FWD; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+24 +ADDP4 +CNSTI4 16384 +ASGNI4 +line 956 +;956: } +LABELV $412 +line 957 +;957: nodenum++; +ADDRLP4 17672 +ADDRGP4 nodenum +ASGNP4 +ADDRLP4 17672 +INDIRP4 +ADDRLP4 17672 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 958 +;958: cancontinue = 1; +ADDRLP4 17532 +CNSTI4 1 +ASGNI4 +line 959 +;959: } +LABELV $404 +line 961 +;960: +;961: if (nodenum >= MAX_NODETABLE_SIZE) +ADDRGP4 nodenum +INDIRI4 +CNSTI4 4096 +LTI4 $417 +line 962 +;962: { +line 963 +;963: break; //failure +ADDRGP4 $352 +JUMPV +LABELV $417 +line 966 +;964: } +;965: +;966: VectorCopy(nodetable[i].origin, testspot); +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +INDIRB +ASGNB 12 +line 967 +;967: testspot[1] -= TABLE_BRANCH_DISTANCE; +ADDRLP4 4+4 +ADDRLP4 4+4 +INDIRF4 +CNSTF4 1107296256 +SUBF4 +ASGNF4 +line 969 +;968: +;969: VectorCopy(testspot, starttrace); +ADDRLP4 1096 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 971 +;970: +;971: starttrace[2] -= 4096; +ADDRLP4 1096+8 +ADDRLP4 1096+8 +INDIRF4 +CNSTF4 1166016512 +SUBF4 +ASGNF4 +line 973 +;972: +;973: trap_Trace(&tr, testspot, NULL, NULL, starttrace, -1, MASK_SOLID); +ADDRLP4 16 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 17660 +CNSTP4 0 +ASGNP4 +ADDRLP4 17660 +INDIRP4 +ARGP4 +ADDRLP4 17660 +INDIRP4 +ARGP4 +ADDRLP4 1096 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 975 +;974: +;975: testspot[2] = tr.endpos[2]+baseheight; +ADDRLP4 4+8 +ADDRLP4 16+12+8 +INDIRF4 +ADDRLP4 1144 +INDIRF4 +ADDF4 +ASGNF4 +line 977 +;976: +;977: if (!NodeHere(testspot) && !tr.startsolid && !tr.allsolid && CanGetToVector(nodetable[i].origin, testspot, mins, maxs)) +ADDRLP4 4 +ARGP4 +ADDRLP4 17664 +ADDRGP4 NodeHere +CALLI4 +ASGNI4 +ADDRLP4 17668 +CNSTI4 0 +ASGNI4 +ADDRLP4 17664 +INDIRI4 +ADDRLP4 17668 +INDIRI4 +NEI4 $424 +ADDRLP4 16+4 +INDIRI4 +ADDRLP4 17668 +INDIRI4 +NEI4 $424 +ADDRLP4 16 +INDIRI4 +ADDRLP4 17668 +INDIRI4 +NEI4 $424 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 17672 +ADDRGP4 CanGetToVector +CALLI4 +ASGNI4 +ADDRLP4 17672 +INDIRI4 +CNSTI4 0 +EQI4 $424 +line 978 +;978: { +line 979 +;979: VectorCopy(testspot, nodetable[nodenum].origin); +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 980 +;980: nodetable[nodenum].inuse = 1; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 981 +;981: nodetable[nodenum].index = nodenum; +ADDRLP4 17676 +ADDRGP4 nodenum +INDIRI4 +ASGNI4 +ADDRLP4 17676 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+16 +ADDP4 +ADDRLP4 17676 +INDIRI4 +ASGNI4 +line 982 +;982: nodetable[nodenum].weight = nodetable[i].weight+1; +ADDRLP4 17680 +CNSTI4 5 +ASGNI4 +ADDRGP4 nodenum +INDIRI4 +ADDRLP4 17680 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17680 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+20 +ADDP4 +INDIRF4 +CNSTF4 1065353216 +ADDF4 +ASGNF4 +line 983 +;983: nodetable[nodenum].neighbornum = i; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+28 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 984 +;984: if ((nodetable[i].origin[2] - nodetable[nodenum].origin[2]) > 50) +ADDRLP4 17684 +CNSTI4 5 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17684 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +ADDRGP4 nodenum +INDIRI4 +ADDRLP4 17684 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +SUBF4 +CNSTF4 1112014848 +LEF4 $432 +line 985 +;985: { //if there's a big drop, make sure we know we can't just magically fly back up +line 986 +;986: nodetable[nodenum].flags = WPFLAG_ONEWAY_FWD; +ADDRGP4 nodenum +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+24 +ADDP4 +CNSTI4 16384 +ASGNI4 +line 987 +;987: } +LABELV $432 +line 988 +;988: nodenum++; +ADDRLP4 17688 +ADDRGP4 nodenum +ASGNP4 +ADDRLP4 17688 +INDIRP4 +ADDRLP4 17688 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 989 +;989: cancontinue = 1; +ADDRLP4 17532 +CNSTI4 1 +ASGNI4 +line 990 +;990: } +LABELV $424 +line 992 +;991: +;992: if (nodenum >= MAX_NODETABLE_SIZE) +ADDRGP4 nodenum +INDIRI4 +CNSTI4 4096 +LTI4 $437 +line 993 +;993: { +line 994 +;994: break; //failure +ADDRGP4 $352 +JUMPV +LABELV $437 +line 997 +;995: } +;996: +;997: extendednodes[i] = 1; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 1148 +ADDP4 +CNSTI4 1 +ASGNI4 +line 998 +;998: } +LABELV $353 +line 1000 +;999: +;1000: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1001 +;1001: } +LABELV $351 +line 859 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17536 +INDIRI4 +LTI4 $350 +LABELV $352 +line 1002 +;1002: } +LABELV $348 +line 853 +ADDRGP4 nodenum +INDIRI4 +CNSTI4 4096 +GEI4 $440 +ADDRLP4 17596 +CNSTI4 0 +ASGNI4 +ADDRLP4 17556 +INDIRI4 +ADDRLP4 17596 +INDIRI4 +NEI4 $440 +ADDRLP4 17532 +INDIRI4 +ADDRLP4 17596 +INDIRI4 +NEI4 $347 +LABELV $440 +line 1004 +;1003: +;1004: if (!foundit) +ADDRLP4 17556 +INDIRI4 +CNSTI4 0 +NEI4 $441 +line 1005 +;1005: { +line 1006 +;1006: G_Printf(S_COLOR_RED "Could not link %i to %i, unreachable by node branching.\n", startindex, endindex); +ADDRGP4 $443 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 1007 +;1007: gWPArray[startindex]->flags |= WPFLAG_ONEWAY_FWD; +ADDRLP4 17600 +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 17600 +INDIRP4 +ADDRLP4 17600 +INDIRP4 +INDIRI4 +CNSTI4 16384 +BORI4 +ASGNI4 +line 1008 +;1008: gWPArray[endindex]->flags |= WPFLAG_ONEWAY_BACK; +ADDRLP4 17604 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 17604 +INDIRP4 +ADDRLP4 17604 +INDIRP4 +INDIRI4 +CNSTI4 32768 +BORI4 +ASGNI4 +line 1009 +;1009: G_Printf(S_COLOR_YELLOW "Since points cannot be connected, point %i has been flagged as only-forward and point %i has been flagged as only-backward.\n", startindex, endindex); +ADDRGP4 $444 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 1022 +;1010: +;1011: /*while (nodenum >= 0) +;1012: { +;1013: if (nodetable[nodenum].origin[0] || nodetable[nodenum].origin[1] || nodetable[nodenum].origin[2]) +;1014: { +;1015: CreateNewWP(nodetable[nodenum].origin, nodetable[nodenum].flags); +;1016: } +;1017: +;1018: nodenum--; +;1019: }*/ +;1020: //The above code transfers nodes into the "rendered" waypoint array. Strictly for debugging. +;1021: +;1022: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $324 +JUMPV +LABELV $441 +line 1025 +;1023: } +;1024: +;1025: i = successnodeindex; +ADDRLP4 0 +ADDRLP4 17560 +INDIRI4 +ASGNI4 +line 1026 +;1026: insertindex = startindex; +ADDRLP4 17568 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 1027 +;1027: failsafe = 0; +ADDRLP4 17564 +CNSTI4 0 +ASGNI4 +line 1028 +;1028: VectorCopy(gWPArray[startindex]->origin, validspotpos); +ADDRLP4 17544 +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +INDIRB +ASGNB 12 +ADDRGP4 $446 +JUMPV +LABELV $445 +line 1031 +;1029: +;1030: while (failsafe < MAX_NODETABLE_SIZE && i < MAX_NODETABLE_SIZE && i >= 0) +;1031: { +line 1032 +;1032: VectorSubtract(validspotpos, nodetable[i].origin, a); +ADDRLP4 17600 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ASGNI4 +ADDRLP4 1132 +ADDRLP4 17544 +INDIRF4 +ADDRLP4 17600 +INDIRI4 +ADDRGP4 nodetable +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1132+4 +ADDRLP4 17544+4 +INDIRF4 +ADDRLP4 17600 +INDIRI4 +ADDRGP4 nodetable+4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1132+8 +ADDRLP4 17544+8 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+8 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1033 +;1033: if (!nodetable[nodetable[i].neighbornum].inuse || !CanGetToVectorTravel(validspotpos, /*nodetable[nodetable[i].neighbornum].origin*/nodetable[i].origin, mins, maxs) || VectorLength(a) > 256 || (!CanGetToVectorTravel(validspotpos, gWPArray[endindex]->origin, mins, maxs) && CanGetToVectorTravel(nodetable[i].origin, gWPArray[endindex]->origin, mins, maxs)) ) +ADDRLP4 17604 +CNSTI4 5 +ASGNI4 +ADDRLP4 17608 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17604 +INDIRI4 +LSHI4 +ASGNI4 +ADDRLP4 17608 +INDIRI4 +ADDRGP4 nodetable+28 +ADDP4 +INDIRI4 +ADDRLP4 17604 +INDIRI4 +LSHI4 +ADDRGP4 nodetable+12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $460 +ADDRLP4 17544 +ARGP4 +ADDRLP4 17608 +INDIRI4 +ADDRGP4 nodetable +ADDP4 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 17612 +ADDRGP4 CanGetToVectorTravel +CALLI4 +ASGNI4 +ADDRLP4 17612 +INDIRI4 +CNSTI4 0 +EQI4 $460 +ADDRLP4 1132 +ARGP4 +ADDRLP4 17616 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 17616 +INDIRF4 +CNSTF4 1132462080 +GTF4 $460 +ADDRLP4 17544 +ARGP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 17620 +ADDRGP4 CanGetToVectorTravel +CALLI4 +ASGNI4 +ADDRLP4 17620 +INDIRI4 +CNSTI4 0 +NEI4 $454 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 17624 +ADDRGP4 CanGetToVectorTravel +CALLI4 +ASGNI4 +ADDRLP4 17624 +INDIRI4 +CNSTI4 0 +EQI4 $454 +LABELV $460 +line 1034 +;1034: { +line 1035 +;1035: if (!CreateNewWP_InTrail(nodetable[i].origin, nodetable[i].flags, insertindex)) +ADDRLP4 17628 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ASGNI4 +ADDRLP4 17628 +INDIRI4 +ADDRGP4 nodetable +ADDP4 +ARGP4 +ADDRLP4 17628 +INDIRI4 +ADDRGP4 nodetable+24 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 17568 +INDIRI4 +ARGI4 +ADDRLP4 17632 +ADDRGP4 CreateNewWP_InTrail +CALLI4 +ASGNI4 +ADDRLP4 17632 +INDIRI4 +CNSTI4 0 +NEI4 $461 +line 1036 +;1036: { +line 1037 +;1037: G_Printf(S_COLOR_RED "Could not link %i to %i, waypoint limit hit.\n", startindex, endindex); +ADDRGP4 $464 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 1038 +;1038: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $324 +JUMPV +LABELV $461 +line 1041 +;1039: } +;1040: +;1041: VectorCopy(nodetable[i].origin, validspotpos); +ADDRLP4 17544 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable +ADDP4 +INDIRB +ASGNB 12 +line 1042 +;1042: } +LABELV $454 +line 1044 +;1043: +;1044: if (i == 0) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $465 +line 1045 +;1045: { +line 1046 +;1046: break; +ADDRGP4 $447 +JUMPV +LABELV $465 +line 1049 +;1047: } +;1048: +;1049: i = nodetable[i].neighbornum; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 nodetable+28 +ADDP4 +INDIRI4 +ASGNI4 +line 1051 +;1050: +;1051: failsafe++; +ADDRLP4 17564 +ADDRLP4 17564 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1052 +;1052: } +LABELV $446 +line 1030 +ADDRLP4 17600 +CNSTI4 4096 +ASGNI4 +ADDRLP4 17564 +INDIRI4 +ADDRLP4 17600 +INDIRI4 +GEI4 $469 +ADDRLP4 0 +INDIRI4 +ADDRLP4 17600 +INDIRI4 +GEI4 $469 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $445 +LABELV $469 +LABELV $447 +line 1054 +;1053: +;1054: G_Printf(S_COLOR_YELLOW "Finished connecting %i to %i.\n", startindex, endindex); +ADDRGP4 $470 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Printf +CALLV +pop +line 1056 +;1055: +;1056: return 1; +CNSTI4 1 +RETI4 +LABELV $324 +endproc ConnectTrail 17692 28 +export OpposingEnds +proc OpposingEnds 44 0 +line 1060 +;1057:} +;1058: +;1059:int OpposingEnds(int start, int end) +;1060:{ +line 1061 +;1061: if (!gWPArray[start] || !gWPArray[start]->inuse || !gWPArray[end] || !gWPArray[end]->inuse) +ADDRLP4 0 +CNSTI4 2 +ASGNI4 +ADDRLP4 4 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 8 +ADDRFP4 0 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LSHI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTU4 0 +ASGNU4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +ADDRLP4 12 +INDIRU4 +EQU4 $476 +ADDRLP4 16 +CNSTI4 12 +ASGNI4 +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +EQI4 $476 +ADDRLP4 24 +ADDRFP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LSHI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 12 +INDIRU4 +EQU4 $476 +ADDRLP4 24 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +NEI4 $472 +LABELV $476 +line 1062 +;1062: { +line 1063 +;1063: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $471 +JUMPV +LABELV $472 +line 1066 +;1064: } +;1065: +;1066: if ((gWPArray[start]->flags & WPFLAG_ONEWAY_FWD) && +ADDRLP4 28 +CNSTI4 2 +ASGNI4 +ADDRLP4 32 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 36 +CNSTI4 28 +ASGNI4 +ADDRLP4 40 +CNSTI4 0 +ASGNI4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 28 +INDIRI4 +LSHI4 +ADDRLP4 32 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRI4 +CNSTI4 16384 +BANDI4 +ADDRLP4 40 +INDIRI4 +EQI4 $477 +ADDRFP4 4 +INDIRI4 +ADDRLP4 28 +INDIRI4 +LSHI4 +ADDRLP4 32 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRI4 +CNSTI4 32768 +BANDI4 +ADDRLP4 40 +INDIRI4 +EQI4 $477 +line 1068 +;1067: (gWPArray[end]->flags & WPFLAG_ONEWAY_BACK)) +;1068: { +line 1069 +;1069: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $471 +JUMPV +LABELV $477 +line 1072 +;1070: } +;1071: +;1072: return 0; +CNSTI4 0 +RETI4 +LABELV $471 +endproc OpposingEnds 44 0 +export DoorBlockingSection +proc DoorBlockingSection 1144 28 +line 1076 +;1073:} +;1074: +;1075:int DoorBlockingSection(int start, int end) +;1076:{ //if a door blocks the trail, we'll just have to assume the points on each side are in visibility when it's open +line 1081 +;1077: trace_t tr; +;1078: gentity_t *testdoor; +;1079: int start_trace_index; +;1080: +;1081: if (!gWPArray[start] || !gWPArray[start]->inuse || !gWPArray[end] || !gWPArray[end]->inuse) +ADDRLP4 1088 +CNSTI4 2 +ASGNI4 +ADDRLP4 1092 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 1096 +ADDRFP4 0 +INDIRI4 +ADDRLP4 1088 +INDIRI4 +LSHI4 +ADDRLP4 1092 +INDIRP4 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 1100 +CNSTU4 0 +ASGNU4 +ADDRLP4 1096 +INDIRP4 +CVPU4 4 +ADDRLP4 1100 +INDIRU4 +EQU4 $484 +ADDRLP4 1104 +CNSTI4 12 +ASGNI4 +ADDRLP4 1108 +CNSTI4 0 +ASGNI4 +ADDRLP4 1096 +INDIRP4 +ADDRLP4 1104 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 1108 +INDIRI4 +EQI4 $484 +ADDRLP4 1112 +ADDRFP4 4 +INDIRI4 +ADDRLP4 1088 +INDIRI4 +LSHI4 +ADDRLP4 1092 +INDIRP4 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 1112 +INDIRP4 +CVPU4 4 +ADDRLP4 1100 +INDIRU4 +EQU4 $484 +ADDRLP4 1112 +INDIRP4 +ADDRLP4 1104 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 1108 +INDIRI4 +NEI4 $480 +LABELV $484 +line 1082 +;1082: { +line 1083 +;1083: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $479 +JUMPV +LABELV $480 +line 1086 +;1084: } +;1085: +;1086: trap_Trace(&tr, gWPArray[start]->origin, NULL, NULL, gWPArray[end]->origin, -1, MASK_SOLID); +ADDRLP4 0 +ARGP4 +ADDRLP4 1116 +CNSTI4 2 +ASGNI4 +ADDRLP4 1120 +ADDRGP4 gWPArray +ASGNP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 1116 +INDIRI4 +LSHI4 +ADDRLP4 1120 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 1124 +CNSTP4 0 +ASGNP4 +ADDRLP4 1124 +INDIRP4 +ARGP4 +ADDRLP4 1124 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 1116 +INDIRI4 +LSHI4 +ADDRLP4 1120 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 1088 +;1087: +;1088: if (tr.fraction == 1) +ADDRLP4 0+8 +INDIRF4 +CNSTF4 1065353216 +NEF4 $485 +line 1089 +;1089: { +line 1090 +;1090: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $479 +JUMPV +LABELV $485 +line 1093 +;1091: } +;1092: +;1093: testdoor = &g_entities[tr.entityNum]; +ADDRLP4 1080 +CNSTI4 828 +ADDRLP4 0+52 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1095 +;1094: +;1095: if (!testdoor) +ADDRLP4 1080 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $489 +line 1096 +;1096: { +line 1097 +;1097: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $479 +JUMPV +LABELV $489 +line 1100 +;1098: } +;1099: +;1100: if (!strstr(testdoor->classname, "func_")) +ADDRLP4 1080 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $493 +ARGP4 +ADDRLP4 1128 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 1128 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $491 +line 1101 +;1101: { +line 1102 +;1102: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $479 +JUMPV +LABELV $491 +line 1105 +;1103: } +;1104: +;1105: start_trace_index = tr.entityNum; +ADDRLP4 1084 +ADDRLP4 0+52 +INDIRI4 +ASGNI4 +line 1107 +;1106: +;1107: trap_Trace(&tr, gWPArray[end]->origin, NULL, NULL, gWPArray[start]->origin, -1, MASK_SOLID); +ADDRLP4 0 +ARGP4 +ADDRLP4 1132 +CNSTI4 2 +ASGNI4 +ADDRLP4 1136 +ADDRGP4 gWPArray +ASGNP4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 1132 +INDIRI4 +LSHI4 +ADDRLP4 1136 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 1140 +CNSTP4 0 +ASGNP4 +ADDRLP4 1140 +INDIRP4 +ARGP4 +ADDRLP4 1140 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 1132 +INDIRI4 +LSHI4 +ADDRLP4 1136 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 -1 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 1109 +;1108: +;1109: if (tr.fraction == 1) +ADDRLP4 0+8 +INDIRF4 +CNSTF4 1065353216 +NEF4 $495 +line 1110 +;1110: { +line 1111 +;1111: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $479 +JUMPV +LABELV $495 +line 1114 +;1112: } +;1113: +;1114: if (start_trace_index == tr.entityNum) +ADDRLP4 1084 +INDIRI4 +ADDRLP4 0+52 +INDIRI4 +NEI4 $498 +line 1115 +;1115: { +line 1116 +;1116: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $479 +JUMPV +LABELV $498 +line 1119 +;1117: } +;1118: +;1119: return 0; +CNSTI4 0 +RETI4 +LABELV $479 +endproc DoorBlockingSection 1144 28 +export RepairPaths +proc RepairPaths 108 12 +line 1123 +;1120:} +;1121: +;1122:int RepairPaths(void) +;1123:{ +line 1128 +;1124: int i; +;1125: int ctRet; +;1126: vec3_t a; +;1127: +;1128: if (!gWPNum) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 0 +NEI4 $502 +line 1129 +;1129: { +line 1130 +;1130: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $501 +JUMPV +LABELV $502 +line 1133 +;1131: } +;1132: +;1133: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1135 +;1134: +;1135: trap_Cvar_Update(&bot_wp_distconnect); +ADDRGP4 bot_wp_distconnect +ARGP4 +ADDRGP4 trap_Cvar_Update +CALLV +pop +line 1136 +;1136: trap_Cvar_Update(&bot_wp_visconnect); +ADDRGP4 bot_wp_visconnect +ARGP4 +ADDRGP4 trap_Cvar_Update +CALLV +pop +ADDRGP4 $505 +JUMPV +LABELV $504 +line 1139 +;1137: +;1138: while (i < gWPNum) +;1139: { +line 1140 +;1140: if (gWPArray[i] && gWPArray[i]->inuse && gWPArray[i+1] && gWPArray[i+1]->inuse) +ADDRLP4 20 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 24 +ADDRLP4 20 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 28 +CNSTU4 0 +ASGNU4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 28 +INDIRU4 +EQU4 $507 +ADDRLP4 32 +CNSTI4 12 +ASGNI4 +ADDRLP4 36 +CNSTI4 0 +ASGNI4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 36 +INDIRI4 +EQI4 $507 +ADDRLP4 20 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 28 +INDIRU4 +EQU4 $507 +ADDRLP4 20 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 36 +INDIRI4 +EQI4 $507 +line 1141 +;1141: { +line 1142 +;1142: VectorSubtract(gWPArray[i]->origin, gWPArray[i+1]->origin, a); +ADDRLP4 40 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 44 +ADDRLP4 40 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 44 +INDIRP4 +INDIRP4 +INDIRF4 +ADDRLP4 40 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 48 +CNSTI4 4 +ASGNI4 +ADDRLP4 4+4 +ADDRLP4 44 +INDIRP4 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 52 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 56 +CNSTI4 8 +ASGNI4 +ADDRLP4 4+8 +ADDRLP4 52 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 52 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1144 +;1143: +;1144: if (!(gWPArray[i+1]->flags & WPFLAG_NOVIS) && +ADDRLP4 64 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 68 +CNSTI4 28 +ASGNI4 +ADDRLP4 72 +CNSTI4 0 +ASGNI4 +ADDRLP4 64 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ADDP4 +INDIRI4 +CNSTI4 1024 +BANDI4 +ADDRLP4 72 +INDIRI4 +NEI4 $516 +ADDRLP4 64 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ADDP4 +INDIRI4 +CNSTI4 16 +BANDI4 +ADDRLP4 72 +INDIRI4 +NEI4 $516 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRLP4 76 +ADDRGP4 OpposingEnds +CALLI4 +ASGNI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 0 +NEI4 $516 +ADDRLP4 4 +ARGP4 +ADDRLP4 80 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 80 +INDIRF4 +CNSTF4 1137180672 +LEF4 $524 +ADDRGP4 bot_wp_distconnect+8 +INDIRF4 +CNSTF4 0 +NEF4 $523 +LABELV $524 +ADDRLP4 84 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 84 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 84 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 88 +ADDRGP4 OrgVisible +CALLI4 +ASGNI4 +ADDRLP4 88 +INDIRI4 +CNSTI4 0 +NEI4 $516 +ADDRGP4 bot_wp_visconnect+8 +INDIRF4 +CNSTF4 0 +EQF4 $516 +LABELV $523 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRLP4 96 +ADDRGP4 DoorBlockingSection +CALLI4 +ASGNI4 +ADDRLP4 96 +INDIRI4 +CNSTI4 0 +NEI4 $516 +line 1149 +;1145: !(gWPArray[i+1]->flags & WPFLAG_JUMP) && //don't calculate on jump points because they might not always want to be visible (in cases of force jumping) +;1146: !OpposingEnds(i, i+1) && +;1147: ((VectorLength(a) > 400 && bot_wp_distconnect.value) || (!OrgVisible(gWPArray[i]->origin, gWPArray[i+1]->origin, -1) && bot_wp_visconnect.value) ) && +;1148: !DoorBlockingSection(i, i+1)) +;1149: { +line 1150 +;1150: ctRet = ConnectTrail(i, i+1); +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRLP4 104 +ADDRGP4 ConnectTrail +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 104 +INDIRI4 +ASGNI4 +line 1155 +;1151: /*if (!ctRet) +;1152: { +;1153: return 0; +;1154: }*/ //we still want to write it.. +;1155: } +LABELV $516 +line 1156 +;1156: } +LABELV $507 +line 1158 +;1157: +;1158: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1159 +;1159: } +LABELV $505 +line 1138 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $504 +line 1161 +;1160: +;1161: return 1; +CNSTI4 1 +RETI4 +LABELV $501 +endproc RepairPaths 108 12 +export OrgVisibleCurve +proc OrgVisibleCurve 1100 28 +line 1165 +;1162:} +;1163: +;1164:int OrgVisibleCurve(vec3_t org1, vec3_t mins, vec3_t maxs, vec3_t org2, int ignore) +;1165:{ +line 1169 +;1166: trace_t tr; +;1167: vec3_t evenorg1; +;1168: +;1169: VectorCopy(org1, evenorg1); +ADDRLP4 1080 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 1170 +;1170: evenorg1[2] = org2[2]; +ADDRLP4 1080+8 +ADDRFP4 12 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +line 1172 +;1171: +;1172: trap_Trace(&tr, evenorg1, mins, maxs, org2, ignore, MASK_SOLID); +ADDRLP4 0 +ARGP4 +ADDRLP4 1080 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRFP4 16 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 1174 +;1173: +;1174: if (tr.fraction == 1 && !tr.startsolid && !tr.allsolid) +ADDRLP4 0+8 +INDIRF4 +CNSTF4 1065353216 +NEF4 $527 +ADDRLP4 1092 +CNSTI4 0 +ASGNI4 +ADDRLP4 0+4 +INDIRI4 +ADDRLP4 1092 +INDIRI4 +NEI4 $527 +ADDRLP4 0 +INDIRI4 +ADDRLP4 1092 +INDIRI4 +NEI4 $527 +line 1175 +;1175: { +line 1176 +;1176: trap_Trace(&tr, evenorg1, mins, maxs, org1, ignore, MASK_SOLID); +ADDRLP4 0 +ARGP4 +ADDRLP4 1080 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 16 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 1178 +;1177: +;1178: if (tr.fraction == 1 && !tr.startsolid && !tr.allsolid) +ADDRLP4 0+8 +INDIRF4 +CNSTF4 1065353216 +NEF4 $531 +ADDRLP4 1096 +CNSTI4 0 +ASGNI4 +ADDRLP4 0+4 +INDIRI4 +ADDRLP4 1096 +INDIRI4 +NEI4 $531 +ADDRLP4 0 +INDIRI4 +ADDRLP4 1096 +INDIRI4 +NEI4 $531 +line 1179 +;1179: { +line 1180 +;1180: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $525 +JUMPV +LABELV $531 +line 1182 +;1181: } +;1182: } +LABELV $527 +line 1184 +;1183: +;1184: return 0; +CNSTI4 0 +RETI4 +LABELV $525 +endproc OrgVisibleCurve 1100 28 +export CanForceJumpTo +proc CanForceJumpTo 104 20 +line 1188 +;1185:} +;1186: +;1187:int CanForceJumpTo(int baseindex, int testingindex, float distance) +;1188:{ +line 1191 +;1189: float heightdif; +;1190: vec3_t xy_base, xy_test, v, mins, maxs; +;1191: wpobject_t *wpBase = gWPArray[baseindex]; +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +line 1192 +;1192: wpobject_t *wpTest = gWPArray[testingindex]; +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +line 1194 +;1193: +;1194: mins[0] = -15; +ADDRLP4 48 +CNSTF4 3245342720 +ASGNF4 +line 1195 +;1195: mins[1] = -15; +ADDRLP4 48+4 +CNSTF4 3245342720 +ASGNF4 +line 1196 +;1196: mins[2] = -15; //-1 +ADDRLP4 48+8 +CNSTF4 3245342720 +ASGNF4 +line 1197 +;1197: maxs[0] = 15; +ADDRLP4 60 +CNSTF4 1097859072 +ASGNF4 +line 1198 +;1198: maxs[1] = 15; +ADDRLP4 60+4 +CNSTF4 1097859072 +ASGNF4 +line 1199 +;1199: maxs[2] = 15; //1 +ADDRLP4 60+8 +CNSTF4 1097859072 +ASGNF4 +line 1201 +;1200: +;1201: if (!wpBase || !wpBase->inuse || !wpTest || !wpTest->inuse) +ADDRLP4 76 +CNSTU4 0 +ASGNU4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 76 +INDIRU4 +EQU4 $544 +ADDRLP4 80 +CNSTI4 12 +ASGNI4 +ADDRLP4 84 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 84 +INDIRI4 +EQI4 $544 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 76 +INDIRU4 +EQU4 $544 +ADDRLP4 4 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 84 +INDIRI4 +NEI4 $540 +LABELV $544 +line 1202 +;1202: { +line 1203 +;1203: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $540 +line 1206 +;1204: } +;1205: +;1206: if (distance > 400) +ADDRFP4 8 +INDIRF4 +CNSTF4 1137180672 +LEF4 $545 +line 1207 +;1207: { +line 1208 +;1208: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $545 +line 1211 +;1209: } +;1210: +;1211: VectorCopy(wpBase->origin, xy_base); +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 1212 +;1212: VectorCopy(wpTest->origin, xy_test); +ADDRLP4 20 +ADDRLP4 4 +INDIRP4 +INDIRB +ASGNB 12 +line 1214 +;1213: +;1214: xy_base[2] = xy_test[2]; +ADDRLP4 8+8 +ADDRLP4 20+8 +INDIRF4 +ASGNF4 +line 1216 +;1215: +;1216: VectorSubtract(xy_base, xy_test, v); +ADDRLP4 36 +ADDRLP4 8 +INDIRF4 +ADDRLP4 20 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 36+4 +ADDRLP4 8+4 +INDIRF4 +ADDRLP4 20+4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 36+8 +ADDRLP4 8+8 +INDIRF4 +ADDRLP4 20+8 +INDIRF4 +SUBF4 +ASGNF4 +line 1218 +;1217: +;1218: if (VectorLength(v) > MAX_NEIGHBOR_LINK_DISTANCE) +ADDRLP4 36 +ARGP4 +ADDRLP4 92 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 92 +INDIRF4 +CNSTF4 1124073472 +LEF4 $555 +line 1219 +;1219: { +line 1220 +;1220: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $555 +line 1223 +;1221: } +;1222: +;1223: if ((int)wpBase->origin[2] < (int)wpTest->origin[2]) +ADDRLP4 96 +CNSTI4 8 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 96 +INDIRI4 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 96 +INDIRI4 +ADDP4 +INDIRF4 +CVFI4 4 +GEI4 $557 +line 1224 +;1224: { +line 1225 +;1225: heightdif = wpTest->origin[2] - wpBase->origin[2]; +ADDRLP4 100 +CNSTI4 8 +ASGNI4 +ADDRLP4 32 +ADDRLP4 4 +INDIRP4 +ADDRLP4 100 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 100 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1226 +;1226: } +ADDRGP4 $558 +JUMPV +LABELV $557 +line 1228 +;1227: else +;1228: { +line 1229 +;1229: return 0; //err.. +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $558 +line 1232 +;1230: } +;1231: +;1232: if (heightdif < 128) +ADDRLP4 32 +INDIRF4 +CNSTF4 1124073472 +GEF4 $559 +line 1233 +;1233: { //don't bother.. +line 1234 +;1234: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $559 +line 1237 +;1235: } +;1236: +;1237: if (heightdif > 512) +ADDRLP4 32 +INDIRF4 +CNSTF4 1140850688 +LEF4 $561 +line 1238 +;1238: { //too high +line 1239 +;1239: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $561 +line 1242 +;1240: } +;1241: +;1242: if (!OrgVisibleCurve(wpBase->origin, mins, maxs, wpTest->origin, -1)) +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 48 +ARGP4 +ADDRLP4 60 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 100 +ADDRGP4 OrgVisibleCurve +CALLI4 +ASGNI4 +ADDRLP4 100 +INDIRI4 +CNSTI4 0 +NEI4 $563 +line 1243 +;1243: { +line 1244 +;1244: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $563 +line 1247 +;1245: } +;1246: +;1247: if (heightdif > 400) +ADDRLP4 32 +INDIRF4 +CNSTF4 1137180672 +LEF4 $565 +line 1248 +;1248: { +line 1249 +;1249: return 3; +CNSTI4 3 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $565 +line 1251 +;1250: } +;1251: else if (heightdif > 256) +ADDRLP4 32 +INDIRF4 +CNSTF4 1132462080 +LEF4 $567 +line 1252 +;1252: { +line 1253 +;1253: return 2; +CNSTI4 2 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $567 +line 1256 +;1254: } +;1255: else +;1256: { +line 1257 +;1257: return 1; +CNSTI4 1 +RETI4 +LABELV $535 +endproc CanForceJumpTo 104 20 +export CalculatePaths +proc CalculatePaths 160 20 +line 1262 +;1258: } +;1259:} +;1260: +;1261:void CalculatePaths(void) +;1262:{ +line 1270 +;1263: int i; +;1264: int c; +;1265: int forceJumpable; +;1266: float nLDist; +;1267: vec3_t a; +;1268: vec3_t mins, maxs; +;1269: +;1270: if (!gWPNum) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 0 +NEI4 $570 +line 1271 +;1271: { +line 1272 +;1272: return; +ADDRGP4 $569 +JUMPV +LABELV $570 +line 1275 +;1273: } +;1274: +;1275: mins[0] = -15; +ADDRLP4 28 +CNSTF4 3245342720 +ASGNF4 +line 1276 +;1276: mins[1] = -15; +ADDRLP4 28+4 +CNSTF4 3245342720 +ASGNF4 +line 1277 +;1277: mins[2] = -15; //-1 +ADDRLP4 28+8 +CNSTF4 3245342720 +ASGNF4 +line 1278 +;1278: maxs[0] = 15; +ADDRLP4 40 +CNSTF4 1097859072 +ASGNF4 +line 1279 +;1279: maxs[1] = 15; +ADDRLP4 40+4 +CNSTF4 1097859072 +ASGNF4 +line 1280 +;1280: maxs[2] = 15; //1 +ADDRLP4 40+8 +CNSTF4 1097859072 +ASGNF4 +line 1283 +;1281: +;1282: //now clear out all the neighbor data before we recalculate +;1283: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $577 +JUMPV +LABELV $576 +line 1286 +;1284: +;1285: while (i < gWPNum) +;1286: { +line 1287 +;1287: if (gWPArray[i] && gWPArray[i]->inuse && gWPArray[i]->neighbornum) +ADDRLP4 52 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $579 +ADDRLP4 56 +CNSTI4 0 +ASGNI4 +ADDRLP4 52 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +ADDRLP4 56 +INDIRI4 +EQI4 $579 +ADDRLP4 52 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ADDRLP4 56 +INDIRI4 +EQI4 $579 +line 1288 +;1288: { +ADDRGP4 $582 +JUMPV +LABELV $581 +line 1290 +;1289: while (gWPArray[i]->neighbornum >= 0) +;1290: { +line 1291 +;1291: gWPArray[i]->neighbors[gWPArray[i]->neighbornum].num = 0; +ADDRLP4 60 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1292 +;1292: gWPArray[i]->neighbors[gWPArray[i]->neighbornum].forceJumpTo = 0; +ADDRLP4 64 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 64 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +CNSTI4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1293 +;1293: gWPArray[i]->neighbornum--; +ADDRLP4 68 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +ADDRLP4 68 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1294 +;1294: } +LABELV $582 +line 1289 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 0 +GEI4 $581 +line 1295 +;1295: gWPArray[i]->neighbornum = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1296 +;1296: } +LABELV $579 +line 1298 +;1297: +;1298: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1299 +;1299: } +LABELV $577 +line 1285 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $576 +line 1301 +;1300: +;1301: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $585 +JUMPV +LABELV $584 +line 1304 +;1302: +;1303: while (i < gWPNum) +;1304: { +line 1305 +;1305: if (gWPArray[i] && gWPArray[i]->inuse) +ADDRLP4 52 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $587 +ADDRLP4 52 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $587 +line 1306 +;1306: { +line 1307 +;1307: c = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $590 +JUMPV +LABELV $589 +line 1310 +;1308: +;1309: while (c < gWPNum) +;1310: { +line 1311 +;1311: if (gWPArray[c] && gWPArray[c]->inuse && i != c && +ADDRLP4 60 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $592 +ADDRLP4 60 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $592 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $592 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 68 +ADDRGP4 NotWithinRange +CALLI4 +ASGNI4 +ADDRLP4 68 +INDIRI4 +CNSTI4 0 +EQI4 $592 +line 1313 +;1312: NotWithinRange(i, c)) +;1313: { +line 1314 +;1314: VectorSubtract(gWPArray[i]->origin, gWPArray[c]->origin, a); +ADDRLP4 72 +CNSTI4 2 +ASGNI4 +ADDRLP4 76 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 80 +ADDRLP4 0 +INDIRI4 +ADDRLP4 72 +INDIRI4 +LSHI4 +ADDRLP4 76 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 84 +ADDRLP4 4 +INDIRI4 +ADDRLP4 72 +INDIRI4 +LSHI4 +ADDRLP4 76 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 80 +INDIRP4 +INDIRP4 +INDIRF4 +ADDRLP4 84 +INDIRP4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 88 +CNSTI4 4 +ASGNI4 +ADDRLP4 12+4 +ADDRLP4 80 +INDIRP4 +INDIRP4 +ADDRLP4 88 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 84 +INDIRP4 +INDIRP4 +ADDRLP4 88 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 92 +CNSTI4 2 +ASGNI4 +ADDRLP4 96 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 100 +CNSTI4 8 +ASGNI4 +ADDRLP4 12+8 +ADDRLP4 0 +INDIRI4 +ADDRLP4 92 +INDIRI4 +LSHI4 +ADDRLP4 96 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 100 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 92 +INDIRI4 +LSHI4 +ADDRLP4 96 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 100 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1316 +;1315: +;1316: nLDist = VectorLength(a); +ADDRLP4 12 +ARGP4 +ADDRLP4 104 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 24 +ADDRLP4 104 +INDIRF4 +ASGNF4 +line 1317 +;1317: forceJumpable = CanForceJumpTo(i, c, nLDist); +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 24 +INDIRF4 +ARGF4 +ADDRLP4 108 +ADDRGP4 CanForceJumpTo +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 108 +INDIRI4 +ASGNI4 +line 1319 +;1318: +;1319: if ((nLDist < MAX_NEIGHBOR_LINK_DISTANCE || forceJumpable) && +ADDRLP4 24 +INDIRF4 +CNSTF4 1124073472 +LTF4 $598 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $596 +LABELV $598 +ADDRLP4 112 +CNSTI4 2 +ASGNI4 +ADDRLP4 116 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 120 +CNSTI4 8 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 112 +INDIRI4 +LSHI4 +ADDRLP4 116 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 120 +INDIRI4 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 112 +INDIRI4 +LSHI4 +ADDRLP4 116 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 120 +INDIRI4 +ADDP4 +INDIRF4 +CVFI4 4 +EQI4 $599 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $596 +LABELV $599 +ADDRLP4 124 +CNSTI4 2 +ASGNI4 +ADDRLP4 128 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 124 +INDIRI4 +LSHI4 +ADDRLP4 128 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 28 +ARGP4 +ADDRLP4 40 +ARGP4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 124 +INDIRI4 +LSHI4 +ADDRLP4 128 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 132 +ADDRGP4 OrgVisibleBox +CALLI4 +ASGNI4 +ADDRLP4 136 +CNSTI4 0 +ASGNI4 +ADDRLP4 132 +INDIRI4 +ADDRLP4 136 +INDIRI4 +NEI4 $600 +ADDRLP4 8 +INDIRI4 +ADDRLP4 136 +INDIRI4 +EQI4 $596 +LABELV $600 +line 1322 +;1320: ((int)gWPArray[i]->origin[2] == (int)gWPArray[c]->origin[2] || forceJumpable) && +;1321: (OrgVisibleBox(gWPArray[i]->origin, mins, maxs, gWPArray[c]->origin, -1) || forceJumpable)) +;1322: { +line 1323 +;1323: gWPArray[i]->neighbors[gWPArray[i]->neighbornum].num = c; +ADDRLP4 140 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 140 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 140 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 1324 +;1324: if (forceJumpable && ((int)gWPArray[i]->origin[2] != (int)gWPArray[c]->origin[2] || nLDist < MAX_NEIGHBOR_LINK_DISTANCE)) +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $601 +ADDRLP4 144 +CNSTI4 2 +ASGNI4 +ADDRLP4 148 +ADDRGP4 gWPArray +ASGNP4 +ADDRLP4 152 +CNSTI4 8 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 144 +INDIRI4 +LSHI4 +ADDRLP4 148 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 152 +INDIRI4 +ADDP4 +INDIRF4 +CVFI4 4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 144 +INDIRI4 +LSHI4 +ADDRLP4 148 +INDIRP4 +ADDP4 +INDIRP4 +ADDRLP4 152 +INDIRI4 +ADDP4 +INDIRF4 +CVFI4 4 +NEI4 $603 +ADDRLP4 24 +INDIRF4 +CNSTF4 1124073472 +GEF4 $601 +LABELV $603 +line 1325 +;1325: { +line 1326 +;1326: gWPArray[i]->neighbors[gWPArray[i]->neighbornum].forceJumpTo = 999;//forceJumpable; //FJSR +ADDRLP4 156 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 156 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 156 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +CNSTI4 4 +ADDP4 +CNSTI4 999 +ASGNI4 +line 1327 +;1327: } +ADDRGP4 $602 +JUMPV +LABELV $601 +line 1329 +;1328: else +;1329: { +line 1330 +;1330: gWPArray[i]->neighbors[gWPArray[i]->neighbornum].forceJumpTo = 0; +ADDRLP4 156 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 156 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 156 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +CNSTI4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1331 +;1331: } +LABELV $602 +line 1332 +;1332: gWPArray[i]->neighbornum++; +ADDRLP4 156 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +ASGNP4 +ADDRLP4 156 +INDIRP4 +ADDRLP4 156 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1333 +;1333: } +LABELV $596 +line 1335 +;1334: +;1335: if (gWPArray[i]->neighbornum >= MAX_NEIGHBOR_SIZE) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 32 +LTI4 $604 +line 1336 +;1336: { +line 1337 +;1337: break; +ADDRGP4 $591 +JUMPV +LABELV $604 +line 1339 +;1338: } +;1339: } +LABELV $592 +line 1340 +;1340: c++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1341 +;1341: } +LABELV $590 +line 1309 +ADDRLP4 4 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $589 +LABELV $591 +line 1342 +;1342: } +LABELV $587 +line 1343 +;1343: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1344 +;1344: } +LABELV $585 +line 1303 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $584 +line 1345 +;1345:} +LABELV $569 +endproc CalculatePaths 160 20 +export GetObjectThatTargets +proc GetObjectThatTargets 8 12 +line 1348 +;1346: +;1347:gentity_t *GetObjectThatTargets(gentity_t *ent) +;1348:{ +line 1349 +;1349: gentity_t *next = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 1351 +;1350: +;1351: if (!ent->targetname) +ADDRFP4 0 +INDIRP4 +CNSTI4 588 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $607 +line 1352 +;1352: { +line 1353 +;1353: return NULL; +CNSTP4 0 +RETP4 +ADDRGP4 $606 +JUMPV +LABELV $607 +line 1356 +;1354: } +;1355: +;1356: next = G_Find( next, FOFS(target), ent->targetname ); +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 584 +ARGI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 588 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 G_Find +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1358 +;1357: +;1358: if (next) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $609 +line 1359 +;1359: { +line 1360 +;1360: return next; +ADDRLP4 0 +INDIRP4 +RETP4 +ADDRGP4 $606 +JUMPV +LABELV $609 +line 1363 +;1361: } +;1362: +;1363: return NULL; +CNSTP4 0 +RETP4 +LABELV $606 +endproc GetObjectThatTargets 8 12 +export CalculateSagaGoals +proc CalculateSagaGoals 92 8 +line 1367 +;1364:} +;1365: +;1366:void CalculateSagaGoals(void) +;1367:{ +line 1368 +;1368: int i = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 1369 +;1369: int looptracker = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1370 +;1370: int wpindex = 0; +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +line 1373 +;1371: vec3_t dif; +;1372: gentity_t *ent; +;1373: gentity_t *tent = NULL, *t2ent = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +ADDRLP4 4 +CNSTP4 0 +ASGNP4 +ADDRGP4 $613 +JUMPV +LABELV $612 +line 1376 +;1374: +;1375: while (i < MAX_GENTITIES) +;1376: { +line 1377 +;1377: ent = &g_entities[i]; +ADDRLP4 12 +CNSTI4 828 +ADDRLP4 16 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1379 +;1378: +;1379: tent = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 1381 +;1380: +;1381: if (ent && ent->classname && strcmp(ent->classname, "info_saga_objective") == 0) +ADDRLP4 40 +CNSTU4 0 +ASGNU4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +ADDRLP4 40 +INDIRU4 +EQU4 $615 +ADDRLP4 44 +ADDRLP4 12 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 44 +INDIRP4 +CVPU4 4 +ADDRLP4 40 +INDIRU4 +EQU4 $615 +ADDRLP4 44 +INDIRP4 +ARGP4 +ADDRGP4 $617 +ARGP4 +ADDRLP4 48 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $615 +line 1382 +;1382: { +line 1383 +;1383: tent = ent; +ADDRLP4 0 +ADDRLP4 12 +INDIRP4 +ASGNP4 +line 1384 +;1384: t2ent = GetObjectThatTargets(tent); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 52 +ADDRGP4 GetObjectThatTargets +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 52 +INDIRP4 +ASGNP4 +line 1385 +;1385: looptracker = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $619 +JUMPV +LABELV $618 +line 1388 +;1386: +;1387: while (t2ent && looptracker < 2048) +;1388: { //looptracker keeps us from getting stuck in case something is set up weird on this map +line 1389 +;1389: tent = t2ent; +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1390 +;1390: t2ent = GetObjectThatTargets(tent); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 56 +ADDRGP4 GetObjectThatTargets +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 56 +INDIRP4 +ASGNP4 +line 1391 +;1391: looptracker++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1392 +;1392: } +LABELV $619 +line 1387 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $621 +ADDRLP4 8 +INDIRI4 +CNSTI4 2048 +LTI4 $618 +LABELV $621 +line 1394 +;1393: +;1394: if (looptracker >= 2048) +ADDRLP4 8 +INDIRI4 +CNSTI4 2048 +LTI4 $622 +line 1395 +;1395: { //something unpleasent has happened +line 1396 +;1396: tent = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 1397 +;1397: break; +ADDRGP4 $614 +JUMPV +LABELV $622 +line 1399 +;1398: } +;1399: } +LABELV $615 +line 1401 +;1400: +;1401: if (tent && ent && tent != ent) +ADDRLP4 52 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ASGNU4 +ADDRLP4 56 +CNSTU4 0 +ASGNU4 +ADDRLP4 52 +INDIRU4 +ADDRLP4 56 +INDIRU4 +EQU4 $624 +ADDRLP4 60 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +ASGNU4 +ADDRLP4 60 +INDIRU4 +ADDRLP4 56 +INDIRU4 +EQU4 $624 +ADDRLP4 52 +INDIRU4 +ADDRLP4 60 +INDIRU4 +EQU4 $624 +line 1402 +;1402: { //tent should now be the object attached to the mission objective +line 1403 +;1403: dif[0] = (tent->r.absmax[0]+tent->r.absmin[0])/2; +ADDRLP4 24 +ADDRLP4 0 +INDIRP4 +CNSTI4 356 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 344 +ADDP4 +INDIRF4 +ADDF4 +CNSTF4 1073741824 +DIVF4 +ASGNF4 +line 1404 +;1404: dif[1] = (tent->r.absmax[1]+tent->r.absmin[1])/2; +ADDRLP4 24+4 +ADDRLP4 0 +INDIRP4 +CNSTI4 360 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 348 +ADDP4 +INDIRF4 +ADDF4 +CNSTF4 1073741824 +DIVF4 +ASGNF4 +line 1405 +;1405: dif[2] = (tent->r.absmax[2]+tent->r.absmin[2])/2; +ADDRLP4 24+8 +ADDRLP4 0 +INDIRP4 +CNSTI4 364 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 352 +ADDP4 +INDIRF4 +ADDF4 +CNSTF4 1073741824 +DIVF4 +ASGNF4 +line 1407 +;1406: +;1407: wpindex = GetNearestVisibleWP(dif, tent->s.number); +ADDRLP4 24 +ARGP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 76 +ADDRGP4 GetNearestVisibleWP +CALLI4 +ASGNI4 +ADDRLP4 20 +ADDRLP4 76 +INDIRI4 +ASGNI4 +line 1409 +;1408: +;1409: if (wpindex != -1 && gWPArray[wpindex] && gWPArray[wpindex]->inuse) +ADDRLP4 20 +INDIRI4 +CNSTI4 -1 +EQI4 $628 +ADDRLP4 84 +ADDRLP4 20 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 84 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $628 +ADDRLP4 84 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $628 +line 1410 +;1410: { //found the waypoint nearest the center of this objective-related object +line 1411 +;1411: if (ent->side == SAGATEAM_IMPERIAL) +ADDRLP4 12 +INDIRP4 +CNSTI4 440 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $630 +line 1412 +;1412: { +line 1413 +;1413: gWPArray[wpindex]->flags |= WPFLAG_SAGA_IMPERIALOBJ; +ADDRLP4 88 +ADDRLP4 20 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 88 +INDIRP4 +ADDRLP4 88 +INDIRP4 +INDIRI4 +CNSTI4 1048576 +BORI4 +ASGNI4 +line 1414 +;1414: } +ADDRGP4 $631 +JUMPV +LABELV $630 +line 1416 +;1415: else +;1416: { +line 1417 +;1417: gWPArray[wpindex]->flags |= WPFLAG_SAGA_REBELOBJ; +ADDRLP4 88 +ADDRLP4 20 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 88 +INDIRP4 +ADDRLP4 88 +INDIRP4 +INDIRI4 +CNSTI4 524288 +BORI4 +ASGNI4 +line 1418 +;1418: } +LABELV $631 +line 1420 +;1419: +;1420: gWPArray[wpindex]->associated_entity = tent->s.number; +ADDRLP4 20 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +line 1421 +;1421: } +LABELV $628 +line 1422 +;1422: } +LABELV $624 +line 1424 +;1423: +;1424: i++; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1425 +;1425: } +LABELV $613 +line 1375 +ADDRLP4 16 +INDIRI4 +CNSTI4 1024 +LTI4 $612 +LABELV $614 +line 1426 +;1426:} +LABELV $611 +endproc CalculateSagaGoals 92 8 +data +export botGlobalNavWeaponWeights +align 4 +LABELV botGlobalNavWeaponWeights +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1077936128 +byte 4 1084227584 +byte 4 1082130432 +byte 4 1086324736 +byte 4 1088421888 +byte 4 1090519040 +byte 4 1091567616 +byte 4 1077936128 +byte 4 1077936128 +byte 4 1077936128 +byte 4 0 +skip 4 +export GetNearestVisibleWPToItem +code +proc GetNearestVisibleWPToItem 100 20 +line 1449 +;1427: +;1428:float botGlobalNavWeaponWeights[WP_NUM_WEAPONS] = +;1429:{ +;1430: 0,//WP_NONE, +;1431: +;1432: 0,//WP_STUN_BATON, +;1433: 0,//WP_SABER, // NOTE: lots of code assumes this is the first weapon (... which is crap) so be careful -Ste. +;1434: 0,//WP_BRYAR_PISTOL, +;1435: 3,//WP_BLASTER, +;1436: 5,//WP_DISRUPTOR, +;1437: 4,//WP_BOWCASTER, +;1438: 6,//WP_REPEATER, +;1439: 7,//WP_DEMP2, +;1440: 8,//WP_FLECHETTE, +;1441: 9,//WP_ROCKET_LAUNCHER, +;1442: 3,//WP_THERMAL, +;1443: 3,//WP_TRIP_MINE, +;1444: 3,//WP_DET_PACK, +;1445: 0//WP_EMPLACED_GUN, +;1446:}; +;1447: +;1448:int GetNearestVisibleWPToItem(vec3_t org, int ignore) +;1449:{ +line 1456 +;1450: int i; +;1451: float bestdist; +;1452: float flLen; +;1453: int bestindex; +;1454: vec3_t a, mins, maxs; +;1455: +;1456: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1457 +;1457: bestdist = 64; //has to be less than 64 units to the item or it isn't safe enough +ADDRLP4 20 +CNSTF4 1115684864 +ASGNF4 +line 1458 +;1458: bestindex = -1; +ADDRLP4 48 +CNSTI4 -1 +ASGNI4 +line 1460 +;1459: +;1460: mins[0] = -15; +ADDRLP4 24 +CNSTF4 3245342720 +ASGNF4 +line 1461 +;1461: mins[1] = -15; +ADDRLP4 24+4 +CNSTF4 3245342720 +ASGNF4 +line 1462 +;1462: mins[2] = 0; +ADDRLP4 24+8 +CNSTF4 0 +ASGNF4 +line 1463 +;1463: maxs[0] = 15; +ADDRLP4 36 +CNSTF4 1097859072 +ASGNF4 +line 1464 +;1464: maxs[1] = 15; +ADDRLP4 36+4 +CNSTF4 1097859072 +ASGNF4 +line 1465 +;1465: maxs[2] = 0; +ADDRLP4 36+8 +CNSTF4 0 +ASGNF4 +ADDRGP4 $638 +JUMPV +LABELV $637 +line 1468 +;1466: +;1467: while (i < gWPNum) +;1468: { +line 1469 +;1469: if (gWPArray[i] && gWPArray[i]->inuse && +ADDRLP4 52 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $640 +ADDRLP4 52 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $640 +ADDRLP4 56 +CNSTI4 8 +ASGNI4 +ADDRLP4 60 +ADDRLP4 52 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 64 +CNSTF4 1097859072 +ASGNF4 +ADDRLP4 68 +ADDRFP4 0 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 60 +INDIRF4 +ADDRLP4 64 +INDIRF4 +SUBF4 +ADDRLP4 68 +INDIRF4 +GEF4 $640 +ADDRLP4 60 +INDIRF4 +ADDRLP4 64 +INDIRF4 +ADDF4 +ADDRLP4 68 +INDIRF4 +LEF4 $640 +line 1472 +;1470: gWPArray[i]->origin[2]-15 < org[2] && +;1471: gWPArray[i]->origin[2]+15 > org[2]) +;1472: { +line 1473 +;1473: VectorSubtract(org, gWPArray[i]->origin, a); +ADDRLP4 72 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 76 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 72 +INDIRP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 80 +CNSTI4 4 +ASGNI4 +ADDRLP4 4+4 +ADDRLP4 72 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 84 +CNSTI4 8 +ASGNI4 +ADDRLP4 4+8 +ADDRFP4 0 +INDIRP4 +ADDRLP4 84 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 84 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1474 +;1474: flLen = VectorLength(a); +ADDRLP4 4 +ARGP4 +ADDRLP4 88 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 88 +INDIRF4 +ASGNF4 +line 1476 +;1475: +;1476: if (flLen < bestdist && trap_InPVS(org, gWPArray[i]->origin) && OrgVisibleBox(org, mins, maxs, gWPArray[i]->origin, ignore)) +ADDRLP4 16 +INDIRF4 +ADDRLP4 20 +INDIRF4 +GEF4 $644 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 92 +ADDRGP4 trap_InPVS +CALLI4 +ASGNI4 +ADDRLP4 92 +INDIRI4 +CNSTI4 0 +EQI4 $644 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 24 +ARGP4 +ADDRLP4 36 +ARGP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 96 +ADDRGP4 OrgVisibleBox +CALLI4 +ASGNI4 +ADDRLP4 96 +INDIRI4 +CNSTI4 0 +EQI4 $644 +line 1477 +;1477: { +line 1478 +;1478: bestdist = flLen; +ADDRLP4 20 +ADDRLP4 16 +INDIRF4 +ASGNF4 +line 1479 +;1479: bestindex = i; +ADDRLP4 48 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1480 +;1480: } +LABELV $644 +line 1481 +;1481: } +LABELV $640 +line 1483 +;1482: +;1483: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1484 +;1484: } +LABELV $638 +line 1467 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $637 +line 1486 +;1485: +;1486: return bestindex; +ADDRLP4 48 +INDIRI4 +RETI4 +LABELV $632 +endproc GetNearestVisibleWPToItem 100 20 +export CalculateWeightGoals +proc CalculateWeightGoals 68 8 +line 1490 +;1487:} +;1488: +;1489:void CalculateWeightGoals(void) +;1490:{ //set waypoint weights depending on weapon and item placement +line 1491 +;1491: int i = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 1492 +;1492: int wpindex = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1496 +;1493: gentity_t *ent; +;1494: float weight; +;1495: +;1496: trap_Cvar_Update(&bot_wp_clearweight); +ADDRGP4 bot_wp_clearweight +ARGP4 +ADDRGP4 trap_Cvar_Update +CALLV +pop +line 1498 +;1497: +;1498: if (bot_wp_clearweight.integer) +ADDRGP4 bot_wp_clearweight+12 +INDIRI4 +CNSTI4 0 +EQI4 $647 +line 1499 +;1499: { //if set then flush out all weight/goal values before calculating them again +ADDRGP4 $651 +JUMPV +LABELV $650 +line 1501 +;1500: while (i < gWPNum) +;1501: { +line 1502 +;1502: if (gWPArray[i] && gWPArray[i]->inuse) +ADDRLP4 16 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $653 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $653 +line 1503 +;1503: { +line 1504 +;1504: gWPArray[i]->weight = 0; +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +CNSTF4 0 +ASGNF4 +line 1506 +;1505: +;1506: if (gWPArray[i]->flags & WPFLAG_GOALPOINT) +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +CNSTI4 65536 +BANDI4 +CNSTI4 0 +EQI4 $655 +line 1507 +;1507: { +line 1508 +;1508: gWPArray[i]->flags -= WPFLAG_GOALPOINT; +ADDRLP4 20 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 20 +INDIRP4 +INDIRI4 +CNSTI4 65536 +SUBI4 +ASGNI4 +line 1509 +;1509: } +LABELV $655 +line 1510 +;1510: } +LABELV $653 +line 1512 +;1511: +;1512: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1513 +;1513: } +LABELV $651 +line 1500 +ADDRLP4 4 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $650 +line 1514 +;1514: } +LABELV $647 +line 1516 +;1515: +;1516: i = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $658 +JUMPV +LABELV $657 +line 1519 +;1517: +;1518: while (i < MAX_GENTITIES) +;1519: { +line 1520 +;1520: ent = &g_entities[i]; +ADDRLP4 0 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1522 +;1521: +;1522: weight = 0; +ADDRLP4 12 +CNSTF4 0 +ASGNF4 +line 1524 +;1523: +;1524: if (ent && ent->classname) +ADDRLP4 20 +CNSTU4 0 +ASGNU4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 20 +INDIRU4 +EQU4 $660 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 20 +INDIRU4 +EQU4 $660 +line 1525 +;1525: { +line 1526 +;1526: if (strcmp(ent->classname, "item_seeker") == 0) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $664 +ARGP4 +ADDRLP4 24 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +NEI4 $662 +line 1527 +;1527: { +line 1528 +;1528: weight = 2; +ADDRLP4 12 +CNSTF4 1073741824 +ASGNF4 +line 1529 +;1529: } +ADDRGP4 $663 +JUMPV +LABELV $662 +line 1530 +;1530: else if (strcmp(ent->classname, "item_shield") == 0) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $667 +ARGP4 +ADDRLP4 28 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +NEI4 $665 +line 1531 +;1531: { +line 1532 +;1532: weight = 2; +ADDRLP4 12 +CNSTF4 1073741824 +ASGNF4 +line 1533 +;1533: } +ADDRGP4 $666 +JUMPV +LABELV $665 +line 1534 +;1534: else if (strcmp(ent->classname, "item_medpac") == 0) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $670 +ARGP4 +ADDRLP4 32 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +NEI4 $668 +line 1535 +;1535: { +line 1536 +;1536: weight = 2; +ADDRLP4 12 +CNSTF4 1073741824 +ASGNF4 +line 1537 +;1537: } +ADDRGP4 $669 +JUMPV +LABELV $668 +line 1538 +;1538: else if (strcmp(ent->classname, "item_sentry_gun") == 0) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $673 +ARGP4 +ADDRLP4 36 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 0 +NEI4 $671 +line 1539 +;1539: { +line 1540 +;1540: weight = 2; +ADDRLP4 12 +CNSTF4 1073741824 +ASGNF4 +line 1541 +;1541: } +ADDRGP4 $672 +JUMPV +LABELV $671 +line 1542 +;1542: else if (strcmp(ent->classname, "item_force_enlighten_dark") == 0) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $676 +ARGP4 +ADDRLP4 40 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 40 +INDIRI4 +CNSTI4 0 +NEI4 $674 +line 1543 +;1543: { +line 1544 +;1544: weight = 5; +ADDRLP4 12 +CNSTF4 1084227584 +ASGNF4 +line 1545 +;1545: } +ADDRGP4 $675 +JUMPV +LABELV $674 +line 1546 +;1546: else if (strcmp(ent->classname, "item_force_enlighten_light") == 0) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $679 +ARGP4 +ADDRLP4 44 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +NEI4 $677 +line 1547 +;1547: { +line 1548 +;1548: weight = 5; +ADDRLP4 12 +CNSTF4 1084227584 +ASGNF4 +line 1549 +;1549: } +ADDRGP4 $678 +JUMPV +LABELV $677 +line 1550 +;1550: else if (strcmp(ent->classname, "item_force_boon") == 0) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $682 +ARGP4 +ADDRLP4 48 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $680 +line 1551 +;1551: { +line 1552 +;1552: weight = 5; +ADDRLP4 12 +CNSTF4 1084227584 +ASGNF4 +line 1553 +;1553: } +ADDRGP4 $681 +JUMPV +LABELV $680 +line 1554 +;1554: else if (strcmp(ent->classname, "item_ysalimari") == 0) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $685 +ARGP4 +ADDRLP4 52 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 0 +NEI4 $683 +line 1555 +;1555: { +line 1556 +;1556: weight = 2; +ADDRLP4 12 +CNSTF4 1073741824 +ASGNF4 +line 1557 +;1557: } +ADDRGP4 $684 +JUMPV +LABELV $683 +line 1558 +;1558: else if (strstr(ent->classname, "weapon_") && ent->item) +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $688 +ARGP4 +ADDRLP4 56 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 60 +CNSTU4 0 +ASGNU4 +ADDRLP4 56 +INDIRP4 +CVPU4 4 +ADDRLP4 60 +INDIRU4 +EQU4 $686 +ADDRLP4 0 +INDIRP4 +CNSTI4 824 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 60 +INDIRU4 +EQU4 $686 +line 1559 +;1559: { +line 1560 +;1560: weight = botGlobalNavWeaponWeights[ent->item->giTag]; +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +CNSTI4 824 +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 botGlobalNavWeaponWeights +ADDP4 +INDIRF4 +ASGNF4 +line 1561 +;1561: } +ADDRGP4 $687 +JUMPV +LABELV $686 +line 1562 +;1562: else if (ent->item && ent->item->giType == IT_AMMO) +ADDRLP4 64 +ADDRLP4 0 +INDIRP4 +CNSTI4 824 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $689 +ADDRLP4 64 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $689 +line 1563 +;1563: { +line 1564 +;1564: weight = 3; +ADDRLP4 12 +CNSTF4 1077936128 +ASGNF4 +line 1565 +;1565: } +LABELV $689 +LABELV $687 +LABELV $684 +LABELV $681 +LABELV $678 +LABELV $675 +LABELV $672 +LABELV $669 +LABELV $666 +LABELV $663 +line 1566 +;1566: } +LABELV $660 +line 1568 +;1567: +;1568: if (ent && weight) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $691 +ADDRLP4 12 +INDIRF4 +CNSTF4 0 +EQF4 $691 +line 1569 +;1569: { +line 1570 +;1570: wpindex = GetNearestVisibleWPToItem(ent->s.pos.trBase, ent->s.number); +ADDRLP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 28 +ADDRGP4 GetNearestVisibleWPToItem +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 28 +INDIRI4 +ASGNI4 +line 1572 +;1571: +;1572: if (wpindex != -1 && gWPArray[wpindex] && gWPArray[wpindex]->inuse) +ADDRLP4 8 +INDIRI4 +CNSTI4 -1 +EQI4 $693 +ADDRLP4 36 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $693 +ADDRLP4 36 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $693 +line 1573 +;1573: { //found the waypoint nearest the center of this object +line 1574 +;1574: gWPArray[wpindex]->weight = weight; +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 1575 +;1575: gWPArray[wpindex]->flags |= WPFLAG_GOALPOINT; +ADDRLP4 40 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 40 +INDIRP4 +INDIRI4 +CNSTI4 65536 +BORI4 +ASGNI4 +line 1576 +;1576: gWPArray[wpindex]->associated_entity = ent->s.number; +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +line 1577 +;1577: } +LABELV $693 +line 1578 +;1578: } +LABELV $691 +line 1580 +;1579: +;1580: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1581 +;1581: } +LABELV $658 +line 1518 +ADDRLP4 4 +INDIRI4 +CNSTI4 1024 +LTI4 $657 +line 1582 +;1582:} +LABELV $646 +endproc CalculateWeightGoals 68 8 +export CalculateJumpRoutes +proc CalculateJumpRoutes 40 0 +line 1585 +;1583: +;1584:void CalculateJumpRoutes(void) +;1585:{ +line 1586 +;1586: int i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1587 +;1587: float nheightdif = 0; +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +line 1588 +;1588: float pheightdif = 0; +ADDRLP4 4 +CNSTF4 0 +ASGNF4 +ADDRGP4 $697 +JUMPV +LABELV $696 +line 1591 +;1589: +;1590: while (i < gWPNum) +;1591: { +line 1592 +;1592: if (gWPArray[i] && gWPArray[i]->inuse) +ADDRLP4 12 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $699 +ADDRLP4 12 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $699 +line 1593 +;1593: { +line 1594 +;1594: if (gWPArray[i]->flags & WPFLAG_JUMP) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +CNSTI4 16 +BANDI4 +CNSTI4 0 +EQI4 $701 +line 1595 +;1595: { +line 1596 +;1596: nheightdif = 0; +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +line 1597 +;1597: pheightdif = 0; +ADDRLP4 4 +CNSTF4 0 +ASGNF4 +line 1599 +;1598: +;1599: gWPArray[i]->forceJumpTo = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1601 +;1600: +;1601: if (gWPArray[i-1] && gWPArray[i-1]->inuse && (gWPArray[i-1]->origin[2]+16) < gWPArray[i]->origin[2]) +ADDRLP4 16 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +ADDRGP4 gWPArray-4 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $703 +ADDRLP4 16 +INDIRI4 +ADDRGP4 gWPArray-4 +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $703 +ADDRLP4 20 +CNSTI4 8 +ASGNI4 +ADDRLP4 16 +INDIRI4 +ADDRGP4 gWPArray-4 +ADDP4 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +CNSTF4 1098907648 +ADDF4 +ADDRLP4 16 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +GEF4 $703 +line 1602 +;1602: { +line 1603 +;1603: nheightdif = (gWPArray[i]->origin[2] - gWPArray[i-1]->origin[2]); +ADDRLP4 24 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 28 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 24 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 24 +INDIRI4 +ADDRGP4 gWPArray-4 +ADDP4 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1604 +;1604: } +LABELV $703 +line 1606 +;1605: +;1606: if (gWPArray[i+1] && gWPArray[i+1]->inuse && (gWPArray[i+1]->origin[2]+16) < gWPArray[i]->origin[2]) +ADDRLP4 24 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $709 +ADDRLP4 24 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $709 +ADDRLP4 28 +CNSTI4 8 +ASGNI4 +ADDRLP4 24 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRF4 +CNSTF4 1098907648 +ADDF4 +ADDRLP4 24 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRF4 +GEF4 $709 +line 1607 +;1607: { +line 1608 +;1608: pheightdif = (gWPArray[i]->origin[2] - gWPArray[i+1]->origin[2]); +ADDRLP4 32 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 36 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 32 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 32 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1609 +;1609: } +LABELV $709 +line 1611 +;1610: +;1611: if (nheightdif > pheightdif) +ADDRLP4 8 +INDIRF4 +ADDRLP4 4 +INDIRF4 +LEF4 $715 +line 1612 +;1612: { +line 1613 +;1613: pheightdif = nheightdif; +ADDRLP4 4 +ADDRLP4 8 +INDIRF4 +ASGNF4 +line 1614 +;1614: } +LABELV $715 +line 1616 +;1615: +;1616: if (pheightdif) +ADDRLP4 4 +INDIRF4 +CNSTF4 0 +EQF4 $717 +line 1617 +;1617: { +line 1618 +;1618: if (pheightdif > 500) +ADDRLP4 4 +INDIRF4 +CNSTF4 1140457472 +LEF4 $719 +line 1619 +;1619: { +line 1620 +;1620: gWPArray[i]->forceJumpTo = 999; //FORCE_LEVEL_3; //FJSR +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTI4 999 +ASGNI4 +line 1621 +;1621: } +ADDRGP4 $720 +JUMPV +LABELV $719 +line 1622 +;1622: else if (pheightdif > 256) +ADDRLP4 4 +INDIRF4 +CNSTF4 1132462080 +LEF4 $721 +line 1623 +;1623: { +line 1624 +;1624: gWPArray[i]->forceJumpTo = 999; //FORCE_LEVEL_2; //FJSR +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTI4 999 +ASGNI4 +line 1625 +;1625: } +ADDRGP4 $722 +JUMPV +LABELV $721 +line 1626 +;1626: else if (pheightdif > 128) +ADDRLP4 4 +INDIRF4 +CNSTF4 1124073472 +LEF4 $723 +line 1627 +;1627: { +line 1628 +;1628: gWPArray[i]->forceJumpTo = 999; //FORCE_LEVEL_1; //FJSR +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTI4 999 +ASGNI4 +line 1629 +;1629: } +LABELV $723 +LABELV $722 +LABELV $720 +line 1630 +;1630: } +LABELV $717 +line 1631 +;1631: } +LABELV $701 +line 1632 +;1632: } +LABELV $699 +line 1634 +;1633: +;1634: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1635 +;1635: } +LABELV $697 +line 1590 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $696 +line 1636 +;1636:} +LABELV $695 +endproc CalculateJumpRoutes 40 0 +export LoadPathData +proc LoadPathData 416 16 +line 1639 +;1637: +;1638:int LoadPathData(const char *filename) +;1639:{ +line 1649 +;1640: fileHandle_t f; +;1641: char *fileString; +;1642: char *currentVar; +;1643: char *routePath; +;1644: wpobject_t thiswp; +;1645: int len; +;1646: int i, i_cv; +;1647: int nei_num; +;1648: +;1649: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1650 +;1650: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1652 +;1651: +;1652: routePath = (char *)B_TempAlloc(1024); +CNSTI4 1024 +ARGI4 +ADDRLP4 332 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 328 +ADDRLP4 332 +INDIRP4 +ASGNP4 +line 1654 +;1653: +;1654: Com_sprintf(routePath, 1024, "botroutes/%s.wnt\0", filename); +ADDRLP4 328 +INDIRP4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 $726 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 1656 +;1655: +;1656: len = trap_FS_FOpenFile(routePath, &f, FS_READ); +ADDRLP4 328 +INDIRP4 +ARGP4 +ADDRLP4 324 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 336 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 320 +ADDRLP4 336 +INDIRI4 +ASGNI4 +line 1658 +;1657: +;1658: B_TempFree(1024); //routePath +CNSTI4 1024 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 1660 +;1659: +;1660: if (!f) +ADDRLP4 324 +INDIRI4 +CNSTI4 0 +NEI4 $727 +line 1661 +;1661: { +line 1662 +;1662: G_Printf(S_COLOR_YELLOW "Bot route data not found\n"); +ADDRGP4 $729 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 1663 +;1663: return 2; +CNSTI4 2 +RETI4 +ADDRGP4 $725 +JUMPV +LABELV $727 +line 1666 +;1664: } +;1665: +;1666: if (len >= 524288) +ADDRLP4 320 +INDIRI4 +CNSTI4 524288 +LTI4 $730 +line 1667 +;1667: { +line 1668 +;1668: G_Printf(S_COLOR_RED "Route file exceeds maximum length\n"); +ADDRGP4 $732 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 1669 +;1669: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $725 +JUMPV +LABELV $730 +line 1672 +;1670: } +;1671: +;1672: fileString = (char *)B_TempAlloc(524288); +CNSTI4 524288 +ARGI4 +ADDRLP4 340 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 340 +INDIRP4 +ASGNP4 +line 1673 +;1673: currentVar = (char *)B_TempAlloc(2048); +CNSTI4 2048 +ARGI4 +ADDRLP4 344 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 344 +INDIRP4 +ASGNP4 +line 1675 +;1674: +;1675: trap_FS_Read(fileString, len, f); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 320 +INDIRI4 +ARGI4 +ADDRLP4 324 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 1677 +;1676: +;1677: if (fileString[i] == 'l') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 108 +NEI4 $733 +line 1678 +;1678: { //contains a "levelflags" entry.. +line 1680 +;1679: char readLFlags[64]; +;1680: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $736 +JUMPV +LABELV $735 +line 1683 +;1681: +;1682: while (fileString[i] != ' ') +;1683: { +line 1684 +;1684: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1685 +;1685: } +LABELV $736 +line 1682 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $735 +line 1686 +;1686: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $739 +JUMPV +LABELV $738 +line 1688 +;1687: while (fileString[i] != '\n') +;1688: { +line 1689 +;1689: readLFlags[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 348 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1690 +;1690: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1691 +;1691: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1692 +;1692: } +LABELV $739 +line 1687 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 10 +NEI4 $738 +line 1693 +;1693: readLFlags[i_cv] = 0; +ADDRLP4 8 +INDIRI4 +ADDRLP4 348 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1694 +;1694: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1696 +;1695: +;1696: gLevelFlags = atoi(readLFlags); +ADDRLP4 348 +ARGP4 +ADDRLP4 412 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRGP4 gLevelFlags +ADDRLP4 412 +INDIRI4 +ASGNI4 +line 1697 +;1697: } +ADDRGP4 $742 +JUMPV +LABELV $733 +line 1699 +;1698: else +;1699: { +line 1700 +;1700: gLevelFlags = 0; +ADDRGP4 gLevelFlags +CNSTI4 0 +ASGNI4 +line 1701 +;1701: } +ADDRGP4 $742 +JUMPV +LABELV $741 +line 1704 +;1702: +;1703: while (i < len) +;1704: { +line 1705 +;1705: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1707 +;1706: +;1707: thiswp.index = 0; +ADDRLP4 16+16 +CNSTI4 0 +ASGNI4 +line 1708 +;1708: thiswp.flags = 0; +ADDRLP4 16+28 +CNSTI4 0 +ASGNI4 +line 1709 +;1709: thiswp.inuse = 0; +ADDRLP4 16+12 +CNSTI4 0 +ASGNI4 +line 1710 +;1710: thiswp.neighbornum = 0; +ADDRLP4 16+40 +CNSTI4 0 +ASGNI4 +line 1711 +;1711: thiswp.origin[0] = 0; +ADDRLP4 16 +CNSTF4 0 +ASGNF4 +line 1712 +;1712: thiswp.origin[1] = 0; +ADDRLP4 16+4 +CNSTF4 0 +ASGNF4 +line 1713 +;1713: thiswp.origin[2] = 0; +ADDRLP4 16+8 +CNSTF4 0 +ASGNF4 +line 1714 +;1714: thiswp.weight = 0; +ADDRLP4 16+20 +CNSTF4 0 +ASGNF4 +line 1715 +;1715: thiswp.associated_entity = ENTITYNUM_NONE; +ADDRLP4 16+32 +CNSTI4 1023 +ASGNI4 +line 1716 +;1716: thiswp.forceJumpTo = 0; +ADDRLP4 16+36 +CNSTI4 0 +ASGNI4 +line 1717 +;1717: thiswp.disttonext = 0; +ADDRLP4 16+24 +CNSTF4 0 +ASGNF4 +line 1718 +;1718: nei_num = 0; +ADDRLP4 316 +CNSTI4 0 +ASGNI4 +ADDRGP4 $755 +JUMPV +LABELV $754 +line 1721 +;1719: +;1720: while (nei_num < MAX_NEIGHBOR_SIZE) +;1721: { +line 1722 +;1722: thiswp.neighbors[nei_num].num = 0; +ADDRLP4 316 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 16+44 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1723 +;1723: thiswp.neighbors[nei_num].forceJumpTo = 0; +ADDRLP4 316 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 16+44+4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1725 +;1724: +;1725: nei_num++; +ADDRLP4 316 +ADDRLP4 316 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1726 +;1726: } +LABELV $755 +line 1720 +ADDRLP4 316 +INDIRI4 +CNSTI4 32 +LTI4 $754 +ADDRGP4 $761 +JUMPV +LABELV $760 +line 1729 +;1727: +;1728: while (fileString[i] != ' ') +;1729: { +line 1730 +;1730: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1731 +;1731: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1732 +;1732: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1733 +;1733: } +LABELV $761 +line 1728 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $760 +line 1734 +;1734: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1736 +;1735: +;1736: thiswp.index = atoi(currentVar); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 348 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16+16 +ADDRLP4 348 +INDIRI4 +ASGNI4 +line 1738 +;1737: +;1738: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1739 +;1739: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $765 +JUMPV +LABELV $764 +line 1742 +;1740: +;1741: while (fileString[i] != ' ') +;1742: { +line 1743 +;1743: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1744 +;1744: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1745 +;1745: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1746 +;1746: } +LABELV $765 +line 1741 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $764 +line 1747 +;1747: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1749 +;1748: +;1749: thiswp.flags = atoi(currentVar); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 352 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16+28 +ADDRLP4 352 +INDIRI4 +ASGNI4 +line 1751 +;1750: +;1751: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1752 +;1752: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $769 +JUMPV +LABELV $768 +line 1755 +;1753: +;1754: while (fileString[i] != ' ') +;1755: { +line 1756 +;1756: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1757 +;1757: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1758 +;1758: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1759 +;1759: } +LABELV $769 +line 1754 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $768 +line 1760 +;1760: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1762 +;1761: +;1762: thiswp.weight = atof(currentVar); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 356 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 16+20 +ADDRLP4 356 +INDIRF4 +ASGNF4 +line 1764 +;1763: +;1764: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1765 +;1765: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1766 +;1766: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $773 +JUMPV +LABELV $772 +line 1769 +;1767: +;1768: while (fileString[i] != ' ') +;1769: { +line 1770 +;1770: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1771 +;1771: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1772 +;1772: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1773 +;1773: } +LABELV $773 +line 1768 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $772 +line 1774 +;1774: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1776 +;1775: +;1776: thiswp.origin[0] = atof(currentVar); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 360 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 360 +INDIRF4 +ASGNF4 +line 1778 +;1777: +;1778: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1779 +;1779: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $776 +JUMPV +LABELV $775 +line 1782 +;1780: +;1781: while (fileString[i] != ' ') +;1782: { +line 1783 +;1783: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1784 +;1784: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1785 +;1785: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1786 +;1786: } +LABELV $776 +line 1781 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $775 +line 1787 +;1787: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1789 +;1788: +;1789: thiswp.origin[1] = atof(currentVar); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 364 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 16+4 +ADDRLP4 364 +INDIRF4 +ASGNF4 +line 1791 +;1790: +;1791: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1792 +;1792: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $780 +JUMPV +LABELV $779 +line 1795 +;1793: +;1794: while (fileString[i] != ')') +;1795: { +line 1796 +;1796: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1797 +;1797: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1798 +;1798: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1799 +;1799: } +LABELV $780 +line 1794 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 41 +NEI4 $779 +line 1800 +;1800: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1802 +;1801: +;1802: thiswp.origin[2] = atof(currentVar); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 368 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 16+8 +ADDRLP4 368 +INDIRF4 +ASGNF4 +line 1804 +;1803: +;1804: i += 4; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +ADDI4 +ASGNI4 +ADDRGP4 $784 +JUMPV +LABELV $783 +line 1807 +;1805: +;1806: while (fileString[i] != '}') +;1807: { +line 1808 +;1808: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $787 +JUMPV +LABELV $786 +line 1810 +;1809: while (fileString[i] != ' ' && fileString[i] != '-') +;1810: { +line 1811 +;1811: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1812 +;1812: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1813 +;1813: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1814 +;1814: } +LABELV $787 +line 1809 +ADDRLP4 372 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 372 +INDIRI4 +CNSTI4 32 +EQI4 $789 +ADDRLP4 372 +INDIRI4 +CNSTI4 45 +NEI4 $786 +LABELV $789 +line 1815 +;1815: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1817 +;1816: +;1817: thiswp.neighbors[thiswp.neighbornum].num = atoi(currentVar); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 376 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16+40 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 16+44 +ADDP4 +ADDRLP4 376 +INDIRI4 +ASGNI4 +line 1819 +;1818: +;1819: if (fileString[i] == '-') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 45 +NEI4 $792 +line 1820 +;1820: { +line 1821 +;1821: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1822 +;1822: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $795 +JUMPV +LABELV $794 +line 1825 +;1823: +;1824: while (fileString[i] != ' ') +;1825: { +line 1826 +;1826: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1827 +;1827: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1828 +;1828: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1829 +;1829: } +LABELV $795 +line 1824 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $794 +line 1830 +;1830: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1832 +;1831: +;1832: thiswp.neighbors[thiswp.neighbornum].forceJumpTo = 999; //atoi(currentVar); //FJSR +ADDRLP4 16+40 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 16+44+4 +ADDP4 +CNSTI4 999 +ASGNI4 +line 1833 +;1833: } +ADDRGP4 $793 +JUMPV +LABELV $792 +line 1835 +;1834: else +;1835: { +line 1836 +;1836: thiswp.neighbors[thiswp.neighbornum].forceJumpTo = 0; +ADDRLP4 16+40 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 16+44+4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1837 +;1837: } +LABELV $793 +line 1839 +;1838: +;1839: thiswp.neighbornum++; +ADDRLP4 16+40 +ADDRLP4 16+40 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1841 +;1840: +;1841: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1842 +;1842: } +LABELV $784 +line 1806 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 125 +NEI4 $783 +line 1844 +;1843: +;1844: i_cv = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1845 +;1845: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1846 +;1846: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $805 +JUMPV +LABELV $804 +line 1849 +;1847: +;1848: while (fileString[i] != '\n') +;1849: { +line 1850 +;1850: currentVar[i_cv] = fileString[i]; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 1851 +;1851: i_cv++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1852 +;1852: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1853 +;1853: } +LABELV $805 +line 1848 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 10 +NEI4 $804 +line 1854 +;1854: currentVar[i_cv] = '\0'; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1856 +;1855: +;1856: thiswp.disttonext = atof(currentVar); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 372 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 16+24 +ADDRLP4 372 +INDIRF4 +ASGNF4 +line 1858 +;1857: +;1858: CreateNewWP_FromObject(&thiswp); +ADDRLP4 16 +ARGP4 +ADDRGP4 CreateNewWP_FromObject +CALLV +pop +line 1859 +;1859: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1860 +;1860: } +LABELV $742 +line 1703 +ADDRLP4 0 +INDIRI4 +ADDRLP4 320 +INDIRI4 +LTI4 $741 +line 1862 +;1861: +;1862: B_TempFree(524288); //fileString +CNSTI4 524288 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 1863 +;1863: B_TempFree(2048); //currentVar +CNSTI4 2048 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 1865 +;1864: +;1865: trap_FS_FCloseFile(f); +ADDRLP4 324 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 1867 +;1866: +;1867: if (g_gametype.integer == GT_SAGA) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 6 +NEI4 $808 +line 1868 +;1868: { +line 1869 +;1869: CalculateSagaGoals(); +ADDRGP4 CalculateSagaGoals +CALLV +pop +line 1870 +;1870: } +LABELV $808 +line 1872 +;1871: +;1872: CalculateWeightGoals(); +ADDRGP4 CalculateWeightGoals +CALLV +pop +line 1876 +;1873: //calculate weights for idle activity goals when +;1874: //the bot has absolutely nothing else to do +;1875: +;1876: CalculateJumpRoutes(); +ADDRGP4 CalculateJumpRoutes +CALLV +pop +line 1880 +;1877: //Look at jump points and mark them as requiring +;1878: //force jumping as needed +;1879: +;1880: return 1; +CNSTI4 1 +RETI4 +LABELV $725 +endproc LoadPathData 416 16 +export FlagObjects +proc FlagObjects 1172 28 +line 1884 +;1881:} +;1882: +;1883:void FlagObjects(void) +;1884:{ +line 1885 +;1885: int i = 0, bestindex = 0, found = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRLP4 1140 +CNSTI4 0 +ASGNI4 +ADDRLP4 1144 +CNSTI4 0 +ASGNI4 +line 1886 +;1886: float bestdist = 999999, tlen = 0; +ADDRLP4 1112 +CNSTF4 1232348144 +ASGNF4 +ADDRLP4 28 +CNSTF4 0 +ASGNF4 +line 1891 +;1887: gentity_t *flag_red, *flag_blue, *ent; +;1888: vec3_t a, mins, maxs; +;1889: trace_t tr; +;1890: +;1891: flag_red = NULL; +ADDRLP4 20 +CNSTP4 0 +ASGNP4 +line 1892 +;1892: flag_blue = NULL; +ADDRLP4 24 +CNSTP4 0 +ASGNP4 +line 1894 +;1893: +;1894: mins[0] = -15; +ADDRLP4 1116 +CNSTF4 3245342720 +ASGNF4 +line 1895 +;1895: mins[1] = -15; +ADDRLP4 1116+4 +CNSTF4 3245342720 +ASGNF4 +line 1896 +;1896: mins[2] = -5; +ADDRLP4 1116+8 +CNSTF4 3231711232 +ASGNF4 +line 1897 +;1897: maxs[0] = 15; +ADDRLP4 1128 +CNSTF4 1097859072 +ASGNF4 +line 1898 +;1898: maxs[1] = 15; +ADDRLP4 1128+4 +CNSTF4 1097859072 +ASGNF4 +line 1899 +;1899: maxs[2] = 5; +ADDRLP4 1128+8 +CNSTF4 1084227584 +ASGNF4 +ADDRGP4 $817 +JUMPV +LABELV $816 +line 1902 +;1900: +;1901: while (i < MAX_GENTITIES) +;1902: { +line 1903 +;1903: ent = &g_entities[i]; +ADDRLP4 4 +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1905 +;1904: +;1905: if (ent && ent->inuse && ent->classname) +ADDRLP4 1152 +CNSTU4 0 +ASGNU4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 1152 +INDIRU4 +EQU4 $819 +ADDRLP4 4 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $819 +ADDRLP4 4 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 1152 +INDIRU4 +EQU4 $819 +line 1906 +;1906: { +line 1907 +;1907: if (!flag_red && strcmp(ent->classname, "team_CTF_redflag") == 0) +ADDRLP4 20 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $821 +ADDRLP4 4 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $823 +ARGP4 +ADDRLP4 1156 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 1156 +INDIRI4 +CNSTI4 0 +NEI4 $821 +line 1908 +;1908: { +line 1909 +;1909: flag_red = ent; +ADDRLP4 20 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1910 +;1910: } +ADDRGP4 $822 +JUMPV +LABELV $821 +line 1911 +;1911: else if (!flag_blue && strcmp(ent->classname, "team_CTF_blueflag") == 0) +ADDRLP4 24 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $824 +ADDRLP4 4 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $826 +ARGP4 +ADDRLP4 1160 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 1160 +INDIRI4 +CNSTI4 0 +NEI4 $824 +line 1912 +;1912: { +line 1913 +;1913: flag_blue = ent; +ADDRLP4 24 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1914 +;1914: } +LABELV $824 +LABELV $822 +line 1916 +;1915: +;1916: if (flag_red && flag_blue) +ADDRLP4 1164 +CNSTU4 0 +ASGNU4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +ADDRLP4 1164 +INDIRU4 +EQU4 $827 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 1164 +INDIRU4 +EQU4 $827 +line 1917 +;1917: { +line 1918 +;1918: break; +ADDRGP4 $818 +JUMPV +LABELV $827 +line 1920 +;1919: } +;1920: } +LABELV $819 +line 1922 +;1921: +;1922: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1923 +;1923: } +LABELV $817 +line 1901 +ADDRLP4 0 +INDIRI4 +CNSTI4 1024 +LTI4 $816 +LABELV $818 +line 1925 +;1924: +;1925: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1927 +;1926: +;1927: if (!flag_red || !flag_blue) +ADDRLP4 1148 +CNSTU4 0 +ASGNU4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +ADDRLP4 1148 +INDIRU4 +EQU4 $831 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 1148 +INDIRU4 +NEU4 $833 +LABELV $831 +line 1928 +;1928: { +line 1929 +;1929: return; +ADDRGP4 $811 +JUMPV +LABELV $832 +line 1933 +;1930: } +;1931: +;1932: while (i < gWPNum) +;1933: { +line 1934 +;1934: if (gWPArray[i] && gWPArray[i]->inuse) +ADDRLP4 1152 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 1152 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $835 +ADDRLP4 1152 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $835 +line 1935 +;1935: { +line 1936 +;1936: VectorSubtract(flag_red->s.pos.trBase, gWPArray[i]->origin, a); +ADDRLP4 1160 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 20 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 1160 +INDIRP4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 8+4 +ADDRLP4 20 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 1160 +INDIRP4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 8+8 +ADDRLP4 20 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1937 +;1937: tlen = VectorLength(a); +ADDRLP4 8 +ARGP4 +ADDRLP4 1164 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 28 +ADDRLP4 1164 +INDIRF4 +ASGNF4 +line 1939 +;1938: +;1939: if (tlen < bestdist) +ADDRLP4 28 +INDIRF4 +ADDRLP4 1112 +INDIRF4 +GEF4 $839 +line 1940 +;1940: { +line 1941 +;1941: trap_Trace(&tr, flag_red->s.pos.trBase, mins, maxs, gWPArray[i]->origin, flag_red->s.number, MASK_SOLID); +ADDRLP4 32 +ARGP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 24 +ADDP4 +ARGP4 +ADDRLP4 1116 +ARGP4 +ADDRLP4 1128 +ARGP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 20 +INDIRP4 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 1943 +;1942: +;1943: if (tr.fraction == 1 || tr.entityNum == flag_red->s.number) +ADDRLP4 32+8 +INDIRF4 +CNSTF4 1065353216 +EQF4 $845 +ADDRLP4 32+52 +INDIRI4 +ADDRLP4 20 +INDIRP4 +INDIRI4 +NEI4 $841 +LABELV $845 +line 1944 +;1944: { +line 1945 +;1945: bestdist = tlen; +ADDRLP4 1112 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 1946 +;1946: bestindex = i; +ADDRLP4 1140 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1947 +;1947: found = 1; +ADDRLP4 1144 +CNSTI4 1 +ASGNI4 +line 1948 +;1948: } +LABELV $841 +line 1949 +;1949: } +LABELV $839 +line 1951 +;1950: +;1951: } +LABELV $835 +line 1953 +;1952: +;1953: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1954 +;1954: } +LABELV $833 +line 1932 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $832 +line 1956 +;1955: +;1956: if (found) +ADDRLP4 1144 +INDIRI4 +CNSTI4 0 +EQI4 $846 +line 1957 +;1957: { +line 1958 +;1958: gWPArray[bestindex]->flags |= WPFLAG_RED_FLAG; +ADDRLP4 1152 +ADDRLP4 1140 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 1152 +INDIRP4 +ADDRLP4 1152 +INDIRP4 +INDIRI4 +CNSTI4 131072 +BORI4 +ASGNI4 +line 1959 +;1959: flagRed = gWPArray[bestindex]; +ADDRGP4 flagRed +ADDRLP4 1140 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +line 1960 +;1960: oFlagRed = flagRed; +ADDRGP4 oFlagRed +ADDRGP4 flagRed +INDIRP4 +ASGNP4 +line 1961 +;1961: eFlagRed = flag_red; +ADDRGP4 eFlagRed +ADDRLP4 20 +INDIRP4 +ASGNP4 +line 1962 +;1962: } +LABELV $846 +line 1964 +;1963: +;1964: bestdist = 999999; +ADDRLP4 1112 +CNSTF4 1232348144 +ASGNF4 +line 1965 +;1965: bestindex = 0; +ADDRLP4 1140 +CNSTI4 0 +ASGNI4 +line 1966 +;1966: found = 0; +ADDRLP4 1144 +CNSTI4 0 +ASGNI4 +line 1967 +;1967: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $849 +JUMPV +LABELV $848 +line 1970 +;1968: +;1969: while (i < gWPNum) +;1970: { +line 1971 +;1971: if (gWPArray[i] && gWPArray[i]->inuse) +ADDRLP4 1152 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 1152 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $851 +ADDRLP4 1152 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $851 +line 1972 +;1972: { +line 1973 +;1973: VectorSubtract(flag_blue->s.pos.trBase, gWPArray[i]->origin, a); +ADDRLP4 1160 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 24 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 1160 +INDIRP4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 8+4 +ADDRLP4 24 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 1160 +INDIRP4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 8+8 +ADDRLP4 24 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1974 +;1974: tlen = VectorLength(a); +ADDRLP4 8 +ARGP4 +ADDRLP4 1164 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 28 +ADDRLP4 1164 +INDIRF4 +ASGNF4 +line 1976 +;1975: +;1976: if (tlen < bestdist) +ADDRLP4 28 +INDIRF4 +ADDRLP4 1112 +INDIRF4 +GEF4 $855 +line 1977 +;1977: { +line 1978 +;1978: trap_Trace(&tr, flag_blue->s.pos.trBase, mins, maxs, gWPArray[i]->origin, flag_blue->s.number, MASK_SOLID); +ADDRLP4 32 +ARGP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 24 +ADDP4 +ARGP4 +ADDRLP4 1116 +ARGP4 +ADDRLP4 1128 +ARGP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_Trace +CALLV +pop +line 1980 +;1979: +;1980: if (tr.fraction == 1 || tr.entityNum == flag_blue->s.number) +ADDRLP4 32+8 +INDIRF4 +CNSTF4 1065353216 +EQF4 $861 +ADDRLP4 32+52 +INDIRI4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +NEI4 $857 +LABELV $861 +line 1981 +;1981: { +line 1982 +;1982: bestdist = tlen; +ADDRLP4 1112 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 1983 +;1983: bestindex = i; +ADDRLP4 1140 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1984 +;1984: found = 1; +ADDRLP4 1144 +CNSTI4 1 +ASGNI4 +line 1985 +;1985: } +LABELV $857 +line 1986 +;1986: } +LABELV $855 +line 1988 +;1987: +;1988: } +LABELV $851 +line 1990 +;1989: +;1990: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1991 +;1991: } +LABELV $849 +line 1969 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $848 +line 1993 +;1992: +;1993: if (found) +ADDRLP4 1144 +INDIRI4 +CNSTI4 0 +EQI4 $862 +line 1994 +;1994: { +line 1995 +;1995: gWPArray[bestindex]->flags |= WPFLAG_BLUE_FLAG; +ADDRLP4 1152 +ADDRLP4 1140 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 1152 +INDIRP4 +ADDRLP4 1152 +INDIRP4 +INDIRI4 +CNSTI4 262144 +BORI4 +ASGNI4 +line 1996 +;1996: flagBlue = gWPArray[bestindex]; +ADDRGP4 flagBlue +ADDRLP4 1140 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +line 1997 +;1997: oFlagBlue = flagBlue; +ADDRGP4 oFlagBlue +ADDRGP4 flagBlue +INDIRP4 +ASGNP4 +line 1998 +;1998: eFlagBlue = flag_blue; +ADDRGP4 eFlagBlue +ADDRLP4 24 +INDIRP4 +ASGNP4 +line 1999 +;1999: } +LABELV $862 +line 2000 +;2000:} +LABELV $811 +endproc FlagObjects 1172 28 +export SavePathData +proc SavePathData 112 36 +line 2003 +;2001: +;2002:int SavePathData(const char *filename) +;2003:{ +line 2012 +;2004: fileHandle_t f; +;2005: char *fileString; +;2006: char *storeString; +;2007: char *routePath; +;2008: vec3_t a; +;2009: float flLen; +;2010: int i, s, n; +;2011: +;2012: fileString = NULL; +ADDRLP4 28 +CNSTP4 0 +ASGNP4 +line 2013 +;2013: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 2014 +;2014: s = 0; +ADDRLP4 40 +CNSTI4 0 +ASGNI4 +line 2016 +;2015: +;2016: if (!gWPNum) +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 0 +NEI4 $865 +line 2017 +;2017: { +line 2018 +;2018: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $864 +JUMPV +LABELV $865 +line 2021 +;2019: } +;2020: +;2021: routePath = (char *)B_TempAlloc(1024); +CNSTI4 1024 +ARGI4 +ADDRLP4 44 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 36 +ADDRLP4 44 +INDIRP4 +ASGNP4 +line 2023 +;2022: +;2023: Com_sprintf(routePath, 1024, "botroutes/%s.wnt\0", filename); +ADDRLP4 36 +INDIRP4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 $726 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2025 +;2024: +;2025: trap_FS_FOpenFile(routePath, &f, FS_WRITE); +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRLP4 32 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +pop +line 2027 +;2026: +;2027: B_TempFree(1024); //routePath +CNSTI4 1024 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 2029 +;2028: +;2029: if (!f) +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +NEI4 $867 +line 2030 +;2030: { +line 2031 +;2031: G_Printf(S_COLOR_RED "ERROR: Could not open file to write path data\n"); +ADDRGP4 $869 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2032 +;2032: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $864 +JUMPV +LABELV $867 +line 2035 +;2033: } +;2034: +;2035: if (!RepairPaths()) //check if we can see all waypoints from the last. If not, try to branch over. +ADDRLP4 48 +ADDRGP4 RepairPaths +CALLI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $870 +line 2036 +;2036: { +line 2037 +;2037: trap_FS_FCloseFile(f); +ADDRLP4 32 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 2038 +;2038: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $864 +JUMPV +LABELV $870 +line 2041 +;2039: } +;2040: +;2041: CalculatePaths(); //make everything nice and connected before saving +ADDRGP4 CalculatePaths +CALLV +pop +line 2043 +;2042: +;2043: FlagObjects(); //currently only used for flagging waypoints nearest CTF flags +ADDRGP4 FlagObjects +CALLV +pop +line 2045 +;2044: +;2045: fileString = (char *)B_TempAlloc(524288); +CNSTI4 524288 +ARGI4 +ADDRLP4 52 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 28 +ADDRLP4 52 +INDIRP4 +ASGNP4 +line 2046 +;2046: storeString = (char *)B_TempAlloc(4096); +CNSTI4 4096 +ARGI4 +ADDRLP4 56 +ADDRGP4 B_TempAlloc +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 56 +INDIRP4 +ASGNP4 +line 2048 +;2047: +;2048: Com_sprintf(fileString, 524288, "%i %i %f (%f %f %f) { ", gWPArray[i]->index, gWPArray[i]->flags, gWPArray[i]->weight, gWPArray[i]->origin[0], gWPArray[i]->origin[1], gWPArray[i]->origin[2]); +ADDRLP4 28 +INDIRP4 +ARGP4 +CNSTI4 524288 +ARGI4 +ADDRGP4 $872 +ARGP4 +ADDRLP4 60 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 60 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 60 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 60 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ARGF4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2050 +;2049: +;2050: n = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $874 +JUMPV +LABELV $873 +line 2053 +;2051: +;2052: while (n < gWPArray[i]->neighbornum) +;2053: { +line 2054 +;2054: if (gWPArray[i]->neighbors[n].forceJumpTo) +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $876 +line 2055 +;2055: { +line 2056 +;2056: Com_sprintf(storeString, 4096, "%s%i-%i ", storeString, gWPArray[i]->neighbors[n].num, gWPArray[i]->neighbors[n].forceJumpTo); +ADDRLP4 8 +INDIRP4 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRGP4 $878 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 68 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 68 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2057 +;2057: } +ADDRGP4 $877 +JUMPV +LABELV $876 +line 2059 +;2058: else +;2059: { +line 2060 +;2060: Com_sprintf(storeString, 4096, "%s%i ", storeString, gWPArray[i]->neighbors[n].num); +ADDRLP4 8 +INDIRP4 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRGP4 $879 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2061 +;2061: } +LABELV $877 +line 2062 +;2062: n++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2063 +;2063: } +LABELV $874 +line 2052 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +LTI4 $873 +line 2065 +;2064: +;2065: if (gWPArray[i+1] && gWPArray[i+1]->inuse && gWPArray[i+1]->index) +ADDRLP4 64 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $880 +ADDRLP4 68 +CNSTI4 0 +ASGNI4 +ADDRLP4 64 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +ADDRLP4 68 +INDIRI4 +EQI4 $880 +ADDRLP4 64 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ADDRLP4 68 +INDIRI4 +EQI4 $880 +line 2066 +;2066: { +line 2067 +;2067: VectorSubtract(gWPArray[i]->origin, gWPArray[i+1]->origin, a); +ADDRLP4 72 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 76 +ADDRLP4 72 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +ASGNP4 +ADDRLP4 16 +ADDRLP4 76 +INDIRP4 +INDIRP4 +INDIRF4 +ADDRLP4 72 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 80 +CNSTI4 4 +ASGNI4 +ADDRLP4 16+4 +ADDRLP4 76 +INDIRP4 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 72 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 84 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 88 +CNSTI4 8 +ASGNI4 +ADDRLP4 16+8 +ADDRLP4 84 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 88 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 84 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 88 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 2068 +;2068: flLen = VectorLength(a); +ADDRLP4 16 +ARGP4 +ADDRLP4 92 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 92 +INDIRF4 +ASGNF4 +line 2069 +;2069: } +ADDRGP4 $881 +JUMPV +LABELV $880 +line 2071 +;2070: else +;2071: { +line 2072 +;2072: flLen = 0; +ADDRLP4 12 +CNSTF4 0 +ASGNF4 +line 2073 +;2073: } +LABELV $881 +line 2075 +;2074: +;2075: gWPArray[i]->disttonext = flLen; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 24 +ADDP4 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 2077 +;2076: +;2077: Com_sprintf(fileString, 524288, "%s} %f\n", fileString, flLen); +ADDRLP4 28 +INDIRP4 +ARGP4 +CNSTI4 524288 +ARGI4 +ADDRGP4 $890 +ARGP4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRF4 +ARGF4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2079 +;2078: +;2079: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $892 +JUMPV +LABELV $891 +line 2082 +;2080: +;2081: while (i < gWPNum) +;2082: { +line 2084 +;2083: //sprintf(fileString, "%s%i %i %f (%f %f %f) { ", fileString, gWPArray[i]->index, gWPArray[i]->flags, gWPArray[i]->weight, gWPArray[i]->origin[0], gWPArray[i]->origin[1], gWPArray[i]->origin[2]); +;2084: Com_sprintf(storeString, 4096, "%i %i %f (%f %f %f) { ", gWPArray[i]->index, gWPArray[i]->flags, gWPArray[i]->weight, gWPArray[i]->origin[0], gWPArray[i]->origin[1], gWPArray[i]->origin[2]); +ADDRLP4 8 +INDIRP4 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRGP4 $872 +ARGP4 +ADDRLP4 76 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 76 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 76 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 76 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 76 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 76 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 76 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ARGF4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2086 +;2085: +;2086: n = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $895 +JUMPV +LABELV $894 +line 2089 +;2087: +;2088: while (n < gWPArray[i]->neighbornum) +;2089: { +line 2090 +;2090: if (gWPArray[i]->neighbors[n].forceJumpTo) +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $897 +line 2091 +;2091: { +line 2092 +;2092: Com_sprintf(storeString, 4096, "%s%i-%i ", storeString, gWPArray[i]->neighbors[n].num, gWPArray[i]->neighbors[n].forceJumpTo); +ADDRLP4 8 +INDIRP4 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRGP4 $878 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 84 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +ASGNP4 +ADDRLP4 84 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 84 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2093 +;2093: } +ADDRGP4 $898 +JUMPV +LABELV $897 +line 2095 +;2094: else +;2095: { +line 2096 +;2096: Com_sprintf(storeString, 4096, "%s%i ", storeString, gWPArray[i]->neighbors[n].num); +ADDRLP4 8 +INDIRP4 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRGP4 $879 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2097 +;2097: } +LABELV $898 +line 2098 +;2098: n++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2099 +;2099: } +LABELV $895 +line 2088 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +LTI4 $894 +line 2101 +;2100: +;2101: if (gWPArray[i+1] && gWPArray[i+1]->inuse && gWPArray[i+1]->index) +ADDRLP4 80 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 80 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $899 +ADDRLP4 84 +CNSTI4 0 +ASGNI4 +ADDRLP4 80 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +ADDRLP4 84 +INDIRI4 +EQI4 $899 +ADDRLP4 80 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ADDRLP4 84 +INDIRI4 +EQI4 $899 +line 2102 +;2102: { +line 2103 +;2103: VectorSubtract(gWPArray[i]->origin, gWPArray[i+1]->origin, a); +ADDRLP4 88 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 92 +ADDRLP4 88 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +ASGNP4 +ADDRLP4 16 +ADDRLP4 92 +INDIRP4 +INDIRP4 +INDIRF4 +ADDRLP4 88 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 96 +CNSTI4 4 +ASGNI4 +ADDRLP4 16+4 +ADDRLP4 92 +INDIRP4 +INDIRP4 +ADDRLP4 96 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 88 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 96 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 100 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 104 +CNSTI4 8 +ASGNI4 +ADDRLP4 16+8 +ADDRLP4 100 +INDIRI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ADDRLP4 104 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 100 +INDIRI4 +ADDRGP4 gWPArray+4 +ADDP4 +INDIRP4 +ADDRLP4 104 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 2104 +;2104: flLen = VectorLength(a); +ADDRLP4 16 +ARGP4 +ADDRLP4 108 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 108 +INDIRF4 +ASGNF4 +line 2105 +;2105: } +ADDRGP4 $900 +JUMPV +LABELV $899 +line 2107 +;2106: else +;2107: { +line 2108 +;2108: flLen = 0; +ADDRLP4 12 +CNSTF4 0 +ASGNF4 +line 2109 +;2109: } +LABELV $900 +line 2111 +;2110: +;2111: gWPArray[i]->disttonext = flLen; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 24 +ADDP4 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 2113 +;2112: +;2113: Com_sprintf(storeString, 4096, "%s} %f\n", storeString, flLen); +ADDRLP4 8 +INDIRP4 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRGP4 $890 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRF4 +ARGF4 +ADDRGP4 Com_sprintf +CALLV +pop +line 2115 +;2114: +;2115: strcat(fileString, storeString); +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 strcat +CALLP4 +pop +line 2117 +;2116: +;2117: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2118 +;2118: } +LABELV $892 +line 2081 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $891 +line 2120 +;2119: +;2120: trap_FS_Write(fileString, strlen(fileString), f); +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRLP4 76 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRLP4 76 +INDIRI4 +ARGI4 +ADDRLP4 32 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Write +CALLV +pop +line 2122 +;2121: +;2122: B_TempFree(524288); //fileString +CNSTI4 524288 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 2123 +;2123: B_TempFree(4096); //storeString +CNSTI4 4096 +ARGI4 +ADDRGP4 B_TempFree +CALLV +pop +line 2125 +;2124: +;2125: trap_FS_FCloseFile(f); +ADDRLP4 32 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 2127 +;2126: +;2127: G_Printf("Path data has been saved and updated. You may need to restart the level for some things to be properly calculated.\n"); +ADDRGP4 $909 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2129 +;2128: +;2129: return 1; +CNSTI4 1 +RETI4 +LABELV $864 +endproc SavePathData 112 36 +export LoadPath_ThisLevel +proc LoadPath_ThisLevel 304 16 +line 2133 +;2130:} +;2131: +;2132:void LoadPath_ThisLevel(void) +;2133:{ +line 2135 +;2134: vmCvar_t mapname; +;2135: int i = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 2136 +;2136: gentity_t *ent = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 2138 +;2137: +;2138: trap_Cvar_Register( &mapname, "mapname", "", CVAR_SERVERINFO | CVAR_ROM ); +ADDRLP4 8 +ARGP4 +ADDRGP4 $911 +ARGP4 +ADDRGP4 $912 +ARGP4 +CNSTI4 68 +ARGI4 +ADDRGP4 trap_Cvar_Register +CALLV +pop +line 2140 +;2139: +;2140: if (LoadPathData(mapname.string) == 2) +ADDRLP4 8+16 +ARGP4 +ADDRLP4 280 +ADDRGP4 LoadPathData +CALLI4 +ASGNI4 +ADDRLP4 280 +INDIRI4 +CNSTI4 2 +NEI4 $913 +line 2141 +;2141: { +line 2143 +;2142: //enter "edit" mode if cheats enabled? +;2143: } +LABELV $913 +line 2145 +;2144: +;2145: trap_Cvar_Update(&bot_wp_edit); +ADDRGP4 bot_wp_edit +ARGP4 +ADDRGP4 trap_Cvar_Update +CALLV +pop +line 2147 +;2146: +;2147: if (bot_wp_edit.value) +ADDRGP4 bot_wp_edit+8 +INDIRF4 +CNSTF4 0 +EQF4 $916 +line 2148 +;2148: { +line 2149 +;2149: gBotEdit = 1; +ADDRGP4 gBotEdit +CNSTF4 1065353216 +ASGNF4 +line 2150 +;2150: } +ADDRGP4 $920 +JUMPV +LABELV $916 +line 2152 +;2151: else +;2152: { +line 2153 +;2153: gBotEdit = 0; +ADDRGP4 gBotEdit +CNSTF4 0 +ASGNF4 +line 2154 +;2154: } +ADDRGP4 $920 +JUMPV +LABELV $919 +line 2158 +;2155: +;2156: //set the flag entities +;2157: while (i < MAX_GENTITIES) +;2158: { +line 2159 +;2159: ent = &g_entities[i]; +ADDRLP4 0 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 2161 +;2160: +;2161: if (ent && ent->inuse && ent->classname) +ADDRLP4 288 +CNSTU4 0 +ASGNU4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 288 +INDIRU4 +EQU4 $922 +ADDRLP4 0 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $922 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 288 +INDIRU4 +EQU4 $922 +line 2162 +;2162: { +line 2163 +;2163: if (!eFlagRed && strcmp(ent->classname, "team_CTF_redflag") == 0) +ADDRGP4 eFlagRed +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $924 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $823 +ARGP4 +ADDRLP4 292 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 292 +INDIRI4 +CNSTI4 0 +NEI4 $924 +line 2164 +;2164: { +line 2165 +;2165: eFlagRed = ent; +ADDRGP4 eFlagRed +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 2166 +;2166: } +ADDRGP4 $925 +JUMPV +LABELV $924 +line 2167 +;2167: else if (!eFlagBlue && strcmp(ent->classname, "team_CTF_blueflag") == 0) +ADDRGP4 eFlagBlue +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $926 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $826 +ARGP4 +ADDRLP4 296 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 296 +INDIRI4 +CNSTI4 0 +NEI4 $926 +line 2168 +;2168: { +line 2169 +;2169: eFlagBlue = ent; +ADDRGP4 eFlagBlue +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 2170 +;2170: } +LABELV $926 +LABELV $925 +line 2172 +;2171: +;2172: if (eFlagRed && eFlagBlue) +ADDRLP4 300 +CNSTU4 0 +ASGNU4 +ADDRGP4 eFlagRed +INDIRP4 +CVPU4 4 +ADDRLP4 300 +INDIRU4 +EQU4 $928 +ADDRGP4 eFlagBlue +INDIRP4 +CVPU4 4 +ADDRLP4 300 +INDIRU4 +EQU4 $928 +line 2173 +;2173: { +line 2174 +;2174: break; +ADDRGP4 $921 +JUMPV +LABELV $928 +line 2176 +;2175: } +;2176: } +LABELV $922 +line 2178 +;2177: +;2178: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2179 +;2179: } +LABELV $920 +line 2157 +ADDRLP4 4 +INDIRI4 +CNSTI4 1024 +LTI4 $919 +LABELV $921 +line 2180 +;2180:} +LABELV $910 +endproc LoadPath_ThisLevel 304 16 +export GetClosestSpawn +proc GetClosestSpawn 60 8 +line 2183 +;2181: +;2182:gentity_t *GetClosestSpawn(gentity_t *ent) +;2183:{ +line 2185 +;2184: gentity_t *spawn; +;2185: gentity_t *closestSpawn = NULL; +ADDRLP4 12 +CNSTP4 0 +ASGNP4 +line 2186 +;2186: float closestDist = -1; +ADDRLP4 8 +CNSTF4 3212836864 +ASGNF4 +line 2187 +;2187: int i = MAX_CLIENTS; +ADDRLP4 4 +CNSTI4 32 +ASGNI4 +line 2189 +;2188: +;2189: spawn = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +ADDRGP4 $932 +JUMPV +LABELV $931 +line 2192 +;2190: +;2191: while (i < MAX_GENTITIES) +;2192: { +line 2193 +;2193: spawn = &g_entities[i]; +ADDRLP4 0 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 2195 +;2194: +;2195: if (spawn && spawn->inuse && (!Q_stricmp(spawn->classname, "info_player_start") || !Q_stricmp(spawn->classname, "info_player_deathmatch")) ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $934 +ADDRLP4 0 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $934 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $936 +ARGP4 +ADDRLP4 20 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +EQI4 $938 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $937 +ARGP4 +ADDRLP4 24 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +NEI4 $934 +LABELV $938 +line 2196 +;2196: { +line 2200 +;2197: float checkDist; +;2198: vec3_t vSub; +;2199: +;2200: VectorSubtract(ent->client->ps.origin, spawn->r.currentOrigin, vSub); +ADDRLP4 44 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +ASGNP4 +ADDRLP4 28 +ADDRLP4 44 +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 368 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 28+4 +ADDRLP4 44 +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 372 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 28+8 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 376 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 2201 +;2201: checkDist = VectorLength(vSub); +ADDRLP4 28 +ARGP4 +ADDRLP4 52 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 40 +ADDRLP4 52 +INDIRF4 +ASGNF4 +line 2203 +;2202: +;2203: if (closestDist == -1 || checkDist < closestDist) +ADDRLP4 8 +INDIRF4 +CNSTF4 3212836864 +EQF4 $943 +ADDRLP4 40 +INDIRF4 +ADDRLP4 8 +INDIRF4 +GEF4 $941 +LABELV $943 +line 2204 +;2204: { +line 2205 +;2205: closestSpawn = spawn; +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 2206 +;2206: closestDist = checkDist; +ADDRLP4 8 +ADDRLP4 40 +INDIRF4 +ASGNF4 +line 2207 +;2207: } +LABELV $941 +line 2208 +;2208: } +LABELV $934 +line 2210 +;2209: +;2210: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2211 +;2211: } +LABELV $932 +line 2191 +ADDRLP4 4 +INDIRI4 +CNSTI4 1024 +LTI4 $931 +line 2213 +;2212: +;2213: return closestSpawn; +ADDRLP4 12 +INDIRP4 +RETP4 +LABELV $930 +endproc GetClosestSpawn 60 8 +export GetNextSpawnInIndex +proc GetNextSpawnInIndex 24 8 +line 2217 +;2214:} +;2215: +;2216:gentity_t *GetNextSpawnInIndex(gentity_t *currentSpawn) +;2217:{ +line 2219 +;2218: gentity_t *spawn; +;2219: gentity_t *nextSpawn = NULL; +ADDRLP4 8 +CNSTP4 0 +ASGNP4 +line 2220 +;2220: int i = currentSpawn->s.number+1; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2222 +;2221: +;2222: spawn = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +ADDRGP4 $946 +JUMPV +LABELV $945 +line 2225 +;2223: +;2224: while (i < MAX_GENTITIES) +;2225: { +line 2226 +;2226: spawn = &g_entities[i]; +ADDRLP4 0 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 2228 +;2227: +;2228: if (spawn && spawn->inuse && (!Q_stricmp(spawn->classname, "info_player_start") || !Q_stricmp(spawn->classname, "info_player_deathmatch")) ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $948 +ADDRLP4 0 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $948 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $936 +ARGP4 +ADDRLP4 16 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +EQI4 $950 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $937 +ARGP4 +ADDRLP4 20 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $948 +LABELV $950 +line 2229 +;2229: { +line 2230 +;2230: nextSpawn = spawn; +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 2231 +;2231: break; +ADDRGP4 $947 +JUMPV +LABELV $948 +line 2234 +;2232: } +;2233: +;2234: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2235 +;2235: } +LABELV $946 +line 2224 +ADDRLP4 4 +INDIRI4 +CNSTI4 1024 +LTI4 $945 +LABELV $947 +line 2237 +;2236: +;2237: if (!nextSpawn) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $951 +line 2238 +;2238: { //loop back around to 0 +line 2239 +;2239: i = MAX_CLIENTS; +ADDRLP4 4 +CNSTI4 32 +ASGNI4 +ADDRGP4 $954 +JUMPV +LABELV $953 +line 2242 +;2240: +;2241: while (i < MAX_GENTITIES) +;2242: { +line 2243 +;2243: spawn = &g_entities[i]; +ADDRLP4 0 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 2245 +;2244: +;2245: if (spawn && spawn->inuse && (!Q_stricmp(spawn->classname, "info_player_start") || !Q_stricmp(spawn->classname, "info_player_deathmatch")) ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $956 +ADDRLP4 0 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $956 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $936 +ARGP4 +ADDRLP4 16 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +EQI4 $958 +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $937 +ARGP4 +ADDRLP4 20 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $956 +LABELV $958 +line 2246 +;2246: { +line 2247 +;2247: nextSpawn = spawn; +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 2248 +;2248: break; +ADDRGP4 $955 +JUMPV +LABELV $956 +line 2251 +;2249: } +;2250: +;2251: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2252 +;2252: } +LABELV $954 +line 2241 +ADDRLP4 4 +INDIRI4 +CNSTI4 1024 +LTI4 $953 +LABELV $955 +line 2253 +;2253: } +LABELV $951 +line 2255 +;2254: +;2255: return nextSpawn; +ADDRLP4 8 +INDIRP4 +RETP4 +LABELV $944 +endproc GetNextSpawnInIndex 24 8 +export AcceptBotCommand +proc AcceptBotCommand 344 16 +line 2259 +;2256:} +;2257: +;2258:int AcceptBotCommand(char *cmd, gentity_t *pl) +;2259:{ +line 2265 +;2260: int OptionalArgument, i; +;2261: int FlagsFromArgument; +;2262: char *OptionalSArgument, *RequiredSArgument; +;2263: vmCvar_t mapname; +;2264: +;2265: if (!gBotEdit) +ADDRGP4 gBotEdit +INDIRF4 +CNSTF4 0 +NEF4 $960 +line 2266 +;2266: { +line 2267 +;2267: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $960 +line 2270 +;2268: } +;2269: +;2270: OptionalArgument = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 2271 +;2271: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 2272 +;2272: FlagsFromArgument = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 2273 +;2273: OptionalSArgument = NULL; +ADDRLP4 8 +CNSTP4 0 +ASGNP4 +line 2274 +;2274: RequiredSArgument = NULL; +ADDRLP4 4 +CNSTP4 0 +ASGNP4 +line 2279 +;2275: +;2276: //if a waypoint editing related command is issued, bots will deactivate. +;2277: //once bot_wp_save is issued and the trail is recalculated, bots will activate again. +;2278: +;2279: if (!pl || !pl->client) +ADDRLP4 292 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 296 +CNSTU4 0 +ASGNU4 +ADDRLP4 292 +INDIRP4 +CVPU4 4 +ADDRLP4 296 +INDIRU4 +EQU4 $964 +ADDRLP4 292 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 296 +INDIRU4 +NEU4 $962 +LABELV $964 +line 2280 +;2280: { +line 2281 +;2281: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $962 +line 2284 +;2282: } +;2283: +;2284: if (Q_stricmp (cmd, "bot_wp_cmdlist") == 0) //lists all the bot waypoint commands. +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $967 +ARGP4 +ADDRLP4 300 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 300 +INDIRI4 +CNSTI4 0 +NEI4 $965 +line 2285 +;2285: { +line 2286 +;2286: G_Printf(S_COLOR_YELLOW "bot_wp_add" S_COLOR_WHITE " - Add a waypoint (optional int parameter will insert the point after the specified waypoint index in a trail)\n\n"); +ADDRGP4 $968 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2287 +;2287: G_Printf(S_COLOR_YELLOW "bot_wp_rem" S_COLOR_WHITE " - Remove a waypoint (removes last unless waypoint index is specified as a parameter)\n\n"); +ADDRGP4 $969 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2288 +;2288: G_Printf(S_COLOR_YELLOW "bot_wp_addflagged" S_COLOR_WHITE " - Same as wp_add, but adds a flagged point (type bot_wp_addflagged for help)\n\n"); +ADDRGP4 $970 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2289 +;2289: G_Printf(S_COLOR_YELLOW "bot_wp_switchflags" S_COLOR_WHITE " - Switches flags on an existing waypoint (type bot_wp_switchflags for help)\n\n"); +ADDRGP4 $971 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2290 +;2290: G_Printf(S_COLOR_YELLOW "bot_wp_tele" S_COLOR_WHITE " - Teleport yourself to the specified waypoint's location\n"); +ADDRGP4 $972 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2291 +;2291: G_Printf(S_COLOR_YELLOW "bot_wp_killoneways" S_COLOR_WHITE " - Removes oneway (backward and forward) flags on all waypoints in the level\n\n"); +ADDRGP4 $973 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2292 +;2292: G_Printf(S_COLOR_YELLOW "bot_wp_save" S_COLOR_WHITE " - Saves all waypoint data into a file for later use\n"); +ADDRGP4 $974 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2294 +;2293: +;2294: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $965 +line 2297 +;2295: } +;2296: +;2297: if (Q_stricmp (cmd, "bot_wp_add") == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $977 +ARGP4 +ADDRLP4 304 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 304 +INDIRI4 +CNSTI4 0 +NEI4 $975 +line 2298 +;2298: { +line 2299 +;2299: gDeactivated = 1; +ADDRGP4 gDeactivated +CNSTF4 1065353216 +ASGNF4 +line 2300 +;2300: OptionalSArgument = ConcatArgs( 1 ); +CNSTI4 1 +ARGI4 +ADDRLP4 308 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 308 +INDIRP4 +ASGNP4 +line 2302 +;2301: +;2302: if (OptionalSArgument) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $978 +line 2303 +;2303: { +line 2304 +;2304: OptionalArgument = atoi(OptionalSArgument); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 312 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 312 +INDIRI4 +ASGNI4 +line 2305 +;2305: } +LABELV $978 +line 2307 +;2306: +;2307: if (OptionalSArgument && OptionalSArgument[0]) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $980 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $980 +line 2308 +;2308: { +line 2309 +;2309: CreateNewWP_InTrail(pl->client->ps.origin, 0, OptionalArgument); +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 CreateNewWP_InTrail +CALLI4 +pop +line 2310 +;2310: } +ADDRGP4 $981 +JUMPV +LABELV $980 +line 2312 +;2311: else +;2312: { +line 2313 +;2313: CreateNewWP(pl->client->ps.origin, 0); +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 CreateNewWP +CALLV +pop +line 2314 +;2314: } +LABELV $981 +line 2315 +;2315: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $975 +line 2318 +;2316: } +;2317: +;2318: if (Q_stricmp (cmd, "bot_wp_rem") == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $984 +ARGP4 +ADDRLP4 308 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 308 +INDIRI4 +CNSTI4 0 +NEI4 $982 +line 2319 +;2319: { +line 2320 +;2320: gDeactivated = 1; +ADDRGP4 gDeactivated +CNSTF4 1065353216 +ASGNF4 +line 2322 +;2321: +;2322: OptionalSArgument = ConcatArgs( 1 ); +CNSTI4 1 +ARGI4 +ADDRLP4 312 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 312 +INDIRP4 +ASGNP4 +line 2324 +;2323: +;2324: if (OptionalSArgument) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $985 +line 2325 +;2325: { +line 2326 +;2326: OptionalArgument = atoi(OptionalSArgument); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 316 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 316 +INDIRI4 +ASGNI4 +line 2327 +;2327: } +LABELV $985 +line 2329 +;2328: +;2329: if (OptionalSArgument && OptionalSArgument[0]) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $987 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $987 +line 2330 +;2330: { +line 2331 +;2331: RemoveWP_InTrail(OptionalArgument); +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 RemoveWP_InTrail +CALLV +pop +line 2332 +;2332: } +ADDRGP4 $988 +JUMPV +LABELV $987 +line 2334 +;2333: else +;2334: { +line 2335 +;2335: RemoveWP(); +ADDRGP4 RemoveWP +CALLV +pop +line 2336 +;2336: } +LABELV $988 +line 2338 +;2337: +;2338: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $982 +line 2341 +;2339: } +;2340: +;2341: if (Q_stricmp (cmd, "bot_wp_tele") == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $991 +ARGP4 +ADDRLP4 312 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 312 +INDIRI4 +CNSTI4 0 +NEI4 $989 +line 2342 +;2342: { +line 2343 +;2343: gDeactivated = 1; +ADDRGP4 gDeactivated +CNSTF4 1065353216 +ASGNF4 +line 2344 +;2344: OptionalSArgument = ConcatArgs( 1 ); +CNSTI4 1 +ARGI4 +ADDRLP4 316 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 316 +INDIRP4 +ASGNP4 +line 2346 +;2345: +;2346: if (OptionalSArgument) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $992 +line 2347 +;2347: { +line 2348 +;2348: OptionalArgument = atoi(OptionalSArgument); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 320 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 320 +INDIRI4 +ASGNI4 +line 2349 +;2349: } +LABELV $992 +line 2351 +;2350: +;2351: if (OptionalSArgument && OptionalSArgument[0]) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $994 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $994 +line 2352 +;2352: { +line 2353 +;2353: TeleportToWP(pl, OptionalArgument); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 TeleportToWP +CALLV +pop +line 2354 +;2354: } +ADDRGP4 $995 +JUMPV +LABELV $994 +line 2356 +;2355: else +;2356: { +line 2357 +;2357: G_Printf(S_COLOR_YELLOW "You didn't specify an index. Assuming last.\n"); +ADDRGP4 $996 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2358 +;2358: TeleportToWP(pl, gWPNum-1); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 gWPNum +INDIRI4 +CNSTI4 1 +SUBI4 +ARGI4 +ADDRGP4 TeleportToWP +CALLV +pop +line 2359 +;2359: } +LABELV $995 +line 2360 +;2360: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $989 +line 2363 +;2361: } +;2362: +;2363: if (Q_stricmp (cmd, "bot_wp_spawntele") == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $999 +ARGP4 +ADDRLP4 316 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 316 +INDIRI4 +CNSTI4 0 +NEI4 $997 +line 2364 +;2364: { +line 2365 +;2365: gentity_t *closestSpawn = GetClosestSpawn(pl); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 324 +ADDRGP4 GetClosestSpawn +CALLP4 +ASGNP4 +ADDRLP4 320 +ADDRLP4 324 +INDIRP4 +ASGNP4 +line 2367 +;2366: +;2367: if (!closestSpawn) +ADDRLP4 320 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $1000 +line 2368 +;2368: { //There should always be a spawn point.. +line 2369 +;2369: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $1000 +line 2372 +;2370: } +;2371: +;2372: closestSpawn = GetNextSpawnInIndex(closestSpawn); +ADDRLP4 320 +INDIRP4 +ARGP4 +ADDRLP4 328 +ADDRGP4 GetNextSpawnInIndex +CALLP4 +ASGNP4 +ADDRLP4 320 +ADDRLP4 328 +INDIRP4 +ASGNP4 +line 2374 +;2373: +;2374: if (closestSpawn) +ADDRLP4 320 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1002 +line 2375 +;2375: { +line 2376 +;2376: VectorCopy(closestSpawn->r.currentOrigin, pl->client->ps.origin); +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ADDRLP4 320 +INDIRP4 +CNSTI4 368 +ADDP4 +INDIRB +ASGNB 12 +line 2377 +;2377: } +LABELV $1002 +line 2378 +;2378: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $997 +line 2381 +;2379: } +;2380: +;2381: if (Q_stricmp (cmd, "bot_wp_addflagged") == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $1006 +ARGP4 +ADDRLP4 320 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 320 +INDIRI4 +CNSTI4 0 +NEI4 $1004 +line 2382 +;2382: { +line 2383 +;2383: gDeactivated = 1; +ADDRGP4 gDeactivated +CNSTF4 1065353216 +ASGNF4 +line 2385 +;2384: +;2385: RequiredSArgument = ConcatArgs( 1 ); +CNSTI4 1 +ARGI4 +ADDRLP4 324 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 324 +INDIRP4 +ASGNP4 +line 2387 +;2386: +;2387: if (!RequiredSArgument || !RequiredSArgument[0]) +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1009 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $1012 +LABELV $1009 +line 2388 +;2388: { +line 2389 +;2389: G_Printf(S_COLOR_YELLOW "Flag string needed for bot_wp_addflagged\nj - Jump point\nd - Duck point\nc - Snipe or camp standing\nf - Wait for func\nm - Do not move to when func is under\ns - Snipe or camp\nx - Oneway, forward\ny - Oneway, back\ng - Mission goal\nn - No visibility\nExample (for a point the bot would jump at, and reverse on when traveling a trail backwards):\nbot_wp_addflagged jx\n"); +ADDRGP4 $1010 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2390 +;2390: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $1011 +line 2394 +;2391: } +;2392: +;2393: while (RequiredSArgument[i]) +;2394: { +line 2395 +;2395: if (RequiredSArgument[i] == 'j') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 106 +NEI4 $1014 +line 2396 +;2396: { +line 2397 +;2397: FlagsFromArgument |= WPFLAG_JUMP; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 16 +BORI4 +ASGNI4 +line 2398 +;2398: } +ADDRGP4 $1015 +JUMPV +LABELV $1014 +line 2399 +;2399: else if (RequiredSArgument[i] == 'd') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 100 +NEI4 $1016 +line 2400 +;2400: { +line 2401 +;2401: FlagsFromArgument |= WPFLAG_DUCK; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 32 +BORI4 +ASGNI4 +line 2402 +;2402: } +ADDRGP4 $1017 +JUMPV +LABELV $1016 +line 2403 +;2403: else if (RequiredSArgument[i] == 'c') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 99 +NEI4 $1018 +line 2404 +;2404: { +line 2405 +;2405: FlagsFromArgument |= WPFLAG_SNIPEORCAMPSTAND; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 2048 +BORI4 +ASGNI4 +line 2406 +;2406: } +ADDRGP4 $1019 +JUMPV +LABELV $1018 +line 2407 +;2407: else if (RequiredSArgument[i] == 'f') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 102 +NEI4 $1020 +line 2408 +;2408: { +line 2409 +;2409: FlagsFromArgument |= WPFLAG_WAITFORFUNC; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 4096 +BORI4 +ASGNI4 +line 2410 +;2410: } +ADDRGP4 $1021 +JUMPV +LABELV $1020 +line 2411 +;2411: else if (RequiredSArgument[i] == 's') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 115 +NEI4 $1022 +line 2412 +;2412: { +line 2413 +;2413: FlagsFromArgument |= WPFLAG_SNIPEORCAMP; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 8192 +BORI4 +ASGNI4 +line 2414 +;2414: } +ADDRGP4 $1023 +JUMPV +LABELV $1022 +line 2415 +;2415: else if (RequiredSArgument[i] == 'x') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 120 +NEI4 $1024 +line 2416 +;2416: { +line 2417 +;2417: FlagsFromArgument |= WPFLAG_ONEWAY_FWD; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 16384 +BORI4 +ASGNI4 +line 2418 +;2418: } +ADDRGP4 $1025 +JUMPV +LABELV $1024 +line 2419 +;2419: else if (RequiredSArgument[i] == 'y') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 121 +NEI4 $1026 +line 2420 +;2420: { +line 2421 +;2421: FlagsFromArgument |= WPFLAG_ONEWAY_BACK; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 32768 +BORI4 +ASGNI4 +line 2422 +;2422: } +ADDRGP4 $1027 +JUMPV +LABELV $1026 +line 2423 +;2423: else if (RequiredSArgument[i] == 'g') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 103 +NEI4 $1028 +line 2424 +;2424: { +line 2425 +;2425: FlagsFromArgument |= WPFLAG_GOALPOINT; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 65536 +BORI4 +ASGNI4 +line 2426 +;2426: } +ADDRGP4 $1029 +JUMPV +LABELV $1028 +line 2427 +;2427: else if (RequiredSArgument[i] == 'n') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 110 +NEI4 $1030 +line 2428 +;2428: { +line 2429 +;2429: FlagsFromArgument |= WPFLAG_NOVIS; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1024 +BORI4 +ASGNI4 +line 2430 +;2430: } +ADDRGP4 $1031 +JUMPV +LABELV $1030 +line 2431 +;2431: else if (RequiredSArgument[i] == 'm') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 109 +NEI4 $1032 +line 2432 +;2432: { +line 2433 +;2433: FlagsFromArgument |= WPFLAG_NOMOVEFUNC; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 2097152 +BORI4 +ASGNI4 +line 2434 +;2434: } +LABELV $1032 +LABELV $1031 +LABELV $1029 +LABELV $1027 +LABELV $1025 +LABELV $1023 +LABELV $1021 +LABELV $1019 +LABELV $1017 +LABELV $1015 +line 2436 +;2435: +;2436: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2437 +;2437: } +LABELV $1012 +line 2393 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $1011 +line 2439 +;2438: +;2439: OptionalSArgument = ConcatArgs( 2 ); +CNSTI4 2 +ARGI4 +ADDRLP4 332 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 332 +INDIRP4 +ASGNP4 +line 2441 +;2440: +;2441: if (OptionalSArgument) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1034 +line 2442 +;2442: { +line 2443 +;2443: OptionalArgument = atoi(OptionalSArgument); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 336 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 336 +INDIRI4 +ASGNI4 +line 2444 +;2444: } +LABELV $1034 +line 2446 +;2445: +;2446: if (OptionalSArgument && OptionalSArgument[0]) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1036 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $1036 +line 2447 +;2447: { +line 2448 +;2448: CreateNewWP_InTrail(pl->client->ps.origin, FlagsFromArgument, OptionalArgument); +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 CreateNewWP_InTrail +CALLI4 +pop +line 2449 +;2449: } +ADDRGP4 $1037 +JUMPV +LABELV $1036 +line 2451 +;2450: else +;2451: { +line 2452 +;2452: CreateNewWP(pl->client->ps.origin, FlagsFromArgument); +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRGP4 CreateNewWP +CALLV +pop +line 2453 +;2453: } +LABELV $1037 +line 2454 +;2454: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $1004 +line 2457 +;2455: } +;2456: +;2457: if (Q_stricmp (cmd, "bot_wp_switchflags") == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $1040 +ARGP4 +ADDRLP4 324 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 324 +INDIRI4 +CNSTI4 0 +NEI4 $1038 +line 2458 +;2458: { +line 2459 +;2459: gDeactivated = 1; +ADDRGP4 gDeactivated +CNSTF4 1065353216 +ASGNF4 +line 2461 +;2460: +;2461: RequiredSArgument = ConcatArgs( 1 ); +CNSTI4 1 +ARGI4 +ADDRLP4 328 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 328 +INDIRP4 +ASGNP4 +line 2463 +;2462: +;2463: if (!RequiredSArgument || !RequiredSArgument[0]) +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1043 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $1046 +LABELV $1043 +line 2464 +;2464: { +line 2465 +;2465: G_Printf(S_COLOR_YELLOW "Flag string needed for bot_wp_switchflags\nType bot_wp_addflagged for a list of flags and their corresponding characters, or use 0 for no flags.\nSyntax: bot_wp_switchflags \n"); +ADDRGP4 $1044 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2466 +;2466: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $1045 +line 2470 +;2467: } +;2468: +;2469: while (RequiredSArgument[i]) +;2470: { +line 2471 +;2471: if (RequiredSArgument[i] == 'j') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 106 +NEI4 $1048 +line 2472 +;2472: { +line 2473 +;2473: FlagsFromArgument |= WPFLAG_JUMP; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 16 +BORI4 +ASGNI4 +line 2474 +;2474: } +ADDRGP4 $1049 +JUMPV +LABELV $1048 +line 2475 +;2475: else if (RequiredSArgument[i] == 'd') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 100 +NEI4 $1050 +line 2476 +;2476: { +line 2477 +;2477: FlagsFromArgument |= WPFLAG_DUCK; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 32 +BORI4 +ASGNI4 +line 2478 +;2478: } +ADDRGP4 $1051 +JUMPV +LABELV $1050 +line 2479 +;2479: else if (RequiredSArgument[i] == 'c') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 99 +NEI4 $1052 +line 2480 +;2480: { +line 2481 +;2481: FlagsFromArgument |= WPFLAG_SNIPEORCAMPSTAND; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 2048 +BORI4 +ASGNI4 +line 2482 +;2482: } +ADDRGP4 $1053 +JUMPV +LABELV $1052 +line 2483 +;2483: else if (RequiredSArgument[i] == 'f') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 102 +NEI4 $1054 +line 2484 +;2484: { +line 2485 +;2485: FlagsFromArgument |= WPFLAG_WAITFORFUNC; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 4096 +BORI4 +ASGNI4 +line 2486 +;2486: } +ADDRGP4 $1055 +JUMPV +LABELV $1054 +line 2487 +;2487: else if (RequiredSArgument[i] == 's') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 115 +NEI4 $1056 +line 2488 +;2488: { +line 2489 +;2489: FlagsFromArgument |= WPFLAG_SNIPEORCAMP; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 8192 +BORI4 +ASGNI4 +line 2490 +;2490: } +ADDRGP4 $1057 +JUMPV +LABELV $1056 +line 2491 +;2491: else if (RequiredSArgument[i] == 'x') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 120 +NEI4 $1058 +line 2492 +;2492: { +line 2493 +;2493: FlagsFromArgument |= WPFLAG_ONEWAY_FWD; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 16384 +BORI4 +ASGNI4 +line 2494 +;2494: } +ADDRGP4 $1059 +JUMPV +LABELV $1058 +line 2495 +;2495: else if (RequiredSArgument[i] == 'y') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 121 +NEI4 $1060 +line 2496 +;2496: { +line 2497 +;2497: FlagsFromArgument |= WPFLAG_ONEWAY_BACK; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 32768 +BORI4 +ASGNI4 +line 2498 +;2498: } +ADDRGP4 $1061 +JUMPV +LABELV $1060 +line 2499 +;2499: else if (RequiredSArgument[i] == 'g') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 103 +NEI4 $1062 +line 2500 +;2500: { +line 2501 +;2501: FlagsFromArgument |= WPFLAG_GOALPOINT; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 65536 +BORI4 +ASGNI4 +line 2502 +;2502: } +ADDRGP4 $1063 +JUMPV +LABELV $1062 +line 2503 +;2503: else if (RequiredSArgument[i] == 'n') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 110 +NEI4 $1064 +line 2504 +;2504: { +line 2505 +;2505: FlagsFromArgument |= WPFLAG_NOVIS; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1024 +BORI4 +ASGNI4 +line 2506 +;2506: } +ADDRGP4 $1065 +JUMPV +LABELV $1064 +line 2507 +;2507: else if (RequiredSArgument[i] == 'm') +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 109 +NEI4 $1066 +line 2508 +;2508: { +line 2509 +;2509: FlagsFromArgument |= WPFLAG_NOMOVEFUNC; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 2097152 +BORI4 +ASGNI4 +line 2510 +;2510: } +LABELV $1066 +LABELV $1065 +LABELV $1063 +LABELV $1061 +LABELV $1059 +LABELV $1057 +LABELV $1055 +LABELV $1053 +LABELV $1051 +LABELV $1049 +line 2512 +;2511: +;2512: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2513 +;2513: } +LABELV $1046 +line 2469 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $1045 +line 2515 +;2514: +;2515: OptionalSArgument = ConcatArgs( 2 ); +CNSTI4 2 +ARGI4 +ADDRLP4 336 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 336 +INDIRP4 +ASGNP4 +line 2517 +;2516: +;2517: if (OptionalSArgument) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1068 +line 2518 +;2518: { +line 2519 +;2519: OptionalArgument = atoi(OptionalSArgument); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 340 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 340 +INDIRI4 +ASGNI4 +line 2520 +;2520: } +LABELV $1068 +line 2522 +;2521: +;2522: if (OptionalSArgument && OptionalSArgument[0]) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1070 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $1070 +line 2523 +;2523: { +line 2524 +;2524: WPFlagsModify(OptionalArgument, FlagsFromArgument); +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRGP4 WPFlagsModify +CALLV +pop +line 2525 +;2525: } +ADDRGP4 $1071 +JUMPV +LABELV $1070 +line 2527 +;2526: else +;2527: { +line 2528 +;2528: G_Printf(S_COLOR_YELLOW "Waypoint number (to modify) needed for bot_wp_switchflags\nSyntax: bot_wp_switchflags \n"); +ADDRGP4 $1072 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 2529 +;2529: } +LABELV $1071 +line 2530 +;2530: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $1038 +line 2533 +;2531: } +;2532: +;2533: if (Q_stricmp (cmd, "bot_wp_killoneways") == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $1075 +ARGP4 +ADDRLP4 328 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 328 +INDIRI4 +CNSTI4 0 +NEI4 $1073 +line 2534 +;2534: { +line 2535 +;2535: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $1077 +JUMPV +LABELV $1076 +line 2538 +;2536: +;2537: while (i < gWPNum) +;2538: { +line 2539 +;2539: if (gWPArray[i] && gWPArray[i]->inuse) +ADDRLP4 332 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 332 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1079 +ADDRLP4 332 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $1079 +line 2540 +;2540: { +line 2541 +;2541: if (gWPArray[i]->flags & WPFLAG_ONEWAY_FWD) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +CNSTI4 16384 +BANDI4 +CNSTI4 0 +EQI4 $1081 +line 2542 +;2542: { +line 2543 +;2543: gWPArray[i]->flags -= WPFLAG_ONEWAY_FWD; +ADDRLP4 336 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 336 +INDIRP4 +ADDRLP4 336 +INDIRP4 +INDIRI4 +CNSTI4 16384 +SUBI4 +ASGNI4 +line 2544 +;2544: } +LABELV $1081 +line 2545 +;2545: if (gWPArray[i]->flags & WPFLAG_ONEWAY_BACK) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +CNSTI4 32768 +BANDI4 +CNSTI4 0 +EQI4 $1083 +line 2546 +;2546: { +line 2547 +;2547: gWPArray[i]->flags -= WPFLAG_ONEWAY_BACK; +ADDRLP4 336 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 gWPArray +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 336 +INDIRP4 +ADDRLP4 336 +INDIRP4 +INDIRI4 +CNSTI4 32768 +SUBI4 +ASGNI4 +line 2548 +;2548: } +LABELV $1083 +line 2549 +;2549: } +LABELV $1079 +line 2551 +;2550: +;2551: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2552 +;2552: } +LABELV $1077 +line 2537 +ADDRLP4 0 +INDIRI4 +ADDRGP4 gWPNum +INDIRI4 +LTI4 $1076 +line 2554 +;2553: +;2554: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $1073 +line 2557 +;2555: } +;2556: +;2557: if (Q_stricmp (cmd, "bot_wp_save") == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $1087 +ARGP4 +ADDRLP4 332 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 332 +INDIRI4 +CNSTI4 0 +NEI4 $1085 +line 2558 +;2558: { +line 2559 +;2559: gDeactivated = 0; +ADDRGP4 gDeactivated +CNSTF4 0 +ASGNF4 +line 2560 +;2560: trap_Cvar_Register( &mapname, "mapname", "", CVAR_SERVERINFO | CVAR_ROM ); +ADDRLP4 20 +ARGP4 +ADDRGP4 $911 +ARGP4 +ADDRGP4 $912 +ARGP4 +CNSTI4 68 +ARGI4 +ADDRGP4 trap_Cvar_Register +CALLV +pop +line 2561 +;2561: SavePathData(mapname.string); +ADDRLP4 20+16 +ARGP4 +ADDRGP4 SavePathData +CALLI4 +pop +line 2562 +;2562: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $959 +JUMPV +LABELV $1085 +line 2565 +;2563: } +;2564: +;2565: return 0; +CNSTI4 0 +RETI4 +LABELV $959 +endproc AcceptBotCommand 344 16 +import floattime +bss +export nodenum +align 4 +LABELV nodenum +skip 4 +export nodetable +align 4 +LABELV nodetable +skip 131072 +export gWPArray +align 4 +LABELV gWPArray +skip 16384 +import gBotChatBuffer +import eFlagBlue +import eFlagRed +import oFlagBlue +import flagBlue +import oFlagRed +import flagRed +import bot_wp_visconnect +import bot_wp_distconnect +import bot_wp_clearweight +import bot_wp_edit +import bot_wp_info +import bot_camp +import bot_attachments +import bot_forgimmick +import bot_forcepowers +import ConcatArgs +import GetBestIdleGoal +import GetNearestVisibleWP +import BotIsAChickenWuss +import OrgVisibleBox +import StandardBotAI +import BotDoChat +import BotUtilizePersonality +import NumBots +import BotResetState +import B_Free +import B_Alloc +import B_TempFree +import B_TempAlloc +import GetBotLibAPI +import trap_ROFF_Purge_Ent +import trap_ROFF_Play +import trap_ROFF_Cache +import trap_ROFF_UpdateEntities +import trap_ROFF_Clean +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_SnapVector +import trap_GeneticParentsAndChildSelection +import trap_BotResetWeaponState +import trap_BotFreeWeaponState +import trap_BotAllocWeaponState +import trap_BotLoadWeaponWeights +import trap_BotGetWeaponInfo +import trap_BotChooseBestFightWeapon +import trap_BotAddAvoidSpot +import trap_BotInitMoveState +import trap_BotFreeMoveState +import trap_BotAllocMoveState +import trap_BotPredictVisiblePosition +import trap_BotMovementViewTarget +import trap_BotReachabilityArea +import trap_BotResetLastAvoidReach +import trap_BotResetAvoidReach +import trap_BotMoveInDirection +import trap_BotMoveToGoal +import trap_BotResetMoveState +import trap_BotFreeGoalState +import trap_BotAllocGoalState +import trap_BotMutateGoalFuzzyLogic +import trap_BotSaveGoalFuzzyLogic +import trap_BotInterbreedGoalFuzzyLogic +import trap_BotFreeItemWeights +import trap_BotLoadItemWeights +import trap_BotUpdateEntityItems +import trap_BotInitLevelItems +import trap_BotSetAvoidGoalTime +import trap_BotAvoidGoalTime +import trap_BotGetLevelItemGoal +import trap_BotGetMapLocationGoal +import trap_BotGetNextCampSpotGoal +import trap_BotItemGoalInVisButNotVisible +import trap_BotTouchingGoal +import trap_BotChooseNBGItem +import trap_BotChooseLTGItem +import trap_BotGetSecondGoal +import trap_BotGetTopGoal +import trap_BotGoalName +import trap_BotDumpGoalStack +import trap_BotDumpAvoidGoals +import trap_BotEmptyGoalStack +import trap_BotPopGoal +import trap_BotPushGoal +import trap_BotResetAvoidGoals +import trap_BotRemoveFromAvoidGoals +import trap_BotResetGoalState +import trap_BotSetChatName +import trap_BotSetChatGender +import trap_BotLoadChatFile +import trap_BotReplaceSynonyms +import trap_UnifyWhiteSpaces +import trap_BotMatchVariable +import trap_BotFindMatch +import trap_StringContains +import trap_BotGetChatMessage +import trap_BotEnterChat +import trap_BotChatLength +import trap_BotReplyChat +import trap_BotNumInitialChats +import trap_BotInitialChat +import trap_BotNumConsoleMessages +import trap_BotNextConsoleMessage +import trap_BotRemoveConsoleMessage +import trap_BotQueueConsoleMessage +import trap_BotFreeChatState +import trap_BotAllocChatState +import trap_Characteristic_String +import trap_Characteristic_BInteger +import trap_Characteristic_Integer +import trap_Characteristic_BFloat +import trap_Characteristic_Float +import trap_BotFreeCharacter +import trap_BotLoadCharacter +import trap_EA_ResetInput +import trap_EA_GetInput +import trap_EA_EndRegular +import trap_EA_ForcePower +import trap_EA_Alt_Attack +import trap_EA_View +import trap_EA_Move +import trap_EA_DelayedJump +import trap_EA_Jump +import trap_EA_SelectWeapon +import trap_EA_MoveRight +import trap_EA_MoveLeft +import trap_EA_MoveBack +import trap_EA_MoveForward +import trap_EA_MoveDown +import trap_EA_MoveUp +import trap_EA_Crouch +import trap_EA_Respawn +import trap_EA_Use +import trap_EA_Attack +import trap_EA_Talk +import trap_EA_Gesture +import trap_EA_Action +import trap_EA_Command +import trap_EA_SayTeam +import trap_EA_Say +import trap_AAS_PredictClientMovement +import trap_AAS_Swimming +import trap_AAS_AlternativeRouteGoals +import trap_AAS_PredictRoute +import trap_AAS_EnableRoutingArea +import trap_AAS_AreaTravelTimeToGoalArea +import trap_AAS_AreaReachability +import trap_AAS_IntForBSPEpairKey +import trap_AAS_FloatForBSPEpairKey +import trap_AAS_VectorForBSPEpairKey +import trap_AAS_ValueForBSPEpairKey +import trap_AAS_NextBSPEntity +import trap_AAS_PointContents +import trap_AAS_TraceAreas +import trap_AAS_PointReachabilityAreaIndex +import trap_AAS_PointAreaNum +import trap_AAS_Time +import trap_AAS_PresenceTypeBoundingBox +import trap_AAS_Initialized +import trap_AAS_EntityInfo +import trap_AAS_AreaInfo +import trap_AAS_BBoxAreas +import trap_BotUserCommand +import trap_BotGetServerCommand +import trap_BotGetSnapshotEntity +import trap_BotLibTest +import trap_BotLibUpdateEntity +import trap_BotLibLoadMap +import trap_BotLibStartFrame +import trap_BotLibDefine +import trap_BotLibVarGet +import trap_BotLibVarSet +import trap_BotLibShutdown +import trap_BotLibSetup +import trap_DebugPolygonDelete +import trap_DebugPolygonCreate +import trap_GetEntityToken +import trap_GetUsercmd +import trap_BotFreeClient +import trap_BotAllocateClient +import trap_EntityContact +import trap_EntitiesInBox +import trap_UnlinkEntity +import trap_LinkEntity +import trap_AreasConnected +import trap_AdjustAreaPortalState +import trap_InPVSIgnorePortals +import trap_InPVS +import trap_PointContents +import trap_Trace +import trap_SetBrushModel +import trap_GetServerinfo +import trap_SetUserinfo +import trap_GetUserinfo +import trap_GetConfigstring +import trap_SetConfigstring +import trap_SendServerCommand +import trap_DropClient +import trap_LocateGameData +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableValue +import trap_Cvar_VariableIntegerValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_SendConsoleCommand +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Args +import trap_Argv +import trap_Argc +import trap_Milliseconds +import trap_Error +import trap_Printf +import g_timeouttospec +import g_forceDodge +import g_dismember +import g_singlePlayer +import g_enableBreath +import g_enableDust +import g_rankings +import pmove_msec +import pmove_fixed +import g_smoothClients +import g_blueteam +import g_redteam +import g_debugUp +import g_debugRight +import g_debugForward +import g_filterBan +import g_banIPs +import g_teamForceBalance +import g_teamAutoJoin +import g_allowVote +import g_blood +import g_doWarmup +import g_warmup +import g_motd +import g_synchronousClients +import g_adaptRespawn +import g_weaponTeamRespawn +import g_weaponRespawn +import g_debugDamage +import g_debugAlloc +import g_debugMove +import g_inactivity +import g_forcerespawn +import g_quadfactor +import g_knockback +import g_speed +import g_gravity +import g_needpass +import g_password +import g_friendlySaber +import g_friendlyFire +import g_saberInterpolate +import g_capturelimit +import g_timelimit +import g_duel_fraglimit +import g_fraglimit +import g_duelWeaponDisable +import g_weaponDisable +import g_forcePowerDisable +import g_spawnInvulnerability +import g_forceRegenTime +import g_saberLocking +import g_privateDuel +import g_forceBasedTeams +import g_maxForceRank +import g_dmflags +import g_autoMapCycle +import g_restarted +import g_maxGameClients +import g_maxclients +import g_cheats +import g_dedicated +import g_gametype +import g_entities +import level +import Pickup_Team +import CheckTeamStatus +import TeamplayInfoMessage +import Team_GetLocationMsg +import Team_GetLocation +import SelectSagaSpawnPoint +import SelectCTFSpawnPoint +import Team_FreeEntity +import Team_ReturnFlag +import Team_InitGame +import Team_CheckHurtCarrier +import Team_FragBonuses +import Team_DroppedFlagThink +import AddTeamScore +import TeamColorString +import OtherTeamName +import TeamName +import OtherTeam +import BotAIStartFrame +import BotAIShutdownClient +import BotAISetupClient +import BotAILoadMap +import BotAIShutdown +import BotAISetup +import B_CleanupAlloc +import B_InitAlloc +import InFieldOfVision +import BotOrder +import OrgVisible +import InitSagaMode +import G_ClearClientLog +import G_LogExit +import G_LogWeaponOutput +import G_LogWeaponInit +import G_LogWeaponItem +import G_LogWeaponPowerup +import G_LogWeaponFrag +import G_LogWeaponDeath +import G_LogWeaponKill +import G_LogWeaponDamage +import G_LogWeaponFire +import G_LogWeaponPickup +import Jedi_DodgeEvasion +import ForceTelepathy +import ForceThrow +import ForceSeeing +import ForceTeamForceReplenish +import ForceTeamHeal +import ForceAbsorb +import ForceProtect +import ForceGrip +import ForceRage +import ForceSpeed +import ForceHeal +import ForcePowerUsableOn +import WP_ForcePowersUpdate +import WP_SpawnInitForcePowers +import WP_InitForcePowers +import WP_SaberInitBladeData +import WP_SaberCanBlock +import WP_SaberPositionUpdate +import WP_ForcePowerStop +import HasSetSaberOnly +import G_PreDefSound +import G_RefreshNextMap +import G_DoesMapSupportGametype +import BotInterbreedEndMatch +import Svcmd_BotList_f +import Svcmd_AddBot_f +import G_BotConnect +import G_RemoveQueuedBotBegin +import G_CheckBotSpawn +import G_GetBotInfoByName +import G_GetBotInfoByNumber +import G_InitBots +import UpdateTournamentInfo +import G_WriteSessionData +import G_InitWorldSession +import G_InitSessionData +import G_ReadSessionData +import Svcmd_GameMem_f +import G_InitMemory +import G_Alloc +import Team_CheckDroppedItem +import OnSameTeam +import G_RunClient +import ClientEndFrame +import ClientThink +import G_CheckClientTimeouts +import ClientCommand +import ClientBegin +import ClientDisconnect +import ClientUserinfoChanged +import ClientConnect +import G_GetStripEdString +import G_Error +import G_Printf +import SendScoreboardMessageToAllClients +import G_LogPrintf +import G_RunThink +import CheckTeamLeader +import SetLeader +import FindIntermissionPoint +import g_ff_objectives +import DeathmatchScoreboardMessage +import G_SetStats +import MoveClientToIntermission +import BlowDetpacks +import FireWeapon +import G_FilterPacket +import G_ProcessIPBans +import ConsoleCommand +import gJMSaberEnt +import SpotWouldTelefrag +import CalculateRanks +import AddScore +import player_die +import ClientSpawn +import InitBodyQue +import BeginIntermission +import respawn +import CopyToBodyQue +import SelectSpawnPoint +import SetClientViewAngle +import PickTeam +import TeamLeader +import TeamCount +import CheckGauntletAttack +import SnapVectorTowards +import CalcMuzzlePoint +import LogAccuracyHit +import WP_FireGenericBlasterMissile +import WP_FireTurretMissile +import G_PlayerBecomeATST +import ATST_ManageDamageBoxes +import TeleportPlayer +import trigger_teleporter_touch +import Touch_DoorTrigger +import G_RunMover +import WP_FireBlasterMissile +import G_ExplodeMissile +import G_BounceProjectile +import CreateMissile +import G_RunMissile +import G_ReflectMissile +import ExplodeDeath +import TossClientCubes +import TossClientItems +import TossClientWeapon +import body_die +import G_RadiusDamage +import G_Damage +import CanDamage +import trap_G2API_SetBoneAnim +import trap_G2API_GetGLAName +import trap_G2API_SetBoneAngles +import trap_G2API_CleanGhoul2Models +import trap_G2API_RemoveGhoul2Model +import trap_G2API_HasGhoul2ModelOnIndex +import trap_G2API_DuplicateGhoul2Instance +import trap_G2API_CopySpecificGhoul2Model +import trap_G2API_CopyGhoul2Instance +import trap_G2API_SetBoltInfo +import trap_G2API_AddBolt +import trap_G2API_InitGhoul2Model +import trap_G2API_GetBoltMatrix_NoReconstruct +import trap_G2API_GetBoltMatrix +import trap_G2_HaveWeGhoul2Models +import trap_G2_SetGhoul2ModelIndexes +import trap_G2_ListModelBones +import trap_G2_ListModelSurfaces +import G_SkinIndex +import BuildShaderStateConfig +import AddRemap +import G_SetOrigin +import G_AddEvent +import G_AddPredictableEvent +import vtos +import tv +import G_RunObject +import G_TouchSolids +import G_TouchTriggers +import G_EntitiesFree +import G_FreeEntity +import G_KillG2Queue +import G_SendG2KillQueue +import TryUse +import G_EntitySound +import G_SoundAtLoc +import G_Sound +import G_MuteSound +import G_ScreenShake +import G_PlayEffect +import G_TempEntity +import G_Spawn +import G_InitGentity +import G_SetAngles +import G_SetMovedir +import G_UseTargets +import G_PickTarget +import G_RadiusList +import G_Find +import G_KillBox +import G_TeamCommand +import G_EffectIndex +import G_SoundIndex +import G_ModelIndex +import SaveRegisteredItems +import RegisterItem +import ClearRegisteredItems +import Touch_Item +import Add_Ammo +import ArmorIndex +import Think_Weapon +import FinishSpawningItem +import G_SpawnItem +import SetRespawn +import LaunchItem +import Drop_Item +import PrecacheItem +import UseHoldableItem +import RespawnItem +import G_RunItem +import G_CheckTeamItems +import ItemUse_MedPack +import ItemUse_Seeker +import ItemUse_Sentry +import ItemUse_Shield +import ItemUse_Binoculars +import G_GetDuelWinner +import Cmd_EngageDuel_f +import Cmd_ToggleSaber_f +import G_ItemUsable +import Cmd_SaberAttackCycle_f +import Cmd_FollowCycle_f +import SetTeam +import BroadcastTeamChange +import StopFollowing +import Cmd_Score_f +import G_NewString +import G_SpawnEntitiesFromString +import G_SpawnVector +import G_SpawnInt +import G_SpawnFloat +import G_SpawnString +import g2SaberInstance +import precachedKyle +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $1087 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 97 +char 1 118 +char 1 101 +char 1 0 +align 1 +LABELV $1075 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 111 +char 1 110 +char 1 101 +char 1 119 +char 1 97 +char 1 121 +char 1 115 +char 1 0 +align 1 +LABELV $1072 +char 1 94 +char 1 51 +char 1 87 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 110 +char 1 117 +char 1 109 +char 1 98 +char 1 101 +char 1 114 +char 1 32 +char 1 40 +char 1 116 +char 1 111 +char 1 32 +char 1 109 +char 1 111 +char 1 100 +char 1 105 +char 1 102 +char 1 121 +char 1 41 +char 1 32 +char 1 110 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 119 +char 1 105 +char 1 116 +char 1 99 +char 1 104 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 10 +char 1 83 +char 1 121 +char 1 110 +char 1 116 +char 1 97 +char 1 120 +char 1 58 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 119 +char 1 105 +char 1 116 +char 1 99 +char 1 104 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 32 +char 1 60 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 62 +char 1 32 +char 1 60 +char 1 110 +char 1 62 +char 1 10 +char 1 0 +align 1 +LABELV $1044 +char 1 94 +char 1 51 +char 1 70 +char 1 108 +char 1 97 +char 1 103 +char 1 32 +char 1 115 +char 1 116 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 110 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 119 +char 1 105 +char 1 116 +char 1 99 +char 1 104 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 10 +char 1 84 +char 1 121 +char 1 112 +char 1 101 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 97 +char 1 32 +char 1 108 +char 1 105 +char 1 115 +char 1 116 +char 1 32 +char 1 111 +char 1 102 +char 1 32 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 32 +char 1 97 +char 1 110 +char 1 100 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 105 +char 1 114 +char 1 32 +char 1 99 +char 1 111 +char 1 114 +char 1 114 +char 1 101 +char 1 115 +char 1 112 +char 1 111 +char 1 110 +char 1 100 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 99 +char 1 104 +char 1 97 +char 1 114 +char 1 97 +char 1 99 +char 1 116 +char 1 101 +char 1 114 +char 1 115 +char 1 44 +char 1 32 +char 1 111 +char 1 114 +char 1 32 +char 1 117 +char 1 115 +char 1 101 +char 1 32 +char 1 48 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 110 +char 1 111 +char 1 32 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 46 +char 1 10 +char 1 83 +char 1 121 +char 1 110 +char 1 116 +char 1 97 +char 1 120 +char 1 58 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 119 +char 1 105 +char 1 116 +char 1 99 +char 1 104 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 32 +char 1 60 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 62 +char 1 32 +char 1 60 +char 1 110 +char 1 62 +char 1 10 +char 1 0 +align 1 +LABELV $1040 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 119 +char 1 105 +char 1 116 +char 1 99 +char 1 104 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 0 +align 1 +LABELV $1010 +char 1 94 +char 1 51 +char 1 70 +char 1 108 +char 1 97 +char 1 103 +char 1 32 +char 1 115 +char 1 116 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 110 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 10 +char 1 106 +char 1 32 +char 1 45 +char 1 32 +char 1 74 +char 1 117 +char 1 109 +char 1 112 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 10 +char 1 100 +char 1 32 +char 1 45 +char 1 32 +char 1 68 +char 1 117 +char 1 99 +char 1 107 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 10 +char 1 99 +char 1 32 +char 1 45 +char 1 32 +char 1 83 +char 1 110 +char 1 105 +char 1 112 +char 1 101 +char 1 32 +char 1 111 +char 1 114 +char 1 32 +char 1 99 +char 1 97 +char 1 109 +char 1 112 +char 1 32 +char 1 115 +char 1 116 +char 1 97 +char 1 110 +char 1 100 +char 1 105 +char 1 110 +char 1 103 +char 1 10 +char 1 102 +char 1 32 +char 1 45 +char 1 32 +char 1 87 +char 1 97 +char 1 105 +char 1 116 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 102 +char 1 117 +char 1 110 +char 1 99 +char 1 10 +char 1 109 +char 1 32 +char 1 45 +char 1 32 +char 1 68 +char 1 111 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 119 +char 1 104 +char 1 101 +char 1 110 +char 1 32 +char 1 102 +char 1 117 +char 1 110 +char 1 99 +char 1 32 +char 1 105 +char 1 115 +char 1 32 +char 1 117 +char 1 110 +char 1 100 +char 1 101 +char 1 114 +char 1 10 +char 1 115 +char 1 32 +char 1 45 +char 1 32 +char 1 83 +char 1 110 +char 1 105 +char 1 112 +char 1 101 +char 1 32 +char 1 111 +char 1 114 +char 1 32 +char 1 99 +char 1 97 +char 1 109 +char 1 112 +char 1 10 +char 1 120 +char 1 32 +char 1 45 +char 1 32 +char 1 79 +char 1 110 +char 1 101 +char 1 119 +char 1 97 +char 1 121 +char 1 44 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 119 +char 1 97 +char 1 114 +char 1 100 +char 1 10 +char 1 121 +char 1 32 +char 1 45 +char 1 32 +char 1 79 +char 1 110 +char 1 101 +char 1 119 +char 1 97 +char 1 121 +char 1 44 +char 1 32 +char 1 98 +char 1 97 +char 1 99 +char 1 107 +char 1 10 +char 1 103 +char 1 32 +char 1 45 +char 1 32 +char 1 77 +char 1 105 +char 1 115 +char 1 115 +char 1 105 +char 1 111 +char 1 110 +char 1 32 +char 1 103 +char 1 111 +char 1 97 +char 1 108 +char 1 10 +char 1 110 +char 1 32 +char 1 45 +char 1 32 +char 1 78 +char 1 111 +char 1 32 +char 1 118 +char 1 105 +char 1 115 +char 1 105 +char 1 98 +char 1 105 +char 1 108 +char 1 105 +char 1 116 +char 1 121 +char 1 10 +char 1 69 +char 1 120 +char 1 97 +char 1 109 +char 1 112 +char 1 108 +char 1 101 +char 1 32 +char 1 40 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 97 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 32 +char 1 119 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 32 +char 1 106 +char 1 117 +char 1 109 +char 1 112 +char 1 32 +char 1 97 +char 1 116 +char 1 44 +char 1 32 +char 1 97 +char 1 110 +char 1 100 +char 1 32 +char 1 114 +char 1 101 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 101 +char 1 32 +char 1 111 +char 1 110 +char 1 32 +char 1 119 +char 1 104 +char 1 101 +char 1 110 +char 1 32 +char 1 116 +char 1 114 +char 1 97 +char 1 118 +char 1 101 +char 1 108 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 97 +char 1 32 +char 1 116 +char 1 114 +char 1 97 +char 1 105 +char 1 108 +char 1 32 +char 1 98 +char 1 97 +char 1 99 +char 1 107 +char 1 119 +char 1 97 +char 1 114 +char 1 100 +char 1 115 +char 1 41 +char 1 58 +char 1 10 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 32 +char 1 106 +char 1 120 +char 1 10 +char 1 0 +align 1 +LABELV $1006 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $999 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 112 +char 1 97 +char 1 119 +char 1 110 +char 1 116 +char 1 101 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $996 +char 1 94 +char 1 51 +char 1 89 +char 1 111 +char 1 117 +char 1 32 +char 1 100 +char 1 105 +char 1 100 +char 1 110 +char 1 39 +char 1 116 +char 1 32 +char 1 115 +char 1 112 +char 1 101 +char 1 99 +char 1 105 +char 1 102 +char 1 121 +char 1 32 +char 1 97 +char 1 110 +char 1 32 +char 1 105 +char 1 110 +char 1 100 +char 1 101 +char 1 120 +char 1 46 +char 1 32 +char 1 65 +char 1 115 +char 1 115 +char 1 117 +char 1 109 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $991 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 116 +char 1 101 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $984 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 114 +char 1 101 +char 1 109 +char 1 0 +align 1 +LABELV $977 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 0 +align 1 +LABELV $974 +char 1 94 +char 1 51 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 97 +char 1 118 +char 1 101 +char 1 94 +char 1 55 +char 1 32 +char 1 45 +char 1 32 +char 1 83 +char 1 97 +char 1 118 +char 1 101 +char 1 115 +char 1 32 +char 1 97 +char 1 108 +char 1 108 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 100 +char 1 97 +char 1 116 +char 1 97 +char 1 32 +char 1 105 +char 1 110 +char 1 116 +char 1 111 +char 1 32 +char 1 97 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 108 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 32 +char 1 117 +char 1 115 +char 1 101 +char 1 10 +char 1 0 +align 1 +LABELV $973 +char 1 94 +char 1 51 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 111 +char 1 110 +char 1 101 +char 1 119 +char 1 97 +char 1 121 +char 1 115 +char 1 94 +char 1 55 +char 1 32 +char 1 45 +char 1 32 +char 1 82 +char 1 101 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 115 +char 1 32 +char 1 111 +char 1 110 +char 1 101 +char 1 119 +char 1 97 +char 1 121 +char 1 32 +char 1 40 +char 1 98 +char 1 97 +char 1 99 +char 1 107 +char 1 119 +char 1 97 +char 1 114 +char 1 100 +char 1 32 +char 1 97 +char 1 110 +char 1 100 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 119 +char 1 97 +char 1 114 +char 1 100 +char 1 41 +char 1 32 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 32 +char 1 111 +char 1 110 +char 1 32 +char 1 97 +char 1 108 +char 1 108 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 115 +char 1 32 +char 1 105 +char 1 110 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 32 +char 1 108 +char 1 101 +char 1 118 +char 1 101 +char 1 108 +char 1 10 +char 1 10 +char 1 0 +align 1 +LABELV $972 +char 1 94 +char 1 51 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 116 +char 1 101 +char 1 108 +char 1 101 +char 1 94 +char 1 55 +char 1 32 +char 1 45 +char 1 32 +char 1 84 +char 1 101 +char 1 108 +char 1 101 +char 1 112 +char 1 111 +char 1 114 +char 1 116 +char 1 32 +char 1 121 +char 1 111 +char 1 117 +char 1 114 +char 1 115 +char 1 101 +char 1 108 +char 1 102 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 32 +char 1 115 +char 1 112 +char 1 101 +char 1 99 +char 1 105 +char 1 102 +char 1 105 +char 1 101 +char 1 100 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 39 +char 1 115 +char 1 32 +char 1 108 +char 1 111 +char 1 99 +char 1 97 +char 1 116 +char 1 105 +char 1 111 +char 1 110 +char 1 10 +char 1 0 +align 1 +LABELV $971 +char 1 94 +char 1 51 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 119 +char 1 105 +char 1 116 +char 1 99 +char 1 104 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 94 +char 1 55 +char 1 32 +char 1 45 +char 1 32 +char 1 83 +char 1 119 +char 1 105 +char 1 116 +char 1 99 +char 1 104 +char 1 101 +char 1 115 +char 1 32 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 32 +char 1 111 +char 1 110 +char 1 32 +char 1 97 +char 1 110 +char 1 32 +char 1 101 +char 1 120 +char 1 105 +char 1 115 +char 1 116 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 40 +char 1 116 +char 1 121 +char 1 112 +char 1 101 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 115 +char 1 119 +char 1 105 +char 1 116 +char 1 99 +char 1 104 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 104 +char 1 101 +char 1 108 +char 1 112 +char 1 41 +char 1 10 +char 1 10 +char 1 0 +align 1 +LABELV $970 +char 1 94 +char 1 51 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 94 +char 1 55 +char 1 32 +char 1 45 +char 1 32 +char 1 83 +char 1 97 +char 1 109 +char 1 101 +char 1 32 +char 1 97 +char 1 115 +char 1 32 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 44 +char 1 32 +char 1 98 +char 1 117 +char 1 116 +char 1 32 +char 1 97 +char 1 100 +char 1 100 +char 1 115 +char 1 32 +char 1 97 +char 1 32 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 40 +char 1 116 +char 1 121 +char 1 112 +char 1 101 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 104 +char 1 101 +char 1 108 +char 1 112 +char 1 41 +char 1 10 +char 1 10 +char 1 0 +align 1 +LABELV $969 +char 1 94 +char 1 51 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 114 +char 1 101 +char 1 109 +char 1 94 +char 1 55 +char 1 32 +char 1 45 +char 1 32 +char 1 82 +char 1 101 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 32 +char 1 97 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 40 +char 1 114 +char 1 101 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 115 +char 1 32 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 32 +char 1 117 +char 1 110 +char 1 108 +char 1 101 +char 1 115 +char 1 115 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 105 +char 1 110 +char 1 100 +char 1 101 +char 1 120 +char 1 32 +char 1 105 +char 1 115 +char 1 32 +char 1 115 +char 1 112 +char 1 101 +char 1 99 +char 1 105 +char 1 102 +char 1 105 +char 1 101 +char 1 100 +char 1 32 +char 1 97 +char 1 115 +char 1 32 +char 1 97 +char 1 32 +char 1 112 +char 1 97 +char 1 114 +char 1 97 +char 1 109 +char 1 101 +char 1 116 +char 1 101 +char 1 114 +char 1 41 +char 1 10 +char 1 10 +char 1 0 +align 1 +LABELV $968 +char 1 94 +char 1 51 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 97 +char 1 100 +char 1 100 +char 1 94 +char 1 55 +char 1 32 +char 1 45 +char 1 32 +char 1 65 +char 1 100 +char 1 100 +char 1 32 +char 1 97 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 40 +char 1 111 +char 1 112 +char 1 116 +char 1 105 +char 1 111 +char 1 110 +char 1 97 +char 1 108 +char 1 32 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 112 +char 1 97 +char 1 114 +char 1 97 +char 1 109 +char 1 101 +char 1 116 +char 1 101 +char 1 114 +char 1 32 +char 1 119 +char 1 105 +char 1 108 +char 1 108 +char 1 32 +char 1 105 +char 1 110 +char 1 115 +char 1 101 +char 1 114 +char 1 116 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 97 +char 1 102 +char 1 116 +char 1 101 +char 1 114 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 32 +char 1 115 +char 1 112 +char 1 101 +char 1 99 +char 1 105 +char 1 102 +char 1 105 +char 1 101 +char 1 100 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 105 +char 1 110 +char 1 100 +char 1 101 +char 1 120 +char 1 32 +char 1 105 +char 1 110 +char 1 32 +char 1 97 +char 1 32 +char 1 116 +char 1 114 +char 1 97 +char 1 105 +char 1 108 +char 1 41 +char 1 10 +char 1 10 +char 1 0 +align 1 +LABELV $967 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 119 +char 1 112 +char 1 95 +char 1 99 +char 1 109 +char 1 100 +char 1 108 +char 1 105 +char 1 115 +char 1 116 +char 1 0 +align 1 +LABELV $937 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 95 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 95 +char 1 100 +char 1 101 +char 1 97 +char 1 116 +char 1 104 +char 1 109 +char 1 97 +char 1 116 +char 1 99 +char 1 104 +char 1 0 +align 1 +LABELV $936 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 95 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 95 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 116 +char 1 0 +align 1 +LABELV $912 +char 1 0 +align 1 +LABELV $911 +char 1 109 +char 1 97 +char 1 112 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $909 +char 1 80 +char 1 97 +char 1 116 +char 1 104 +char 1 32 +char 1 100 +char 1 97 +char 1 116 +char 1 97 +char 1 32 +char 1 104 +char 1 97 +char 1 115 +char 1 32 +char 1 98 +char 1 101 +char 1 101 +char 1 110 +char 1 32 +char 1 115 +char 1 97 +char 1 118 +char 1 101 +char 1 100 +char 1 32 +char 1 97 +char 1 110 +char 1 100 +char 1 32 +char 1 117 +char 1 112 +char 1 100 +char 1 97 +char 1 116 +char 1 101 +char 1 100 +char 1 46 +char 1 32 +char 1 89 +char 1 111 +char 1 117 +char 1 32 +char 1 109 +char 1 97 +char 1 121 +char 1 32 +char 1 110 +char 1 101 +char 1 101 +char 1 100 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 114 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 116 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 32 +char 1 108 +char 1 101 +char 1 118 +char 1 101 +char 1 108 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 115 +char 1 111 +char 1 109 +char 1 101 +char 1 32 +char 1 116 +char 1 104 +char 1 105 +char 1 110 +char 1 103 +char 1 115 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 98 +char 1 101 +char 1 32 +char 1 112 +char 1 114 +char 1 111 +char 1 112 +char 1 101 +char 1 114 +char 1 108 +char 1 121 +char 1 32 +char 1 99 +char 1 97 +char 1 108 +char 1 99 +char 1 117 +char 1 108 +char 1 97 +char 1 116 +char 1 101 +char 1 100 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $890 +char 1 37 +char 1 115 +char 1 125 +char 1 32 +char 1 37 +char 1 102 +char 1 10 +char 1 0 +align 1 +LABELV $879 +char 1 37 +char 1 115 +char 1 37 +char 1 105 +char 1 32 +char 1 0 +align 1 +LABELV $878 +char 1 37 +char 1 115 +char 1 37 +char 1 105 +char 1 45 +char 1 37 +char 1 105 +char 1 32 +char 1 0 +align 1 +LABELV $872 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 102 +char 1 32 +char 1 40 +char 1 37 +char 1 102 +char 1 32 +char 1 37 +char 1 102 +char 1 32 +char 1 37 +char 1 102 +char 1 41 +char 1 32 +char 1 123 +char 1 32 +char 1 0 +align 1 +LABELV $869 +char 1 94 +char 1 49 +char 1 69 +char 1 82 +char 1 82 +char 1 79 +char 1 82 +char 1 58 +char 1 32 +char 1 67 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 111 +char 1 112 +char 1 101 +char 1 110 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 119 +char 1 114 +char 1 105 +char 1 116 +char 1 101 +char 1 32 +char 1 112 +char 1 97 +char 1 116 +char 1 104 +char 1 32 +char 1 100 +char 1 97 +char 1 116 +char 1 97 +char 1 10 +char 1 0 +align 1 +LABELV $826 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 95 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $823 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 95 +char 1 114 +char 1 101 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $732 +char 1 94 +char 1 49 +char 1 82 +char 1 111 +char 1 117 +char 1 116 +char 1 101 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 115 +char 1 32 +char 1 109 +char 1 97 +char 1 120 +char 1 105 +char 1 109 +char 1 117 +char 1 109 +char 1 32 +char 1 108 +char 1 101 +char 1 110 +char 1 103 +char 1 116 +char 1 104 +char 1 10 +char 1 0 +align 1 +LABELV $729 +char 1 94 +char 1 51 +char 1 66 +char 1 111 +char 1 116 +char 1 32 +char 1 114 +char 1 111 +char 1 117 +char 1 116 +char 1 101 +char 1 32 +char 1 100 +char 1 97 +char 1 116 +char 1 97 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 102 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $726 +char 1 98 +char 1 111 +char 1 116 +char 1 114 +char 1 111 +char 1 117 +char 1 116 +char 1 101 +char 1 115 +char 1 47 +char 1 37 +char 1 115 +char 1 46 +char 1 119 +char 1 110 +char 1 116 +char 1 0 +char 1 0 +align 1 +LABELV $688 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 0 +align 1 +LABELV $685 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 105 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 0 +align 1 +LABELV $682 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $679 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 95 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 0 +align 1 +LABELV $676 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 95 +char 1 100 +char 1 97 +char 1 114 +char 1 107 +char 1 0 +align 1 +LABELV $673 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 101 +char 1 110 +char 1 116 +char 1 114 +char 1 121 +char 1 95 +char 1 103 +char 1 117 +char 1 110 +char 1 0 +align 1 +LABELV $670 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 109 +char 1 101 +char 1 100 +char 1 112 +char 1 97 +char 1 99 +char 1 0 +align 1 +LABELV $667 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 0 +align 1 +LABELV $664 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 101 +char 1 101 +char 1 107 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $617 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 95 +char 1 115 +char 1 97 +char 1 103 +char 1 97 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 105 +char 1 118 +char 1 101 +char 1 0 +align 1 +LABELV $493 +char 1 102 +char 1 117 +char 1 110 +char 1 99 +char 1 95 +char 1 0 +align 1 +LABELV $470 +char 1 94 +char 1 51 +char 1 70 +char 1 105 +char 1 110 +char 1 105 +char 1 115 +char 1 104 +char 1 101 +char 1 100 +char 1 32 +char 1 99 +char 1 111 +char 1 110 +char 1 110 +char 1 101 +char 1 99 +char 1 116 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 37 +char 1 105 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $464 +char 1 94 +char 1 49 +char 1 67 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 108 +char 1 105 +char 1 110 +char 1 107 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 37 +char 1 105 +char 1 44 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 108 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 32 +char 1 104 +char 1 105 +char 1 116 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $444 +char 1 94 +char 1 51 +char 1 83 +char 1 105 +char 1 110 +char 1 99 +char 1 101 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 115 +char 1 32 +char 1 99 +char 1 97 +char 1 110 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 98 +char 1 101 +char 1 32 +char 1 99 +char 1 111 +char 1 110 +char 1 110 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 44 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 104 +char 1 97 +char 1 115 +char 1 32 +char 1 98 +char 1 101 +char 1 101 +char 1 110 +char 1 32 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 32 +char 1 97 +char 1 115 +char 1 32 +char 1 111 +char 1 110 +char 1 108 +char 1 121 +char 1 45 +char 1 102 +char 1 111 +char 1 114 +char 1 119 +char 1 97 +char 1 114 +char 1 100 +char 1 32 +char 1 97 +char 1 110 +char 1 100 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 104 +char 1 97 +char 1 115 +char 1 32 +char 1 98 +char 1 101 +char 1 101 +char 1 110 +char 1 32 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 103 +char 1 101 +char 1 100 +char 1 32 +char 1 97 +char 1 115 +char 1 32 +char 1 111 +char 1 110 +char 1 108 +char 1 121 +char 1 45 +char 1 98 +char 1 97 +char 1 99 +char 1 107 +char 1 119 +char 1 97 +char 1 114 +char 1 100 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $443 +char 1 94 +char 1 49 +char 1 67 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 108 +char 1 105 +char 1 110 +char 1 107 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 37 +char 1 105 +char 1 44 +char 1 32 +char 1 117 +char 1 110 +char 1 114 +char 1 101 +char 1 97 +char 1 99 +char 1 104 +char 1 97 +char 1 98 +char 1 108 +char 1 101 +char 1 32 +char 1 98 +char 1 121 +char 1 32 +char 1 110 +char 1 111 +char 1 100 +char 1 101 +char 1 32 +char 1 98 +char 1 114 +char 1 97 +char 1 110 +char 1 99 +char 1 104 +char 1 105 +char 1 110 +char 1 103 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $339 +char 1 94 +char 1 51 +char 1 80 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 105 +char 1 115 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 99 +char 1 111 +char 1 110 +char 1 110 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 45 +char 1 32 +char 1 82 +char 1 101 +char 1 112 +char 1 97 +char 1 105 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 46 +char 1 46 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $270 +char 1 94 +char 1 51 +char 1 87 +char 1 80 +char 1 70 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 77 +char 1 111 +char 1 100 +char 1 105 +char 1 102 +char 1 121 +char 1 58 +char 1 32 +char 1 87 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 100 +char 1 111 +char 1 101 +char 1 115 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 101 +char 1 120 +char 1 105 +char 1 115 +char 1 116 +char 1 10 +char 1 0 +align 1 +LABELV $220 +char 1 94 +char 1 51 +char 1 87 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 105 +char 1 110 +char 1 100 +char 1 101 +char 1 120 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 115 +char 1 104 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 32 +char 1 101 +char 1 120 +char 1 105 +char 1 115 +char 1 116 +char 1 44 +char 1 32 +char 1 98 +char 1 117 +char 1 116 +char 1 32 +char 1 100 +char 1 111 +char 1 101 +char 1 115 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 40 +char 1 63 +char 1 41 +char 1 10 +char 1 0 +align 1 +LABELV $212 +char 1 94 +char 1 51 +char 1 87 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 110 +char 1 117 +char 1 109 +char 1 98 +char 1 101 +char 1 114 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 100 +char 1 111 +char 1 101 +char 1 115 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 101 +char 1 120 +char 1 105 +char 1 115 +char 1 116 +char 1 10 +char 1 0 +align 1 +LABELV $183 +char 1 94 +char 1 49 +char 1 69 +char 1 82 +char 1 82 +char 1 79 +char 1 82 +char 1 58 +char 1 32 +char 1 67 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 97 +char 1 108 +char 1 108 +char 1 111 +char 1 99 +char 1 97 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 109 +char 1 101 +char 1 109 +char 1 111 +char 1 114 +char 1 121 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 10 +char 1 0 +align 1 +LABELV $178 +char 1 94 +char 1 51 +char 1 87 +char 1 97 +char 1 114 +char 1 110 +char 1 105 +char 1 110 +char 1 103 +char 1 58 +char 1 32 +char 1 87 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 108 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 32 +char 1 104 +char 1 105 +char 1 116 +char 1 32 +char 1 40 +char 1 37 +char 1 105 +char 1 41 +char 1 10 +char 1 0 +align 1 +LABELV $174 +char 1 94 +char 1 49 +char 1 70 +char 1 65 +char 1 84 +char 1 65 +char 1 76 +char 1 32 +char 1 69 +char 1 82 +char 1 82 +char 1 79 +char 1 82 +char 1 58 +char 1 32 +char 1 67 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 97 +char 1 108 +char 1 108 +char 1 111 +char 1 99 +char 1 97 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 109 +char 1 101 +char 1 109 +char 1 111 +char 1 114 +char 1 121 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 119 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 10 +char 1 0 +align 1 +LABELV $166 +char 1 94 +char 1 51 +char 1 87 +char 1 97 +char 1 121 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 70 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 32 +char 1 45 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 40 +char 1 37 +char 1 115 +char 1 41 +char 1 32 +char 1 40 +char 1 119 +char 1 37 +char 1 102 +char 1 41 +char 1 10 +char 1 79 +char 1 114 +char 1 105 +char 1 103 +char 1 105 +char 1 110 +char 1 32 +char 1 45 +char 1 32 +char 1 40 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 41 +char 1 10 +char 1 0 +align 1 +LABELV $124 +char 1 117 +char 1 110 +char 1 107 +char 1 110 +char 1 111 +char 1 119 +char 1 110 +char 1 0 +char 1 0 +align 1 +LABELV $84 +char 1 110 +char 1 111 +char 1 110 +char 1 101 +char 1 0 +char 1 0 diff --git a/CODE-mp/game/vm/bg_lib.asm b/CODE-mp/game/vm/bg_lib.asm new file mode 100644 index 0000000..66a24de --- /dev/null +++ b/CODE-mp/game/vm/bg_lib.asm @@ -0,0 +1,5877 @@ +code +proc swapfunc 24 0 +file "../bg_lib.c" +line 81 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// Copyright (C) 1999-2000 Id Software, Inc. +;4:// +;5:// bg_lib,c -- standard C library replacement routines used by code +;6:// compiled for the virtual machine +;7: +;8:#include "q_shared.h" +;9: +;10:/*- +;11: * Copyright (c) 1992, 1993 +;12: * The Regents of the University of California. All rights reserved. +;13: * +;14: * Redistribution and use in source and binary forms, with or without +;15: * modification, are permitted provided that the following conditions +;16: * are met: +;17: * 1. Redistributions of source code must retain the above copyright +;18: * notice, this list of conditions and the following disclaimer. +;19: * 2. Redistributions in binary form must reproduce the above copyright +;20: * notice, this list of conditions and the following disclaimer in the +;21: * documentation and/or other materials provided with the distribution. +;22: * 3. All advertising materials mentioning features or use of this software +;23: * must display the following acknowledgement: +;24: * This product includes software developed by the University of +;25: * California, Berkeley and its contributors. +;26: * 4. Neither the name of the University nor the names of its contributors +;27: * may be used to endorse or promote products derived from this software +;28: * without specific prior written permission. +;29: * +;30: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +;31: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;32: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +;33: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +;34: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;35: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +;36: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +;37: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +;38: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +;39: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +;40: * SUCH DAMAGE. +;41: */ +;42: +;43:#if defined(LIBC_SCCS) && !defined(lint) +;44:#if 0 +;45:static char sccsid[] = "@(#)qsort.c 8.1 (Berkeley) 6/4/93"; +;46:#endif +;47:static const char rcsid[] = +;48: "$Id: bg_lib.c,v 1.23 2000/02/04 06:46:50 zoid Exp $"; +;49:#endif /* LIBC_SCCS and not lint */ +;50: +;51:// bk001127 - needed for DLL's +;52:#if !defined( Q3_VM ) +;53:typedef int cmp_t(const void *, const void *); +;54:#endif +;55: +;56:static char* med3(char *, char *, char *, cmp_t *); +;57:static void swapfunc(char *, char *, int, int); +;58: +;59:#ifndef min +;60:#define min(a, b) (a) < (b) ? a : b +;61:#endif +;62: +;63:/* +;64: * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function". +;65: */ +;66:#define swapcode(TYPE, parmi, parmj, n) { \ +;67: long i = (n) / sizeof (TYPE); \ +;68: register TYPE *pi = (TYPE *) (parmi); \ +;69: register TYPE *pj = (TYPE *) (parmj); \ +;70: do { \ +;71: register TYPE t = *pi; \ +;72: *pi++ = *pj; \ +;73: *pj++ = t; \ +;74: } while (--i > 0); \ +;75:} +;76: +;77:#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \ +;78: es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1; +;79: +;80:static void swapfunc( char* a, char* b, int n, int swaptype) +;81:{ +line 82 +;82: if(swaptype <= 1) +ADDRFP4 12 +INDIRI4 +CNSTI4 1 +GTI4 $37 +line 83 +;83: swapcode(long, a, b, n) +ADDRLP4 8 +ADDRFP4 8 +INDIRI4 +CVIU4 4 +CNSTI4 2 +RSHU4 +CVUI4 4 +ASGNI4 +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +LABELV $39 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 16 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 20 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ASGNI4 +LABELV $40 +ADDRLP4 12 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +GTI4 $39 +ADDRGP4 $38 +JUMPV +LABELV $37 +line 85 +;84: else +;85: swapcode(char, a, b, n) +ADDRLP4 8 +ADDRFP4 8 +INDIRI4 +CVIU4 4 +CVUI4 4 +ASGNI4 +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +LABELV $42 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 16 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRLP4 20 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 20 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 12 +INDIRI1 +ASGNI1 +LABELV $43 +ADDRLP4 12 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +GTI4 $42 +LABELV $38 +line 86 +;86:} +LABELV $36 +endproc swapfunc 24 0 +proc med3 40 8 +line 99 +;87: +;88:#define swap(a, b) \ +;89: if (swaptype == 0) { \ +;90: long t = *(long *)(a); \ +;91: *(long *)(a) = *(long *)(b); \ +;92: *(long *)(b) = t; \ +;93: } else \ +;94: swapfunc(a, b, es, swaptype) +;95: +;96:#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype) +;97: +;98:static char *med3(char* a, char* b, char* c, cmp_t* cmp) +;99:{ +line 100 +;100: return cmp(a, b) < 0 ? +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 20 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +GEI4 $51 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 24 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +GEI4 $53 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRGP4 $54 +JUMPV +LABELV $53 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 28 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +GEI4 $55 +ADDRLP4 8 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRGP4 $56 +JUMPV +LABELV $55 +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +LABELV $56 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ASGNP4 +LABELV $54 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRGP4 $52 +JUMPV +LABELV $51 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 32 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +LEI4 $57 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRGP4 $58 +JUMPV +LABELV $57 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 36 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 0 +GEI4 $59 +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $60 +JUMPV +LABELV $59 +ADDRLP4 16 +ADDRFP4 8 +INDIRP4 +ASGNP4 +LABELV $60 +ADDRLP4 12 +ADDRLP4 16 +INDIRP4 +ASGNP4 +LABELV $58 +ADDRLP4 0 +ADDRLP4 12 +INDIRP4 +ASGNP4 +LABELV $52 +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $45 +endproc med3 40 8 +export qsort +proc qsort 104 16 +line 106 +;101: (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a )) +;102: :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c )); +;103:} +;104: +;105:void qsort( void* a, size_t n, size_t es, cmp_t* cmp) +;106:{ +LABELV $62 +line 110 +;107: char *pa, *pb, *pc, *pd, *pl, *pm, *pn; +;108: int d, r, swaptype, swap_cnt; +;109: +;110:loop: SWAPINIT(a, es); +ADDRLP4 52 +CNSTU4 3 +ASGNU4 +ADDRLP4 56 +CNSTU4 0 +ASGNU4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +CVUI4 4 +CVIU4 4 +ADDRLP4 52 +INDIRU4 +BANDU4 +ADDRLP4 56 +INDIRU4 +NEU4 $67 +ADDRFP4 8 +INDIRI4 +CVIU4 4 +ADDRLP4 52 +INDIRU4 +BANDU4 +ADDRLP4 56 +INDIRU4 +EQU4 $65 +LABELV $67 +ADDRLP4 44 +CNSTI4 2 +ASGNI4 +ADDRGP4 $66 +JUMPV +LABELV $65 +ADDRFP4 8 +INDIRI4 +CVIU4 4 +CNSTU4 4 +NEU4 $68 +ADDRLP4 48 +CNSTI4 0 +ASGNI4 +ADDRGP4 $69 +JUMPV +LABELV $68 +ADDRLP4 48 +CNSTI4 1 +ASGNI4 +LABELV $69 +ADDRLP4 44 +ADDRLP4 48 +INDIRI4 +ASGNI4 +LABELV $66 +ADDRLP4 16 +ADDRLP4 44 +INDIRI4 +ASGNI4 +line 111 +;111: swap_cnt = 0; +ADDRLP4 28 +CNSTI4 0 +ASGNI4 +line 112 +;112: if (n < 7) { +ADDRFP4 4 +INDIRI4 +CNSTI4 7 +GEI4 $70 +line 113 +;113: for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es) +ADDRLP4 32 +ADDRFP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRGP4 $75 +JUMPV +LABELV $72 +line 114 +;114: for (pl = pm; pl > (char *)a && cmp(pl - es, pl) > 0; +ADDRLP4 0 +ADDRLP4 32 +INDIRP4 +ASGNP4 +ADDRGP4 $79 +JUMPV +LABELV $76 +line 116 +;115: pl -= es) +;116: swap(pl, pl - es); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $80 +ADDRLP4 60 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ADDRLP4 60 +INDIRI4 +ASGNI4 +ADDRGP4 $81 +JUMPV +LABELV $80 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 64 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 64 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 64 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $81 +LABELV $77 +line 115 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +LABELV $79 +line 114 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +LEU4 $82 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +GTI4 $76 +LABELV $82 +LABELV $73 +line 113 +ADDRLP4 32 +ADDRFP4 8 +INDIRI4 +ADDRLP4 32 +INDIRP4 +ADDP4 +ASGNP4 +LABELV $75 +ADDRLP4 32 +INDIRP4 +CVPU4 4 +ADDRFP4 4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CVPU4 4 +LTU4 $72 +line 117 +;117: return; +ADDRGP4 $61 +JUMPV +LABELV $70 +line 119 +;118: } +;119: pm = (char *)a + (n / 2) * es; +ADDRLP4 32 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +DIVI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +line 120 +;120: if (n > 7) { +ADDRFP4 4 +INDIRI4 +CNSTI4 7 +LEI4 $83 +line 121 +;121: pl = a; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 122 +;122: pn = (char *)a + (n - 1) * es; +ADDRLP4 36 +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +line 123 +;123: if (n > 40) { +ADDRFP4 4 +INDIRI4 +CNSTI4 40 +LEI4 $85 +line 124 +;124: d = (n / 8) * es; +ADDRLP4 40 +ADDRFP4 4 +INDIRI4 +CNSTI4 8 +DIVI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ASGNI4 +line 125 +;125: pl = med3(pl, pl + d, pl + 2 * d, cmp); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 64 +ADDRLP4 40 +INDIRI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ARGP4 +ADDRLP4 64 +INDIRI4 +CNSTI4 1 +LSHI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 68 +ADDRGP4 med3 +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 68 +INDIRP4 +ASGNP4 +line 126 +;126: pm = med3(pm - d, pm, pm + d, cmp); +ADDRLP4 76 +ADDRLP4 40 +INDIRI4 +ASGNI4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 76 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRLP4 76 +INDIRI4 +ADDRLP4 32 +INDIRP4 +ADDP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRGP4 med3 +CALLP4 +ASGNP4 +ADDRLP4 32 +ADDRLP4 80 +INDIRP4 +ASGNP4 +line 127 +;127: pn = med3(pn - 2 * d, pn - d, pn, cmp); +ADDRLP4 88 +ADDRLP4 40 +INDIRI4 +ASGNI4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 88 +INDIRI4 +CNSTI4 1 +LSHI4 +SUBP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 88 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 92 +ADDRGP4 med3 +CALLP4 +ASGNP4 +ADDRLP4 36 +ADDRLP4 92 +INDIRP4 +ASGNP4 +line 128 +;128: } +LABELV $85 +line 129 +;129: pm = med3(pl, pm, pn, cmp); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 60 +ADDRGP4 med3 +CALLP4 +ASGNP4 +ADDRLP4 32 +ADDRLP4 60 +INDIRP4 +ASGNP4 +line 130 +;130: } +LABELV $83 +line 131 +;131: swap(a, pm); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $87 +ADDRLP4 60 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 32 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 60 +INDIRI4 +ASGNI4 +ADDRGP4 $88 +JUMPV +LABELV $87 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $88 +line 132 +;132: pa = pb = (char *)a + es; +ADDRLP4 60 +ADDRFP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 60 +INDIRP4 +ASGNP4 +ADDRLP4 20 +ADDRLP4 60 +INDIRP4 +ASGNP4 +line 134 +;133: +;134: pc = pd = (char *)a + (n - 1) * es; +ADDRLP4 64 +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 24 +ADDRLP4 64 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 64 +INDIRP4 +ASGNP4 +line 135 +;135: for (;;) { +ADDRGP4 $94 +JUMPV +LABELV $93 +line 136 +;136: while (pb <= pc && (r = cmp(pb, a)) <= 0) { +line 137 +;137: if (r == 0) { +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $96 +line 138 +;138: swap_cnt = 1; +ADDRLP4 28 +CNSTI4 1 +ASGNI4 +line 139 +;139: swap(pa, pb); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $98 +ADDRLP4 68 +ADDRLP4 20 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ASGNI4 +ADDRGP4 $99 +JUMPV +LABELV $98 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $99 +line 140 +;140: pa += es; +ADDRLP4 20 +ADDRFP4 8 +INDIRI4 +ADDRLP4 20 +INDIRP4 +ADDP4 +ASGNP4 +line 141 +;141: } +LABELV $96 +line 142 +;142: pb += es; +ADDRLP4 4 +ADDRFP4 8 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +ASGNP4 +line 143 +;143: } +LABELV $94 +line 136 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +GTU4 $100 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 72 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +LEI4 $93 +LABELV $100 +ADDRGP4 $102 +JUMPV +LABELV $101 +line 144 +;144: while (pb <= pc && (r = cmp(pc, a)) >= 0) { +line 145 +;145: if (r == 0) { +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $104 +line 146 +;146: swap_cnt = 1; +ADDRLP4 28 +CNSTI4 1 +ASGNI4 +line 147 +;147: swap(pc, pd); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $106 +ADDRLP4 76 +ADDRLP4 8 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 76 +INDIRI4 +ASGNI4 +ADDRGP4 $107 +JUMPV +LABELV $106 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $107 +line 148 +;148: pd -= es; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +line 149 +;149: } +LABELV $104 +line 150 +;150: pc -= es; +ADDRLP4 8 +ADDRLP4 8 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +line 151 +;151: } +LABELV $102 +line 144 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +GTU4 $108 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 80 +INDIRI4 +ASGNI4 +ADDRLP4 80 +INDIRI4 +CNSTI4 0 +GEI4 $101 +LABELV $108 +line 152 +;152: if (pb > pc) +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +LEU4 $109 +line 153 +;153: break; +ADDRGP4 $91 +JUMPV +LABELV $109 +line 154 +;154: swap(pb, pc); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $111 +ADDRLP4 84 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 84 +INDIRI4 +ASGNI4 +ADDRGP4 $112 +JUMPV +LABELV $111 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $112 +line 155 +;155: swap_cnt = 1; +ADDRLP4 28 +CNSTI4 1 +ASGNI4 +line 156 +;156: pb += es; +ADDRLP4 4 +ADDRFP4 8 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +ASGNP4 +line 157 +;157: pc -= es; +ADDRLP4 8 +ADDRLP4 8 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +line 158 +;158: } +line 135 +ADDRGP4 $94 +JUMPV +LABELV $91 +line 159 +;159: if (swap_cnt == 0) { /* Switch to insertion sort */ +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +NEI4 $113 +line 160 +;160: for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es) +ADDRLP4 32 +ADDRFP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRGP4 $118 +JUMPV +LABELV $115 +line 161 +;161: for (pl = pm; pl > (char *)a && cmp(pl - es, pl) > 0; +ADDRLP4 0 +ADDRLP4 32 +INDIRP4 +ASGNP4 +ADDRGP4 $122 +JUMPV +LABELV $119 +line 163 +;162: pl -= es) +;163: swap(pl, pl - es); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $123 +ADDRLP4 68 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ADDRLP4 68 +INDIRI4 +ASGNI4 +ADDRGP4 $124 +JUMPV +LABELV $123 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 72 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 72 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $124 +LABELV $120 +line 162 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +LABELV $122 +line 161 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +LEU4 $125 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 80 +INDIRI4 +CNSTI4 0 +GTI4 $119 +LABELV $125 +LABELV $116 +line 160 +ADDRLP4 32 +ADDRFP4 8 +INDIRI4 +ADDRLP4 32 +INDIRP4 +ADDP4 +ASGNP4 +LABELV $118 +ADDRLP4 32 +INDIRP4 +CVPU4 4 +ADDRFP4 4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CVPU4 4 +LTU4 $115 +line 164 +;164: return; +ADDRGP4 $61 +JUMPV +LABELV $113 +line 167 +;165: } +;166: +;167: pn = (char *)a + n * es; +ADDRLP4 36 +ADDRFP4 4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +line 168 +;168: r = min(pa - (char *)a, pb - pa); +ADDRLP4 72 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +ASGNU4 +ADDRLP4 72 +INDIRU4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 72 +INDIRU4 +SUBU4 +CVUI4 4 +GEI4 $127 +ADDRLP4 68 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRGP4 $128 +JUMPV +LABELV $127 +ADDRLP4 68 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +LABELV $128 +ADDRLP4 12 +ADDRLP4 68 +INDIRI4 +ASGNI4 +line 169 +;169: vecswap(a, pb - r, r); +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +LEI4 $129 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $129 +line 170 +;170: r = min(pd - pc, pn - pd - es); +ADDRLP4 84 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ASGNU4 +ADDRLP4 84 +INDIRU4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDRLP4 36 +INDIRP4 +CVPU4 4 +ADDRLP4 84 +INDIRU4 +SUBU4 +CVUI4 4 +ADDRFP4 8 +INDIRI4 +SUBI4 +GEI4 $132 +ADDRLP4 80 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRGP4 $133 +JUMPV +LABELV $132 +ADDRLP4 80 +ADDRLP4 36 +INDIRP4 +CVPU4 4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDRFP4 8 +INDIRI4 +SUBI4 +ASGNI4 +LABELV $133 +ADDRLP4 12 +ADDRLP4 80 +INDIRI4 +ASGNI4 +line 171 +;171: vecswap(pb, pn - r, r); +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +LEI4 $134 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 12 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $134 +line 172 +;172: if ((r = pb - pa) > es) +ADDRLP4 92 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 92 +INDIRI4 +ASGNI4 +ADDRLP4 92 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LEI4 $136 +line 173 +;173: qsort(a, r / es, es, cmp); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 96 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 96 +INDIRI4 +DIVI4 +ARGI4 +ADDRLP4 96 +INDIRI4 +ARGI4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRGP4 qsort +CALLV +pop +LABELV $136 +line 174 +;174: if ((r = pd - pc) > es) { +ADDRLP4 100 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 100 +INDIRI4 +ASGNI4 +ADDRLP4 100 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LEI4 $138 +line 176 +;175: /* Iterate rather than recurse to save stack space */ +;176: a = pn - r; +ADDRFP4 0 +ADDRLP4 36 +INDIRP4 +ADDRLP4 12 +INDIRI4 +SUBP4 +ASGNP4 +line 177 +;177: n = r / es; +ADDRFP4 4 +ADDRLP4 12 +INDIRI4 +ADDRFP4 8 +INDIRI4 +DIVI4 +ASGNI4 +line 178 +;178: goto loop; +ADDRGP4 $62 +JUMPV +LABELV $138 +line 181 +;179: } +;180:/* qsort(pn - r, r / es, es, cmp);*/ +;181:} +LABELV $61 +endproc qsort 104 16 +export strlen +proc strlen 4 0 +line 191 +;182: +;183://================================================================================== +;184: +;185: +;186:// this file is excluded from release builds because of intrinsics +;187: +;188:// bk001211 - gcc errors on compiling strcpy: parse error before `__extension__' +;189:#if defined ( Q3_VM ) +;190: +;191:size_t strlen( const char *string ) { +line 194 +;192: const char *s; +;193: +;194: s = string; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $142 +JUMPV +LABELV $141 +line 195 +;195: while ( *s ) { +line 196 +;196: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 197 +;197: } +LABELV $142 +line 195 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $141 +line 198 +;198: return s - string; +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +RETI4 +LABELV $140 +endproc strlen 4 0 +export strcat +proc strcat 16 0 +line 202 +;199:} +;200: +;201: +;202:char *strcat( char *strDestination, const char *strSource ) { +line 205 +;203: char *s; +;204: +;205: s = strDestination; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $146 +JUMPV +LABELV $145 +line 206 +;206: while ( *s ) { +line 207 +;207: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 208 +;208: } +LABELV $146 +line 206 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $145 +ADDRGP4 $149 +JUMPV +LABELV $148 +line 209 +;209: while ( *strSource ) { +line 210 +;210: *s++ = *strSource++; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI1 +ASGNI1 +line 211 +;211: } +LABELV $149 +line 209 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $148 +line 212 +;212: *s = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 213 +;213: return strDestination; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $144 +endproc strcat 16 0 +export strcpy +proc strcpy 16 0 +line 216 +;214:} +;215: +;216:char *strcpy( char *strDestination, const char *strSource ) { +line 219 +;217: char *s; +;218: +;219: s = strDestination; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $153 +JUMPV +LABELV $152 +line 220 +;220: while ( *strSource ) { +line 221 +;221: *s++ = *strSource++; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI1 +ASGNI1 +line 222 +;222: } +LABELV $153 +line 220 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $152 +line 223 +;223: *s = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 224 +;224: return strDestination; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $151 +endproc strcpy 16 0 +export strcmp +proc strcmp 12 0 +line 228 +;225:} +;226: +;227: +;228:int strcmp( const char *string1, const char *string2 ) { +ADDRGP4 $157 +JUMPV +LABELV $156 +line 229 +;229: while ( *string1 == *string2 && *string1 && *string2 ) { +line 230 +;230: string1++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 231 +;231: string2++; +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 232 +;232: } +LABELV $157 +line 229 +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $160 +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +EQI4 $160 +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +NEI4 $156 +LABELV $160 +line 233 +;233: return *string1 - *string2; +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +SUBI4 +RETI4 +LABELV $155 +endproc strcmp 12 0 +export strchr +proc strchr 0 0 +line 237 +;234:} +;235: +;236: +;237:char *strchr( const char *string, int c ) { +ADDRGP4 $163 +JUMPV +LABELV $162 +line 238 +;238: while ( *string ) { +line 239 +;239: if ( *string == c ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ADDRFP4 4 +INDIRI4 +NEI4 $165 +line 240 +;240: return ( char * )string; +ADDRFP4 0 +INDIRP4 +RETP4 +ADDRGP4 $161 +JUMPV +LABELV $165 +line 242 +;241: } +;242: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 243 +;243: } +LABELV $163 +line 238 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $162 +line 244 +;244: return (char *)0; +CNSTP4 0 +RETP4 +LABELV $161 +endproc strchr 0 0 +export strstr +proc strstr 8 0 +line 247 +;245:} +;246: +;247:char *strstr( const char *string, const char *strCharSet ) { +ADDRGP4 $169 +JUMPV +LABELV $168 +line 248 +;248: while ( *string ) { +line 251 +;249: int i; +;250: +;251: for ( i = 0 ; strCharSet[i] ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $174 +JUMPV +LABELV $171 +line 252 +;252: if ( string[i] != strCharSet[i] ) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +EQI4 $175 +line 253 +;253: break; +ADDRGP4 $173 +JUMPV +LABELV $175 +line 255 +;254: } +;255: } +LABELV $172 +line 251 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $174 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $171 +LABELV $173 +line 256 +;256: if ( !strCharSet[i] ) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $177 +line 257 +;257: return (char *)string; +ADDRFP4 0 +INDIRP4 +RETP4 +ADDRGP4 $167 +JUMPV +LABELV $177 +line 259 +;258: } +;259: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 260 +;260: } +LABELV $169 +line 248 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $168 +line 261 +;261: return (char *)0; +CNSTP4 0 +RETP4 +LABELV $167 +endproc strstr 8 0 +export tolower +proc tolower 4 0 +line 269 +;262:} +;263:#endif // bk001211 +;264: +;265:// bk001120 - presumably needed for Mac +;266://#if !defined(_MSC_VER) && !defined(__linux__) +;267:// bk001127 - undid undo +;268:#if defined ( Q3_VM ) +;269:int tolower( int c ) { +line 270 +;270: if ( c >= 'A' && c <= 'Z' ) { +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 65 +LTI4 $180 +ADDRLP4 0 +INDIRI4 +CNSTI4 90 +GTI4 $180 +line 271 +;271: c += 'a' - 'A'; +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 32 +ADDI4 +ASGNI4 +line 272 +;272: } +LABELV $180 +line 273 +;273: return c; +ADDRFP4 0 +INDIRI4 +RETI4 +LABELV $179 +endproc tolower 4 0 +export toupper +proc toupper 4 0 +line 277 +;274:} +;275: +;276: +;277:int toupper( int c ) { +line 278 +;278: if ( c >= 'a' && c <= 'z' ) { +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 97 +LTI4 $183 +ADDRLP4 0 +INDIRI4 +CNSTI4 122 +GTI4 $183 +line 279 +;279: c += 'A' - 'a'; +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -32 +ADDI4 +ASGNI4 +line 280 +;280: } +LABELV $183 +line 281 +;281: return c; +ADDRFP4 0 +INDIRI4 +RETI4 +LABELV $182 +endproc toupper 4 0 +export memmove +proc memmove 8 0 +line 287 +;282:} +;283: +;284:#endif +;285://#ifndef _MSC_VER +;286: +;287:void *memmove( void *dest, const void *src, size_t count ) { +line 290 +;288: int i; +;289: +;290: if ( dest > src ) { +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 4 +INDIRP4 +CVPU4 4 +LEU4 $186 +line 291 +;291: for ( i = count-1 ; i >= 0 ; i-- ) { +ADDRLP4 0 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRGP4 $191 +JUMPV +LABELV $188 +line 292 +;292: ((char *)dest)[i] = ((char *)src)[i]; +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 293 +;293: } +LABELV $189 +line 291 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +LABELV $191 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $188 +line 294 +;294: } else { +ADDRGP4 $187 +JUMPV +LABELV $186 +line 295 +;295: for ( i = 0 ; i < count ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $195 +JUMPV +LABELV $192 +line 296 +;296: ((char *)dest)[i] = ((char *)src)[i]; +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 297 +;297: } +LABELV $193 +line 295 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $195 +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LTI4 $192 +line 298 +;298: } +LABELV $187 +line 299 +;299: return dest; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $185 +endproc memmove 8 0 +export tan +proc tan 8 4 +line 757 +;300:} +;301: +;302: +;303:#if 0 +;304: +;305:double floor( double x ) { +;306: return (int)(x + 0x40000000) - 0x40000000; +;307:} +;308: +;309:void *memset( void *dest, int c, size_t count ) { +;310: while ( count-- ) { +;311: ((char *)dest)[count] = c; +;312: } +;313: return dest; +;314:} +;315: +;316:void *memcpy( void *dest, const void *src, size_t count ) { +;317: while ( count-- ) { +;318: ((char *)dest)[count] = ((char *)src)[count]; +;319: } +;320: return dest; +;321:} +;322: +;323:char *strncpy( char *strDest, const char *strSource, size_t count ) { +;324: char *s; +;325: +;326: s = strDest; +;327: while ( *strSource && count ) { +;328: *s++ = *strSource++; +;329: count--; +;330: } +;331: while ( count-- ) { +;332: *s++ = 0; +;333: } +;334: return strDest; +;335:} +;336: +;337:double sqrt( double x ) { +;338: float y; +;339: float delta; +;340: float maxError; +;341: +;342: if ( x <= 0 ) { +;343: return 0; +;344: } +;345: +;346: // initial guess +;347: y = x / 2; +;348: +;349: // refine +;350: maxError = x * 0.001; +;351: +;352: do { +;353: delta = ( y * y ) - x; +;354: y -= delta / ( 2 * y ); +;355: } while ( delta > maxError || delta < -maxError ); +;356: +;357: return y; +;358:} +;359: +;360: +;361:float sintable[1024] = { +;362:0.000000,0.001534,0.003068,0.004602,0.006136,0.007670,0.009204,0.010738, +;363:0.012272,0.013805,0.015339,0.016873,0.018407,0.019940,0.021474,0.023008, +;364:0.024541,0.026075,0.027608,0.029142,0.030675,0.032208,0.033741,0.035274, +;365:0.036807,0.038340,0.039873,0.041406,0.042938,0.044471,0.046003,0.047535, +;366:0.049068,0.050600,0.052132,0.053664,0.055195,0.056727,0.058258,0.059790, +;367:0.061321,0.062852,0.064383,0.065913,0.067444,0.068974,0.070505,0.072035, +;368:0.073565,0.075094,0.076624,0.078153,0.079682,0.081211,0.082740,0.084269, +;369:0.085797,0.087326,0.088854,0.090381,0.091909,0.093436,0.094963,0.096490, +;370:0.098017,0.099544,0.101070,0.102596,0.104122,0.105647,0.107172,0.108697, +;371:0.110222,0.111747,0.113271,0.114795,0.116319,0.117842,0.119365,0.120888, +;372:0.122411,0.123933,0.125455,0.126977,0.128498,0.130019,0.131540,0.133061, +;373:0.134581,0.136101,0.137620,0.139139,0.140658,0.142177,0.143695,0.145213, +;374:0.146730,0.148248,0.149765,0.151281,0.152797,0.154313,0.155828,0.157343, +;375:0.158858,0.160372,0.161886,0.163400,0.164913,0.166426,0.167938,0.169450, +;376:0.170962,0.172473,0.173984,0.175494,0.177004,0.178514,0.180023,0.181532, +;377:0.183040,0.184548,0.186055,0.187562,0.189069,0.190575,0.192080,0.193586, +;378:0.195090,0.196595,0.198098,0.199602,0.201105,0.202607,0.204109,0.205610, +;379:0.207111,0.208612,0.210112,0.211611,0.213110,0.214609,0.216107,0.217604, +;380:0.219101,0.220598,0.222094,0.223589,0.225084,0.226578,0.228072,0.229565, +;381:0.231058,0.232550,0.234042,0.235533,0.237024,0.238514,0.240003,0.241492, +;382:0.242980,0.244468,0.245955,0.247442,0.248928,0.250413,0.251898,0.253382, +;383:0.254866,0.256349,0.257831,0.259313,0.260794,0.262275,0.263755,0.265234, +;384:0.266713,0.268191,0.269668,0.271145,0.272621,0.274097,0.275572,0.277046, +;385:0.278520,0.279993,0.281465,0.282937,0.284408,0.285878,0.287347,0.288816, +;386:0.290285,0.291752,0.293219,0.294685,0.296151,0.297616,0.299080,0.300543, +;387:0.302006,0.303468,0.304929,0.306390,0.307850,0.309309,0.310767,0.312225, +;388:0.313682,0.315138,0.316593,0.318048,0.319502,0.320955,0.322408,0.323859, +;389:0.325310,0.326760,0.328210,0.329658,0.331106,0.332553,0.334000,0.335445, +;390:0.336890,0.338334,0.339777,0.341219,0.342661,0.344101,0.345541,0.346980, +;391:0.348419,0.349856,0.351293,0.352729,0.354164,0.355598,0.357031,0.358463, +;392:0.359895,0.361326,0.362756,0.364185,0.365613,0.367040,0.368467,0.369892, +;393:0.371317,0.372741,0.374164,0.375586,0.377007,0.378428,0.379847,0.381266, +;394:0.382683,0.384100,0.385516,0.386931,0.388345,0.389758,0.391170,0.392582, +;395:0.393992,0.395401,0.396810,0.398218,0.399624,0.401030,0.402435,0.403838, +;396:0.405241,0.406643,0.408044,0.409444,0.410843,0.412241,0.413638,0.415034, +;397:0.416430,0.417824,0.419217,0.420609,0.422000,0.423390,0.424780,0.426168, +;398:0.427555,0.428941,0.430326,0.431711,0.433094,0.434476,0.435857,0.437237, +;399:0.438616,0.439994,0.441371,0.442747,0.444122,0.445496,0.446869,0.448241, +;400:0.449611,0.450981,0.452350,0.453717,0.455084,0.456449,0.457813,0.459177, +;401:0.460539,0.461900,0.463260,0.464619,0.465976,0.467333,0.468689,0.470043, +;402:0.471397,0.472749,0.474100,0.475450,0.476799,0.478147,0.479494,0.480839, +;403:0.482184,0.483527,0.484869,0.486210,0.487550,0.488889,0.490226,0.491563, +;404:0.492898,0.494232,0.495565,0.496897,0.498228,0.499557,0.500885,0.502212, +;405:0.503538,0.504863,0.506187,0.507509,0.508830,0.510150,0.511469,0.512786, +;406:0.514103,0.515418,0.516732,0.518045,0.519356,0.520666,0.521975,0.523283, +;407:0.524590,0.525895,0.527199,0.528502,0.529804,0.531104,0.532403,0.533701, +;408:0.534998,0.536293,0.537587,0.538880,0.540171,0.541462,0.542751,0.544039, +;409:0.545325,0.546610,0.547894,0.549177,0.550458,0.551738,0.553017,0.554294, +;410:0.555570,0.556845,0.558119,0.559391,0.560662,0.561931,0.563199,0.564466, +;411:0.565732,0.566996,0.568259,0.569521,0.570781,0.572040,0.573297,0.574553, +;412:0.575808,0.577062,0.578314,0.579565,0.580814,0.582062,0.583309,0.584554, +;413:0.585798,0.587040,0.588282,0.589521,0.590760,0.591997,0.593232,0.594466, +;414:0.595699,0.596931,0.598161,0.599389,0.600616,0.601842,0.603067,0.604290, +;415:0.605511,0.606731,0.607950,0.609167,0.610383,0.611597,0.612810,0.614022, +;416:0.615232,0.616440,0.617647,0.618853,0.620057,0.621260,0.622461,0.623661, +;417:0.624859,0.626056,0.627252,0.628446,0.629638,0.630829,0.632019,0.633207, +;418:0.634393,0.635578,0.636762,0.637944,0.639124,0.640303,0.641481,0.642657, +;419:0.643832,0.645005,0.646176,0.647346,0.648514,0.649681,0.650847,0.652011, +;420:0.653173,0.654334,0.655493,0.656651,0.657807,0.658961,0.660114,0.661266, +;421:0.662416,0.663564,0.664711,0.665856,0.667000,0.668142,0.669283,0.670422, +;422:0.671559,0.672695,0.673829,0.674962,0.676093,0.677222,0.678350,0.679476, +;423:0.680601,0.681724,0.682846,0.683965,0.685084,0.686200,0.687315,0.688429, +;424:0.689541,0.690651,0.691759,0.692866,0.693971,0.695075,0.696177,0.697278, +;425:0.698376,0.699473,0.700569,0.701663,0.702755,0.703845,0.704934,0.706021, +;426:0.707107,0.708191,0.709273,0.710353,0.711432,0.712509,0.713585,0.714659, +;427:0.715731,0.716801,0.717870,0.718937,0.720003,0.721066,0.722128,0.723188, +;428:0.724247,0.725304,0.726359,0.727413,0.728464,0.729514,0.730563,0.731609, +;429:0.732654,0.733697,0.734739,0.735779,0.736817,0.737853,0.738887,0.739920, +;430:0.740951,0.741980,0.743008,0.744034,0.745058,0.746080,0.747101,0.748119, +;431:0.749136,0.750152,0.751165,0.752177,0.753187,0.754195,0.755201,0.756206, +;432:0.757209,0.758210,0.759209,0.760207,0.761202,0.762196,0.763188,0.764179, +;433:0.765167,0.766154,0.767139,0.768122,0.769103,0.770083,0.771061,0.772036, +;434:0.773010,0.773983,0.774953,0.775922,0.776888,0.777853,0.778817,0.779778, +;435:0.780737,0.781695,0.782651,0.783605,0.784557,0.785507,0.786455,0.787402, +;436:0.788346,0.789289,0.790230,0.791169,0.792107,0.793042,0.793975,0.794907, +;437:0.795837,0.796765,0.797691,0.798615,0.799537,0.800458,0.801376,0.802293, +;438:0.803208,0.804120,0.805031,0.805940,0.806848,0.807753,0.808656,0.809558, +;439:0.810457,0.811355,0.812251,0.813144,0.814036,0.814926,0.815814,0.816701, +;440:0.817585,0.818467,0.819348,0.820226,0.821103,0.821977,0.822850,0.823721, +;441:0.824589,0.825456,0.826321,0.827184,0.828045,0.828904,0.829761,0.830616, +;442:0.831470,0.832321,0.833170,0.834018,0.834863,0.835706,0.836548,0.837387, +;443:0.838225,0.839060,0.839894,0.840725,0.841555,0.842383,0.843208,0.844032, +;444:0.844854,0.845673,0.846491,0.847307,0.848120,0.848932,0.849742,0.850549, +;445:0.851355,0.852159,0.852961,0.853760,0.854558,0.855354,0.856147,0.856939, +;446:0.857729,0.858516,0.859302,0.860085,0.860867,0.861646,0.862424,0.863199, +;447:0.863973,0.864744,0.865514,0.866281,0.867046,0.867809,0.868571,0.869330, +;448:0.870087,0.870842,0.871595,0.872346,0.873095,0.873842,0.874587,0.875329, +;449:0.876070,0.876809,0.877545,0.878280,0.879012,0.879743,0.880471,0.881197, +;450:0.881921,0.882643,0.883363,0.884081,0.884797,0.885511,0.886223,0.886932, +;451:0.887640,0.888345,0.889048,0.889750,0.890449,0.891146,0.891841,0.892534, +;452:0.893224,0.893913,0.894599,0.895284,0.895966,0.896646,0.897325,0.898001, +;453:0.898674,0.899346,0.900016,0.900683,0.901349,0.902012,0.902673,0.903332, +;454:0.903989,0.904644,0.905297,0.905947,0.906596,0.907242,0.907886,0.908528, +;455:0.909168,0.909806,0.910441,0.911075,0.911706,0.912335,0.912962,0.913587, +;456:0.914210,0.914830,0.915449,0.916065,0.916679,0.917291,0.917901,0.918508, +;457:0.919114,0.919717,0.920318,0.920917,0.921514,0.922109,0.922701,0.923291, +;458:0.923880,0.924465,0.925049,0.925631,0.926210,0.926787,0.927363,0.927935, +;459:0.928506,0.929075,0.929641,0.930205,0.930767,0.931327,0.931884,0.932440, +;460:0.932993,0.933544,0.934093,0.934639,0.935184,0.935726,0.936266,0.936803, +;461:0.937339,0.937872,0.938404,0.938932,0.939459,0.939984,0.940506,0.941026, +;462:0.941544,0.942060,0.942573,0.943084,0.943593,0.944100,0.944605,0.945107, +;463:0.945607,0.946105,0.946601,0.947094,0.947586,0.948075,0.948561,0.949046, +;464:0.949528,0.950008,0.950486,0.950962,0.951435,0.951906,0.952375,0.952842, +;465:0.953306,0.953768,0.954228,0.954686,0.955141,0.955594,0.956045,0.956494, +;466:0.956940,0.957385,0.957826,0.958266,0.958703,0.959139,0.959572,0.960002, +;467:0.960431,0.960857,0.961280,0.961702,0.962121,0.962538,0.962953,0.963366, +;468:0.963776,0.964184,0.964590,0.964993,0.965394,0.965793,0.966190,0.966584, +;469:0.966976,0.967366,0.967754,0.968139,0.968522,0.968903,0.969281,0.969657, +;470:0.970031,0.970403,0.970772,0.971139,0.971504,0.971866,0.972226,0.972584, +;471:0.972940,0.973293,0.973644,0.973993,0.974339,0.974684,0.975025,0.975365, +;472:0.975702,0.976037,0.976370,0.976700,0.977028,0.977354,0.977677,0.977999, +;473:0.978317,0.978634,0.978948,0.979260,0.979570,0.979877,0.980182,0.980485, +;474:0.980785,0.981083,0.981379,0.981673,0.981964,0.982253,0.982539,0.982824, +;475:0.983105,0.983385,0.983662,0.983937,0.984210,0.984480,0.984749,0.985014, +;476:0.985278,0.985539,0.985798,0.986054,0.986308,0.986560,0.986809,0.987057, +;477:0.987301,0.987544,0.987784,0.988022,0.988258,0.988491,0.988722,0.988950, +;478:0.989177,0.989400,0.989622,0.989841,0.990058,0.990273,0.990485,0.990695, +;479:0.990903,0.991108,0.991311,0.991511,0.991710,0.991906,0.992099,0.992291, +;480:0.992480,0.992666,0.992850,0.993032,0.993212,0.993389,0.993564,0.993737, +;481:0.993907,0.994075,0.994240,0.994404,0.994565,0.994723,0.994879,0.995033, +;482:0.995185,0.995334,0.995481,0.995625,0.995767,0.995907,0.996045,0.996180, +;483:0.996313,0.996443,0.996571,0.996697,0.996820,0.996941,0.997060,0.997176, +;484:0.997290,0.997402,0.997511,0.997618,0.997723,0.997825,0.997925,0.998023, +;485:0.998118,0.998211,0.998302,0.998390,0.998476,0.998559,0.998640,0.998719, +;486:0.998795,0.998870,0.998941,0.999011,0.999078,0.999142,0.999205,0.999265, +;487:0.999322,0.999378,0.999431,0.999481,0.999529,0.999575,0.999619,0.999660, +;488:0.999699,0.999735,0.999769,0.999801,0.999831,0.999858,0.999882,0.999905, +;489:0.999925,0.999942,0.999958,0.999971,0.999981,0.999989,0.999995,0.999999 +;490:}; +;491: +;492:double sin( double x ) { +;493: int index; +;494: int quad; +;495: +;496: index = 1024 * x / (M_PI * 0.5); +;497: quad = ( index >> 10 ) & 3; +;498: index &= 1023; +;499: switch ( quad ) { +;500: case 0: +;501: return sintable[index]; +;502: case 1: +;503: return sintable[1023-index]; +;504: case 2: +;505: return -sintable[index]; +;506: case 3: +;507: return -sintable[1023-index]; +;508: } +;509: return 0; +;510:} +;511: +;512: +;513:double cos( double x ) { +;514: int index; +;515: int quad; +;516: +;517: index = 1024 * x / (M_PI * 0.5); +;518: quad = ( index >> 10 ) & 3; +;519: index &= 1023; +;520: switch ( quad ) { +;521: case 3: +;522: return sintable[index]; +;523: case 0: +;524: return sintable[1023-index]; +;525: case 1: +;526: return -sintable[index]; +;527: case 2: +;528: return -sintable[1023-index]; +;529: } +;530: return 0; +;531:} +;532: +;533: +;534:/* +;535:void create_acostable( void ) { +;536: int i; +;537: FILE *fp; +;538: float a; +;539: +;540: fp = fopen("c:\\acostable.txt", "w"); +;541: fprintf(fp, "float acostable[] = {"); +;542: for (i = 0; i < 1024; i++) { +;543: if (!(i & 7)) +;544: fprintf(fp, "\n"); +;545: a = acos( (float) -1 + i / 512 ); +;546: fprintf(fp, "%1.8f,", a); +;547: } +;548: fprintf(fp, "\n}\n"); +;549: fclose(fp); +;550:} +;551:*/ +;552: +;553:float acostable[] = { +;554:3.14159265,3.07908248,3.05317551,3.03328655,3.01651113,3.00172442,2.98834964,2.97604422, +;555:2.96458497,2.95381690,2.94362719,2.93393068,2.92466119,2.91576615,2.90720289,2.89893629, +;556:2.89093699,2.88318015,2.87564455,2.86831188,2.86116621,2.85419358,2.84738169,2.84071962, +;557:2.83419760,2.82780691,2.82153967,2.81538876,2.80934770,2.80341062,2.79757211,2.79182724, +;558:2.78617145,2.78060056,2.77511069,2.76969824,2.76435988,2.75909250,2.75389319,2.74875926, +;559:2.74368816,2.73867752,2.73372510,2.72882880,2.72398665,2.71919677,2.71445741,2.70976688, +;560:2.70512362,2.70052613,2.69597298,2.69146283,2.68699438,2.68256642,2.67817778,2.67382735, +;561:2.66951407,2.66523692,2.66099493,2.65678719,2.65261279,2.64847088,2.64436066,2.64028133, +;562:2.63623214,2.63221238,2.62822133,2.62425835,2.62032277,2.61641398,2.61253138,2.60867440, +;563:2.60484248,2.60103507,2.59725167,2.59349176,2.58975488,2.58604053,2.58234828,2.57867769, +;564:2.57502832,2.57139977,2.56779164,2.56420354,2.56063509,2.55708594,2.55355572,2.55004409, +;565:2.54655073,2.54307530,2.53961750,2.53617701,2.53275354,2.52934680,2.52595650,2.52258238, +;566:2.51922417,2.51588159,2.51255441,2.50924238,2.50594525,2.50266278,2.49939476,2.49614096, +;567:2.49290115,2.48967513,2.48646269,2.48326362,2.48007773,2.47690482,2.47374472,2.47059722, +;568:2.46746215,2.46433933,2.46122860,2.45812977,2.45504269,2.45196720,2.44890314,2.44585034, +;569:2.44280867,2.43977797,2.43675809,2.43374890,2.43075025,2.42776201,2.42478404,2.42181622, +;570:2.41885841,2.41591048,2.41297232,2.41004380,2.40712480,2.40421521,2.40131491,2.39842379, +;571:2.39554173,2.39266863,2.38980439,2.38694889,2.38410204,2.38126374,2.37843388,2.37561237, +;572:2.37279910,2.36999400,2.36719697,2.36440790,2.36162673,2.35885335,2.35608768,2.35332964, +;573:2.35057914,2.34783610,2.34510044,2.34237208,2.33965094,2.33693695,2.33423003,2.33153010, +;574:2.32883709,2.32615093,2.32347155,2.32079888,2.31813284,2.31547337,2.31282041,2.31017388, +;575:2.30753373,2.30489988,2.30227228,2.29965086,2.29703556,2.29442632,2.29182309,2.28922580, +;576:2.28663439,2.28404881,2.28146900,2.27889490,2.27632647,2.27376364,2.27120637,2.26865460, +;577:2.26610827,2.26356735,2.26103177,2.25850149,2.25597646,2.25345663,2.25094195,2.24843238, +;578:2.24592786,2.24342836,2.24093382,2.23844420,2.23595946,2.23347956,2.23100444,2.22853408, +;579:2.22606842,2.22360742,2.22115104,2.21869925,2.21625199,2.21380924,2.21137096,2.20893709, +;580:2.20650761,2.20408248,2.20166166,2.19924511,2.19683280,2.19442469,2.19202074,2.18962092, +;581:2.18722520,2.18483354,2.18244590,2.18006225,2.17768257,2.17530680,2.17293493,2.17056692, +;582:2.16820274,2.16584236,2.16348574,2.16113285,2.15878367,2.15643816,2.15409630,2.15175805, +;583:2.14942338,2.14709226,2.14476468,2.14244059,2.14011997,2.13780279,2.13548903,2.13317865, +;584:2.13087163,2.12856795,2.12626757,2.12397047,2.12167662,2.11938600,2.11709859,2.11481435, +;585:2.11253326,2.11025530,2.10798044,2.10570867,2.10343994,2.10117424,2.09891156,2.09665185, +;586:2.09439510,2.09214129,2.08989040,2.08764239,2.08539725,2.08315496,2.08091550,2.07867884, +;587:2.07644495,2.07421383,2.07198545,2.06975978,2.06753681,2.06531651,2.06309887,2.06088387, +;588:2.05867147,2.05646168,2.05425445,2.05204979,2.04984765,2.04764804,2.04545092,2.04325628, +;589:2.04106409,2.03887435,2.03668703,2.03450211,2.03231957,2.03013941,2.02796159,2.02578610, +;590:2.02361292,2.02144204,2.01927344,2.01710710,2.01494300,2.01278113,2.01062146,2.00846399, +;591:2.00630870,2.00415556,2.00200457,1.99985570,1.99770895,1.99556429,1.99342171,1.99128119, +;592:1.98914271,1.98700627,1.98487185,1.98273942,1.98060898,1.97848051,1.97635399,1.97422942, +;593:1.97210676,1.96998602,1.96786718,1.96575021,1.96363511,1.96152187,1.95941046,1.95730088, +;594:1.95519310,1.95308712,1.95098292,1.94888050,1.94677982,1.94468089,1.94258368,1.94048818, +;595:1.93839439,1.93630228,1.93421185,1.93212308,1.93003595,1.92795046,1.92586659,1.92378433, +;596:1.92170367,1.91962459,1.91754708,1.91547113,1.91339673,1.91132385,1.90925250,1.90718266, +;597:1.90511432,1.90304746,1.90098208,1.89891815,1.89685568,1.89479464,1.89273503,1.89067683, +;598:1.88862003,1.88656463,1.88451060,1.88245794,1.88040664,1.87835668,1.87630806,1.87426076, +;599:1.87221477,1.87017008,1.86812668,1.86608457,1.86404371,1.86200412,1.85996577,1.85792866, +;600:1.85589277,1.85385809,1.85182462,1.84979234,1.84776125,1.84573132,1.84370256,1.84167495, +;601:1.83964848,1.83762314,1.83559892,1.83357582,1.83155381,1.82953289,1.82751305,1.82549429, +;602:1.82347658,1.82145993,1.81944431,1.81742973,1.81541617,1.81340362,1.81139207,1.80938151, +;603:1.80737194,1.80536334,1.80335570,1.80134902,1.79934328,1.79733848,1.79533460,1.79333164, +;604:1.79132959,1.78932843,1.78732817,1.78532878,1.78333027,1.78133261,1.77933581,1.77733985, +;605:1.77534473,1.77335043,1.77135695,1.76936428,1.76737240,1.76538132,1.76339101,1.76140148, +;606:1.75941271,1.75742470,1.75543743,1.75345090,1.75146510,1.74948002,1.74749565,1.74551198, +;607:1.74352900,1.74154672,1.73956511,1.73758417,1.73560389,1.73362426,1.73164527,1.72966692, +;608:1.72768920,1.72571209,1.72373560,1.72175971,1.71978441,1.71780969,1.71583556,1.71386199, +;609:1.71188899,1.70991653,1.70794462,1.70597325,1.70400241,1.70203209,1.70006228,1.69809297, +;610:1.69612416,1.69415584,1.69218799,1.69022062,1.68825372,1.68628727,1.68432127,1.68235571, +;611:1.68039058,1.67842588,1.67646160,1.67449772,1.67253424,1.67057116,1.66860847,1.66664615, +;612:1.66468420,1.66272262,1.66076139,1.65880050,1.65683996,1.65487975,1.65291986,1.65096028, +;613:1.64900102,1.64704205,1.64508338,1.64312500,1.64116689,1.63920905,1.63725148,1.63529416, +;614:1.63333709,1.63138026,1.62942366,1.62746728,1.62551112,1.62355517,1.62159943,1.61964388, +;615:1.61768851,1.61573332,1.61377831,1.61182346,1.60986877,1.60791422,1.60595982,1.60400556, +;616:1.60205142,1.60009739,1.59814349,1.59618968,1.59423597,1.59228235,1.59032882,1.58837536, +;617:1.58642196,1.58446863,1.58251535,1.58056211,1.57860891,1.57665574,1.57470259,1.57274945, +;618:1.57079633,1.56884320,1.56689007,1.56493692,1.56298375,1.56103055,1.55907731,1.55712403, +;619:1.55517069,1.55321730,1.55126383,1.54931030,1.54735668,1.54540297,1.54344917,1.54149526, +;620:1.53954124,1.53758710,1.53563283,1.53367843,1.53172389,1.52976919,1.52781434,1.52585933, +;621:1.52390414,1.52194878,1.51999323,1.51803748,1.51608153,1.51412537,1.51216900,1.51021240, +;622:1.50825556,1.50629849,1.50434117,1.50238360,1.50042576,1.49846765,1.49650927,1.49455060, +;623:1.49259163,1.49063237,1.48867280,1.48671291,1.48475270,1.48279215,1.48083127,1.47887004, +;624:1.47690845,1.47494650,1.47298419,1.47102149,1.46905841,1.46709493,1.46513106,1.46316677, +;625:1.46120207,1.45923694,1.45727138,1.45530538,1.45333893,1.45137203,1.44940466,1.44743682, +;626:1.44546850,1.44349969,1.44153038,1.43956057,1.43759024,1.43561940,1.43364803,1.43167612, +;627:1.42970367,1.42773066,1.42575709,1.42378296,1.42180825,1.41983295,1.41785705,1.41588056, +;628:1.41390346,1.41192573,1.40994738,1.40796840,1.40598877,1.40400849,1.40202755,1.40004594, +;629:1.39806365,1.39608068,1.39409701,1.39211264,1.39012756,1.38814175,1.38615522,1.38416795, +;630:1.38217994,1.38019117,1.37820164,1.37621134,1.37422025,1.37222837,1.37023570,1.36824222, +;631:1.36624792,1.36425280,1.36225684,1.36026004,1.35826239,1.35626387,1.35426449,1.35226422, +;632:1.35026307,1.34826101,1.34625805,1.34425418,1.34224937,1.34024364,1.33823695,1.33622932, +;633:1.33422072,1.33221114,1.33020059,1.32818904,1.32617649,1.32416292,1.32214834,1.32013273, +;634:1.31811607,1.31609837,1.31407960,1.31205976,1.31003885,1.30801684,1.30599373,1.30396951, +;635:1.30194417,1.29991770,1.29789009,1.29586133,1.29383141,1.29180031,1.28976803,1.28773456, +;636:1.28569989,1.28366400,1.28162688,1.27958854,1.27754894,1.27550809,1.27346597,1.27142257, +;637:1.26937788,1.26733189,1.26528459,1.26323597,1.26118602,1.25913471,1.25708205,1.25502803, +;638:1.25297262,1.25091583,1.24885763,1.24679802,1.24473698,1.24267450,1.24061058,1.23854519, +;639:1.23647833,1.23440999,1.23234015,1.23026880,1.22819593,1.22612152,1.22404557,1.22196806, +;640:1.21988898,1.21780832,1.21572606,1.21364219,1.21155670,1.20946958,1.20738080,1.20529037, +;641:1.20319826,1.20110447,1.19900898,1.19691177,1.19481283,1.19271216,1.19060973,1.18850553, +;642:1.18639955,1.18429178,1.18218219,1.18007079,1.17795754,1.17584244,1.17372548,1.17160663, +;643:1.16948589,1.16736324,1.16523866,1.16311215,1.16098368,1.15885323,1.15672081,1.15458638, +;644:1.15244994,1.15031147,1.14817095,1.14602836,1.14388370,1.14173695,1.13958808,1.13743709, +;645:1.13528396,1.13312866,1.13097119,1.12881153,1.12664966,1.12448556,1.12231921,1.12015061, +;646:1.11797973,1.11580656,1.11363107,1.11145325,1.10927308,1.10709055,1.10490563,1.10271831, +;647:1.10052856,1.09833638,1.09614174,1.09394462,1.09174500,1.08954287,1.08733820,1.08513098, +;648:1.08292118,1.08070879,1.07849378,1.07627614,1.07405585,1.07183287,1.06960721,1.06737882, +;649:1.06514770,1.06291382,1.06067715,1.05843769,1.05619540,1.05395026,1.05170226,1.04945136, +;650:1.04719755,1.04494080,1.04268110,1.04041841,1.03815271,1.03588399,1.03361221,1.03133735, +;651:1.02905939,1.02677830,1.02449407,1.02220665,1.01991603,1.01762219,1.01532509,1.01302471, +;652:1.01072102,1.00841400,1.00610363,1.00378986,1.00147268,0.99915206,0.99682798,0.99450039, +;653:0.99216928,0.98983461,0.98749636,0.98515449,0.98280898,0.98045980,0.97810691,0.97575030, +;654:0.97338991,0.97102573,0.96865772,0.96628585,0.96391009,0.96153040,0.95914675,0.95675912, +;655:0.95436745,0.95197173,0.94957191,0.94716796,0.94475985,0.94234754,0.93993099,0.93751017, +;656:0.93508504,0.93265556,0.93022170,0.92778341,0.92534066,0.92289341,0.92044161,0.91798524, +;657:0.91552424,0.91305858,0.91058821,0.90811309,0.90563319,0.90314845,0.90065884,0.89816430, +;658:0.89566479,0.89316028,0.89065070,0.88813602,0.88561619,0.88309116,0.88056088,0.87802531, +;659:0.87548438,0.87293806,0.87038629,0.86782901,0.86526619,0.86269775,0.86012366,0.85754385, +;660:0.85495827,0.85236686,0.84976956,0.84716633,0.84455709,0.84194179,0.83932037,0.83669277, +;661:0.83405893,0.83141877,0.82877225,0.82611928,0.82345981,0.82079378,0.81812110,0.81544172, +;662:0.81275556,0.81006255,0.80736262,0.80465570,0.80194171,0.79922057,0.79649221,0.79375655, +;663:0.79101352,0.78826302,0.78550497,0.78273931,0.77996593,0.77718475,0.77439569,0.77159865, +;664:0.76879355,0.76598029,0.76315878,0.76032891,0.75749061,0.75464376,0.75178826,0.74892402, +;665:0.74605092,0.74316887,0.74027775,0.73737744,0.73446785,0.73154885,0.72862033,0.72568217, +;666:0.72273425,0.71977644,0.71680861,0.71383064,0.71084240,0.70784376,0.70483456,0.70181469, +;667:0.69878398,0.69574231,0.69268952,0.68962545,0.68654996,0.68346288,0.68036406,0.67725332, +;668:0.67413051,0.67099544,0.66784794,0.66468783,0.66151492,0.65832903,0.65512997,0.65191753, +;669:0.64869151,0.64545170,0.64219789,0.63892987,0.63564741,0.63235028,0.62903824,0.62571106, +;670:0.62236849,0.61901027,0.61563615,0.61224585,0.60883911,0.60541564,0.60197515,0.59851735, +;671:0.59504192,0.59154856,0.58803694,0.58450672,0.58095756,0.57738911,0.57380101,0.57019288, +;672:0.56656433,0.56291496,0.55924437,0.55555212,0.55183778,0.54810089,0.54434099,0.54055758, +;673:0.53675018,0.53291825,0.52906127,0.52517867,0.52126988,0.51733431,0.51337132,0.50938028, +;674:0.50536051,0.50131132,0.49723200,0.49312177,0.48897987,0.48480547,0.48059772,0.47635573, +;675:0.47207859,0.46776530,0.46341487,0.45902623,0.45459827,0.45012983,0.44561967,0.44106652, +;676:0.43646903,0.43182577,0.42713525,0.42239588,0.41760600,0.41276385,0.40786755,0.40291513, +;677:0.39790449,0.39283339,0.38769946,0.38250016,0.37723277,0.37189441,0.36648196,0.36099209, +;678:0.35542120,0.34976542,0.34402054,0.33818204,0.33224495,0.32620390,0.32005298,0.31378574, +;679:0.30739505,0.30087304,0.29421096,0.28739907,0.28042645,0.27328078,0.26594810,0.25841250, +;680:0.25065566,0.24265636,0.23438976,0.22582651,0.21693146,0.20766198,0.19796546,0.18777575, +;681:0.17700769,0.16554844,0.15324301,0.13986823,0.12508152,0.10830610,0.08841715,0.06251018, +;682:} +;683: +;684:double acos( double x ) { +;685: int index; +;686: +;687: if (x < -1) +;688: x = -1; +;689: if (x > 1) +;690: x = 1; +;691: index = (float) (1.0 + x) * 511.9; +;692: return acostable[index]; +;693:} +;694: +;695:double atan2( double y, double x ) { +;696: float base; +;697: float temp; +;698: float dir; +;699: float test; +;700: int i; +;701: +;702: if ( x < 0 ) { +;703: if ( y >= 0 ) { +;704: // quad 1 +;705: base = M_PI / 2; +;706: temp = x; +;707: x = y; +;708: y = -temp; +;709: } else { +;710: // quad 2 +;711: base = M_PI; +;712: x = -x; +;713: y = -y; +;714: } +;715: } else { +;716: if ( y < 0 ) { +;717: // quad 3 +;718: base = 3 * M_PI / 2; +;719: temp = x; +;720: x = -y; +;721: y = temp; +;722: } +;723: } +;724: +;725: if ( y > x ) { +;726: base += M_PI/2; +;727: temp = x; +;728: x = y; +;729: y = temp; +;730: dir = -1; +;731: } else { +;732: dir = 1; +;733: } +;734: +;735: // calcualte angle in octant 0 +;736: if ( x == 0 ) { +;737: return base; +;738: } +;739: y /= x; +;740: +;741: for ( i = 0 ; i < 512 ; i++ ) { +;742: test = sintable[i] / sintable[1023-i]; +;743: if ( test > y ) { +;744: break; +;745: } +;746: } +;747: +;748: return base + dir * i * ( M_PI/2048); +;749:} +;750: +;751: +;752:#endif +;753: +;754:#ifdef Q3_VM +;755:// bk001127 - guarded this tan replacement +;756:// ld: undefined versioned symbol name tan@@GLIBC_2.0 +;757:double tan( double x ) { +line 758 +;758: return sin(x) / cos(x); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRLP4 4 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRLP4 0 +INDIRF4 +ADDRLP4 4 +INDIRF4 +DIVF4 +RETF4 +LABELV $196 +endproc tan 8 4 +data +align 4 +LABELV randSeed +byte 4 0 +export srand +code +proc srand 0 0 +line 765 +;759:} +;760:#endif +;761: +;762: +;763:static int randSeed = 0; +;764: +;765:void srand( unsigned seed ) { +line 766 +;766: randSeed = seed; +ADDRGP4 randSeed +ADDRFP4 0 +INDIRU4 +CVUI4 4 +ASGNI4 +line 767 +;767:} +LABELV $197 +endproc srand 0 0 +export rand +proc rand 4 0 +line 769 +;768: +;769:int rand( void ) { +line 770 +;770: randSeed = (69069 * randSeed + 1); +ADDRLP4 0 +ADDRGP4 randSeed +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 69069 +ADDRLP4 0 +INDIRP4 +INDIRI4 +MULI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 771 +;771: return randSeed & 0x7fff; +ADDRGP4 randSeed +INDIRI4 +CNSTI4 32767 +BANDI4 +RETI4 +LABELV $198 +endproc rand 4 0 +export atof +proc atof 32 0 +line 774 +;772:} +;773: +;774:double atof( const char *string ) { +ADDRGP4 $201 +JUMPV +LABELV $200 +line 781 +;775: float sign; +;776: float value; +;777: int c; +;778: +;779: +;780: // skip whitespace +;781: while ( *string <= ' ' ) { +line 782 +;782: if ( !*string ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $203 +line 783 +;783: return 0; +CNSTF4 0 +RETF4 +ADDRGP4 $199 +JUMPV +LABELV $203 +line 785 +;784: } +;785: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 786 +;786: } +LABELV $201 +line 781 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +LEI4 $200 +line 789 +;787: +;788: // check sign +;789: switch ( *string ) { +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 43 +EQI4 $208 +ADDRLP4 12 +INDIRI4 +CNSTI4 45 +EQI4 $209 +ADDRGP4 $205 +JUMPV +LABELV $208 +line 791 +;790: case '+': +;791: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 792 +;792: sign = 1; +ADDRLP4 8 +CNSTF4 1065353216 +ASGNF4 +line 793 +;793: break; +ADDRGP4 $206 +JUMPV +LABELV $209 +line 795 +;794: case '-': +;795: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 796 +;796: sign = -1; +ADDRLP4 8 +CNSTF4 3212836864 +ASGNF4 +line 797 +;797: break; +ADDRGP4 $206 +JUMPV +LABELV $205 +line 799 +;798: default: +;799: sign = 1; +ADDRLP4 8 +CNSTF4 1065353216 +ASGNF4 +line 800 +;800: break; +LABELV $206 +line 804 +;801: } +;802: +;803: // read digits +;804: value = 0; +ADDRLP4 4 +CNSTF4 0 +ASGNF4 +line 805 +;805: c = string[0]; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 806 +;806: if ( c != '.' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 46 +EQI4 $210 +LABELV $212 +line 807 +;807: do { +line 808 +;808: c = *string++; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 20 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 20 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 809 +;809: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $217 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $215 +LABELV $217 +line 810 +;810: break; +ADDRGP4 $211 +JUMPV +LABELV $215 +line 812 +;811: } +;812: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 813 +;813: value = value * 10 + c; +ADDRLP4 4 +CNSTF4 1092616192 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +ADDF4 +ASGNF4 +line 814 +;814: } while ( 1 ); +LABELV $213 +ADDRGP4 $212 +JUMPV +line 815 +;815: } else { +ADDRGP4 $211 +JUMPV +LABELV $210 +line 816 +;816: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 817 +;817: } +LABELV $211 +line 820 +;818: +;819: // check for decimal point +;820: if ( c == '.' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 46 +NEI4 $218 +line 823 +;821: double fraction; +;822: +;823: fraction = 0.1; +ADDRLP4 20 +CNSTF4 1036831949 +ASGNF4 +LABELV $220 +line 824 +;824: do { +line 825 +;825: c = *string++; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 24 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 24 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 826 +;826: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $225 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $223 +LABELV $225 +line 827 +;827: break; +ADDRGP4 $222 +JUMPV +LABELV $223 +line 829 +;828: } +;829: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 830 +;830: value += c * fraction; +ADDRLP4 4 +ADDRLP4 4 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +ADDRLP4 20 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 831 +;831: fraction *= 0.1; +ADDRLP4 20 +CNSTF4 1036831949 +ADDRLP4 20 +INDIRF4 +MULF4 +ASGNF4 +line 832 +;832: } while ( 1 ); +LABELV $221 +ADDRGP4 $220 +JUMPV +LABELV $222 +line 834 +;833: +;834: } +LABELV $218 +line 838 +;835: +;836: // not handling 10e10 notation... +;837: +;838: return value * sign; +ADDRLP4 4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +MULF4 +RETF4 +LABELV $199 +endproc atof 32 0 +export _atof +proc _atof 36 0 +line 841 +;839:} +;840: +;841:double _atof( const char **stringPtr ) { +line 845 +;842: const char *string; +;843: float sign; +;844: float value; +;845: int c = '0'; // bk001211 - uninitialized use possible +ADDRLP4 0 +CNSTI4 48 +ASGNI4 +line 847 +;846: +;847: string = *stringPtr; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRGP4 $228 +JUMPV +LABELV $227 +line 850 +;848: +;849: // skip whitespace +;850: while ( *string <= ' ' ) { +line 851 +;851: if ( !*string ) { +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $230 +line 852 +;852: *stringPtr = string; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 853 +;853: return 0; +CNSTF4 0 +RETF4 +ADDRGP4 $226 +JUMPV +LABELV $230 +line 855 +;854: } +;855: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 856 +;856: } +LABELV $228 +line 850 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +LEI4 $227 +line 859 +;857: +;858: // check sign +;859: switch ( *string ) { +ADDRLP4 16 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 43 +EQI4 $235 +ADDRLP4 16 +INDIRI4 +CNSTI4 45 +EQI4 $236 +ADDRGP4 $232 +JUMPV +LABELV $235 +line 861 +;860: case '+': +;861: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 862 +;862: sign = 1; +ADDRLP4 12 +CNSTF4 1065353216 +ASGNF4 +line 863 +;863: break; +ADDRGP4 $233 +JUMPV +LABELV $236 +line 865 +;864: case '-': +;865: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 866 +;866: sign = -1; +ADDRLP4 12 +CNSTF4 3212836864 +ASGNF4 +line 867 +;867: break; +ADDRGP4 $233 +JUMPV +LABELV $232 +line 869 +;868: default: +;869: sign = 1; +ADDRLP4 12 +CNSTF4 1065353216 +ASGNF4 +line 870 +;870: break; +LABELV $233 +line 874 +;871: } +;872: +;873: // read digits +;874: value = 0; +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +line 875 +;875: if ( string[0] != '.' ) { +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 46 +EQI4 $237 +LABELV $239 +line 876 +;876: do { +line 877 +;877: c = *string++; +ADDRLP4 24 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 24 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 24 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 878 +;878: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $244 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $242 +LABELV $244 +line 879 +;879: break; +ADDRGP4 $241 +JUMPV +LABELV $242 +line 881 +;880: } +;881: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 882 +;882: value = value * 10 + c; +ADDRLP4 8 +CNSTF4 1092616192 +ADDRLP4 8 +INDIRF4 +MULF4 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +ADDF4 +ASGNF4 +line 883 +;883: } while ( 1 ); +LABELV $240 +ADDRGP4 $239 +JUMPV +LABELV $241 +line 884 +;884: } +LABELV $237 +line 887 +;885: +;886: // check for decimal point +;887: if ( c == '.' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 46 +NEI4 $245 +line 890 +;888: double fraction; +;889: +;890: fraction = 0.1; +ADDRLP4 24 +CNSTF4 1036831949 +ASGNF4 +LABELV $247 +line 891 +;891: do { +line 892 +;892: c = *string++; +ADDRLP4 28 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 28 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 28 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 893 +;893: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $252 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $250 +LABELV $252 +line 894 +;894: break; +ADDRGP4 $249 +JUMPV +LABELV $250 +line 896 +;895: } +;896: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 897 +;897: value += c * fraction; +ADDRLP4 8 +ADDRLP4 8 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +ADDRLP4 24 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 898 +;898: fraction *= 0.1; +ADDRLP4 24 +CNSTF4 1036831949 +ADDRLP4 24 +INDIRF4 +MULF4 +ASGNF4 +line 899 +;899: } while ( 1 ); +LABELV $248 +ADDRGP4 $247 +JUMPV +LABELV $249 +line 901 +;900: +;901: } +LABELV $245 +line 904 +;902: +;903: // not handling 10e10 notation... +;904: *stringPtr = string; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 906 +;905: +;906: return value * sign; +ADDRLP4 8 +INDIRF4 +ADDRLP4 12 +INDIRF4 +MULF4 +RETF4 +LABELV $226 +endproc _atof 36 0 +export atoi +proc atoi 28 0 +line 915 +;907:} +;908: +;909: +;910:// bk001120 - presumably needed for Mac +;911://#if !defined ( _MSC_VER ) && ! defined ( __linux__ ) +;912: +;913:// bk001127 - undid undo +;914:#if defined ( Q3_VM ) +;915:int atoi( const char *string ) { +ADDRGP4 $255 +JUMPV +LABELV $254 +line 922 +;916: int sign; +;917: int value; +;918: int c; +;919: +;920: +;921: // skip whitespace +;922: while ( *string <= ' ' ) { +line 923 +;923: if ( !*string ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $257 +line 924 +;924: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $253 +JUMPV +LABELV $257 +line 926 +;925: } +;926: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 927 +;927: } +LABELV $255 +line 922 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +LEI4 $254 +line 930 +;928: +;929: // check sign +;930: switch ( *string ) { +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 43 +EQI4 $262 +ADDRLP4 12 +INDIRI4 +CNSTI4 45 +EQI4 $263 +ADDRGP4 $259 +JUMPV +LABELV $262 +line 932 +;931: case '+': +;932: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 933 +;933: sign = 1; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 934 +;934: break; +ADDRGP4 $260 +JUMPV +LABELV $263 +line 936 +;935: case '-': +;936: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 937 +;937: sign = -1; +ADDRLP4 8 +CNSTI4 -1 +ASGNI4 +line 938 +;938: break; +ADDRGP4 $260 +JUMPV +LABELV $259 +line 940 +;939: default: +;940: sign = 1; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 941 +;941: break; +LABELV $260 +line 945 +;942: } +;943: +;944: // read digits +;945: value = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +LABELV $264 +line 946 +;946: do { +line 947 +;947: c = *string++; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 20 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 20 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 948 +;948: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $269 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $267 +LABELV $269 +line 949 +;949: break; +ADDRGP4 $266 +JUMPV +LABELV $267 +line 951 +;950: } +;951: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 952 +;952: value = value * 10 + c; +ADDRLP4 4 +CNSTI4 10 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 953 +;953: } while ( 1 ); +LABELV $265 +ADDRGP4 $264 +JUMPV +LABELV $266 +line 957 +;954: +;955: // not handling 10e10 notation... +;956: +;957: return value * sign; +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +MULI4 +RETI4 +LABELV $253 +endproc atoi 28 0 +export _atoi +proc _atoi 32 0 +line 961 +;958:} +;959: +;960: +;961:int _atoi( const char **stringPtr ) { +line 967 +;962: int sign; +;963: int value; +;964: int c; +;965: const char *string; +;966: +;967: string = *stringPtr; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRGP4 $272 +JUMPV +LABELV $271 +line 970 +;968: +;969: // skip whitespace +;970: while ( *string <= ' ' ) { +line 971 +;971: if ( !*string ) { +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $274 +line 972 +;972: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $270 +JUMPV +LABELV $274 +line 974 +;973: } +;974: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 975 +;975: } +LABELV $272 +line 970 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +LEI4 $271 +line 978 +;976: +;977: // check sign +;978: switch ( *string ) { +ADDRLP4 16 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 43 +EQI4 $279 +ADDRLP4 16 +INDIRI4 +CNSTI4 45 +EQI4 $280 +ADDRGP4 $276 +JUMPV +LABELV $279 +line 980 +;979: case '+': +;980: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 981 +;981: sign = 1; +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +line 982 +;982: break; +ADDRGP4 $277 +JUMPV +LABELV $280 +line 984 +;983: case '-': +;984: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 985 +;985: sign = -1; +ADDRLP4 12 +CNSTI4 -1 +ASGNI4 +line 986 +;986: break; +ADDRGP4 $277 +JUMPV +LABELV $276 +line 988 +;987: default: +;988: sign = 1; +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +line 989 +;989: break; +LABELV $277 +line 993 +;990: } +;991: +;992: // read digits +;993: value = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +LABELV $281 +line 994 +;994: do { +line 995 +;995: c = *string++; +ADDRLP4 24 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 24 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 24 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 996 +;996: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $286 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $284 +LABELV $286 +line 997 +;997: break; +ADDRGP4 $283 +JUMPV +LABELV $284 +line 999 +;998: } +;999: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 1000 +;1000: value = value * 10 + c; +ADDRLP4 8 +CNSTI4 10 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 1001 +;1001: } while ( 1 ); +LABELV $282 +ADDRGP4 $281 +JUMPV +LABELV $283 +line 1005 +;1002: +;1003: // not handling 10e10 notation... +;1004: +;1005: *stringPtr = string; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1007 +;1006: +;1007: return value * sign; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRI4 +MULI4 +RETI4 +LABELV $270 +endproc _atoi 32 0 +export abs +proc abs 4 0 +line 1010 +;1008:} +;1009: +;1010:int abs( int n ) { +line 1011 +;1011: return n < 0 ? -n : n; +ADDRFP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $289 +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +NEGI4 +ASGNI4 +ADDRGP4 $290 +JUMPV +LABELV $289 +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +LABELV $290 +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $287 +endproc abs 4 0 +export fabs +proc fabs 4 0 +line 1014 +;1012:} +;1013: +;1014:double fabs( double x ) { +line 1015 +;1015: return x < 0 ? -x : x; +ADDRFP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $293 +ADDRLP4 0 +ADDRFP4 0 +INDIRF4 +NEGF4 +ASGNF4 +ADDRGP4 $294 +JUMPV +LABELV $293 +ADDRLP4 0 +ADDRFP4 0 +INDIRF4 +ASGNF4 +LABELV $294 +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $291 +endproc fabs 4 0 +export AddInt +proc AddInt 56 0 +line 1037 +;1016:} +;1017: +;1018: +;1019: +;1020://========================================================= +;1021: +;1022: +;1023:#define ALT 0x00000001 /* alternate form */ +;1024:#define HEXPREFIX 0x00000002 /* add 0x or 0X prefix */ +;1025:#define LADJUST 0x00000004 /* left adjustment */ +;1026:#define LONGDBL 0x00000008 /* long double */ +;1027:#define LONGINT 0x00000010 /* long integer */ +;1028:#define QUADINT 0x00000020 /* quad integer */ +;1029:#define SHORTINT 0x00000040 /* short integer */ +;1030:#define ZEROPAD 0x00000080 /* zero (as opposed to blank) pad */ +;1031:#define FPT 0x00000100 /* floating point number */ +;1032: +;1033:#define to_digit(c) ((c) - '0') +;1034:#define is_digit(c) ((unsigned)to_digit(c) <= 9) +;1035:#define to_char(n) ((n) + '0') +;1036: +;1037:void AddInt( char **buf_p, int val, int width, int flags ) { +line 1043 +;1038: char text[32]; +;1039: int digits; +;1040: int signedVal; +;1041: char *buf; +;1042: +;1043: digits = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1044 +;1044: signedVal = val; +ADDRLP4 40 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 1045 +;1045: if ( val < 0 ) { +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +GEI4 $296 +line 1046 +;1046: val = -val; +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +NEGI4 +ASGNI4 +line 1047 +;1047: } +LABELV $296 +LABELV $298 +line 1048 +;1048: do { +line 1049 +;1049: text[digits++] = '0' + val % 10; +ADDRLP4 44 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 44 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +ADDRLP4 8 +ADDP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 10 +MODI4 +CNSTI4 48 +ADDI4 +CVII1 4 +ASGNI1 +line 1050 +;1050: val /= 10; +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +CNSTI4 10 +DIVI4 +ASGNI4 +line 1051 +;1051: } while ( val ); +LABELV $299 +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $298 +line 1053 +;1052: +;1053: if ( signedVal < 0 ) { +ADDRLP4 40 +INDIRI4 +CNSTI4 0 +GEI4 $301 +line 1054 +;1054: text[digits++] = '-'; +ADDRLP4 44 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 44 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +ADDRLP4 8 +ADDP4 +CNSTI1 45 +ASGNI1 +line 1055 +;1055: } +LABELV $301 +line 1057 +;1056: +;1057: buf = *buf_p; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +line 1059 +;1058: +;1059: if( !( flags & LADJUST ) ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +NEI4 $312 +ADDRGP4 $306 +JUMPV +LABELV $305 +line 1060 +;1060: while ( digits < width ) { +line 1061 +;1061: *buf++ = ( flags & ZEROPAD ) ? '0' : ' '; +ADDRLP4 48 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 48 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRFP4 12 +INDIRI4 +CNSTI4 128 +BANDI4 +CNSTI4 0 +EQI4 $309 +ADDRLP4 44 +CNSTI4 48 +ASGNI4 +ADDRGP4 $310 +JUMPV +LABELV $309 +ADDRLP4 44 +CNSTI4 32 +ASGNI4 +LABELV $310 +ADDRLP4 48 +INDIRP4 +ADDRLP4 44 +INDIRI4 +CVII1 4 +ASGNI1 +line 1062 +;1062: width--; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1063 +;1063: } +LABELV $306 +line 1060 +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LTI4 $305 +line 1064 +;1064: } +ADDRGP4 $312 +JUMPV +LABELV $311 +line 1066 +;1065: +;1066: while ( digits-- ) { +line 1067 +;1067: *buf++ = text[digits]; +ADDRLP4 44 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 44 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 44 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +ADDP4 +INDIRI1 +ASGNI1 +line 1068 +;1068: width--; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1069 +;1069: } +LABELV $312 +line 1066 +ADDRLP4 44 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 44 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +NEI4 $311 +line 1071 +;1070: +;1071: if( flags & LADJUST ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +EQI4 $314 +ADDRGP4 $317 +JUMPV +LABELV $316 +line 1072 +;1072: while ( width-- ) { +line 1073 +;1073: *buf++ = ( flags & ZEROPAD ) ? '0' : ' '; +ADDRLP4 52 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 52 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRFP4 12 +INDIRI4 +CNSTI4 128 +BANDI4 +CNSTI4 0 +EQI4 $320 +ADDRLP4 48 +CNSTI4 48 +ASGNI4 +ADDRGP4 $321 +JUMPV +LABELV $320 +ADDRLP4 48 +CNSTI4 32 +ASGNI4 +LABELV $321 +ADDRLP4 52 +INDIRP4 +ADDRLP4 48 +INDIRI4 +CVII1 4 +ASGNI1 +line 1074 +;1074: } +LABELV $317 +line 1072 +ADDRLP4 48 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRFP4 8 +ADDRLP4 48 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $316 +line 1075 +;1075: } +LABELV $314 +line 1077 +;1076: +;1077: *buf_p = buf; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1078 +;1078:} +LABELV $295 +endproc AddInt 56 0 +export AddFloat +proc AddFloat 60 0 +line 1080 +;1079: +;1080:void AddFloat( char **buf_p, float fval, int width, int prec ) { +line 1088 +;1081: char text[32]; +;1082: int digits; +;1083: float signedVal; +;1084: char *buf; +;1085: int val; +;1086: +;1087: // get the sign +;1088: signedVal = fval; +ADDRLP4 44 +ADDRFP4 4 +INDIRF4 +ASGNF4 +line 1089 +;1089: if ( fval < 0 ) { +ADDRFP4 4 +INDIRF4 +CNSTF4 0 +GEF4 $323 +line 1090 +;1090: fval = -fval; +ADDRFP4 4 +ADDRFP4 4 +INDIRF4 +NEGF4 +ASGNF4 +line 1091 +;1091: } +LABELV $323 +line 1094 +;1092: +;1093: // write the float number +;1094: digits = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1095 +;1095: val = (int)fval; +ADDRLP4 4 +ADDRFP4 4 +INDIRF4 +CVFI4 4 +ASGNI4 +LABELV $325 +line 1096 +;1096: do { +line 1097 +;1097: text[digits++] = '0' + val % 10; +ADDRLP4 48 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 48 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +ADDRLP4 8 +ADDP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +MODI4 +CNSTI4 48 +ADDI4 +CVII1 4 +ASGNI1 +line 1098 +;1098: val /= 10; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +DIVI4 +ASGNI4 +line 1099 +;1099: } while ( val ); +LABELV $326 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $325 +line 1101 +;1100: +;1101: if ( signedVal < 0 ) { +ADDRLP4 44 +INDIRF4 +CNSTF4 0 +GEF4 $328 +line 1102 +;1102: text[digits++] = '-'; +ADDRLP4 48 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 48 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +ADDRLP4 8 +ADDP4 +CNSTI1 45 +ASGNI1 +line 1103 +;1103: } +LABELV $328 +line 1105 +;1104: +;1105: buf = *buf_p; +ADDRLP4 40 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRGP4 $331 +JUMPV +LABELV $330 +line 1107 +;1106: +;1107: while ( digits < width ) { +line 1108 +;1108: *buf++ = ' '; +ADDRLP4 48 +ADDRLP4 40 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 48 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 48 +INDIRP4 +CNSTI1 32 +ASGNI1 +line 1109 +;1109: width--; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1110 +;1110: } +LABELV $331 +line 1107 +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LTI4 $330 +ADDRGP4 $334 +JUMPV +LABELV $333 +line 1112 +;1111: +;1112: while ( digits-- ) { +line 1113 +;1113: *buf++ = text[digits]; +ADDRLP4 48 +ADDRLP4 40 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 48 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 48 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +ADDP4 +INDIRI1 +ASGNI1 +line 1114 +;1114: } +LABELV $334 +line 1112 +ADDRLP4 48 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 48 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $333 +line 1116 +;1115: +;1116: *buf_p = buf; +ADDRFP4 0 +INDIRP4 +ADDRLP4 40 +INDIRP4 +ASGNP4 +line 1118 +;1117: +;1118: if (prec < 0) +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +GEI4 $336 +line 1119 +;1119: prec = 6; +ADDRFP4 12 +CNSTI4 6 +ASGNI4 +LABELV $336 +line 1121 +;1120: // write the fraction +;1121: digits = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $339 +JUMPV +LABELV $338 +line 1122 +;1122: while (digits < prec) { +line 1123 +;1123: fval -= (int) fval; +ADDRLP4 52 +ADDRFP4 4 +INDIRF4 +ASGNF4 +ADDRFP4 4 +ADDRLP4 52 +INDIRF4 +ADDRLP4 52 +INDIRF4 +CVFI4 4 +CVIF4 4 +SUBF4 +ASGNF4 +line 1124 +;1124: fval *= 10.0; +ADDRFP4 4 +CNSTF4 1092616192 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1125 +;1125: val = (int) fval; +ADDRLP4 4 +ADDRFP4 4 +INDIRF4 +CVFI4 4 +ASGNI4 +line 1126 +;1126: text[digits++] = '0' + val % 10; +ADDRLP4 56 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 56 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +ADDRLP4 8 +ADDP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +MODI4 +CNSTI4 48 +ADDI4 +CVII1 4 +ASGNI1 +line 1127 +;1127: } +LABELV $339 +line 1122 +ADDRLP4 0 +INDIRI4 +ADDRFP4 12 +INDIRI4 +LTI4 $338 +line 1129 +;1128: +;1129: if (digits > 0) { +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +LEI4 $341 +line 1130 +;1130: buf = *buf_p; +ADDRLP4 40 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +line 1131 +;1131: *buf++ = '.'; +ADDRLP4 52 +ADDRLP4 40 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 52 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CNSTI1 46 +ASGNI1 +line 1132 +;1132: for (prec = 0; prec < digits; prec++) { +ADDRFP4 12 +CNSTI4 0 +ASGNI4 +ADDRGP4 $346 +JUMPV +LABELV $343 +line 1133 +;1133: *buf++ = text[prec]; +ADDRLP4 56 +ADDRLP4 40 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 56 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 56 +INDIRP4 +ADDRFP4 12 +INDIRI4 +ADDRLP4 8 +ADDP4 +INDIRI1 +ASGNI1 +line 1134 +;1134: } +LABELV $344 +line 1132 +ADDRFP4 12 +ADDRFP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $346 +ADDRFP4 12 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LTI4 $343 +line 1135 +;1135: *buf_p = buf; +ADDRFP4 0 +INDIRP4 +ADDRLP4 40 +INDIRP4 +ASGNP4 +line 1136 +;1136: } +LABELV $341 +line 1137 +;1137:} +LABELV $322 +endproc AddFloat 60 0 +export AddString +proc AddString 20 4 +line 1140 +;1138: +;1139: +;1140:void AddString( char **buf_p, char *string, int width, int prec ) { +line 1144 +;1141: int size; +;1142: char *buf; +;1143: +;1144: buf = *buf_p; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +line 1146 +;1145: +;1146: if ( string == NULL ) { +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $348 +line 1147 +;1147: string = "(null)"; +ADDRFP4 4 +ADDRGP4 $350 +ASGNP4 +line 1148 +;1148: prec = -1; +ADDRFP4 12 +CNSTI4 -1 +ASGNI4 +line 1149 +;1149: } +LABELV $348 +line 1151 +;1150: +;1151: if ( prec >= 0 ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +LTI4 $351 +line 1152 +;1152: for( size = 0; size < prec; size++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $356 +JUMPV +LABELV $353 +line 1153 +;1153: if( string[size] == '\0' ) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $357 +line 1154 +;1154: break; +ADDRGP4 $352 +JUMPV +LABELV $357 +line 1156 +;1155: } +;1156: } +LABELV $354 +line 1152 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $356 +ADDRLP4 0 +INDIRI4 +ADDRFP4 12 +INDIRI4 +LTI4 $353 +line 1157 +;1157: } +ADDRGP4 $352 +JUMPV +LABELV $351 +line 1158 +;1158: else { +line 1159 +;1159: size = strlen( string ); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 1160 +;1160: } +LABELV $352 +line 1162 +;1161: +;1162: width -= size; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +ADDRLP4 0 +INDIRI4 +SUBI4 +ASGNI4 +ADDRGP4 $360 +JUMPV +LABELV $359 +line 1164 +;1163: +;1164: while( size-- ) { +line 1165 +;1165: *buf++ = *string++; +ADDRLP4 8 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI1 +ASGNI1 +line 1166 +;1166: } +LABELV $360 +line 1164 +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $359 +ADDRGP4 $363 +JUMPV +LABELV $362 +line 1168 +;1167: +;1168: while( width-- > 0 ) { +line 1169 +;1169: *buf++ = ' '; +ADDRLP4 12 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI1 32 +ASGNI1 +line 1170 +;1170: } +LABELV $363 +line 1168 +ADDRLP4 12 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRFP4 8 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +GTI4 $362 +line 1172 +;1171: +;1172: *buf_p = buf; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1173 +;1173:} +LABELV $347 +endproc AddString 20 4 +export vsprintf +proc vsprintf 72 16 +line 1183 +;1174: +;1175:/* +;1176:vsprintf +;1177: +;1178:I'm not going to support a bunch of the more arcane stuff in here +;1179:just to keep it simpler. For example, the '*' and '$' are not +;1180:currently supported. I've tried to make it so that it will just +;1181:parse and ignore formats we don't support. +;1182:*/ +;1183:int vsprintf( char *buffer, const char *fmt, va_list argptr ) { +line 1193 +;1184: int *arg; +;1185: char *buf_p; +;1186: char ch; +;1187: int flags; +;1188: int width; +;1189: int prec; +;1190: int n; +;1191: char sign; +;1192: +;1193: buf_p = buffer; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 1194 +;1194: arg = (int *)argptr; +ADDRLP4 24 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRGP4 $367 +JUMPV +LABELV $366 +line 1196 +;1195: +;1196: while( qtrue ) { +line 1198 +;1197: // run through the format string until we hit a '%' or '\0' +;1198: for ( ch = *fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++ ) { +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRGP4 $372 +JUMPV +LABELV $369 +line 1199 +;1199: *buf_p++ = ch; +ADDRLP4 32 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 32 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 0 +INDIRI1 +ASGNI1 +line 1200 +;1200: } +LABELV $370 +line 1198 +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +LABELV $372 +ADDRLP4 29 +ADDRFP4 4 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRLP4 0 +ADDRLP4 29 +INDIRI1 +ASGNI1 +ADDRLP4 29 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $373 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 37 +NEI4 $369 +LABELV $373 +line 1201 +;1201: if ( ch == '\0' ) { +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $374 +line 1202 +;1202: goto done; +ADDRGP4 $376 +JUMPV +LABELV $374 +line 1206 +;1203: } +;1204: +;1205: // skip over the '%' +;1206: fmt++; +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1209 +;1207: +;1208: // reset formatting state +;1209: flags = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 1210 +;1210: width = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 1211 +;1211: prec = -1; +ADDRLP4 20 +CNSTI4 -1 +ASGNI4 +line 1212 +;1212: sign = '\0'; +ADDRLP4 28 +CNSTI1 0 +ASGNI1 +LABELV $377 +line 1215 +;1213: +;1214:rflag: +;1215: ch = *fmt++; +ADDRLP4 32 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 32 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 32 +INDIRP4 +INDIRI1 +ASGNI1 +LABELV $378 +line 1217 +;1216:reswitch: +;1217: switch( ch ) { +ADDRLP4 36 +ADDRLP4 0 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 99 +LTI4 $400 +ADDRLP4 36 +INDIRI4 +CNSTI4 105 +GTI4 $401 +ADDRLP4 36 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $402-396 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $402 +address $395 +address $396 +address $379 +address $397 +address $379 +address $379 +address $396 +code +LABELV $400 +ADDRLP4 36 +INDIRI4 +CNSTI4 37 +LTI4 $379 +ADDRLP4 36 +INDIRI4 +CNSTI4 57 +GTI4 $379 +ADDRLP4 36 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $404-148 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $404 +address $399 +address $379 +address $379 +address $379 +address $379 +address $379 +address $379 +address $379 +address $382 +address $383 +address $379 +address $390 +address $391 +address $391 +address $391 +address $391 +address $391 +address $391 +address $391 +address $391 +address $391 +code +LABELV $401 +ADDRLP4 36 +INDIRI4 +CNSTI4 115 +EQI4 $398 +ADDRGP4 $379 +JUMPV +LABELV $382 +line 1219 +;1218: case '-': +;1219: flags |= LADJUST; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 4 +BORI4 +ASGNI4 +line 1220 +;1220: goto rflag; +ADDRGP4 $377 +JUMPV +LABELV $383 +line 1222 +;1221: case '.': +;1222: n = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $385 +JUMPV +LABELV $384 +line 1223 +;1223: while( is_digit( ( ch = *fmt++ ) ) ) { +line 1224 +;1224: n = 10 * n + ( ch - '0' ); +ADDRLP4 8 +CNSTI4 10 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +ADDI4 +ASGNI4 +line 1225 +;1225: } +LABELV $385 +line 1223 +ADDRLP4 48 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 48 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 52 +ADDRLP4 48 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRLP4 0 +ADDRLP4 52 +INDIRI1 +ASGNI1 +ADDRLP4 52 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +CVIU4 4 +CNSTU4 9 +LEU4 $384 +line 1226 +;1226: prec = n < 0 ? -1 : n; +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +GEI4 $388 +ADDRLP4 56 +CNSTI4 -1 +ASGNI4 +ADDRGP4 $389 +JUMPV +LABELV $388 +ADDRLP4 56 +ADDRLP4 8 +INDIRI4 +ASGNI4 +LABELV $389 +ADDRLP4 20 +ADDRLP4 56 +INDIRI4 +ASGNI4 +line 1227 +;1227: goto reswitch; +ADDRGP4 $378 +JUMPV +LABELV $390 +line 1229 +;1228: case '0': +;1229: flags |= ZEROPAD; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 128 +BORI4 +ASGNI4 +line 1230 +;1230: goto rflag; +ADDRGP4 $377 +JUMPV +LABELV $391 +line 1240 +;1231: case '1': +;1232: case '2': +;1233: case '3': +;1234: case '4': +;1235: case '5': +;1236: case '6': +;1237: case '7': +;1238: case '8': +;1239: case '9': +;1240: n = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +LABELV $392 +line 1241 +;1241: do { +line 1242 +;1242: n = 10 * n + ( ch - '0' ); +ADDRLP4 8 +CNSTI4 10 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +ADDI4 +ASGNI4 +line 1243 +;1243: ch = *fmt++; +ADDRLP4 60 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 60 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 60 +INDIRP4 +INDIRI1 +ASGNI1 +line 1244 +;1244: } while( is_digit( ch ) ); +LABELV $393 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +CVIU4 4 +CNSTU4 9 +LEU4 $392 +line 1245 +;1245: width = n; +ADDRLP4 12 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 1246 +;1246: goto reswitch; +ADDRGP4 $378 +JUMPV +LABELV $395 +line 1248 +;1247: case 'c': +;1248: *buf_p++ = (char)*arg; +ADDRLP4 60 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 60 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CVII1 4 +ASGNI1 +line 1249 +;1249: arg++; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1250 +;1250: break; +ADDRGP4 $380 +JUMPV +LABELV $396 +line 1253 +;1251: case 'd': +;1252: case 'i': +;1253: AddInt( &buf_p, *arg, width, flags ); +ADDRLP4 4 +ARGP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 AddInt +CALLV +pop +line 1254 +;1254: arg++; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1255 +;1255: break; +ADDRGP4 $380 +JUMPV +LABELV $397 +line 1257 +;1256: case 'f': +;1257: AddFloat( &buf_p, *(double *)arg, width, prec ); +ADDRLP4 4 +ARGP4 +ADDRLP4 24 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 20 +INDIRI4 +ARGI4 +ADDRGP4 AddFloat +CALLV +pop +line 1259 +;1258:#ifdef __LCC__ +;1259: arg += 1; // everything is 32 bit in my compiler +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1263 +;1260:#else +;1261: arg += 2; +;1262:#endif +;1263: break; +ADDRGP4 $380 +JUMPV +LABELV $398 +line 1265 +;1264: case 's': +;1265: AddString( &buf_p, (char *)*arg, width, prec ); +ADDRLP4 4 +ARGP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CVIU4 4 +CVUP4 4 +ARGP4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 20 +INDIRI4 +ARGI4 +ADDRGP4 AddString +CALLV +pop +line 1266 +;1266: arg++; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1267 +;1267: break; +ADDRGP4 $380 +JUMPV +LABELV $399 +line 1269 +;1268: case '%': +;1269: *buf_p++ = ch; +ADDRLP4 64 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 64 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +ADDRLP4 0 +INDIRI1 +ASGNI1 +line 1270 +;1270: break; +ADDRGP4 $380 +JUMPV +LABELV $379 +line 1272 +;1271: default: +;1272: *buf_p++ = (char)*arg; +ADDRLP4 68 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 68 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CVII1 4 +ASGNI1 +line 1273 +;1273: arg++; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1274 +;1274: break; +LABELV $380 +line 1276 +;1275: } +;1276: } +LABELV $367 +line 1196 +ADDRGP4 $366 +JUMPV +LABELV $376 +line 1279 +;1277: +;1278:done: +;1279: *buf_p = 0; +ADDRLP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1280 +;1280: return buf_p - buffer; +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +RETI4 +LABELV $365 +endproc vsprintf 72 16 +export sscanf +proc sscanf 28 4 +line 1285 +;1281:} +;1282: +;1283: +;1284:/* this is really crappy */ +;1285:int sscanf( const char *buffer, const char *fmt, ... ) { +line 1290 +;1286: int cmd; +;1287: int **arg; +;1288: int count; +;1289: +;1290: arg = (int **)&fmt + 1; +ADDRLP4 4 +ADDRFP4 4+4 +ASGNP4 +line 1291 +;1291: count = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $409 +JUMPV +LABELV $408 +line 1293 +;1292: +;1293: while ( *fmt ) { +line 1294 +;1294: if ( fmt[0] != '%' ) { +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 37 +EQI4 $411 +line 1295 +;1295: fmt++; +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1296 +;1296: continue; +ADDRGP4 $409 +JUMPV +LABELV $411 +line 1299 +;1297: } +;1298: +;1299: cmd = fmt[1]; +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 1300 +;1300: fmt += 2; +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 2 +ADDP4 +ASGNP4 +line 1302 +;1301: +;1302: switch ( cmd ) { +ADDRLP4 16 +CNSTI4 100 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 16 +INDIRI4 +EQI4 $415 +ADDRLP4 0 +INDIRI4 +CNSTI4 102 +EQI4 $416 +ADDRLP4 0 +INDIRI4 +CNSTI4 105 +EQI4 $415 +ADDRLP4 0 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LTI4 $413 +LABELV $417 +ADDRLP4 0 +INDIRI4 +CNSTI4 117 +EQI4 $415 +ADDRGP4 $413 +JUMPV +LABELV $415 +line 1306 +;1303: case 'i': +;1304: case 'd': +;1305: case 'u': +;1306: **arg = _atoi( &buffer ); +ADDRFP4 0 +ARGP4 +ADDRLP4 20 +ADDRGP4 _atoi +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ASGNI4 +line 1307 +;1307: break; +ADDRGP4 $414 +JUMPV +LABELV $416 +line 1309 +;1308: case 'f': +;1309: *(float *)*arg = _atof( &buffer ); +ADDRFP4 0 +ARGP4 +ADDRLP4 24 +ADDRGP4 _atof +CALLF4 +ASGNF4 +ADDRLP4 4 +INDIRP4 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 1310 +;1310: break; +LABELV $413 +LABELV $414 +line 1312 +;1311: } +;1312: arg++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1313 +;1313: } +LABELV $409 +line 1293 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $408 +line 1315 +;1314: +;1315: return count; +ADDRLP4 8 +INDIRI4 +RETI4 +LABELV $406 +endproc sscanf 28 4 +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import strncpy +lit +align 1 +LABELV $350 +char 1 40 +char 1 110 +char 1 117 +char 1 108 +char 1 108 +char 1 41 +char 1 0 diff --git a/CODE-mp/game/vm/bg_misc.asm b/CODE-mp/game/vm/bg_misc.asm new file mode 100644 index 0000000..bddf741 --- /dev/null +++ b/CODE-mp/game/vm/bg_misc.asm @@ -0,0 +1,17606 @@ +data +export forceMasteryLevels +align 4 +LABELV forceMasteryLevels +address $120 +address $121 +address $122 +address $123 +address $124 +address $125 +address $126 +address $127 +export forceMasteryPoints +align 4 +LABELV forceMasteryPoints +byte 4 0 +byte 4 5 +byte 4 10 +byte 4 20 +byte 4 30 +byte 4 50 +byte 4 75 +byte 4 100 +export bgForcePowerCost +align 4 +LABELV bgForcePowerCost +byte 4 0 +byte 4 2 +byte 4 4 +byte 4 6 +byte 4 0 +byte 4 0 +byte 4 2 +byte 4 6 +byte 4 0 +byte 4 2 +byte 4 4 +byte 4 6 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 4 +byte 4 6 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 2 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 4 +byte 4 6 +byte 4 8 +byte 4 0 +byte 4 2 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 2 +byte 4 4 +byte 4 6 +byte 4 0 +byte 4 2 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 4 +byte 4 6 +byte 4 8 +export forcePowerSorted +align 4 +LABELV forcePowerSorted +byte 4 5 +byte 4 0 +byte 4 10 +byte 4 9 +byte 4 11 +byte 4 1 +byte 4 2 +byte 4 3 +byte 4 4 +byte 4 14 +byte 4 7 +byte 4 13 +byte 4 8 +byte 4 6 +byte 4 12 +byte 4 15 +byte 4 16 +byte 4 17 +export forcePowerDarkLight +align 4 +LABELV forcePowerDarkLight +byte 4 1 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1 +byte 4 2 +byte 4 2 +byte 4 2 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 2 +byte 4 2 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +export WeaponReadyAnim +align 4 +LABELV WeaponReadyAnim +byte 4 954 +byte 4 964 +byte 4 553 +byte 4 963 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 971 +byte 4 971 +byte 4 971 +byte 4 550 +byte 4 962 +export WeaponAttackAnim +align 4 +LABELV WeaponAttackAnim +byte 4 106 +byte 4 108 +byte 4 553 +byte 4 107 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 125 +byte 4 108 +byte 4 108 +byte 4 550 +byte 4 106 +export BG_LegalizedForcePowers +code +proc BG_LegalizedForcePowers 436 12 +file "../bg_misc.c" +line 171 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// bg_misc.c -- both games misc functions, all completely stateless +;4: +;5:#include "q_shared.h" +;6:#include "bg_public.h" +;7: +;8:#ifdef QAGAME +;9:#include "g_local.h" +;10:#endif +;11: +;12:#ifdef UI_EXPORTS +;13:#include "../ui/ui_local.h" +;14:#endif +;15: +;16:#ifndef UI_EXPORTS +;17:#ifndef QAGAME +;18:#include "../cgame/cg_local.h" +;19:#endif +;20:#endif +;21: +;22://rww - not putting @ in front of these because +;23://we don't need them in a cgame striped lookup. +;24://Let me know if this causes problems, pat. +;25:char *forceMasteryLevels[NUM_FORCE_MASTERY_LEVELS] = +;26:{ +;27: "MASTERY0", //"Uninitiated", // FORCE_MASTERY_UNINITIATED, +;28: "MASTERY1", //"Initiate", // FORCE_MASTERY_INITIATE, +;29: "MASTERY2", //"Padawan", // FORCE_MASTERY_PADAWAN, +;30: "MASTERY3", //"Jedi", // FORCE_MASTERY_JEDI, +;31: "MASTERY4", //"Jedi Adept", // FORCE_MASTERY_JEDI_GUARDIAN, +;32: "MASTERY5", //"Jedi Guardian", // FORCE_MASTERY_JEDI_ADEPT, +;33: "MASTERY6", //"Jedi Knight", // FORCE_MASTERY_JEDI_KNIGHT, +;34: "MASTERY7", //"Jedi Master" // FORCE_MASTERY_JEDI_MASTER, +;35:}; +;36: +;37:int forceMasteryPoints[NUM_FORCE_MASTERY_LEVELS] = +;38:{ +;39: 0, // FORCE_MASTERY_UNINITIATED, +;40: 5, // FORCE_MASTERY_INITIATE, +;41: 10, // FORCE_MASTERY_PADAWAN, +;42: 20, // FORCE_MASTERY_JEDI, +;43: 30, // FORCE_MASTERY_JEDI_GUARDIAN, +;44: 50, // FORCE_MASTERY_JEDI_ADEPT, +;45: 75, // FORCE_MASTERY_JEDI_KNIGHT, +;46: 100 // FORCE_MASTERY_JEDI_MASTER, +;47:}; +;48: +;49:int bgForcePowerCost[NUM_FORCE_POWERS][NUM_FORCE_POWER_LEVELS] = //0 == neutral +;50:{ +;51: { 0, 2, 4, 6 }, // Heal // FP_HEAL +;52: { 0, 0, 2, 6 }, // Jump //FP_LEVITATION,//hold/duration +;53: { 0, 2, 4, 6 }, // Speed //FP_SPEED,//duration +;54: { 0, 1, 3, 6 }, // Push //FP_PUSH,//hold/duration +;55: { 0, 1, 3, 6 }, // Pull //FP_PULL,//hold/duration +;56: { 0, 4, 6, 8 }, // Mind Trick //FP_TELEPATHY,//instant +;57: { 0, 1, 3, 6 }, // Grip //FP_GRIP,//hold/duration +;58: { 0, 2, 5, 8 }, // Lightning //FP_LIGHTNING,//hold/duration +;59: { 0, 4, 6, 8 }, // Dark Rage //FP_RAGE,//duration +;60: { 0, 2, 5, 8 }, // Protection //FP_PROTECT,//duration +;61: { 0, 1, 3, 6 }, // Absorb //FP_ABSORB,//duration +;62: { 0, 1, 3, 6 }, // Team Heal //FP_TEAM_HEAL,//instant +;63: { 0, 1, 3, 6 }, // Team Force //FP_TEAM_FORCE,//instant +;64: { 0, 2, 4, 6 }, // Drain //FP_DRAIN,//hold/duration +;65: { 0, 2, 5, 8 }, // Sight //FP_SEE,//duration +;66: { 0, 1, 5, 8 }, // Saber Attack //FP_SABERATTACK, +;67: { 0, 1, 5, 8 }, // Saber Defend //FP_SABERDEFEND, +;68: { 0, 4, 6, 8 } // Saber Throw //FP_SABERTHROW, +;69: //NUM_FORCE_POWERS +;70:}; +;71: +;72:int forcePowerSorted[NUM_FORCE_POWERS] = +;73:{ //rww - always use this order when drawing force powers for any reason +;74: FP_TELEPATHY, +;75: FP_HEAL, +;76: FP_ABSORB, +;77: FP_PROTECT, +;78: FP_TEAM_HEAL, +;79: FP_LEVITATION, +;80: FP_SPEED, +;81: FP_PUSH, +;82: FP_PULL, +;83: FP_SEE, +;84: FP_LIGHTNING, +;85: FP_DRAIN, +;86: FP_RAGE, +;87: FP_GRIP, +;88: FP_TEAM_FORCE, +;89: FP_SABERATTACK, +;90: FP_SABERDEFEND, +;91: FP_SABERTHROW +;92:}; +;93: +;94:int forcePowerDarkLight[NUM_FORCE_POWERS] = //0 == neutral +;95:{ //nothing should be usable at rank 0.. +;96: FORCE_LIGHTSIDE,//FP_HEAL,//instant +;97: 0,//FP_LEVITATION,//hold/duration +;98: 0,//FP_SPEED,//duration +;99: 0,//FP_PUSH,//hold/duration +;100: 0,//FP_PULL,//hold/duration +;101: FORCE_LIGHTSIDE,//FP_TELEPATHY,//instant +;102: FORCE_DARKSIDE,//FP_GRIP,//hold/duration +;103: FORCE_DARKSIDE,//FP_LIGHTNING,//hold/duration +;104: FORCE_DARKSIDE,//FP_RAGE,//duration +;105: FORCE_LIGHTSIDE,//FP_PROTECT,//duration +;106: FORCE_LIGHTSIDE,//FP_ABSORB,//duration +;107: FORCE_LIGHTSIDE,//FP_TEAM_HEAL,//instant +;108: FORCE_DARKSIDE,//FP_TEAM_FORCE,//instant +;109: FORCE_DARKSIDE,//FP_DRAIN,//hold/duration +;110: 0,//FP_SEE,//duration +;111: 0,//FP_SABERATTACK, +;112: 0,//FP_SABERDEFEND, +;113: 0//FP_SABERTHROW, +;114: //NUM_FORCE_POWERS +;115:}; +;116: +;117:int WeaponReadyAnim[WP_NUM_WEAPONS] = +;118:{ +;119: TORSO_DROPWEAP1,//WP_NONE, +;120: +;121: TORSO_WEAPONREADY3,//WP_STUN_BATON, +;122: BOTH_STAND2,//WP_SABER, +;123: TORSO_WEAPONREADY2,//WP_BRYAR_PISTOL, +;124: TORSO_WEAPONREADY3,//WP_BLASTER, +;125: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY4,//WP_DISRUPTOR, +;126: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY5,//WP_BOWCASTER, +;127: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY6,//WP_REPEATER, +;128: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY7,//WP_DEMP2, +;129: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY8,//WP_FLECHETTE, +;130: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY9,//WP_ROCKET_LAUNCHER, +;131: TORSO_WEAPONREADY10,//WP_THERMAL, +;132: TORSO_WEAPONREADY10,//TORSO_WEAPONREADY11,//WP_TRIP_MINE, +;133: TORSO_WEAPONREADY10,//TORSO_WEAPONREADY12,//WP_DET_PACK, +;134: +;135: //NOT VALID (e.g. should never really be used): +;136: BOTH_STAND1,//WP_EMPLACED_GUN, +;137: TORSO_WEAPONREADY1//WP_TURRET, +;138:}; +;139: +;140:int WeaponAttackAnim[WP_NUM_WEAPONS] = +;141:{ +;142: BOTH_ATTACK1,//WP_NONE, //(shouldn't happen) +;143: +;144: BOTH_ATTACK3,//WP_STUN_BATON, +;145: BOTH_STAND2,//WP_SABER, //(has its own handling) +;146: BOTH_ATTACK2,//WP_BRYAR_PISTOL, +;147: BOTH_ATTACK3,//WP_BLASTER, +;148: BOTH_ATTACK3,//BOTH_ATTACK4,//WP_DISRUPTOR, +;149: BOTH_ATTACK3,//BOTH_ATTACK5,//WP_BOWCASTER, +;150: BOTH_ATTACK3,//BOTH_ATTACK6,//WP_REPEATER, +;151: BOTH_ATTACK3,//BOTH_ATTACK7,//WP_DEMP2, +;152: BOTH_ATTACK3,//BOTH_ATTACK8,//WP_FLECHETTE, +;153: BOTH_ATTACK3,//BOTH_ATTACK9,//WP_ROCKET_LAUNCHER, +;154: BOTH_THERMAL_THROW,//WP_THERMAL, +;155: BOTH_ATTACK3,//BOTH_ATTACK11,//WP_TRIP_MINE, +;156: BOTH_ATTACK3,//BOTH_ATTACK12,//WP_DET_PACK, +;157: +;158: //NOT VALID (e.g. should never really be used): +;159: BOTH_STAND1,//WP_EMPLACED_GUN, +;160: BOTH_ATTACK1//WP_TURRET, +;161:}; +;162: +;163: +;164://The magical function to end all functions. +;165://This will take the force power string in powerOut and parse through it, then legalize +;166://it based on the supposed rank and spit it into powerOut, returning true if it was legal +;167://to begin with and false if not. +;168://fpDisabled is actually only expected (needed) from the server, because the ui disables +;169://force power selection anyway when force powers are disabled on the server. +;170:qboolean BG_LegalizedForcePowers(char *powerOut, int maxRank, qboolean freeSaber, int teamForce, int gametype, int fpDisabled) +;171:{ +line 174 +;172: char powerBuf[128]; +;173: char readBuf[128]; +;174: qboolean maintainsValidity = qtrue; +ADDRLP4 352 +CNSTI4 1 +ASGNI4 +line 175 +;175: int powerLen = strlen(powerOut); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 360 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 356 +ADDRLP4 360 +INDIRI4 +ASGNI4 +line 176 +;176: int i = 0; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +line 177 +;177: int c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 178 +;178: int allowedPoints = 0; +ADDRLP4 88 +CNSTI4 0 +ASGNI4 +line 179 +;179: int usedPoints = 0; +ADDRLP4 80 +CNSTI4 0 +ASGNI4 +line 180 +;180: int countDown = 0; +ADDRLP4 84 +CNSTI4 0 +ASGNI4 +line 185 +;181: +;182: int final_Side; +;183: int final_Powers[NUM_FORCE_POWERS]; +;184: +;185: if (powerLen >= 128) +ADDRLP4 356 +INDIRI4 +CNSTI4 128 +LTI4 $129 +line 186 +;186: { //This should not happen. If it does, this is obviously a bogus string. +line 188 +;187: //They can have this string. Because I said so. +;188: strcpy(powerBuf, "7-1-032330000000001333"); +ADDRLP4 92 +ARGP4 +ADDRGP4 $131 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 189 +;189: maintainsValidity = qfalse; +ADDRLP4 352 +CNSTI4 0 +ASGNI4 +line 190 +;190: } +ADDRGP4 $130 +JUMPV +LABELV $129 +line 192 +;191: else +;192: { +line 193 +;193: strcpy(powerBuf, powerOut); //copy it as the original +ADDRLP4 92 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 194 +;194: } +LABELV $130 +line 197 +;195: +;196: //first of all, print the max rank into the string as the rank +;197: strcpy(powerOut, va("%i-", maxRank)); +ADDRGP4 $132 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 364 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 364 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +ADDRGP4 $134 +JUMPV +LABELV $133 +line 200 +;198: +;199: while (i < 128 && powerBuf[i] && powerBuf[i] != '-') +;200: { +line 201 +;201: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 202 +;202: } +LABELV $134 +line 199 +ADDRLP4 76 +INDIRI4 +CNSTI4 128 +GEI4 $137 +ADDRLP4 372 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 372 +INDIRI4 +CNSTI4 0 +EQI4 $137 +ADDRLP4 372 +INDIRI4 +CNSTI4 45 +NEI4 $133 +LABELV $137 +line 203 +;203: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $139 +JUMPV +LABELV $138 +line 205 +;204: while (i < 128 && powerBuf[i] && powerBuf[i] != '-') +;205: { +line 206 +;206: readBuf[c] = powerBuf[i]; +ADDRLP4 0 +INDIRI4 +ADDRLP4 220 +ADDP4 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +ASGNI1 +line 207 +;207: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 208 +;208: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 209 +;209: } +LABELV $139 +line 204 +ADDRLP4 76 +INDIRI4 +CNSTI4 128 +GEI4 $142 +ADDRLP4 380 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 380 +INDIRI4 +CNSTI4 0 +EQI4 $142 +ADDRLP4 380 +INDIRI4 +CNSTI4 45 +NEI4 $138 +LABELV $142 +line 210 +;210: readBuf[c] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 220 +ADDP4 +CNSTI1 0 +ASGNI1 +line 211 +;211: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 213 +;212: //at this point, readBuf contains the intended side +;213: final_Side = atoi(readBuf); +ADDRLP4 220 +ARGP4 +ADDRLP4 384 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 348 +ADDRLP4 384 +INDIRI4 +ASGNI4 +line 215 +;214: +;215: if (final_Side != FORCE_LIGHTSIDE && +ADDRLP4 348 +INDIRI4 +CNSTI4 1 +EQI4 $143 +ADDRLP4 348 +INDIRI4 +CNSTI4 2 +EQI4 $143 +line 217 +;216: final_Side != FORCE_DARKSIDE) +;217: { //Not a valid side. You will be dark. Because I said so. (this is something that should never actually happen unless you purposely feed in an invalid config) +line 218 +;218: final_Side = FORCE_DARKSIDE; +ADDRLP4 348 +CNSTI4 2 +ASGNI4 +line 219 +;219: maintainsValidity = qfalse; +ADDRLP4 352 +CNSTI4 0 +ASGNI4 +line 220 +;220: } +LABELV $143 +line 222 +;221: +;222: if (teamForce) +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $145 +line 223 +;223: { //If we are under force-aligned teams, make sure we're on the right side. +line 224 +;224: if (final_Side != teamForce) +ADDRLP4 348 +INDIRI4 +ADDRFP4 12 +INDIRI4 +EQI4 $147 +line 225 +;225: { +line 226 +;226: final_Side = teamForce; +ADDRLP4 348 +ADDRFP4 12 +INDIRI4 +ASGNI4 +line 229 +;227: //maintainsValidity = qfalse; +;228: //Not doing this, for now. Let them join the team with their filtered powers. +;229: } +LABELV $147 +line 230 +;230: } +LABELV $145 +line 234 +;231: +;232: //Now we have established a valid rank, and a valid side. +;233: //Read the force powers in, and cut them down based on the various rules supplied. +;234: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $150 +JUMPV +LABELV $149 +line 236 +;235: while (i < 128 && powerBuf[i] && powerBuf[i] != '\n' && c < NUM_FORCE_POWERS) +;236: { +line 237 +;237: readBuf[0] = powerBuf[i]; +ADDRLP4 220 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +ASGNI1 +line 238 +;238: readBuf[1] = 0; +ADDRLP4 220+1 +CNSTI1 0 +ASGNI1 +line 239 +;239: final_Powers[c] = atoi(readBuf); +ADDRLP4 220 +ARGP4 +ADDRLP4 392 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +ADDRLP4 392 +INDIRI4 +ASGNI4 +line 240 +;240: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 241 +;241: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 242 +;242: } +LABELV $150 +line 235 +ADDRLP4 76 +INDIRI4 +CNSTI4 128 +GEI4 $155 +ADDRLP4 396 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 396 +INDIRI4 +CNSTI4 0 +EQI4 $155 +ADDRLP4 396 +INDIRI4 +CNSTI4 10 +EQI4 $155 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $149 +LABELV $155 +line 246 +;243: +;244: //final_Powers now contains all the stuff from the string +;245: //Set the maximum allowed points used based on the max rank level, and count the points actually used. +;246: allowedPoints = forceMasteryPoints[maxRank]; +ADDRLP4 88 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forceMasteryPoints +ADDP4 +INDIRI4 +ASGNI4 +line 248 +;247: +;248: i = 0; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRGP4 $157 +JUMPV +LABELV $156 +line 250 +;249: while (i < NUM_FORCE_POWERS) +;250: { //if this power doesn't match the side we're on, then 0 it now. +line 251 +;251: if (final_Powers[i] && +ADDRLP4 400 +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 404 +CNSTI4 0 +ASGNI4 +ADDRLP4 400 +INDIRI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 404 +INDIRI4 +EQI4 $159 +ADDRLP4 408 +ADDRLP4 400 +INDIRI4 +ADDRGP4 forcePowerDarkLight +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 408 +INDIRI4 +ADDRLP4 404 +INDIRI4 +EQI4 $159 +ADDRLP4 408 +INDIRI4 +ADDRLP4 348 +INDIRI4 +EQI4 $159 +line 254 +;252: forcePowerDarkLight[i] && +;253: forcePowerDarkLight[i] != final_Side) +;254: { +line 255 +;255: final_Powers[i] = 0; +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 258 +;256: //This is only likely to happen with g_forceBasedTeams. Let it slide. +;257: //maintainsValidity = 0; +;258: } +LABELV $159 +line 260 +;259: +;260: if ( final_Powers[i] && +ADDRLP4 416 +CNSTI4 0 +ASGNI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 416 +INDIRI4 +EQI4 $161 +ADDRFP4 20 +INDIRI4 +CNSTI4 1 +ADDRLP4 76 +INDIRI4 +LSHI4 +BANDI4 +ADDRLP4 416 +INDIRI4 +EQI4 $161 +line 262 +;261: (fpDisabled & (1 << i)) ) +;262: { //if this power is disabled on the server via said server option, then we don't get it. +line 263 +;263: final_Powers[i] = 0; +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 264 +;264: } +LABELV $161 +line 266 +;265: +;266: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 267 +;267: } +LABELV $157 +line 249 +ADDRLP4 76 +INDIRI4 +CNSTI4 18 +LTI4 $156 +line 269 +;268: +;269: if (gametype < GT_TEAM) +ADDRFP4 16 +INDIRI4 +CNSTI4 5 +GEI4 $163 +line 270 +;270: { //don't bother with team powers then +line 271 +;271: final_Powers[FP_TEAM_HEAL] = 0; +ADDRLP4 4+44 +CNSTI4 0 +ASGNI4 +line 272 +;272: final_Powers[FP_TEAM_FORCE] = 0; +ADDRLP4 4+48 +CNSTI4 0 +ASGNI4 +line 273 +;273: } +LABELV $163 +line 275 +;274: +;275: usedPoints = 0; +ADDRLP4 80 +CNSTI4 0 +ASGNI4 +line 276 +;276: i = 0; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRGP4 $168 +JUMPV +LABELV $167 +line 278 +;277: while (i < NUM_FORCE_POWERS) +;278: { +line 279 +;279: countDown = 0; +ADDRLP4 84 +CNSTI4 0 +ASGNI4 +line 281 +;280: +;281: countDown = final_Powers[i]; +ADDRLP4 84 +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRGP4 $171 +JUMPV +LABELV $170 +line 284 +;282: +;283: while (countDown > 0) +;284: { +line 285 +;285: usedPoints += bgForcePowerCost[i][countDown]; //[fp index][fp level] +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 287 +;286: //if this is jump, or we have a free saber and it's offense or defense, take the level back down on level 1 +;287: if ( countDown == 1 && +ADDRLP4 400 +CNSTI4 1 +ASGNI4 +ADDRLP4 84 +INDIRI4 +ADDRLP4 400 +INDIRI4 +NEI4 $173 +ADDRLP4 76 +INDIRI4 +ADDRLP4 400 +INDIRI4 +EQI4 $176 +ADDRLP4 76 +INDIRI4 +CNSTI4 15 +NEI4 $177 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $176 +LABELV $177 +ADDRLP4 76 +INDIRI4 +CNSTI4 16 +NEI4 $173 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $173 +LABELV $176 +line 291 +;288: ((i == FP_LEVITATION) || +;289: (i == FP_SABERATTACK && freeSaber) || +;290: (i == FP_SABERDEFEND && freeSaber)) ) +;291: { +line 292 +;292: usedPoints -= bgForcePowerCost[i][countDown]; +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 293 +;293: } +LABELV $173 +line 294 +;294: countDown--; +ADDRLP4 84 +ADDRLP4 84 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 295 +;295: } +LABELV $171 +line 283 +ADDRLP4 84 +INDIRI4 +CNSTI4 0 +GTI4 $170 +line 297 +;296: +;297: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 298 +;298: } +LABELV $168 +line 277 +ADDRLP4 76 +INDIRI4 +CNSTI4 18 +LTI4 $167 +line 300 +;299: +;300: if (usedPoints > allowedPoints) +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +LEI4 $178 +line 301 +;301: { //Time to do the fancy stuff. (meaning, slowly cut parts off while taking a guess at what is most or least important in the config) +line 302 +;302: int attemptedCycles = 0; +ADDRLP4 408 +CNSTI4 0 +ASGNI4 +line 303 +;303: int powerCycle = 2; +ADDRLP4 400 +CNSTI4 2 +ASGNI4 +line 304 +;304: int minPow = 0; +ADDRLP4 404 +CNSTI4 0 +ASGNI4 +line 306 +;305: +;306: if (freeSaber) +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $180 +line 307 +;307: { +line 308 +;308: minPow = 1; +ADDRLP4 404 +CNSTI4 1 +ASGNI4 +line 309 +;309: } +LABELV $180 +line 311 +;310: +;311: maintainsValidity = qfalse; +ADDRLP4 352 +CNSTI4 0 +ASGNI4 +ADDRGP4 $183 +JUMPV +LABELV $182 +line 314 +;312: +;313: while (usedPoints > allowedPoints) +;314: { +line 315 +;315: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $186 +JUMPV +LABELV $185 +line 318 +;316: +;317: while (c < NUM_FORCE_POWERS && usedPoints > allowedPoints) +;318: { +line 319 +;319: if (final_Powers[c] && final_Powers[c] < powerCycle) +ADDRLP4 412 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 412 +INDIRI4 +CNSTI4 0 +EQI4 $188 +ADDRLP4 412 +INDIRI4 +ADDRLP4 400 +INDIRI4 +GEI4 $188 +line 320 +;320: { //kill in order of lowest powers, because the higher powers are probably more important +line 321 +;321: if (c == FP_SABERATTACK && +ADDRLP4 0 +INDIRI4 +CNSTI4 15 +NEI4 $207 +ADDRLP4 4+64 +INDIRI4 +ADDRLP4 404 +INDIRI4 +GTI4 $194 +ADDRLP4 4+68 +INDIRI4 +CNSTI4 0 +LEI4 $207 +LABELV $194 +line 323 +;322: (final_Powers[FP_SABERDEFEND] > minPow || final_Powers[FP_SABERTHROW] > 0)) +;323: { //if we're on saber attack, only suck it down if we have no def or throw either +line 324 +;324: int whichOne = FP_SABERTHROW; //first try throw +ADDRLP4 416 +CNSTI4 17 +ASGNI4 +line 326 +;325: +;326: if (!final_Powers[whichOne]) +ADDRLP4 416 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $198 +line 327 +;327: { +line 328 +;328: whichOne = FP_SABERDEFEND; //if no throw, drain defense +ADDRLP4 416 +CNSTI4 16 +ASGNI4 +line 329 +;329: } +ADDRGP4 $198 +JUMPV +LABELV $197 +line 332 +;330: +;331: while (final_Powers[whichOne] > 0 && usedPoints > allowedPoints) +;332: { +line 333 +;333: if ( final_Powers[whichOne] > 1 || +ADDRLP4 416 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +CNSTI4 1 +GTI4 $204 +ADDRLP4 416 +INDIRI4 +CNSTI4 15 +NEI4 $203 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $191 +LABELV $203 +ADDRLP4 416 +INDIRI4 +CNSTI4 16 +NEI4 $204 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $191 +LABELV $204 +line 336 +;334: ( (whichOne != FP_SABERATTACK || !freeSaber) && +;335: (whichOne != FP_SABERDEFEND || !freeSaber) ) ) +;336: { //don't take attack or defend down on level 1 still, if it's free +line 337 +;337: usedPoints -= bgForcePowerCost[whichOne][final_Powers[whichOne]]; +ADDRLP4 428 +CNSTI4 2 +ASGNI4 +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +ADDRLP4 416 +INDIRI4 +ADDRLP4 428 +INDIRI4 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 428 +INDIRI4 +LSHI4 +ADDRLP4 416 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 338 +;338: final_Powers[whichOne]--; +ADDRLP4 432 +ADDRLP4 416 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +ASGNP4 +ADDRLP4 432 +INDIRP4 +ADDRLP4 432 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 339 +;339: } +line 341 +;340: else +;341: { +line 342 +;342: break; +LABELV $201 +line 344 +;343: } +;344: } +LABELV $198 +line 331 +ADDRLP4 416 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $205 +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GTI4 $197 +LABELV $205 +line 345 +;345: } +ADDRGP4 $191 +JUMPV +line 347 +;346: else +;347: { +LABELV $206 +line 349 +;348: while (final_Powers[c] > 0 && usedPoints > allowedPoints) +;349: { +line 350 +;350: if ( final_Powers[c] > 1 || +ADDRLP4 420 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 420 +INDIRI4 +GTI4 $213 +ADDRLP4 0 +INDIRI4 +ADDRLP4 420 +INDIRI4 +EQI4 $208 +ADDRLP4 0 +INDIRI4 +CNSTI4 15 +NEI4 $212 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $208 +LABELV $212 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +NEI4 $213 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $208 +LABELV $213 +line 354 +;351: ((c != FP_LEVITATION) && +;352: (c != FP_SABERATTACK || !freeSaber) && +;353: (c != FP_SABERDEFEND || !freeSaber)) ) +;354: { +line 355 +;355: usedPoints -= bgForcePowerCost[c][final_Powers[c]]; +ADDRLP4 428 +CNSTI4 2 +ASGNI4 +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 428 +INDIRI4 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 428 +INDIRI4 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 356 +;356: final_Powers[c]--; +ADDRLP4 432 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +ASGNP4 +ADDRLP4 432 +INDIRP4 +ADDRLP4 432 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 357 +;357: } +line 359 +;358: else +;359: { +line 360 +;360: break; +LABELV $210 +line 362 +;361: } +;362: } +LABELV $207 +line 348 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $214 +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GTI4 $206 +LABELV $214 +LABELV $208 +line 363 +;363: } +LABELV $191 +line 364 +;364: } +LABELV $188 +line 366 +;365: +;366: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 367 +;367: } +LABELV $186 +line 317 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +GEI4 $215 +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GTI4 $185 +LABELV $215 +line 369 +;368: +;369: powerCycle++; +ADDRLP4 400 +ADDRLP4 400 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 370 +;370: attemptedCycles++; +ADDRLP4 408 +ADDRLP4 408 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 372 +;371: +;372: if (attemptedCycles > NUM_FORCE_POWERS) +ADDRLP4 408 +INDIRI4 +CNSTI4 18 +LEI4 $216 +line 373 +;373: { //I think this should be impossible. But just in case. +line 374 +;374: break; +ADDRGP4 $184 +JUMPV +LABELV $216 +line 376 +;375: } +;376: } +LABELV $183 +line 313 +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GTI4 $182 +LABELV $184 +line 378 +;377: +;378: if (usedPoints > allowedPoints) +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +LEI4 $218 +line 379 +;379: { //Still? Fine then.. we will kill all of your powers, except the freebies. +line 380 +;380: i = 0; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRGP4 $221 +JUMPV +LABELV $220 +line 383 +;381: +;382: while (i < NUM_FORCE_POWERS) +;383: { +line 384 +;384: final_Powers[i] = 0; +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 385 +;385: if (i == FP_LEVITATION || +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +EQI4 $226 +ADDRLP4 76 +INDIRI4 +CNSTI4 15 +NEI4 $227 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $226 +LABELV $227 +ADDRLP4 76 +INDIRI4 +CNSTI4 16 +NEI4 $223 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $223 +LABELV $226 +line 388 +;386: (i == FP_SABERATTACK && freeSaber) || +;387: (i == FP_SABERDEFEND && freeSaber)) +;388: { +line 389 +;389: final_Powers[i] = 1; +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +CNSTI4 1 +ASGNI4 +line 390 +;390: } +LABELV $223 +line 391 +;391: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 392 +;392: } +LABELV $221 +line 382 +ADDRLP4 76 +INDIRI4 +CNSTI4 18 +LTI4 $220 +line 393 +;393: usedPoints = 0; +ADDRLP4 80 +CNSTI4 0 +ASGNI4 +line 394 +;394: } +LABELV $218 +line 395 +;395: } +LABELV $178 +line 397 +;396: +;397: if (final_Powers[FP_SABERATTACK] < 1) +ADDRLP4 4+60 +INDIRI4 +CNSTI4 1 +GEI4 $228 +line 398 +;398: { +line 399 +;399: final_Powers[FP_SABERDEFEND] = 0; +ADDRLP4 4+64 +CNSTI4 0 +ASGNI4 +line 400 +;400: final_Powers[FP_SABERTHROW] = 0; +ADDRLP4 4+68 +CNSTI4 0 +ASGNI4 +line 401 +;401: } +LABELV $228 +line 403 +;402: +;403: if (freeSaber) +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $233 +line 404 +;404: { +line 405 +;405: if (final_Powers[FP_SABERATTACK] < 1) +ADDRLP4 4+60 +INDIRI4 +CNSTI4 1 +GEI4 $235 +line 406 +;406: { +line 407 +;407: final_Powers[FP_SABERATTACK] = 1; +ADDRLP4 4+60 +CNSTI4 1 +ASGNI4 +line 408 +;408: } +LABELV $235 +line 409 +;409: if (final_Powers[FP_SABERDEFEND] < 1) +ADDRLP4 4+64 +INDIRI4 +CNSTI4 1 +GEI4 $239 +line 410 +;410: { +line 411 +;411: final_Powers[FP_SABERDEFEND] = 1; +ADDRLP4 4+64 +CNSTI4 1 +ASGNI4 +line 412 +;412: } +LABELV $239 +line 413 +;413: } +LABELV $233 +line 414 +;414: if (final_Powers[FP_LEVITATION] < 1) +ADDRLP4 4+4 +INDIRI4 +CNSTI4 1 +GEI4 $243 +line 415 +;415: { +line 416 +;416: final_Powers[FP_LEVITATION] = 1; +ADDRLP4 4+4 +CNSTI4 1 +ASGNI4 +line 417 +;417: } +LABELV $243 +line 419 +;418: +;419: if (fpDisabled) +ADDRFP4 20 +INDIRI4 +CNSTI4 0 +EQI4 $247 +line 420 +;420: { +line 421 +;421: final_Powers[FP_LEVITATION] = 1; +ADDRLP4 4+4 +CNSTI4 1 +ASGNI4 +line 422 +;422: final_Powers[FP_SABERATTACK] = 3; +ADDRLP4 4+60 +CNSTI4 3 +ASGNI4 +line 423 +;423: final_Powers[FP_SABERDEFEND] = 3; +ADDRLP4 4+64 +CNSTI4 3 +ASGNI4 +line 424 +;424: final_Powers[FP_SABERTHROW] = 0; +ADDRLP4 4+68 +CNSTI4 0 +ASGNI4 +line 425 +;425: } +LABELV $247 +line 430 +;426: +;427: //We finally have all the force powers legalized and stored locally. +;428: //Put them all into the string and return the result. We already have +;429: //the rank there, so print the side and the powers now. +;430: Q_strcat(powerOut, 128, va("%i-", final_Side)); +ADDRGP4 $132 +ARGP4 +ADDRLP4 348 +INDIRI4 +ARGI4 +ADDRLP4 400 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 128 +ARGI4 +ADDRLP4 400 +INDIRP4 +ARGP4 +ADDRGP4 Q_strcat +CALLV +pop +line 432 +;431: +;432: i = strlen(powerOut); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 404 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 76 +ADDRLP4 404 +INDIRI4 +ASGNI4 +line 433 +;433: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $254 +JUMPV +LABELV $253 +line 435 +;434: while (c < NUM_FORCE_POWERS) +;435: { +line 436 +;436: strcpy(readBuf, va("%i", final_Powers[c])); +ADDRGP4 $256 +ARGP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 408 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 220 +ARGP4 +ADDRLP4 408 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 437 +;437: powerOut[i] = readBuf[0]; +ADDRLP4 76 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ADDRLP4 220 +INDIRI1 +ASGNI1 +line 438 +;438: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 439 +;439: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 440 +;440: } +LABELV $254 +line 434 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $253 +line 441 +;441: powerOut[i] = 0; +ADDRLP4 76 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 443 +;442: +;443: return maintainsValidity; +ADDRLP4 352 +INDIRI4 +RETI4 +LABELV $128 +endproc BG_LegalizedForcePowers 436 12 +data +export bg_itemlist +align 4 +LABELV bg_itemlist +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $257 +address $257 +address $258 +address $259 +address $260 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $261 +byte 4 25 +byte 4 3 +byte 4 1 +address $257 +address $257 +address $262 +address $259 +address $263 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $264 +byte 4 100 +byte 4 3 +byte 4 2 +address $257 +address $257 +address $265 +address $266 +address $267 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $268 +byte 4 25 +byte 4 4 +byte 4 0 +address $257 +address $257 +address $269 +address $270 +address $271 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $272 +byte 4 120 +byte 4 6 +byte 4 1 +address $257 +address $257 +address $273 +address $270 +address $274 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $275 +byte 4 120 +byte 4 6 +byte 4 2 +address $257 +address $276 +address $277 +address $270 +address $278 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $279 +byte 4 25 +byte 4 6 +byte 4 3 +address $257 +address $257 +address $280 +address $270 +address $281 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1 +byte 4 6 +byte 4 4 +address $257 +address $257 +address $282 +address $270 +address $283 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $284 +byte 4 60 +byte 4 6 +byte 4 5 +address $257 +address $257 +address $285 +address $270 +address $286 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $287 +byte 4 120 +byte 4 6 +byte 4 6 +address $257 +address $257 +address $288 +address $289 +address $290 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $291 +byte 4 25 +byte 4 5 +byte 4 12 +address $257 +address $257 +address $292 +address $289 +address $293 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $294 +byte 4 25 +byte 4 5 +byte 4 13 +address $257 +address $257 +address $295 +address $296 +address $297 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $298 +byte 4 25 +byte 4 5 +byte 4 14 +address $257 +address $257 +address $299 +address $300 +address $301 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $302 +byte 4 25 +byte 4 5 +byte 4 15 +address $257 +address $257 +address $303 +address $270 +address $304 +byte 4 0 +byte 4 0 +byte 4 0 +address $305 +address $306 +byte 4 100 +byte 4 1 +byte 4 1 +address $257 +address $257 +address $307 +address $270 +address $308 +byte 4 0 +byte 4 0 +byte 4 0 +address $309 +address $310 +byte 4 100 +byte 4 1 +byte 4 2 +address $257 +address $257 +address $311 +address $270 +address $312 +byte 4 0 +byte 4 0 +byte 4 0 +address $313 +address $314 +byte 4 100 +byte 4 1 +byte 4 3 +address $257 +address $257 +address $315 +address $270 +address $316 +byte 4 0 +byte 4 0 +byte 4 0 +address $317 +address $318 +byte 4 100 +byte 4 1 +byte 4 4 +address $257 +address $257 +address $319 +address $270 +address $320 +byte 4 0 +byte 4 0 +byte 4 0 +address $321 +address $322 +byte 4 100 +byte 4 1 +byte 4 5 +address $257 +address $257 +address $323 +address $270 +address $324 +byte 4 0 +byte 4 0 +byte 4 0 +address $325 +address $326 +byte 4 100 +byte 4 1 +byte 4 6 +address $257 +address $257 +address $327 +address $270 +address $328 +byte 4 0 +byte 4 0 +byte 4 0 +address $329 +address $330 +byte 4 100 +byte 4 1 +byte 4 7 +address $257 +address $257 +address $331 +address $270 +address $332 +byte 4 0 +byte 4 0 +byte 4 0 +address $333 +address $334 +byte 4 100 +byte 4 1 +byte 4 8 +address $257 +address $257 +address $335 +address $270 +address $336 +byte 4 0 +byte 4 0 +byte 4 0 +address $337 +address $338 +byte 4 100 +byte 4 1 +byte 4 9 +address $257 +address $257 +address $339 +address $270 +address $340 +byte 4 0 +byte 4 0 +byte 4 0 +address $341 +address $342 +byte 4 3 +byte 4 1 +byte 4 10 +address $257 +address $257 +address $343 +address $270 +address $344 +address $345 +byte 4 0 +byte 4 0 +address $346 +address $347 +byte 4 4 +byte 4 2 +byte 4 7 +address $257 +address $257 +address $348 +address $270 +address $349 +address $350 +byte 4 0 +byte 4 0 +address $351 +address $352 +byte 4 3 +byte 4 2 +byte 4 8 +address $257 +address $257 +address $353 +address $270 +address $354 +address $355 +address $356 +byte 4 0 +address $357 +address $358 +byte 4 3 +byte 4 2 +byte 4 9 +address $257 +address $257 +address $359 +address $270 +address $345 +address $344 +byte 4 0 +byte 4 0 +address $346 +address $347 +byte 4 4 +byte 4 1 +byte 4 11 +address $257 +address $257 +address $360 +address $270 +address $350 +address $349 +byte 4 0 +byte 4 0 +address $351 +address $352 +byte 4 3 +byte 4 1 +byte 4 12 +address $257 +address $257 +address $361 +address $270 +address $355 +address $354 +address $356 +byte 4 0 +address $357 +address $358 +byte 4 3 +byte 4 1 +byte 4 13 +address $257 +address $257 +address $362 +address $270 +address $316 +byte 4 0 +byte 4 0 +byte 4 0 +address $317 +address $318 +byte 4 50 +byte 4 1 +byte 4 14 +address $257 +address $257 +address $363 +address $270 +address $316 +byte 4 0 +byte 4 0 +byte 4 0 +address $317 +address $318 +byte 4 50 +byte 4 1 +byte 4 15 +address $257 +address $257 +address $364 +address $365 +address $366 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $318 +byte 4 100 +byte 4 2 +byte 4 1 +address $257 +address $257 +address $367 +address $365 +address $366 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $368 +byte 4 100 +byte 4 2 +byte 4 2 +address $257 +address $257 +address $369 +address $365 +address $370 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $371 +byte 4 100 +byte 4 2 +byte 4 3 +address $257 +address $257 +address $372 +address $365 +address $373 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $374 +byte 4 100 +byte 4 2 +byte 4 4 +address $257 +address $257 +address $375 +address $365 +address $376 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $377 +byte 4 3 +byte 4 2 +byte 4 5 +address $257 +address $257 +address $378 +byte 4 0 +address $379 +address $380 +byte 4 0 +byte 4 0 +byte 4 0 +address $381 +byte 4 0 +byte 4 8 +byte 4 4 +address $257 +address $257 +address $382 +byte 4 0 +address $383 +address $384 +byte 4 0 +byte 4 0 +byte 4 0 +address $385 +byte 4 0 +byte 4 8 +byte 4 5 +address $257 +address $257 +address $386 +byte 4 0 +address $387 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $388 +byte 4 0 +byte 4 8 +byte 4 6 +address $257 +address $257 +address $389 +address $365 +address $390 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $391 +byte 4 0 +byte 4 8 +byte 4 0 +address $257 +address $257 +address $392 +address $365 +address $393 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $394 +byte 4 0 +byte 4 8 +byte 4 0 +address $257 +address $257 +byte 4 0 +skip 48 +export bg_numItems +align 4 +LABELV bg_numItems +byte 4 42 +export vectoyaw +code +proc vectoyaw 20 8 +line 1235 +;444:} +;445: +;446:/*QUAKED item_***** ( 0 0 0 ) (-16 -16 -16) (16 16 16) suspended +;447:DO NOT USE THIS CLASS, IT JUST HOLDS GENERAL INFORMATION. +;448:The suspended flag will allow items to hang in the air, otherwise they are dropped to the next surface. +;449: +;450:If an item is the target of another entity, it will not spawn in until fired. +;451: +;452:An item fires all of its targets when it is picked up. If the toucher can't carry it, the targets won't be fired. +;453: +;454:"notfree" if set to 1, don't spawn in free for all games +;455:"notteam" if set to 1, don't spawn in team games +;456:"notsingle" if set to 1, don't spawn in single player games +;457:"wait" override the default wait before respawning. -1 = never respawn automatically, which can be used with targeted spawning. +;458:"random" random number of plus or minus seconds varied from the respawn time +;459:"count" override quantity or duration on most items. +;460:*/ +;461: +;462:/*QUAKED misc_shield_floor_unit (1 0 0) (-16 -16 0) (16 16 40) +;463:#MODELNAME="/models/items/a_shield_converter.md3" +;464:Gives shield energy when used. +;465: +;466:"count" - max charge value (default 50) +;467:"chargerate" - rechage 1 point every this many milliseconds (default 3000) +;468:*/ +;469: +;470:gitem_t bg_itemlist[] = +;471:{ +;472: { +;473: NULL, // classname +;474: NULL, // pickup_sound +;475: { NULL, // world_model[0] +;476: NULL, // world_model[1] +;477: 0, 0} , // world_model[2],[3] +;478: NULL, // view_model +;479:/* icon */ NULL, // icon +;480:/* pickup */ //NULL, // pickup_name +;481: 0, // quantity +;482: 0, // giType (IT_*) +;483: 0, // giTag +;484:/* precache */ "", // precaches +;485:/* sounds */ "" // sounds +;486: }, // leave index 0 alone +;487: +;488: // +;489: // Pickups +;490: // +;491: +;492:/*QUAKED item_shield_sm_instant (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;493:Instant shield pickup, restores 25 +;494:*/ +;495: { +;496: "item_shield_sm_instant", +;497: "sound/player/pickupshield.wav", +;498: { "models/map_objects/mp/psd_sm.md3", +;499: 0, 0, 0}, +;500:/* view */ NULL, +;501:/* icon */ "gfx/mp/small_shield", +;502:/* pickup */// "Shield Small", +;503: 25, +;504: IT_ARMOR, +;505: 1, //special for shield - max on pickup is maxhealth*tag, thus small shield goes up to 100 shield +;506:/* precache */ "", +;507:/* sounds */ "" +;508: }, +;509: +;510:/*QUAKED item_shield_lrg_instant (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;511:Instant shield pickup, restores 100 +;512:*/ +;513: { +;514: "item_shield_lrg_instant", +;515: "sound/player/pickupshield.wav", +;516: { "models/map_objects/mp/psd.md3", +;517: 0, 0, 0}, +;518:/* view */ NULL, +;519:/* icon */ "gfx/mp/large_shield", +;520:/* pickup */// "Shield Large", +;521: 100, +;522: IT_ARMOR, +;523: 2, //special for shield - max on pickup is maxhealth*tag, thus large shield goes up to 200 shield +;524:/* precache */ "", +;525:/* sounds */ "" +;526: }, +;527: +;528:/*QUAKED item_medpak_instant (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;529:Instant medpack pickup, heals 25 +;530:*/ +;531: { +;532: "item_medpak_instant", +;533: "sound/player/pickuphealth.wav", +;534: { "models/map_objects/mp/medpac.md3", +;535: 0, 0, 0 }, +;536:/* view */ NULL, +;537:/* icon */ "gfx/hud/i_icon_medkit", +;538:/* pickup */// "Medpack", +;539: 25, +;540: IT_HEALTH, +;541: 0, +;542:/* precache */ "", +;543:/* sounds */ "" +;544: }, +;545: +;546: +;547: // +;548: // ITEMS +;549: // +;550: +;551:/*QUAKED item_seeker (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;552:30 seconds of seeker drone +;553:*/ +;554: { +;555: "item_seeker", +;556: "sound/weapons/w_pkup.wav", +;557: { "models/items/remote.md3", +;558: 0, 0, 0} , +;559:/* view */ NULL, +;560:/* icon */ "gfx/hud/i_icon_seeker", +;561:/* pickup */// "Seeker Drone", +;562: 120, +;563: IT_HOLDABLE, +;564: HI_SEEKER, +;565:/* precache */ "", +;566:/* sounds */ "" +;567: }, +;568: +;569:/*QUAKED item_shield (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;570:Portable shield +;571:*/ +;572: { +;573: "item_shield", +;574: "sound/weapons/w_pkup.wav", +;575: { "models/map_objects/mp/shield.md3", +;576: 0, 0, 0} , +;577:/* view */ NULL, +;578:/* icon */ "gfx/hud/i_icon_shieldwall", +;579:/* pickup */// "Forcefield", +;580: 120, +;581: IT_HOLDABLE, +;582: HI_SHIELD, +;583:/* precache */ "", +;584:/* sounds */ "sound/weapons/detpack/stick.wav sound/movers/doors/forcefield_on.wav sound/movers/doors/forcefield_off.wav sound/movers/doors/forcefield_lp.wav sound/effects/bumpfield.wav", +;585: }, +;586: +;587:/*QUAKED item_medpac (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;588:Bacta canister pickup, heals 25 on use +;589:*/ +;590: { +;591: "item_medpac", //should be item_bacta +;592: "sound/weapons/w_pkup.wav", +;593: { "models/map_objects/mp/bacta.md3", +;594: 0, 0, 0} , +;595:/* view */ NULL, +;596:/* icon */ "gfx/hud/i_icon_bacta", +;597:/* pickup */// "Bacta Canister", +;598: 25, +;599: IT_HOLDABLE, +;600: HI_MEDPAC, +;601:/* precache */ "", +;602:/* sounds */ "" +;603: }, +;604: +;605:/*QUAKED item_datapad (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;606:Do not place this. +;607:*/ +;608: { +;609: "item_datapad", +;610: "sound/weapons/w_pkup.wav", +;611: { "models/items/datapad.md3", +;612: 0, 0, 0} , +;613:/* view */ NULL, +;614:/* icon */ NULL, +;615:/* pickup */// "Datapad", +;616: 1, +;617: IT_HOLDABLE, +;618: HI_DATAPAD, +;619:/* precache */ "", +;620:/* sounds */ "" +;621: }, +;622: +;623:/*QUAKED item_binoculars (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;624:These will be standard equipment on the player - DO NOT PLACE +;625:*/ +;626: { +;627: "item_binoculars", +;628: "sound/weapons/w_pkup.wav", +;629: { "models/items/binoculars.md3", +;630: 0, 0, 0} , +;631:/* view */ NULL, +;632:/* icon */ "gfx/hud/i_icon_zoom", +;633:/* pickup */// "Binoculars", +;634: 60, +;635: IT_HOLDABLE, +;636: HI_BINOCULARS, +;637:/* precache */ "", +;638:/* sounds */ "" +;639: }, +;640: +;641:/*QUAKED item_sentry_gun (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;642:Sentry gun inventory pickup. +;643:*/ +;644: { +;645: "item_sentry_gun", +;646: "sound/weapons/w_pkup.wav", +;647: { "models/items/psgun.glm", +;648: 0, 0, 0} , +;649:/* view */ NULL, +;650:/* icon */ "gfx/hud/i_icon_sentrygun", +;651:/* pickup */// "Sentry Gun", +;652: 120, +;653: IT_HOLDABLE, +;654: HI_SENTRY_GUN, +;655:/* precache */ "", +;656:/* sounds */ "" +;657: }, +;658: +;659:/*QUAKED item_force_enlighten_light (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;660:Adds one rank to all Force powers temporarily. Only light jedi can use. +;661:*/ +;662: { +;663: "item_force_enlighten_light", +;664: "sound/player/enlightenment.wav", +;665: { "models/map_objects/mp/jedi_enlightenment.md3", +;666: 0, 0, 0} , +;667:/* view */ NULL, +;668:/* icon */ "gfx/hud/mpi_jlight", +;669:/* pickup */// "Light Force Enlightenment", +;670: 25, +;671: IT_POWERUP, +;672: PW_FORCE_ENLIGHTENED_LIGHT, +;673:/* precache */ "", +;674:/* sounds */ "" +;675: }, +;676: +;677:/*QUAKED item_force_enlighten_dark (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;678:Adds one rank to all Force powers temporarily. Only dark jedi can use. +;679:*/ +;680: { +;681: "item_force_enlighten_dark", +;682: "sound/player/enlightenment.wav", +;683: { "models/map_objects/mp/dk_enlightenment.md3", +;684: 0, 0, 0} , +;685:/* view */ NULL, +;686:/* icon */ "gfx/hud/mpi_dklight", +;687:/* pickup */// "Dark Force Enlightenment", +;688: 25, +;689: IT_POWERUP, +;690: PW_FORCE_ENLIGHTENED_DARK, +;691:/* precache */ "", +;692:/* sounds */ "" +;693: }, +;694: +;695:/*QUAKED item_force_boon (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;696:Unlimited Force Pool for a short time. +;697:*/ +;698: { +;699: "item_force_boon", +;700: "sound/player/boon.wav", +;701: { "models/map_objects/mp/force_boon.md3", +;702: 0, 0, 0} , +;703:/* view */ NULL, +;704:/* icon */ "gfx/hud/mpi_fboon", +;705:/* pickup */// "Force Boon", +;706: 25, +;707: IT_POWERUP, +;708: PW_FORCE_BOON, +;709:/* precache */ "", +;710:/* sounds */ "" +;711: }, +;712: +;713:/*QUAKED item_ysalimari (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;714:A small lizard carried on the player, which prevents the possessor from using any Force power. However, he is unaffected by any Force power. +;715:*/ +;716: { +;717: "item_ysalimari", +;718: "sound/player/ysalimari.wav", +;719: { "models/map_objects/mp/ysalimari.md3", +;720: 0, 0, 0} , +;721:/* view */ NULL, +;722:/* icon */ "gfx/hud/mpi_ysamari", +;723:/* pickup */// "Ysalamiri", +;724: 25, +;725: IT_POWERUP, +;726: PW_YSALAMIRI, +;727:/* precache */ "", +;728:/* sounds */ "" +;729: }, +;730: +;731: // +;732: // WEAPONS +;733: // +;734: +;735:/*QUAKED weapon_stun_baton (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;736:Don't place this +;737:*/ +;738: { +;739: "weapon_stun_baton", +;740: "sound/weapons/w_pkup.wav", +;741: { "models/weapons2/stun_baton/baton_w.glm", +;742: 0, 0, 0}, +;743:/* view */ "models/weapons2/stun_baton/baton.md3", +;744:/* icon */ "gfx/hud/w_icon_stunbaton", +;745:/* pickup */// "Stun Baton", +;746: 100, +;747: IT_WEAPON, +;748: WP_STUN_BATON, +;749:/* precache */ "", +;750:/* sounds */ "" +;751: }, +;752: +;753:/*QUAKED weapon_saber (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;754:Don't place this +;755:*/ +;756: { +;757: "weapon_saber", +;758: "sound/weapons/w_pkup.wav", +;759: { "models/weapons2/saber/saber_w.glm", +;760: 0, 0, 0}, +;761:/* view */ "models/weapons2/saber/saber_w.md3", +;762:/* icon */ "gfx/hud/w_icon_lightsaber", +;763:/* pickup */// "Lightsaber", +;764: 100, +;765: IT_WEAPON, +;766: WP_SABER, +;767:/* precache */ "", +;768:/* sounds */ "" +;769: }, +;770: +;771:/*QUAKED weapon_bryar_pistol (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;772:Don't place this +;773:*/ +;774: { +;775: "weapon_bryar_pistol", +;776: "sound/weapons/w_pkup.wav", +;777: { "models/weapons2/briar_pistol/briar_pistol_w.glm", +;778: 0, 0, 0}, +;779:/* view */ "models/weapons2/briar_pistol/briar_pistol.md3", +;780:/* icon */ "gfx/hud/w_icon_rifle", +;781:/* pickup */// "Bryar Pistol", +;782: 100, +;783: IT_WEAPON, +;784: WP_BRYAR_PISTOL, +;785:/* precache */ "", +;786:/* sounds */ "" +;787: }, +;788: +;789:/*QUAKED weapon_blaster (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;790:*/ +;791: { +;792: "weapon_blaster", +;793: "sound/weapons/w_pkup.wav", +;794: { "models/weapons2/blaster_r/blaster_w.glm", +;795: 0, 0, 0}, +;796:/* view */ "models/weapons2/blaster_r/blaster.md3", +;797:/* icon */ "gfx/hud/w_icon_blaster", +;798:/* pickup */// "E11 Blaster Rifle", +;799: 100, +;800: IT_WEAPON, +;801: WP_BLASTER, +;802:/* precache */ "", +;803:/* sounds */ "" +;804: }, +;805: +;806:/*QUAKED weapon_disruptor (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;807:*/ +;808: { +;809: "weapon_disruptor", +;810: "sound/weapons/w_pkup.wav", +;811: { "models/weapons2/disruptor/disruptor_w.glm", +;812: 0, 0, 0}, +;813:/* view */ "models/weapons2/disruptor/disruptor.md3", +;814:/* icon */ "gfx/hud/w_icon_disruptor", +;815:/* pickup */// "Tenloss Disruptor Rifle", +;816: 100, +;817: IT_WEAPON, +;818: WP_DISRUPTOR, +;819:/* precache */ "", +;820:/* sounds */ "" +;821: }, +;822: +;823:/*QUAKED weapon_bowcaster (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;824:*/ +;825: { +;826: "weapon_bowcaster", +;827: "sound/weapons/w_pkup.wav", +;828: { "models/weapons2/bowcaster/bowcaster_w.glm", +;829: 0, 0, 0}, +;830:/* view */ "models/weapons2/bowcaster/bowcaster.md3", +;831:/* icon */ "gfx/hud/w_icon_bowcaster", +;832:/* pickup */// "Wookiee Bowcaster", +;833: 100, +;834: IT_WEAPON, +;835: WP_BOWCASTER, +;836:/* precache */ "", +;837:/* sounds */ "" +;838: }, +;839: +;840:/*QUAKED weapon_repeater (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;841:*/ +;842: { +;843: "weapon_repeater", +;844: "sound/weapons/w_pkup.wav", +;845: { "models/weapons2/heavy_repeater/heavy_repeater_w.glm", +;846: 0, 0, 0}, +;847:/* view */ "models/weapons2/heavy_repeater/heavy_repeater.md3", +;848:/* icon */ "gfx/hud/w_icon_repeater", +;849:/* pickup */// "Imperial Heavy Repeater", +;850: 100, +;851: IT_WEAPON, +;852: WP_REPEATER, +;853:/* precache */ "", +;854:/* sounds */ "" +;855: }, +;856: +;857:/*QUAKED weapon_demp2 (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;858:NOTENOTE This weapon is not yet complete. Don't place it. +;859:*/ +;860: { +;861: "weapon_demp2", +;862: "sound/weapons/w_pkup.wav", +;863: { "models/weapons2/demp2/demp2_w.glm", +;864: 0, 0, 0}, +;865:/* view */ "models/weapons2/demp2/demp2.md3", +;866:/* icon */ "gfx/hud/w_icon_demp2", +;867:/* pickup */// "DEMP2", +;868: 100, +;869: IT_WEAPON, +;870: WP_DEMP2, +;871:/* precache */ "", +;872:/* sounds */ "" +;873: }, +;874: +;875:/*QUAKED weapon_flechette (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;876:*/ +;877: { +;878: "weapon_flechette", +;879: "sound/weapons/w_pkup.wav", +;880: { "models/weapons2/golan_arms/golan_arms_w.glm", +;881: 0, 0, 0}, +;882:/* view */ "models/weapons2/golan_arms/golan_arms.md3", +;883:/* icon */ "gfx/hud/w_icon_flechette", +;884:/* pickup */// "Golan Arms Flechette", +;885: 100, +;886: IT_WEAPON, +;887: WP_FLECHETTE, +;888:/* precache */ "", +;889:/* sounds */ "" +;890: }, +;891: +;892:/*QUAKED weapon_rocket_launcher (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;893:*/ +;894: { +;895: "weapon_rocket_launcher", +;896: "sound/weapons/w_pkup.wav", +;897: { "models/weapons2/merr_sonn/merr_sonn_w.glm", +;898: 0, 0, 0}, +;899:/* view */ "models/weapons2/merr_sonn/merr_sonn.md3", +;900:/* icon */ "gfx/hud/w_icon_merrsonn", +;901:/* pickup */// "Merr-Sonn Missile System", +;902: 3, +;903: IT_WEAPON, +;904: WP_ROCKET_LAUNCHER, +;905:/* precache */ "", +;906:/* sounds */ "" +;907: }, +;908: +;909:/*QUAKED ammo_thermal (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;910:*/ +;911: { +;912: "ammo_thermal", +;913: "sound/weapons/w_pkup.wav", +;914: { "models/weapons2/thermal/thermal_pu.md3", +;915: "models/weapons2/thermal/thermal_w.glm", 0, 0}, +;916:/* view */ "models/weapons2/thermal/thermal.md3", +;917:/* icon */ "gfx/hud/w_icon_thermal", +;918:/* pickup */// "Thermal Detonators", +;919: 4, +;920: IT_AMMO, +;921: AMMO_THERMAL, +;922:/* precache */ "", +;923:/* sounds */ "" +;924: }, +;925: +;926:/*QUAKED ammo_tripmine (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;927:*/ +;928: { +;929: "ammo_tripmine", +;930: "sound/weapons/w_pkup.wav", +;931: { "models/weapons2/laser_trap/laser_trap_pu.md3", +;932: "models/weapons2/laser_trap/laser_trap_w.glm", 0, 0}, +;933:/* view */ "models/weapons2/laser_trap/laser_trap.md3", +;934:/* icon */ "gfx/hud/w_icon_tripmine", +;935:/* pickup */// "Trip Mines", +;936: 3, +;937: IT_AMMO, +;938: AMMO_TRIPMINE, +;939:/* precache */ "", +;940:/* sounds */ "" +;941: }, +;942: +;943:/*QUAKED ammo_detpack (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;944:*/ +;945: { +;946: "ammo_detpack", +;947: "sound/weapons/w_pkup.wav", +;948: { "models/weapons2/detpack/det_pack_pu.md3", "models/weapons2/detpack/det_pack_proj.glm", "models/weapons2/detpack/det_pack_w.glm", 0}, +;949:/* view */ "models/weapons2/detpack/det_pack.md3", +;950:/* icon */ "gfx/hud/w_icon_detpack", +;951:/* pickup */// "Det Packs", +;952: 3, +;953: IT_AMMO, +;954: AMMO_DETPACK, +;955:/* precache */ "", +;956:/* sounds */ "" +;957: }, +;958: +;959:/*QUAKED weapon_thermal (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;960:*/ +;961: { +;962: "weapon_thermal", +;963: "sound/weapons/w_pkup.wav", +;964: { "models/weapons2/thermal/thermal_w.glm", "models/weapons2/thermal/thermal_pu.md3", +;965: 0, 0 }, +;966:/* view */ "models/weapons2/thermal/thermal.md3", +;967:/* icon */ "gfx/hud/w_icon_thermal", +;968:/* pickup */// "Thermal Detonator", +;969: 4, +;970: IT_WEAPON, +;971: WP_THERMAL, +;972:/* precache */ "", +;973:/* sounds */ "" +;974: }, +;975: +;976:/*QUAKED weapon_trip_mine (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;977:*/ +;978: { +;979: "weapon_trip_mine", +;980: "sound/weapons/w_pkup.wav", +;981: { "models/weapons2/laser_trap/laser_trap_w.glm", "models/weapons2/laser_trap/laser_trap_pu.md3", +;982: 0, 0}, +;983:/* view */ "models/weapons2/laser_trap/laser_trap.md3", +;984:/* icon */ "gfx/hud/w_icon_tripmine", +;985:/* pickup */// "Trip Mine", +;986: 3, +;987: IT_WEAPON, +;988: WP_TRIP_MINE, +;989:/* precache */ "", +;990:/* sounds */ "" +;991: }, +;992: +;993:/*QUAKED weapon_det_pack (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;994:*/ +;995: { +;996: "weapon_det_pack", +;997: "sound/weapons/w_pkup.wav", +;998: { "models/weapons2/detpack/det_pack_proj.glm", "models/weapons2/detpack/det_pack_pu.md3", "models/weapons2/detpack/det_pack_w.glm", 0}, +;999:/* view */ "models/weapons2/detpack/det_pack.md3", +;1000:/* icon */ "gfx/hud/w_icon_detpack", +;1001:/* pickup */// "Det Pack", +;1002: 3, +;1003: IT_WEAPON, +;1004: WP_DET_PACK, +;1005:/* precache */ "", +;1006:/* sounds */ "" +;1007: }, +;1008: +;1009:/*QUAKED weapon_emplaced (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1010:*/ +;1011: { +;1012: "weapon_emplaced", +;1013: "sound/weapons/w_pkup.wav", +;1014: { "models/weapons2/blaster_r/blaster_w.glm", +;1015: 0, 0, 0}, +;1016:/* view */ "models/weapons2/blaster_r/blaster.md3", +;1017:/* icon */ "gfx/hud/w_icon_blaster", +;1018:/* pickup */// "Emplaced Gun", +;1019: 50, +;1020: IT_WEAPON, +;1021: WP_EMPLACED_GUN, +;1022:/* precache */ "", +;1023:/* sounds */ "" +;1024: }, +;1025: +;1026: +;1027://NOTE: This is to keep things from messing up because the turret weapon type isn't real +;1028: { +;1029: "weapon_turretwp", +;1030: "sound/weapons/w_pkup.wav", +;1031: { "models/weapons2/blaster_r/blaster_w.glm", +;1032: 0, 0, 0}, +;1033:/* view */ "models/weapons2/blaster_r/blaster.md3", +;1034:/* icon */ "gfx/hud/w_icon_blaster", +;1035:/* pickup */// "Turret Gun", +;1036: 50, +;1037: IT_WEAPON, +;1038: WP_TURRET, +;1039:/* precache */ "", +;1040:/* sounds */ "" +;1041: }, +;1042: +;1043: // +;1044: // AMMO ITEMS +;1045: // +;1046: +;1047:/*QUAKED ammo_force (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1048:Don't place this +;1049:*/ +;1050: { +;1051: "ammo_force", +;1052: "sound/player/pickupenergy.wav", +;1053: { "models/items/energy_cell.md3", +;1054: 0, 0, 0}, +;1055:/* view */ NULL, +;1056:/* icon */ "gfx/hud/w_icon_blaster", +;1057:/* pickup */// "Force??", +;1058: 100, +;1059: IT_AMMO, +;1060: AMMO_FORCE, +;1061:/* precache */ "", +;1062:/* sounds */ "" +;1063: }, +;1064: +;1065:/*QUAKED ammo_blaster (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1066:Ammo for the Bryar and Blaster pistols. +;1067:*/ +;1068: { +;1069: "ammo_blaster", +;1070: "sound/player/pickupenergy.wav", +;1071: { "models/items/energy_cell.md3", +;1072: 0, 0, 0}, +;1073:/* view */ NULL, +;1074:/* icon */ "gfx/hud/i_icon_battery", +;1075:/* pickup */// "Blaster Pack", +;1076: 100, +;1077: IT_AMMO, +;1078: AMMO_BLASTER, +;1079:/* precache */ "", +;1080:/* sounds */ "" +;1081: }, +;1082: +;1083:/*QUAKED ammo_powercell (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1084:Ammo for Tenloss Disruptor, Wookie Bowcaster, and the Destructive Electro Magnetic Pulse (demp2 ) guns +;1085:*/ +;1086: { +;1087: "ammo_powercell", +;1088: "sound/player/pickupenergy.wav", +;1089: { "models/items/power_cell.md3", +;1090: 0, 0, 0}, +;1091:/* view */ NULL, +;1092:/* icon */ "gfx/mp/ammo_power_cell", +;1093:/* pickup */// "Power Cell", +;1094: 100, +;1095: IT_AMMO, +;1096: AMMO_POWERCELL, +;1097:/* precache */ "", +;1098:/* sounds */ "" +;1099: }, +;1100: +;1101:/*QUAKED ammo_metallic_bolts (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1102:Ammo for Imperial Heavy Repeater and the Golan Arms Flechette +;1103:*/ +;1104: { +;1105: "ammo_metallic_bolts", +;1106: "sound/player/pickupenergy.wav", +;1107: { "models/items/metallic_bolts.md3", +;1108: 0, 0, 0}, +;1109:/* view */ NULL, +;1110:/* icon */ "gfx/mp/ammo_metallic_bolts", +;1111:/* pickup */// "Metallic Bolts", +;1112: 100, +;1113: IT_AMMO, +;1114: AMMO_METAL_BOLTS, +;1115:/* precache */ "", +;1116:/* sounds */ "" +;1117: }, +;1118: +;1119:/*QUAKED ammo_rockets (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1120:Ammo for Merr-Sonn portable missile launcher +;1121:*/ +;1122: { +;1123: "ammo_rockets", +;1124: "sound/player/pickupenergy.wav", +;1125: { "models/items/rockets.md3", +;1126: 0, 0, 0}, +;1127:/* view */ NULL, +;1128:/* icon */ "gfx/mp/ammo_rockets", +;1129:/* pickup */// "Rockets", +;1130: 3, +;1131: IT_AMMO, +;1132: AMMO_ROCKETS, +;1133:/* precache */ "", +;1134:/* sounds */ "" +;1135: }, +;1136: +;1137: +;1138: // +;1139: // POWERUP ITEMS +;1140: // +;1141:/*QUAKED team_CTF_redflag (1 0 0) (-16 -16 -16) (16 16 16) +;1142:Only in CTF games +;1143:*/ +;1144: { +;1145: "team_CTF_redflag", +;1146: NULL, +;1147: { "models/flags/r_flag.md3", +;1148: "models/flags/r_flag_ysal.md3", 0, 0 }, +;1149:/* view */ NULL, +;1150:/* icon */ "gfx/hud/mpi_rflag", +;1151:/* pickup */// "Red Flag", +;1152: 0, +;1153: IT_TEAM, +;1154: PW_REDFLAG, +;1155:/* precache */ "", +;1156:/* sounds */ "" +;1157: }, +;1158: +;1159:/*QUAKED team_CTF_blueflag (0 0 1) (-16 -16 -16) (16 16 16) +;1160:Only in CTF games +;1161:*/ +;1162: { +;1163: "team_CTF_blueflag", +;1164: NULL, +;1165: { "models/flags/b_flag.md3", +;1166: "models/flags/b_flag_ysal.md3", 0, 0 }, +;1167:/* view */ NULL, +;1168:/* icon */ "gfx/hud/mpi_bflag", +;1169:/* pickup */// "Blue Flag", +;1170: 0, +;1171: IT_TEAM, +;1172: PW_BLUEFLAG, +;1173:/* precache */ "", +;1174:/* sounds */ "" +;1175: }, +;1176: +;1177: // +;1178: // PERSISTANT POWERUP ITEMS +;1179: // +;1180: +;1181: /*QUAKED team_CTF_neutralflag (0 0 1) (-16 -16 -16) (16 16 16) +;1182:Only in One Flag CTF games +;1183:*/ +;1184: { +;1185: "team_CTF_neutralflag", +;1186: NULL, +;1187: { "models/flags/n_flag.md3", +;1188: 0, 0, 0 }, +;1189:/* view */ NULL, +;1190:/* icon */ "icons/iconf_neutral1", +;1191:/* pickup */// "Neutral Flag", +;1192: 0, +;1193: IT_TEAM, +;1194: PW_NEUTRALFLAG, +;1195:/* precache */ "", +;1196:/* sounds */ "" +;1197: }, +;1198: +;1199: { +;1200: "item_redcube", +;1201: "sound/player/pickupenergy.wav", +;1202: { "models/powerups/orb/r_orb.md3", +;1203: 0, 0, 0 }, +;1204:/* view */ NULL, +;1205:/* icon */ "icons/iconh_rorb", +;1206:/* pickup */// "Red Cube", +;1207: 0, +;1208: IT_TEAM, +;1209: 0, +;1210:/* precache */ "", +;1211:/* sounds */ "" +;1212: }, +;1213: +;1214: { +;1215: "item_bluecube", +;1216: "sound/player/pickupenergy.wav", +;1217: { "models/powerups/orb/b_orb.md3", +;1218: 0, 0, 0 }, +;1219:/* view */ NULL, +;1220:/* icon */ "icons/iconh_borb", +;1221:/* pickup */// "Blue Cube", +;1222: 0, +;1223: IT_TEAM, +;1224: 0, +;1225:/* precache */ "", +;1226:/* sounds */ "" +;1227: }, +;1228: +;1229: // end of list marker +;1230: {NULL} +;1231:}; +;1232: +;1233:int bg_numItems = sizeof(bg_itemlist) / sizeof(bg_itemlist[0]) - 1; +;1234: +;1235:float vectoyaw( const vec3_t vec ) { +line 1238 +;1236: float yaw; +;1237: +;1238: if (vec[YAW] == 0 && vec[PITCH] == 0) { +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +NEF4 $396 +ADDRLP4 4 +INDIRP4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +NEF4 $396 +line 1239 +;1239: yaw = 0; +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +line 1240 +;1240: } else { +ADDRGP4 $397 +JUMPV +LABELV $396 +line 1241 +;1241: if (vec[PITCH]) { +ADDRFP4 0 +INDIRP4 +INDIRF4 +CNSTF4 0 +EQF4 $398 +line 1242 +;1242: yaw = ( atan2( vec[YAW], vec[PITCH]) * 180 / M_PI ); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 16 +ADDRGP4 atan2 +CALLF4 +ASGNF4 +ADDRLP4 0 +CNSTF4 1127481344 +ADDRLP4 16 +INDIRF4 +MULF4 +CNSTF4 1078530011 +DIVF4 +ASGNF4 +line 1243 +;1243: } else if (vec[YAW] > 0) { +ADDRGP4 $399 +JUMPV +LABELV $398 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +CNSTF4 0 +LEF4 $400 +line 1244 +;1244: yaw = 90; +ADDRLP4 0 +CNSTF4 1119092736 +ASGNF4 +line 1245 +;1245: } else { +ADDRGP4 $401 +JUMPV +LABELV $400 +line 1246 +;1246: yaw = 270; +ADDRLP4 0 +CNSTF4 1132920832 +ASGNF4 +line 1247 +;1247: } +LABELV $401 +LABELV $399 +line 1248 +;1248: if (yaw < 0) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $402 +line 1249 +;1249: yaw += 360; +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +CNSTF4 1135869952 +ADDF4 +ASGNF4 +line 1250 +;1250: } +LABELV $402 +line 1251 +;1251: } +LABELV $397 +line 1253 +;1252: +;1253: return yaw; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $395 +endproc vectoyaw 20 8 +export BG_HasYsalamiri +proc BG_HasYsalamiri 8 0 +line 1257 +;1254:} +;1255: +;1256:qboolean BG_HasYsalamiri(int gametype, playerState_t *ps) +;1257:{ +line 1258 +;1258: if (gametype == GT_CTY && +ADDRFP4 0 +INDIRI4 +CNSTI4 8 +NEI4 $405 +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 360 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $407 +ADDRLP4 0 +INDIRP4 +CNSTI4 364 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $405 +LABELV $407 +line 1260 +;1259: (ps->powerups[PW_REDFLAG] || ps->powerups[PW_BLUEFLAG])) +;1260: { +line 1261 +;1261: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $404 +JUMPV +LABELV $405 +line 1264 +;1262: } +;1263: +;1264: if (ps->powerups[PW_YSALAMIRI]) +ADDRFP4 4 +INDIRP4 +CNSTI4 404 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $408 +line 1265 +;1265: { +line 1266 +;1266: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $404 +JUMPV +LABELV $408 +line 1269 +;1267: } +;1268: +;1269: return qfalse; +CNSTI4 0 +RETI4 +LABELV $404 +endproc BG_HasYsalamiri 8 0 +export BG_CanUseFPNow +proc BG_CanUseFPNow 8 8 +line 1273 +;1270:} +;1271: +;1272:qboolean BG_CanUseFPNow(int gametype, playerState_t *ps, int time, forcePowers_t power) +;1273:{ +line 1274 +;1274: if (BG_HasYsalamiri(gametype, ps)) +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 0 +ADDRGP4 BG_HasYsalamiri +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $411 +line 1275 +;1275: { +line 1276 +;1276: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $410 +JUMPV +LABELV $411 +line 1279 +;1277: } +;1278: +;1279: if (ps->duelInProgress) +ADDRFP4 4 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $413 +line 1280 +;1280: { +line 1281 +;1281: if (power != FP_SABERATTACK && power != FP_SABERDEFEND && power != FP_SABERTHROW && +ADDRLP4 4 +ADDRFP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 15 +EQI4 $415 +ADDRLP4 4 +INDIRI4 +CNSTI4 16 +EQI4 $415 +ADDRLP4 4 +INDIRI4 +CNSTI4 17 +EQI4 $415 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +EQI4 $415 +line 1283 +;1282: power != FP_LEVITATION) +;1283: { +line 1284 +;1284: if (!ps->saberLockFrame || power != FP_PUSH) +ADDRFP4 4 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $419 +ADDRFP4 12 +INDIRI4 +CNSTI4 3 +EQI4 $417 +LABELV $419 +line 1285 +;1285: { +line 1286 +;1286: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $410 +JUMPV +LABELV $417 +line 1288 +;1287: } +;1288: } +LABELV $415 +line 1289 +;1289: } +LABELV $413 +line 1291 +;1290: +;1291: if (ps->saberLockFrame || ps->saberLockTime > time) +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $422 +ADDRLP4 4 +INDIRP4 +CNSTI4 524 +ADDP4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LEI4 $420 +LABELV $422 +line 1292 +;1292: { +line 1293 +;1293: if (power != FP_PUSH) +ADDRFP4 12 +INDIRI4 +CNSTI4 3 +EQI4 $423 +line 1294 +;1294: { +line 1295 +;1295: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $410 +JUMPV +LABELV $423 +line 1297 +;1296: } +;1297: } +LABELV $420 +line 1299 +;1298: +;1299: if (ps->fallingToDeath) +ADDRFP4 4 +INDIRP4 +CNSTI4 1340 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $425 +line 1300 +;1300: { +line 1301 +;1301: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $410 +JUMPV +LABELV $425 +line 1304 +;1302: } +;1303: +;1304: return qtrue; +CNSTI4 1 +RETI4 +LABELV $410 +endproc BG_CanUseFPNow 8 8 +export BG_FindItemForPowerup +proc BG_FindItemForPowerup 8 0 +line 1312 +;1305:} +;1306: +;1307:/* +;1308:============== +;1309:BG_FindItemForPowerup +;1310:============== +;1311:*/ +;1312:gitem_t *BG_FindItemForPowerup( powerup_t pw ) { +line 1315 +;1313: int i; +;1314: +;1315: for ( i = 0 ; i < bg_numItems ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $431 +JUMPV +LABELV $428 +line 1316 +;1316: if ( (bg_itemlist[i].giType == IT_POWERUP || +ADDRLP4 4 +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+36 +ADDP4 +INDIRI4 +CNSTI4 5 +EQI4 $437 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+36 +ADDP4 +INDIRI4 +CNSTI4 8 +NEI4 $432 +LABELV $437 +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist+40 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $432 +line 1318 +;1317: bg_itemlist[i].giType == IT_TEAM) && +;1318: bg_itemlist[i].giTag == pw ) { +line 1319 +;1319: return &bg_itemlist[i]; +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist +ADDP4 +RETP4 +ADDRGP4 $427 +JUMPV +LABELV $432 +line 1321 +;1320: } +;1321: } +LABELV $429 +line 1315 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $431 +ADDRLP4 0 +INDIRI4 +ADDRGP4 bg_numItems +INDIRI4 +LTI4 $428 +line 1323 +;1322: +;1323: return NULL; +CNSTP4 0 +RETP4 +LABELV $427 +endproc BG_FindItemForPowerup 8 0 +export BG_FindItemForHoldable +proc BG_FindItemForHoldable 8 8 +line 1332 +;1324:} +;1325: +;1326: +;1327:/* +;1328:============== +;1329:BG_FindItemForHoldable +;1330:============== +;1331:*/ +;1332:gitem_t *BG_FindItemForHoldable( holdable_t pw ) { +line 1335 +;1333: int i; +;1334: +;1335: for ( i = 0 ; i < bg_numItems ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $442 +JUMPV +LABELV $439 +line 1336 +;1336: if ( bg_itemlist[i].giType == IT_HOLDABLE && bg_itemlist[i].giTag == pw ) { +ADDRLP4 4 +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+36 +ADDP4 +INDIRI4 +CNSTI4 6 +NEI4 $443 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+40 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $443 +line 1337 +;1337: return &bg_itemlist[i]; +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist +ADDP4 +RETP4 +ADDRGP4 $438 +JUMPV +LABELV $443 +line 1339 +;1338: } +;1339: } +LABELV $440 +line 1335 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $442 +ADDRLP4 0 +INDIRI4 +ADDRGP4 bg_numItems +INDIRI4 +LTI4 $439 +line 1341 +;1340: +;1341: Com_Error( ERR_DROP, "HoldableItem not found" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $447 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1343 +;1342: +;1343: return NULL; +CNSTP4 0 +RETP4 +LABELV $438 +endproc BG_FindItemForHoldable 8 8 +export BG_FindItemForWeapon +proc BG_FindItemForWeapon 8 12 +line 1353 +;1344:} +;1345: +;1346: +;1347:/* +;1348:=============== +;1349:BG_FindItemForWeapon +;1350: +;1351:=============== +;1352:*/ +;1353:gitem_t *BG_FindItemForWeapon( weapon_t weapon ) { +line 1356 +;1354: gitem_t *it; +;1355: +;1356: for ( it = bg_itemlist + 1 ; it->classname ; it++) { +ADDRLP4 0 +ADDRGP4 bg_itemlist+52 +ASGNP4 +ADDRGP4 $452 +JUMPV +LABELV $449 +line 1357 +;1357: if ( it->giType == IT_WEAPON && it->giTag == weapon ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $454 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $454 +line 1358 +;1358: return it; +ADDRLP4 0 +INDIRP4 +RETP4 +ADDRGP4 $448 +JUMPV +LABELV $454 +line 1360 +;1359: } +;1360: } +LABELV $450 +line 1356 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 52 +ADDP4 +ASGNP4 +LABELV $452 +ADDRLP4 0 +INDIRP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $449 +line 1362 +;1361: +;1362: Com_Error( ERR_DROP, "Couldn't find item for weapon %i", weapon); +CNSTI4 1 +ARGI4 +ADDRGP4 $456 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 1363 +;1363: return NULL; +CNSTP4 0 +RETP4 +LABELV $448 +endproc BG_FindItemForWeapon 8 12 +export BG_FindItem +proc BG_FindItem 8 8 +line 1372 +;1364:} +;1365: +;1366:/* +;1367:=============== +;1368:BG_FindItem +;1369: +;1370:=============== +;1371:*/ +;1372:gitem_t *BG_FindItem( const char *classname ) { +line 1375 +;1373: gitem_t *it; +;1374: +;1375: for ( it = bg_itemlist + 1 ; it->classname ; it++ ) { +ADDRLP4 0 +ADDRGP4 bg_itemlist+52 +ASGNP4 +ADDRGP4 $461 +JUMPV +LABELV $458 +line 1376 +;1376: if ( !Q_stricmp( it->classname, classname) ) +ADDRLP4 0 +INDIRP4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $463 +line 1377 +;1377: return it; +ADDRLP4 0 +INDIRP4 +RETP4 +ADDRGP4 $457 +JUMPV +LABELV $463 +line 1378 +;1378: } +LABELV $459 +line 1375 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 52 +ADDP4 +ASGNP4 +LABELV $461 +ADDRLP4 0 +INDIRP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $458 +line 1380 +;1379: +;1380: return NULL; +CNSTP4 0 +RETP4 +LABELV $457 +endproc BG_FindItem 8 8 +export BG_PlayerTouchesItem +proc BG_PlayerTouchesItem 36 12 +line 1391 +;1381:} +;1382: +;1383:/* +;1384:============ +;1385:BG_PlayerTouchesItem +;1386: +;1387:Items can be picked up without actually touching their physical bounds to make +;1388:grabbing them easier +;1389:============ +;1390:*/ +;1391:qboolean BG_PlayerTouchesItem( playerState_t *ps, entityState_t *item, int atTime ) { +line 1394 +;1392: vec3_t origin; +;1393: +;1394: BG_EvaluateTrajectory( &item->pos, atTime, origin ); +ADDRFP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +ADDRGP4 BG_EvaluateTrajectory +CALLV +pop +line 1397 +;1395: +;1396: // we are ignoring ducked differences here +;1397: if ( ps->origin[0] - origin[0] > 44 +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +ADDRLP4 12 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 16 +INDIRF4 +CNSTF4 1110441984 +GTF4 $476 +ADDRLP4 16 +INDIRF4 +CNSTF4 3259498496 +LTF4 $476 +ADDRLP4 20 +ADDRLP4 12 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 24 +CNSTF4 1108344832 +ASGNF4 +ADDRLP4 20 +INDIRF4 +ADDRLP4 0+4 +INDIRF4 +SUBF4 +ADDRLP4 24 +INDIRF4 +GTF4 $476 +ADDRLP4 28 +CNSTF4 3255828480 +ASGNF4 +ADDRLP4 20 +INDIRF4 +ADDRLP4 0+4 +INDIRF4 +SUBF4 +ADDRLP4 28 +INDIRF4 +LTF4 $476 +ADDRLP4 32 +ADDRLP4 12 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 32 +INDIRF4 +ADDRLP4 0+8 +INDIRF4 +SUBF4 +ADDRLP4 24 +INDIRF4 +GTF4 $476 +ADDRLP4 32 +INDIRF4 +ADDRLP4 0+8 +INDIRF4 +SUBF4 +ADDRLP4 28 +INDIRF4 +GEF4 $466 +LABELV $476 +line 1402 +;1398: || ps->origin[0] - origin[0] < -50 +;1399: || ps->origin[1] - origin[1] > 36 +;1400: || ps->origin[1] - origin[1] < -36 +;1401: || ps->origin[2] - origin[2] > 36 +;1402: || ps->origin[2] - origin[2] < -36 ) { +line 1403 +;1403: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $465 +JUMPV +LABELV $466 +line 1406 +;1404: } +;1405: +;1406: return qtrue; +CNSTI4 1 +RETI4 +LABELV $465 +endproc BG_PlayerTouchesItem 36 12 +export BG_ProperForceIndex +proc BG_ProperForceIndex 4 0 +line 1410 +;1407:} +;1408: +;1409:int BG_ProperForceIndex(int power) +;1410:{ +line 1411 +;1411: int i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $479 +JUMPV +LABELV $478 +line 1414 +;1412: +;1413: while (i < NUM_FORCE_POWERS) +;1414: { +line 1415 +;1415: if (forcePowerSorted[i] == power) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forcePowerSorted +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $481 +line 1416 +;1416: { +line 1417 +;1417: return i; +ADDRLP4 0 +INDIRI4 +RETI4 +ADDRGP4 $477 +JUMPV +LABELV $481 +line 1420 +;1418: } +;1419: +;1420: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1421 +;1421: } +LABELV $479 +line 1413 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $478 +line 1423 +;1422: +;1423: return -1; +CNSTI4 -1 +RETI4 +LABELV $477 +endproc BG_ProperForceIndex 4 0 +export BG_CycleForce +proc BG_CycleForce 40 4 +line 1427 +;1424:} +;1425: +;1426:void BG_CycleForce(playerState_t *ps, int direction) +;1427:{ +line 1428 +;1428: int i = ps->fd.forcePowerSelected; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 840 +ADDP4 +INDIRI4 +ASGNI4 +line 1429 +;1429: int x = i; +ADDRLP4 0 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 1430 +;1430: int presel = i; +ADDRLP4 8 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 1431 +;1431: int foundnext = -1; +ADDRLP4 12 +CNSTI4 -1 +ASGNI4 +line 1433 +;1432: +;1433: if (!ps->fd.forcePowersKnown & (1 << x) || +ADDRFP4 0 +INDIRP4 +CNSTI4 832 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $488 +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +ADDRGP4 $489 +JUMPV +LABELV $488 +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +LABELV $489 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +NEI4 $490 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +GEI4 $490 +ADDRLP4 0 +INDIRI4 +CNSTI4 -1 +NEI4 $484 +LABELV $490 +line 1436 +;1434: x >= NUM_FORCE_POWERS || +;1435: x == -1) +;1436: { //apparently we have no valid force powers +line 1437 +;1437: return; +ADDRGP4 $483 +JUMPV +LABELV $484 +line 1440 +;1438: } +;1439: +;1440: x = BG_ProperForceIndex(x); +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 24 +ADDRGP4 BG_ProperForceIndex +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 24 +INDIRI4 +ASGNI4 +line 1441 +;1441: presel = x; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1443 +;1442: +;1443: if (direction == 1) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $491 +line 1444 +;1444: { +line 1445 +;1445: x++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1446 +;1446: } +ADDRGP4 $492 +JUMPV +LABELV $491 +line 1448 +;1447: else +;1448: { +line 1449 +;1449: x--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1450 +;1450: } +LABELV $492 +line 1452 +;1451: +;1452: if (x >= NUM_FORCE_POWERS) +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $493 +line 1453 +;1453: { +line 1454 +;1454: x = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1455 +;1455: } +LABELV $493 +line 1456 +;1456: if (x < 0) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $495 +line 1457 +;1457: { +line 1458 +;1458: x = NUM_FORCE_POWERS-1; +ADDRLP4 0 +CNSTI4 17 +ASGNI4 +line 1459 +;1459: } +LABELV $495 +line 1461 +;1460: +;1461: i = forcePowerSorted[x]; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forcePowerSorted +ADDP4 +INDIRI4 +ASGNI4 +ADDRGP4 $498 +JUMPV +LABELV $497 +line 1464 +;1462: +;1463: while (x != presel) +;1464: { +line 1465 +;1465: if (ps->fd.forcePowersKnown & (1 << i) && i != ps->fd.forcePowerSelected) +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +CNSTI4 832 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 4 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $500 +ADDRLP4 4 +INDIRI4 +ADDRLP4 28 +INDIRP4 +CNSTI4 840 +ADDP4 +INDIRI4 +EQI4 $500 +line 1466 +;1466: { +line 1467 +;1467: if (i != FP_LEVITATION && +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +EQI4 $502 +ADDRLP4 4 +INDIRI4 +CNSTI4 15 +EQI4 $502 +ADDRLP4 4 +INDIRI4 +CNSTI4 16 +EQI4 $502 +ADDRLP4 4 +INDIRI4 +CNSTI4 17 +EQI4 $502 +line 1471 +;1468: i != FP_SABERATTACK && +;1469: i != FP_SABERDEFEND && +;1470: i != FP_SABERTHROW) +;1471: { +line 1472 +;1472: foundnext = i; +ADDRLP4 12 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 1473 +;1473: break; +ADDRGP4 $499 +JUMPV +LABELV $502 +line 1475 +;1474: } +;1475: } +LABELV $500 +line 1477 +;1476: +;1477: if (direction == 1) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $504 +line 1478 +;1478: { +line 1479 +;1479: x++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1480 +;1480: } +ADDRGP4 $505 +JUMPV +LABELV $504 +line 1482 +;1481: else +;1482: { +line 1483 +;1483: x--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1484 +;1484: } +LABELV $505 +line 1486 +;1485: +;1486: if (x >= NUM_FORCE_POWERS) +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $506 +line 1487 +;1487: { +line 1488 +;1488: x = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1489 +;1489: } +LABELV $506 +line 1490 +;1490: if (x < 0) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $508 +line 1491 +;1491: { +line 1492 +;1492: x = NUM_FORCE_POWERS-1; +ADDRLP4 0 +CNSTI4 17 +ASGNI4 +line 1493 +;1493: } +LABELV $508 +line 1495 +;1494: +;1495: i = forcePowerSorted[x]; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forcePowerSorted +ADDP4 +INDIRI4 +ASGNI4 +line 1496 +;1496: } +LABELV $498 +line 1463 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +NEI4 $497 +LABELV $499 +line 1498 +;1497: +;1498: if (foundnext != -1) +ADDRLP4 12 +INDIRI4 +CNSTI4 -1 +EQI4 $510 +line 1499 +;1499: { +line 1500 +;1500: ps->fd.forcePowerSelected = foundnext; +ADDRFP4 0 +INDIRP4 +CNSTI4 840 +ADDP4 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 1501 +;1501: } +LABELV $510 +line 1502 +;1502:} +LABELV $483 +endproc BG_CycleForce 40 4 +export BG_GetItemIndexByTag +proc BG_GetItemIndexByTag 8 0 +line 1505 +;1503: +;1504:int BG_GetItemIndexByTag(int tag, int type) +;1505:{ +line 1506 +;1506: int i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $514 +JUMPV +LABELV $513 +line 1509 +;1507: +;1508: while (i < bg_numItems) +;1509: { +line 1510 +;1510: if (bg_itemlist[i].giTag == tag && +ADDRLP4 4 +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+40 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $516 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+36 +ADDP4 +INDIRI4 +ADDRFP4 4 +INDIRI4 +NEI4 $516 +line 1512 +;1511: bg_itemlist[i].giType == type) +;1512: { +line 1513 +;1513: return i; +ADDRLP4 0 +INDIRI4 +RETI4 +ADDRGP4 $512 +JUMPV +LABELV $516 +line 1516 +;1514: } +;1515: +;1516: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1517 +;1517: } +LABELV $514 +line 1508 +ADDRLP4 0 +INDIRI4 +ADDRGP4 bg_numItems +INDIRI4 +LTI4 $513 +line 1519 +;1518: +;1519: return 0; +CNSTI4 0 +RETI4 +LABELV $512 +endproc BG_GetItemIndexByTag 8 0 +export BG_CycleInven +proc BG_CycleInven 12 8 +line 1523 +;1520:} +;1521: +;1522:void BG_CycleInven(playerState_t *ps, int direction) +;1523:{ +line 1527 +;1524: int i; +;1525: int original; +;1526: +;1527: i = bg_itemlist[ps->stats[STAT_HOLDABLE_ITEM]].giTag; +ADDRLP4 0 +CNSTI4 52 +ADDRFP4 0 +INDIRP4 +CNSTI4 220 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist+40 +ADDP4 +INDIRI4 +ASGNI4 +line 1528 +;1528: original = i; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1530 +;1529: +;1530: if (direction == 1) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $522 +line 1531 +;1531: { +line 1532 +;1532: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1533 +;1533: } +ADDRGP4 $525 +JUMPV +LABELV $522 +line 1535 +;1534: else +;1535: { +line 1536 +;1536: i--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1537 +;1537: } +ADDRGP4 $525 +JUMPV +LABELV $524 +line 1540 +;1538: +;1539: while (i != original) +;1540: { //go in a full loop until hitting something, if hit nothing then select nothing +line 1541 +;1541: if (ps->stats[STAT_HOLDABLE_ITEMS] & (1 << i)) +ADDRFP4 0 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $527 +line 1542 +;1542: { +line 1543 +;1543: ps->stats[STAT_HOLDABLE_ITEM] = BG_GetItemIndexByTag(i, IT_HOLDABLE); +ADDRLP4 0 +INDIRI4 +ARGI4 +CNSTI4 6 +ARGI4 +ADDRLP4 8 +ADDRGP4 BG_GetItemIndexByTag +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 220 +ADDP4 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 1544 +;1544: break; +ADDRGP4 $526 +JUMPV +LABELV $527 +line 1547 +;1545: } +;1546: +;1547: if (direction == 1) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $529 +line 1548 +;1548: { +line 1549 +;1549: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1550 +;1550: } +ADDRGP4 $530 +JUMPV +LABELV $529 +line 1552 +;1551: else +;1552: { +line 1553 +;1553: i--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1554 +;1554: } +LABELV $530 +line 1556 +;1555: +;1556: if (i < 0) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $531 +line 1557 +;1557: { +line 1558 +;1558: i = HI_NUM_HOLDABLE; +ADDRLP4 0 +CNSTI4 7 +ASGNI4 +line 1559 +;1559: } +ADDRGP4 $532 +JUMPV +LABELV $531 +line 1560 +;1560: else if (i >= HI_NUM_HOLDABLE) +ADDRLP4 0 +INDIRI4 +CNSTI4 7 +LTI4 $533 +line 1561 +;1561: { +line 1562 +;1562: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1563 +;1563: } +LABELV $533 +LABELV $532 +line 1564 +;1564: } +LABELV $525 +line 1539 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $524 +LABELV $526 +line 1565 +;1565:} +LABELV $520 +endproc BG_CycleInven 12 8 +export BG_CanItemBeGrabbed +proc BG_CanItemBeGrabbed 76 8 +line 1575 +;1566: +;1567:/* +;1568:================ +;1569:BG_CanItemBeGrabbed +;1570: +;1571:Returns false if the item should not be picked up. +;1572:This needs to be the same for client side prediction and server use. +;1573:================ +;1574:*/ +;1575:qboolean BG_CanItemBeGrabbed( int gametype, const entityState_t *ent, const playerState_t *ps ) { +line 1578 +;1576: gitem_t *item; +;1577: +;1578: if ( ent->modelindex < 1 || ent->modelindex >= bg_numItems ) { +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 212 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +LTI4 $538 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_numItems +INDIRI4 +LTI4 $536 +LABELV $538 +line 1579 +;1579: Com_Error( ERR_DROP, "BG_CanItemBeGrabbed: index out of range" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $539 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1580 +;1580: } +LABELV $536 +line 1582 +;1581: +;1582: item = &bg_itemlist[ent->modelindex]; +ADDRLP4 0 +CNSTI4 52 +ADDRFP4 4 +INDIRP4 +CNSTI4 212 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist +ADDP4 +ASGNP4 +line 1584 +;1583: +;1584: if (ps && ps->isJediMaster && item && (item->giType == IT_WEAPON || item->giType == IT_AMMO)) +ADDRLP4 8 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTU4 0 +ASGNU4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +ADDRLP4 12 +INDIRU4 +EQU4 $540 +ADDRLP4 8 +INDIRP4 +CNSTI4 604 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $540 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 12 +INDIRU4 +EQU4 $540 +ADDRLP4 20 +ADDRLP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 1 +EQI4 $542 +ADDRLP4 20 +INDIRI4 +CNSTI4 2 +NEI4 $540 +LABELV $542 +line 1585 +;1585: { +line 1586 +;1586: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $540 +line 1589 +;1587: } +;1588: +;1589: if (ps && ps->duelInProgress) +ADDRLP4 24 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $543 +ADDRLP4 24 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $543 +line 1590 +;1590: { //no picking stuff up while in a duel, no matter what the type is +line 1591 +;1591: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $543 +line 1594 +;1592: } +;1593: +;1594: switch( item->giType ) { +ADDRLP4 28 +ADDRLP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +LTI4 $546 +ADDRLP4 28 +INDIRI4 +CNSTI4 8 +GTI4 $546 +ADDRLP4 28 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $597 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $597 +address $595 +address $548 +address $553 +address $556 +address $559 +address $569 +address $592 +address $546 +address $574 +code +LABELV $548 +line 1596 +;1595: case IT_WEAPON: +;1596: if (ent->generic1 == ps->clientNum && ent->powerups) +ADDRLP4 36 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +CNSTI4 292 +ADDP4 +INDIRI4 +ADDRFP4 8 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +NEI4 $549 +ADDRLP4 36 +INDIRP4 +CNSTI4 272 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $549 +line 1597 +;1597: { +line 1598 +;1598: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $549 +line 1600 +;1599: } +;1600: if (!(ent->eFlags & EF_DROPPEDWEAPON) && (ps->stats[STAT_WEAPONS] & (1 << item->giTag)) && +ADDRLP4 40 +CNSTI4 0 +ASGNI4 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CNSTI4 16777216 +BANDI4 +ADDRLP4 40 +INDIRI4 +NEI4 $551 +ADDRLP4 44 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ASGNI4 +ADDRFP4 8 +INDIRP4 +CNSTI4 232 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 44 +INDIRI4 +LSHI4 +BANDI4 +ADDRLP4 40 +INDIRI4 +EQI4 $551 +ADDRLP4 44 +INDIRI4 +CNSTI4 11 +EQI4 $551 +ADDRLP4 44 +INDIRI4 +CNSTI4 12 +EQI4 $551 +ADDRLP4 44 +INDIRI4 +CNSTI4 13 +EQI4 $551 +line 1602 +;1601: item->giTag != WP_THERMAL && item->giTag != WP_TRIP_MINE && item->giTag != WP_DET_PACK) +;1602: { //weaponstay stuff.. if this isn't dropped, and you already have it, you don't get it. +line 1603 +;1603: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $551 +line 1605 +;1604: } +;1605: return qtrue; // weapons are always picked up +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $553 +line 1608 +;1606: +;1607: case IT_AMMO: +;1608: if ( ps->ammo[item->giTag] >= ammoData[item->giTag].max) { +ADDRLP4 48 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +ADDRFP4 8 +INDIRP4 +CNSTI4 408 +ADDP4 +ADDP4 +INDIRI4 +ADDRLP4 48 +INDIRI4 +ADDRGP4 ammoData +ADDP4 +INDIRI4 +LTI4 $554 +line 1609 +;1609: return qfalse; // can't hold any more +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $554 +line 1611 +;1610: } +;1611: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $556 +line 1614 +;1612: +;1613: case IT_ARMOR: +;1614: if ( ps->stats[STAT_ARMOR] >= ps->stats[STAT_MAX_HEALTH] * item->giTag ) { +ADDRLP4 52 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CNSTI4 236 +ADDP4 +INDIRI4 +ADDRLP4 52 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +MULI4 +LTI4 $557 +line 1615 +;1615: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $557 +line 1617 +;1616: } +;1617: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $559 +line 1622 +;1618: +;1619: case IT_HEALTH: +;1620: // small and mega healths will go over the max, otherwise +;1621: // don't pick up if already at max +;1622: if ((ps->fd.forcePowersActive & (1 << FP_RAGE))) +ADDRFP4 8 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +CNSTI4 256 +BANDI4 +CNSTI4 0 +EQI4 $560 +line 1623 +;1623: { +line 1624 +;1624: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $560 +line 1627 +;1625: } +;1626: +;1627: if ( item->quantity == 5 || item->quantity == 100 ) { +ADDRLP4 56 +ADDRLP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 5 +EQI4 $564 +ADDRLP4 56 +INDIRI4 +CNSTI4 100 +NEI4 $562 +LABELV $564 +line 1628 +;1628: if ( ps->stats[STAT_HEALTH] >= ps->stats[STAT_MAX_HEALTH] * 2 ) { +ADDRLP4 60 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +CNSTI4 1 +LSHI4 +LTI4 $565 +line 1629 +;1629: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $565 +line 1631 +;1630: } +;1631: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $562 +line 1634 +;1632: } +;1633: +;1634: if ( ps->stats[STAT_HEALTH] >= ps->stats[STAT_MAX_HEALTH] ) { +ADDRLP4 60 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +LTI4 $567 +line 1635 +;1635: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $567 +line 1637 +;1636: } +;1637: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $569 +line 1640 +;1638: +;1639: case IT_POWERUP: +;1640: if (ps && (ps->powerups[PW_YSALAMIRI])) +ADDRLP4 64 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $570 +ADDRLP4 64 +INDIRP4 +CNSTI4 404 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $570 +line 1641 +;1641: { +line 1642 +;1642: if (item->giTag != PW_YSALAMIRI) +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 15 +EQI4 $572 +line 1643 +;1643: { +line 1644 +;1644: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $572 +line 1646 +;1645: } +;1646: } +LABELV $570 +line 1647 +;1647: return qtrue; // powerups are always picked up +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $574 +line 1650 +;1648: +;1649: case IT_TEAM: // team items, such as flags +;1650: if( gametype == GT_CTF || gametype == GT_CTY ) { +ADDRLP4 68 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 68 +INDIRI4 +CNSTI4 7 +EQI4 $577 +ADDRLP4 68 +INDIRI4 +CNSTI4 8 +NEI4 $575 +LABELV $577 +line 1654 +;1651: // ent->modelindex2 is non-zero on items if they are dropped +;1652: // we need to know this because we can pick up our dropped flag (and return it) +;1653: // but we can't pick up our flag at base +;1654: if (ps->persistant[PERS_TEAM] == TEAM_RED) { +ADDRFP4 8 +INDIRP4 +CNSTI4 292 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $578 +line 1655 +;1655: if (item->giTag == PW_BLUEFLAG || +ADDRLP4 72 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 5 +EQI4 $583 +ADDRLP4 72 +INDIRI4 +CNSTI4 4 +NEI4 $584 +ADDRFP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $583 +LABELV $584 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 4 +NEI4 $579 +ADDRFP4 8 +INDIRP4 +CNSTI4 364 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $579 +LABELV $583 +line 1658 +;1656: (item->giTag == PW_REDFLAG && ent->modelindex2) || +;1657: (item->giTag == PW_REDFLAG && ps->powerups[PW_BLUEFLAG]) ) +;1658: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +line 1659 +;1659: } else if (ps->persistant[PERS_TEAM] == TEAM_BLUE) { +LABELV $578 +ADDRFP4 8 +INDIRP4 +CNSTI4 292 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $585 +line 1660 +;1660: if (item->giTag == PW_REDFLAG || +ADDRLP4 72 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 4 +EQI4 $590 +ADDRLP4 72 +INDIRI4 +CNSTI4 5 +NEI4 $591 +ADDRFP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $590 +LABELV $591 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 5 +NEI4 $587 +ADDRFP4 8 +INDIRP4 +CNSTI4 360 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $587 +LABELV $590 +line 1663 +;1661: (item->giTag == PW_BLUEFLAG && ent->modelindex2) || +;1662: (item->giTag == PW_BLUEFLAG && ps->powerups[PW_REDFLAG]) ) +;1663: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $587 +line 1664 +;1664: } +LABELV $585 +LABELV $579 +line 1665 +;1665: } +LABELV $575 +line 1667 +;1666: +;1667: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $592 +line 1670 +;1668: +;1669: case IT_HOLDABLE: +;1670: if ( ps->stats[STAT_HOLDABLE_ITEMS] & (1 << item->giTag)) +ADDRFP4 8 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $593 +line 1671 +;1671: { +line 1672 +;1672: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $593 +line 1674 +;1673: } +;1674: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $595 +line 1677 +;1675: +;1676: case IT_BAD: +;1677: Com_Error( ERR_DROP, "BG_CanItemBeGrabbed: IT_BAD" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $596 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1684 +;1678: default: +;1679:#ifndef Q3_VM +;1680:#ifndef NDEBUG // bk0001204 +;1681: Com_Printf("BG_CanItemBeGrabbed: unknown enum %d\n", item->giType ); +;1682:#endif +;1683:#endif +;1684: break; +LABELV $546 +line 1687 +;1685: } +;1686: +;1687: return qfalse; +CNSTI4 0 +RETI4 +LABELV $535 +endproc BG_CanItemBeGrabbed 76 8 +export BG_EvaluateTrajectory +proc BG_EvaluateTrajectory 84 12 +line 1698 +;1688:} +;1689: +;1690://====================================================================== +;1691: +;1692:/* +;1693:================ +;1694:BG_EvaluateTrajectory +;1695: +;1696:================ +;1697:*/ +;1698:void BG_EvaluateTrajectory( const trajectory_t *tr, int atTime, vec3_t result ) { +line 1702 +;1699: float deltaTime; +;1700: float phase; +;1701: +;1702: switch( tr->trType ) { +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +LTI4 $599 +ADDRLP4 8 +INDIRI4 +CNSTI4 5 +GTI4 $599 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $612 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $612 +address $602 +address $602 +address $603 +address $605 +address $604 +address $610 +code +LABELV $602 +line 1705 +;1703: case TR_STATIONARY: +;1704: case TR_INTERPOLATE: +;1705: VectorCopy( tr->trBase, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRB +ASGNB 12 +line 1706 +;1706: break; +ADDRGP4 $600 +JUMPV +LABELV $603 +line 1708 +;1707: case TR_LINEAR: +;1708: deltaTime = ( atTime - tr->trTime ) * 0.001; // milliseconds to seconds +ADDRLP4 0 +CNSTF4 981668463 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1709 +;1709: VectorMA( tr->trBase, deltaTime, tr->trDelta, result ); +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 20 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1710 +;1710: break; +ADDRGP4 $600 +JUMPV +LABELV $604 +line 1712 +;1711: case TR_SINE: +;1712: deltaTime = ( atTime - tr->trTime ) / (float) tr->trDuration; +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +ADDRLP4 28 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +ADDRLP4 28 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CVIF4 4 +DIVF4 +ASGNF4 +line 1713 +;1713: phase = sin( deltaTime * M_PI * 2 ); +CNSTF4 1073741824 +CNSTF4 1078530011 +ADDRLP4 0 +INDIRF4 +MULF4 +MULF4 +ARGF4 +ADDRLP4 32 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRLP4 4 +ADDRLP4 32 +INDIRF4 +ASGNF4 +line 1714 +;1714: VectorMA( tr->trBase, phase, tr->trDelta, result ); +ADDRLP4 36 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 36 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 40 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 40 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 44 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 44 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 44 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1715 +;1715: break; +ADDRGP4 $600 +JUMPV +LABELV $605 +line 1717 +;1716: case TR_LINEAR_STOP: +;1717: if ( atTime > tr->trTime + tr->trDuration ) { +ADDRLP4 48 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 48 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDRLP4 48 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +ADDI4 +LEI4 $606 +line 1718 +;1718: atTime = tr->trTime + tr->trDuration; +ADDRLP4 52 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 52 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDRLP4 52 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 1719 +;1719: } +LABELV $606 +line 1720 +;1720: deltaTime = ( atTime - tr->trTime ) * 0.001; // milliseconds to seconds +ADDRLP4 0 +CNSTF4 981668463 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1721 +;1721: if ( deltaTime < 0 ) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $608 +line 1722 +;1722: deltaTime = 0; +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +line 1723 +;1723: } +LABELV $608 +line 1724 +;1724: VectorMA( tr->trBase, deltaTime, tr->trDelta, result ); +ADDRLP4 52 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 52 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 52 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 56 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 56 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 56 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 60 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 60 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1725 +;1725: break; +ADDRGP4 $600 +JUMPV +LABELV $610 +line 1727 +;1726: case TR_GRAVITY: +;1727: deltaTime = ( atTime - tr->trTime ) * 0.001; // milliseconds to seconds +ADDRLP4 0 +CNSTF4 981668463 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1728 +;1728: VectorMA( tr->trBase, deltaTime, tr->trDelta, result ); +ADDRLP4 64 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 64 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 64 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 68 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 68 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 68 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 72 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 72 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 72 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1729 +;1729: result[2] -= 0.5 * DEFAULT_GRAVITY * deltaTime * deltaTime; // FIXME: local gravity... +ADDRLP4 76 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 80 +ADDRLP4 0 +INDIRF4 +ASGNF4 +ADDRLP4 76 +INDIRP4 +ADDRLP4 76 +INDIRP4 +INDIRF4 +CNSTF4 1137180672 +ADDRLP4 80 +INDIRF4 +MULF4 +ADDRLP4 80 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 1730 +;1730: break; +ADDRGP4 $600 +JUMPV +LABELV $599 +line 1735 +;1731: default: +;1732:#ifdef QAGAME +;1733: Com_Error( ERR_DROP, "BG_EvaluateTrajectory: [GAME SIDE] unknown trType: %i", tr->trType ); +;1734:#else +;1735: Com_Error( ERR_DROP, "BG_EvaluateTrajectory: [CLIENTGAME SIDE] unknown trType: %i", tr->trType ); +CNSTI4 1 +ARGI4 +ADDRGP4 $611 +ARGP4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 1737 +;1736:#endif +;1737: break; +LABELV $600 +line 1739 +;1738: } +;1739:} +LABELV $598 +endproc BG_EvaluateTrajectory 84 12 +export BG_EvaluateTrajectoryDelta +proc BG_EvaluateTrajectoryDelta 44 12 +line 1748 +;1740: +;1741:/* +;1742:================ +;1743:BG_EvaluateTrajectoryDelta +;1744: +;1745:For determining velocity at a given time +;1746:================ +;1747:*/ +;1748:void BG_EvaluateTrajectoryDelta( const trajectory_t *tr, int atTime, vec3_t result ) { +line 1752 +;1749: float deltaTime; +;1750: float phase; +;1751: +;1752: switch( tr->trType ) { +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +LTI4 $614 +ADDRLP4 8 +INDIRI4 +CNSTI4 5 +GTI4 $614 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $625 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $625 +address $617 +address $617 +address $618 +address $620 +address $619 +address $623 +code +LABELV $617 +line 1755 +;1753: case TR_STATIONARY: +;1754: case TR_INTERPOLATE: +;1755: VectorClear( result ); +ADDRLP4 16 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 20 +CNSTF4 0 +ASGNF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +line 1756 +;1756: break; +ADDRGP4 $615 +JUMPV +LABELV $618 +line 1758 +;1757: case TR_LINEAR: +;1758: VectorCopy( tr->trDelta, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 1759 +;1759: break; +ADDRGP4 $615 +JUMPV +LABELV $619 +line 1761 +;1760: case TR_SINE: +;1761: deltaTime = ( atTime - tr->trTime ) / (float) tr->trDuration; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +ADDRLP4 24 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CVIF4 4 +DIVF4 +ASGNF4 +line 1762 +;1762: phase = cos( deltaTime * M_PI * 2 ); // derivative of sin = cos +CNSTF4 1073741824 +CNSTF4 1078530011 +ADDRLP4 4 +INDIRF4 +MULF4 +MULF4 +ARGF4 +ADDRLP4 28 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 1763 +;1763: phase *= 0.5; +ADDRLP4 0 +CNSTF4 1056964608 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 1764 +;1764: VectorScale( tr->trDelta, phase, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 1765 +;1765: break; +ADDRGP4 $615 +JUMPV +LABELV $620 +line 1767 +;1766: case TR_LINEAR_STOP: +;1767: if ( atTime > tr->trTime + tr->trDuration ) { +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 32 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDRLP4 32 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +ADDI4 +LEI4 $621 +line 1768 +;1768: VectorClear( result ); +ADDRLP4 36 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 40 +CNSTF4 0 +ASGNF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 40 +INDIRF4 +ASGNF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 40 +INDIRF4 +ASGNF4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 40 +INDIRF4 +ASGNF4 +line 1769 +;1769: return; +ADDRGP4 $613 +JUMPV +LABELV $621 +line 1771 +;1770: } +;1771: VectorCopy( tr->trDelta, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 1772 +;1772: break; +ADDRGP4 $615 +JUMPV +LABELV $623 +line 1774 +;1773: case TR_GRAVITY: +;1774: deltaTime = ( atTime - tr->trTime ) * 0.001; // milliseconds to seconds +ADDRLP4 4 +CNSTF4 981668463 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1775 +;1775: VectorCopy( tr->trDelta, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 1776 +;1776: result[2] -= DEFAULT_GRAVITY * deltaTime; // FIXME: local gravity... +ADDRLP4 36 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 36 +INDIRP4 +INDIRF4 +CNSTF4 1145569280 +ADDRLP4 4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 1777 +;1777: break; +ADDRGP4 $615 +JUMPV +LABELV $614 +line 1779 +;1778: default: +;1779: Com_Error( ERR_DROP, "BG_EvaluateTrajectoryDelta: unknown trType: %i", tr->trTime ); +CNSTI4 1 +ARGI4 +ADDRGP4 $624 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 1780 +;1780: break; +LABELV $615 +line 1782 +;1781: } +;1782:} +LABELV $613 +endproc BG_EvaluateTrajectoryDelta 44 12 +data +export eventnames +align 4 +LABELV eventnames +address $626 +address $627 +address $628 +address $629 +address $630 +address $631 +address $632 +address $633 +address $634 +address $635 +address $636 +address $637 +address $638 +address $639 +address $640 +address $641 +address $642 +address $643 +address $644 +address $645 +address $646 +address $647 +address $648 +address $649 +address $650 +address $651 +address $652 +address $653 +address $654 +address $655 +address $656 +address $657 +address $658 +address $659 +address $660 +address $661 +address $662 +address $663 +address $664 +address $665 +address $666 +address $667 +address $668 +address $669 +address $670 +address $671 +address $672 +address $673 +address $674 +address $675 +address $676 +address $677 +address $678 +address $679 +address $680 +address $681 +address $682 +address $683 +address $684 +address $685 +address $686 +address $687 +address $688 +address $689 +address $690 +address $691 +address $692 +address $693 +address $694 +address $695 +address $696 +address $697 +address $698 +address $699 +address $700 +address $701 +address $702 +address $703 +address $704 +address $705 +address $706 +address $707 +address $708 +address $709 +address $710 +address $711 +address $712 +address $713 +address $714 +address $715 +address $716 +address $717 +address $718 +address $719 +address $720 +address $721 +address $722 +address $723 +address $724 +address $725 +address $726 +address $727 +address $728 +address $729 +address $730 +address $731 +address $732 +address $733 +address $734 +address $735 +export BG_AddPredictableEventToPlayerstate +code +proc BG_AddPredictableEventToPlayerstate 12 0 +line 1945 +;1783: +;1784:char *eventnames[] = { +;1785: "EV_NONE", +;1786: +;1787: "EV_CLIENTJOIN", +;1788: +;1789: "EV_FOOTSTEP", +;1790: "EV_FOOTSTEP_METAL", +;1791: "EV_FOOTSPLASH", +;1792: "EV_FOOTWADE", +;1793: "EV_SWIM", +;1794: +;1795: "EV_STEP_4", +;1796: "EV_STEP_8", +;1797: "EV_STEP_12", +;1798: "EV_STEP_16", +;1799: +;1800: "EV_FALL", +;1801: +;1802: "EV_JUMP_PAD", // boing sound at origin", jump sound on player +;1803: +;1804: "EV_PRIVATE_DUEL", +;1805: +;1806: "EV_JUMP", +;1807: "EV_ROLL", +;1808: "EV_WATER_TOUCH", // foot touches +;1809: "EV_WATER_LEAVE", // foot leaves +;1810: "EV_WATER_UNDER", // head touches +;1811: "EV_WATER_CLEAR", // head leaves +;1812: +;1813: "EV_ITEM_PICKUP", // normal item pickups are predictable +;1814: "EV_GLOBAL_ITEM_PICKUP", // powerup / team sounds are broadcast to everyone +;1815: +;1816: "EV_NOAMMO", +;1817: "EV_CHANGE_WEAPON", +;1818: "EV_FIRE_WEAPON", +;1819: "EV_ALT_FIRE", +;1820: "EV_SABER_ATTACK", +;1821: "EV_SABER_HIT", +;1822: "EV_SABER_BLOCK", +;1823: "EV_SABER_UNHOLSTER", +;1824: "EV_BECOME_JEDIMASTER", +;1825: "EV_DISRUPTOR_MAIN_SHOT", +;1826: "EV_DISRUPTOR_SNIPER_SHOT", +;1827: "EV_DISRUPTOR_SNIPER_MISS", +;1828: "EV_DISRUPTOR_HIT", +;1829: "EV_DISRUPTOR_ZOOMSOUND", +;1830: +;1831: "EV_PREDEFSOUND", +;1832: +;1833: "EV_TEAM_POWER", +;1834: +;1835: "EV_SCREENSHAKE", +;1836: +;1837: "EV_USE", // +Use key +;1838: +;1839: "EV_USE_ITEM0", +;1840: "EV_USE_ITEM1", +;1841: "EV_USE_ITEM2", +;1842: "EV_USE_ITEM3", +;1843: "EV_USE_ITEM4", +;1844: "EV_USE_ITEM5", +;1845: "EV_USE_ITEM6", +;1846: "EV_USE_ITEM7", +;1847: "EV_USE_ITEM8", +;1848: "EV_USE_ITEM9", +;1849: "EV_USE_ITEM10", +;1850: "EV_USE_ITEM11", +;1851: "EV_USE_ITEM12", +;1852: "EV_USE_ITEM13", +;1853: "EV_USE_ITEM14", +;1854: "EV_USE_ITEM15", +;1855: +;1856: "EV_ITEMUSEFAIL", +;1857: +;1858: "EV_ITEM_RESPAWN", +;1859: "EV_ITEM_POP", +;1860: "EV_PLAYER_TELEPORT_IN", +;1861: "EV_PLAYER_TELEPORT_OUT", +;1862: +;1863: "EV_GRENADE_BOUNCE", // eventParm will be the soundindex +;1864: "EV_MISSILE_STICK", +;1865: +;1866: "EV_PLAY_EFFECT", +;1867: "EV_PLAY_EFFECT_ID", //finally gave in and added it.. +;1868: +;1869: "EV_MUTE_SOUND", +;1870: "EV_GENERAL_SOUND", +;1871: "EV_GLOBAL_SOUND", // no attenuation +;1872: "EV_GLOBAL_TEAM_SOUND", +;1873: "EV_ENTITY_SOUND", +;1874: +;1875: "EV_PLAY_ROFF", +;1876: +;1877: "EV_GLASS_SHATTER", +;1878: "EV_DEBRIS", +;1879: +;1880: "EV_MISSILE_HIT", +;1881: "EV_MISSILE_MISS", +;1882: "EV_MISSILE_MISS_METAL", +;1883: "EV_BULLET", // otherEntity is the shooter +;1884: +;1885: "EV_PAIN", +;1886: "EV_DEATH1", +;1887: "EV_DEATH2", +;1888: "EV_DEATH3", +;1889: "EV_OBITUARY", +;1890: +;1891: "EV_POWERUP_QUAD", +;1892: "EV_POWERUP_BATTLESUIT", +;1893: //"EV_POWERUP_REGEN", +;1894: +;1895: "EV_FORCE_DRAINED", +;1896: +;1897: "EV_GIB_PLAYER", // gib a previously living player +;1898: "EV_SCOREPLUM", // score plum +;1899: +;1900: "EV_CTFMESSAGE", +;1901: +;1902: "EV_SAGA_ROUNDOVER", +;1903: "EV_SAGA_OBJECTIVECOMPLETE", +;1904: +;1905: "EV_DESTROY_GHOUL2_INSTANCE", +;1906: +;1907: "EV_DESTROY_WEAPON_MODEL", +;1908: +;1909: "EV_GIVE_NEW_RANK", +;1910: "EV_SET_FREE_SABER", +;1911: "EV_SET_FORCE_DISABLE", +;1912: +;1913: "EV_WEAPON_CHARGE", +;1914: "EV_WEAPON_CHARGE_ALT", +;1915: +;1916: "EV_SHIELD_HIT", +;1917: +;1918: "EV_DEBUG_LINE", +;1919: "EV_TESTLINE", +;1920: "EV_STOPLOOPINGSOUND", +;1921: "EV_STARTLOOPINGSOUND", +;1922: "EV_TAUNT", +;1923: +;1924: "EV_TAUNT_YES", +;1925: "EV_TAUNT_NO", +;1926: "EV_TAUNT_FOLLOWME", +;1927: "EV_TAUNT_GETFLAG", +;1928: "EV_TAUNT_GUARDBASE", +;1929: "EV_TAUNT_PATROL", +;1930: +;1931: "EV_BODY_QUEUE_COPY" +;1932: +;1933:}; +;1934: +;1935:/* +;1936:=============== +;1937:BG_AddPredictableEventToPlayerstate +;1938: +;1939:Handles the sequence numbers +;1940:=============== +;1941:*/ +;1942: +;1943:void trap_Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize ); +;1944: +;1945:void BG_AddPredictableEventToPlayerstate( int newEvent, int eventParm, playerState_t *ps ) { +line 1960 +;1946: +;1947:#ifdef _DEBUG +;1948: { +;1949: char buf[256]; +;1950: trap_Cvar_VariableStringBuffer("showevents", buf, sizeof(buf)); +;1951: if ( atof(buf) != 0 ) { +;1952:#ifdef QAGAME +;1953: Com_Printf(" game event svt %5d -> %5d: num = %20s parm %d\n", ps->pmove_framecount/*ps->commandTime*/, ps->eventSequence, eventnames[newEvent], eventParm); +;1954:#else +;1955: Com_Printf("Cgame event svt %5d -> %5d: num = %20s parm %d\n", ps->pmove_framecount/*ps->commandTime*/, ps->eventSequence, eventnames[newEvent], eventParm); +;1956:#endif +;1957: } +;1958: } +;1959:#endif +;1960: ps->events[ps->eventSequence & (MAX_PS_EVENTS-1)] = newEvent; +ADDRLP4 0 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDP4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 1961 +;1961: ps->eventParms[ps->eventSequence & (MAX_PS_EVENTS-1)] = eventParm; +ADDRLP4 4 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 124 +ADDP4 +ADDP4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 1962 +;1962: ps->eventSequence++; +ADDRLP4 8 +ADDRFP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1963 +;1963:} +LABELV $736 +endproc BG_AddPredictableEventToPlayerstate 12 0 +export BG_TouchJumpPad +proc BG_TouchJumpPad 32 8 +line 1970 +;1964: +;1965:/* +;1966:======================== +;1967:BG_TouchJumpPad +;1968:======================== +;1969:*/ +;1970:void BG_TouchJumpPad( playerState_t *ps, entityState_t *jumppad ) { +line 1976 +;1971: vec3_t angles; +;1972: float p; +;1973: int effectNum; +;1974: +;1975: // spectators don't use jump pads +;1976: if ( ps->pm_type != PM_NORMAL && ps->pm_type != PM_FLOAT ) { +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +EQI4 $738 +ADDRLP4 20 +INDIRI4 +CNSTI4 1 +EQI4 $738 +line 1977 +;1977: return; +ADDRGP4 $737 +JUMPV +LABELV $738 +line 1982 +;1978: } +;1979: +;1980: // if we didn't hit this same jumppad the previous frame +;1981: // then don't play the event sound again if we are in a fat trigger +;1982: if ( ps->jumppad_ent != jumppad->number ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 480 +ADDP4 +INDIRI4 +ADDRFP4 4 +INDIRP4 +INDIRI4 +EQI4 $740 +line 1984 +;1983: +;1984: vectoangles( jumppad->origin2, angles); +ADDRFP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 vectoangles +CALLV +pop +line 1985 +;1985: p = fabs( AngleNormalize180( angles[PITCH] ) ); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleNormalize180 +CALLF4 +ASGNF4 +ADDRLP4 24 +INDIRF4 +ARGF4 +ADDRLP4 28 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 1986 +;1986: if( p < 45 ) { +ADDRLP4 12 +INDIRF4 +CNSTF4 1110704128 +GEF4 $742 +line 1987 +;1987: effectNum = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 1988 +;1988: } else { +ADDRGP4 $743 +JUMPV +LABELV $742 +line 1989 +;1989: effectNum = 1; +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +line 1990 +;1990: } +LABELV $743 +line 1992 +;1991: //BG_AddPredictableEventToPlayerstate( EV_JUMP_PAD, effectNum, ps ); +;1992: } +LABELV $740 +line 1994 +;1993: // remember hitting this jumppad this frame +;1994: ps->jumppad_ent = jumppad->number; +ADDRFP4 0 +INDIRP4 +CNSTI4 480 +ADDP4 +ADDRFP4 4 +INDIRP4 +INDIRI4 +ASGNI4 +line 1995 +;1995: ps->jumppad_frame = ps->pmove_framecount; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 492 +ADDP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 488 +ADDP4 +INDIRI4 +ASGNI4 +line 1997 +;1996: // give the player the velocity from the jumppad +;1997: VectorCopy( jumppad->origin2, ps->velocity ); +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRB +ASGNB 12 +line 1998 +;1998:} +LABELV $737 +endproc BG_TouchJumpPad 32 8 +export BG_PlayerStateToEntityState +proc BG_PlayerStateToEntityState 28 0 +line 2008 +;1999: +;2000:/* +;2001:======================== +;2002:BG_PlayerStateToEntityState +;2003: +;2004:This is done after each set of usercmd_t on the server, +;2005:and after local prediction on the client +;2006:======================== +;2007:*/ +;2008:void BG_PlayerStateToEntityState( playerState_t *ps, entityState_t *s, qboolean snap ) { +line 2011 +;2009: int i; +;2010: +;2011: if ( ps->pm_type == PM_INTERMISSION || ps->pm_type == PM_SPECTATOR ) { +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 6 +EQI4 $747 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +NEI4 $745 +LABELV $747 +line 2012 +;2012: s->eType = ET_INVISIBLE; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 12 +ASGNI4 +line 2013 +;2013: } else if ( ps->stats[STAT_HEALTH] <= GIB_HEALTH ) { +ADDRGP4 $746 +JUMPV +LABELV $745 +ADDRFP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 -40 +GTI4 $748 +line 2014 +;2014: s->eType = ET_INVISIBLE; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 12 +ASGNI4 +line 2015 +;2015: } else { +ADDRGP4 $749 +JUMPV +LABELV $748 +line 2016 +;2016: s->eType = ET_PLAYER; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2017 +;2017: } +LABELV $749 +LABELV $746 +line 2019 +;2018: +;2019: s->number = ps->clientNum; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 2021 +;2020: +;2021: s->pos.trType = TR_INTERPOLATE; +ADDRFP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2022 +;2022: VectorCopy( ps->origin, s->pos.trBase ); +ADDRFP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 2023 +;2023: if ( snap ) { +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $750 +line 2024 +;2024: SnapVector( s->pos.trBase ); +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 32 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +line 2025 +;2025: } +LABELV $750 +line 2027 +;2026: // set the trDelta for flag direction +;2027: VectorCopy( ps->velocity, s->pos.trDelta ); +ADDRFP4 4 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 2029 +;2028: +;2029: s->apos.trType = TR_INTERPOLATE; +ADDRFP4 4 +INDIRP4 +CNSTI4 48 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2030 +;2030: VectorCopy( ps->viewangles, s->apos.trBase ); +ADDRFP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 2031 +;2031: if ( snap ) { +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $752 +line 2032 +;2032: SnapVector( s->apos.trBase ); +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 64 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 68 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +line 2033 +;2033: } +LABELV $752 +line 2035 +;2034: +;2035: s->trickedentindex = ps->fd.forceMindtrickTargetIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 148 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1144 +ADDP4 +INDIRI4 +ASGNI4 +line 2036 +;2036: s->trickedentindex2 = ps->fd.forceMindtrickTargetIndex2; +ADDRFP4 4 +INDIRP4 +CNSTI4 152 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1148 +ADDP4 +INDIRI4 +ASGNI4 +line 2037 +;2037: s->trickedentindex3 = ps->fd.forceMindtrickTargetIndex3; +ADDRFP4 4 +INDIRP4 +CNSTI4 156 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1152 +ADDP4 +INDIRI4 +ASGNI4 +line 2038 +;2038: s->trickedentindex4 = ps->fd.forceMindtrickTargetIndex4; +ADDRFP4 4 +INDIRP4 +CNSTI4 160 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1156 +ADDP4 +INDIRI4 +ASGNI4 +line 2040 +;2039: +;2040: s->forceFrame = ps->saberLockFrame; +ADDRFP4 4 +INDIRP4 +CNSTI4 288 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +ASGNI4 +line 2042 +;2041: +;2042: s->emplacedOwner = ps->electrifyTime; +ADDRFP4 4 +INDIRP4 +CNSTI4 180 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRI4 +ASGNI4 +line 2044 +;2043: +;2044: s->speed = ps->speed; +ADDRFP4 4 +INDIRP4 +CNSTI4 164 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 60 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 2046 +;2045: +;2046: s->genericenemyindex = ps->genericEnemyIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 172 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +INDIRI4 +ASGNI4 +line 2048 +;2047: +;2048: s->activeForcePass = ps->activeForcePass; +ADDRFP4 4 +INDIRP4 +CNSTI4 176 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 624 +ADDP4 +INDIRI4 +ASGNI4 +line 2050 +;2049: +;2050: s->angles2[YAW] = ps->movementDir; +ADDRFP4 4 +INDIRP4 +CNSTI4 132 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 2051 +;2051: s->legsAnim = ps->legsAnim; +ADDRFP4 4 +INDIRP4 +CNSTI4 280 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ASGNI4 +line 2052 +;2052: s->torsoAnim = ps->torsoAnim; +ADDRFP4 4 +INDIRP4 +CNSTI4 284 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +ASGNI4 +line 2053 +;2053: s->clientNum = ps->clientNum; // ET_PLAYER looks here instead of at number +ADDRFP4 4 +INDIRP4 +CNSTI4 220 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 2055 +;2054: // so corpses can also reference the proper config +;2055: s->eFlags = ps->eFlags; +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +ASGNI4 +line 2057 +;2056: +;2057: s->saberInFlight = ps->saberInFlight; +ADDRFP4 4 +INDIRP4 +CNSTI4 228 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 504 +ADDP4 +INDIRI4 +ASGNI4 +line 2058 +;2058: s->saberEntityNum = ps->saberEntityNum; +ADDRFP4 4 +INDIRP4 +CNSTI4 232 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 544 +ADDP4 +INDIRI4 +ASGNI4 +line 2059 +;2059: s->saberMove = ps->saberMove; +ADDRFP4 4 +INDIRP4 +CNSTI4 236 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ASGNI4 +line 2060 +;2060: s->forcePowersActive = ps->fd.forcePowersActive; +ADDRFP4 4 +INDIRP4 +CNSTI4 240 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +ASGNI4 +line 2062 +;2061: +;2062: if (ps->duelInProgress) +ADDRFP4 0 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $754 +line 2063 +;2063: { +line 2064 +;2064: s->bolt1 = 1; +ADDRFP4 4 +INDIRP4 +CNSTI4 140 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2065 +;2065: } +ADDRGP4 $755 +JUMPV +LABELV $754 +line 2067 +;2066: else +;2067: { +line 2068 +;2068: s->bolt1 = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 140 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2069 +;2069: } +LABELV $755 +line 2071 +;2070: +;2071: if (ps->dualBlade) +ADDRFP4 0 +INDIRP4 +CNSTI4 1352 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $756 +line 2072 +;2072: { +line 2073 +;2073: s->bolt2 = 1; +ADDRFP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2074 +;2074: } +ADDRGP4 $757 +JUMPV +LABELV $756 +line 2076 +;2075: else +;2076: { +line 2077 +;2077: s->bolt2 = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2078 +;2078: } +LABELV $757 +line 2080 +;2079: +;2080: s->otherEntityNum2 = ps->emplacedIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 188 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 596 +ADDP4 +INDIRI4 +ASGNI4 +line 2082 +;2081: +;2082: s->shouldtarget = ps->saberHolstered; //reuse bool in entitystate for players differently +ADDRFP4 4 +INDIRP4 +CNSTI4 268 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1300 +ADDP4 +INDIRI4 +ASGNI4 +line 2083 +;2083: s->teamowner = ps->usingATST; +ADDRFP4 4 +INDIRP4 +CNSTI4 264 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1304 +ADDP4 +INDIRI4 +ASGNI4 +line 2085 +;2084: +;2085: if (ps->genericEnemyIndex != -1) +ADDRFP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +INDIRI4 +CNSTI4 -1 +EQI4 $758 +line 2086 +;2086: { +line 2087 +;2087: s->eFlags |= EF_SEEKERDRONE; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1048576 +BORI4 +ASGNI4 +line 2088 +;2088: } +LABELV $758 +line 2090 +;2089: +;2090: if ( ps->stats[STAT_HEALTH] <= 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $760 +line 2091 +;2091: s->eFlags |= EF_DEAD; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +BORI4 +ASGNI4 +line 2092 +;2092: } else { +ADDRGP4 $761 +JUMPV +LABELV $760 +line 2093 +;2093: s->eFlags &= ~EF_DEAD; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 -2 +BANDI4 +ASGNI4 +line 2094 +;2094: } +LABELV $761 +line 2096 +;2095: +;2096: if ( ps->externalEvent ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $762 +line 2097 +;2097: s->event = ps->externalEvent; +ADDRFP4 4 +INDIRP4 +CNSTI4 252 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +ASGNI4 +line 2098 +;2098: s->eventParm = ps->externalEventParm; +ADDRFP4 4 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 136 +ADDP4 +INDIRI4 +ASGNI4 +line 2099 +;2099: } else if ( ps->entityEventSequence < ps->eventSequence ) { +ADDRGP4 $763 +JUMPV +LABELV $762 +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +GEI4 $764 +line 2102 +;2100: int seq; +;2101: +;2102: if ( ps->entityEventSequence < ps->eventSequence - MAX_PS_EVENTS) { +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +GEI4 $766 +line 2103 +;2103: ps->entityEventSequence = ps->eventSequence - MAX_PS_EVENTS; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +ASGNI4 +line 2104 +;2104: } +LABELV $766 +line 2105 +;2105: seq = ps->entityEventSequence & (MAX_PS_EVENTS-1); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +ASGNI4 +line 2106 +;2106: s->event = ps->events[ seq ] | ( ( ps->entityEventSequence & 3 ) << 8 ); +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 252 +ADDP4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 3 +BANDI4 +CNSTI4 8 +LSHI4 +BORI4 +ASGNI4 +line 2107 +;2107: s->eventParm = ps->eventParms[ seq ]; +ADDRFP4 4 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 124 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 2108 +;2108: ps->entityEventSequence++; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2109 +;2109: } +LABELV $764 +LABELV $763 +line 2112 +;2110: +;2111: +;2112: s->weapon = ps->weapon; +ADDRFP4 4 +INDIRP4 +CNSTI4 276 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +ASGNI4 +line 2113 +;2113: s->groundEntityNum = ps->groundEntityNum; +ADDRFP4 4 +INDIRP4 +CNSTI4 192 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 84 +ADDP4 +INDIRI4 +ASGNI4 +line 2115 +;2114: +;2115: s->powerups = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 272 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2116 +;2116: for ( i = 0 ; i < MAX_POWERUPS ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $768 +line 2117 +;2117: if ( ps->powerups[ i ] ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 344 +ADDP4 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $772 +line 2118 +;2118: s->powerups |= 1 << i; +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 272 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BORI4 +ASGNI4 +line 2119 +;2119: } +LABELV $772 +line 2120 +;2120: } +LABELV $769 +line 2116 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $768 +line 2122 +;2121: +;2122: s->loopSound = ps->loopSound; +ADDRFP4 4 +INDIRP4 +CNSTI4 200 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 476 +ADDP4 +INDIRI4 +ASGNI4 +line 2123 +;2123: s->generic1 = ps->generic1; +ADDRFP4 4 +INDIRP4 +CNSTI4 292 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +ASGNI4 +line 2126 +;2124: +;2125: //NOT INCLUDED IN ENTITYSTATETOPLAYERSTATE: +;2126: s->modelindex2 = ps->weaponstate; +ADDRFP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +ASGNI4 +line 2127 +;2127: s->constantLight = ps->weaponChargeTime; +ADDRFP4 4 +INDIRP4 +CNSTI4 196 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 48 +ADDP4 +INDIRI4 +ASGNI4 +line 2129 +;2128: +;2129: VectorCopy(ps->lastHitLoc, s->origin2); +ADDRFP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1356 +ADDP4 +INDIRB +ASGNB 12 +line 2131 +;2130: +;2131: s->isJediMaster = ps->isJediMaster; +ADDRFP4 4 +INDIRP4 +CNSTI4 244 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 604 +ADDP4 +INDIRI4 +ASGNI4 +line 2133 +;2132: +;2133: s->time2 = ps->holocronBits; +ADDRFP4 4 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 712 +ADDP4 +INDIRI4 +ASGNI4 +line 2134 +;2134:} +LABELV $744 +endproc BG_PlayerStateToEntityState 28 0 +export BG_PlayerStateToEntityStateExtraPolate +proc BG_PlayerStateToEntityStateExtraPolate 28 0 +line 2144 +;2135: +;2136:/* +;2137:======================== +;2138:BG_PlayerStateToEntityStateExtraPolate +;2139: +;2140:This is done after each set of usercmd_t on the server, +;2141:and after local prediction on the client +;2142:======================== +;2143:*/ +;2144:void BG_PlayerStateToEntityStateExtraPolate( playerState_t *ps, entityState_t *s, int time, qboolean snap ) { +line 2147 +;2145: int i; +;2146: +;2147: if ( ps->pm_type == PM_INTERMISSION || ps->pm_type == PM_SPECTATOR ) { +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 6 +EQI4 $777 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +NEI4 $775 +LABELV $777 +line 2148 +;2148: s->eType = ET_INVISIBLE; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 12 +ASGNI4 +line 2149 +;2149: } else if ( ps->stats[STAT_HEALTH] <= GIB_HEALTH ) { +ADDRGP4 $776 +JUMPV +LABELV $775 +ADDRFP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 -40 +GTI4 $778 +line 2150 +;2150: s->eType = ET_INVISIBLE; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 12 +ASGNI4 +line 2151 +;2151: } else { +ADDRGP4 $779 +JUMPV +LABELV $778 +line 2152 +;2152: s->eType = ET_PLAYER; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2153 +;2153: } +LABELV $779 +LABELV $776 +line 2155 +;2154: +;2155: s->number = ps->clientNum; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 2157 +;2156: +;2157: s->pos.trType = TR_LINEAR_STOP; +ADDRFP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 3 +ASGNI4 +line 2158 +;2158: VectorCopy( ps->origin, s->pos.trBase ); +ADDRFP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 2159 +;2159: if ( snap ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $780 +line 2160 +;2160: SnapVector( s->pos.trBase ); +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 32 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +line 2161 +;2161: } +LABELV $780 +line 2163 +;2162: // set the trDelta for flag direction and linear prediction +;2163: VectorCopy( ps->velocity, s->pos.trDelta ); +ADDRFP4 4 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 2165 +;2164: // set the time for linear prediction +;2165: s->pos.trTime = time; +ADDRFP4 4 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRFP4 8 +INDIRI4 +ASGNI4 +line 2167 +;2166: // set maximum extra polation time +;2167: s->pos.trDuration = 50; // 1000 / sv_fps (default = 20) +ADDRFP4 4 +INDIRP4 +CNSTI4 20 +ADDP4 +CNSTI4 50 +ASGNI4 +line 2169 +;2168: +;2169: s->apos.trType = TR_INTERPOLATE; +ADDRFP4 4 +INDIRP4 +CNSTI4 48 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2170 +;2170: VectorCopy( ps->viewangles, s->apos.trBase ); +ADDRFP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 2171 +;2171: if ( snap ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $782 +line 2172 +;2172: SnapVector( s->apos.trBase ); +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 64 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 68 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +line 2173 +;2173: } +LABELV $782 +line 2175 +;2174: +;2175: s->trickedentindex = ps->fd.forceMindtrickTargetIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 148 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1144 +ADDP4 +INDIRI4 +ASGNI4 +line 2176 +;2176: s->trickedentindex2 = ps->fd.forceMindtrickTargetIndex2; +ADDRFP4 4 +INDIRP4 +CNSTI4 152 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1148 +ADDP4 +INDIRI4 +ASGNI4 +line 2177 +;2177: s->trickedentindex3 = ps->fd.forceMindtrickTargetIndex3; +ADDRFP4 4 +INDIRP4 +CNSTI4 156 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1152 +ADDP4 +INDIRI4 +ASGNI4 +line 2178 +;2178: s->trickedentindex4 = ps->fd.forceMindtrickTargetIndex4; +ADDRFP4 4 +INDIRP4 +CNSTI4 160 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1156 +ADDP4 +INDIRI4 +ASGNI4 +line 2180 +;2179: +;2180: s->forceFrame = ps->saberLockFrame; +ADDRFP4 4 +INDIRP4 +CNSTI4 288 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +ASGNI4 +line 2182 +;2181: +;2182: s->emplacedOwner = ps->electrifyTime; +ADDRFP4 4 +INDIRP4 +CNSTI4 180 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRI4 +ASGNI4 +line 2184 +;2183: +;2184: s->speed = ps->speed; +ADDRFP4 4 +INDIRP4 +CNSTI4 164 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 60 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 2186 +;2185: +;2186: s->genericenemyindex = ps->genericEnemyIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 172 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +INDIRI4 +ASGNI4 +line 2188 +;2187: +;2188: s->activeForcePass = ps->activeForcePass; +ADDRFP4 4 +INDIRP4 +CNSTI4 176 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 624 +ADDP4 +INDIRI4 +ASGNI4 +line 2190 +;2189: +;2190: s->angles2[YAW] = ps->movementDir; +ADDRFP4 4 +INDIRP4 +CNSTI4 132 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 2191 +;2191: s->legsAnim = ps->legsAnim; +ADDRFP4 4 +INDIRP4 +CNSTI4 280 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ASGNI4 +line 2192 +;2192: s->torsoAnim = ps->torsoAnim; +ADDRFP4 4 +INDIRP4 +CNSTI4 284 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +ASGNI4 +line 2193 +;2193: s->clientNum = ps->clientNum; // ET_PLAYER looks here instead of at number +ADDRFP4 4 +INDIRP4 +CNSTI4 220 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 2195 +;2194: // so corpses can also reference the proper config +;2195: s->eFlags = ps->eFlags; +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +ASGNI4 +line 2197 +;2196: +;2197: s->saberInFlight = ps->saberInFlight; +ADDRFP4 4 +INDIRP4 +CNSTI4 228 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 504 +ADDP4 +INDIRI4 +ASGNI4 +line 2198 +;2198: s->saberEntityNum = ps->saberEntityNum; +ADDRFP4 4 +INDIRP4 +CNSTI4 232 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 544 +ADDP4 +INDIRI4 +ASGNI4 +line 2199 +;2199: s->saberMove = ps->saberMove; +ADDRFP4 4 +INDIRP4 +CNSTI4 236 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ASGNI4 +line 2200 +;2200: s->forcePowersActive = ps->fd.forcePowersActive; +ADDRFP4 4 +INDIRP4 +CNSTI4 240 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +ASGNI4 +line 2202 +;2201: +;2202: if (ps->duelInProgress) +ADDRFP4 0 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $784 +line 2203 +;2203: { +line 2204 +;2204: s->bolt1 = 1; +ADDRFP4 4 +INDIRP4 +CNSTI4 140 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2205 +;2205: } +ADDRGP4 $785 +JUMPV +LABELV $784 +line 2207 +;2206: else +;2207: { +line 2208 +;2208: s->bolt1 = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 140 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2209 +;2209: } +LABELV $785 +line 2211 +;2210: +;2211: if (ps->dualBlade) +ADDRFP4 0 +INDIRP4 +CNSTI4 1352 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $786 +line 2212 +;2212: { +line 2213 +;2213: s->bolt2 = 1; +ADDRFP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2214 +;2214: } +ADDRGP4 $787 +JUMPV +LABELV $786 +line 2216 +;2215: else +;2216: { +line 2217 +;2217: s->bolt2 = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2218 +;2218: } +LABELV $787 +line 2220 +;2219: +;2220: s->otherEntityNum2 = ps->emplacedIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 188 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 596 +ADDP4 +INDIRI4 +ASGNI4 +line 2222 +;2221: +;2222: s->shouldtarget = ps->saberHolstered; //reuse bool in entitystate for players differently +ADDRFP4 4 +INDIRP4 +CNSTI4 268 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1300 +ADDP4 +INDIRI4 +ASGNI4 +line 2223 +;2223: s->teamowner = ps->usingATST; +ADDRFP4 4 +INDIRP4 +CNSTI4 264 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1304 +ADDP4 +INDIRI4 +ASGNI4 +line 2225 +;2224: +;2225: if (ps->genericEnemyIndex != -1) +ADDRFP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +INDIRI4 +CNSTI4 -1 +EQI4 $788 +line 2226 +;2226: { +line 2227 +;2227: s->eFlags |= EF_SEEKERDRONE; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1048576 +BORI4 +ASGNI4 +line 2228 +;2228: } +LABELV $788 +line 2230 +;2229: +;2230: if ( ps->stats[STAT_HEALTH] <= 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $790 +line 2231 +;2231: s->eFlags |= EF_DEAD; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +BORI4 +ASGNI4 +line 2232 +;2232: } else { +ADDRGP4 $791 +JUMPV +LABELV $790 +line 2233 +;2233: s->eFlags &= ~EF_DEAD; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 -2 +BANDI4 +ASGNI4 +line 2234 +;2234: } +LABELV $791 +line 2236 +;2235: +;2236: if ( ps->externalEvent ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $792 +line 2237 +;2237: s->event = ps->externalEvent; +ADDRFP4 4 +INDIRP4 +CNSTI4 252 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +ASGNI4 +line 2238 +;2238: s->eventParm = ps->externalEventParm; +ADDRFP4 4 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 136 +ADDP4 +INDIRI4 +ASGNI4 +line 2239 +;2239: } else if ( ps->entityEventSequence < ps->eventSequence ) { +ADDRGP4 $793 +JUMPV +LABELV $792 +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +GEI4 $794 +line 2242 +;2240: int seq; +;2241: +;2242: if ( ps->entityEventSequence < ps->eventSequence - MAX_PS_EVENTS) { +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +GEI4 $796 +line 2243 +;2243: ps->entityEventSequence = ps->eventSequence - MAX_PS_EVENTS; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +ASGNI4 +line 2244 +;2244: } +LABELV $796 +line 2245 +;2245: seq = ps->entityEventSequence & (MAX_PS_EVENTS-1); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +ASGNI4 +line 2246 +;2246: s->event = ps->events[ seq ] | ( ( ps->entityEventSequence & 3 ) << 8 ); +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 252 +ADDP4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 3 +BANDI4 +CNSTI4 8 +LSHI4 +BORI4 +ASGNI4 +line 2247 +;2247: s->eventParm = ps->eventParms[ seq ]; +ADDRFP4 4 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 124 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 2248 +;2248: ps->entityEventSequence++; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2249 +;2249: } +LABELV $794 +LABELV $793 +line 2250 +;2250: s->weapon = ps->weapon; +ADDRFP4 4 +INDIRP4 +CNSTI4 276 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +ASGNI4 +line 2251 +;2251: s->groundEntityNum = ps->groundEntityNum; +ADDRFP4 4 +INDIRP4 +CNSTI4 192 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 84 +ADDP4 +INDIRI4 +ASGNI4 +line 2253 +;2252: +;2253: s->powerups = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 272 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2254 +;2254: for ( i = 0 ; i < MAX_POWERUPS ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $798 +line 2255 +;2255: if ( ps->powerups[ i ] ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 344 +ADDP4 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $802 +line 2256 +;2256: s->powerups |= 1 << i; +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 272 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BORI4 +ASGNI4 +line 2257 +;2257: } +LABELV $802 +line 2258 +;2258: } +LABELV $799 +line 2254 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $798 +line 2260 +;2259: +;2260: s->loopSound = ps->loopSound; +ADDRFP4 4 +INDIRP4 +CNSTI4 200 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 476 +ADDP4 +INDIRI4 +ASGNI4 +line 2261 +;2261: s->generic1 = ps->generic1; +ADDRFP4 4 +INDIRP4 +CNSTI4 292 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +ASGNI4 +line 2264 +;2262: +;2263: //NOT INCLUDED IN ENTITYSTATETOPLAYERSTATE: +;2264: s->modelindex2 = ps->weaponstate; +ADDRFP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +ASGNI4 +line 2265 +;2265: s->constantLight = ps->weaponChargeTime; +ADDRFP4 4 +INDIRP4 +CNSTI4 196 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 48 +ADDP4 +INDIRI4 +ASGNI4 +line 2267 +;2266: +;2267: VectorCopy(ps->lastHitLoc, s->origin2); +ADDRFP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1356 +ADDP4 +INDIRB +ASGNB 12 +line 2269 +;2268: +;2269: s->isJediMaster = ps->isJediMaster; +ADDRFP4 4 +INDIRP4 +CNSTI4 244 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 604 +ADDP4 +INDIRI4 +ASGNI4 +line 2271 +;2270: +;2271: s->time2 = ps->holocronBits; +ADDRFP4 4 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 712 +ADDP4 +INDIRI4 +ASGNI4 +line 2272 +;2272:} +LABELV $774 +endproc BG_PlayerStateToEntityStateExtraPolate 28 0 +proc BG_SwingAngles 28 8 +line 2288 +;2273: +;2274:/* +;2275:============================================================================= +;2276: +;2277:PLAYER ANGLES +;2278: +;2279:============================================================================= +;2280:*/ +;2281: +;2282:/* +;2283:================== +;2284:BG_SwingAngles +;2285:================== +;2286:*/ +;2287:static void BG_SwingAngles( float destination, float swingTolerance, float clampTolerance, +;2288: float speed, float *angle, qboolean *swinging, int frameTime ) { +line 2293 +;2289: float swing; +;2290: float move; +;2291: float scale; +;2292: +;2293: if ( !*swinging ) { +ADDRFP4 20 +INDIRP4 +INDIRI4 +CNSTI4 0 +NEI4 $805 +line 2295 +;2294: // see if a swing should be started +;2295: swing = AngleSubtract( *angle, destination ); +ADDRFP4 16 +INDIRP4 +INDIRF4 +ARGF4 +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRLP4 12 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 2296 +;2296: if ( swing > swingTolerance || swing < -swingTolerance ) { +ADDRLP4 20 +ADDRFP4 4 +INDIRF4 +ASGNF4 +ADDRLP4 0 +INDIRF4 +ADDRLP4 20 +INDIRF4 +GTF4 $809 +ADDRLP4 0 +INDIRF4 +ADDRLP4 20 +INDIRF4 +NEGF4 +GEF4 $807 +LABELV $809 +line 2297 +;2297: *swinging = qtrue; +ADDRFP4 20 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 2298 +;2298: } +LABELV $807 +line 2299 +;2299: } +LABELV $805 +line 2301 +;2300: +;2301: if ( !*swinging ) { +ADDRFP4 20 +INDIRP4 +INDIRI4 +CNSTI4 0 +NEI4 $810 +line 2302 +;2302: return; +ADDRGP4 $804 +JUMPV +LABELV $810 +line 2307 +;2303: } +;2304: +;2305: // modify the speed depending on the delta +;2306: // so it doesn't seem so linear +;2307: swing = AngleSubtract( destination, *angle ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 16 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 12 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 2308 +;2308: scale = fabs( swing ); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 16 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 4 +ADDRLP4 16 +INDIRF4 +ASGNF4 +line 2309 +;2309: if ( scale < swingTolerance * 0.5 ) { +ADDRLP4 4 +INDIRF4 +CNSTF4 1056964608 +ADDRFP4 4 +INDIRF4 +MULF4 +GEF4 $812 +line 2310 +;2310: scale = 0.5; +ADDRLP4 4 +CNSTF4 1056964608 +ASGNF4 +line 2311 +;2311: } else if ( scale < swingTolerance ) { +ADDRGP4 $813 +JUMPV +LABELV $812 +ADDRLP4 4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +GEF4 $814 +line 2312 +;2312: scale = 1.0; +ADDRLP4 4 +CNSTF4 1065353216 +ASGNF4 +line 2313 +;2313: } else { +ADDRGP4 $815 +JUMPV +LABELV $814 +line 2314 +;2314: scale = 2.0; +ADDRLP4 4 +CNSTF4 1073741824 +ASGNF4 +line 2315 +;2315: } +LABELV $815 +LABELV $813 +line 2318 +;2316: +;2317: // swing towards the destination angle +;2318: if ( swing >= 0 ) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +LTF4 $816 +line 2319 +;2319: move = frameTime * scale * speed; +ADDRLP4 8 +ADDRFP4 24 +INDIRI4 +CVIF4 4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDRFP4 12 +INDIRF4 +MULF4 +ASGNF4 +line 2320 +;2320: if ( move >= swing ) { +ADDRLP4 8 +INDIRF4 +ADDRLP4 0 +INDIRF4 +LTF4 $818 +line 2321 +;2321: move = swing; +ADDRLP4 8 +ADDRLP4 0 +INDIRF4 +ASGNF4 +line 2322 +;2322: *swinging = qfalse; +ADDRFP4 20 +INDIRP4 +CNSTI4 0 +ASGNI4 +line 2323 +;2323: } +LABELV $818 +line 2324 +;2324: *angle = AngleMod( *angle + move ); +ADDRLP4 20 +ADDRFP4 16 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +ADDF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 2325 +;2325: } else if ( swing < 0 ) { +ADDRGP4 $817 +JUMPV +LABELV $816 +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $820 +line 2326 +;2326: move = frameTime * scale * -speed; +ADDRLP4 8 +ADDRFP4 24 +INDIRI4 +CVIF4 4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDRFP4 12 +INDIRF4 +NEGF4 +MULF4 +ASGNF4 +line 2327 +;2327: if ( move <= swing ) { +ADDRLP4 8 +INDIRF4 +ADDRLP4 0 +INDIRF4 +GTF4 $822 +line 2328 +;2328: move = swing; +ADDRLP4 8 +ADDRLP4 0 +INDIRF4 +ASGNF4 +line 2329 +;2329: *swinging = qfalse; +ADDRFP4 20 +INDIRP4 +CNSTI4 0 +ASGNI4 +line 2330 +;2330: } +LABELV $822 +line 2331 +;2331: *angle = AngleMod( *angle + move ); +ADDRLP4 20 +ADDRFP4 16 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +ADDF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 2332 +;2332: } +LABELV $820 +LABELV $817 +line 2335 +;2333: +;2334: // clamp to no more than tolerance +;2335: swing = AngleSubtract( destination, *angle ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 16 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 20 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 20 +INDIRF4 +ASGNF4 +line 2336 +;2336: if ( swing > clampTolerance ) { +ADDRLP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +LEF4 $824 +line 2337 +;2337: *angle = AngleMod( destination - (clampTolerance - 1) ); +ADDRFP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +CNSTF4 1065353216 +SUBF4 +SUBF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRFP4 16 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 2338 +;2338: } else if ( swing < -clampTolerance ) { +ADDRGP4 $825 +JUMPV +LABELV $824 +ADDRLP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +NEGF4 +GEF4 $826 +line 2339 +;2339: *angle = AngleMod( destination + (clampTolerance - 1) ); +ADDRFP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +CNSTF4 1065353216 +SUBF4 +ADDF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRFP4 16 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 2340 +;2340: } +LABELV $826 +LABELV $825 +line 2341 +;2341:} +LABELV $804 +endproc BG_SwingAngles 28 8 +proc BG_AddPainTwitch 12 0 +line 2349 +;2342: +;2343:/* +;2344:================= +;2345:CG_AddPainTwitch +;2346:================= +;2347:*/ +;2348:#define PAIN_TWITCH_TIME 200 +;2349:static void BG_AddPainTwitch( int painTime, int painDirection, int currentTime, vec3_t torsoAngles ) { +line 2353 +;2350: int t; +;2351: float f; +;2352: +;2353: t = currentTime - painTime; +ADDRLP4 0 +ADDRFP4 8 +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ASGNI4 +line 2354 +;2354: if ( t >= PAIN_TWITCH_TIME ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 200 +LTI4 $829 +line 2355 +;2355: return; +ADDRGP4 $828 +JUMPV +LABELV $829 +line 2358 +;2356: } +;2357: +;2358: f = 1.0 - (float)t / PAIN_TWITCH_TIME; +ADDRLP4 4 +CNSTF4 1065353216 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +CNSTF4 1128792064 +DIVF4 +SUBF4 +ASGNF4 +line 2360 +;2359: +;2360: if ( painDirection ) { +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $831 +line 2361 +;2361: torsoAngles[ROLL] += 20 * f; +ADDRLP4 8 +ADDRFP4 12 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CNSTF4 1101004800 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 2362 +;2362: } else { +ADDRGP4 $832 +JUMPV +LABELV $831 +line 2363 +;2363: torsoAngles[ROLL] -= 20 * f; +ADDRLP4 8 +ADDRFP4 12 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CNSTF4 1101004800 +ADDRLP4 4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 2364 +;2364: } +LABELV $832 +line 2365 +;2365:} +LABELV $828 +endproc BG_AddPainTwitch 12 0 +data +align 4 +LABELV $834 +byte 4 0 +byte 4 22 +byte 4 45 +byte 4 -22 +byte 4 0 +byte 4 22 +byte 4 -45 +byte 4 -22 +export BG_G2PlayerAngles +code +proc BG_G2PlayerAngles 120 28 +line 2369 +;2366: +;2367:void BG_G2PlayerAngles( vec3_t startAngles, vec3_t legs[3], vec3_t legsAngles, int painTime, int painDirection, int currentTime, +;2368: qboolean *torso_yawing, float *torso_yawAngle, qboolean *torso_pitching, float *torso_pitchAngle, qboolean *legs_yawing, float *legs_yawAngle, +;2369: int frameTime, vec3_t velocity, int legsAnim, int torsoAnim, qboolean dead, float movementDir, void *ghoul2, qhandle_t *modelList, int weapon){ +line 2376 +;2370: vec3_t torsoAngles, headAngles; +;2371: float dest; +;2372: static int movementOffsets[8] = { 0, 22, 45, -22, 0, 22, -45, -22 }; +;2373: float speed; +;2374: int dir; +;2375: +;2376: VectorCopy( startAngles, headAngles ); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 2377 +;2377: headAngles[YAW] = AngleMod( headAngles[YAW] ); +ADDRLP4 12+4 +INDIRF4 +ARGF4 +ADDRLP4 36 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRLP4 12+4 +ADDRLP4 36 +INDIRF4 +ASGNF4 +line 2378 +;2378: VectorClear( legsAngles ); +ADDRLP4 40 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 44 +CNSTF4 0 +ASGNF4 +ADDRLP4 40 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 44 +INDIRF4 +ASGNF4 +ADDRLP4 40 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 44 +INDIRF4 +ASGNF4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 44 +INDIRF4 +ASGNF4 +line 2379 +;2379: VectorClear( torsoAngles ); +ADDRLP4 48 +CNSTF4 0 +ASGNF4 +ADDRLP4 0+8 +ADDRLP4 48 +INDIRF4 +ASGNF4 +ADDRLP4 0+4 +ADDRLP4 48 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 48 +INDIRF4 +ASGNF4 +line 2384 +;2380: +;2381: // --------- yaw ------------- +;2382: +;2383: // allow yaw to drift a bit +;2384: if ( ( legsAnim & ~ANIM_TOGGLEBIT ) != WeaponReadyAnim[weapon] +ADDRLP4 52 +CNSTI4 -2049 +ASGNI4 +ADDRLP4 56 +ADDRFP4 80 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 WeaponReadyAnim +ADDP4 +INDIRI4 +ASGNI4 +ADDRFP4 56 +INDIRI4 +ADDRLP4 52 +INDIRI4 +BANDI4 +ADDRLP4 56 +INDIRI4 +NEI4 $841 +ADDRFP4 60 +INDIRI4 +ADDRLP4 52 +INDIRI4 +BANDI4 +ADDRLP4 56 +INDIRI4 +EQI4 $839 +LABELV $841 +line 2385 +;2385: || ( torsoAnim & ~ANIM_TOGGLEBIT ) != WeaponReadyAnim[weapon] ) { +line 2387 +;2386: // if not standing still, always point all in the same direction +;2387: *torso_yawing = qtrue; // always center +ADDRFP4 24 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 2388 +;2388: *torso_pitching = qtrue; // always center +ADDRFP4 32 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 2389 +;2389: *legs_yawing = qtrue; // always center +ADDRFP4 40 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 2390 +;2390: } +LABELV $839 +line 2393 +;2391: +;2392: // adjust legs for movement dir +;2393: if (dead ) { +ADDRFP4 64 +INDIRI4 +CNSTI4 0 +EQI4 $842 +line 2395 +;2394: // don't let dead bodies twitch +;2395: dir = 0; +ADDRLP4 28 +CNSTI4 0 +ASGNI4 +line 2396 +;2396: } else { +ADDRGP4 $843 +JUMPV +LABELV $842 +line 2397 +;2397: dir = movementDir; +ADDRLP4 28 +ADDRFP4 68 +INDIRF4 +CVFI4 4 +ASGNI4 +line 2401 +;2398:// if ( dir < 0 || dir > 7 ) { +;2399:// CG_Error( "Bad player movement angle" ); +;2400:// } +;2401: } +LABELV $843 +line 2402 +;2402: legsAngles[YAW] = headAngles[YAW] + movementOffsets[ dir ]; +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 12+4 +INDIRF4 +ADDRLP4 28 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $834 +ADDP4 +INDIRI4 +CVIF4 4 +ADDF4 +ASGNF4 +line 2403 +;2403: torsoAngles[YAW] = headAngles[YAW] + 0.25 * movementOffsets[ dir ]; +ADDRLP4 0+4 +ADDRLP4 12+4 +INDIRF4 +CNSTF4 1048576000 +ADDRLP4 28 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $834 +ADDP4 +INDIRI4 +CVIF4 4 +MULF4 +ADDF4 +ASGNF4 +line 2406 +;2404: +;2405: // torso +;2406: BG_SwingAngles( torsoAngles[YAW], 25, 90, /*cg_swingSpeed.value*/ 0.3, torso_yawAngle, torso_yawing, frameTime ); +ADDRLP4 0+4 +INDIRF4 +ARGF4 +CNSTF4 1103626240 +ARGF4 +CNSTF4 1119092736 +ARGF4 +CNSTF4 1050253722 +ARGF4 +ADDRFP4 28 +INDIRP4 +ARGP4 +ADDRFP4 24 +INDIRP4 +ARGP4 +ADDRFP4 48 +INDIRI4 +ARGI4 +ADDRGP4 BG_SwingAngles +CALLV +pop +line 2407 +;2407: BG_SwingAngles( legsAngles[YAW], 40, 90, /*cg_swingSpeed.value*/ 0.3, legs_yawAngle, legs_yawing, frameTime ); +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ARGF4 +CNSTF4 1109393408 +ARGF4 +CNSTF4 1119092736 +ARGF4 +CNSTF4 1050253722 +ARGF4 +ADDRFP4 44 +INDIRP4 +ARGP4 +ADDRFP4 40 +INDIRP4 +ARGP4 +ADDRFP4 48 +INDIRI4 +ARGI4 +ADDRGP4 BG_SwingAngles +CALLV +pop +line 2409 +;2408: +;2409: torsoAngles[YAW] = *torso_yawAngle; +ADDRLP4 0+4 +ADDRFP4 28 +INDIRP4 +INDIRF4 +ASGNF4 +line 2410 +;2410: legsAngles[YAW] = *legs_yawAngle; +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRFP4 44 +INDIRP4 +INDIRF4 +ASGNF4 +line 2415 +;2411: +;2412: // --------- pitch ------------- +;2413: +;2414: // only show a fraction of the pitch angle in the torso +;2415: if ( headAngles[PITCH] > 180 ) { +ADDRLP4 12 +INDIRF4 +CNSTF4 1127481344 +LEF4 $849 +line 2416 +;2416: dest = (-360 + headAngles[PITCH]) * 0.75; +ADDRLP4 32 +CNSTF4 1061158912 +ADDRLP4 12 +INDIRF4 +CNSTF4 3283353600 +ADDF4 +MULF4 +ASGNF4 +line 2417 +;2417: } else { +ADDRGP4 $850 +JUMPV +LABELV $849 +line 2418 +;2418: dest = headAngles[PITCH] * 0.75; +ADDRLP4 32 +CNSTF4 1061158912 +ADDRLP4 12 +INDIRF4 +MULF4 +ASGNF4 +line 2419 +;2419: } +LABELV $850 +line 2420 +;2420: BG_SwingAngles( dest, 15, 30, 0.1, torso_pitchAngle, torso_pitching, frameTime ); +ADDRLP4 32 +INDIRF4 +ARGF4 +CNSTF4 1097859072 +ARGF4 +CNSTF4 1106247680 +ARGF4 +CNSTF4 1036831949 +ARGF4 +ADDRFP4 36 +INDIRP4 +ARGP4 +ADDRFP4 32 +INDIRP4 +ARGP4 +ADDRFP4 48 +INDIRI4 +ARGI4 +ADDRGP4 BG_SwingAngles +CALLV +pop +line 2421 +;2421: torsoAngles[PITCH] = *torso_pitchAngle; +ADDRLP4 0 +ADDRFP4 36 +INDIRP4 +INDIRF4 +ASGNF4 +line 2426 +;2422: +;2423: // --------- roll ------------- +;2424: +;2425: // lean towards the direction of travel +;2426: speed = VectorNormalize( velocity ); +ADDRFP4 52 +INDIRP4 +ARGP4 +ADDRLP4 60 +ADDRGP4 VectorNormalize +CALLF4 +ASGNF4 +ADDRLP4 24 +ADDRLP4 60 +INDIRF4 +ASGNF4 +line 2427 +;2427: if ( speed ) { +ADDRLP4 24 +INDIRF4 +CNSTF4 0 +EQF4 $851 +line 2431 +;2428: vec3_t axis[3]; +;2429: float side; +;2430: +;2431: speed *= 0.05; +ADDRLP4 24 +CNSTF4 1028443341 +ADDRLP4 24 +INDIRF4 +MULF4 +ASGNF4 +line 2433 +;2432: +;2433: AnglesToAxis( legsAngles, axis ); +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 64 +ARGP4 +ADDRGP4 AnglesToAxis +CALLV +pop +line 2434 +;2434: side = speed * DotProduct( velocity, axis[1] ); +ADDRLP4 104 +ADDRFP4 52 +INDIRP4 +ASGNP4 +ADDRLP4 100 +ADDRLP4 24 +INDIRF4 +ADDRLP4 104 +INDIRP4 +INDIRF4 +ADDRLP4 64+12 +INDIRF4 +MULF4 +ADDRLP4 104 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 64+12+4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 104 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 64+12+8 +INDIRF4 +MULF4 +ADDF4 +MULF4 +ASGNF4 +line 2435 +;2435: legsAngles[ROLL] -= side; +ADDRLP4 108 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 108 +INDIRP4 +ADDRLP4 108 +INDIRP4 +INDIRF4 +ADDRLP4 100 +INDIRF4 +SUBF4 +ASGNF4 +line 2437 +;2436: +;2437: side = speed * DotProduct( velocity, axis[0] ); +ADDRLP4 112 +ADDRFP4 52 +INDIRP4 +ASGNP4 +ADDRLP4 100 +ADDRLP4 24 +INDIRF4 +ADDRLP4 112 +INDIRP4 +INDIRF4 +ADDRLP4 64 +INDIRF4 +MULF4 +ADDRLP4 112 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 64+4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 112 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 64+8 +INDIRF4 +MULF4 +ADDF4 +MULF4 +ASGNF4 +line 2438 +;2438: legsAngles[PITCH] += side; +ADDRLP4 116 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 116 +INDIRP4 +ADDRLP4 116 +INDIRP4 +INDIRF4 +ADDRLP4 100 +INDIRF4 +ADDF4 +ASGNF4 +line 2439 +;2439: } +LABELV $851 +line 2442 +;2440: +;2441: // pain twitch +;2442: BG_AddPainTwitch( painTime, painDirection, currentTime, torsoAngles ); +ADDRFP4 12 +INDIRI4 +ARGI4 +ADDRFP4 16 +INDIRI4 +ARGI4 +ADDRFP4 20 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +ADDRGP4 BG_AddPainTwitch +CALLV +pop +line 2445 +;2443: +;2444: // pull the angles back out of the hierarchial chain +;2445: AnglesSubtract( headAngles, torsoAngles, headAngles ); +ADDRLP4 12 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRGP4 AnglesSubtract +CALLV +pop +line 2446 +;2446: AnglesSubtract( torsoAngles, legsAngles, torsoAngles ); +ADDRLP4 0 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 AnglesSubtract +CALLV +pop +line 2447 +;2447: AnglesToAxis( legsAngles, legs ); +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 AnglesToAxis +CALLV +pop +line 2452 +;2448: // we assume that model 0 is the player model. +;2449://g2r trap_G2API_SetBoneAngles(ghoul2, 0, "upper_lumbar", torsoAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, modelList, 0, currentTime); +;2450://g2r trap_G2API_SetBoneAngles(ghoul2, 0, "cranium", headAngles, BONE_ANGLES_POSTMULT, POSITIVE_Z, NEGATIVE_Y, POSITIVE_X, modelList,0, currentTime); +;2451: +;2452:} +LABELV $833 +endproc BG_G2PlayerAngles 120 28 +data +align 4 +LABELV bg_poolSize +byte 4 0 +align 4 +LABELV bg_poolTail +byte 4 2048000 +export BG_Alloc +code +proc BG_Alloc 8 16 +line 2461 +;2453: +;2454:#define MAX_POOL_SIZE 2048000 //1024000 +;2455: +;2456:static char bg_pool[MAX_POOL_SIZE]; +;2457:static int bg_poolSize = 0; +;2458:static int bg_poolTail = MAX_POOL_SIZE; +;2459: +;2460:void *BG_Alloc ( int size ) +;2461:{ +line 2462 +;2462: bg_poolSize = ((bg_poolSize + 0x00000003) & 0xfffffffc); +ADDRLP4 0 +ADDRGP4 bg_poolSize +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +CNSTI4 3 +ADDI4 +CVIU4 4 +CNSTU4 4294967292 +BANDU4 +CVUI4 4 +ASGNI4 +line 2464 +;2463: +;2464: if (bg_poolSize + size > bg_poolTail) +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ADDRGP4 bg_poolTail +INDIRI4 +LEI4 $861 +line 2465 +;2465: { +line 2466 +;2466: Com_Error( ERR_DROP, "BG_Alloc: buffer exceeded tail (%d > %d)", bg_poolSize + size, bg_poolTail); +CNSTI4 1 +ARGI4 +ADDRGP4 $863 +ARGP4 +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ARGI4 +ADDRGP4 bg_poolTail +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 2467 +;2467: return 0; +CNSTP4 0 +RETP4 +ADDRGP4 $860 +JUMPV +LABELV $861 +line 2470 +;2468: } +;2469: +;2470: bg_poolSize += size; +ADDRLP4 4 +ADDRGP4 bg_poolSize +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 2472 +;2471: +;2472: return &bg_pool[bg_poolSize-size]; +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ADDRGP4 bg_pool +ADDP4 +RETP4 +LABELV $860 +endproc BG_Alloc 8 16 +export BG_AllocUnaligned +proc BG_AllocUnaligned 4 16 +line 2476 +;2473:} +;2474: +;2475:void *BG_AllocUnaligned ( int size ) +;2476:{ +line 2477 +;2477: if (bg_poolSize + size > bg_poolTail) +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ADDRGP4 bg_poolTail +INDIRI4 +LEI4 $865 +line 2478 +;2478: { +line 2479 +;2479: Com_Error( ERR_DROP, "BG_AllocUnaligned: buffer exceeded tail (%d > %d)", bg_poolSize + size, bg_poolTail); +CNSTI4 1 +ARGI4 +ADDRGP4 $867 +ARGP4 +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ARGI4 +ADDRGP4 bg_poolTail +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 2480 +;2480: return 0; +CNSTP4 0 +RETP4 +ADDRGP4 $864 +JUMPV +LABELV $865 +line 2483 +;2481: } +;2482: +;2483: bg_poolSize += size; +ADDRLP4 0 +ADDRGP4 bg_poolSize +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 2485 +;2484: +;2485: return &bg_pool[bg_poolSize-size]; +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ADDRGP4 bg_pool +ADDP4 +RETP4 +LABELV $864 +endproc BG_AllocUnaligned 4 16 +export BG_TempAlloc +proc BG_TempAlloc 4 16 +line 2489 +;2486:} +;2487: +;2488:void *BG_TempAlloc( int size ) +;2489:{ +line 2490 +;2490: size = ((size + 0x00000003) & 0xfffffffc); +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 3 +ADDI4 +CVIU4 4 +CNSTU4 4294967292 +BANDU4 +CVUI4 4 +ASGNI4 +line 2492 +;2491: +;2492: if (bg_poolTail - size < bg_poolSize) +ADDRGP4 bg_poolTail +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ADDRGP4 bg_poolSize +INDIRI4 +GEI4 $869 +line 2493 +;2493: { +line 2494 +;2494: Com_Error( ERR_DROP, "BG_TempAlloc: buffer exceeded head (%d > %d)", bg_poolTail - size, bg_poolSize); +CNSTI4 1 +ARGI4 +ADDRGP4 $871 +ARGP4 +ADDRGP4 bg_poolTail +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ARGI4 +ADDRGP4 bg_poolSize +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 2495 +;2495: return 0; +CNSTP4 0 +RETP4 +ADDRGP4 $868 +JUMPV +LABELV $869 +line 2498 +;2496: } +;2497: +;2498: bg_poolTail -= size; +ADDRLP4 0 +ADDRGP4 bg_poolTail +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ASGNI4 +line 2500 +;2499: +;2500: return &bg_pool[bg_poolTail]; +ADDRGP4 bg_poolTail +INDIRI4 +ADDRGP4 bg_pool +ADDP4 +RETP4 +LABELV $868 +endproc BG_TempAlloc 4 16 +export BG_TempFree +proc BG_TempFree 4 16 +line 2504 +;2501:} +;2502: +;2503:void BG_TempFree( int size ) +;2504:{ +line 2505 +;2505: size = ((size + 0x00000003) & 0xfffffffc); +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 3 +ADDI4 +CVIU4 4 +CNSTU4 4294967292 +BANDU4 +CVUI4 4 +ASGNI4 +line 2507 +;2506: +;2507: if (bg_poolTail+size > MAX_POOL_SIZE) +ADDRGP4 bg_poolTail +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +CNSTI4 2048000 +LEI4 $873 +line 2508 +;2508: { +line 2509 +;2509: Com_Error( ERR_DROP, "BG_TempFree: tail greater than size (%d > %d)", bg_poolTail+size, MAX_POOL_SIZE ); +CNSTI4 1 +ARGI4 +ADDRGP4 $875 +ARGP4 +ADDRGP4 bg_poolTail +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ARGI4 +CNSTI4 2048000 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 2510 +;2510: } +LABELV $873 +line 2512 +;2511: +;2512: bg_poolTail += size; +ADDRLP4 0 +ADDRGP4 bg_poolTail +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 2513 +;2513:} +LABELV $872 +endproc BG_TempFree 4 16 +export BG_StringAlloc +proc BG_StringAlloc 12 8 +line 2516 +;2514: +;2515:char *BG_StringAlloc ( const char *source ) +;2516:{ +line 2519 +;2517: char *dest; +;2518: +;2519: dest = BG_Alloc ( strlen ( source ) + 1 ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRLP4 8 +ADDRGP4 BG_Alloc +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 2520 +;2520: strcpy ( dest, source ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 2521 +;2521: return dest; +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $876 +endproc BG_StringAlloc 12 8 +export BG_OutOfMemory +proc BG_OutOfMemory 4 0 +line 2525 +;2522:} +;2523: +;2524:qboolean BG_OutOfMemory ( void ) +;2525:{ +line 2526 +;2526: return bg_poolSize >= MAX_POOL_SIZE; +ADDRGP4 bg_poolSize +INDIRI4 +CNSTI4 2048000 +LTI4 $879 +ADDRLP4 0 +CNSTI4 1 +ASGNI4 +ADDRGP4 $880 +JUMPV +LABELV $879 +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $880 +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $877 +endproc BG_OutOfMemory 4 0 +bss +align 1 +LABELV bg_pool +skip 2048000 +import g2WeaponInstances +import CG_CheckPlayerG2Weapons +import CG_CopyG2WeaponInstance +import CG_ShutDownG2Weapons +import CG_InitG2Weapons +import CG_CreateBBRefEnts +import CG_SetGhoul2Info +import CG_Init_CGents +import CG_Init_CG +import trap_G2API_SetNewOrigin +import trap_G2API_SetSurfaceOnOff +import trap_G2API_SetRootSurface +import trap_G2API_SetBoneAnim +import trap_G2API_GetGLAName +import trap_G2API_SetBoneAngles +import trap_G2API_CleanGhoul2Models +import trap_G2API_SetBoltInfo +import trap_G2API_AddBolt +import trap_G2API_RemoveGhoul2Model +import trap_G2API_HasGhoul2ModelOnIndex +import trap_G2API_DuplicateGhoul2Instance +import trap_G2API_CopySpecificGhoul2Model +import trap_G2API_CopyGhoul2Instance +import trap_G2API_GiveMeVectorFromMatrix +import trap_G2API_InitGhoul2Model +import trap_G2API_GetBoltMatrix_NoReconstruct +import trap_G2API_GetBoltMatrix +import trap_G2_HaveWeGhoul2Models +import trap_G2_SetGhoul2ModelIndexes +import trap_G2_ListModelBones +import trap_G2_ListModelSurfaces +import FX_ForceDrained +import FX_BlasterWeaponHitPlayer +import FX_BlasterWeaponHitWall +import FX_BlasterAltFireThink +import FX_BlasterProjectileThink +import FX_BryarAltHitPlayer +import FX_BryarHitPlayer +import FX_BryarAltHitWall +import FX_BryarHitWall +import CG_Spark +import FX_TurretHitPlayer +import FX_TurretHitWall +import FX_TurretProjectileThink +import CG_NewParticleArea +import initparticles +import CG_GetStripEdString +import CG_ParticleExplosion +import CG_ParticleMisc +import CG_ParticleDust +import CG_ParticleSparks +import CG_ParticleBulletDebris +import CG_ParticleSnowFlurry +import CG_AddParticleShrapnel +import CG_ParticleSmoke +import CG_ParticleSnow +import CG_AddParticles +import CG_ClearParticles +import trap_ROFF_Purge_Ent +import trap_ROFF_Play +import trap_ROFF_Cache +import trap_ROFF_UpdateEntities +import trap_ROFF_Clean +import trap_CG_RegisterSharedMemory +import trap_SP_GetStringTextString +import trap_SP_Print +import trap_FX_AddSprite +import trap_FX_AddPrimitive +import trap_FX_AddBezier +import trap_FX_AddPoly +import trap_FX_AdjustTime +import trap_FX_FreeSystem +import trap_FX_InitSystem +import trap_FX_AddScheduledEffects +import trap_FX_PlayBoltedEffectID +import trap_FX_PlayEntityEffectID +import trap_FX_PlayEffectID +import trap_FX_PlaySimpleEffectID +import trap_FX_PlayEntityEffect +import trap_FX_PlayEffect +import trap_FX_PlaySimpleEffect +import trap_FX_RegisterEffect +import trap_R_inPVS +import trap_GetEntityToken +import trap_getCameraInfo +import trap_startCamera +import trap_loadCamera +import trap_SnapVector +import trap_CIN_SetExtents +import trap_CIN_DrawCinematic +import trap_CIN_RunCinematic +import trap_CIN_StopCinematic +import trap_CIN_PlayCinematic +import trap_Key_GetKey +import trap_Key_SetCatcher +import trap_Key_GetCatcher +import trap_Key_IsDown +import trap_MemoryRemaining +import testPrintFloat +import testPrintInt +import trap_OpenUIMenu +import trap_SetClientTurnExtent +import trap_SetClientForceAngle +import trap_SetUserCmdValue +import trap_GetUserCmd +import trap_GetCurrentCmdNumber +import trap_GetServerCommand +import trap_GetSnapshot +import trap_GetCurrentSnapshotNumber +import trap_GetGameState +import trap_GetGlconfig +import trap_FX_AddLine +import trap_R_GetBModelVerts +import trap_R_SetLightStyle +import trap_R_GetLightStyle +import trap_R_RemapShader +import trap_R_DrawRotatePic2 +import trap_R_DrawRotatePic +import trap_R_LerpTag +import trap_R_ModelBounds +import trap_R_DrawStretchPic +import trap_R_SetColor +import trap_R_RenderScene +import trap_R_LightForPoint +import trap_R_AddLightToScene +import trap_R_AddPolysToScene +import trap_R_AddPolyToScene +import trap_R_AddRefEntityToScene +import trap_R_ClearScene +import trap_AnyLanguage_ReadCharFromString +import trap_R_Font_DrawString +import trap_R_Font_HeightPixels +import trap_R_Font_StrLenChars +import trap_R_Font_StrLenPixels +import trap_R_RegisterFont +import trap_R_RegisterShaderNoMip +import trap_R_RegisterShader +import trap_R_RegisterSkin +import trap_R_RegisterModel +import trap_R_LoadWorldMap +import trap_S_StopBackgroundTrack +import trap_S_StartBackgroundTrack +import trap_S_RegisterSound +import trap_S_Respatialize +import trap_S_UpdateEntityPosition +import trap_S_AddRealLoopingSound +import trap_S_AddLoopingSound +import trap_S_ClearLoopingSounds +import trap_S_StartLocalSound +import trap_S_StopLoopingSound +import trap_S_StartSound +import trap_S_MuteSound +import trap_CM_MarkFragments +import trap_CM_TransformedBoxTrace +import trap_CM_BoxTrace +import trap_CM_TransformedPointContents +import trap_CM_PointContents +import trap_CM_TempBoxModel +import trap_CM_InlineModel +import trap_CM_NumInlineModels +import trap_CM_LoadMap +import trap_UpdateScreen +import trap_SendClientCommand +import trap_AddCommand +import trap_SendConsoleCommand +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Args +import trap_Argv +import trap_Argc +import trap_Cvar_VariableStringBuffer +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_Milliseconds +import trap_Error +import trap_Print +import CG_SagaObjectiveCompleted +import CG_SagaRoundOver +import CG_InitSagaMode +import CG_CheckChangedPredictableEvents +import CG_TransitionPlayerState +import CG_Respawn +import CG_IsMindTricked +import CG_PlayBufferedVoiceChats +import CG_VoiceChatLocal +import CG_ShaderStateChanged +import CG_LoadVoiceChats +import CG_SetConfigValues +import CG_ParseServerinfo +import CG_ExecuteNewServerCommands +import CG_InitConsoleCommands +import CG_ConsoleCommand +import CG_DrawOldTourneyScoreboard +import CG_DrawOldScoreboard +import CG_DrawInformation +import CG_LoadingClient +import CG_LoadingItem +import CG_LoadingString +import CG_ProcessSnapshots +import CG_InitGlass +import CG_TestLine +import CG_SurfaceExplosion +import CG_MakeExplosion +import CG_Bleed +import CG_BigExplode +import CG_GibPlayer +import CG_ScorePlum +import CG_CreateDebris +import CG_GlassShatter +import CG_BubbleTrail +import CG_SmokePuff +import CG_AddLocalEntities +import CG_AllocLocalEntity +import CG_InitLocalEntities +import CG_ImpactMark +import CG_AddMarks +import CG_InitMarkPolys +import CG_OutOfAmmoChange +import CG_DrawIconBackground +import CG_DrawWeaponSelect +import CG_AddPlayerWeapon +import CG_AddViewWeapon +import CG_MissileHitPlayer +import CG_MissileHitWall +import CG_FireWeapon +import CG_RegisterItemVisuals +import CG_RegisterWeapon +import CG_Weapon_f +import CG_PrevWeapon_f +import CG_NextWeapon_f +import CG_GetClientWeaponMuzzleBoltPoint +import TurretClientRun +import ScaleModelAxis +import CG_PositionRotatedEntityOnTag +import CG_PositionEntityOnTag +import CG_AdjustPositionForMover +import CG_Beam +import CG_ManualEntityRender +import CG_AddPacketEntities +import CG_SetEntitySoundPosition +import CG_ReattachLimb +import CG_PainEvent +import CG_EntityEvent +import CG_PlaceString +import CG_CheckEvents +import CG_LoadDeferredPlayers +import CG_PredictPlayerState +import CG_Trace +import CG_PointContents +import CG_BuildSolidList +import CG_PlayerShieldHit +import CG_CustomSound +import CG_NewClientInfo +import CG_AddRefEntityWithPowerups +import CG_ResetPlayerEntity +import CG_Player +import CG_StatusHandle +import CG_OtherTeamHasFlag +import CG_YourTeamHasFlag +import CG_GameTypeString +import CG_CheckOrderPending +import CG_Text_PaintChar +import CG_Draw3DModel +import CG_GetKillerText +import CG_GetGameStatusText +import CG_GetTeamColor +import CG_InitTeamChat +import CG_SetPrintString +import CG_ShowResponseHead +import CG_DeferMenuScript +import CG_RunMenuScript +import CG_OwnerDrawVisible +import CG_GetValue +import CG_SelectNextPlayer +import CG_SelectPrevPlayer +import CG_Text_Height +import CG_Text_Width +import CG_Text_Paint +import CG_OwnerDraw +import CG_DrawTeamBackground +import CG_DrawFlagModel +import CG_DrawActive +import CG_DrawHead +import CG_CenterPrint +import CG_AddLagometerSnapshotInfo +import CG_AddLagometerFrameInfo +import teamChat2 +import teamChat1 +import systemChat +import drawTeamOverlayModificationCount +import numSortedTeamPlayers +import sortedTeamPlayers +import CG_DrawTopBottom +import CG_DrawSides +import CG_DrawRect +import UI_DrawScaledProportionalString +import UI_DrawProportionalString +import CG_GetColorForHealth +import CG_ColorForHealth +import CG_TileClear +import CG_TeamColor +import CG_FadeColor +import CG_DrawStrlen +import CG_DrawSmallStringColor +import CG_DrawSmallString +import CG_DrawBigStringColor +import CG_DrawBigString +import CG_DrawStringExt +import CG_DrawNumField +import CG_DrawString +import CG_DrawRotatePic2 +import CG_DrawRotatePic +import CG_DrawPic +import CG_FillRect +import CG_TestModelAnimate_f +import CG_TestModelSetAnglespost_f +import CG_TestModelSetAnglespre_f +import CG_ListModelBones_f +import CG_ListModelSurfaces_f +import CG_TestModelSurfaceOnOff_f +import CG_TestG2Model_f +import CG_DrawActiveFrame +import CG_AddBufferedSound +import CG_ZoomUp_f +import CG_ZoomDown_f +import CG_TestModelPrevSkin_f +import CG_TestModelNextSkin_f +import CG_TestModelPrevFrame_f +import CG_TestModelNextFrame_f +import CG_TestGun_f +import CG_TestModel_f +import CG_PrevForcePower_f +import CG_NextForcePower_f +import CG_PrevInventory_f +import CG_NextInventory_f +import CG_BuildSpectatorString +import CG_SetScoreSelection +import CG_RankRunFrame +import CG_EventHandling +import CG_MouseEvent +import CG_KeyEvent +import CG_LoadMenus +import CG_LastAttacker +import CG_CrosshairPlayer +import CG_UpdateCvars +import CG_StartMusic +import CG_Error +import CG_Printf +import CG_Argv +import CG_ConfigString +import cg_debugBB +import ui_myteam +import cg_recordSPDemoName +import cg_recordSPDemo +import cg_singlePlayerActive +import cg_enableBreath +import cg_enableDust +import cg_singlePlayer +import cg_currentSelectedPlayerName +import cg_currentSelectedPlayer +import cg_blueTeamName +import cg_redTeamName +import cg_trueLightning +import cg_noProjectileTrail +import cg_noTaunt +import cg_bigFont +import cg_smallFont +import cg_cameraMode +import cg_timescale +import cg_timescaleFadeSpeed +import cg_timescaleFadeEnd +import cg_cameraOrbitDelay +import cg_cameraOrbit +import pmove_msec +import pmove_fixed +import cg_smoothClients +import cg_hudFiles +import cg_scorePlum +import cg_noVoiceText +import cg_noVoiceChats +import cg_teamChatsOnly +import cg_drawFriend +import cg_deferPlayers +import cg_predictItems +import cg_blood +import cg_paused +import cg_buildScript +import cg_forceModel +import cg_stats +import cg_teamChatHeight +import cg_teamChatTime +import cg_synchronousClients +import cg_drawEnemyInfo +import cg_lagometer +import cg_stereoSeparation +import cg_thirdPersonHorzOffset +import cg_thirdPersonAlpha +import cg_thirdPersonTargetDamp +import cg_thirdPersonCameraDamp +import cg_thirdPersonVertOffset +import cg_thirdPersonPitchOffset +import cg_thirdPersonAngle +import cg_thirdPersonRange +import cg_thirdPerson +import cg_dismember +import cg_animBlend +import cg_auraShell +import cg_speedTrail +import cg_saberTrail +import cg_saberContact +import cg_swingAngles +import cg_zoomFov +import cg_fov +import cg_simpleItems +import cg_ignore +import cg_autoswitch +import cg_tracerLength +import cg_tracerWidth +import cg_tracerChance +import cg_viewsize +import cg_drawGun +import cg_gun_z +import cg_gun_y +import cg_gun_x +import cg_gun_frame +import cg_addMarks +import cg_footsteps +import cg_showmiss +import cg_noPlayerAnims +import cg_nopredict +import cg_errorDecay +import cg_debugEvents +import cg_debugPosition +import cg_debugAnim +import cg_animSpeed +import cg_draw2D +import cg_drawStatus +import cg_crosshairHealth +import cg_crosshairSize +import cg_crosshairY +import cg_crosshairX +import cg_teamOverlayUserinfo +import cg_drawTeamOverlay +import cg_drawRewards +import cg_dynamicCrosshair +import cg_drawScores +import cg_drawCrosshairNames +import cg_drawCrosshair +import cg_drawAmmoWarning +import cg_drawIcons +import cg_draw3dIcons +import cg_drawSnapshot +import cg_drawFPS +import cg_drawTimer +import cg_gibs +import cg_shadows +import cg_bobroll +import cg_bobpitch +import cg_bobup +import cg_runroll +import cg_runpitch +import cg_centertime +import cg_markPolys +import cg_items +import cg_weapons +import cg_entities +import cg +import cgs +import CGCam_SetMusicMult +import CGCam_Shake +import cgScreenEffects +import ammoTicPos +import forceTicPos +import BG_ParseAnimationFile +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import saberMoveData +import Pmove +import PM_UpdateViewAngles +import pm +import bgGlobalAnimations +import BGPAFtextLoaded +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $875 +char 1 66 +char 1 71 +char 1 95 +char 1 84 +char 1 101 +char 1 109 +char 1 112 +char 1 70 +char 1 114 +char 1 101 +char 1 101 +char 1 58 +char 1 32 +char 1 116 +char 1 97 +char 1 105 +char 1 108 +char 1 32 +char 1 103 +char 1 114 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 32 +char 1 116 +char 1 104 +char 1 97 +char 1 110 +char 1 32 +char 1 115 +char 1 105 +char 1 122 +char 1 101 +char 1 32 +char 1 40 +char 1 37 +char 1 100 +char 1 32 +char 1 62 +char 1 32 +char 1 37 +char 1 100 +char 1 41 +char 1 0 +align 1 +LABELV $871 +char 1 66 +char 1 71 +char 1 95 +char 1 84 +char 1 101 +char 1 109 +char 1 112 +char 1 65 +char 1 108 +char 1 108 +char 1 111 +char 1 99 +char 1 58 +char 1 32 +char 1 98 +char 1 117 +char 1 102 +char 1 102 +char 1 101 +char 1 114 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 104 +char 1 101 +char 1 97 +char 1 100 +char 1 32 +char 1 40 +char 1 37 +char 1 100 +char 1 32 +char 1 62 +char 1 32 +char 1 37 +char 1 100 +char 1 41 +char 1 0 +align 1 +LABELV $867 +char 1 66 +char 1 71 +char 1 95 +char 1 65 +char 1 108 +char 1 108 +char 1 111 +char 1 99 +char 1 85 +char 1 110 +char 1 97 +char 1 108 +char 1 105 +char 1 103 +char 1 110 +char 1 101 +char 1 100 +char 1 58 +char 1 32 +char 1 98 +char 1 117 +char 1 102 +char 1 102 +char 1 101 +char 1 114 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 116 +char 1 97 +char 1 105 +char 1 108 +char 1 32 +char 1 40 +char 1 37 +char 1 100 +char 1 32 +char 1 62 +char 1 32 +char 1 37 +char 1 100 +char 1 41 +char 1 0 +align 1 +LABELV $863 +char 1 66 +char 1 71 +char 1 95 +char 1 65 +char 1 108 +char 1 108 +char 1 111 +char 1 99 +char 1 58 +char 1 32 +char 1 98 +char 1 117 +char 1 102 +char 1 102 +char 1 101 +char 1 114 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 116 +char 1 97 +char 1 105 +char 1 108 +char 1 32 +char 1 40 +char 1 37 +char 1 100 +char 1 32 +char 1 62 +char 1 32 +char 1 37 +char 1 100 +char 1 41 +char 1 0 +align 1 +LABELV $735 +char 1 69 +char 1 86 +char 1 95 +char 1 66 +char 1 79 +char 1 68 +char 1 89 +char 1 95 +char 1 81 +char 1 85 +char 1 69 +char 1 85 +char 1 69 +char 1 95 +char 1 67 +char 1 79 +char 1 80 +char 1 89 +char 1 0 +align 1 +LABELV $734 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 80 +char 1 65 +char 1 84 +char 1 82 +char 1 79 +char 1 76 +char 1 0 +align 1 +LABELV $733 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 71 +char 1 85 +char 1 65 +char 1 82 +char 1 68 +char 1 66 +char 1 65 +char 1 83 +char 1 69 +char 1 0 +align 1 +LABELV $732 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 70 +char 1 76 +char 1 65 +char 1 71 +char 1 0 +align 1 +LABELV $731 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 70 +char 1 79 +char 1 76 +char 1 76 +char 1 79 +char 1 87 +char 1 77 +char 1 69 +char 1 0 +align 1 +LABELV $730 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 78 +char 1 79 +char 1 0 +align 1 +LABELV $729 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 89 +char 1 69 +char 1 83 +char 1 0 +align 1 +LABELV $728 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 0 +align 1 +LABELV $727 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 73 +char 1 78 +char 1 71 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $726 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 73 +char 1 78 +char 1 71 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $725 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 69 +char 1 83 +char 1 84 +char 1 76 +char 1 73 +char 1 78 +char 1 69 +char 1 0 +align 1 +LABELV $724 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 66 +char 1 85 +char 1 71 +char 1 95 +char 1 76 +char 1 73 +char 1 78 +char 1 69 +char 1 0 +align 1 +LABELV $723 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 72 +char 1 73 +char 1 69 +char 1 76 +char 1 68 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $722 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 95 +char 1 67 +char 1 72 +char 1 65 +char 1 82 +char 1 71 +char 1 69 +char 1 95 +char 1 65 +char 1 76 +char 1 84 +char 1 0 +align 1 +LABELV $721 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 95 +char 1 67 +char 1 72 +char 1 65 +char 1 82 +char 1 71 +char 1 69 +char 1 0 +align 1 +LABELV $720 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 69 +char 1 84 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 65 +char 1 66 +char 1 76 +char 1 69 +char 1 0 +align 1 +LABELV $719 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 69 +char 1 84 +char 1 95 +char 1 70 +char 1 82 +char 1 69 +char 1 69 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $718 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 73 +char 1 86 +char 1 69 +char 1 95 +char 1 78 +char 1 69 +char 1 87 +char 1 95 +char 1 82 +char 1 65 +char 1 78 +char 1 75 +char 1 0 +align 1 +LABELV $717 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 83 +char 1 84 +char 1 82 +char 1 79 +char 1 89 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 95 +char 1 77 +char 1 79 +char 1 68 +char 1 69 +char 1 76 +char 1 0 +align 1 +LABELV $716 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 83 +char 1 84 +char 1 82 +char 1 79 +char 1 89 +char 1 95 +char 1 71 +char 1 72 +char 1 79 +char 1 85 +char 1 76 +char 1 50 +char 1 95 +char 1 73 +char 1 78 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 67 +char 1 69 +char 1 0 +align 1 +LABELV $715 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 71 +char 1 65 +char 1 95 +char 1 79 +char 1 66 +char 1 74 +char 1 69 +char 1 67 +char 1 84 +char 1 73 +char 1 86 +char 1 69 +char 1 67 +char 1 79 +char 1 77 +char 1 80 +char 1 76 +char 1 69 +char 1 84 +char 1 69 +char 1 0 +align 1 +LABELV $714 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 71 +char 1 65 +char 1 95 +char 1 82 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 79 +char 1 86 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $713 +char 1 69 +char 1 86 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 77 +char 1 69 +char 1 83 +char 1 83 +char 1 65 +char 1 71 +char 1 69 +char 1 0 +align 1 +LABELV $712 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 67 +char 1 79 +char 1 82 +char 1 69 +char 1 80 +char 1 76 +char 1 85 +char 1 77 +char 1 0 +align 1 +LABELV $711 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 73 +char 1 66 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $710 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 68 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 68 +char 1 0 +align 1 +LABELV $709 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 85 +char 1 80 +char 1 95 +char 1 66 +char 1 65 +char 1 84 +char 1 84 +char 1 76 +char 1 69 +char 1 83 +char 1 85 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $708 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 85 +char 1 80 +char 1 95 +char 1 81 +char 1 85 +char 1 65 +char 1 68 +char 1 0 +align 1 +LABELV $707 +char 1 69 +char 1 86 +char 1 95 +char 1 79 +char 1 66 +char 1 73 +char 1 84 +char 1 85 +char 1 65 +char 1 82 +char 1 89 +char 1 0 +align 1 +LABELV $706 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 51 +char 1 0 +align 1 +LABELV $705 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 50 +char 1 0 +align 1 +LABELV $704 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 0 +align 1 +LABELV $703 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 0 +align 1 +LABELV $702 +char 1 69 +char 1 86 +char 1 95 +char 1 66 +char 1 85 +char 1 76 +char 1 76 +char 1 69 +char 1 84 +char 1 0 +align 1 +LABELV $701 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 95 +char 1 77 +char 1 69 +char 1 84 +char 1 65 +char 1 76 +char 1 0 +align 1 +LABELV $700 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 0 +align 1 +LABELV $699 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $698 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 66 +char 1 82 +char 1 73 +char 1 83 +char 1 0 +align 1 +LABELV $697 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 76 +char 1 65 +char 1 83 +char 1 83 +char 1 95 +char 1 83 +char 1 72 +char 1 65 +char 1 84 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $696 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 95 +char 1 82 +char 1 79 +char 1 70 +char 1 70 +char 1 0 +align 1 +LABELV $695 +char 1 69 +char 1 86 +char 1 95 +char 1 69 +char 1 78 +char 1 84 +char 1 73 +char 1 84 +char 1 89 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $694 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 76 +char 1 79 +char 1 66 +char 1 65 +char 1 76 +char 1 95 +char 1 84 +char 1 69 +char 1 65 +char 1 77 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $693 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 76 +char 1 79 +char 1 66 +char 1 65 +char 1 76 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $692 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 69 +char 1 78 +char 1 69 +char 1 82 +char 1 65 +char 1 76 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $691 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 85 +char 1 84 +char 1 69 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $690 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 95 +char 1 69 +char 1 70 +char 1 70 +char 1 69 +char 1 67 +char 1 84 +char 1 95 +char 1 73 +char 1 68 +char 1 0 +align 1 +LABELV $689 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 95 +char 1 69 +char 1 70 +char 1 70 +char 1 69 +char 1 67 +char 1 84 +char 1 0 +align 1 +LABELV $688 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 95 +char 1 83 +char 1 84 +char 1 73 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $687 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 82 +char 1 69 +char 1 78 +char 1 65 +char 1 68 +char 1 69 +char 1 95 +char 1 66 +char 1 79 +char 1 85 +char 1 78 +char 1 67 +char 1 69 +char 1 0 +align 1 +LABELV $686 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 69 +char 1 76 +char 1 69 +char 1 80 +char 1 79 +char 1 82 +char 1 84 +char 1 95 +char 1 79 +char 1 85 +char 1 84 +char 1 0 +align 1 +LABELV $685 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 69 +char 1 76 +char 1 69 +char 1 80 +char 1 79 +char 1 82 +char 1 84 +char 1 95 +char 1 73 +char 1 78 +char 1 0 +align 1 +LABELV $684 +char 1 69 +char 1 86 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 95 +char 1 80 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $683 +char 1 69 +char 1 86 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 95 +char 1 82 +char 1 69 +char 1 83 +char 1 80 +char 1 65 +char 1 87 +char 1 78 +char 1 0 +align 1 +LABELV $682 +char 1 69 +char 1 86 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 85 +char 1 83 +char 1 69 +char 1 70 +char 1 65 +char 1 73 +char 1 76 +char 1 0 +align 1 +LABELV $681 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 53 +char 1 0 +align 1 +LABELV $680 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 52 +char 1 0 +align 1 +LABELV $679 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 51 +char 1 0 +align 1 +LABELV $678 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $677 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 49 +char 1 0 +align 1 +LABELV $676 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $675 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 57 +char 1 0 +align 1 +LABELV $674 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 56 +char 1 0 +align 1 +LABELV $673 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 55 +char 1 0 +align 1 +LABELV $672 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 54 +char 1 0 +align 1 +LABELV $671 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 53 +char 1 0 +align 1 +LABELV $670 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 52 +char 1 0 +align 1 +LABELV $669 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 51 +char 1 0 +align 1 +LABELV $668 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 50 +char 1 0 +align 1 +LABELV $667 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 0 +align 1 +LABELV $666 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 48 +char 1 0 +align 1 +LABELV $665 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 0 +align 1 +LABELV $664 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 67 +char 1 82 +char 1 69 +char 1 69 +char 1 78 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 0 +align 1 +LABELV $663 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 69 +char 1 65 +char 1 77 +char 1 95 +char 1 80 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $662 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 82 +char 1 69 +char 1 68 +char 1 69 +char 1 70 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $661 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 90 +char 1 79 +char 1 79 +char 1 77 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $660 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $659 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 83 +char 1 78 +char 1 73 +char 1 80 +char 1 69 +char 1 82 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 0 +align 1 +LABELV $658 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 83 +char 1 78 +char 1 73 +char 1 80 +char 1 69 +char 1 82 +char 1 95 +char 1 83 +char 1 72 +char 1 79 +char 1 84 +char 1 0 +align 1 +LABELV $657 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 77 +char 1 65 +char 1 73 +char 1 78 +char 1 95 +char 1 83 +char 1 72 +char 1 79 +char 1 84 +char 1 0 +align 1 +LABELV $656 +char 1 69 +char 1 86 +char 1 95 +char 1 66 +char 1 69 +char 1 67 +char 1 79 +char 1 77 +char 1 69 +char 1 95 +char 1 74 +char 1 69 +char 1 68 +char 1 73 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $655 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 85 +char 1 78 +char 1 72 +char 1 79 +char 1 76 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $654 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 79 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $653 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $652 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $651 +char 1 69 +char 1 86 +char 1 95 +char 1 65 +char 1 76 +char 1 84 +char 1 95 +char 1 70 +char 1 73 +char 1 82 +char 1 69 +char 1 0 +align 1 +LABELV $650 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 73 +char 1 82 +char 1 69 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 0 +align 1 +LABELV $649 +char 1 69 +char 1 86 +char 1 95 +char 1 67 +char 1 72 +char 1 65 +char 1 78 +char 1 71 +char 1 69 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 0 +align 1 +LABELV $648 +char 1 69 +char 1 86 +char 1 95 +char 1 78 +char 1 79 +char 1 65 +char 1 77 +char 1 77 +char 1 79 +char 1 0 +align 1 +LABELV $647 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 76 +char 1 79 +char 1 66 +char 1 65 +char 1 76 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 95 +char 1 80 +char 1 73 +char 1 67 +char 1 75 +char 1 85 +char 1 80 +char 1 0 +align 1 +LABELV $646 +char 1 69 +char 1 86 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 95 +char 1 80 +char 1 73 +char 1 67 +char 1 75 +char 1 85 +char 1 80 +char 1 0 +align 1 +LABELV $645 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 95 +char 1 67 +char 1 76 +char 1 69 +char 1 65 +char 1 82 +char 1 0 +align 1 +LABELV $644 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 95 +char 1 85 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $643 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 86 +char 1 69 +char 1 0 +align 1 +LABELV $642 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 0 +align 1 +LABELV $641 +char 1 69 +char 1 86 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $640 +char 1 69 +char 1 86 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 0 +align 1 +LABELV $639 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 82 +char 1 73 +char 1 86 +char 1 65 +char 1 84 +char 1 69 +char 1 95 +char 1 68 +char 1 85 +char 1 69 +char 1 76 +char 1 0 +align 1 +LABELV $638 +char 1 69 +char 1 86 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 95 +char 1 80 +char 1 65 +char 1 68 +char 1 0 +align 1 +LABELV $637 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $636 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 49 +char 1 54 +char 1 0 +align 1 +LABELV $635 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $634 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 56 +char 1 0 +align 1 +LABELV $633 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 52 +char 1 0 +align 1 +LABELV $632 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 0 +align 1 +LABELV $631 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 79 +char 1 84 +char 1 87 +char 1 65 +char 1 68 +char 1 69 +char 1 0 +align 1 +LABELV $630 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 79 +char 1 84 +char 1 83 +char 1 80 +char 1 76 +char 1 65 +char 1 83 +char 1 72 +char 1 0 +align 1 +LABELV $629 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 79 +char 1 84 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 77 +char 1 69 +char 1 84 +char 1 65 +char 1 76 +char 1 0 +align 1 +LABELV $628 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 79 +char 1 84 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 0 +align 1 +LABELV $627 +char 1 69 +char 1 86 +char 1 95 +char 1 67 +char 1 76 +char 1 73 +char 1 69 +char 1 78 +char 1 84 +char 1 74 +char 1 79 +char 1 73 +char 1 78 +char 1 0 +align 1 +LABELV $626 +char 1 69 +char 1 86 +char 1 95 +char 1 78 +char 1 79 +char 1 78 +char 1 69 +char 1 0 +align 1 +LABELV $624 +char 1 66 +char 1 71 +char 1 95 +char 1 69 +char 1 118 +char 1 97 +char 1 108 +char 1 117 +char 1 97 +char 1 116 +char 1 101 +char 1 84 +char 1 114 +char 1 97 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 111 +char 1 114 +char 1 121 +char 1 68 +char 1 101 +char 1 108 +char 1 116 +char 1 97 +char 1 58 +char 1 32 +char 1 117 +char 1 110 +char 1 107 +char 1 110 +char 1 111 +char 1 119 +char 1 110 +char 1 32 +char 1 116 +char 1 114 +char 1 84 +char 1 121 +char 1 112 +char 1 101 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $611 +char 1 66 +char 1 71 +char 1 95 +char 1 69 +char 1 118 +char 1 97 +char 1 108 +char 1 117 +char 1 97 +char 1 116 +char 1 101 +char 1 84 +char 1 114 +char 1 97 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 111 +char 1 114 +char 1 121 +char 1 58 +char 1 32 +char 1 91 +char 1 67 +char 1 76 +char 1 73 +char 1 69 +char 1 78 +char 1 84 +char 1 71 +char 1 65 +char 1 77 +char 1 69 +char 1 32 +char 1 83 +char 1 73 +char 1 68 +char 1 69 +char 1 93 +char 1 32 +char 1 117 +char 1 110 +char 1 107 +char 1 110 +char 1 111 +char 1 119 +char 1 110 +char 1 32 +char 1 116 +char 1 114 +char 1 84 +char 1 121 +char 1 112 +char 1 101 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $596 +char 1 66 +char 1 71 +char 1 95 +char 1 67 +char 1 97 +char 1 110 +char 1 73 +char 1 116 +char 1 101 +char 1 109 +char 1 66 +char 1 101 +char 1 71 +char 1 114 +char 1 97 +char 1 98 +char 1 98 +char 1 101 +char 1 100 +char 1 58 +char 1 32 +char 1 73 +char 1 84 +char 1 95 +char 1 66 +char 1 65 +char 1 68 +char 1 0 +align 1 +LABELV $539 +char 1 66 +char 1 71 +char 1 95 +char 1 67 +char 1 97 +char 1 110 +char 1 73 +char 1 116 +char 1 101 +char 1 109 +char 1 66 +char 1 101 +char 1 71 +char 1 114 +char 1 97 +char 1 98 +char 1 98 +char 1 101 +char 1 100 +char 1 58 +char 1 32 +char 1 105 +char 1 110 +char 1 100 +char 1 101 +char 1 120 +char 1 32 +char 1 111 +char 1 117 +char 1 116 +char 1 32 +char 1 111 +char 1 102 +char 1 32 +char 1 114 +char 1 97 +char 1 110 +char 1 103 +char 1 101 +char 1 0 +align 1 +LABELV $456 +char 1 67 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 110 +char 1 39 +char 1 116 +char 1 32 +char 1 102 +char 1 105 +char 1 110 +char 1 100 +char 1 32 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $447 +char 1 72 +char 1 111 +char 1 108 +char 1 100 +char 1 97 +char 1 98 +char 1 108 +char 1 101 +char 1 73 +char 1 116 +char 1 101 +char 1 109 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 102 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 0 +align 1 +LABELV $394 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 104 +char 1 95 +char 1 98 +char 1 111 +char 1 114 +char 1 98 +char 1 0 +align 1 +LABELV $393 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 117 +char 1 112 +char 1 115 +char 1 47 +char 1 111 +char 1 114 +char 1 98 +char 1 47 +char 1 98 +char 1 95 +char 1 111 +char 1 114 +char 1 98 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $392 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 99 +char 1 117 +char 1 98 +char 1 101 +char 1 0 +align 1 +LABELV $391 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 104 +char 1 95 +char 1 114 +char 1 111 +char 1 114 +char 1 98 +char 1 0 +align 1 +LABELV $390 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 117 +char 1 112 +char 1 115 +char 1 47 +char 1 111 +char 1 114 +char 1 98 +char 1 47 +char 1 114 +char 1 95 +char 1 111 +char 1 114 +char 1 98 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $389 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 114 +char 1 101 +char 1 100 +char 1 99 +char 1 117 +char 1 98 +char 1 101 +char 1 0 +align 1 +LABELV $388 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 102 +char 1 95 +char 1 110 +char 1 101 +char 1 117 +char 1 116 +char 1 114 +char 1 97 +char 1 108 +char 1 49 +char 1 0 +align 1 +LABELV $387 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 110 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $386 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 95 +char 1 110 +char 1 101 +char 1 117 +char 1 116 +char 1 114 +char 1 97 +char 1 108 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $385 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 98 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $384 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 98 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $383 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 98 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $382 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 95 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $381 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 114 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $380 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 114 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $379 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 114 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $378 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 95 +char 1 114 +char 1 101 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $377 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 114 +char 1 111 +char 1 99 +char 1 107 +char 1 101 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $376 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 114 +char 1 111 +char 1 99 +char 1 107 +char 1 101 +char 1 116 +char 1 115 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $375 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 114 +char 1 111 +char 1 99 +char 1 107 +char 1 101 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $374 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 109 +char 1 101 +char 1 116 +char 1 97 +char 1 108 +char 1 108 +char 1 105 +char 1 99 +char 1 95 +char 1 98 +char 1 111 +char 1 108 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $373 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 109 +char 1 101 +char 1 116 +char 1 97 +char 1 108 +char 1 108 +char 1 105 +char 1 99 +char 1 95 +char 1 98 +char 1 111 +char 1 108 +char 1 116 +char 1 115 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $372 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 109 +char 1 101 +char 1 116 +char 1 97 +char 1 108 +char 1 108 +char 1 105 +char 1 99 +char 1 95 +char 1 98 +char 1 111 +char 1 108 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $371 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 95 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $370 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 95 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $369 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $368 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 116 +char 1 116 +char 1 101 +char 1 114 +char 1 121 +char 1 0 +align 1 +LABELV $367 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $366 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 101 +char 1 110 +char 1 101 +char 1 114 +char 1 103 +char 1 121 +char 1 95 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $365 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 112 +char 1 105 +char 1 99 +char 1 107 +char 1 117 +char 1 112 +char 1 101 +char 1 110 +char 1 101 +char 1 114 +char 1 103 +char 1 121 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $364 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 0 +align 1 +LABELV $363 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 117 +char 1 114 +char 1 114 +char 1 101 +char 1 116 +char 1 119 +char 1 112 +char 1 0 +align 1 +LABELV $362 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 101 +char 1 109 +char 1 112 +char 1 108 +char 1 97 +char 1 99 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $361 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 0 +align 1 +LABELV $360 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 114 +char 1 105 +char 1 112 +char 1 95 +char 1 109 +char 1 105 +char 1 110 +char 1 101 +char 1 0 +align 1 +LABELV $359 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 0 +align 1 +LABELV $358 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 0 +align 1 +LABELV $357 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $356 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $355 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 95 +char 1 112 +char 1 114 +char 1 111 +char 1 106 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $354 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 95 +char 1 112 +char 1 117 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $353 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 0 +align 1 +LABELV $352 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 114 +char 1 105 +char 1 112 +char 1 109 +char 1 105 +char 1 110 +char 1 101 +char 1 0 +align 1 +LABELV $351 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $350 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $349 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 95 +char 1 112 +char 1 117 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $348 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 116 +char 1 114 +char 1 105 +char 1 112 +char 1 109 +char 1 105 +char 1 110 +char 1 101 +char 1 0 +align 1 +LABELV $347 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 0 +align 1 +LABELV $346 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $345 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $344 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 95 +char 1 112 +char 1 117 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $343 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 0 +align 1 +LABELV $342 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 0 +align 1 +LABELV $341 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 95 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 47 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 95 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $340 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 95 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 47 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 95 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $339 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 114 +char 1 111 +char 1 99 +char 1 107 +char 1 101 +char 1 116 +char 1 95 +char 1 108 +char 1 97 +char 1 117 +char 1 110 +char 1 99 +char 1 104 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $338 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 104 +char 1 101 +char 1 116 +char 1 116 +char 1 101 +char 1 0 +align 1 +LABELV $337 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 103 +char 1 111 +char 1 108 +char 1 97 +char 1 110 +char 1 95 +char 1 97 +char 1 114 +char 1 109 +char 1 115 +char 1 47 +char 1 103 +char 1 111 +char 1 108 +char 1 97 +char 1 110 +char 1 95 +char 1 97 +char 1 114 +char 1 109 +char 1 115 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $336 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 103 +char 1 111 +char 1 108 +char 1 97 +char 1 110 +char 1 95 +char 1 97 +char 1 114 +char 1 109 +char 1 115 +char 1 47 +char 1 103 +char 1 111 +char 1 108 +char 1 97 +char 1 110 +char 1 95 +char 1 97 +char 1 114 +char 1 109 +char 1 115 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $335 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 104 +char 1 101 +char 1 116 +char 1 116 +char 1 101 +char 1 0 +align 1 +LABELV $334 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 0 +align 1 +LABELV $333 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $332 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $331 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 0 +align 1 +LABELV $330 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $329 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 104 +char 1 101 +char 1 97 +char 1 118 +char 1 121 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 47 +char 1 104 +char 1 101 +char 1 97 +char 1 118 +char 1 121 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $328 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 104 +char 1 101 +char 1 97 +char 1 118 +char 1 121 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 47 +char 1 104 +char 1 101 +char 1 97 +char 1 118 +char 1 121 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $327 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $326 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $325 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 47 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $324 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 47 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $323 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $322 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 0 +align 1 +LABELV $321 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 47 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $320 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 47 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $319 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 0 +align 1 +LABELV $318 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $317 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 114 +char 1 47 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $316 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 114 +char 1 47 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $315 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $314 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 114 +char 1 105 +char 1 102 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $313 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 114 +char 1 105 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 47 +char 1 98 +char 1 114 +char 1 105 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $312 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 114 +char 1 105 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 47 +char 1 98 +char 1 114 +char 1 105 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $311 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 114 +char 1 121 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 0 +align 1 +LABELV $310 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $309 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $308 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $307 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $306 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 116 +char 1 117 +char 1 110 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $305 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 116 +char 1 117 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 47 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $304 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 116 +char 1 117 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 47 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $303 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 116 +char 1 117 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $302 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 0 +align 1 +LABELV $301 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 105 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $300 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 105 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $299 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 105 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 0 +align 1 +LABELV $298 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 102 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $297 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $296 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $295 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $294 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 100 +char 1 107 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 0 +align 1 +LABELV $293 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 100 +char 1 107 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 109 +char 1 101 +char 1 110 +char 1 116 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $292 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 95 +char 1 100 +char 1 97 +char 1 114 +char 1 107 +char 1 0 +align 1 +LABELV $291 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 106 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 0 +align 1 +LABELV $290 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 106 +char 1 101 +char 1 100 +char 1 105 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 109 +char 1 101 +char 1 110 +char 1 116 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $289 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 109 +char 1 101 +char 1 110 +char 1 116 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $288 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 95 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 0 +align 1 +LABELV $287 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 101 +char 1 110 +char 1 116 +char 1 114 +char 1 121 +char 1 103 +char 1 117 +char 1 110 +char 1 0 +align 1 +LABELV $286 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 112 +char 1 115 +char 1 103 +char 1 117 +char 1 110 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $285 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 101 +char 1 110 +char 1 116 +char 1 114 +char 1 121 +char 1 95 +char 1 103 +char 1 117 +char 1 110 +char 1 0 +align 1 +LABELV $284 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 122 +char 1 111 +char 1 111 +char 1 109 +char 1 0 +align 1 +LABELV $283 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 98 +char 1 105 +char 1 110 +char 1 111 +char 1 99 +char 1 117 +char 1 108 +char 1 97 +char 1 114 +char 1 115 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $282 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 98 +char 1 105 +char 1 110 +char 1 111 +char 1 99 +char 1 117 +char 1 108 +char 1 97 +char 1 114 +char 1 115 +char 1 0 +align 1 +LABELV $281 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 100 +char 1 97 +char 1 116 +char 1 97 +char 1 112 +char 1 97 +char 1 100 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $280 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 100 +char 1 97 +char 1 116 +char 1 97 +char 1 112 +char 1 97 +char 1 100 +char 1 0 +align 1 +LABELV $279 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 99 +char 1 116 +char 1 97 +char 1 0 +align 1 +LABELV $278 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 98 +char 1 97 +char 1 99 +char 1 116 +char 1 97 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $277 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 109 +char 1 101 +char 1 100 +char 1 112 +char 1 97 +char 1 99 +char 1 0 +align 1 +LABELV $276 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 115 +char 1 116 +char 1 105 +char 1 99 +char 1 107 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 47 +char 1 100 +char 1 111 +char 1 111 +char 1 114 +char 1 115 +char 1 47 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 111 +char 1 110 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 47 +char 1 100 +char 1 111 +char 1 111 +char 1 114 +char 1 115 +char 1 47 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 111 +char 1 102 +char 1 102 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 47 +char 1 100 +char 1 111 +char 1 111 +char 1 114 +char 1 115 +char 1 47 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 108 +char 1 112 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 101 +char 1 102 +char 1 102 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 98 +char 1 117 +char 1 109 +char 1 112 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $275 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 119 +char 1 97 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $274 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $273 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 0 +align 1 +LABELV $272 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 101 +char 1 101 +char 1 107 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $271 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 114 +char 1 101 +char 1 109 +char 1 111 +char 1 116 +char 1 101 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $270 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 119 +char 1 95 +char 1 112 +char 1 107 +char 1 117 +char 1 112 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $269 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 101 +char 1 101 +char 1 107 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $268 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 109 +char 1 101 +char 1 100 +char 1 107 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $267 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 109 +char 1 101 +char 1 100 +char 1 112 +char 1 97 +char 1 99 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $266 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 112 +char 1 105 +char 1 99 +char 1 107 +char 1 117 +char 1 112 +char 1 104 +char 1 101 +char 1 97 +char 1 108 +char 1 116 +char 1 104 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $265 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 109 +char 1 101 +char 1 100 +char 1 112 +char 1 97 +char 1 107 +char 1 95 +char 1 105 +char 1 110 +char 1 115 +char 1 116 +char 1 97 +char 1 110 +char 1 116 +char 1 0 +align 1 +LABELV $264 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 108 +char 1 97 +char 1 114 +char 1 103 +char 1 101 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 0 +align 1 +LABELV $263 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 112 +char 1 115 +char 1 100 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $262 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 108 +char 1 114 +char 1 103 +char 1 95 +char 1 105 +char 1 110 +char 1 115 +char 1 116 +char 1 97 +char 1 110 +char 1 116 +char 1 0 +align 1 +LABELV $261 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 115 +char 1 109 +char 1 97 +char 1 108 +char 1 108 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 0 +align 1 +LABELV $260 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 112 +char 1 115 +char 1 100 +char 1 95 +char 1 115 +char 1 109 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $259 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 112 +char 1 105 +char 1 99 +char 1 107 +char 1 117 +char 1 112 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $258 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 115 +char 1 109 +char 1 95 +char 1 105 +char 1 110 +char 1 115 +char 1 116 +char 1 97 +char 1 110 +char 1 116 +char 1 0 +align 1 +LABELV $257 +char 1 0 +align 1 +LABELV $256 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $132 +char 1 37 +char 1 105 +char 1 45 +char 1 0 +align 1 +LABELV $131 +char 1 55 +char 1 45 +char 1 49 +char 1 45 +char 1 48 +char 1 51 +char 1 50 +char 1 51 +char 1 51 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 49 +char 1 51 +char 1 51 +char 1 51 +char 1 0 +align 1 +LABELV $127 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 55 +char 1 0 +align 1 +LABELV $126 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 54 +char 1 0 +align 1 +LABELV $125 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 53 +char 1 0 +align 1 +LABELV $124 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 52 +char 1 0 +align 1 +LABELV $123 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 51 +char 1 0 +align 1 +LABELV $122 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 50 +char 1 0 +align 1 +LABELV $121 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 49 +char 1 0 +align 1 +LABELV $120 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 48 +char 1 0 diff --git a/CODE-mp/game/vm/bg_panimate.asm b/CODE-mp/game/vm/bg_panimate.asm new file mode 100644 index 0000000..219f36a --- /dev/null +++ b/CODE-mp/game/vm/bg_panimate.asm @@ -0,0 +1,26161 @@ +data +export animTable +align 4 +LABELV animTable +address $65 +byte 4 0 +address $66 +byte 4 1 +address $67 +byte 4 2 +address $68 +byte 4 3 +address $69 +byte 4 4 +address $70 +byte 4 5 +address $71 +byte 4 6 +address $72 +byte 4 7 +address $73 +byte 4 8 +address $74 +byte 4 9 +address $75 +byte 4 10 +address $76 +byte 4 11 +address $77 +byte 4 12 +address $78 +byte 4 13 +address $79 +byte 4 14 +address $80 +byte 4 15 +address $81 +byte 4 16 +address $82 +byte 4 17 +address $83 +byte 4 18 +address $84 +byte 4 19 +address $85 +byte 4 20 +address $86 +byte 4 21 +address $87 +byte 4 22 +address $88 +byte 4 23 +address $89 +byte 4 24 +address $90 +byte 4 25 +address $91 +byte 4 26 +address $92 +byte 4 27 +address $93 +byte 4 28 +address $94 +byte 4 29 +address $95 +byte 4 30 +address $96 +byte 4 31 +address $97 +byte 4 32 +address $98 +byte 4 33 +address $99 +byte 4 34 +address $100 +byte 4 35 +address $101 +byte 4 36 +address $102 +byte 4 37 +address $103 +byte 4 38 +address $104 +byte 4 39 +address $105 +byte 4 40 +address $106 +byte 4 41 +address $107 +byte 4 42 +address $108 +byte 4 43 +address $109 +byte 4 44 +address $110 +byte 4 45 +address $111 +byte 4 46 +address $112 +byte 4 47 +address $113 +byte 4 48 +address $114 +byte 4 49 +address $115 +byte 4 50 +address $116 +byte 4 51 +address $117 +byte 4 52 +address $118 +byte 4 53 +address $119 +byte 4 54 +address $120 +byte 4 55 +address $121 +byte 4 56 +address $122 +byte 4 57 +address $123 +byte 4 58 +address $124 +byte 4 59 +address $125 +byte 4 60 +address $126 +byte 4 61 +address $127 +byte 4 62 +address $128 +byte 4 63 +address $129 +byte 4 64 +address $130 +byte 4 65 +address $131 +byte 4 66 +address $132 +byte 4 67 +address $133 +byte 4 68 +address $134 +byte 4 69 +address $135 +byte 4 70 +address $136 +byte 4 71 +address $137 +byte 4 72 +address $138 +byte 4 73 +address $139 +byte 4 74 +address $140 +byte 4 75 +address $141 +byte 4 76 +address $142 +byte 4 77 +address $143 +byte 4 78 +address $144 +byte 4 79 +address $145 +byte 4 80 +address $146 +byte 4 81 +address $147 +byte 4 82 +address $148 +byte 4 83 +address $149 +byte 4 84 +address $150 +byte 4 85 +address $151 +byte 4 86 +address $152 +byte 4 87 +address $153 +byte 4 88 +address $154 +byte 4 89 +address $155 +byte 4 90 +address $156 +byte 4 91 +address $157 +byte 4 92 +address $158 +byte 4 93 +address $159 +byte 4 94 +address $160 +byte 4 95 +address $161 +byte 4 96 +address $162 +byte 4 97 +address $163 +byte 4 98 +address $164 +byte 4 99 +address $165 +byte 4 100 +address $166 +byte 4 101 +address $167 +byte 4 102 +address $168 +byte 4 103 +address $169 +byte 4 104 +address $170 +byte 4 105 +address $171 +byte 4 106 +address $172 +byte 4 107 +address $173 +byte 4 108 +address $174 +byte 4 109 +address $175 +byte 4 110 +address $176 +byte 4 111 +address $177 +byte 4 112 +address $178 +byte 4 113 +address $179 +byte 4 114 +address $180 +byte 4 115 +address $181 +byte 4 116 +address $182 +byte 4 117 +address $183 +byte 4 118 +address $184 +byte 4 119 +address $185 +byte 4 120 +address $186 +byte 4 121 +address $187 +byte 4 122 +address $188 +byte 4 123 +address $189 +byte 4 124 +address $190 +byte 4 125 +address $191 +byte 4 126 +address $192 +byte 4 127 +address $193 +byte 4 128 +address $194 +byte 4 129 +address $195 +byte 4 130 +address $196 +byte 4 131 +address $197 +byte 4 132 +address $198 +byte 4 133 +address $199 +byte 4 134 +address $200 +byte 4 135 +address $201 +byte 4 136 +address $202 +byte 4 137 +address $203 +byte 4 138 +address $204 +byte 4 139 +address $205 +byte 4 140 +address $206 +byte 4 141 +address $207 +byte 4 142 +address $208 +byte 4 143 +address $209 +byte 4 144 +address $210 +byte 4 145 +address $211 +byte 4 146 +address $212 +byte 4 147 +address $213 +byte 4 148 +address $214 +byte 4 149 +address $215 +byte 4 150 +address $216 +byte 4 151 +address $217 +byte 4 152 +address $218 +byte 4 153 +address $219 +byte 4 154 +address $220 +byte 4 155 +address $221 +byte 4 156 +address $222 +byte 4 157 +address $223 +byte 4 158 +address $224 +byte 4 159 +address $225 +byte 4 160 +address $226 +byte 4 161 +address $227 +byte 4 162 +address $228 +byte 4 163 +address $229 +byte 4 164 +address $230 +byte 4 165 +address $231 +byte 4 166 +address $232 +byte 4 167 +address $233 +byte 4 168 +address $234 +byte 4 169 +address $235 +byte 4 170 +address $236 +byte 4 171 +address $237 +byte 4 172 +address $238 +byte 4 173 +address $239 +byte 4 174 +address $240 +byte 4 175 +address $241 +byte 4 176 +address $242 +byte 4 177 +address $243 +byte 4 178 +address $244 +byte 4 179 +address $245 +byte 4 180 +address $246 +byte 4 181 +address $247 +byte 4 182 +address $248 +byte 4 183 +address $249 +byte 4 184 +address $250 +byte 4 185 +address $251 +byte 4 186 +address $252 +byte 4 187 +address $253 +byte 4 188 +address $254 +byte 4 189 +address $255 +byte 4 190 +address $256 +byte 4 191 +address $257 +byte 4 192 +address $258 +byte 4 193 +address $259 +byte 4 194 +address $260 +byte 4 195 +address $261 +byte 4 196 +address $262 +byte 4 197 +address $263 +byte 4 198 +address $264 +byte 4 199 +address $265 +byte 4 200 +address $266 +byte 4 201 +address $267 +byte 4 202 +address $268 +byte 4 203 +address $269 +byte 4 204 +address $270 +byte 4 205 +address $271 +byte 4 206 +address $272 +byte 4 207 +address $273 +byte 4 208 +address $274 +byte 4 209 +address $275 +byte 4 210 +address $276 +byte 4 211 +address $277 +byte 4 212 +address $278 +byte 4 213 +address $279 +byte 4 214 +address $280 +byte 4 215 +address $281 +byte 4 216 +address $282 +byte 4 217 +address $283 +byte 4 218 +address $284 +byte 4 219 +address $285 +byte 4 220 +address $286 +byte 4 221 +address $287 +byte 4 222 +address $288 +byte 4 223 +address $289 +byte 4 224 +address $290 +byte 4 225 +address $291 +byte 4 226 +address $292 +byte 4 227 +address $293 +byte 4 228 +address $294 +byte 4 229 +address $295 +byte 4 230 +address $296 +byte 4 231 +address $297 +byte 4 232 +address $298 +byte 4 233 +address $299 +byte 4 234 +address $300 +byte 4 235 +address $301 +byte 4 236 +address $302 +byte 4 237 +address $303 +byte 4 238 +address $304 +byte 4 239 +address $305 +byte 4 240 +address $306 +byte 4 241 +address $307 +byte 4 242 +address $308 +byte 4 243 +address $309 +byte 4 244 +address $310 +byte 4 245 +address $311 +byte 4 246 +address $312 +byte 4 247 +address $313 +byte 4 248 +address $314 +byte 4 249 +address $315 +byte 4 250 +address $316 +byte 4 251 +address $317 +byte 4 252 +address $318 +byte 4 253 +address $319 +byte 4 254 +address $320 +byte 4 255 +address $321 +byte 4 256 +address $322 +byte 4 257 +address $323 +byte 4 258 +address $324 +byte 4 259 +address $325 +byte 4 260 +address $326 +byte 4 261 +address $327 +byte 4 262 +address $328 +byte 4 263 +address $329 +byte 4 264 +address $330 +byte 4 265 +address $331 +byte 4 266 +address $332 +byte 4 267 +address $333 +byte 4 268 +address $334 +byte 4 269 +address $335 +byte 4 270 +address $336 +byte 4 271 +address $337 +byte 4 272 +address $338 +byte 4 273 +address $339 +byte 4 274 +address $340 +byte 4 275 +address $341 +byte 4 276 +address $342 +byte 4 277 +address $343 +byte 4 278 +address $344 +byte 4 279 +address $345 +byte 4 280 +address $346 +byte 4 281 +address $347 +byte 4 282 +address $348 +byte 4 283 +address $349 +byte 4 284 +address $350 +byte 4 285 +address $351 +byte 4 286 +address $352 +byte 4 287 +address $353 +byte 4 288 +address $354 +byte 4 289 +address $355 +byte 4 290 +address $356 +byte 4 291 +address $357 +byte 4 292 +address $358 +byte 4 293 +address $359 +byte 4 294 +address $360 +byte 4 295 +address $361 +byte 4 296 +address $362 +byte 4 297 +address $363 +byte 4 298 +address $364 +byte 4 299 +address $365 +byte 4 300 +address $366 +byte 4 301 +address $367 +byte 4 302 +address $368 +byte 4 303 +address $369 +byte 4 304 +address $370 +byte 4 305 +address $371 +byte 4 306 +address $372 +byte 4 307 +address $373 +byte 4 308 +address $374 +byte 4 309 +address $375 +byte 4 310 +address $376 +byte 4 311 +address $377 +byte 4 312 +address $378 +byte 4 313 +address $379 +byte 4 314 +address $380 +byte 4 315 +address $381 +byte 4 316 +address $382 +byte 4 317 +address $383 +byte 4 318 +address $384 +byte 4 319 +address $385 +byte 4 320 +address $386 +byte 4 321 +address $387 +byte 4 322 +address $388 +byte 4 323 +address $389 +byte 4 324 +address $390 +byte 4 325 +address $391 +byte 4 326 +address $392 +byte 4 327 +address $393 +byte 4 328 +address $394 +byte 4 329 +address $395 +byte 4 330 +address $396 +byte 4 331 +address $397 +byte 4 332 +address $398 +byte 4 333 +address $399 +byte 4 334 +address $400 +byte 4 335 +address $401 +byte 4 336 +address $402 +byte 4 337 +address $403 +byte 4 338 +address $404 +byte 4 339 +address $405 +byte 4 340 +address $406 +byte 4 341 +address $407 +byte 4 342 +address $408 +byte 4 343 +address $409 +byte 4 344 +address $410 +byte 4 345 +address $411 +byte 4 346 +address $412 +byte 4 347 +address $413 +byte 4 348 +address $414 +byte 4 349 +address $415 +byte 4 350 +address $416 +byte 4 351 +address $417 +byte 4 352 +address $418 +byte 4 353 +address $419 +byte 4 354 +address $420 +byte 4 355 +address $421 +byte 4 356 +address $422 +byte 4 357 +address $423 +byte 4 358 +address $424 +byte 4 359 +address $425 +byte 4 360 +address $426 +byte 4 361 +address $427 +byte 4 362 +address $428 +byte 4 363 +address $429 +byte 4 364 +address $430 +byte 4 365 +address $431 +byte 4 366 +address $432 +byte 4 367 +address $433 +byte 4 368 +address $434 +byte 4 369 +address $435 +byte 4 370 +address $436 +byte 4 371 +address $437 +byte 4 372 +address $438 +byte 4 373 +address $439 +byte 4 374 +address $440 +byte 4 375 +address $441 +byte 4 376 +address $442 +byte 4 377 +address $443 +byte 4 378 +address $444 +byte 4 379 +address $445 +byte 4 380 +address $446 +byte 4 381 +address $447 +byte 4 382 +address $448 +byte 4 383 +address $449 +byte 4 384 +address $450 +byte 4 385 +address $451 +byte 4 386 +address $452 +byte 4 387 +address $453 +byte 4 388 +address $454 +byte 4 389 +address $455 +byte 4 390 +address $456 +byte 4 391 +address $457 +byte 4 392 +address $458 +byte 4 393 +address $459 +byte 4 394 +address $460 +byte 4 395 +address $461 +byte 4 396 +address $462 +byte 4 397 +address $463 +byte 4 398 +address $464 +byte 4 399 +address $465 +byte 4 400 +address $466 +byte 4 401 +address $467 +byte 4 402 +address $468 +byte 4 403 +address $469 +byte 4 404 +address $470 +byte 4 405 +address $471 +byte 4 406 +address $472 +byte 4 407 +address $473 +byte 4 408 +address $474 +byte 4 409 +address $475 +byte 4 410 +address $476 +byte 4 411 +address $477 +byte 4 412 +address $478 +byte 4 413 +address $479 +byte 4 414 +address $480 +byte 4 415 +address $481 +byte 4 416 +address $482 +byte 4 417 +address $483 +byte 4 418 +address $484 +byte 4 419 +address $485 +byte 4 420 +address $486 +byte 4 421 +address $487 +byte 4 422 +address $488 +byte 4 423 +address $489 +byte 4 424 +address $490 +byte 4 425 +address $491 +byte 4 426 +address $492 +byte 4 427 +address $493 +byte 4 428 +address $494 +byte 4 429 +address $495 +byte 4 430 +address $496 +byte 4 431 +address $497 +byte 4 432 +address $498 +byte 4 433 +address $499 +byte 4 434 +address $500 +byte 4 435 +address $501 +byte 4 436 +address $502 +byte 4 437 +address $503 +byte 4 438 +address $504 +byte 4 439 +address $505 +byte 4 440 +address $506 +byte 4 441 +address $507 +byte 4 442 +address $508 +byte 4 443 +address $509 +byte 4 444 +address $510 +byte 4 445 +address $511 +byte 4 446 +address $512 +byte 4 447 +address $513 +byte 4 448 +address $514 +byte 4 449 +address $515 +byte 4 450 +address $516 +byte 4 451 +address $517 +byte 4 452 +address $518 +byte 4 453 +address $519 +byte 4 454 +address $520 +byte 4 455 +address $521 +byte 4 456 +address $522 +byte 4 457 +address $523 +byte 4 458 +address $524 +byte 4 459 +address $525 +byte 4 460 +address $526 +byte 4 461 +address $527 +byte 4 462 +address $528 +byte 4 463 +address $529 +byte 4 464 +address $530 +byte 4 465 +address $531 +byte 4 466 +address $532 +byte 4 467 +address $533 +byte 4 468 +address $534 +byte 4 469 +address $535 +byte 4 470 +address $536 +byte 4 471 +address $537 +byte 4 472 +address $538 +byte 4 473 +address $539 +byte 4 474 +address $540 +byte 4 475 +address $541 +byte 4 476 +address $542 +byte 4 477 +address $543 +byte 4 478 +address $544 +byte 4 479 +address $545 +byte 4 480 +address $546 +byte 4 481 +address $547 +byte 4 482 +address $548 +byte 4 483 +address $549 +byte 4 484 +address $550 +byte 4 485 +address $551 +byte 4 486 +address $552 +byte 4 487 +address $553 +byte 4 488 +address $554 +byte 4 489 +address $555 +byte 4 490 +address $556 +byte 4 491 +address $557 +byte 4 492 +address $558 +byte 4 493 +address $559 +byte 4 494 +address $560 +byte 4 495 +address $561 +byte 4 496 +address $562 +byte 4 497 +address $563 +byte 4 498 +address $564 +byte 4 499 +address $565 +byte 4 500 +address $566 +byte 4 501 +address $567 +byte 4 502 +address $568 +byte 4 503 +address $569 +byte 4 504 +address $570 +byte 4 505 +address $571 +byte 4 506 +address $572 +byte 4 507 +address $573 +byte 4 508 +address $574 +byte 4 509 +address $575 +byte 4 510 +address $576 +byte 4 511 +address $577 +byte 4 512 +address $578 +byte 4 513 +address $579 +byte 4 514 +address $580 +byte 4 515 +address $581 +byte 4 516 +address $582 +byte 4 517 +address $583 +byte 4 518 +address $584 +byte 4 519 +address $585 +byte 4 520 +address $586 +byte 4 521 +address $587 +byte 4 522 +address $588 +byte 4 523 +address $589 +byte 4 524 +address $590 +byte 4 525 +address $591 +byte 4 526 +address $592 +byte 4 527 +address $593 +byte 4 528 +address $594 +byte 4 529 +address $595 +byte 4 530 +address $596 +byte 4 531 +address $597 +byte 4 532 +address $598 +byte 4 533 +address $599 +byte 4 534 +address $600 +byte 4 535 +address $601 +byte 4 536 +address $602 +byte 4 537 +address $603 +byte 4 538 +address $604 +byte 4 539 +address $605 +byte 4 540 +address $606 +byte 4 541 +address $607 +byte 4 542 +address $608 +byte 4 543 +address $609 +byte 4 544 +address $610 +byte 4 545 +address $611 +byte 4 546 +address $612 +byte 4 547 +address $613 +byte 4 548 +address $614 +byte 4 549 +address $615 +byte 4 550 +address $616 +byte 4 551 +address $617 +byte 4 552 +address $618 +byte 4 553 +address $619 +byte 4 554 +address $620 +byte 4 555 +address $621 +byte 4 556 +address $622 +byte 4 557 +address $623 +byte 4 558 +address $624 +byte 4 559 +address $625 +byte 4 560 +address $626 +byte 4 561 +address $627 +byte 4 562 +address $628 +byte 4 563 +address $629 +byte 4 564 +address $630 +byte 4 565 +address $631 +byte 4 566 +address $632 +byte 4 567 +address $633 +byte 4 568 +address $634 +byte 4 569 +address $635 +byte 4 570 +address $636 +byte 4 571 +address $637 +byte 4 572 +address $638 +byte 4 573 +address $639 +byte 4 574 +address $640 +byte 4 575 +address $641 +byte 4 576 +address $642 +byte 4 577 +address $643 +byte 4 578 +address $644 +byte 4 579 +address $645 +byte 4 580 +address $646 +byte 4 581 +address $647 +byte 4 582 +address $648 +byte 4 583 +address $649 +byte 4 584 +address $650 +byte 4 585 +address $651 +byte 4 586 +address $652 +byte 4 587 +address $653 +byte 4 588 +address $654 +byte 4 589 +address $655 +byte 4 590 +address $656 +byte 4 591 +address $657 +byte 4 592 +address $658 +byte 4 593 +address $659 +byte 4 594 +address $660 +byte 4 595 +address $661 +byte 4 596 +address $662 +byte 4 597 +address $663 +byte 4 598 +address $664 +byte 4 599 +address $665 +byte 4 600 +address $666 +byte 4 601 +address $667 +byte 4 602 +address $668 +byte 4 603 +address $669 +byte 4 604 +address $670 +byte 4 605 +address $671 +byte 4 606 +address $672 +byte 4 607 +address $673 +byte 4 608 +address $674 +byte 4 609 +address $675 +byte 4 610 +address $676 +byte 4 611 +address $677 +byte 4 612 +address $678 +byte 4 613 +address $679 +byte 4 614 +address $680 +byte 4 615 +address $681 +byte 4 616 +address $682 +byte 4 617 +address $683 +byte 4 618 +address $684 +byte 4 619 +address $685 +byte 4 620 +address $686 +byte 4 621 +address $687 +byte 4 622 +address $688 +byte 4 623 +address $689 +byte 4 624 +address $690 +byte 4 625 +address $691 +byte 4 626 +address $692 +byte 4 627 +address $693 +byte 4 628 +address $694 +byte 4 629 +address $695 +byte 4 630 +address $696 +byte 4 631 +address $697 +byte 4 632 +address $698 +byte 4 633 +address $699 +byte 4 634 +address $700 +byte 4 635 +address $701 +byte 4 636 +address $702 +byte 4 637 +address $703 +byte 4 638 +address $704 +byte 4 639 +address $705 +byte 4 640 +address $706 +byte 4 641 +address $707 +byte 4 642 +address $708 +byte 4 643 +address $709 +byte 4 644 +address $710 +byte 4 645 +address $711 +byte 4 646 +address $712 +byte 4 647 +address $713 +byte 4 648 +address $714 +byte 4 649 +address $715 +byte 4 650 +address $716 +byte 4 651 +address $717 +byte 4 652 +address $718 +byte 4 653 +address $719 +byte 4 654 +address $720 +byte 4 655 +address $721 +byte 4 656 +address $722 +byte 4 657 +address $723 +byte 4 658 +address $724 +byte 4 659 +address $725 +byte 4 660 +address $726 +byte 4 661 +address $727 +byte 4 662 +address $728 +byte 4 663 +address $729 +byte 4 664 +address $730 +byte 4 665 +address $731 +byte 4 666 +address $732 +byte 4 667 +address $733 +byte 4 668 +address $734 +byte 4 669 +address $735 +byte 4 670 +address $736 +byte 4 671 +address $737 +byte 4 672 +address $738 +byte 4 673 +address $739 +byte 4 674 +address $740 +byte 4 675 +address $741 +byte 4 676 +address $742 +byte 4 677 +address $743 +byte 4 678 +address $744 +byte 4 679 +address $745 +byte 4 680 +address $746 +byte 4 681 +address $747 +byte 4 682 +address $748 +byte 4 683 +address $749 +byte 4 684 +address $750 +byte 4 685 +address $751 +byte 4 686 +address $752 +byte 4 687 +address $753 +byte 4 688 +address $754 +byte 4 689 +address $755 +byte 4 690 +address $756 +byte 4 691 +address $757 +byte 4 692 +address $758 +byte 4 693 +address $759 +byte 4 694 +address $760 +byte 4 695 +address $761 +byte 4 696 +address $762 +byte 4 697 +address $763 +byte 4 698 +address $764 +byte 4 699 +address $765 +byte 4 700 +address $766 +byte 4 701 +address $767 +byte 4 702 +address $768 +byte 4 704 +address $769 +byte 4 703 +address $770 +byte 4 705 +address $771 +byte 4 706 +address $772 +byte 4 707 +address $773 +byte 4 708 +address $774 +byte 4 709 +address $775 +byte 4 710 +address $776 +byte 4 711 +address $777 +byte 4 712 +address $778 +byte 4 713 +address $779 +byte 4 714 +address $780 +byte 4 715 +address $781 +byte 4 716 +address $782 +byte 4 717 +address $783 +byte 4 718 +address $784 +byte 4 719 +address $785 +byte 4 720 +address $786 +byte 4 721 +address $787 +byte 4 722 +address $788 +byte 4 723 +address $789 +byte 4 724 +address $790 +byte 4 725 +address $791 +byte 4 726 +address $792 +byte 4 727 +address $793 +byte 4 728 +address $794 +byte 4 729 +address $795 +byte 4 730 +address $796 +byte 4 731 +address $797 +byte 4 732 +address $798 +byte 4 733 +address $799 +byte 4 734 +address $800 +byte 4 735 +address $801 +byte 4 736 +address $802 +byte 4 737 +address $803 +byte 4 738 +address $804 +byte 4 739 +address $805 +byte 4 740 +address $806 +byte 4 741 +address $807 +byte 4 742 +address $808 +byte 4 743 +address $809 +byte 4 744 +address $810 +byte 4 745 +address $811 +byte 4 746 +address $812 +byte 4 747 +address $813 +byte 4 748 +address $814 +byte 4 749 +address $815 +byte 4 750 +address $816 +byte 4 751 +address $817 +byte 4 752 +address $818 +byte 4 753 +address $819 +byte 4 754 +address $820 +byte 4 755 +address $821 +byte 4 756 +address $822 +byte 4 757 +address $823 +byte 4 758 +address $824 +byte 4 759 +address $825 +byte 4 760 +address $826 +byte 4 761 +address $827 +byte 4 762 +address $828 +byte 4 763 +address $829 +byte 4 764 +address $830 +byte 4 765 +address $831 +byte 4 766 +address $832 +byte 4 767 +address $833 +byte 4 768 +address $834 +byte 4 769 +address $835 +byte 4 770 +address $836 +byte 4 771 +address $837 +byte 4 772 +address $838 +byte 4 773 +address $839 +byte 4 774 +address $840 +byte 4 775 +address $841 +byte 4 776 +address $842 +byte 4 777 +address $843 +byte 4 778 +address $844 +byte 4 779 +address $845 +byte 4 780 +address $846 +byte 4 781 +address $847 +byte 4 782 +address $848 +byte 4 783 +address $849 +byte 4 784 +address $850 +byte 4 785 +address $851 +byte 4 786 +address $852 +byte 4 787 +address $853 +byte 4 788 +address $854 +byte 4 789 +address $855 +byte 4 790 +address $856 +byte 4 791 +address $857 +byte 4 792 +address $858 +byte 4 793 +address $859 +byte 4 794 +address $860 +byte 4 795 +address $861 +byte 4 796 +address $862 +byte 4 797 +address $863 +byte 4 798 +address $864 +byte 4 799 +address $865 +byte 4 800 +address $866 +byte 4 801 +address $867 +byte 4 802 +address $868 +byte 4 803 +address $869 +byte 4 804 +address $870 +byte 4 805 +address $871 +byte 4 806 +address $872 +byte 4 807 +address $873 +byte 4 808 +address $874 +byte 4 809 +address $875 +byte 4 810 +address $876 +byte 4 811 +address $877 +byte 4 812 +address $878 +byte 4 813 +address $879 +byte 4 814 +address $880 +byte 4 815 +address $881 +byte 4 816 +address $882 +byte 4 817 +address $883 +byte 4 818 +address $884 +byte 4 819 +address $885 +byte 4 820 +address $886 +byte 4 821 +address $887 +byte 4 822 +address $888 +byte 4 823 +address $889 +byte 4 824 +address $890 +byte 4 825 +address $891 +byte 4 826 +address $892 +byte 4 827 +address $893 +byte 4 828 +address $894 +byte 4 829 +address $895 +byte 4 830 +address $896 +byte 4 831 +address $897 +byte 4 832 +address $898 +byte 4 833 +address $899 +byte 4 834 +address $900 +byte 4 835 +address $901 +byte 4 836 +address $902 +byte 4 837 +address $903 +byte 4 838 +address $904 +byte 4 839 +address $905 +byte 4 840 +address $906 +byte 4 841 +address $907 +byte 4 842 +address $908 +byte 4 843 +address $909 +byte 4 844 +address $910 +byte 4 845 +address $911 +byte 4 846 +address $912 +byte 4 847 +address $913 +byte 4 848 +address $914 +byte 4 849 +address $915 +byte 4 850 +address $916 +byte 4 851 +address $917 +byte 4 852 +address $918 +byte 4 853 +address $919 +byte 4 854 +address $920 +byte 4 855 +address $921 +byte 4 856 +address $922 +byte 4 857 +address $923 +byte 4 858 +address $924 +byte 4 859 +address $925 +byte 4 860 +address $926 +byte 4 861 +address $927 +byte 4 862 +address $928 +byte 4 863 +address $929 +byte 4 864 +address $930 +byte 4 865 +address $931 +byte 4 866 +address $932 +byte 4 867 +address $933 +byte 4 868 +address $934 +byte 4 869 +address $935 +byte 4 870 +address $936 +byte 4 871 +address $937 +byte 4 872 +address $938 +byte 4 873 +address $939 +byte 4 874 +address $940 +byte 4 875 +address $941 +byte 4 876 +address $942 +byte 4 877 +address $943 +byte 4 878 +address $944 +byte 4 879 +address $945 +byte 4 880 +address $946 +byte 4 881 +address $947 +byte 4 882 +address $948 +byte 4 883 +address $949 +byte 4 884 +address $950 +byte 4 885 +address $951 +byte 4 886 +address $952 +byte 4 887 +address $953 +byte 4 888 +address $954 +byte 4 889 +address $955 +byte 4 890 +address $956 +byte 4 891 +address $957 +byte 4 892 +address $958 +byte 4 893 +address $959 +byte 4 894 +address $960 +byte 4 895 +address $961 +byte 4 896 +address $962 +byte 4 897 +address $963 +byte 4 898 +address $964 +byte 4 899 +address $965 +byte 4 900 +address $966 +byte 4 901 +address $967 +byte 4 902 +address $968 +byte 4 903 +address $969 +byte 4 904 +address $970 +byte 4 905 +address $971 +byte 4 906 +address $972 +byte 4 907 +address $973 +byte 4 908 +address $974 +byte 4 909 +address $975 +byte 4 910 +address $976 +byte 4 911 +address $977 +byte 4 912 +address $978 +byte 4 913 +address $979 +byte 4 914 +address $980 +byte 4 915 +address $981 +byte 4 916 +address $982 +byte 4 917 +address $983 +byte 4 918 +address $984 +byte 4 919 +address $985 +byte 4 920 +address $986 +byte 4 921 +address $987 +byte 4 922 +address $988 +byte 4 923 +address $989 +byte 4 924 +address $990 +byte 4 925 +address $991 +byte 4 926 +address $992 +byte 4 927 +address $993 +byte 4 928 +address $994 +byte 4 929 +address $995 +byte 4 930 +address $996 +byte 4 931 +address $997 +byte 4 932 +address $998 +byte 4 933 +address $999 +byte 4 934 +address $1000 +byte 4 935 +address $1001 +byte 4 936 +address $1002 +byte 4 937 +address $1003 +byte 4 938 +address $1004 +byte 4 939 +address $1005 +byte 4 940 +address $1006 +byte 4 941 +address $1007 +byte 4 942 +address $1008 +byte 4 943 +address $1009 +byte 4 944 +address $1010 +byte 4 945 +address $1011 +byte 4 946 +address $1012 +byte 4 947 +address $1013 +byte 4 948 +address $1014 +byte 4 949 +address $1015 +byte 4 950 +address $1016 +byte 4 951 +address $1017 +byte 4 952 +address $1018 +byte 4 953 +address $1019 +byte 4 954 +address $1020 +byte 4 955 +address $1021 +byte 4 956 +address $1022 +byte 4 957 +address $1023 +byte 4 958 +address $1024 +byte 4 959 +address $1025 +byte 4 960 +address $1026 +byte 4 961 +address $1027 +byte 4 962 +address $1028 +byte 4 963 +address $1029 +byte 4 964 +address $1030 +byte 4 965 +address $1031 +byte 4 966 +address $1032 +byte 4 967 +address $1033 +byte 4 968 +address $1034 +byte 4 969 +address $1035 +byte 4 970 +address $1036 +byte 4 971 +address $1037 +byte 4 972 +address $1038 +byte 4 973 +address $1039 +byte 4 974 +address $1040 +byte 4 975 +address $1041 +byte 4 976 +address $1042 +byte 4 977 +address $1043 +byte 4 978 +address $1044 +byte 4 979 +address $1045 +byte 4 980 +address $1046 +byte 4 981 +address $1047 +byte 4 982 +address $1048 +byte 4 983 +address $1049 +byte 4 984 +address $1050 +byte 4 985 +address $1051 +byte 4 986 +address $1052 +byte 4 987 +address $1053 +byte 4 988 +address $1054 +byte 4 989 +address $1055 +byte 4 990 +address $1056 +byte 4 991 +address $1057 +byte 4 992 +address $1058 +byte 4 993 +address $1059 +byte 4 994 +address $1060 +byte 4 995 +address $1061 +byte 4 996 +address $1062 +byte 4 997 +address $1063 +byte 4 998 +address $1064 +byte 4 999 +address $1065 +byte 4 1000 +address $1066 +byte 4 1001 +address $1067 +byte 4 1002 +address $1068 +byte 4 1003 +address $1069 +byte 4 1004 +address $1070 +byte 4 1005 +address $1071 +byte 4 1006 +address $1072 +byte 4 1007 +address $1073 +byte 4 1008 +address $1074 +byte 4 1009 +address $1075 +byte 4 1010 +address $1076 +byte 4 1011 +address $1077 +byte 4 1012 +address $1078 +byte 4 1013 +address $1079 +byte 4 1014 +address $1080 +byte 4 1015 +address $1081 +byte 4 1016 +address $1082 +byte 4 1017 +address $1083 +byte 4 1018 +address $1084 +byte 4 1019 +address $1085 +byte 4 1020 +address $1086 +byte 4 1021 +address $1087 +byte 4 1022 +address $1088 +byte 4 1023 +address $1089 +byte 4 1024 +address $1090 +byte 4 1025 +address $1091 +byte 4 1026 +address $1092 +byte 4 1027 +address $1093 +byte 4 1028 +address $1094 +byte 4 1029 +address $1095 +byte 4 1030 +address $1096 +byte 4 1031 +address $1097 +byte 4 1032 +address $1098 +byte 4 1033 +address $1099 +byte 4 1034 +address $1100 +byte 4 1035 +address $1101 +byte 4 1036 +address $1102 +byte 4 1037 +address $1103 +byte 4 1038 +address $1104 +byte 4 1039 +address $1105 +byte 4 1040 +address $1106 +byte 4 1041 +address $1107 +byte 4 1042 +address $1108 +byte 4 1043 +address $1109 +byte 4 1044 +address $1110 +byte 4 1045 +address $1111 +byte 4 1046 +address $1112 +byte 4 1047 +address $1113 +byte 4 1048 +address $1114 +byte 4 1049 +address $1115 +byte 4 1050 +address $1116 +byte 4 1051 +address $1117 +byte 4 1052 +address $1118 +byte 4 1053 +address $1119 +byte 4 1054 +address $1120 +byte 4 1055 +address $1121 +byte 4 1056 +address $1122 +byte 4 1057 +address $1123 +byte 4 1058 +address $1124 +byte 4 1059 +address $1125 +byte 4 1060 +address $1126 +byte 4 1061 +address $1127 +byte 4 1062 +address $1128 +byte 4 1063 +address $1129 +byte 4 1064 +address $1130 +byte 4 1065 +address $1131 +byte 4 1066 +address $1132 +byte 4 1067 +address $1133 +byte 4 1068 +address $1134 +byte 4 1069 +address $1135 +byte 4 1070 +address $1136 +byte 4 1071 +address $1137 +byte 4 1072 +address $1138 +byte 4 1073 +address $1139 +byte 4 1074 +address $1140 +byte 4 1075 +address $1141 +byte 4 1076 +address $1142 +byte 4 1077 +address $1143 +byte 4 1078 +address $1144 +byte 4 1079 +address $1145 +byte 4 1080 +address $1146 +byte 4 1081 +address $1147 +byte 4 1082 +address $1148 +byte 4 1083 +address $1149 +byte 4 1084 +address $1150 +byte 4 1085 +address $1151 +byte 4 1086 +address $1152 +byte 4 1087 +address $1153 +byte 4 1088 +byte 4 0 +byte 4 -1 +export BG_InSpecialJump +code +proc BG_InSpecialJump 8 0 +file "../bg_panimate.c" +line 16 +;1:// BG_PAnimate.c +;2: +;3:#include "q_shared.h" +;4:#include "bg_public.h" +;5:#include "bg_local.h" +;6:#include "anims.h" +;7:#include "../cgame/animtable.h" +;8: +;9:/* +;10:============================================================================== +;11:BEGIN: Animation utility functions (sequence checking) +;12:============================================================================== +;13:*/ +;14://Called regardless of pm validity: +;15:qboolean BG_InSpecialJump( int anim ) +;16:{ +line 17 +;17: switch ( (anim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 815 +LTI4 $1155 +ADDRLP4 0 +INDIRI4 +CNSTI4 827 +GTI4 $1159 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1160-3260 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1160 +address $1158 +address $1158 +address $1158 +address $1158 +address $1158 +address $1158 +address $1158 +address $1155 +address $1158 +address $1158 +address $1155 +address $1158 +address $1158 +code +LABELV $1159 +ADDRLP4 0 +INDIRI4 +CNSTI4 849 +EQI4 $1158 +ADDRGP4 $1155 +JUMPV +line 18 +;18: { +LABELV $1158 +line 31 +;19: case BOTH_WALL_RUN_RIGHT: +;20: case BOTH_WALL_RUN_RIGHT_FLIP: +;21: case BOTH_WALL_RUN_LEFT: +;22: case BOTH_WALL_RUN_LEFT_FLIP: +;23: case BOTH_WALL_FLIP_RIGHT: +;24: case BOTH_WALL_FLIP_LEFT: +;25: case BOTH_FLIP_BACK1: +;26: case BOTH_FLIP_BACK2: +;27: case BOTH_FLIP_BACK3: +;28: case BOTH_WALL_FLIP_BACK1: +;29: case BOTH_BUTTERFLY_LEFT: +;30: case BOTH_BUTTERFLY_RIGHT: +;31: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1154 +JUMPV +LABELV $1155 +line 33 +;32: } +;33: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1154 +endproc BG_InSpecialJump 8 0 +export BG_InSaberStandAnim +proc BG_InSaberStandAnim 16 0 +line 37 +;34:} +;35: +;36:qboolean BG_InSaberStandAnim( int anim ) +;37:{ +line 38 +;38: switch ( (anim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 8 +CNSTI4 553 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +EQI4 $1166 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +LTI4 $1163 +LABELV $1167 +ADDRLP4 0 +INDIRI4 +CNSTI4 800 +EQI4 $1166 +ADDRLP4 0 +INDIRI4 +CNSTI4 801 +EQI4 $1166 +ADDRGP4 $1163 +JUMPV +line 39 +;39: { +LABELV $1166 +line 43 +;40: case BOTH_SABERFAST_STANCE: +;41: case BOTH_STAND2: +;42: case BOTH_SABERSLOW_STANCE: +;43: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1162 +JUMPV +LABELV $1163 +line 45 +;44: default: +;45: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1162 +endproc BG_InSaberStandAnim 16 0 +export BG_DirectFlippingAnim +proc BG_DirectFlippingAnim 8 0 +line 50 +;46: } +;47:} +;48: +;49:qboolean BG_DirectFlippingAnim( int anim ) +;50:{ +line 51 +;51: switch ( (anim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 777 +LTI4 $1169 +ADDRLP4 0 +INDIRI4 +CNSTI4 780 +GTI4 $1169 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1173-3108 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1173 +address $1172 +address $1172 +address $1172 +address $1172 +code +line 52 +;52: { +LABELV $1172 +line 57 +;53: case BOTH_FLIP_F: //# Flip forward +;54: case BOTH_FLIP_B: //# Flip backwards +;55: case BOTH_FLIP_L: //# Flip left +;56: case BOTH_FLIP_R: //# Flip right +;57: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1168 +JUMPV +line 58 +;58: break; +LABELV $1169 +line 61 +;59: } +;60: +;61: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1168 +endproc BG_DirectFlippingAnim 8 0 +export BG_SaberInAttack +proc BG_SaberInAttack 8 0 +line 65 +;62:} +;63: +;64:qboolean BG_SaberInAttack( int move ) +;65:{ +line 66 +;66: if ( move >= LS_A_TL2BR && move <= LS_A_T2B ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LTI4 $1176 +ADDRLP4 0 +INDIRI4 +CNSTI4 10 +GTI4 $1176 +line 67 +;67: { +line 68 +;68: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1175 +JUMPV +LABELV $1176 +line 70 +;69: } +;70: switch ( move ) +ADDRLP4 4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 11 +LTI4 $1178 +ADDRLP4 4 +INDIRI4 +CNSTI4 17 +GTI4 $1178 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1181-44 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1181 +address $1180 +address $1180 +address $1180 +address $1180 +address $1180 +address $1180 +address $1180 +code +line 71 +;71: { +LABELV $1180 +line 79 +;72: case LS_A_BACK: +;73: case LS_A_BACK_CR: +;74: case LS_A_BACKSTAB: +;75: case LS_A_LUNGE: +;76: case LS_A_JUMP_T__B_: +;77: case LS_A_FLIP_STAB: +;78: case LS_A_FLIP_SLASH: +;79: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1175 +JUMPV +line 80 +;80: break; +LABELV $1178 +line 82 +;81: } +;82: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1175 +endproc BG_SaberInAttack 8 0 +export BG_SaberInSpecial +proc BG_SaberInSpecial 4 0 +line 86 +;83:} +;84: +;85:qboolean BG_SaberInSpecial( int move ) +;86:{ +line 87 +;87: switch( move ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 11 +LTI4 $1184 +ADDRLP4 0 +INDIRI4 +CNSTI4 17 +GTI4 $1184 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1187-44 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1187 +address $1186 +address $1186 +address $1186 +address $1186 +address $1186 +address $1186 +address $1186 +code +line 88 +;88: { +LABELV $1186 +line 96 +;89: case LS_A_BACK: +;90: case LS_A_BACK_CR: +;91: case LS_A_BACKSTAB: +;92: case LS_A_LUNGE: +;93: case LS_A_JUMP_T__B_: +;94: case LS_A_FLIP_STAB: +;95: case LS_A_FLIP_SLASH: +;96: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1183 +JUMPV +LABELV $1184 +line 98 +;97: } +;98: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1183 +endproc BG_SaberInSpecial 4 0 +export BG_SaberInIdle +proc BG_SaberInIdle 4 0 +line 102 +;99:} +;100: +;101:qboolean BG_SaberInIdle( int move ) +;102:{ +line 103 +;103: switch ( move ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +LTI4 $1190 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +GTI4 $1190 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1193 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1193 +address $1192 +address $1192 +address $1192 +address $1192 +code +line 104 +;104: { +LABELV $1192 +line 109 +;105: case LS_NONE: +;106: case LS_READY: +;107: case LS_DRAW: +;108: case LS_PUTAWAY: +;109: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1189 +JUMPV +line 110 +;110: break; +LABELV $1190 +line 112 +;111: } +;112: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1189 +endproc BG_SaberInIdle 4 0 +export BG_FlippingAnim +proc BG_FlippingAnim 16 0 +line 116 +;113:} +;114: +;115:qboolean BG_FlippingAnim( int anim ) +;116:{ +line 117 +;117: switch ( anim ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 805 +LTI4 $1198 +ADDRLP4 0 +INDIRI4 +CNSTI4 827 +GTI4 $1199 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1200-3220 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1200 +address $1197 +address $1197 +address $1195 +address $1195 +address $1195 +address $1197 +address $1197 +address $1197 +address $1197 +address $1195 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +address $1197 +code +LABELV $1198 +ADDRLP4 4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 777 +LTI4 $1195 +ADDRLP4 4 +INDIRI4 +CNSTI4 780 +GTI4 $1195 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1202-3108 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1202 +address $1197 +address $1197 +address $1197 +address $1197 +code +LABELV $1199 +ADDRLP4 8 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 12 +CNSTI4 849 +ASGNI4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRI4 +EQI4 $1197 +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRI4 +LTI4 $1195 +LABELV $1204 +ADDRFP4 0 +INDIRI4 +CNSTI4 860 +EQI4 $1197 +ADDRGP4 $1195 +JUMPV +line 118 +;118: { +LABELV $1197 +line 146 +;119: case BOTH_FLIP_F: //# Flip forward +;120: case BOTH_FLIP_B: //# Flip backwards +;121: case BOTH_FLIP_L: //# Flip left +;122: case BOTH_FLIP_R: //# Flip right +;123: case BOTH_WALL_RUN_RIGHT_FLIP: +;124: case BOTH_WALL_RUN_LEFT_FLIP: +;125: case BOTH_WALL_FLIP_RIGHT: +;126: case BOTH_WALL_FLIP_LEFT: +;127: case BOTH_FLIP_BACK1: +;128: case BOTH_FLIP_BACK2: +;129: case BOTH_FLIP_BACK3: +;130: case BOTH_WALL_FLIP_BACK1: +;131: //Not really flips, but... +;132: case BOTH_WALL_RUN_RIGHT: +;133: case BOTH_WALL_RUN_LEFT: +;134: case BOTH_WALL_RUN_RIGHT_STOP: +;135: case BOTH_WALL_RUN_LEFT_STOP: +;136: case BOTH_BUTTERFLY_LEFT: +;137: case BOTH_BUTTERFLY_RIGHT: +;138: // +;139: case BOTH_ARIAL_LEFT: +;140: case BOTH_ARIAL_RIGHT: +;141: case BOTH_ARIAL_F1: +;142: case BOTH_CARTWHEEL_LEFT: +;143: case BOTH_CARTWHEEL_RIGHT: +;144: case BOTH_JUMPFLIPSLASHDOWN1: +;145: case BOTH_JUMPFLIPSTABDOWN: +;146: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1194 +JUMPV +line 147 +;147: break; +LABELV $1195 +line 149 +;148: } +;149: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1194 +endproc BG_FlippingAnim 16 0 +export BG_SpinningSaberAnim +proc BG_SpinningSaberAnim 72 0 +line 153 +;150:} +;151: +;152:qboolean BG_SpinningSaberAnim( int anim ) +;153:{ +line 154 +;154: switch ( anim ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 366 +EQI4 $1208 +ADDRLP4 0 +INDIRI4 +CNSTI4 367 +EQI4 $1208 +ADDRLP4 4 +CNSTI4 371 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $1208 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +GTI4 $1210 +LABELV $1209 +ADDRLP4 8 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 212 +EQI4 $1208 +ADDRLP4 8 +INDIRI4 +CNSTI4 213 +EQI4 $1208 +ADDRLP4 12 +CNSTI4 217 +ASGNI4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRI4 +EQI4 $1208 +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRI4 +GTI4 $1212 +LABELV $1211 +ADDRLP4 16 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 134 +LTI4 $1206 +ADDRLP4 16 +INDIRI4 +CNSTI4 144 +GTI4 $1213 +ADDRLP4 16 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1214-536 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1214 +address $1208 +address $1208 +address $1208 +address $1206 +address $1206 +address $1208 +address $1208 +address $1206 +address $1206 +address $1206 +address $1208 +code +LABELV $1213 +ADDRLP4 20 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 151 +LTI4 $1206 +ADDRLP4 20 +INDIRI4 +CNSTI4 158 +GTI4 $1206 +ADDRLP4 20 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1216-604 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1216 +address $1208 +address $1206 +address $1208 +address $1208 +address $1206 +address $1208 +address $1208 +address $1208 +code +LABELV $1212 +ADDRLP4 24 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 289 +EQI4 $1208 +ADDRLP4 24 +INDIRI4 +CNSTI4 290 +EQI4 $1208 +ADDRLP4 28 +CNSTI4 294 +ASGNI4 +ADDRLP4 24 +INDIRI4 +ADDRLP4 28 +INDIRI4 +EQI4 $1208 +ADDRLP4 24 +INDIRI4 +ADDRLP4 28 +INDIRI4 +GTI4 $1219 +LABELV $1218 +ADDRLP4 32 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 230 +EQI4 $1208 +ADDRLP4 32 +INDIRI4 +CNSTI4 233 +EQI4 $1208 +ADDRLP4 32 +INDIRI4 +CNSTI4 234 +EQI4 $1208 +ADDRGP4 $1206 +JUMPV +LABELV $1219 +ADDRLP4 36 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 307 +EQI4 $1208 +ADDRLP4 36 +INDIRI4 +CNSTI4 310 +EQI4 $1208 +ADDRLP4 36 +INDIRI4 +CNSTI4 311 +EQI4 $1208 +ADDRGP4 $1206 +JUMPV +LABELV $1210 +ADDRLP4 40 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 40 +INDIRI4 +CNSTI4 459 +LTI4 $1220 +ADDRLP4 40 +INDIRI4 +CNSTI4 466 +GTI4 $1221 +ADDRLP4 40 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1222-1836 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1222 +address $1208 +address $1206 +address $1208 +address $1208 +address $1206 +address $1208 +address $1208 +address $1208 +code +LABELV $1220 +ADDRLP4 44 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 48 +CNSTI4 384 +ASGNI4 +ADDRLP4 44 +INDIRI4 +ADDRLP4 48 +INDIRI4 +EQI4 $1208 +ADDRLP4 44 +INDIRI4 +CNSTI4 387 +EQI4 $1208 +ADDRLP4 44 +INDIRI4 +CNSTI4 388 +EQI4 $1208 +ADDRLP4 44 +INDIRI4 +ADDRLP4 48 +INDIRI4 +LTI4 $1206 +LABELV $1224 +ADDRLP4 52 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 442 +LTI4 $1206 +ADDRLP4 52 +INDIRI4 +CNSTI4 452 +GTI4 $1206 +ADDRLP4 52 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1225-1768 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1225 +address $1208 +address $1208 +address $1208 +address $1206 +address $1206 +address $1208 +address $1208 +address $1206 +address $1206 +address $1206 +address $1208 +code +LABELV $1221 +ADDRLP4 56 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 818 +EQI4 $1208 +ADDRLP4 60 +CNSTI4 819 +ASGNI4 +ADDRLP4 56 +INDIRI4 +ADDRLP4 60 +INDIRI4 +EQI4 $1208 +ADDRLP4 56 +INDIRI4 +ADDRLP4 60 +INDIRI4 +GTI4 $1228 +LABELV $1227 +ADDRLP4 64 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +CNSTI4 804 +LTI4 $1206 +ADDRLP4 64 +INDIRI4 +CNSTI4 809 +GTI4 $1206 +ADDRLP4 64 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1229-3216 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1229 +address $1208 +address $1208 +address $1208 +address $1206 +address $1206 +address $1208 +code +LABELV $1228 +ADDRLP4 68 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 68 +INDIRI4 +CNSTI4 854 +EQI4 $1208 +ADDRLP4 68 +INDIRI4 +CNSTI4 855 +EQI4 $1208 +ADDRGP4 $1206 +JUMPV +line 155 +;155: { +LABELV $1208 +line 213 +;156: //level 1 - FIXME: level 1 will have *no* spins +;157: case BOTH_T1_BR_BL: +;158: case BOTH_T1__R__L: +;159: case BOTH_T1__R_BL: +;160: case BOTH_T1_TR_BL: +;161: case BOTH_T1_BR_TL: +;162: case BOTH_T1_BR__L: +;163: case BOTH_T1_TL_BR: +;164: case BOTH_T1__L_BR: +;165: case BOTH_T1__L__R: +;166: case BOTH_T1_BL_BR: +;167: case BOTH_T1_BL__R: +;168: case BOTH_T1_BL_TR: +;169: //level 2 +;170: case BOTH_T2_BR__L: +;171: case BOTH_T2_BR_BL: +;172: case BOTH_T2__R_BL: +;173: case BOTH_T2__L_BR: +;174: case BOTH_T2_BL_BR: +;175: case BOTH_T2_BL__R: +;176: //level 3 +;177: case BOTH_T3_BR__L: +;178: case BOTH_T3_BR_BL: +;179: case BOTH_T3__R_BL: +;180: case BOTH_T3__L_BR: +;181: case BOTH_T3_BL_BR: +;182: case BOTH_T3_BL__R: +;183: //level 4 +;184: case BOTH_T4_BR__L: +;185: case BOTH_T4_BR_BL: +;186: case BOTH_T4__R_BL: +;187: case BOTH_T4__L_BR: +;188: case BOTH_T4_BL_BR: +;189: case BOTH_T4_BL__R: +;190: //level 5 +;191: case BOTH_T5_BR_BL: +;192: case BOTH_T5__R__L: +;193: case BOTH_T5__R_BL: +;194: case BOTH_T5_TR_BL: +;195: case BOTH_T5_BR_TL: +;196: case BOTH_T5_BR__L: +;197: case BOTH_T5_TL_BR: +;198: case BOTH_T5__L_BR: +;199: case BOTH_T5__L__R: +;200: case BOTH_T5_BL_BR: +;201: case BOTH_T5_BL__R: +;202: case BOTH_T5_BL_TR: +;203: //special +;204: //case BOTH_A2_STABBACK1: +;205: case BOTH_ATTACK_BACK: +;206: case BOTH_CROUCHATTACKBACK1: +;207: case BOTH_BUTTERFLY_LEFT: +;208: case BOTH_BUTTERFLY_RIGHT: +;209: case BOTH_FJSS_TR_BL: +;210: case BOTH_FJSS_TL_BR: +;211: case BOTH_JUMPFLIPSLASHDOWN1: +;212: case BOTH_JUMPFLIPSTABDOWN: +;213: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1205 +JUMPV +line 214 +;214: break; +LABELV $1206 +line 216 +;215: } +;216: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1205 +endproc BG_SpinningSaberAnim 72 0 +export BG_SaberInSpecialAttack +proc BG_SaberInSpecialAttack 12 0 +line 220 +;217:} +;218: +;219:qboolean BG_SaberInSpecialAttack( int anim ) +;220:{ +line 221 +;221: switch ( anim&~ANIM_TOGGLEBIT ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 803 +LTI4 $1232 +ADDRLP4 0 +INDIRI4 +CNSTI4 819 +GTI4 $1236 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1237-3212 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1237 +address $1235 +address $1235 +address $1235 +address $1235 +address $1235 +address $1235 +address $1235 +address $1232 +address $1232 +address $1232 +address $1232 +address $1232 +address $1232 +address $1232 +address $1232 +address $1235 +address $1235 +code +LABELV $1236 +ADDRLP4 0 +INDIRI4 +CNSTI4 854 +EQI4 $1235 +ADDRLP4 0 +INDIRI4 +CNSTI4 855 +EQI4 $1235 +ADDRGP4 $1232 +JUMPV +line 222 +;222: { +LABELV $1235 +line 234 +;223: case BOTH_A2_STABBACK1: +;224: case BOTH_ATTACK_BACK: +;225: case BOTH_CROUCHATTACKBACK1: +;226: case BOTH_BUTTERFLY_LEFT: +;227: case BOTH_BUTTERFLY_RIGHT: +;228: case BOTH_FJSS_TR_BL: +;229: case BOTH_FJSS_TL_BR: +;230: case BOTH_LUNGE2_B__T_: +;231: case BOTH_FORCELEAP2_T__B_: +;232: case BOTH_JUMPFLIPSLASHDOWN1://# +;233: case BOTH_JUMPFLIPSTABDOWN://# +;234: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1231 +JUMPV +LABELV $1232 +line 236 +;235: } +;236: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1231 +endproc BG_SaberInSpecialAttack 12 0 +export BG_InRoll +proc BG_InRoll 8 0 +line 240 +;237:} +;238: +;239:qboolean BG_InRoll( playerState_t *ps, int anim ) +;240:{ +line 241 +;241: switch ( (anim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 781 +LTI4 $1240 +ADDRLP4 0 +INDIRI4 +CNSTI4 784 +GTI4 $1240 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1246-3124 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1246 +address $1243 +address $1243 +address $1243 +address $1243 +code +line 242 +;242: { +LABELV $1243 +line 247 +;243: case BOTH_ROLL_F: +;244: case BOTH_ROLL_B: +;245: case BOTH_ROLL_R: +;246: case BOTH_ROLL_L: +;247: if ( ps->legsTimer > 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $1241 +line 248 +;248: { +line 249 +;249: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1239 +JUMPV +line 251 +;250: } +;251: break; +LABELV $1240 +LABELV $1241 +line 253 +;252: } +;253: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1239 +endproc BG_InRoll 8 0 +export BG_InDeathAnim +proc BG_InDeathAnim 8 0 +line 257 +;254:} +;255: +;256:qboolean BG_InDeathAnim( int anim ) +;257:{ +line 258 +;258: switch((anim&~ANIM_TOGGLEBIT)) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +LTI4 $1249 +ADDRLP4 0 +INDIRI4 +CNSTI4 31 +GTI4 $1253 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1254 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1254 +address $1252 +address $1252 +address $1252 +address $1252 +address $1252 +address $1252 +address $1252 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1249 +address $1252 +address $1252 +address $1249 +address $1252 +address $1252 +address $1252 +address $1252 +address $1252 +address $1252 +address $1252 +address $1252 +code +LABELV $1253 +ADDRLP4 0 +INDIRI4 +CNSTI4 799 +EQI4 $1252 +ADDRGP4 $1249 +JUMPV +line 259 +;259: { +LABELV $1252 +line 279 +;260: case BOTH_DIVE1: +;261: case BOTH_DEATHBACKWARD1: +;262: case BOTH_DEATHBACKWARD2: +;263: case BOTH_DEATHFORWARD1: +;264: case BOTH_DEATHFORWARD2: +;265: case BOTH_DEATH1: +;266: case BOTH_DEATH2: +;267: case BOTH_DEATH3: +;268: case BOTH_DEATH4: +;269: case BOTH_DEATH5: +;270: case BOTH_DEATH6: +;271: case BOTH_DEATH7: +;272: +;273: case BOTH_DEATH1IDLE: +;274: case BOTH_LYINGDEATH1: +;275: case BOTH_STUMBLEDEATH1: +;276: case BOTH_FALLDEATH1: +;277: case BOTH_FALLDEATH1INAIR: +;278: case BOTH_FALLDEATH1LAND: +;279: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1248 +JUMPV +line 280 +;280: break; +LABELV $1249 +line 282 +;281: default: +;282: return qfalse; +CNSTI4 0 +RETI4 +line 283 +;283: break; +LABELV $1248 +endproc BG_InDeathAnim 8 0 +export PM_SaberInParry +proc PM_SaberInParry 4 0 +line 289 +;284: } +;285:} +;286: +;287://Called only where pm is valid (not all require pm, but some do): +;288:qboolean PM_SaberInParry( int move ) +;289:{ +line 290 +;290: if ( move >= LS_PARRY_UP && move <= LS_PARRY_LL ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 108 +LTI4 $1256 +ADDRLP4 0 +INDIRI4 +CNSTI4 112 +GTI4 $1256 +line 291 +;291: { +line 292 +;292: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1255 +JUMPV +LABELV $1256 +line 294 +;293: } +;294: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1255 +endproc PM_SaberInParry 4 0 +export PM_SaberInReflect +proc PM_SaberInReflect 4 0 +line 298 +;295:} +;296: +;297:qboolean PM_SaberInReflect( int move ) +;298:{ +line 299 +;299: if ( move >= LS_REFLECT_UP && move <= LS_REFLECT_LL ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 113 +LTI4 $1259 +ADDRLP4 0 +INDIRI4 +CNSTI4 117 +GTI4 $1259 +line 300 +;300: { +line 301 +;301: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1258 +JUMPV +LABELV $1259 +line 303 +;302: } +;303: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1258 +endproc PM_SaberInReflect 4 0 +export PM_SaberInStart +proc PM_SaberInStart 4 0 +line 307 +;304:} +;305: +;306:qboolean PM_SaberInStart( int move ) +;307:{ +line 308 +;308: if ( move >= LS_S_TL2BR && move <= LS_S_T2B ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $1262 +ADDRLP4 0 +INDIRI4 +CNSTI4 24 +GTI4 $1262 +line 309 +;309: { +line 310 +;310: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1261 +JUMPV +LABELV $1262 +line 312 +;311: } +;312: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1261 +endproc PM_SaberInStart 4 0 +export PM_InSaberAnim +proc PM_InSaberAnim 4 0 +line 316 +;313:} +;314: +;315:qboolean PM_InSaberAnim( int anim ) +;316:{ +line 317 +;317: if ( (anim&~ANIM_TOGGLEBIT) >= BOTH_A1_T__B_ && (anim&~ANIM_TOGGLEBIT) <= BOTH_H1_S1_BR ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 126 +LTI4 $1265 +ADDRLP4 0 +INDIRI4 +CNSTI4 535 +GTI4 $1265 +line 318 +;318: { +line 319 +;319: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1264 +JUMPV +LABELV $1265 +line 321 +;320: } +;321: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1264 +endproc PM_InSaberAnim 4 0 +export PM_InKnockDown +proc PM_InKnockDown 8 0 +line 325 +;322:} +;323: +;324:qboolean PM_InKnockDown( playerState_t *ps ) +;325:{ +line 326 +;326: switch ( (ps->legsAnim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 829 +LTI4 $1268 +ADDRLP4 0 +INDIRI4 +CNSTI4 847 +GTI4 $1268 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1275-3316 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1275 +address $1271 +address $1271 +address $1271 +address $1271 +address $1271 +address $1272 +address $1272 +address $1272 +address $1272 +address $1272 +address $1268 +address $1268 +address $1272 +address $1272 +address $1272 +address $1272 +address $1272 +address $1272 +address $1272 +code +line 327 +;327: { +LABELV $1271 +line 333 +;328: case BOTH_KNOCKDOWN1: +;329: case BOTH_KNOCKDOWN2: +;330: case BOTH_KNOCKDOWN3: +;331: case BOTH_KNOCKDOWN4: +;332: case BOTH_KNOCKDOWN5: +;333: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1267 +JUMPV +line 334 +;334: break; +LABELV $1272 +line 347 +;335: case BOTH_GETUP1: +;336: case BOTH_GETUP2: +;337: case BOTH_GETUP3: +;338: case BOTH_GETUP4: +;339: case BOTH_GETUP5: +;340: case BOTH_FORCE_GETUP_F1: +;341: case BOTH_FORCE_GETUP_F2: +;342: case BOTH_FORCE_GETUP_B1: +;343: case BOTH_FORCE_GETUP_B2: +;344: case BOTH_FORCE_GETUP_B3: +;345: case BOTH_FORCE_GETUP_B4: +;346: case BOTH_FORCE_GETUP_B5: +;347: if ( ps->legsTimer ) +ADDRFP4 0 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $1269 +line 348 +;348: { +line 349 +;349: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1267 +JUMPV +line 351 +;350: } +;351: break; +LABELV $1268 +LABELV $1269 +line 353 +;352: } +;353: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1267 +endproc PM_InKnockDown 8 0 +export PM_PainAnim +proc PM_PainAnim 8 0 +line 357 +;354:} +;355: +;356:qboolean PM_PainAnim( int anim ) +;357:{ +line 358 +;358: switch ( (anim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 86 +LTI4 $1278 +ADDRLP4 0 +INDIRI4 +CNSTI4 104 +GTI4 $1278 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1282-344 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1282 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +address $1281 +code +line 359 +;359: { +LABELV $1281 +line 379 +;360: case BOTH_PAIN1: //# First take pain anim +;361: case BOTH_PAIN2: //# Second take pain anim +;362: case BOTH_PAIN3: //# Third take pain anim +;363: case BOTH_PAIN4: //# Fourth take pain anim +;364: case BOTH_PAIN5: //# Fifth take pain anim - from behind +;365: case BOTH_PAIN6: //# Sixth take pain anim - from behind +;366: case BOTH_PAIN7: //# Seventh take pain anim - from behind +;367: case BOTH_PAIN8: //# Eigth take pain anim - from behind +;368: case BOTH_PAIN9: //# +;369: case BOTH_PAIN10: //# +;370: case BOTH_PAIN11: //# +;371: case BOTH_PAIN12: //# +;372: case BOTH_PAIN13: //# +;373: case BOTH_PAIN14: //# +;374: case BOTH_PAIN15: //# +;375: case BOTH_PAIN16: //# +;376: case BOTH_PAIN17: //# +;377: case BOTH_PAIN18: //# +;378: case BOTH_PAIN19: //# +;379: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1277 +JUMPV +line 380 +;380: break; +LABELV $1278 +line 382 +;381: } +;382: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1277 +endproc PM_PainAnim 8 0 +export PM_JumpingAnim +proc PM_JumpingAnim 8 0 +line 386 +;383:} +;384: +;385:qboolean PM_JumpingAnim( int anim ) +;386:{ +line 387 +;387: switch ( (anim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 752 +LTI4 $1285 +ADDRLP4 0 +INDIRI4 +CNSTI4 776 +GTI4 $1285 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1289-3008 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1289 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +address $1288 +code +line 388 +;388: { +LABELV $1288 +line 414 +;389: case BOTH_JUMP1: //# Jump - wind-up and leave ground +;390: case BOTH_INAIR1: //# In air loop (from jump) +;391: case BOTH_LAND1: //# Landing (from in air loop) +;392: case BOTH_LAND2: //# Landing Hard (from a great height) +;393: case BOTH_JUMPBACK1: //# Jump backwards - wind-up and leave ground +;394: case BOTH_INAIRBACK1: //# In air loop (from jump back) +;395: case BOTH_LANDBACK1: //# Landing backwards(from in air loop) +;396: case BOTH_JUMPLEFT1: //# Jump left - wind-up and leave ground +;397: case BOTH_INAIRLEFT1: //# In air loop (from jump left) +;398: case BOTH_LANDLEFT1: //# Landing left(from in air loop) +;399: case BOTH_JUMPRIGHT1: //# Jump right - wind-up and leave ground +;400: case BOTH_INAIRRIGHT1: //# In air loop (from jump right) +;401: case BOTH_LANDRIGHT1: //# Landing right(from in air loop) +;402: case BOTH_FORCEJUMP1: //# Jump - wind-up and leave ground +;403: case BOTH_FORCEINAIR1: //# In air loop (from jump) +;404: case BOTH_FORCELAND1: //# Landing (from in air loop) +;405: case BOTH_FORCEJUMPBACK1: //# Jump backwards - wind-up and leave ground +;406: case BOTH_FORCEINAIRBACK1: //# In air loop (from jump back) +;407: case BOTH_FORCELANDBACK1: //# Landing backwards(from in air loop) +;408: case BOTH_FORCEJUMPLEFT1: //# Jump left - wind-up and leave ground +;409: case BOTH_FORCEINAIRLEFT1: //# In air loop (from jump left) +;410: case BOTH_FORCELANDLEFT1: //# Landing left(from in air loop) +;411: case BOTH_FORCEJUMPRIGHT1: //# Jump right - wind-up and leave ground +;412: case BOTH_FORCEINAIRRIGHT1: //# In air loop (from jump right) +;413: case BOTH_FORCELANDRIGHT1: //# Landing right(from in air loop) +;414: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1284 +JUMPV +line 415 +;415: break; +LABELV $1285 +line 417 +;416: } +;417: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1284 +endproc PM_JumpingAnim 8 0 +export PM_LandingAnim +proc PM_LandingAnim 24 0 +line 421 +;418:} +;419: +;420:qboolean PM_LandingAnim( int anim ) +;421:{ +line 422 +;422: switch ( (anim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 764 +EQI4 $1295 +ADDRLP4 8 +CNSTI4 767 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +EQI4 $1295 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +GTI4 $1297 +LABELV $1296 +ADDRLP4 0 +INDIRI4 +CNSTI4 754 +LTI4 $1292 +ADDRLP4 0 +INDIRI4 +CNSTI4 761 +GTI4 $1292 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1298-3016 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1298 +address $1295 +address $1295 +address $1292 +address $1292 +address $1295 +address $1292 +address $1292 +address $1295 +code +LABELV $1297 +ADDRLP4 20 +CNSTI4 770 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 20 +INDIRI4 +EQI4 $1295 +ADDRLP4 0 +INDIRI4 +CNSTI4 773 +EQI4 $1295 +ADDRLP4 0 +INDIRI4 +ADDRLP4 20 +INDIRI4 +LTI4 $1292 +LABELV $1300 +ADDRLP4 0 +INDIRI4 +CNSTI4 776 +EQI4 $1295 +ADDRGP4 $1292 +JUMPV +line 423 +;423: { +LABELV $1295 +line 433 +;424: case BOTH_LAND1: //# Landing (from in air loop) +;425: case BOTH_LAND2: //# Landing Hard (from a great height) +;426: case BOTH_LANDBACK1: //# Landing backwards(from in air loop) +;427: case BOTH_LANDLEFT1: //# Landing left(from in air loop) +;428: case BOTH_LANDRIGHT1: //# Landing right(from in air loop) +;429: case BOTH_FORCELAND1: //# Landing (from in air loop) +;430: case BOTH_FORCELANDBACK1: //# Landing backwards(from in air loop) +;431: case BOTH_FORCELANDLEFT1: //# Landing left(from in air loop) +;432: case BOTH_FORCELANDRIGHT1: //# Landing right(from in air loop) +;433: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1291 +JUMPV +line 434 +;434: break; +LABELV $1292 +line 436 +;435: } +;436: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1291 +endproc PM_LandingAnim 24 0 +export PM_SpinningAnim +proc PM_SpinningAnim 4 4 +line 440 +;437:} +;438: +;439:qboolean PM_SpinningAnim( int anim ) +;440:{ +line 449 +;441: /* +;442: switch ( anim ) +;443: { +;444: //FIXME: list any other spinning anims +;445: default: +;446: break; +;447: } +;448: */ +;449: return BG_SpinningSaberAnim( anim ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +ADDRGP4 BG_SpinningSaberAnim +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $1301 +endproc PM_SpinningAnim 4 4 +export PM_InOnGroundAnim +proc PM_InOnGroundAnim 32 0 +line 453 +;450:} +;451: +;452:qboolean PM_InOnGroundAnim ( int anim ) +;453:{ +line 454 +;454: switch( anim&~ANIM_TOGGLEBIT ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 61 +LTI4 $1307 +ADDRLP4 0 +INDIRI4 +CNSTI4 65 +GTI4 $1308 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1309-244 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1309 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +code +LABELV $1307 +ADDRLP4 12 +CNSTI4 27 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 12 +INDIRI4 +EQI4 $1306 +ADDRLP4 0 +INDIRI4 +ADDRLP4 12 +INDIRI4 +LTI4 $1303 +LABELV $1311 +ADDRLP4 0 +INDIRI4 +CNSTI4 42 +LTI4 $1303 +ADDRLP4 0 +INDIRI4 +CNSTI4 46 +GTI4 $1303 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1312-168 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1312 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +code +LABELV $1308 +ADDRLP4 24 +CNSTI4 829 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 24 +INDIRI4 +EQI4 $1306 +ADDRLP4 0 +INDIRI4 +CNSTI4 830 +EQI4 $1306 +ADDRLP4 0 +INDIRI4 +ADDRLP4 24 +INDIRI4 +LTI4 $1303 +LABELV $1314 +ADDRLP4 0 +INDIRI4 +CNSTI4 899 +LTI4 $1303 +ADDRLP4 0 +INDIRI4 +CNSTI4 916 +GTI4 $1303 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1315-3596 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1315 +address $1306 +address $1303 +address $1303 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +address $1306 +address $1303 +address $1303 +address $1306 +code +line 455 +;455: { +LABELV $1306 +line 483 +;456: case BOTH_DEAD1: +;457: case BOTH_DEAD2: +;458: case BOTH_DEAD3: +;459: case BOTH_DEAD4: +;460: case BOTH_DEAD5: +;461: case BOTH_DEADFORWARD1: +;462: case BOTH_DEADBACKWARD1: +;463: case BOTH_DEADFORWARD2: +;464: case BOTH_DEADBACKWARD2: +;465: case BOTH_LYINGDEATH1: +;466: case BOTH_LYINGDEAD1: +;467: case BOTH_PAIN2WRITHE1: //# Transition from upright position to writhing on ground anim +;468: case BOTH_WRITHING1: //# Lying on ground writhing in pain +;469: case BOTH_WRITHING1RLEG: //# Lying on ground writhing in pain: holding right leg +;470: case BOTH_WRITHING1LLEG: //# Lying on ground writhing in pain: holding left leg +;471: case BOTH_WRITHING2: //# Lying on stomache writhing in pain +;472: case BOTH_INJURED1: //# Lying down: against wall - can also be sleeping +;473: case BOTH_CRAWLBACK1: //# Lying on back: crawling backwards with elbows +;474: case BOTH_INJURED2: //# Injured pose 2 +;475: case BOTH_INJURED3: //# Injured pose 3 +;476: case BOTH_INJURED6: //# Injured pose 6 +;477: case BOTH_INJURED6ATTACKSTART: //# Start attack while in injured 6 pose +;478: case BOTH_INJURED6ATTACKSTOP: //# End attack while in injured 6 pose +;479: case BOTH_INJURED6COMBADGE: //# Hit combadge while in injured 6 pose +;480: case BOTH_INJURED6POINT: //# Chang points to door while in injured state +;481: case BOTH_KNOCKDOWN1: //# +;482: case BOTH_KNOCKDOWN2: //# +;483: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1302 +JUMPV +line 484 +;484: break; +LABELV $1303 +line 487 +;485: } +;486: +;487: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1302 +endproc PM_InOnGroundAnim 32 0 +export PM_InRollComplete +proc PM_InRollComplete 8 0 +line 491 +;488:} +;489: +;490:qboolean PM_InRollComplete( playerState_t *ps, int anim ) +;491:{ +line 492 +;492: switch ( (anim&~ANIM_TOGGLEBIT) ) +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 781 +LTI4 $1318 +ADDRLP4 0 +INDIRI4 +CNSTI4 784 +GTI4 $1318 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $1324-3124 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $1324 +address $1321 +address $1321 +address $1321 +address $1321 +code +line 493 +;493: { +LABELV $1321 +line 498 +;494: case BOTH_ROLL_F: +;495: case BOTH_ROLL_B: +;496: case BOTH_ROLL_R: +;497: case BOTH_ROLL_L: +;498: if ( ps->legsTimer < 1 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +CNSTI4 1 +GEI4 $1319 +line 499 +;499: { +line 500 +;500: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1317 +JUMPV +line 502 +;501: } +;502: break; +LABELV $1318 +LABELV $1319 +line 504 +;503: } +;504: return qfalse; +CNSTI4 0 +RETI4 +LABELV $1317 +endproc PM_InRollComplete 8 0 +export PM_AnimLength +proc PM_AnimLength 8 4 +line 508 +;505:} +;506: +;507:int PM_AnimLength( int index, animNumber_t anim ) +;508:{ +line 509 +;509: if (anim >= MAX_ANIMATIONS) +ADDRFP4 4 +INDIRI4 +CNSTI4 1089 +LTI4 $1327 +line 510 +;510: { +line 511 +;511: return -1; +CNSTI4 -1 +RETI4 +ADDRGP4 $1326 +JUMPV +LABELV $1327 +line 513 +;512: } +;513: return pm->animations[anim].numFrames * fabs(pm->animations[anim].frameLerp); +ADDRLP4 0 +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRGP4 pm +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 4 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CVIF4 4 +ADDRLP4 4 +INDIRF4 +MULF4 +CVFI4 4 +RETI4 +LABELV $1326 +endproc PM_AnimLength 8 4 +export PM_DebugLegsAnim +proc PM_DebugLegsAnim 40 8 +line 517 +;514:} +;515: +;516:void PM_DebugLegsAnim(int anim) +;517:{ +line 518 +;518: int oldAnim = (pm->ps->legsAnim & ~ANIM_TOGGLEBIT); +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +line 519 +;519: int newAnim = (anim & ~ANIM_TOGGLEBIT); +ADDRLP4 4 +ADDRFP4 0 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +line 521 +;520: +;521: if (oldAnim < MAX_TOTALANIMATIONS && oldAnim >= BOTH_DEATH1 && +ADDRLP4 12 +CNSTI4 1090 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 12 +INDIRI4 +GEI4 $1330 +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LTI4 $1330 +ADDRLP4 4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +GEI4 $1330 +ADDRLP4 4 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LTI4 $1330 +line 523 +;522: newAnim < MAX_TOTALANIMATIONS && newAnim >= BOTH_DEATH1) +;523: { +line 524 +;524: Com_Printf("OLD: %s\n", animTable[oldAnim]); +ADDRGP4 $1332 +ARGP4 +ADDRLP4 24 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 animTable +ADDP4 +INDIRB +ASGNB 8 +ADDRLP4 24 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 525 +;525: Com_Printf("NEW: %s\n", animTable[newAnim]); +ADDRGP4 $1333 +ARGP4 +ADDRLP4 32 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 animTable +ADDP4 +INDIRB +ASGNB 8 +ADDRLP4 32 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 526 +;526: } +LABELV $1330 +line 527 +;527:} +LABELV $1329 +endproc PM_DebugLegsAnim 40 8 +data +export BGPAFtextLoaded +align 4 +LABELV BGPAFtextLoaded +byte 4 0 +export BG_ParseAnimationFile +code +proc BG_ParseAnimationFile 84 12 +line 548 +;528:/* +;529:============================================================================== +;530:END: Animation utility functions (sequence checking) +;531:============================================================================== +;532:*/ +;533: +;534:/* +;535:====================== +;536:BG_ParseAnimationFile +;537: +;538:Read a configuration file containing animation coutns and rates +;539:models/players/visor/animation.cfg, etc +;540: +;541:====================== +;542:*/ +;543:char BGPAFtext[40000]; +;544:qboolean BGPAFtextLoaded = qfalse; +;545:animation_t bgGlobalAnimations[MAX_TOTALANIMATIONS]; +;546: +;547:qboolean BG_ParseAnimationFile(const char *filename) +;548:{ +line 561 +;549: char *text_p; +;550: int len; +;551: int i; +;552: char *token; +;553: float fps; +;554: int skip; +;555: +;556: fileHandle_t f; +;557: int animNum; +;558: +;559: +;560: // load the file +;561: if (!BGPAFtextLoaded) +ADDRGP4 BGPAFtextLoaded +INDIRI4 +CNSTI4 0 +NEI4 $1335 +line 562 +;562: { //rww - We are always using the same animation config now. So only load it once. +line 563 +;563: len = trap_FS_FOpenFile( filename, &f, FS_READ ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 24 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 32 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 20 +ADDRLP4 32 +INDIRI4 +ASGNI4 +line 564 +;564: if ( len <= 0 ) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +GTI4 $1337 +line 565 +;565: { +line 566 +;566: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $1334 +JUMPV +LABELV $1337 +line 568 +;567: } +;568: if ( len >= sizeof( BGPAFtext ) - 1 ) +ADDRLP4 20 +INDIRI4 +CVIU4 4 +CNSTU4 39999 +LTU4 $1339 +line 569 +;569: { +line 571 +;570: //Com_Printf( "File %s too long\n", filename ); +;571: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $1334 +JUMPV +LABELV $1339 +line 574 +;572: } +;573: +;574: trap_FS_Read( BGPAFtext, len, f ); +ADDRGP4 BGPAFtext +ARGP4 +ADDRLP4 20 +INDIRI4 +ARGI4 +ADDRLP4 24 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 575 +;575: BGPAFtext[len] = 0; +ADDRLP4 20 +INDIRI4 +ADDRGP4 BGPAFtext +ADDP4 +CNSTI1 0 +ASGNI1 +line 576 +;576: trap_FS_FCloseFile( f ); +ADDRLP4 24 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 577 +;577: } +ADDRGP4 $1336 +JUMPV +LABELV $1335 +line 579 +;578: else +;579: { +line 580 +;580: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $1334 +JUMPV +LABELV $1336 +line 584 +;581: } +;582: +;583: // parse the text +;584: text_p = BGPAFtext; +ADDRLP4 16 +ADDRGP4 BGPAFtext +ASGNP4 +line 585 +;585: skip = 0; // quiet the compiler warning +ADDRLP4 28 +CNSTI4 0 +ASGNI4 +line 590 +;586: +;587: //FIXME: have some way of playing anims backwards... negative numFrames? +;588: +;589: //initialize anim array so that from 0 to MAX_ANIMATIONS, set default values of 0 1 0 100 +;590: for(i = 0; i < MAX_ANIMATIONS; i++) +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +LABELV $1341 +line 591 +;591: { +line 592 +;592: bgGlobalAnimations[i].firstFrame = 0; +CNSTI4 28 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations +ADDP4 +CNSTI4 0 +ASGNI4 +line 593 +;593: bgGlobalAnimations[i].numFrames = 0; +CNSTI4 28 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 594 +;594: bgGlobalAnimations[i].loopFrames = -1; +CNSTI4 28 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+8 +ADDP4 +CNSTI4 -1 +ASGNI4 +line 595 +;595: bgGlobalAnimations[i].frameLerp = 100; +CNSTI4 28 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+12 +ADDP4 +CNSTI4 100 +ASGNI4 +line 596 +;596: bgGlobalAnimations[i].initialLerp = 100; +CNSTI4 28 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+16 +ADDP4 +CNSTI4 100 +ASGNI4 +line 597 +;597: } +LABELV $1342 +line 590 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1089 +LTI4 $1341 +ADDRGP4 $1350 +JUMPV +LABELV $1349 +line 601 +;598: +;599: // read information for each frame +;600: while(1) +;601: { +line 602 +;602: token = COM_Parse( (const char **)(&text_p) ); +ADDRLP4 16 +ARGP4 +ADDRLP4 32 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 32 +INDIRP4 +ASGNP4 +line 604 +;603: +;604: if ( !token || !token[0]) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $1354 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $1352 +LABELV $1354 +line 605 +;605: { +line 606 +;606: break; +ADDRGP4 $1351 +JUMPV +LABELV $1352 +line 609 +;607: } +;608: +;609: animNum = GetIDForString(animTable, token); +ADDRGP4 animTable +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 40 +ADDRGP4 GetIDForString +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 40 +INDIRI4 +ASGNI4 +line 610 +;610: if(animNum == -1) +ADDRLP4 8 +INDIRI4 +CNSTI4 -1 +NEI4 $1355 +line 611 +;611: { +line 616 +;612://#ifndef FINAL_BUILD +;613:#ifdef _DEBUG +;614: Com_Printf(S_COLOR_RED"WARNING: Unknown token %s in %s\n", token, filename); +;615:#endif +;616: continue; +ADDRGP4 $1350 +JUMPV +LABELV $1355 +line 619 +;617: } +;618: +;619: token = COM_Parse( (const char **)(&text_p) ); +ADDRLP4 16 +ARGP4 +ADDRLP4 44 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 44 +INDIRP4 +ASGNP4 +line 620 +;620: if ( !token ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $1357 +line 621 +;621: { +line 622 +;622: break; +ADDRGP4 $1351 +JUMPV +LABELV $1357 +line 624 +;623: } +;624: bgGlobalAnimations[animNum].firstFrame = atoi( token ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 48 +ADDRGP4 atoi +CALLI4 +ASGNI4 +CNSTI4 28 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations +ADDP4 +ADDRLP4 48 +INDIRI4 +ASGNI4 +line 626 +;625: +;626: token = COM_Parse( (const char **)(&text_p) ); +ADDRLP4 16 +ARGP4 +ADDRLP4 52 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 52 +INDIRP4 +ASGNP4 +line 627 +;627: if ( !token ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $1359 +line 628 +;628: { +line 629 +;629: break; +ADDRGP4 $1351 +JUMPV +LABELV $1359 +line 631 +;630: } +;631: bgGlobalAnimations[animNum].numFrames = atoi( token ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 56 +ADDRGP4 atoi +CALLI4 +ASGNI4 +CNSTI4 28 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+4 +ADDP4 +ADDRLP4 56 +INDIRI4 +ASGNI4 +line 633 +;632: +;633: token = COM_Parse( (const char **)(&text_p) ); +ADDRLP4 16 +ARGP4 +ADDRLP4 60 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 60 +INDIRP4 +ASGNP4 +line 634 +;634: if ( !token ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $1362 +line 635 +;635: { +line 636 +;636: break; +ADDRGP4 $1351 +JUMPV +LABELV $1362 +line 638 +;637: } +;638: bgGlobalAnimations[animNum].loopFrames = atoi( token ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 64 +ADDRGP4 atoi +CALLI4 +ASGNI4 +CNSTI4 28 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+8 +ADDP4 +ADDRLP4 64 +INDIRI4 +ASGNI4 +line 640 +;639: +;640: token = COM_Parse( (const char **)(&text_p) ); +ADDRLP4 16 +ARGP4 +ADDRLP4 68 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 68 +INDIRP4 +ASGNP4 +line 641 +;641: if ( !token ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $1365 +line 642 +;642: { +line 643 +;643: break; +ADDRGP4 $1351 +JUMPV +LABELV $1365 +line 645 +;644: } +;645: fps = atof( token ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 72 +INDIRF4 +ASGNF4 +line 646 +;646: if ( fps == 0 ) +ADDRLP4 12 +INDIRF4 +CNSTF4 0 +NEF4 $1367 +line 647 +;647: { +line 648 +;648: fps = 1;//Don't allow divide by zero error +ADDRLP4 12 +CNSTF4 1065353216 +ASGNF4 +line 649 +;649: } +LABELV $1367 +line 650 +;650: if ( fps < 0 ) +ADDRLP4 12 +INDIRF4 +CNSTF4 0 +GEF4 $1369 +line 651 +;651: {//backwards +line 652 +;652: bgGlobalAnimations[animNum].frameLerp = floor(1000.0f / fps); +CNSTF4 1148846080 +ADDRLP4 12 +INDIRF4 +DIVF4 +ARGF4 +ADDRLP4 76 +ADDRGP4 floor +CALLF4 +ASGNF4 +CNSTI4 28 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+12 +ADDP4 +ADDRLP4 76 +INDIRF4 +CVFI4 4 +ASGNI4 +line 653 +;653: } +ADDRGP4 $1370 +JUMPV +LABELV $1369 +line 655 +;654: else +;655: { +line 656 +;656: bgGlobalAnimations[animNum].frameLerp = ceil(1000.0f / fps); +CNSTF4 1148846080 +ADDRLP4 12 +INDIRF4 +DIVF4 +ARGF4 +ADDRLP4 76 +ADDRGP4 ceil +CALLF4 +ASGNF4 +CNSTI4 28 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+12 +ADDP4 +ADDRLP4 76 +INDIRF4 +CVFI4 4 +ASGNI4 +line 657 +;657: } +LABELV $1370 +line 659 +;658: +;659: bgGlobalAnimations[animNum].initialLerp = ceil(1000.0f / fabs(fps)); +ADDRLP4 12 +INDIRF4 +ARGF4 +ADDRLP4 76 +ADDRGP4 fabs +CALLF4 +ASGNF4 +CNSTF4 1148846080 +ADDRLP4 76 +INDIRF4 +DIVF4 +ARGF4 +ADDRLP4 80 +ADDRGP4 ceil +CALLF4 +ASGNF4 +CNSTI4 28 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 bgGlobalAnimations+16 +ADDP4 +ADDRLP4 80 +INDIRF4 +CVFI4 4 +ASGNI4 +line 660 +;660: } +LABELV $1350 +line 600 +ADDRGP4 $1349 +JUMPV +LABELV $1351 +line 676 +;661: +;662:#ifdef _DEBUG +;663: //Check the array, and print the ones that have nothing in them. +;664: for(i = 0; i < MAX_ANIMATIONS; i++) +;665: { +;666: if (animTable[i].name != NULL) // This animation reference exists. +;667: { +;668: if (bgGlobalAnimations[i].firstFrame <= 0 && bgGlobalAnimations[i].numFrames <=0) +;669: { // This is an empty animation reference. +;670: Com_Printf("***ANIMTABLE reference #%d (%s) is empty!\n", i, animTable[i].name); +;671: } +;672: } +;673: } +;674:#endif // _DEBUG +;675: +;676: BGPAFtextLoaded = qtrue; +ADDRGP4 BGPAFtextLoaded +CNSTI4 1 +ASGNI4 +line 677 +;677: return qtrue; +CNSTI4 1 +RETI4 +LABELV $1334 +endproc BG_ParseAnimationFile 84 12 +proc PM_StartLegsAnim 28 16 +line 688 +;678:} +;679: +;680: +;681: +;682:/* +;683:=================== +;684:LEGS Animations +;685:Base animation for overall body +;686:=================== +;687:*/ +;688:static void PM_StartLegsAnim( int anim ) { +line 689 +;689: if ( pm->ps->pm_type >= PM_DEAD ) { +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LTI4 $1375 +line 690 +;690: return; +ADDRGP4 $1374 +JUMPV +LABELV $1375 +line 692 +;691: } +;692: if ( pm->ps->legsTimer > 0 ) { +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $1377 +line 693 +;693: return; // a high priority animation is running +ADDRGP4 $1374 +JUMPV +LABELV $1377 +line 696 +;694: } +;695: +;696: if (pm->ps->usingATST) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1304 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $1379 +line 697 +;697: { //animation is handled mostly client-side with only a few exceptions +line 698 +;698: return; +ADDRGP4 $1374 +JUMPV +LABELV $1379 +line 701 +;699: } +;700: +;701: if (BG_InSaberStandAnim(anim) && pm->ps->weapon == WP_SABER && pm->ps->dualBlade) +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +ADDRGP4 BG_InSaberStandAnim +CALLI4 +ASGNI4 +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +EQI4 $1381 +ADDRLP4 12 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $1381 +ADDRLP4 12 +INDIRP4 +CNSTI4 1352 +ADDP4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +EQI4 $1381 +line 702 +;702: { //a bit of a hack, but dualblade is cheat-only anyway +line 703 +;703: anim = BOTH_STAND1; +ADDRFP4 0 +CNSTI4 550 +ASGNI4 +line 704 +;704: } +LABELV $1381 +line 706 +;705: +;706: pm->ps->legsAnim = ( ( pm->ps->legsAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT ) +ADDRLP4 16 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +ASGNP4 +ADDRLP4 20 +CNSTI4 2048 +ASGNI4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +BANDI4 +ADDRLP4 20 +INDIRI4 +BXORI4 +ADDRFP4 0 +INDIRI4 +BORI4 +ASGNI4 +line 709 +;707: | anim; +;708: +;709: if ( pm->debugLevel ) { +ADDRGP4 pm +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $1383 +line 710 +;710: Com_Printf("%d: StartLegsAnim %d, on client#%d\n", pm->cmd.serverTime, anim, pm->ps->clientNum); +ADDRGP4 $1385 +ARGP4 +ADDRLP4 24 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 24 +INDIRP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_Printf +CALLV +pop +line 711 +;711: } +LABELV $1383 +line 712 +;712:} +LABELV $1374 +endproc PM_StartLegsAnim 28 16 +export PM_ContinueLegsAnim +proc PM_ContinueLegsAnim 0 4 +line 714 +;713: +;714:void PM_ContinueLegsAnim( int anim ) { +line 715 +;715: if ( ( pm->ps->legsAnim & ~ANIM_TOGGLEBIT ) == anim ) { +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ADDRFP4 0 +INDIRI4 +NEI4 $1387 +line 716 +;716: return; +ADDRGP4 $1386 +JUMPV +LABELV $1387 +line 718 +;717: } +;718: if ( pm->ps->legsTimer > 0 ) { +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $1389 +line 719 +;719: return; // a high priority animation is running +ADDRGP4 $1386 +JUMPV +LABELV $1389 +line 722 +;720: } +;721: +;722: PM_StartLegsAnim( anim ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 PM_StartLegsAnim +CALLV +pop +line 723 +;723:} +LABELV $1386 +endproc PM_ContinueLegsAnim 0 4 +export PM_ForceLegsAnim +proc PM_ForceLegsAnim 32 8 +line 725 +;724: +;725:void PM_ForceLegsAnim( int anim) { +line 726 +;726: if (BG_InSpecialJump(pm->ps->legsAnim) && +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +ADDRGP4 BG_InSpecialJump +CALLI4 +ASGNI4 +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $1392 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +LEI4 $1392 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 8 +ADDRGP4 BG_InSpecialJump +CALLI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $1392 +line 729 +;727: pm->ps->legsTimer > 0 && +;728: !BG_InSpecialJump(anim)) +;729: { +line 730 +;730: return; +ADDRGP4 $1391 +JUMPV +LABELV $1392 +line 733 +;731: } +;732: +;733: if (BG_InRoll(pm->ps, pm->ps->legsAnim) && +ADDRLP4 12 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 16 +ADDRGP4 BG_InRoll +CALLI4 +ASGNI4 +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +ADDRLP4 16 +INDIRI4 +ADDRLP4 20 +INDIRI4 +EQI4 $1394 +ADDRLP4 24 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +LEI4 $1394 +ADDRLP4 24 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 28 +ADDRGP4 BG_InRoll +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +NEI4 $1394 +line 736 +;734: pm->ps->legsTimer > 0 && +;735: !BG_InRoll(pm->ps, anim)) +;736: { +line 737 +;737: return; +ADDRGP4 $1391 +JUMPV +LABELV $1394 +line 740 +;738: } +;739: +;740: pm->ps->legsTimer = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +CNSTI4 0 +ASGNI4 +line 741 +;741: PM_StartLegsAnim( anim ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 PM_StartLegsAnim +CALLV +pop +line 742 +;742:} +LABELV $1391 +endproc PM_ForceLegsAnim 32 8 +export PM_StartTorsoAnim +proc PM_StartTorsoAnim 24 4 +line 752 +;743: +;744: +;745: +;746:/* +;747:=================== +;748:TORSO Animations +;749:Override animations for upper body +;750:=================== +;751:*/ +;752:void PM_StartTorsoAnim( int anim ) { +line 753 +;753: if ( pm->ps->pm_type >= PM_DEAD ) { +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LTI4 $1397 +line 754 +;754: return; +ADDRGP4 $1396 +JUMPV +LABELV $1397 +line 757 +;755: } +;756: +;757: if (pm->ps->usingATST) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1304 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $1399 +line 758 +;758: { //animation is handled mostly client-side with only a few exceptions +line 759 +;759: return; +ADDRGP4 $1396 +JUMPV +LABELV $1399 +line 762 +;760: } +;761: +;762: if (BG_InSaberStandAnim(anim) && pm->ps->weapon == WP_SABER && pm->ps->dualBlade) +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +ADDRGP4 BG_InSaberStandAnim +CALLI4 +ASGNI4 +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +EQI4 $1401 +ADDRLP4 12 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $1401 +ADDRLP4 12 +INDIRP4 +CNSTI4 1352 +ADDP4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +EQI4 $1401 +line 763 +;763: { //a bit of a hack, but dualblade is cheat-only anyway +line 764 +;764: anim = BOTH_STAND1; +ADDRFP4 0 +CNSTI4 550 +ASGNI4 +line 765 +;765: } +LABELV $1401 +line 767 +;766: +;767: pm->ps->torsoAnim = ( ( pm->ps->torsoAnim & ANIM_TOGGLEBIT ) ^ ANIM_TOGGLEBIT ) +ADDRLP4 16 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +ASGNP4 +ADDRLP4 20 +CNSTI4 2048 +ASGNI4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +BANDI4 +ADDRLP4 20 +INDIRI4 +BXORI4 +ADDRFP4 0 +INDIRI4 +BORI4 +ASGNI4 +line 769 +;768: | anim; +;769:} +LABELV $1396 +endproc PM_StartTorsoAnim 24 4 +export PM_SetLegsAnimTimer +proc PM_SetLegsAnimTimer 0 0 +line 779 +;770: +;771: +;772:/* +;773:------------------------- +;774:PM_SetLegsAnimTimer +;775:------------------------- +;776:*/ +;777: +;778:void PM_SetLegsAnimTimer(int time ) +;779:{ +line 780 +;780: pm->ps->legsTimer = time; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 782 +;781: +;782: if (pm->ps->legsTimer < 0 && time != -1 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +CNSTI4 0 +GEI4 $1404 +ADDRFP4 0 +INDIRI4 +CNSTI4 -1 +EQI4 $1404 +line 783 +;783: {//Cap timer to 0 if was counting down, but let it be -1 if that was intentional. NOTENOTE Yeah this seems dumb, but it mirrors SP. +line 784 +;784: pm->ps->legsTimer = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +CNSTI4 0 +ASGNI4 +line 785 +;785: } +LABELV $1404 +line 786 +;786:} +LABELV $1403 +endproc PM_SetLegsAnimTimer 0 0 +export PM_SetTorsoAnimTimer +proc PM_SetTorsoAnimTimer 0 0 +line 795 +;787: +;788:/* +;789:------------------------- +;790:PM_SetTorsoAnimTimer +;791:------------------------- +;792:*/ +;793: +;794:void PM_SetTorsoAnimTimer(int time ) +;795:{ +line 796 +;796: pm->ps->torsoTimer = time; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 798 +;797: +;798: if (pm->ps->torsoTimer < 0 && time != -1 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRI4 +CNSTI4 0 +GEI4 $1407 +ADDRFP4 0 +INDIRI4 +CNSTI4 -1 +EQI4 $1407 +line 799 +;799: {//Cap timer to 0 if was counting down, but let it be -1 if that was intentional. NOTENOTE Yeah this seems dumb, but it mirrors SP. +line 800 +;800: pm->ps->torsoTimer = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +CNSTI4 0 +ASGNI4 +line 801 +;801: } +LABELV $1407 +line 802 +;802:} +LABELV $1406 +endproc PM_SetTorsoAnimTimer 0 0 +export BG_SaberStartTransAnim +proc BG_SaberStartTransAnim 16 0 +line 805 +;803: +;804:void BG_SaberStartTransAnim( int saberAnimLevel, int anim, float *animSpeed ) +;805:{ +line 806 +;806: if ( ( (anim&~ANIM_TOGGLEBIT) >= BOTH_T1_BR__R && +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 133 +LTI4 $1413 +ADDRLP4 0 +INDIRI4 +CNSTI4 174 +LEI4 $1414 +LABELV $1413 +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 210 +LTI4 $1415 +ADDRLP4 4 +INDIRI4 +CNSTI4 251 +LEI4 $1414 +LABELV $1415 +ADDRLP4 8 +ADDRFP4 4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 287 +LTI4 $1410 +ADDRLP4 8 +INDIRI4 +CNSTI4 328 +GTI4 $1410 +LABELV $1414 +line 812 +;807: (anim&~ANIM_TOGGLEBIT) <= BOTH_T1_BL_TL ) || +;808: ( (anim&~ANIM_TOGGLEBIT) >= BOTH_T2_BR__R && +;809: (anim&~ANIM_TOGGLEBIT) <= BOTH_T2_BL_TL ) || +;810: ( (anim&~ANIM_TOGGLEBIT) >= BOTH_T3_BR__R && +;811: (anim&~ANIM_TOGGLEBIT) <= BOTH_T3_BL_TL ) ) +;812: { +line 813 +;813: if ( saberAnimLevel == FORCE_LEVEL_1 ) +ADDRFP4 0 +INDIRI4 +CNSTI4 1 +NEI4 $1416 +line 814 +;814: { +line 815 +;815: *animSpeed *= 1.5; +ADDRLP4 12 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTF4 1069547520 +ADDRLP4 12 +INDIRP4 +INDIRF4 +MULF4 +ASGNF4 +line 816 +;816: } +ADDRGP4 $1417 +JUMPV +LABELV $1416 +line 817 +;817: else if ( saberAnimLevel == FORCE_LEVEL_3 ) +ADDRFP4 0 +INDIRI4 +CNSTI4 3 +NEI4 $1418 +line 818 +;818: { +line 819 +;819: *animSpeed *= 0.75; +ADDRLP4 12 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTF4 1061158912 +ADDRLP4 12 +INDIRP4 +INDIRF4 +MULF4 +ASGNF4 +line 820 +;820: } +LABELV $1418 +LABELV $1417 +line 821 +;821: } +LABELV $1410 +line 822 +;822:} +LABELV $1409 +endproc BG_SaberStartTransAnim 16 0 +export PM_SetAnimFinal +proc PM_SetAnimFinal 36 12 +line 831 +;823: +;824:/* +;825:------------------------- +;826:PM_SetAnimFinal +;827:------------------------- +;828:*/ +;829:void PM_SetAnimFinal(int setAnimParts,int anim,int setAnimFlags, +;830: int blendTime) // default blendTime=350 +;831:{ +line 832 +;832: animation_t *animations = pm->animations; +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRP4 +ASGNP4 +line 834 +;833: +;834: float editAnimSpeed = 0; +ADDRLP4 4 +CNSTF4 0 +ASGNF4 +line 836 +;835: +;836: if (!animations) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $1421 +line 837 +;837: { +line 838 +;838: return; +ADDRGP4 $1420 +JUMPV +LABELV $1421 +line 842 +;839: } +;840: +;841: //NOTE: Setting blendTime here breaks actual blending.. +;842: blendTime = 0; +ADDRFP4 12 +CNSTI4 0 +ASGNI4 +line 844 +;843: +;844: BG_SaberStartTransAnim(pm->ps->fd.saberAnimLevel, anim, &editAnimSpeed); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1216 +ADDP4 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 4 +ARGP4 +ADDRGP4 BG_SaberStartTransAnim +CALLV +pop +line 847 +;845: +;846: // Set torso anim +;847: if (setAnimParts & SETANIM_TORSO) +ADDRFP4 0 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 0 +EQI4 $1423 +line 848 +;848: { +line 850 +;849: // Don't reset if it's already running the anim +;850: if( !(setAnimFlags & SETANIM_FLAG_RESTART) && (pm->ps->torsoAnim & ~ANIM_TOGGLEBIT ) == anim ) +ADDRFP4 8 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +NEI4 $1425 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ADDRFP4 4 +INDIRI4 +NEI4 $1425 +line 851 +;851: { +line 852 +;852: goto setAnimLegs; +ADDRGP4 $1427 +JUMPV +LABELV $1425 +line 855 +;853: } +;854: // or if a more important anim is running +;855: if( !(setAnimFlags & SETANIM_FLAG_OVERRIDE) && ((pm->ps->torsoTimer > 0)||(pm->ps->torsoTimer == -1)) ) +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +BANDI4 +ADDRLP4 8 +INDIRI4 +NEI4 $1428 +ADDRLP4 12 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 8 +INDIRI4 +GTI4 $1430 +ADDRLP4 12 +INDIRI4 +CNSTI4 -1 +NEI4 $1428 +LABELV $1430 +line 856 +;856: { +line 857 +;857: goto setAnimLegs; +ADDRGP4 $1427 +JUMPV +LABELV $1428 +line 860 +;858: } +;859: +;860: PM_StartTorsoAnim( anim ); +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 PM_StartTorsoAnim +CALLV +pop +line 862 +;861: +;862: if (setAnimFlags & SETANIM_FLAG_HOLD) +ADDRFP4 8 +INDIRI4 +CNSTI4 2 +BANDI4 +CNSTI4 0 +EQI4 $1431 +line 863 +;863: {//FIXME: allow to set a specific time? +line 864 +;864: if (setAnimFlags & SETANIM_FLAG_HOLDLESS) +ADDRFP4 8 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $1433 +line 865 +;865: { // Make sure to only wait in full 1/20 sec server frame intervals. +line 868 +;866: int dur; +;867: +;868: dur = (animations[anim].numFrames ) * fabs(animations[anim].frameLerp); +ADDRLP4 20 +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 24 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 20 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CVIF4 4 +ADDRLP4 24 +INDIRF4 +MULF4 +CVFI4 4 +ASGNI4 +line 870 +;869: //dur = ((int)(dur/50.0)) * 50 / timeScaleMod; +;870: dur -= blendTime+fabs(animations[anim].frameLerp)*2; +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 28 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CVIF4 4 +ADDRFP4 12 +INDIRI4 +CVIF4 4 +CNSTF4 1073741824 +ADDRLP4 28 +INDIRF4 +MULF4 +ADDF4 +SUBF4 +CVFI4 4 +ASGNI4 +line 871 +;871: if (dur > 1) +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +LEI4 $1435 +line 872 +;872: { +line 873 +;873: pm->ps->torsoTimer = dur-1; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 874 +;874: } +ADDRGP4 $1434 +JUMPV +LABELV $1435 +line 876 +;875: else +;876: { +line 877 +;877: pm->ps->torsoTimer = fabs(animations[anim].frameLerp); +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 32 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +ADDRLP4 32 +INDIRF4 +CVFI4 4 +ASGNI4 +line 878 +;878: } +line 879 +;879: } +ADDRGP4 $1434 +JUMPV +LABELV $1433 +line 881 +;880: else +;881: { +line 882 +;882: pm->ps->torsoTimer = ((animations[anim].numFrames ) * fabs(animations[anim].frameLerp)); +ADDRLP4 16 +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 20 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CVIF4 4 +ADDRLP4 20 +INDIRF4 +MULF4 +CVFI4 4 +ASGNI4 +line 883 +;883: } +LABELV $1434 +line 885 +;884: +;885: if (pm->ps->fd.forcePowersActive & (1 << FP_RAGE)) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +CNSTI4 256 +BANDI4 +CNSTI4 0 +EQI4 $1437 +line 886 +;886: { +line 887 +;887: pm->ps->torsoTimer /= 1.7; +ADDRLP4 16 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CVIF4 4 +CNSTF4 1071225242 +DIVF4 +CVFI4 4 +ASGNI4 +line 888 +;888: } +LABELV $1437 +line 890 +;889: +;890: if (editAnimSpeed) +ADDRLP4 4 +INDIRF4 +CNSTF4 0 +EQF4 $1439 +line 891 +;891: { +line 892 +;892: pm->ps->torsoTimer /= editAnimSpeed; +ADDRLP4 16 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CVIF4 4 +ADDRLP4 4 +INDIRF4 +DIVF4 +CVFI4 4 +ASGNI4 +line 893 +;893: } +LABELV $1439 +line 894 +;894: } +LABELV $1431 +line 895 +;895: } +LABELV $1423 +LABELV $1427 +line 899 +;896: +;897:setAnimLegs: +;898: // Set legs anim +;899: if (setAnimParts & SETANIM_LEGS) +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +BANDI4 +CNSTI4 0 +EQI4 $1420 +line 900 +;900: { +line 902 +;901: // Don't reset if it's already running the anim +;902: if( !(setAnimFlags & SETANIM_FLAG_RESTART) && (pm->ps->legsAnim & ~ANIM_TOGGLEBIT ) == anim ) +ADDRFP4 8 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +NEI4 $1443 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ADDRFP4 4 +INDIRI4 +NEI4 $1443 +line 903 +;903: { +line 904 +;904: goto setAnimDone; +ADDRGP4 $1420 +JUMPV +LABELV $1443 +line 907 +;905: } +;906: // or if a more important anim is running +;907: if( !(setAnimFlags & SETANIM_FLAG_OVERRIDE) && ((pm->ps->legsTimer > 0)||(pm->ps->legsTimer == -1)) ) +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +BANDI4 +ADDRLP4 8 +INDIRI4 +NEI4 $1446 +ADDRLP4 12 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 8 +INDIRI4 +GTI4 $1448 +ADDRLP4 12 +INDIRI4 +CNSTI4 -1 +NEI4 $1446 +LABELV $1448 +line 908 +;908: { +line 909 +;909: goto setAnimDone; +ADDRGP4 $1420 +JUMPV +LABELV $1446 +line 912 +;910: } +;911: +;912: PM_StartLegsAnim(anim); +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 PM_StartLegsAnim +CALLV +pop +line 914 +;913: +;914: if (setAnimFlags & SETANIM_FLAG_HOLD) +ADDRFP4 8 +INDIRI4 +CNSTI4 2 +BANDI4 +CNSTI4 0 +EQI4 $1420 +line 915 +;915: {//FIXME: allow to set a specific time? +line 916 +;916: if (setAnimFlags & SETANIM_FLAG_HOLDLESS) +ADDRFP4 8 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $1451 +line 917 +;917: { // Make sure to only wait in full 1/20 sec server frame intervals. +line 920 +;918: int dur; +;919: +;920: dur = (animations[anim].numFrames -1) * fabs(animations[anim].frameLerp); +ADDRLP4 20 +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 24 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 20 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 1 +SUBI4 +CVIF4 4 +ADDRLP4 24 +INDIRF4 +MULF4 +CVFI4 4 +ASGNI4 +line 922 +;921: //dur = ((int)(dur/50.0)) * 50 / timeScaleMod; +;922: dur -= blendTime+fabs(animations[anim].frameLerp)*2; +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 28 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CVIF4 4 +ADDRFP4 12 +INDIRI4 +CVIF4 4 +CNSTF4 1073741824 +ADDRLP4 28 +INDIRF4 +MULF4 +ADDF4 +SUBF4 +CVFI4 4 +ASGNI4 +line 923 +;923: if (dur > 1) +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +LEI4 $1453 +line 924 +;924: { +line 925 +;925: pm->ps->legsTimer = dur-1; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 926 +;926: } +ADDRGP4 $1452 +JUMPV +LABELV $1453 +line 928 +;927: else +;928: { +line 929 +;929: pm->ps->legsTimer = fabs(animations[anim].frameLerp); +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 32 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRLP4 32 +INDIRF4 +CVFI4 4 +ASGNI4 +line 930 +;930: } +line 931 +;931: } +ADDRGP4 $1452 +JUMPV +LABELV $1451 +line 933 +;932: else +;933: { +line 934 +;934: pm->ps->legsTimer = ((animations[anim].numFrames ) * fabs(animations[anim].frameLerp)); +ADDRLP4 16 +CNSTI4 28 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRLP4 20 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CVIF4 4 +ADDRLP4 20 +INDIRF4 +MULF4 +CVFI4 4 +ASGNI4 +line 935 +;935: } +LABELV $1452 +line 942 +;936: +;937: /* +;938: PM_DebugLegsAnim(anim); +;939: Com_Printf("%i\n", pm->ps->legsTimer); +;940: */ +;941: +;942: if (pm->ps->fd.forcePowersActive & (1 << FP_RAGE)) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +CNSTI4 256 +BANDI4 +CNSTI4 0 +EQI4 $1455 +line 943 +;943: { +line 944 +;944: pm->ps->legsTimer /= 1.3; +ADDRLP4 16 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CVIF4 4 +CNSTF4 1067869798 +DIVF4 +CVFI4 4 +ASGNI4 +line 945 +;945: } +ADDRGP4 $1420 +JUMPV +LABELV $1455 +line 946 +;946: else if (pm->ps->fd.forcePowersActive & (1 << FP_SPEED)) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +EQI4 $1420 +line 947 +;947: { +line 948 +;948: pm->ps->legsTimer /= 1.7; +ADDRLP4 16 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 88 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CVIF4 4 +CNSTF4 1071225242 +DIVF4 +CVFI4 4 +ASGNI4 +line 949 +;949: } +line 950 +;950: } +line 951 +;951: } +line 954 +;952: +;953:setAnimDone: +;954: return; +LABELV $1420 +endproc PM_SetAnimFinal 36 12 +export PM_SetAnim +proc PM_SetAnim 12 16 +line 961 +;955:} +;956: +;957: +;958: +;959:// Imported from single-player, this function is mainly intended to make porting from SP easier. +;960:void PM_SetAnim(int setAnimParts,int anim,int setAnimFlags, int blendTime) +;961:{ +line 962 +;962: assert( bgGlobalAnimations[anim].firstFrame != 0 || +line 965 +;963: bgGlobalAnimations[anim].numFrames != 0); +;964: +;965: if (BG_InSpecialJump(anim)) +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 0 +ADDRGP4 BG_InSpecialJump +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $1460 +line 966 +;966: { +line 967 +;967: setAnimFlags |= SETANIM_FLAG_RESTART; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +CNSTI4 4 +BORI4 +ASGNI4 +line 968 +;968: } +LABELV $1460 +line 970 +;969: +;970: if (BG_InRoll(pm->ps, pm->ps->legsAnim)) +ADDRLP4 4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 8 +ADDRGP4 BG_InRoll +CALLI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $1462 +line 971 +;971: { +line 973 +;972: //setAnimFlags |= SETANIM_FLAG_RESTART; +;973: return; +ADDRGP4 $1459 +JUMPV +LABELV $1462 +line 976 +;974: } +;975: +;976: if (setAnimFlags&SETANIM_FLAG_OVERRIDE) +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 0 +EQI4 $1464 +line 977 +;977: { +line 978 +;978: if (setAnimParts & SETANIM_TORSO) +ADDRFP4 0 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 0 +EQI4 $1466 +line 979 +;979: { +line 980 +;980: if( (setAnimFlags & SETANIM_FLAG_RESTART) || (pm->ps->torsoAnim & ~ANIM_TOGGLEBIT ) != anim ) +ADDRFP4 8 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +NEI4 $1470 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ADDRFP4 4 +INDIRI4 +EQI4 $1468 +LABELV $1470 +line 981 +;981: { +line 982 +;982: PM_SetTorsoAnimTimer(0); +CNSTI4 0 +ARGI4 +ADDRGP4 PM_SetTorsoAnimTimer +CALLV +pop +line 983 +;983: } +LABELV $1468 +line 984 +;984: } +LABELV $1466 +line 985 +;985: if (setAnimParts & SETANIM_LEGS) +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +BANDI4 +CNSTI4 0 +EQI4 $1471 +line 986 +;986: { +line 987 +;987: if( (setAnimFlags & SETANIM_FLAG_RESTART) || (pm->ps->legsAnim & ~ANIM_TOGGLEBIT ) != anim ) +ADDRFP4 8 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +NEI4 $1475 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ADDRFP4 4 +INDIRI4 +EQI4 $1473 +LABELV $1475 +line 988 +;988: { +line 989 +;989: PM_SetLegsAnimTimer(0); +CNSTI4 0 +ARGI4 +ADDRGP4 PM_SetLegsAnimTimer +CALLV +pop +line 990 +;990: } +LABELV $1473 +line 991 +;991: } +LABELV $1471 +line 992 +;992: } +LABELV $1464 +line 994 +;993: +;994: PM_SetAnimFinal(setAnimParts, anim, setAnimFlags, blendTime); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRFP4 12 +INDIRI4 +ARGI4 +ADDRGP4 PM_SetAnimFinal +CALLV +pop +line 995 +;995:} +LABELV $1459 +endproc PM_SetAnim 12 16 +bss +export BGPAFtext +align 1 +LABELV BGPAFtext +skip 40000 +import PM_SetSaberMove +import PM_WeaponLightsaber +import PM_FinishWeaponChange +import PM_BeginWeaponChange +import BG_CycleInven +import PM_StepSlideMove +import PM_SlideMove +import PM_AddEvent +import PM_AddTouchEnt +import PM_ClipVelocity +import PM_SaberJumpAttackMove +import PM_SaberFlipOverAttackMove +import PM_SomeoneInFront +import PM_GroundDistance +import PM_GetSaberStance +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import forcePowerNeeded +import c_pmove +import pm_flightfriction +import pm_waterfriction +import pm_friction +import pm_flyaccelerate +import pm_wateraccelerate +import pm_airaccelerate +import pm_accelerate +import pm_wadeScale +import pm_swimScale +import pm_duckScale +import pm_stopspeed +import pml +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +export bgGlobalAnimations +align 4 +LABELV bgGlobalAnimations +skip 30520 +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $1385 +char 1 37 +char 1 100 +char 1 58 +char 1 32 +char 1 32 +char 1 83 +char 1 116 +char 1 97 +char 1 114 +char 1 116 +char 1 76 +char 1 101 +char 1 103 +char 1 115 +char 1 65 +char 1 110 +char 1 105 +char 1 109 +char 1 32 +char 1 37 +char 1 100 +char 1 44 +char 1 32 +char 1 111 +char 1 110 +char 1 32 +char 1 99 +char 1 108 +char 1 105 +char 1 101 +char 1 110 +char 1 116 +char 1 35 +char 1 37 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $1333 +char 1 78 +char 1 69 +char 1 87 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $1332 +char 1 79 +char 1 76 +char 1 68 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $1153 +char 1 70 +char 1 65 +char 1 67 +char 1 69 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 0 +align 1 +LABELV $1152 +char 1 70 +char 1 65 +char 1 67 +char 1 69 +char 1 95 +char 1 70 +char 1 82 +char 1 79 +char 1 87 +char 1 78 +char 1 0 +align 1 +LABELV $1151 +char 1 70 +char 1 65 +char 1 67 +char 1 69 +char 1 95 +char 1 83 +char 1 77 +char 1 73 +char 1 76 +char 1 69 +char 1 0 +align 1 +LABELV $1150 +char 1 70 +char 1 65 +char 1 67 +char 1 69 +char 1 95 +char 1 65 +char 1 76 +char 1 69 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $1149 +char 1 70 +char 1 65 +char 1 67 +char 1 69 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 52 +char 1 0 +align 1 +LABELV $1148 +char 1 70 +char 1 65 +char 1 67 +char 1 69 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 51 +char 1 0 +align 1 +LABELV $1147 +char 1 70 +char 1 65 +char 1 67 +char 1 69 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $1146 +char 1 70 +char 1 65 +char 1 67 +char 1 69 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $1145 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1144 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1143 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1142 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1141 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1140 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1139 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1138 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1137 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1136 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1135 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1134 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1133 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1132 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1131 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1130 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1129 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1128 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1127 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1126 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1125 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1124 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1123 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1122 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1121 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1120 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1119 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1118 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1117 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1116 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1115 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1114 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1113 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1112 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1111 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 82 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1110 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1109 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1108 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1107 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1106 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 76 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1105 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1104 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1103 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1102 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1101 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1100 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $1099 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1098 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1097 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1096 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1095 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 67 +char 1 72 +char 1 79 +char 1 75 +char 1 73 +char 1 78 +char 1 71 +char 1 49 +char 1 0 +align 1 +LABELV $1094 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 67 +char 1 82 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $1093 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 67 +char 1 82 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $1092 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 75 +char 1 78 +char 1 69 +char 1 69 +char 1 76 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1091 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 75 +char 1 78 +char 1 69 +char 1 69 +char 1 76 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $1090 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $1089 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $1088 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 50 +char 1 0 +align 1 +LABELV $1087 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $1086 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $1085 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $1084 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $1083 +char 1 76 +char 1 69 +char 1 71 +char 1 83 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $1082 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 67 +char 1 72 +char 1 79 +char 1 75 +char 1 73 +char 1 78 +char 1 71 +char 1 49 +char 1 0 +align 1 +LABELV $1081 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 83 +char 1 85 +char 1 82 +char 1 82 +char 1 69 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $1080 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 83 +char 1 85 +char 1 82 +char 1 82 +char 1 69 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $1079 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 71 +char 1 82 +char 1 65 +char 1 66 +char 1 85 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 82 +char 1 0 +align 1 +LABELV $1078 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 71 +char 1 82 +char 1 65 +char 1 66 +char 1 76 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 82 +char 1 0 +align 1 +LABELV $1077 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 71 +char 1 82 +char 1 65 +char 1 66 +char 1 85 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 76 +char 1 0 +align 1 +LABELV $1076 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 71 +char 1 82 +char 1 65 +char 1 66 +char 1 76 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 76 +char 1 0 +align 1 +LABELV $1075 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 82 +char 1 69 +char 1 65 +char 1 67 +char 1 72 +char 1 72 +char 1 69 +char 1 76 +char 1 77 +char 1 69 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $1074 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 82 +char 1 65 +char 1 73 +char 1 83 +char 1 69 +char 1 72 +char 1 69 +char 1 76 +char 1 77 +char 1 69 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $1073 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 68 +char 1 82 +char 1 79 +char 1 80 +char 1 72 +char 1 69 +char 1 76 +char 1 77 +char 1 69 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $1072 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 82 +char 1 69 +char 1 84 +char 1 82 +char 1 65 +char 1 67 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $1071 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 69 +char 1 88 +char 1 84 +char 1 69 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $1070 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 71 +char 1 69 +char 1 83 +char 1 84 +char 1 85 +char 1 82 +char 1 69 +char 1 52 +char 1 0 +align 1 +LABELV $1069 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 71 +char 1 69 +char 1 83 +char 1 84 +char 1 85 +char 1 82 +char 1 69 +char 1 51 +char 1 0 +align 1 +LABELV $1068 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 71 +char 1 69 +char 1 83 +char 1 84 +char 1 85 +char 1 82 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $1067 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 71 +char 1 69 +char 1 83 +char 1 84 +char 1 85 +char 1 82 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $1066 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 76 +char 1 50 +char 1 0 +align 1 +LABELV $1065 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 76 +char 1 50 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $1064 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 76 +char 1 50 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $1063 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 82 +char 1 50 +char 1 0 +align 1 +LABELV $1062 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 82 +char 1 50 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $1061 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 82 +char 1 50 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $1060 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 82 +char 1 49 +char 1 0 +align 1 +LABELV $1059 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 76 +char 1 49 +char 1 0 +align 1 +LABELV $1058 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 76 +char 1 49 +char 1 0 +align 1 +LABELV $1057 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 76 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $1056 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 76 +char 1 49 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 0 +align 1 +LABELV $1055 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 76 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $1054 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 82 +char 1 49 +char 1 0 +align 1 +LABELV $1053 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 82 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $1052 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 82 +char 1 49 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 0 +align 1 +LABELV $1051 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 84 +char 1 65 +char 1 76 +char 1 75 +char 1 82 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $1050 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $1049 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 49 +char 1 49 +char 1 0 +align 1 +LABELV $1048 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $1047 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 57 +char 1 0 +align 1 +LABELV $1046 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 56 +char 1 0 +align 1 +LABELV $1045 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 55 +char 1 0 +align 1 +LABELV $1044 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 54 +char 1 0 +align 1 +LABELV $1043 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 53 +char 1 0 +align 1 +LABELV $1042 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 52 +char 1 0 +align 1 +LABELV $1041 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 51 +char 1 0 +align 1 +LABELV $1040 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $1039 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $1038 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $1037 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 49 +char 1 49 +char 1 0 +align 1 +LABELV $1036 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $1035 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 57 +char 1 0 +align 1 +LABELV $1034 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 56 +char 1 0 +align 1 +LABELV $1033 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 55 +char 1 0 +align 1 +LABELV $1032 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 54 +char 1 0 +align 1 +LABELV $1031 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 53 +char 1 0 +align 1 +LABELV $1030 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 52 +char 1 0 +align 1 +LABELV $1029 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 51 +char 1 0 +align 1 +LABELV $1028 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 50 +char 1 0 +align 1 +LABELV $1027 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 49 +char 1 0 +align 1 +LABELV $1026 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 82 +char 1 65 +char 1 73 +char 1 83 +char 1 69 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1025 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 82 +char 1 65 +char 1 73 +char 1 83 +char 1 69 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1024 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 82 +char 1 65 +char 1 73 +char 1 83 +char 1 69 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1023 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 82 +char 1 65 +char 1 73 +char 1 83 +char 1 69 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1022 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 68 +char 1 82 +char 1 79 +char 1 80 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $1021 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 68 +char 1 82 +char 1 79 +char 1 80 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1020 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 68 +char 1 82 +char 1 79 +char 1 80 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1019 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 95 +char 1 68 +char 1 82 +char 1 79 +char 1 80 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1018 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 79 +char 1 83 +char 1 83 +char 1 50 +char 1 0 +align 1 +LABELV $1017 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 79 +char 1 83 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $1016 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 71 +char 1 82 +char 1 73 +char 1 80 +char 1 95 +char 1 82 +char 1 69 +char 1 76 +char 1 69 +char 1 65 +char 1 83 +char 1 69 +char 1 0 +align 1 +LABELV $1015 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 71 +char 1 82 +char 1 73 +char 1 80 +char 1 95 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 0 +align 1 +LABELV $1014 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 71 +char 1 82 +char 1 73 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $1013 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 71 +char 1 82 +char 1 73 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $1012 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 71 +char 1 82 +char 1 73 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $1011 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 80 +char 1 85 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $1010 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 72 +char 1 69 +char 1 65 +char 1 76 +char 1 95 +char 1 81 +char 1 85 +char 1 73 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $1009 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 72 +char 1 69 +char 1 65 +char 1 76 +char 1 95 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $1008 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 72 +char 1 69 +char 1 65 +char 1 76 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $1007 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 76 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 78 +char 1 73 +char 1 78 +char 1 71 +char 1 95 +char 1 82 +char 1 69 +char 1 76 +char 1 69 +char 1 65 +char 1 83 +char 1 69 +char 1 0 +align 1 +LABELV $1006 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 76 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 78 +char 1 73 +char 1 78 +char 1 71 +char 1 95 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 0 +align 1 +LABELV $1005 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 76 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 78 +char 1 73 +char 1 78 +char 1 71 +char 1 0 +align 1 +LABELV $1004 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 77 +char 1 73 +char 1 78 +char 1 68 +char 1 84 +char 1 82 +char 1 73 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $1003 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 77 +char 1 73 +char 1 78 +char 1 68 +char 1 84 +char 1 82 +char 1 73 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $1002 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 80 +char 1 85 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $1001 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 80 +char 1 85 +char 1 83 +char 1 72 +char 1 0 +align 1 +LABELV $1000 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 69 +char 1 83 +char 1 73 +char 1 83 +char 1 84 +char 1 80 +char 1 85 +char 1 83 +char 1 72 +char 1 0 +align 1 +LABELV $999 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 85 +char 1 84 +char 1 84 +char 1 79 +char 1 78 +char 1 95 +char 1 82 +char 1 69 +char 1 76 +char 1 69 +char 1 65 +char 1 83 +char 1 69 +char 1 0 +align 1 +LABELV $998 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 85 +char 1 84 +char 1 84 +char 1 79 +char 1 78 +char 1 95 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 0 +align 1 +LABELV $997 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 85 +char 1 84 +char 1 84 +char 1 79 +char 1 78 +char 1 50 +char 1 0 +align 1 +LABELV $996 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 85 +char 1 84 +char 1 84 +char 1 79 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $995 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 79 +char 1 70 +char 1 70 +char 1 0 +align 1 +LABELV $994 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 79 +char 1 78 +char 1 0 +align 1 +LABELV $993 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $992 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 72 +char 1 79 +char 1 75 +char 1 69 +char 1 51 +char 1 0 +align 1 +LABELV $991 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 72 +char 1 79 +char 1 75 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $990 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 72 +char 1 79 +char 1 75 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $989 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 72 +char 1 79 +char 1 75 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 0 +align 1 +LABELV $988 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 72 +char 1 79 +char 1 75 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $987 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 65 +char 1 82 +char 1 82 +char 1 73 +char 1 69 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $986 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 65 +char 1 82 +char 1 82 +char 1 73 +char 1 69 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $985 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 73 +char 1 70 +char 1 84 +char 1 69 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $984 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 69 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 68 +char 1 49 +char 1 80 +char 1 79 +char 1 73 +char 1 78 +char 1 84 +char 1 0 +align 1 +LABELV $983 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 69 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $982 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 49 +char 1 0 +align 1 +LABELV $981 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 65 +char 1 87 +char 1 76 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $980 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 82 +char 1 79 +char 1 80 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $979 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $978 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 54 +char 1 80 +char 1 79 +char 1 73 +char 1 78 +char 1 84 +char 1 0 +align 1 +LABELV $977 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 54 +char 1 67 +char 1 79 +char 1 77 +char 1 66 +char 1 65 +char 1 68 +char 1 71 +char 1 69 +char 1 0 +align 1 +LABELV $976 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 54 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $975 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 54 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $974 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 54 +char 1 0 +align 1 +LABELV $973 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 51 +char 1 0 +align 1 +LABELV $972 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $971 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $970 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 82 +char 1 73 +char 1 84 +char 1 72 +char 1 73 +char 1 78 +char 1 71 +char 1 50 +char 1 0 +align 1 +LABELV $969 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 82 +char 1 73 +char 1 84 +char 1 72 +char 1 73 +char 1 78 +char 1 71 +char 1 49 +char 1 76 +char 1 76 +char 1 69 +char 1 71 +char 1 0 +align 1 +LABELV $968 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 82 +char 1 73 +char 1 84 +char 1 72 +char 1 73 +char 1 78 +char 1 71 +char 1 49 +char 1 82 +char 1 76 +char 1 69 +char 1 71 +char 1 0 +align 1 +LABELV $967 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 82 +char 1 73 +char 1 84 +char 1 72 +char 1 73 +char 1 78 +char 1 71 +char 1 49 +char 1 0 +align 1 +LABELV $966 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 82 +char 1 79 +char 1 78 +char 1 69 +char 1 50 +char 1 76 +char 1 76 +char 1 69 +char 1 71 +char 1 0 +align 1 +LABELV $965 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 82 +char 1 79 +char 1 78 +char 1 69 +char 1 50 +char 1 82 +char 1 76 +char 1 69 +char 1 71 +char 1 0 +align 1 +LABELV $964 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 50 +char 1 87 +char 1 82 +char 1 73 +char 1 84 +char 1 72 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $963 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 73 +char 1 69 +char 1 95 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 51 +char 1 0 +align 1 +LABELV $962 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 73 +char 1 69 +char 1 95 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 50 +char 1 0 +align 1 +LABELV $961 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 73 +char 1 69 +char 1 95 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $960 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $959 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 0 +align 1 +LABELV $958 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $957 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $956 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 0 +align 1 +LABELV $955 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $954 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 95 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $953 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 65 +char 1 84 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $952 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 65 +char 1 84 +char 1 50 +char 1 0 +align 1 +LABELV $951 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 65 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $950 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $949 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $948 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $947 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 83 +char 1 72 +char 1 73 +char 1 69 +char 1 76 +char 1 68 +char 1 69 +char 1 68 +char 1 0 +align 1 +LABELV $946 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $945 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $944 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 73 +char 1 82 +char 1 84 +char 1 72 +char 1 49 +char 1 0 +align 1 +LABELV $943 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 77 +char 1 66 +char 1 85 +char 1 83 +char 1 72 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $942 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 49 +char 1 0 +align 1 +LABELV $941 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $940 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 73 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $939 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 79 +char 1 70 +char 1 70 +char 1 76 +char 1 65 +char 1 68 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 79 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $938 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 79 +char 1 78 +char 1 76 +char 1 65 +char 1 68 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 79 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $937 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 79 +char 1 70 +char 1 70 +char 1 76 +char 1 65 +char 1 68 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 66 +char 1 79 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $936 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 79 +char 1 78 +char 1 76 +char 1 65 +char 1 68 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 66 +char 1 79 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $935 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 68 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 0 +align 1 +LABELV $934 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 68 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 68 +char 1 87 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $933 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 68 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $932 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $931 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 79 +char 1 83 +char 1 69 +char 1 52 +char 1 0 +align 1 +LABELV $930 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 79 +char 1 83 +char 1 69 +char 1 51 +char 1 0 +align 1 +LABELV $929 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 79 +char 1 83 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $928 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 79 +char 1 83 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $927 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 85 +char 1 84 +char 1 84 +char 1 69 +char 1 82 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 70 +char 1 76 +char 1 49 +char 1 0 +align 1 +LABELV $926 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 85 +char 1 84 +char 1 84 +char 1 69 +char 1 82 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 70 +char 1 82 +char 1 49 +char 1 0 +align 1 +LABELV $925 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 82 +char 1 73 +char 1 65 +char 1 76 +char 1 95 +char 1 70 +char 1 49 +char 1 0 +align 1 +LABELV $924 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 65 +char 1 83 +char 1 72 +char 1 69 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $923 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 70 +char 1 76 +char 1 69 +char 1 67 +char 1 84 +char 1 83 +char 1 76 +char 1 65 +char 1 83 +char 1 72 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 70 +char 1 73 +char 1 78 +char 1 0 +align 1 +LABELV $922 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 67 +char 1 72 +char 1 79 +char 1 80 +char 1 80 +char 1 69 +char 1 68 +char 1 79 +char 1 70 +char 1 70 +char 1 0 +align 1 +LABELV $921 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 70 +char 1 82 +char 1 79 +char 1 77 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 83 +char 1 76 +char 1 65 +char 1 83 +char 1 72 +char 1 0 +align 1 +LABELV $920 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 74 +char 1 83 +char 1 83 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $919 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 74 +char 1 83 +char 1 83 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $918 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 69 +char 1 73 +char 1 76 +char 1 73 +char 1 78 +char 1 71 +char 1 95 +char 1 68 +char 1 82 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $917 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 69 +char 1 73 +char 1 76 +char 1 73 +char 1 78 +char 1 71 +char 1 95 +char 1 67 +char 1 76 +char 1 73 +char 1 78 +char 1 71 +char 1 0 +align 1 +LABELV $916 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 80 +char 1 73 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $915 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $914 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $913 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 66 +char 1 54 +char 1 0 +align 1 +LABELV $912 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 66 +char 1 53 +char 1 0 +align 1 +LABELV $911 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 66 +char 1 52 +char 1 0 +align 1 +LABELV $910 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 66 +char 1 51 +char 1 0 +align 1 +LABELV $909 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 66 +char 1 50 +char 1 0 +align 1 +LABELV $908 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 66 +char 1 49 +char 1 0 +align 1 +LABELV $907 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 70 +char 1 50 +char 1 0 +align 1 +LABELV $906 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 70 +char 1 49 +char 1 0 +align 1 +LABELV $905 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 95 +char 1 66 +char 1 49 +char 1 0 +align 1 +LABELV $904 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 95 +char 1 70 +char 1 49 +char 1 0 +align 1 +LABELV $903 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $902 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $901 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $900 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $899 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $898 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 78 +char 1 79 +char 1 67 +char 1 75 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 53 +char 1 0 +align 1 +LABELV $897 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 78 +char 1 79 +char 1 67 +char 1 75 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 52 +char 1 0 +align 1 +LABELV $896 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 78 +char 1 79 +char 1 67 +char 1 75 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 51 +char 1 0 +align 1 +LABELV $895 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 78 +char 1 79 +char 1 67 +char 1 75 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 50 +char 1 0 +align 1 +LABELV $894 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 78 +char 1 79 +char 1 67 +char 1 75 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $893 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 70 +char 1 87 +char 1 68 +char 1 0 +align 1 +LABELV $892 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 0 +align 1 +LABELV $891 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 0 +align 1 +LABELV $890 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 95 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $889 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 0 +align 1 +LABELV $888 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 0 +align 1 +LABELV $887 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 95 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $886 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 0 +align 1 +LABELV $885 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 76 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 0 +align 1 +LABELV $884 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 85 +char 1 84 +char 1 84 +char 1 69 +char 1 82 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 0 +align 1 +LABELV $883 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 85 +char 1 84 +char 1 84 +char 1 69 +char 1 82 +char 1 70 +char 1 76 +char 1 89 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 0 +align 1 +LABELV $882 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 51 +char 1 0 +align 1 +LABELV $881 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $880 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $879 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 0 +align 1 +LABELV $878 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 65 +char 1 82 +char 1 84 +char 1 87 +char 1 72 +char 1 69 +char 1 69 +char 1 76 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 0 +align 1 +LABELV $877 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 65 +char 1 82 +char 1 84 +char 1 87 +char 1 72 +char 1 69 +char 1 69 +char 1 76 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 0 +align 1 +LABELV $876 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 82 +char 1 73 +char 1 65 +char 1 76 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 0 +align 1 +LABELV $875 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 82 +char 1 73 +char 1 65 +char 1 76 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 0 +align 1 +LABELV $874 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $873 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 85 +char 1 78 +char 1 71 +char 1 69 +char 1 50 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $872 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 76 +char 1 69 +char 1 65 +char 1 80 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 95 +char 1 0 +align 1 +LABELV $871 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 83 +char 1 84 +char 1 65 +char 1 66 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 0 +align 1 +LABELV $870 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 83 +char 1 76 +char 1 65 +char 1 83 +char 1 72 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $869 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 95 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $868 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 66 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $867 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 78 +char 1 71 +char 1 65 +char 1 71 +char 1 69 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 0 +align 1 +LABELV $866 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 83 +char 1 76 +char 1 79 +char 1 87 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 67 +char 1 69 +char 1 0 +align 1 +LABELV $865 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 70 +char 1 65 +char 1 83 +char 1 84 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 67 +char 1 69 +char 1 0 +align 1 +LABELV $864 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 73 +char 1 86 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $863 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 79 +char 1 68 +char 1 71 +char 1 69 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $862 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 79 +char 1 68 +char 1 71 +char 1 69 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $861 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 79 +char 1 68 +char 1 71 +char 1 69 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $860 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 79 +char 1 68 +char 1 71 +char 1 69 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $859 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 79 +char 1 68 +char 1 71 +char 1 69 +char 1 95 +char 1 70 +char 1 82 +char 1 0 +align 1 +LABELV $858 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 79 +char 1 68 +char 1 71 +char 1 69 +char 1 95 +char 1 70 +char 1 76 +char 1 0 +align 1 +LABELV $857 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 79 +char 1 80 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $856 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 79 +char 1 80 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $855 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 79 +char 1 80 +char 1 95 +char 1 66 +char 1 0 +align 1 +LABELV $854 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 79 +char 1 80 +char 1 95 +char 1 70 +char 1 0 +align 1 +LABELV $853 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $852 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $851 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 95 +char 1 70 +char 1 76 +char 1 0 +align 1 +LABELV $850 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 95 +char 1 70 +char 1 82 +char 1 0 +align 1 +LABELV $849 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $848 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $847 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 95 +char 1 66 +char 1 0 +align 1 +LABELV $846 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 95 +char 1 70 +char 1 0 +align 1 +LABELV $845 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $844 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $843 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 66 +char 1 0 +align 1 +LABELV $842 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 95 +char 1 70 +char 1 0 +align 1 +LABELV $841 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $840 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $839 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $838 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $837 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $836 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $835 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $834 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $833 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $832 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $831 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 49 +char 1 0 +align 1 +LABELV $830 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $829 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $828 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $827 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $826 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $825 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $824 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $823 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $822 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $821 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $820 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $819 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $818 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 49 +char 1 0 +align 1 +LABELV $817 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $816 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $815 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $814 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $813 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $812 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 49 +char 1 0 +align 1 +LABELV $811 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 65 +char 1 87 +char 1 65 +char 1 89 +char 1 49 +char 1 0 +align 1 +LABELV $810 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 0 +align 1 +LABELV $809 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 52 +char 1 0 +align 1 +LABELV $808 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 51 +char 1 0 +align 1 +LABELV $807 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $806 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $805 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $804 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 70 +char 1 69 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $803 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 70 +char 1 69 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $802 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 70 +char 1 69 +char 1 95 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $801 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 70 +char 1 69 +char 1 95 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $800 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $799 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 50 +char 1 0 +align 1 +LABELV $798 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $797 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $796 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $795 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 84 +char 1 79 +char 1 82 +char 1 85 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $794 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 55 +char 1 0 +align 1 +LABELV $793 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 54 +char 1 0 +align 1 +LABELV $792 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 53 +char 1 0 +align 1 +LABELV $791 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 52 +char 1 0 +align 1 +LABELV $790 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 51 +char 1 0 +align 1 +LABELV $789 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $788 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $787 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 76 +char 1 65 +char 1 77 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 68 +char 1 79 +char 1 87 +char 1 78 +char 1 0 +align 1 +LABELV $786 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 76 +char 1 73 +char 1 68 +char 1 69 +char 1 71 +char 1 76 +char 1 65 +char 1 83 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $785 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 71 +char 1 76 +char 1 65 +char 1 83 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $784 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 77 +char 1 77 +char 1 65 +char 1 71 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $783 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 77 +char 1 77 +char 1 65 +char 1 71 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $782 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 85 +char 1 77 +char 1 77 +char 1 65 +char 1 71 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $781 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 82 +char 1 85 +char 1 71 +char 1 71 +char 1 76 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $780 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 82 +char 1 85 +char 1 71 +char 1 71 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $779 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 82 +char 1 85 +char 1 71 +char 1 71 +char 1 76 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $778 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 78 +char 1 69 +char 1 69 +char 1 83 +char 1 50 +char 1 84 +char 1 79 +char 1 49 +char 1 0 +align 1 +LABELV $777 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 78 +char 1 69 +char 1 69 +char 1 83 +char 1 50 +char 1 0 +align 1 +LABELV $776 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 78 +char 1 69 +char 1 69 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $775 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 85 +char 1 78 +char 1 83 +char 1 73 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $774 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 67 +char 1 75 +char 1 80 +char 1 73 +char 1 84 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $773 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 67 +char 1 75 +char 1 80 +char 1 73 +char 1 84 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $772 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 67 +char 1 75 +char 1 80 +char 1 73 +char 1 84 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $771 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 95 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $770 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 95 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $769 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 51 +char 1 0 +align 1 +LABELV $768 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 85 +char 1 78 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 51 +char 1 0 +align 1 +LABELV $767 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 50 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $766 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 50 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 0 +align 1 +LABELV $765 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 85 +char 1 78 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 49 +char 1 0 +align 1 +LABELV $764 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 49 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $763 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 49 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 0 +align 1 +LABELV $762 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 49 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 0 +align 1 +LABELV $761 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 49 +char 1 0 +align 1 +LABELV $760 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 55 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $759 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 55 +char 1 0 +align 1 +LABELV $758 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 54 +char 1 84 +char 1 79 +char 1 53 +char 1 0 +align 1 +LABELV $757 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 54 +char 1 84 +char 1 79 +char 1 52 +char 1 0 +align 1 +LABELV $756 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 53 +char 1 84 +char 1 79 +char 1 54 +char 1 0 +align 1 +LABELV $755 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 53 +char 1 84 +char 1 79 +char 1 52 +char 1 0 +align 1 +LABELV $754 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 52 +char 1 84 +char 1 79 +char 1 54 +char 1 0 +align 1 +LABELV $753 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 52 +char 1 84 +char 1 79 +char 1 53 +char 1 0 +align 1 +LABELV $752 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 51 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 0 +align 1 +LABELV $751 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 51 +char 1 84 +char 1 79 +char 1 50 +char 1 0 +align 1 +LABELV $750 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 51 +char 1 84 +char 1 79 +char 1 49 +char 1 0 +align 1 +LABELV $749 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 50 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 0 +align 1 +LABELV $748 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 50 +char 1 84 +char 1 79 +char 1 51 +char 1 0 +align 1 +LABELV $747 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 51 +char 1 0 +align 1 +LABELV $746 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 50 +char 1 0 +align 1 +LABELV $745 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $744 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $743 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 53 +char 1 0 +align 1 +LABELV $742 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 52 +char 1 84 +char 1 79 +char 1 53 +char 1 0 +align 1 +LABELV $741 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 73 +char 1 78 +char 1 74 +char 1 85 +char 1 82 +char 1 69 +char 1 68 +char 1 52 +char 1 0 +align 1 +LABELV $740 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 86 +char 1 69 +char 1 82 +char 1 85 +char 1 80 +char 1 49 +char 1 95 +char 1 69 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $739 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 86 +char 1 69 +char 1 82 +char 1 85 +char 1 80 +char 1 49 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $738 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 86 +char 1 69 +char 1 82 +char 1 85 +char 1 80 +char 1 49 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $737 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 50 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $736 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 50 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $735 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $734 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $733 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 82 +char 1 73 +char 1 85 +char 1 77 +char 1 80 +char 1 72 +char 1 65 +char 1 78 +char 1 84 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $732 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 82 +char 1 73 +char 1 85 +char 1 77 +char 1 80 +char 1 72 +char 1 65 +char 1 78 +char 1 84 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $731 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 65 +char 1 68 +char 1 73 +char 1 79 +char 1 95 +char 1 79 +char 1 78 +char 1 79 +char 1 70 +char 1 70 +char 1 0 +align 1 +LABELV $730 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 69 +char 1 65 +char 1 84 +char 1 69 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $729 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 69 +char 1 65 +char 1 84 +char 1 69 +char 1 78 +char 1 49 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $728 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 65 +char 1 82 +char 1 84 +char 1 69 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 67 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $727 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 65 +char 1 82 +char 1 84 +char 1 69 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 67 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $726 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 65 +char 1 82 +char 1 84 +char 1 69 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 67 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $725 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 65 +char 1 82 +char 1 84 +char 1 69 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 49 +char 1 0 +align 1 +LABELV $724 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 65 +char 1 82 +char 1 84 +char 1 69 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 95 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $723 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 83 +char 1 67 +char 1 65 +char 1 80 +char 1 69 +char 1 80 +char 1 79 +char 1 68 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 86 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $722 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 83 +char 1 67 +char 1 65 +char 1 80 +char 1 69 +char 1 80 +char 1 79 +char 1 68 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 86 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $721 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 85 +char 1 71 +char 1 72 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $720 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 65 +char 1 85 +char 1 71 +char 1 72 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $719 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 69 +char 1 49 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $718 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $717 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 82 +char 1 49 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $716 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 65 +char 1 78 +char 1 68 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 82 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $715 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 75 +char 1 73 +char 1 76 +char 1 76 +char 1 69 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $714 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 75 +char 1 73 +char 1 76 +char 1 76 +char 1 69 +char 1 82 +char 1 49 +char 1 0 +align 1 +LABELV $713 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 69 +char 1 49 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $712 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 82 +char 1 49 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $711 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 69 +char 1 49 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 0 +align 1 +LABELV $710 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 82 +char 1 49 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 0 +align 1 +LABELV $709 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $708 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 82 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $707 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 69 +char 1 49 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 0 +align 1 +LABELV $706 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 84 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 82 +char 1 49 +char 1 72 +char 1 79 +char 1 76 +char 1 68 +char 1 0 +align 1 +LABELV $705 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 85 +char 1 78 +char 1 67 +char 1 72 +char 1 69 +char 1 82 +char 1 49 +char 1 0 +align 1 +LABELV $704 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 69 +char 1 65 +char 1 67 +char 1 72 +char 1 70 +char 1 79 +char 1 82 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 49 +char 1 0 +align 1 +LABELV $703 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 78 +char 1 67 +char 1 69 +char 1 71 +char 1 69 +char 1 83 +char 1 84 +char 1 85 +char 1 82 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $702 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 83 +char 1 69 +char 1 76 +char 1 70 +char 1 49 +char 1 69 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $701 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 83 +char 1 69 +char 1 76 +char 1 70 +char 1 49 +char 1 0 +align 1 +LABELV $700 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 77 +char 1 69 +char 1 95 +char 1 79 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $699 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 85 +char 1 77 +char 1 66 +char 1 73 +char 1 78 +char 1 71 +char 1 49 +char 1 0 +align 1 +LABELV $698 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 70 +char 1 79 +char 1 85 +char 1 78 +char 1 84 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 95 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $697 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 70 +char 1 79 +char 1 85 +char 1 78 +char 1 84 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $696 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 70 +char 1 79 +char 1 85 +char 1 78 +char 1 84 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 95 +char 1 77 +char 1 73 +char 1 68 +char 1 68 +char 1 76 +char 1 69 +char 1 0 +align 1 +LABELV $695 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 70 +char 1 79 +char 1 85 +char 1 78 +char 1 84 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $694 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 51 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $693 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 51 +char 1 0 +align 1 +LABELV $692 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 82 +char 1 73 +char 1 71 +char 1 72 +char 1 84 +char 1 51 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $691 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 50 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $690 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 78 +char 1 76 +char 1 69 +char 1 70 +char 1 84 +char 1 50 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $689 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 51 +char 1 0 +align 1 +LABELV $688 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 50 +char 1 0 +align 1 +LABELV $687 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 50 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $686 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $685 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 49 +char 1 0 +align 1 +LABELV $684 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $683 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 51 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $682 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 51 +char 1 0 +align 1 +LABELV $681 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 51 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $680 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 50 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $679 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $678 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 50 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $677 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $676 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $675 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 69 +char 1 88 +char 1 65 +char 1 77 +char 1 73 +char 1 78 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $674 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 69 +char 1 65 +char 1 67 +char 1 72 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $673 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 69 +char 1 65 +char 1 67 +char 1 72 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $672 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 0 +align 1 +LABELV $671 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 78 +char 1 79 +char 1 68 +char 1 0 +align 1 +LABELV $670 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 84 +char 1 73 +char 1 76 +char 1 84 +char 1 82 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $669 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 84 +char 1 73 +char 1 76 +char 1 84 +char 1 82 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $668 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 84 +char 1 73 +char 1 76 +char 1 84 +char 1 76 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $667 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 84 +char 1 73 +char 1 76 +char 1 84 +char 1 76 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $666 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 49 +char 1 95 +char 1 82 +char 1 69 +char 1 69 +char 1 76 +char 1 79 +char 1 0 +align 1 +LABELV $665 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 0 +align 1 +LABELV $664 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 78 +char 1 79 +char 1 68 +char 1 0 +align 1 +LABELV $663 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 84 +char 1 73 +char 1 76 +char 1 84 +char 1 82 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $662 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 84 +char 1 73 +char 1 76 +char 1 84 +char 1 82 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $661 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 84 +char 1 73 +char 1 76 +char 1 84 +char 1 76 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $660 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 84 +char 1 73 +char 1 76 +char 1 84 +char 1 76 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $659 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 85 +char 1 83 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $658 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 85 +char 1 83 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $657 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 83 +char 1 84 +char 1 85 +char 1 82 +char 1 69 +char 1 51 +char 1 0 +align 1 +LABELV $656 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 83 +char 1 84 +char 1 85 +char 1 82 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $655 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 69 +char 1 83 +char 1 84 +char 1 85 +char 1 82 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $654 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 76 +char 1 69 +char 1 82 +char 1 84 +char 1 49 +char 1 0 +align 1 +LABELV $653 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 85 +char 1 65 +char 1 82 +char 1 68 +char 1 95 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $652 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 71 +char 1 85 +char 1 65 +char 1 82 +char 1 68 +char 1 95 +char 1 76 +char 1 79 +char 1 79 +char 1 75 +char 1 65 +char 1 82 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $651 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 50 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $650 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $649 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 50 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $648 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $647 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $646 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 79 +char 1 78 +char 1 83 +char 1 79 +char 1 76 +char 1 69 +char 1 49 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 0 +align 1 +LABELV $645 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 56 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 0 +align 1 +LABELV $644 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 56 +char 1 0 +align 1 +LABELV $643 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $642 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 84 +char 1 79 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 0 +align 1 +LABELV $641 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 95 +char 1 82 +char 1 69 +char 1 69 +char 1 76 +char 1 79 +char 1 0 +align 1 +LABELV $640 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 95 +char 1 82 +char 1 69 +char 1 69 +char 1 76 +char 1 79 +char 1 0 +align 1 +LABELV $639 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 84 +char 1 79 +char 1 83 +char 1 73 +char 1 84 +char 1 51 +char 1 0 +align 1 +LABELV $638 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 85 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $637 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 85 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $636 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 52 +char 1 84 +char 1 79 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $635 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 84 +char 1 79 +char 1 87 +char 1 65 +char 1 76 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $634 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 52 +char 1 84 +char 1 79 +char 1 50 +char 1 0 +align 1 +LABELV $633 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 84 +char 1 79 +char 1 52 +char 1 0 +align 1 +LABELV $632 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 84 +char 1 79 +char 1 49 +char 1 0 +align 1 +LABELV $631 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 84 +char 1 79 +char 1 50 +char 1 0 +align 1 +LABELV $630 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 51 +char 1 84 +char 1 79 +char 1 49 +char 1 0 +align 1 +LABELV $629 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 84 +char 1 79 +char 1 51 +char 1 0 +align 1 +LABELV $628 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 56 +char 1 0 +align 1 +LABELV $627 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 55 +char 1 0 +align 1 +LABELV $626 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 54 +char 1 0 +align 1 +LABELV $625 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 53 +char 1 0 +align 1 +LABELV $624 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 52 +char 1 0 +align 1 +LABELV $623 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 51 +char 1 0 +align 1 +LABELV $622 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 95 +char 1 82 +char 1 65 +char 1 78 +char 1 68 +char 1 79 +char 1 77 +char 1 52 +char 1 0 +align 1 +LABELV $621 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 95 +char 1 82 +char 1 65 +char 1 78 +char 1 68 +char 1 79 +char 1 77 +char 1 51 +char 1 0 +align 1 +LABELV $620 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 95 +char 1 82 +char 1 65 +char 1 78 +char 1 68 +char 1 79 +char 1 77 +char 1 50 +char 1 0 +align 1 +LABELV $619 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 95 +char 1 82 +char 1 65 +char 1 78 +char 1 68 +char 1 79 +char 1 77 +char 1 49 +char 1 0 +align 1 +LABELV $618 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $617 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 95 +char 1 82 +char 1 65 +char 1 78 +char 1 68 +char 1 79 +char 1 77 +char 1 50 +char 1 0 +align 1 +LABELV $616 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 95 +char 1 82 +char 1 65 +char 1 78 +char 1 68 +char 1 79 +char 1 77 +char 1 49 +char 1 0 +align 1 +LABELV $615 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $614 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 67 +char 1 87 +char 1 67 +char 1 73 +char 1 82 +char 1 67 +char 1 76 +char 1 69 +char 1 76 +char 1 79 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $613 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 87 +char 1 67 +char 1 73 +char 1 82 +char 1 67 +char 1 76 +char 1 69 +char 1 76 +char 1 79 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $612 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 67 +char 1 87 +char 1 67 +char 1 73 +char 1 82 +char 1 67 +char 1 76 +char 1 69 +char 1 66 +char 1 82 +char 1 69 +char 1 65 +char 1 75 +char 1 0 +align 1 +LABELV $611 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 87 +char 1 67 +char 1 73 +char 1 82 +char 1 67 +char 1 76 +char 1 69 +char 1 66 +char 1 82 +char 1 69 +char 1 65 +char 1 75 +char 1 0 +align 1 +LABELV $610 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 67 +char 1 87 +char 1 67 +char 1 73 +char 1 82 +char 1 67 +char 1 76 +char 1 69 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $609 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 87 +char 1 67 +char 1 73 +char 1 82 +char 1 67 +char 1 76 +char 1 69 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $608 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 67 +char 1 87 +char 1 67 +char 1 73 +char 1 82 +char 1 67 +char 1 76 +char 1 69 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $607 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 87 +char 1 67 +char 1 73 +char 1 82 +char 1 67 +char 1 76 +char 1 69 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $606 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 70 +char 1 49 +char 1 76 +char 1 79 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $605 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 70 +char 1 49 +char 1 66 +char 1 82 +char 1 69 +char 1 65 +char 1 75 +char 1 0 +align 1 +LABELV $604 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 70 +char 1 49 +char 1 82 +char 1 69 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 0 +align 1 +LABELV $603 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 70 +char 1 50 +char 1 76 +char 1 79 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $602 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 70 +char 1 50 +char 1 66 +char 1 82 +char 1 69 +char 1 65 +char 1 75 +char 1 0 +align 1 +LABELV $601 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 70 +char 1 50 +char 1 82 +char 1 69 +char 1 84 +char 1 85 +char 1 82 +char 1 78 +char 1 0 +align 1 +LABELV $600 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $599 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 95 +char 1 0 +align 1 +LABELV $598 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $597 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $596 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $595 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 72 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $594 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 86 +char 1 49 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $593 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 86 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $592 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 86 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $591 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 86 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $590 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 86 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $589 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 86 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $588 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 86 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $587 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 86 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $586 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $585 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 95 +char 1 0 +align 1 +LABELV $584 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $583 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $582 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $581 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 75 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $580 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $579 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $578 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $577 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $576 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $575 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 53 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $574 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $573 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $572 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $571 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $570 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $569 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $568 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $567 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $566 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $565 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 53 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $564 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $563 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $562 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $561 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $560 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $559 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $558 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $557 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $556 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $555 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 53 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $554 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $553 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $552 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $551 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $550 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $549 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $548 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 53 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $547 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $546 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $545 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $544 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $543 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $542 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $541 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $540 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $539 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $538 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $537 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $536 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $535 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $534 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $533 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $532 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $531 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $530 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $529 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $528 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $527 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $526 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $525 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $524 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $523 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $522 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $521 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $520 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $519 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $518 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $517 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $516 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $515 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $514 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $513 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $512 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $511 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $510 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $509 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $508 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $507 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $506 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $505 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 53 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $504 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 53 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $503 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 53 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $502 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 53 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $501 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 53 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $500 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 53 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $499 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 53 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 95 +char 1 0 +align 1 +LABELV $498 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 52 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $497 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $496 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $495 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $494 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $493 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $492 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $491 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $490 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $489 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $488 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 52 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $487 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $486 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $485 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $484 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $483 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $482 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $481 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $480 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $479 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $478 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 52 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $477 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $476 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $475 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $474 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $473 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $472 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $471 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 52 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $470 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $469 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $468 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $467 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $466 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $465 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $464 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $463 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $462 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $461 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $460 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $459 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $458 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $457 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $456 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $455 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $454 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $453 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $452 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $451 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $450 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $449 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $448 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $447 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $446 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $445 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $444 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $443 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $442 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $441 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $440 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $439 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $438 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $437 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $436 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $435 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $434 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $433 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $432 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $431 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $430 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $429 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $428 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 52 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $427 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 52 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $426 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 52 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $425 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 52 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $424 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 52 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $423 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 52 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $422 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 52 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 95 +char 1 0 +align 1 +LABELV $421 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 51 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $420 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $419 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $418 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $417 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $416 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $415 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $414 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $413 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $412 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $411 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 51 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $410 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $409 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $408 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $407 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $406 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $405 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $404 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $403 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $402 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $401 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 51 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $400 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $399 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $398 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $397 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $396 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $395 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $394 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 51 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $393 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $392 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $391 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $390 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $389 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $388 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $387 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $386 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $385 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $384 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $383 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $382 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $381 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $380 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $379 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $378 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $377 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $376 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $375 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $374 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $373 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $372 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $371 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $370 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $369 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $368 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $367 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $366 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $365 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $364 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $363 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $362 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $361 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $360 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $359 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $358 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $357 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $356 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $355 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $354 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $353 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $352 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $351 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 51 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $350 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 51 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $349 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 51 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $348 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 51 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $347 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 51 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $346 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 51 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $345 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 51 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 95 +char 1 0 +align 1 +LABELV $344 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 50 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $343 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $342 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $341 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $340 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $339 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $338 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $337 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $336 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $335 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $334 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $333 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $332 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $331 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $330 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $329 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $328 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $327 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $326 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $325 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $324 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 50 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $323 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 50 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $322 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 50 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $321 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 50 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $320 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 50 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $319 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 50 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $318 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 50 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $317 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 50 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $316 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $315 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $314 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $313 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $312 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $311 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $310 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $309 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $308 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $307 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $306 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $305 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $304 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $303 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $302 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $301 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $300 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $299 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $298 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $297 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $296 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $295 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $294 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $293 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $292 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $291 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $290 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $289 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $288 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $287 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $286 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $285 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $284 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $283 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $282 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $281 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $280 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $279 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $278 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $277 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $276 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $275 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $274 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $273 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $272 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $271 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $270 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $269 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $268 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 50 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 95 +char 1 0 +align 1 +LABELV $267 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 49 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $266 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $265 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $264 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $263 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $262 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $261 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $260 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $259 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $258 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $257 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $256 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $255 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $254 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 66 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 95 +char 1 0 +align 1 +LABELV $253 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $252 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $251 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $250 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $249 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $248 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $247 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 49 +char 1 95 +char 1 66 +char 1 95 +char 1 95 +char 1 83 +char 1 49 +char 1 0 +align 1 +LABELV $246 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $245 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $244 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $243 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $242 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $241 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $240 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 83 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $239 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $238 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $237 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $236 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $235 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $234 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $233 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $232 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $231 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $230 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $229 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $228 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $227 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $226 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 95 +char 1 0 +align 1 +LABELV $225 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $224 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $223 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $222 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $221 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $220 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $219 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $218 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $217 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $216 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $215 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $214 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $213 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $212 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $211 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $210 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $209 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $208 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $207 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $206 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $205 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $204 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $203 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $202 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $201 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $200 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $199 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $198 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $197 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 49 +char 1 95 +char 1 84 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $196 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 49 +char 1 95 +char 1 66 +char 1 76 +char 1 95 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $195 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 49 +char 1 95 +char 1 66 +char 1 82 +char 1 95 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $194 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 49 +char 1 95 +char 1 84 +char 1 76 +char 1 95 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $193 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 49 +char 1 95 +char 1 95 +char 1 82 +char 1 95 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $192 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 49 +char 1 95 +char 1 95 +char 1 76 +char 1 95 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $191 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 49 +char 1 95 +char 1 84 +char 1 95 +char 1 95 +char 1 66 +char 1 95 +char 1 0 +align 1 +LABELV $190 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 69 +char 1 82 +char 1 77 +char 1 65 +char 1 76 +char 1 95 +char 1 84 +char 1 72 +char 1 82 +char 1 79 +char 1 87 +char 1 0 +align 1 +LABELV $189 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 84 +char 1 72 +char 1 69 +char 1 82 +char 1 77 +char 1 65 +char 1 76 +char 1 95 +char 1 82 +char 1 69 +char 1 65 +char 1 68 +char 1 89 +char 1 0 +align 1 +LABELV $188 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 77 +char 1 69 +char 1 76 +char 1 69 +char 1 69 +char 1 54 +char 1 0 +align 1 +LABELV $187 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 77 +char 1 69 +char 1 76 +char 1 69 +char 1 69 +char 1 53 +char 1 0 +align 1 +LABELV $186 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 77 +char 1 69 +char 1 76 +char 1 69 +char 1 69 +char 1 52 +char 1 0 +align 1 +LABELV $185 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 77 +char 1 69 +char 1 76 +char 1 69 +char 1 69 +char 1 51 +char 1 0 +align 1 +LABELV $184 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 77 +char 1 69 +char 1 76 +char 1 69 +char 1 69 +char 1 50 +char 1 0 +align 1 +LABELV $183 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 77 +char 1 69 +char 1 76 +char 1 69 +char 1 69 +char 1 49 +char 1 0 +align 1 +LABELV $182 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $181 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 49 +char 1 0 +align 1 +LABELV $180 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $179 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 57 +char 1 0 +align 1 +LABELV $178 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 56 +char 1 0 +align 1 +LABELV $177 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 55 +char 1 0 +align 1 +LABELV $176 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 54 +char 1 0 +align 1 +LABELV $175 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 53 +char 1 0 +align 1 +LABELV $174 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 52 +char 1 0 +align 1 +LABELV $173 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 51 +char 1 0 +align 1 +LABELV $172 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 50 +char 1 0 +align 1 +LABELV $171 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 49 +char 1 0 +align 1 +LABELV $170 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 50 +char 1 48 +char 1 0 +align 1 +LABELV $169 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 57 +char 1 0 +align 1 +LABELV $168 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 56 +char 1 0 +align 1 +LABELV $167 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 55 +char 1 0 +align 1 +LABELV $166 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 54 +char 1 0 +align 1 +LABELV $165 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 53 +char 1 0 +align 1 +LABELV $164 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 52 +char 1 0 +align 1 +LABELV $163 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 51 +char 1 0 +align 1 +LABELV $162 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $161 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 49 +char 1 0 +align 1 +LABELV $160 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $159 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 57 +char 1 0 +align 1 +LABELV $158 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 56 +char 1 0 +align 1 +LABELV $157 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 55 +char 1 0 +align 1 +LABELV $156 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 54 +char 1 0 +align 1 +LABELV $155 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 53 +char 1 0 +align 1 +LABELV $154 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 52 +char 1 0 +align 1 +LABELV $153 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 51 +char 1 0 +align 1 +LABELV $152 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 50 +char 1 0 +align 1 +LABELV $151 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 49 +char 1 0 +align 1 +LABELV $150 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 77 +char 1 69 +char 1 77 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 76 +char 1 65 +char 1 82 +char 1 77 +char 1 0 +align 1 +LABELV $149 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 77 +char 1 69 +char 1 77 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 82 +char 1 65 +char 1 82 +char 1 77 +char 1 0 +align 1 +LABELV $148 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 77 +char 1 69 +char 1 77 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 82 +char 1 76 +char 1 69 +char 1 71 +char 1 0 +align 1 +LABELV $147 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 77 +char 1 69 +char 1 77 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 76 +char 1 76 +char 1 69 +char 1 71 +char 1 0 +align 1 +LABELV $146 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 77 +char 1 69 +char 1 77 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 79 +char 1 82 +char 1 83 +char 1 79 +char 1 49 +char 1 0 +align 1 +LABELV $145 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 77 +char 1 69 +char 1 77 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 72 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $144 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $143 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 85 +char 1 77 +char 1 66 +char 1 76 +char 1 69 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $142 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 89 +char 1 73 +char 1 78 +char 1 71 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $141 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 50 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $140 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 49 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $139 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 50 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $138 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 49 +char 1 95 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $137 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 53 +char 1 0 +align 1 +LABELV $136 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 52 +char 1 0 +align 1 +LABELV $135 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 51 +char 1 0 +align 1 +LABELV $134 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 50 +char 1 0 +align 1 +LABELV $133 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 76 +char 1 79 +char 1 80 +char 1 49 +char 1 0 +align 1 +LABELV $132 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $131 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 85 +char 1 77 +char 1 66 +char 1 76 +char 1 69 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $130 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 89 +char 1 73 +char 1 78 +char 1 71 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $129 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $128 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $127 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $126 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $125 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 57 +char 1 0 +align 1 +LABELV $124 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 56 +char 1 0 +align 1 +LABELV $123 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 55 +char 1 0 +align 1 +LABELV $122 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 54 +char 1 0 +align 1 +LABELV $121 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 53 +char 1 0 +align 1 +LABELV $120 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 52 +char 1 0 +align 1 +LABELV $119 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 51 +char 1 0 +align 1 +LABELV $118 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $117 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 49 +char 1 0 +align 1 +LABELV $116 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $115 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 57 +char 1 0 +align 1 +LABELV $114 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 56 +char 1 0 +align 1 +LABELV $113 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 55 +char 1 0 +align 1 +LABELV $112 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 54 +char 1 0 +align 1 +LABELV $111 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 53 +char 1 0 +align 1 +LABELV $110 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 52 +char 1 0 +align 1 +LABELV $109 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 51 +char 1 0 +align 1 +LABELV $108 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $107 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $106 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 67 +char 1 82 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 69 +char 1 68 +char 1 0 +align 1 +LABELV $105 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 73 +char 1 78 +char 1 71 +char 1 95 +char 1 85 +char 1 80 +char 1 0 +align 1 +LABELV $104 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 73 +char 1 78 +char 1 71 +char 1 95 +char 1 68 +char 1 78 +char 1 0 +align 1 +LABELV $103 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 89 +char 1 73 +char 1 78 +char 1 71 +char 1 95 +char 1 68 +char 1 78 +char 1 0 +align 1 +LABELV $102 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 89 +char 1 73 +char 1 78 +char 1 71 +char 1 95 +char 1 85 +char 1 80 +char 1 0 +align 1 +LABELV $101 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 80 +char 1 73 +char 1 78 +char 1 95 +char 1 49 +char 1 56 +char 1 48 +char 1 0 +align 1 +LABELV $100 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 80 +char 1 73 +char 1 78 +char 1 95 +char 1 57 +char 1 48 +char 1 95 +char 1 76 +char 1 0 +align 1 +LABELV $99 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 80 +char 1 73 +char 1 78 +char 1 95 +char 1 57 +char 1 48 +char 1 95 +char 1 82 +char 1 0 +align 1 +LABELV $98 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 76 +char 1 73 +char 1 80 +char 1 0 +align 1 +LABELV $97 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $96 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 76 +char 1 65 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $95 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 73 +char 1 78 +char 1 65 +char 1 73 +char 1 82 +char 1 0 +align 1 +LABELV $94 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 0 +align 1 +LABELV $93 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 83 +char 1 84 +char 1 85 +char 1 77 +char 1 66 +char 1 76 +char 1 69 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 0 +align 1 +LABELV $92 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 76 +char 1 89 +char 1 73 +char 1 78 +char 1 71 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 0 +align 1 +LABELV $91 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 73 +char 1 68 +char 1 76 +char 1 69 +char 1 0 +align 1 +LABELV $90 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $89 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 66 +char 1 65 +char 1 67 +char 1 75 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $88 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 51 +char 1 0 +align 1 +LABELV $87 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 50 +char 1 0 +align 1 +LABELV $86 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 70 +char 1 79 +char 1 82 +char 1 87 +char 1 65 +char 1 82 +char 1 68 +char 1 49 +char 1 0 +align 1 +LABELV $85 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 57 +char 1 0 +align 1 +LABELV $84 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 56 +char 1 0 +align 1 +LABELV $83 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 55 +char 1 0 +align 1 +LABELV $82 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 54 +char 1 0 +align 1 +LABELV $81 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 53 +char 1 0 +align 1 +LABELV $80 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 52 +char 1 95 +char 1 83 +char 1 73 +char 1 84 +char 1 85 +char 1 80 +char 1 0 +align 1 +LABELV $79 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 52 +char 1 95 +char 1 85 +char 1 78 +char 1 71 +char 1 82 +char 1 73 +char 1 80 +char 1 0 +align 1 +LABELV $78 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 52 +char 1 0 +align 1 +LABELV $77 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 51 +char 1 0 +align 1 +LABELV $76 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $75 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 49 +char 1 0 +align 1 +LABELV $74 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $73 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 57 +char 1 0 +align 1 +LABELV $72 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 56 +char 1 0 +align 1 +LABELV $71 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 55 +char 1 0 +align 1 +LABELV $70 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 54 +char 1 0 +align 1 +LABELV $69 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 53 +char 1 0 +align 1 +LABELV $68 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 52 +char 1 0 +align 1 +LABELV $67 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 51 +char 1 0 +align 1 +LABELV $66 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 50 +char 1 0 +align 1 +LABELV $65 +char 1 66 +char 1 79 +char 1 84 +char 1 72 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 0 diff --git a/CODE-mp/game/vm/bg_saber.asm b/CODE-mp/game/vm/bg_saber.asm new file mode 100644 index 0000000..88ed704 --- /dev/null +++ b/CODE-mp/game/vm/bg_saber.asm @@ -0,0 +1,12002 @@ +export PM_irand_timesync +code +proc PM_irand_timesync 8 4 +file "../bg_saber.c" +line 6 +;1:#include "q_shared.h" +;2:#include "bg_public.h" +;3:#include "bg_local.h" +;4: +;5:int PM_irand_timesync(int val1, int val2) +;6:{ +line 9 +;7: int i; +;8: +;9: i = (val1-1) + (Q_random( &pm->cmd.serverTime )*(val2 - val1)) + 1; +ADDRGP4 pm +INDIRP4 +CNSTI4 4 +ADDP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 Q_random +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +CVIF4 4 +ADDRLP4 4 +INDIRF4 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ADDF4 +CNSTF4 1065353216 +ADDF4 +CVFI4 4 +ASGNI4 +line 10 +;10: if (i < val1) +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRI4 +GEI4 $66 +line 11 +;11: { +line 12 +;12: i = val1; +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 13 +;13: } +LABELV $66 +line 14 +;14: if (i > val2) +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRI4 +LEI4 $68 +line 15 +;15: { +line 16 +;16: i = val2; +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 17 +;17: } +LABELV $68 +line 19 +;18: +;19: return i; +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $65 +endproc PM_irand_timesync 8 4 +export BG_ForcePowerDrain +proc BG_ForcePowerDrain 12 0 +line 23 +;20:} +;21: +;22:void BG_ForcePowerDrain( playerState_t *ps, forcePowers_t forcePower, int overrideAmt ) +;23:{ +line 25 +;24: //take away the power +;25: int drain = overrideAmt; +ADDRLP4 0 +ADDRFP4 8 +INDIRI4 +ASGNI4 +line 34 +;26: +;27: /* +;28: if (ps->powerups[PW_FORCE_BOON]) +;29: { +;30: return; +;31: } +;32: */ +;33: +;34: if ( !drain ) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $71 +line 35 +;35: { +line 36 +;36: drain = forcePowerNeeded[ps->fd.forcePowerLevel[forcePower]][forcePower]; +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRI4 +CNSTI4 72 +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 932 +ADDP4 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 forcePowerNeeded +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 37 +;37: } +LABELV $71 +line 38 +;38: if ( !drain ) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $73 +line 39 +;39: { +line 40 +;40: return; +ADDRGP4 $70 +JUMPV +LABELV $73 +line 43 +;41: } +;42: +;43: if (forcePower == FP_LEVITATION) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $75 +line 44 +;44: { //special case +line 45 +;45: int jumpDrain = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 47 +;46: +;47: if (ps->velocity[2] > 250) +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1132068864 +LEF4 $77 +line 48 +;48: { +line 49 +;49: jumpDrain = 20; +ADDRLP4 4 +CNSTI4 20 +ASGNI4 +line 50 +;50: } +ADDRGP4 $78 +JUMPV +LABELV $77 +line 51 +;51: else if (ps->velocity[2] > 200) +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1128792064 +LEF4 $79 +line 52 +;52: { +line 53 +;53: jumpDrain = 16; +ADDRLP4 4 +CNSTI4 16 +ASGNI4 +line 54 +;54: } +ADDRGP4 $80 +JUMPV +LABELV $79 +line 55 +;55: else if (ps->velocity[2] > 150) +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1125515264 +LEF4 $81 +line 56 +;56: { +line 57 +;57: jumpDrain = 12; +ADDRLP4 4 +CNSTI4 12 +ASGNI4 +line 58 +;58: } +ADDRGP4 $82 +JUMPV +LABELV $81 +line 59 +;59: else if (ps->velocity[2] > 100) +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1120403456 +LEF4 $83 +line 60 +;60: { +line 61 +;61: jumpDrain = 8; +ADDRLP4 4 +CNSTI4 8 +ASGNI4 +line 62 +;62: } +ADDRGP4 $84 +JUMPV +LABELV $83 +line 63 +;63: else if (ps->velocity[2] > 50) +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1112014848 +LEF4 $85 +line 64 +;64: { +line 65 +;65: jumpDrain = 6; +ADDRLP4 4 +CNSTI4 6 +ASGNI4 +line 66 +;66: } +ADDRGP4 $86 +JUMPV +LABELV $85 +line 67 +;67: else if (ps->velocity[2] > 0) +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 0 +LEF4 $87 +line 68 +;68: { +line 69 +;69: jumpDrain = 4; +ADDRLP4 4 +CNSTI4 4 +ASGNI4 +line 70 +;70: } +LABELV $87 +LABELV $86 +LABELV $84 +LABELV $82 +LABELV $80 +LABELV $78 +line 72 +;71: +;72: if (jumpDrain) +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $89 +line 73 +;73: { +line 74 +;74: jumpDrain /= ps->fd.forcePowerLevel[FP_LEVITATION]; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 936 +ADDP4 +INDIRI4 +DIVI4 +ASGNI4 +line 75 +;75: } +LABELV $89 +line 77 +;76: +;77: ps->fd.forcePower -= jumpDrain; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 920 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +SUBI4 +ASGNI4 +line 78 +;78: if ( ps->fd.forcePower < 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 920 +ADDP4 +INDIRI4 +CNSTI4 0 +GEI4 $70 +line 79 +;79: { +line 80 +;80: ps->fd.forcePower = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 920 +ADDP4 +CNSTI4 0 +ASGNI4 +line 81 +;81: } +line 83 +;82: +;83: return; +ADDRGP4 $70 +JUMPV +LABELV $75 +line 86 +;84: } +;85: +;86: ps->fd.forcePower -= drain; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 920 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +SUBI4 +ASGNI4 +line 87 +;87: if ( ps->fd.forcePower < 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 920 +ADDP4 +INDIRI4 +CNSTI4 0 +GEI4 $93 +line 88 +;88: { +line 89 +;89: ps->fd.forcePower = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 920 +ADDP4 +CNSTI4 0 +ASGNI4 +line 90 +;90: } +LABELV $93 +line 91 +;91:} +LABELV $70 +endproc BG_ForcePowerDrain 12 0 +data +export saberMoveData +align 4 +LABELV saberMoveData +address $95 +byte 4 550 +byte 4 1 +byte 4 1 +byte 4 0 +byte 4 350 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $96 +byte 4 553 +byte 4 1 +byte 4 1 +byte 4 0 +byte 4 350 +byte 4 2 +byte 4 1 +byte 4 22 +byte 4 0 +address $97 +byte 4 566 +byte 4 1 +byte 4 1 +byte 4 2 +byte 4 350 +byte 4 0 +byte 4 1 +byte 4 22 +byte 4 0 +address $98 +byte 4 567 +byte 4 1 +byte 4 1 +byte 4 2 +byte 4 350 +byte 4 0 +byte 4 1 +byte 4 22 +byte 4 0 +address $99 +byte 4 129 +byte 4 4 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 25 +byte 4 25 +byte 4 200 +address $100 +byte 4 127 +byte 4 5 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 26 +byte 4 26 +byte 4 200 +address $101 +byte 4 131 +byte 4 6 +byte 4 2 +byte 4 10 +byte 4 50 +byte 4 1 +byte 4 27 +byte 4 27 +byte 4 200 +address $102 +byte 4 130 +byte 4 0 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 28 +byte 4 28 +byte 4 200 +address $103 +byte 4 128 +byte 4 1 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 29 +byte 4 29 +byte 4 200 +address $104 +byte 4 132 +byte 4 2 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 30 +byte 4 30 +byte 4 200 +address $105 +byte 4 126 +byte 4 3 +byte 4 7 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 31 +byte 4 31 +byte 4 200 +address $106 +byte 4 803 +byte 4 1 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $107 +byte 4 804 +byte 4 1 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $108 +byte 4 809 +byte 4 1 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $109 +byte 4 808 +byte 4 7 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $110 +byte 4 807 +byte 4 3 +byte 4 7 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $111 +byte 4 806 +byte 4 1 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 51 +byte 4 200 +address $112 +byte 4 805 +byte 4 5 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 40 +byte 4 200 +address $113 +byte 4 178 +byte 4 1 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 4 +byte 4 4 +byte 4 200 +address $114 +byte 4 176 +byte 4 1 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 5 +byte 4 5 +byte 4 200 +address $115 +byte 4 180 +byte 4 1 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 6 +byte 4 6 +byte 4 200 +address $116 +byte 4 179 +byte 4 1 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 7 +byte 4 7 +byte 4 200 +address $117 +byte 4 177 +byte 4 1 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 8 +byte 4 8 +byte 4 200 +address $118 +byte 4 181 +byte 4 1 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 9 +byte 4 9 +byte 4 200 +address $119 +byte 4 175 +byte 4 1 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 1 +byte 4 10 +byte 4 10 +byte 4 200 +address $120 +byte 4 186 +byte 4 0 +byte 4 1 +byte 4 2 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $121 +byte 4 184 +byte 4 1 +byte 4 1 +byte 4 2 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $122 +byte 4 188 +byte 4 2 +byte 4 1 +byte 4 2 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $123 +byte 4 185 +byte 4 4 +byte 4 1 +byte 4 2 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $124 +byte 4 183 +byte 4 5 +byte 4 1 +byte 4 2 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $125 +byte 4 187 +byte 4 6 +byte 4 1 +byte 4 2 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $126 +byte 4 182 +byte 4 7 +byte 4 1 +byte 4 2 +byte 4 100 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 200 +address $127 +byte 4 133 +byte 4 0 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 26 +byte 4 8 +byte 4 150 +address $128 +byte 4 160 +byte 4 0 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 9 +byte 4 150 +address $129 +byte 4 161 +byte 4 0 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 10 +byte 4 150 +address $130 +byte 4 134 +byte 4 0 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 28 +byte 4 4 +byte 4 150 +address $131 +byte 4 135 +byte 4 0 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 29 +byte 4 5 +byte 4 150 +address $132 +byte 4 136 +byte 4 0 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 30 +byte 4 6 +byte 4 150 +address $133 +byte 4 162 +byte 4 1 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 25 +byte 4 7 +byte 4 150 +address $134 +byte 4 137 +byte 4 1 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 9 +byte 4 150 +address $135 +byte 4 163 +byte 4 1 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 10 +byte 4 150 +address $136 +byte 4 138 +byte 4 1 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 28 +byte 4 4 +byte 4 150 +address $137 +byte 4 139 +byte 4 1 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 29 +byte 4 5 +byte 4 150 +address $138 +byte 4 140 +byte 4 1 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 30 +byte 4 6 +byte 4 150 +address $139 +byte 4 141 +byte 4 2 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 25 +byte 4 7 +byte 4 150 +address $140 +byte 4 164 +byte 4 2 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 26 +byte 4 8 +byte 4 150 +address $141 +byte 4 165 +byte 4 2 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 10 +byte 4 150 +address $142 +byte 4 142 +byte 4 2 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 28 +byte 4 4 +byte 4 150 +address $143 +byte 4 143 +byte 4 2 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 29 +byte 4 5 +byte 4 150 +address $144 +byte 4 144 +byte 4 2 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 30 +byte 4 6 +byte 4 150 +address $145 +byte 4 145 +byte 4 3 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 25 +byte 4 7 +byte 4 150 +address $146 +byte 4 146 +byte 4 3 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 26 +byte 4 8 +byte 4 150 +address $147 +byte 4 147 +byte 4 3 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 9 +byte 4 150 +address $148 +byte 4 148 +byte 4 3 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 28 +byte 4 4 +byte 4 150 +address $149 +byte 4 149 +byte 4 3 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 29 +byte 4 5 +byte 4 150 +address $150 +byte 4 150 +byte 4 3 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 30 +byte 4 6 +byte 4 150 +address $151 +byte 4 151 +byte 4 4 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 25 +byte 4 7 +byte 4 150 +address $152 +byte 4 166 +byte 4 4 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 26 +byte 4 8 +byte 4 150 +address $153 +byte 4 167 +byte 4 4 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 9 +byte 4 150 +address $154 +byte 4 168 +byte 4 4 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 10 +byte 4 150 +address $155 +byte 4 169 +byte 4 4 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 29 +byte 4 5 +byte 4 150 +address $156 +byte 4 152 +byte 4 4 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 30 +byte 4 6 +byte 4 150 +address $157 +byte 4 153 +byte 4 5 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 25 +byte 4 7 +byte 4 150 +address $158 +byte 4 154 +byte 4 5 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 26 +byte 4 8 +byte 4 150 +address $159 +byte 4 170 +byte 4 5 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 9 +byte 4 150 +address $160 +byte 4 171 +byte 4 5 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 10 +byte 4 150 +address $161 +byte 4 155 +byte 4 5 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 28 +byte 4 4 +byte 4 150 +address $162 +byte 4 172 +byte 4 5 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 30 +byte 4 6 +byte 4 150 +address $163 +byte 4 156 +byte 4 6 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 25 +byte 4 7 +byte 4 150 +address $164 +byte 4 157 +byte 4 6 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 26 +byte 4 8 +byte 4 150 +address $165 +byte 4 158 +byte 4 6 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 9 +byte 4 150 +address $166 +byte 4 173 +byte 4 6 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 10 +byte 4 150 +address $167 +byte 4 174 +byte 4 6 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 28 +byte 4 4 +byte 4 150 +address $168 +byte 4 159 +byte 4 6 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 29 +byte 4 5 +byte 4 150 +address $169 +byte 4 189 +byte 4 0 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 25 +byte 4 33 +byte 4 150 +address $170 +byte 4 190 +byte 4 1 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 26 +byte 4 42 +byte 4 150 +address $171 +byte 4 191 +byte 4 2 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 47 +byte 4 150 +address $172 +byte 4 192 +byte 4 3 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 55 +byte 4 150 +address $173 +byte 4 193 +byte 4 4 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 28 +byte 4 58 +byte 4 150 +address $174 +byte 4 194 +byte 4 5 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 29 +byte 4 63 +byte 4 150 +address $175 +byte 4 195 +byte 4 6 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 30 +byte 4 70 +byte 4 150 +address $176 +byte 4 196 +byte 4 0 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 25 +byte 4 33 +byte 4 150 +address $177 +byte 4 197 +byte 4 1 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 26 +byte 4 42 +byte 4 150 +address $178 +byte 4 198 +byte 4 2 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 47 +byte 4 150 +address $179 +byte 4 192 +byte 4 3 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 55 +byte 4 150 +address $180 +byte 4 199 +byte 4 4 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 28 +byte 4 58 +byte 4 150 +address $181 +byte 4 200 +byte 4 5 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 29 +byte 4 63 +byte 4 150 +address $182 +byte 4 201 +byte 4 6 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 30 +byte 4 70 +byte 4 150 +address $183 +byte 4 202 +byte 4 7 +byte 4 7 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 27 +byte 4 55 +byte 4 150 +address $184 +byte 4 522 +byte 4 0 +byte 4 0 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $185 +byte 4 523 +byte 4 1 +byte 4 1 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $186 +byte 4 524 +byte 4 2 +byte 4 2 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $187 +byte 4 525 +byte 4 3 +byte 4 3 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $188 +byte 4 526 +byte 4 4 +byte 4 4 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $189 +byte 4 527 +byte 4 5 +byte 4 5 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $190 +byte 4 528 +byte 4 6 +byte 4 6 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $191 +byte 4 529 +byte 4 7 +byte 4 7 +byte 4 10 +byte 4 100 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $192 +byte 4 530 +byte 4 3 +byte 4 7 +byte 4 10 +byte 4 50 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $193 +byte 4 531 +byte 4 2 +byte 4 6 +byte 4 10 +byte 4 50 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $194 +byte 4 532 +byte 4 4 +byte 4 0 +byte 4 10 +byte 4 50 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $195 +byte 4 533 +byte 4 6 +byte 4 2 +byte 4 10 +byte 4 50 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $196 +byte 4 534 +byte 4 7 +byte 4 3 +byte 4 10 +byte 4 50 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $197 +byte 4 535 +byte 4 0 +byte 4 4 +byte 4 10 +byte 4 50 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 150 +address $198 +byte 4 516 +byte 4 1 +byte 4 3 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 27 +byte 4 50 +byte 4 150 +address $199 +byte 4 517 +byte 4 1 +byte 4 2 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 27 +byte 4 45 +byte 4 150 +address $200 +byte 4 518 +byte 4 1 +byte 4 4 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 28 +byte 4 60 +byte 4 150 +address $201 +byte 4 519 +byte 4 1 +byte 4 6 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 25 +byte 4 72 +byte 4 150 +address $202 +byte 4 521 +byte 4 1 +byte 4 0 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 30 +byte 4 33 +byte 4 150 +address $203 +byte 4 511 +byte 4 1 +byte 4 3 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 27 +byte 4 10 +byte 4 150 +address $204 +byte 4 512 +byte 4 1 +byte 4 4 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 27 +byte 4 9 +byte 4 150 +address $205 +byte 4 513 +byte 4 1 +byte 4 2 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 28 +byte 4 4 +byte 4 150 +address $206 +byte 4 514 +byte 4 1 +byte 4 0 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 25 +byte 4 7 +byte 4 150 +address $207 +byte 4 515 +byte 4 1 +byte 4 6 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 30 +byte 4 6 +byte 4 150 +address $208 +byte 4 511 +byte 4 1 +byte 4 3 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 27 +byte 4 10 +byte 4 300 +address $209 +byte 4 513 +byte 4 1 +byte 4 2 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 28 +byte 4 4 +byte 4 300 +address $210 +byte 4 512 +byte 4 1 +byte 4 4 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 27 +byte 4 9 +byte 4 300 +address $211 +byte 4 515 +byte 4 1 +byte 4 6 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 30 +byte 4 6 +byte 4 300 +address $212 +byte 4 514 +byte 4 1 +byte 4 0 +byte 4 10 +byte 4 50 +byte 4 2 +byte 4 25 +byte 4 7 +byte 4 300 +export transitionMove +align 4 +LABELV transitionMove +byte 4 0 +byte 4 32 +byte 4 33 +byte 4 34 +byte 4 35 +byte 4 36 +byte 4 37 +byte 4 0 +byte 4 38 +byte 4 0 +byte 4 39 +byte 4 40 +byte 4 41 +byte 4 42 +byte 4 43 +byte 4 0 +byte 4 44 +byte 4 45 +byte 4 0 +byte 4 46 +byte 4 47 +byte 4 48 +byte 4 49 +byte 4 0 +byte 4 50 +byte 4 51 +byte 4 52 +byte 4 0 +byte 4 53 +byte 4 54 +byte 4 55 +byte 4 0 +byte 4 56 +byte 4 57 +byte 4 58 +byte 4 59 +byte 4 0 +byte 4 60 +byte 4 61 +byte 4 0 +byte 4 62 +byte 4 63 +byte 4 64 +byte 4 65 +byte 4 66 +byte 4 0 +byte 4 67 +byte 4 0 +byte 4 68 +byte 4 69 +byte 4 70 +byte 4 71 +byte 4 72 +byte 4 73 +byte 4 0 +byte 4 0 +byte 4 68 +byte 4 32 +byte 4 33 +byte 4 34 +byte 4 35 +byte 4 36 +byte 4 37 +byte 4 0 +export PM_AttackMoveForQuad +code +proc PM_AttackMoveForQuad 4 0 +line 322 +;92: +;93:// Silly, but I'm replacing these macros so they are shorter! +;94:#define AFLAG_IDLE (SETANIM_FLAG_NORMAL) +;95:#define AFLAG_ACTIVE (/*SETANIM_FLAG_OVERRIDE | */SETANIM_FLAG_HOLD | SETANIM_FLAG_HOLDLESS) +;96:#define AFLAG_WAIT (SETANIM_FLAG_HOLD | SETANIM_FLAG_HOLDLESS) +;97:#define AFLAG_FINISH (SETANIM_FLAG_HOLD) +;98: +;99:saberMoveData_t saberMoveData[LS_MOVE_MAX] = {// NB:randomized +;100: // name anim startQ endQ setanimflag blend, blocking chain_idle chain_attack trailLen +;101: {"None", BOTH_STAND1, Q_R, Q_R, AFLAG_IDLE, 350, BLK_NO, LS_NONE, LS_NONE, 0 }, // LS_NONE = 0, +;102: +;103: // General movements with saber +;104: {"Ready", BOTH_STAND2, Q_R, Q_R, AFLAG_IDLE, 350, BLK_WIDE, LS_READY, LS_S_R2L, 0 }, // LS_READY, +;105: {"Draw", BOTH_STAND1TO2, Q_R, Q_R, AFLAG_FINISH, 350, BLK_NO, LS_READY, LS_S_R2L, 0 }, // LS_DRAW, +;106: {"Putaway", BOTH_STAND2TO1, Q_R, Q_R, AFLAG_FINISH, 350, BLK_NO, LS_READY, LS_S_R2L, 0 }, // LS_PUTAWAY, +;107: +;108: // Attacks +;109: //UL2LR +;110: {"TL2BR Att", BOTH_A1_TL_BR, Q_TL, Q_BR, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_R_TL2BR, LS_R_TL2BR, 200 }, // LS_A_TL2BR +;111: //SLASH LEFT +;112: {"L2R Att", BOTH_A1__L__R, Q_L, Q_R, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_R_L2R, LS_R_L2R, 200 }, // LS_A_L2R +;113: //LL2UR +;114: {"BL2TR Att", BOTH_A1_BL_TR, Q_BL, Q_TR, AFLAG_ACTIVE, 50, BLK_TIGHT, LS_R_BL2TR, LS_R_BL2TR, 200 }, // LS_A_BL2TR +;115: //LR2UL +;116: {"BR2TL Att", BOTH_A1_BR_TL, Q_BR, Q_TL, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_R_BR2TL, LS_R_BR2TL, 200 }, // LS_A_BR2TL +;117: //SLASH RIGHT +;118: {"R2L Att", BOTH_A1__R__L, Q_R, Q_L, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_R_R2L, LS_R_R2L, 200 },// LS_A_R2L +;119: //UR2LL +;120: {"TR2BL Att", BOTH_A1_TR_BL, Q_TR, Q_BL, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_R_TR2BL, LS_R_TR2BL, 200 }, // LS_A_TR2BL +;121: //SLASH DOWN +;122: {"T2B Att", BOTH_A1_T__B_, Q_T, Q_B, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_R_T2B, LS_R_T2B, 200 }, // LS_A_T2B +;123: //special attacks +;124: {"Back Stab", BOTH_A2_STABBACK1, Q_R, Q_R, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_A_BACKSTAB +;125: {"Back Att", BOTH_ATTACK_BACK, Q_R, Q_R, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_A_BACK +;126: {"CR Back Att", BOTH_CROUCHATTACKBACK1,Q_R, Q_R, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_A_BACK_CR +;127: {"Lunge Att", BOTH_LUNGE2_B__T_, Q_B, Q_T, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_A_LUNGE +;128: {"Jump Att", BOTH_FORCELEAP2_T__B_,Q_T, Q_B, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_A_JUMP_T__B_ +;129: {"Flip Stab", BOTH_JUMPFLIPSTABDOWN,Q_R, Q_T, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_READY, LS_T1_T___R, 200 }, // LS_A_FLIP_STAB +;130: {"Flip Slash", BOTH_JUMPFLIPSLASHDOWN1,Q_L,Q_R, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_READY, LS_T1__R_T_, 200 }, // LS_A_FLIP_SLASH +;131: +;132: //starts +;133: {"TL2BR St", BOTH_S1_S1_TL, Q_R, Q_TL, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_A_TL2BR, LS_A_TL2BR, 200 }, // LS_S_TL2BR +;134: {"L2R St", BOTH_S1_S1__L, Q_R, Q_L, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_A_L2R, LS_A_L2R, 200 }, // LS_S_L2R +;135: {"BL2TR St", BOTH_S1_S1_BL, Q_R, Q_BL, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_A_BL2TR, LS_A_BL2TR, 200 }, // LS_S_BL2TR +;136: {"BR2TL St", BOTH_S1_S1_BR, Q_R, Q_BR, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_A_BR2TL, LS_A_BR2TL, 200 }, // LS_S_BR2TL +;137: {"R2L St", BOTH_S1_S1__R, Q_R, Q_R, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_A_R2L, LS_A_R2L, 200 }, // LS_S_R2L +;138: {"TR2BL St", BOTH_S1_S1_TR, Q_R, Q_TR, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_A_TR2BL, LS_A_TR2BL, 200 }, // LS_S_TR2BL +;139: {"T2B St", BOTH_S1_S1_T_, Q_R, Q_T, AFLAG_ACTIVE, 100, BLK_TIGHT, LS_A_T2B, LS_A_T2B, 200 }, // LS_S_T2B +;140: +;141: //returns +;142: {"TL2BR Ret", BOTH_R1_BR_S1, Q_BR, Q_R, AFLAG_FINISH, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_R_TL2BR +;143: {"L2R Ret", BOTH_R1__R_S1, Q_R, Q_R, AFLAG_FINISH, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_R_L2R +;144: {"BL2TR Ret", BOTH_R1_TR_S1, Q_TR, Q_R, AFLAG_FINISH, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_R_BL2TR +;145: {"BR2TL Ret", BOTH_R1_TL_S1, Q_TL, Q_R, AFLAG_FINISH, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_R_BR2TL +;146: {"R2L Ret", BOTH_R1__L_S1, Q_L, Q_R, AFLAG_FINISH, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_R_R2L +;147: {"TR2BL Ret", BOTH_R1_BL_S1, Q_BL, Q_R, AFLAG_FINISH, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_R_TR2BL +;148: {"T2B Ret", BOTH_R1_B__S1, Q_B, Q_R, AFLAG_FINISH, 100, BLK_TIGHT, LS_READY, LS_READY, 200 }, // LS_R_T2B +;149: +;150: //Transitions +;151: {"BR2R Trans", BOTH_T1_BR__R, Q_BR, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_R_L2R, LS_A_R2L, 150 }, //# Fast arc bottom right to right +;152: {"BR2TR Trans", BOTH_T1_BR_TR, Q_BR, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_TR2BL, 150 }, //# Fast arc bottom right to top right (use: BOTH_T1_TR_BR) +;153: {"BR2T Trans", BOTH_T1_BR_T_, Q_BR, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_T2B, 150 }, //# Fast arc bottom right to top (use: BOTH_T1_T__BR) +;154: {"BR2TL Trans", BOTH_T1_BR_TL, Q_BR, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BR2TL, LS_A_TL2BR, 150 }, //# Fast weak spin bottom right to top left +;155: {"BR2L Trans", BOTH_T1_BR__L, Q_BR, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_R_R2L, LS_A_L2R, 150 }, //# Fast weak spin bottom right to left +;156: {"BR2BL Trans", BOTH_T1_BR_BL, Q_BR, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TR2BL, LS_A_BL2TR, 150 }, //# Fast weak spin bottom right to bottom left +;157: {"R2BR Trans", BOTH_T1__R_BR, Q_R, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TL2BR, LS_A_BR2TL, 150 }, //# Fast arc right to bottom right (use: BOTH_T1_BR__R) +;158: {"R2TR Trans", BOTH_T1__R_TR, Q_R, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_TR2BL, 150 }, //# Fast arc right to top right +;159: {"R2T Trans", BOTH_T1__R_T_, Q_R, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_T2B, 150 }, //# Fast ar right to top (use: BOTH_T1_T___R) +;160: {"R2TL Trans", BOTH_T1__R_TL, Q_R, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BR2TL, LS_A_TL2BR, 150 }, //# Fast arc right to top left +;161: {"R2L Trans", BOTH_T1__R__L, Q_R, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_R_R2L, LS_A_L2R, 150 }, //# Fast weak spin right to left +;162: {"R2BL Trans", BOTH_T1__R_BL, Q_R, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TR2BL, LS_A_BL2TR, 150 }, //# Fast weak spin right to bottom left +;163: {"TR2BR Trans", BOTH_T1_TR_BR, Q_TR, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TL2BR, LS_A_BR2TL, 150 }, //# Fast arc top right to bottom right +;164: {"TR2R Trans", BOTH_T1_TR__R, Q_TR, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_R_L2R, LS_A_R2L, 150 }, //# Fast arc top right to right (use: BOTH_T1__R_TR) +;165: {"TR2T Trans", BOTH_T1_TR_T_, Q_TR, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_T2B, 150 }, //# Fast arc top right to top (use: BOTH_T1_T__TR) +;166: {"TR2TL Trans", BOTH_T1_TR_TL, Q_TR, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BR2TL, LS_A_TL2BR, 150 }, //# Fast arc top right to top left +;167: {"TR2L Trans", BOTH_T1_TR__L, Q_TR, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_R_R2L, LS_A_L2R, 150 }, //# Fast arc top right to left +;168: {"TR2BL Trans", BOTH_T1_TR_BL, Q_TR, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TR2BL, LS_A_BL2TR, 150 }, //# Fast weak spin top right to bottom left +;169: {"T2BR Trans", BOTH_T1_T__BR, Q_T, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TL2BR, LS_A_BR2TL, 150 }, //# Fast arc top to bottom right +;170: {"T2R Trans", BOTH_T1_T___R, Q_T, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_R_L2R, LS_A_R2L, 150 }, //# Fast arc top to right +;171: {"T2TR Trans", BOTH_T1_T__TR, Q_T, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_TR2BL, 150 }, //# Fast arc top to top right +;172: {"T2TL Trans", BOTH_T1_T__TL, Q_T, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BR2TL, LS_A_TL2BR, 150 }, //# Fast arc top to top left +;173: {"T2L Trans", BOTH_T1_T___L, Q_T, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_R_R2L, LS_A_L2R, 150 }, //# Fast arc top to left +;174: {"T2BL Trans", BOTH_T1_T__BL, Q_T, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TR2BL, LS_A_BL2TR, 150 }, //# Fast arc top to bottom left +;175: {"TL2BR Trans", BOTH_T1_TL_BR, Q_TL, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TL2BR, LS_A_BR2TL, 150 }, //# Fast weak spin top left to bottom right +;176: {"TL2R Trans", BOTH_T1_TL__R, Q_TL, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_R_L2R, LS_A_R2L, 150 }, //# Fast arc top left to right (use: BOTH_T1__R_TL) +;177: {"TL2TR Trans", BOTH_T1_TL_TR, Q_TL, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_TR2BL, 150 }, //# Fast arc top left to top right (use: BOTH_T1_TR_TL) +;178: {"TL2T Trans", BOTH_T1_TL_T_, Q_TL, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_T2B, 150 }, //# Fast arc top left to top (use: BOTH_T1_T__TL) +;179: {"TL2L Trans", BOTH_T1_TL__L, Q_TL, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_R_R2L, LS_A_L2R, 150 }, //# Fast arc top left to left (use: BOTH_T1__L_TL) +;180: {"TL2BL Trans", BOTH_T1_TL_BL, Q_TL, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TR2BL, LS_A_BL2TR, 150 }, //# Fast arc top left to bottom left +;181: {"L2BR Trans", BOTH_T1__L_BR, Q_L, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TL2BR, LS_A_BR2TL, 150 }, //# Fast weak spin left to bottom right +;182: {"L2R Trans", BOTH_T1__L__R, Q_L, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_R_L2R, LS_A_R2L, 150 }, //# Fast weak spin left to right +;183: {"L2TR Trans", BOTH_T1__L_TR, Q_L, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_TR2BL, 150 }, //# Fast arc left to top right (use: BOTH_T1_TR__L) +;184: {"L2T Trans", BOTH_T1__L_T_, Q_L, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_T2B, 150 }, //# Fast arc left to top (use: BOTH_T1_T___L) +;185: {"L2TL Trans", BOTH_T1__L_TL, Q_L, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BR2TL, LS_A_TL2BR, 150 }, //# Fast arc left to top left +;186: {"L2BL Trans", BOTH_T1__L_BL, Q_L, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TR2BL, LS_A_BL2TR, 150 }, //# Fast arc left to bottom left (use: BOTH_T1_BL__L) +;187: {"BL2BR Trans", BOTH_T1_BL_BR, Q_BL, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TL2BR, LS_A_BR2TL, 150 }, //# Fast weak spin bottom left to bottom right +;188: {"BL2R Trans", BOTH_T1_BL__R, Q_BL, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_R_L2R, LS_A_R2L, 150 }, //# Fast weak spin bottom left to right +;189: {"BL2TR Trans", BOTH_T1_BL_TR, Q_BL, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_TR2BL, 150 }, //# Fast weak spin bottom left to top right +;190: {"BL2T Trans", BOTH_T1_BL_T_, Q_BL, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_A_T2B, 150 }, //# Fast arc bottom left to top (use: BOTH_T1_T__BL) +;191: {"BL2TL Trans", BOTH_T1_BL_TL, Q_BL, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BR2TL, LS_A_TL2BR, 150 }, //# Fast arc bottom left to top left (use: BOTH_T1_TL_BL) +;192: {"BL2L Trans", BOTH_T1_BL__L, Q_BL, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_R_R2L, LS_A_L2R, 150 }, //# Fast arc bottom left to left +;193: +;194: //Bounces +;195: {"Bounce BR", BOTH_B1_BR___, Q_BR, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TL2BR, LS_T1_BR_TR, 150 }, +;196: {"Bounce R", BOTH_B1__R___, Q_R, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_R_L2R, LS_T1__R__L, 150 }, +;197: {"Bounce TR", BOTH_B1_TR___, Q_TR, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_T1_TR_TL, 150 }, +;198: {"Bounce T", BOTH_B1_T____, Q_T, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_T1_T__BL, 150 }, +;199: {"Bounce TL", BOTH_B1_TL___, Q_TL, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BR2TL, LS_T1_TL_TR, 150 }, +;200: {"Bounce L", BOTH_B1__L___, Q_L, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_R_R2L, LS_T1__L__R, 150 }, +;201: {"Bounce BL", BOTH_B1_BL___, Q_BL, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TR2BL, LS_T1_BL_TR, 150 }, +;202: +;203: //Deflected attacks (like bounces, but slide off enemy saber, not straight back) +;204: {"Deflect BR", BOTH_D1_BR___, Q_BR, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TL2BR, LS_T1_BR_TR, 150 }, +;205: {"Deflect R", BOTH_D1__R___, Q_R, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_R_L2R, LS_T1__R__L, 150 }, +;206: {"Deflect TR", BOTH_D1_TR___, Q_TR, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_T1_TR_TL, 150 }, +;207: {"Deflect T", BOTH_B1_T____, Q_T, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_T1_T__BL, 150 }, +;208: {"Deflect TL", BOTH_D1_TL___, Q_TL, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BR2TL, LS_T1_TL_TR, 150 }, +;209: {"Deflect L", BOTH_D1__L___, Q_L, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_R_R2L, LS_T1__L__R, 150 }, +;210: {"Deflect BL", BOTH_D1_BL___, Q_BL, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_R_TR2BL, LS_T1_BL_TR, 150 }, +;211: {"Deflect B", BOTH_D1_B____, Q_B, Q_B, AFLAG_ACTIVE, 100, BLK_NO, LS_R_BL2TR, LS_T1_T__BL, 150 }, +;212: +;213: //Reflected attacks +;214: {"Reflected BR",BOTH_V1_BR_S1, Q_BR, Q_BR, AFLAG_ACTIVE, 100, BLK_NO, LS_READY, LS_READY, 150 },// LS_V1_BR +;215: {"Reflected R", BOTH_V1__R_S1, Q_R, Q_R, AFLAG_ACTIVE, 100, BLK_NO, LS_READY, LS_READY, 150 },// LS_V1__R +;216: {"Reflected TR",BOTH_V1_TR_S1, Q_TR, Q_TR, AFLAG_ACTIVE, 100, BLK_NO, LS_READY, LS_READY, 150 },// LS_V1_TR +;217: {"Reflected T", BOTH_V1_T__S1, Q_T, Q_T, AFLAG_ACTIVE, 100, BLK_NO, LS_READY, LS_READY, 150 },// LS_V1_T_ +;218: {"Reflected TL",BOTH_V1_TL_S1, Q_TL, Q_TL, AFLAG_ACTIVE, 100, BLK_NO, LS_READY, LS_READY, 150 },// LS_V1_TL +;219: {"Reflected L", BOTH_V1__L_S1, Q_L, Q_L, AFLAG_ACTIVE, 100, BLK_NO, LS_READY, LS_READY, 150 },// LS_V1__L +;220: {"Reflected BL",BOTH_V1_BL_S1, Q_BL, Q_BL, AFLAG_ACTIVE, 100, BLK_NO, LS_READY, LS_READY, 150 },// LS_V1_BL +;221: {"Reflected B", BOTH_V1_B__S1, Q_B, Q_B, AFLAG_ACTIVE, 100, BLK_NO, LS_READY, LS_READY, 150 },// LS_V1_B_ +;222: +;223: // Broken parries +;224: {"BParry Top", BOTH_H1_S1_T_, Q_T, Q_B, AFLAG_ACTIVE, 50, BLK_NO, LS_READY, LS_READY, 150 }, // LS_PARRY_UP, +;225: {"BParry UR", BOTH_H1_S1_TR, Q_TR, Q_BL, AFLAG_ACTIVE, 50, BLK_NO, LS_READY, LS_READY, 150 }, // LS_PARRY_UR, +;226: {"BParry UL", BOTH_H1_S1_TL, Q_TL, Q_BR, AFLAG_ACTIVE, 50, BLK_NO, LS_READY, LS_READY, 150 }, // LS_PARRY_UL, +;227: {"BParry LR", BOTH_H1_S1_BL, Q_BL, Q_TR, AFLAG_ACTIVE, 50, BLK_NO, LS_READY, LS_READY, 150 }, // LS_PARRY_LR, +;228: {"BParry Bot", BOTH_H1_S1_B_, Q_B, Q_T, AFLAG_ACTIVE, 50, BLK_NO, LS_READY, LS_READY, 150 }, // LS_PARRY_LL +;229: {"BParry LL", BOTH_H1_S1_BR, Q_BR, Q_TL, AFLAG_ACTIVE, 50, BLK_NO, LS_READY, LS_READY, 150 }, // LS_PARRY_LL +;230: +;231: // Knockaways +;232: {"Knock Top", BOTH_K1_S1_T_, Q_R, Q_T, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BL2TR, LS_T1_T__BR, 150 }, // LS_PARRY_UP, +;233: {"Knock UR", BOTH_K1_S1_TR, Q_R, Q_TR, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BL2TR, LS_T1_TR__R, 150 }, // LS_PARRY_UR, +;234: {"Knock UL", BOTH_K1_S1_TL, Q_R, Q_TL, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BR2TL, LS_T1_TL__L, 150 }, // LS_PARRY_UL, +;235: {"Knock LR", BOTH_K1_S1_BL, Q_R, Q_BL, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_TL2BR, LS_T1_BL_TL, 150 }, // LS_PARRY_LR, +;236: {"Knock LL", BOTH_K1_S1_BR, Q_R, Q_BR, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_TR2BL, LS_T1_BR_TR, 150 }, // LS_PARRY_LL +;237: +;238: // Parry +;239: {"Parry Top", BOTH_P1_S1_T_, Q_R, Q_T, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BL2TR, LS_A_T2B, 150 }, // LS_PARRY_UP, +;240: {"Parry UR", BOTH_P1_S1_TR, Q_R, Q_TL, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BL2TR, LS_A_TR2BL, 150 }, // LS_PARRY_UR, +;241: {"Parry UL", BOTH_P1_S1_TL, Q_R, Q_TR, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BR2TL, LS_A_TL2BR, 150 }, // LS_PARRY_UL, +;242: {"Parry LR", BOTH_P1_S1_BL, Q_R, Q_BR, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_TL2BR, LS_A_BR2TL, 150 }, // LS_PARRY_LR, +;243: {"Parry LL", BOTH_P1_S1_BR, Q_R, Q_BL, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_TR2BL, LS_A_BL2TR, 150 }, // LS_PARRY_LL +;244: +;245: // Reflecting a missile +;246: {"Reflect Top", BOTH_P1_S1_T_, Q_R, Q_T, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BL2TR, LS_A_T2B, 300 }, // LS_PARRY_UP, +;247: {"Reflect UR", BOTH_P1_S1_TL, Q_R, Q_TR, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BR2TL, LS_A_TL2BR, 300 }, // LS_PARRY_UR, +;248: {"Reflect UL", BOTH_P1_S1_TR, Q_R, Q_TL, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_BL2TR, LS_A_TR2BL, 300 }, // LS_PARRY_UL, +;249: {"Reflect LR", BOTH_P1_S1_BR, Q_R, Q_BL, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_TR2BL, LS_A_BL2TR, 300 }, // LS_PARRY_LR +;250: {"Reflect LL", BOTH_P1_S1_BL, Q_R, Q_BR, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_TL2BR, LS_A_BR2TL, 300 }, // LS_PARRY_LL, +;251:}; +;252: +;253:int transitionMove[Q_NUM_QUADS][Q_NUM_QUADS] = +;254:{ +;255: LS_NONE, //Can't transition to same pos! +;256: LS_T1_BR__R,//40 +;257: LS_T1_BR_TR, +;258: LS_T1_BR_T_, +;259: LS_T1_BR_TL, +;260: LS_T1_BR__L, +;261: LS_T1_BR_BL, +;262: LS_NONE, //No transitions to bottom, and no anims start there, so shouldn't need any +;263: LS_T1__R_BR,//46 +;264: LS_NONE, //Can't transition to same pos! +;265: LS_T1__R_TR, +;266: LS_T1__R_T_, +;267: LS_T1__R_TL, +;268: LS_T1__R__L, +;269: LS_T1__R_BL, +;270: LS_NONE, //No transitions to bottom, and no anims start there, so shouldn't need any +;271: LS_T1_TR_BR,//52 +;272: LS_T1_TR__R, +;273: LS_NONE, //Can't transition to same pos! +;274: LS_T1_TR_T_, +;275: LS_T1_TR_TL, +;276: LS_T1_TR__L, +;277: LS_T1_TR_BL, +;278: LS_NONE, //No transitions to bottom, and no anims start there, so shouldn't need any +;279: LS_T1_T__BR,//58 +;280: LS_T1_T___R, +;281: LS_T1_T__TR, +;282: LS_NONE, //Can't transition to same pos! +;283: LS_T1_T__TL, +;284: LS_T1_T___L, +;285: LS_T1_T__BL, +;286: LS_NONE, //No transitions to bottom, and no anims start there, so shouldn't need any +;287: LS_T1_TL_BR,//64 +;288: LS_T1_TL__R, +;289: LS_T1_TL_TR, +;290: LS_T1_TL_T_, +;291: LS_NONE, //Can't transition to same pos! +;292: LS_T1_TL__L, +;293: LS_T1_TL_BL, +;294: LS_NONE, //No transitions to bottom, and no anims start there, so shouldn't need any +;295: LS_T1__L_BR,//70 +;296: LS_T1__L__R, +;297: LS_T1__L_TR, +;298: LS_T1__L_T_, +;299: LS_T1__L_TL, +;300: LS_NONE, //Can't transition to same pos! +;301: LS_T1__L_BL, +;302: LS_NONE, //No transitions to bottom, and no anims start there, so shouldn't need any +;303: LS_T1_BL_BR,//76 +;304: LS_T1_BL__R, +;305: LS_T1_BL_TR, +;306: LS_T1_BL_T_, +;307: LS_T1_BL_TL, +;308: LS_T1_BL__L, +;309: LS_NONE, //Can't transition to same pos! +;310: LS_NONE, //No transitions to bottom, and no anims start there, so shouldn't need any +;311: LS_T1_BL_BR,//NOTE: there are no transitions from bottom, so re-use the bottom right transitions +;312: LS_T1_BR__R, +;313: LS_T1_BR_TR, +;314: LS_T1_BR_T_, +;315: LS_T1_BR_TL, +;316: LS_T1_BR__L, +;317: LS_T1_BR_BL, +;318: LS_NONE //No transitions to bottom, and no anims start there, so shouldn't need any +;319:}; +;320: +;321:saberMoveName_t PM_AttackMoveForQuad( int quad ) +;322:{ +line 323 +;323: switch ( quad ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +LTI4 $214 +ADDRLP4 0 +INDIRI4 +CNSTI4 7 +GTI4 $214 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $223 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $223 +address $216 +address $217 +address $218 +address $219 +address $220 +address $221 +address $222 +address $216 +code +line 324 +;324: { +LABELV $216 +line 327 +;325: case Q_B: +;326: case Q_BR: +;327: return LS_A_BR2TL; +CNSTI4 7 +RETI4 +ADDRGP4 $213 +JUMPV +line 328 +;328: break; +LABELV $217 +line 330 +;329: case Q_R: +;330: return LS_A_R2L; +CNSTI4 8 +RETI4 +ADDRGP4 $213 +JUMPV +line 331 +;331: break; +LABELV $218 +line 333 +;332: case Q_TR: +;333: return LS_A_TR2BL; +CNSTI4 9 +RETI4 +ADDRGP4 $213 +JUMPV +line 334 +;334: break; +LABELV $219 +line 336 +;335: case Q_T: +;336: return LS_A_T2B; +CNSTI4 10 +RETI4 +ADDRGP4 $213 +JUMPV +line 337 +;337: break; +LABELV $220 +line 339 +;338: case Q_TL: +;339: return LS_A_TL2BR; +CNSTI4 4 +RETI4 +ADDRGP4 $213 +JUMPV +line 340 +;340: break; +LABELV $221 +line 342 +;341: case Q_L: +;342: return LS_A_L2R; +CNSTI4 5 +RETI4 +ADDRGP4 $213 +JUMPV +line 343 +;343: break; +LABELV $222 +line 345 +;344: case Q_BL: +;345: return LS_A_BL2TR; +CNSTI4 6 +RETI4 +ADDRGP4 $213 +JUMPV +line 346 +;346: break; +LABELV $214 +line 348 +;347: } +;348: return LS_NONE; +CNSTI4 0 +RETI4 +LABELV $213 +endproc PM_AttackMoveForQuad 4 0 +export PM_SaberAnimTransitionAnim +proc PM_SaberAnimTransitionAnim 32 0 +line 352 +;349:} +;350: +;351:int PM_SaberAnimTransitionAnim( int curmove, int newmove ) +;352:{ +line 354 +;353: //FIXME: take FP_SABERATTACK into account here somehow? +;354: int retmove = newmove; +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 355 +;355: if ( curmove == LS_READY ) +ADDRFP4 0 +INDIRI4 +CNSTI4 1 +NEI4 $225 +line 356 +;356: {//just standing there +line 357 +;357: switch ( newmove ) +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 4 +LTI4 $226 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +GTI4 $226 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $230-16 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $230 +address $229 +address $229 +address $229 +address $229 +address $229 +address $229 +address $229 +code +line 358 +;358: { +LABELV $229 +line 367 +;359: case LS_A_TL2BR: +;360: case LS_A_L2R: +;361: case LS_A_BL2TR: +;362: case LS_A_BR2TL: +;363: case LS_A_R2L: +;364: case LS_A_TR2BL: +;365: case LS_A_T2B: +;366: //transition is the start +;367: retmove = LS_S_TL2BR + (newmove-LS_A_TL2BR); +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +CNSTI4 4 +SUBI4 +CNSTI4 18 +ADDI4 +ASGNI4 +line 368 +;368: break; +line 370 +;369: } +;370: } +ADDRGP4 $226 +JUMPV +LABELV $225 +line 372 +;371: else +;372: { +line 373 +;373: switch ( newmove ) +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +LTI4 $232 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +GTI4 $232 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $258-4 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $258 +address $234 +address $232 +address $232 +address $240 +address $240 +address $240 +address $240 +address $240 +address $240 +address $240 +code +line 374 +;374: { +LABELV $234 +line 377 +;375: //transitioning to ready pose +;376: case LS_READY: +;377: switch ( curmove ) +ADDRLP4 8 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 4 +LTI4 $233 +ADDRLP4 8 +INDIRI4 +CNSTI4 10 +GTI4 $233 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $238-16 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $238 +address $237 +address $237 +address $237 +address $237 +address $237 +address $237 +address $237 +code +line 378 +;378: { +LABELV $237 +line 388 +;379: //transitioning from an attack +;380: case LS_A_TL2BR: +;381: case LS_A_L2R: +;382: case LS_A_BL2TR: +;383: case LS_A_BR2TL: +;384: case LS_A_R2L: +;385: case LS_A_TR2BL: +;386: case LS_A_T2B: +;387: //transition is the return +;388: retmove = LS_R_TL2BR + (newmove-LS_A_TL2BR); +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +CNSTI4 4 +SUBI4 +CNSTI4 25 +ADDI4 +ASGNI4 +line 389 +;389: break; +line 391 +;390: } +;391: break; +ADDRGP4 $233 +JUMPV +LABELV $240 +line 400 +;392: //transitioning to an attack +;393: case LS_A_TL2BR: +;394: case LS_A_L2R: +;395: case LS_A_BL2TR: +;396: case LS_A_BR2TL: +;397: case LS_A_R2L: +;398: case LS_A_TR2BL: +;399: case LS_A_T2B: +;400: /*if ( newmove == curmove ) +ADDRLP4 12 +CNSTI4 40 +ASGNI4 +ADDRLP4 12 +INDIRI4 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+12 +ADDP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +NEI4 $241 +line 405 +;401: {//FIXME: need a spin or something or go to next level, but for now, just play the return +;402: retmove = LS_R_TL2BR + (newmove-LS_A_TL2BR); +;403: } +;404: else */if ( saberMoveData[curmove].endQuad == saberMoveData[newmove].startQuad ) +;405: {//new move starts from same quadrant +line 406 +;406: retmove = newmove; +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 407 +;407: } +ADDRGP4 $233 +JUMPV +LABELV $241 +line 409 +;408: else +;409: { +line 410 +;410: switch ( curmove ) +ADDRLP4 16 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 4 +LTI4 $233 +ADDRLP4 16 +INDIRI4 +CNSTI4 31 +GTI4 $253 +ADDRLP4 16 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $254-16 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $254 +address $247 +address $247 +address $247 +address $247 +address $247 +address $247 +address $247 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $233 +address $250 +address $250 +address $250 +address $250 +address $250 +address $250 +address $250 +code +LABELV $253 +ADDRLP4 20 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 108 +LTI4 $233 +ADDRLP4 20 +INDIRI4 +CNSTI4 117 +GTI4 $233 +ADDRLP4 20 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $256-432 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $256 +address $250 +address $250 +address $250 +address $250 +address $250 +address $250 +address $250 +address $250 +address $250 +address $250 +code +line 411 +;411: { +LABELV $247 +line 420 +;412: //transitioning from an attack +;413: case LS_A_TL2BR: +;414: case LS_A_L2R: +;415: case LS_A_BL2TR: +;416: case LS_A_BR2TL: +;417: case LS_A_R2L: +;418: case LS_A_TR2BL: +;419: case LS_A_T2B: +;420: retmove = transitionMove[saberMoveData[curmove].endQuad][saberMoveData[newmove].startQuad]; +ADDRLP4 24 +CNSTI4 40 +ASGNI4 +ADDRLP4 0 +ADDRLP4 24 +INDIRI4 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 24 +INDIRI4 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+12 +ADDP4 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 transitionMove +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 421 +;421: break; +ADDRGP4 $233 +JUMPV +LABELV $250 +line 459 +;422: //transitioning from a return +;423: case LS_R_TL2BR: +;424: case LS_R_L2R: +;425: case LS_R_BL2TR: +;426: case LS_R_BR2TL: +;427: case LS_R_R2L: +;428: case LS_R_TR2BL: +;429: case LS_R_T2B: +;430: //transitioning from a bounce +;431: /* +;432: case LS_BOUNCE_UL2LL: +;433: case LS_BOUNCE_LL2UL: +;434: case LS_BOUNCE_L2LL: +;435: case LS_BOUNCE_L2UL: +;436: case LS_BOUNCE_UR2LR: +;437: case LS_BOUNCE_LR2UR: +;438: case LS_BOUNCE_R2LR: +;439: case LS_BOUNCE_R2UR: +;440: case LS_BOUNCE_TOP: +;441: case LS_OVER_UR2UL: +;442: case LS_OVER_UL2UR: +;443: case LS_BOUNCE_UR: +;444: case LS_BOUNCE_UL: +;445: case LS_BOUNCE_LR: +;446: case LS_BOUNCE_LL: +;447: */ +;448: //transitioning from a parry/deflection +;449: case LS_PARRY_UP: +;450: case LS_REFLECT_UP: +;451: case LS_PARRY_UR: +;452: case LS_REFLECT_UR: +;453: case LS_PARRY_UL: +;454: case LS_REFLECT_UL: +;455: case LS_PARRY_LR: +;456: case LS_REFLECT_LR: +;457: case LS_PARRY_LL: +;458: case LS_REFLECT_LL: +;459: retmove = transitionMove[saberMoveData[curmove].endQuad][saberMoveData[newmove].startQuad]; +ADDRLP4 28 +CNSTI4 40 +ASGNI4 +ADDRLP4 0 +ADDRLP4 28 +INDIRI4 +ADDRFP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 28 +INDIRI4 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+12 +ADDP4 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 transitionMove +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 460 +;460: break; +line 463 +;461: //NB: transitioning from transitions is fine +;462: } +;463: } +line 464 +;464: break; +LABELV $232 +LABELV $233 +line 467 +;465: //transitioning to any other anim is not supported +;466: } +;467: } +LABELV $226 +line 469 +;468: +;469: if ( retmove == LS_NONE ) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $260 +line 470 +;470: { +line 471 +;471: return newmove; +ADDRFP4 4 +INDIRI4 +RETI4 +ADDRGP4 $224 +JUMPV +LABELV $260 +line 474 +;472: } +;473: +;474: return retmove; +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $224 +endproc PM_SaberAnimTransitionAnim 32 0 +export PM_SaberMoveQuadrantForMovement +proc PM_SaberMoveQuadrantForMovement 0 0 +line 479 +;475:} +;476: +;477: +;478:int PM_SaberMoveQuadrantForMovement( usercmd_t *ucmd ) +;479:{ +line 480 +;480: if ( ucmd->rightmove > 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 25 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $263 +line 481 +;481: {//moving right +line 482 +;482: if ( ucmd->forwardmove > 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $265 +line 483 +;483: {//forward right = TL2BR slash +line 484 +;484: return Q_TL; +CNSTI4 4 +RETI4 +ADDRGP4 $262 +JUMPV +LABELV $265 +line 486 +;485: } +;486: else if ( ucmd->forwardmove < 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +GEI4 $267 +line 487 +;487: {//backward right = BL2TR uppercut +line 488 +;488: return Q_BL; +CNSTI4 6 +RETI4 +ADDRGP4 $262 +JUMPV +LABELV $267 +line 491 +;489: } +;490: else +;491: {//just right is a left slice +line 492 +;492: return Q_L; +CNSTI4 5 +RETI4 +ADDRGP4 $262 +JUMPV +LABELV $263 +line 495 +;493: } +;494: } +;495: else if ( ucmd->rightmove < 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 25 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +GEI4 $269 +line 496 +;496: {//moving left +line 497 +;497: if ( ucmd->forwardmove > 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $271 +line 498 +;498: {//forward left = TR2BL slash +line 499 +;499: return Q_TR; +CNSTI4 2 +RETI4 +ADDRGP4 $262 +JUMPV +LABELV $271 +line 501 +;500: } +;501: else if ( ucmd->forwardmove < 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +GEI4 $273 +line 502 +;502: {//backward left = BR2TL uppercut +line 503 +;503: return Q_BR; +CNSTI4 0 +RETI4 +ADDRGP4 $262 +JUMPV +LABELV $273 +line 506 +;504: } +;505: else +;506: {//just left is a right slice +line 507 +;507: return Q_R; +CNSTI4 1 +RETI4 +ADDRGP4 $262 +JUMPV +LABELV $269 +line 511 +;508: } +;509: } +;510: else +;511: {//not moving left or right +line 512 +;512: if ( ucmd->forwardmove > 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $275 +line 513 +;513: {//forward= T2B slash +line 514 +;514: return Q_T; +CNSTI4 3 +RETI4 +ADDRGP4 $262 +JUMPV +LABELV $275 +line 516 +;515: } +;516: else if ( ucmd->forwardmove < 0 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +GEI4 $277 +line 517 +;517: {//backward= T2B slash //or B2T uppercut? +line 518 +;518: return Q_T; +CNSTI4 3 +RETI4 +ADDRGP4 $262 +JUMPV +LABELV $277 +line 521 +;519: } +;520: else //if ( curmove == LS_READY )//??? +;521: {//Not moving at all +line 522 +;522: return Q_R; +CNSTI4 1 +RETI4 +LABELV $262 +endproc PM_SaberMoveQuadrantForMovement 0 0 +export PM_SaberInBounce +proc PM_SaberInBounce 8 0 +line 530 +;523: } +;524: } +;525: //return Q_R;//???? +;526:} +;527: +;528://=================================================================== +;529:qboolean PM_SaberInBounce( int move ) +;530:{ +line 531 +;531: if ( move >= LS_B1_BR && move <= LS_B1_BL ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 74 +LTI4 $280 +ADDRLP4 0 +INDIRI4 +CNSTI4 80 +GTI4 $280 +line 532 +;532: { +line 533 +;533: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $279 +JUMPV +LABELV $280 +line 535 +;534: } +;535: if ( move >= LS_D1_BR && move <= LS_D1_BL ) +ADDRLP4 4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 81 +LTI4 $282 +ADDRLP4 4 +INDIRI4 +CNSTI4 87 +GTI4 $282 +line 536 +;536: { +line 537 +;537: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $279 +JUMPV +LABELV $282 +line 539 +;538: } +;539: return qfalse; +CNSTI4 0 +RETI4 +LABELV $279 +endproc PM_SaberInBounce 8 0 +export PM_SaberInTransition +proc PM_SaberInTransition 4 0 +line 543 +;540:} +;541: +;542:qboolean PM_SaberInTransition( int move ) +;543:{ +line 544 +;544: if ( move >= LS_T1_BR__R && move <= LS_T1_BL__L ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 32 +LTI4 $285 +ADDRLP4 0 +INDIRI4 +CNSTI4 73 +GTI4 $285 +line 545 +;545: { +line 546 +;546: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $284 +JUMPV +LABELV $285 +line 548 +;547: } +;548: return qfalse; +CNSTI4 0 +RETI4 +LABELV $284 +endproc PM_SaberInTransition 4 0 +export PM_SaberKataDone +proc PM_SaberKataDone 20 8 +line 552 +;549:} +;550: +;551:qboolean PM_SaberKataDone( void ) +;552:{ +line 553 +;553: if ( (pm->ps->fd.saberAnimLevel >= FORCE_LEVEL_3 && pm->ps->saberAttackChainCount > PM_irand_timesync( 0, 1 )) || +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1216 +ADDP4 +INDIRI4 +CNSTI4 3 +LTI4 $291 +CNSTI4 0 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRLP4 4 +ADDRGP4 PM_irand_timesync +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1296 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +GTI4 $290 +LABELV $291 +ADDRLP4 8 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTI4 2 +ASGNI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 1216 +ADDP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +NEI4 $288 +ADDRLP4 12 +INDIRI4 +ARGI4 +CNSTI4 5 +ARGI4 +ADDRLP4 16 +ADDRGP4 PM_irand_timesync +CALLI4 +ASGNI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 1296 +ADDP4 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LEI4 $288 +LABELV $290 +line 555 +;554: ( pm->ps->fd.saberAnimLevel == FORCE_LEVEL_2 && pm->ps->saberAttackChainCount > PM_irand_timesync( 2, 5 ) ) ) +;555: { +line 556 +;556: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $287 +JUMPV +LABELV $288 +line 558 +;557: } +;558: return qfalse; +CNSTI4 0 +RETI4 +LABELV $287 +endproc PM_SaberKataDone 20 8 +export PM_SetAnimFrame +proc PM_SetAnimFrame 0 0 +line 562 +;559:} +;560: +;561:void PM_SetAnimFrame( playerState_t *gent, int frame, qboolean torso, qboolean legs ) +;562:{ +line 563 +;563: gent->saberLockFrame = frame; +ADDRFP4 0 +INDIRP4 +CNSTI4 532 +ADDP4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 564 +;564:} +LABELV $292 +endproc PM_SetAnimFrame 0 0 +export PM_SaberLockBreak +proc PM_SaberLockBreak 88 16 +line 567 +;565: +;566:void PM_SaberLockBreak( playerState_t *genemy, qboolean victory ) +;567:{ +line 568 +;568: int winAnim = BOTH_STAND1, loseAnim = BOTH_STAND1; +ADDRLP4 0 +CNSTI4 550 +ASGNI4 +ADDRLP4 8 +CNSTI4 550 +ASGNI4 +line 569 +;569: qboolean punishLoser = qfalse; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 571 +;570: +;571: switch ( (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) ) +ADDRLP4 12 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 20 +CNSTI4 538 +ASGNI4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 20 +INDIRI4 +EQI4 $297 +ADDRLP4 12 +INDIRI4 +CNSTI4 541 +EQI4 $300 +ADDRLP4 12 +INDIRI4 +ADDRLP4 20 +INDIRI4 +LTI4 $294 +LABELV $309 +ADDRLP4 12 +INDIRI4 +CNSTI4 548 +EQI4 $303 +ADDRLP4 12 +INDIRI4 +CNSTI4 549 +EQI4 $306 +ADDRGP4 $294 +JUMPV +line 572 +;572: { +LABELV $297 +line 574 +;573: case BOTH_BF2LOCK: +;574: pm->ps->saberMove = LS_A_T2B; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +CNSTI4 10 +ASGNI4 +line 575 +;575: winAnim = BOTH_A3_T__B_; +ADDRLP4 0 +CNSTI4 280 +ASGNI4 +line 576 +;576: if ( !victory ) +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $298 +line 577 +;577: {//no-one won +line 578 +;578: genemy->saberMove = LS_A_T2B; +ADDRFP4 0 +INDIRP4 +CNSTI4 512 +ADDP4 +CNSTI4 10 +ASGNI4 +line 579 +;579: loseAnim = winAnim; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 580 +;580: } +ADDRGP4 $295 +JUMPV +LABELV $298 +line 582 +;581: else +;582: { +line 584 +;583: //loseAnim = BOTH_KNOCKDOWN4; +;584: punishLoser = qtrue; +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +line 585 +;585: } +line 586 +;586: break; +ADDRGP4 $295 +JUMPV +LABELV $300 +line 588 +;587: case BOTH_BF1LOCK: +;588: pm->ps->saberMove = LS_K1_T_; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +CNSTI4 103 +ASGNI4 +line 589 +;589: winAnim = BOTH_K1_S1_T_; +ADDRLP4 0 +CNSTI4 516 +ASGNI4 +line 590 +;590: if ( !victory ) +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $301 +line 591 +;591: {//no-one won +line 592 +;592: genemy->saberMove = LS_K1_T_; +ADDRFP4 0 +INDIRP4 +CNSTI4 512 +ADDP4 +CNSTI4 103 +ASGNI4 +line 593 +;593: loseAnim = winAnim; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 594 +;594: } +ADDRGP4 $295 +JUMPV +LABELV $301 +line 596 +;595: else +;596: { +line 598 +;597: //loseAnim = BOTH_BF1BREAK; +;598: punishLoser = qtrue; +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +line 599 +;599: } +line 600 +;600: break; +ADDRGP4 $295 +JUMPV +LABELV $303 +line 602 +;601: case BOTH_CWCIRCLELOCK: +;602: winAnim = BOTH_CWCIRCLEBREAK; +ADDRLP4 0 +CNSTI4 546 +ASGNI4 +line 603 +;603: if ( !victory ) +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $304 +line 604 +;604: {//no-one won +line 605 +;605: loseAnim = winAnim; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 606 +;606: } +ADDRGP4 $295 +JUMPV +LABELV $304 +line 608 +;607: else +;608: { +line 609 +;609: genemy->saberMove = /*genemy->saberBounceMove =*/ LS_H1_BL; +ADDRFP4 0 +INDIRP4 +CNSTI4 512 +ADDP4 +CNSTI4 102 +ASGNI4 +line 610 +;610: genemy->saberBlocked = BLOCKED_PARRY_BROKEN; +ADDRFP4 0 +INDIRP4 +CNSTI4 520 +ADDP4 +CNSTI4 1 +ASGNI4 +line 612 +;611: //loseAnim = BOTH_H1_S1_BR; +;612: punishLoser = qtrue; +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +line 613 +;613: } +line 614 +;614: break; +ADDRGP4 $295 +JUMPV +LABELV $306 +line 616 +;615: case BOTH_CCWCIRCLELOCK: +;616: winAnim = BOTH_CCWCIRCLEBREAK; +ADDRLP4 0 +CNSTI4 547 +ASGNI4 +line 617 +;617: if ( !victory ) +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $307 +line 618 +;618: {//no-one won +line 619 +;619: loseAnim = winAnim; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 620 +;620: } +ADDRGP4 $295 +JUMPV +LABELV $307 +line 622 +;621: else +;622: { +line 623 +;623: genemy->saberMove = /*genemy->saberBounceMove =*/ LS_H1_BR; +ADDRFP4 0 +INDIRP4 +CNSTI4 512 +ADDP4 +CNSTI4 100 +ASGNI4 +line 624 +;624: genemy->saberBlocked = BLOCKED_PARRY_BROKEN; +ADDRFP4 0 +INDIRP4 +CNSTI4 520 +ADDP4 +CNSTI4 1 +ASGNI4 +line 626 +;625: //loseAnim = BOTH_H1_S1_BL; +;626: punishLoser = qtrue; +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +line 627 +;627: } +line 628 +;628: break; +LABELV $294 +LABELV $295 +line 630 +;629: } +;630: PM_SetAnim( SETANIM_BOTH, winAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, -1 ); +ADDRLP4 28 +CNSTI4 3 +ASGNI4 +ADDRLP4 28 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 28 +INDIRI4 +ARGI4 +CNSTI4 -1 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 632 +;631: +;632: if (punishLoser) +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $310 +line 633 +;633: { +line 636 +;634: vec3_t oppDir; +;635: +;636: int strength = 8; +ADDRLP4 44 +CNSTI4 8 +ASGNI4 +line 638 +;637: +;638: VectorSubtract(genemy->origin, pm->ps->origin, oppDir); +ADDRLP4 48 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 52 +CNSTI4 20 +ASGNI4 +ADDRLP4 56 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 32 +ADDRLP4 48 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 56 +INDIRP4 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 60 +CNSTI4 24 +ASGNI4 +ADDRLP4 32+4 +ADDRLP4 48 +INDIRP4 +ADDRLP4 60 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 56 +INDIRP4 +INDIRP4 +ADDRLP4 60 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 64 +CNSTI4 28 +ASGNI4 +ADDRLP4 32+8 +ADDRFP4 0 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 639 +;639: VectorNormalize(oppDir); +ADDRLP4 32 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 641 +;640: +;641: genemy->forceHandExtend = HANDEXTEND_KNOCKDOWN; +ADDRFP4 0 +INDIRP4 +CNSTI4 1236 +ADDP4 +CNSTI4 8 +ASGNI4 +line 642 +;642: genemy->forceHandExtendTime = pm->cmd.serverTime + 1100; +ADDRFP4 0 +INDIRP4 +CNSTI4 1240 +ADDP4 +ADDRGP4 pm +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 1100 +ADDI4 +ASGNI4 +line 643 +;643: genemy->forceDodgeAnim = 0; //this toggles between 1 and 0, when it's 1 we should play the get up anim +ADDRFP4 0 +INDIRP4 +CNSTI4 1248 +ADDP4 +CNSTI4 0 +ASGNI4 +line 645 +;644: +;645: genemy->otherKiller = pm->ps->clientNum; +ADDRFP4 0 +INDIRP4 +CNSTI4 748 +ADDP4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 646 +;646: genemy->otherKillerTime = pm->cmd.serverTime + 5000; +ADDRFP4 0 +INDIRP4 +CNSTI4 752 +ADDP4 +ADDRGP4 pm +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 5000 +ADDI4 +ASGNI4 +line 647 +;647: genemy->otherKillerDebounceTime = pm->cmd.serverTime + 100; +ADDRFP4 0 +INDIRP4 +CNSTI4 756 +ADDP4 +ADDRGP4 pm +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 100 +ADDI4 +ASGNI4 +line 649 +;648: +;649: genemy->velocity[0] = oppDir[0]*(strength*40); +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 32 +INDIRF4 +CNSTI4 40 +ADDRLP4 44 +INDIRI4 +MULI4 +CVIF4 4 +MULF4 +ASGNF4 +line 650 +;650: genemy->velocity[1] = oppDir[1]*(strength*40); +ADDRFP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRLP4 32+4 +INDIRF4 +CNSTI4 40 +ADDRLP4 44 +INDIRI4 +MULI4 +CVIF4 4 +MULF4 +ASGNF4 +line 651 +;651: genemy->velocity[2] = 100; +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1120403456 +ASGNF4 +line 652 +;652: } +ADDRGP4 $311 +JUMPV +LABELV $310 +line 654 +;653: else +;654: { +line 657 +;655: vec3_t oppDir; +;656: +;657: int strength = 4; +ADDRLP4 44 +CNSTI4 4 +ASGNI4 +line 659 +;658: +;659: VectorSubtract(genemy->origin, pm->ps->origin, oppDir); +ADDRLP4 48 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 52 +CNSTI4 20 +ASGNI4 +ADDRLP4 56 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 32 +ADDRLP4 48 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 56 +INDIRP4 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 60 +CNSTI4 24 +ASGNI4 +ADDRLP4 32+4 +ADDRLP4 48 +INDIRP4 +ADDRLP4 60 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 56 +INDIRP4 +INDIRP4 +ADDRLP4 60 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 64 +CNSTI4 28 +ASGNI4 +ADDRLP4 32+8 +ADDRFP4 0 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 660 +;660: VectorNormalize(oppDir); +ADDRLP4 32 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 661 +;661: genemy->velocity[0] = oppDir[0]*(strength*40); +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 32 +INDIRF4 +CNSTI4 40 +ADDRLP4 44 +INDIRI4 +MULI4 +CVIF4 4 +MULF4 +ASGNF4 +line 662 +;662: genemy->velocity[1] = oppDir[1]*(strength*40); +ADDRFP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRLP4 32+4 +INDIRF4 +CNSTI4 40 +ADDRLP4 44 +INDIRI4 +MULI4 +CVIF4 4 +MULF4 +ASGNF4 +line 663 +;663: genemy->velocity[2] = 150; +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1125515264 +ASGNF4 +line 665 +;664: +;665: VectorSubtract(pm->ps->origin, genemy->origin, oppDir); +ADDRLP4 68 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 72 +CNSTI4 20 +ASGNI4 +ADDRLP4 76 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 32 +ADDRLP4 68 +INDIRP4 +INDIRP4 +ADDRLP4 72 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +ADDRLP4 72 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 80 +CNSTI4 24 +ASGNI4 +ADDRLP4 32+4 +ADDRLP4 68 +INDIRP4 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 84 +CNSTI4 28 +ASGNI4 +ADDRLP4 32+8 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 84 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 84 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 666 +;666: VectorNormalize(oppDir); +ADDRLP4 32 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 667 +;667: pm->ps->velocity[0] = oppDir[0]*(strength*40); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 32 +INDIRF4 +CNSTI4 40 +ADDRLP4 44 +INDIRI4 +MULI4 +CVIF4 4 +MULF4 +ASGNF4 +line 668 +;668: pm->ps->velocity[1] = oppDir[1]*(strength*40); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRLP4 32+4 +INDIRF4 +CNSTI4 40 +ADDRLP4 44 +INDIRI4 +MULI4 +CVIF4 4 +MULF4 +ASGNF4 +line 669 +;669: pm->ps->velocity[2] = 150; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1125515264 +ASGNF4 +line 671 +;670: +;671: genemy->forceHandExtend = HANDEXTEND_WEAPONREADY; +ADDRFP4 0 +INDIRP4 +CNSTI4 1236 +ADDP4 +CNSTI4 6 +ASGNI4 +line 672 +;672: } +LABELV $311 +line 674 +;673: +;674: pm->ps->weaponTime = 0;//pm->ps->torsoTimer; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +CNSTI4 0 +ASGNI4 +line 676 +;675: //The enemy unfortunately has no valid torso animation time at this point, so just use ours +;676: genemy->weaponTime = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 44 +ADDP4 +CNSTI4 0 +ASGNI4 +line 678 +;677: +;678: pm->ps->saberLockTime = genemy->saberLockTime = 0; +ADDRLP4 32 +CNSTI4 524 +ASGNI4 +ADDRLP4 36 +CNSTI4 0 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRI4 +ASGNI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRI4 +ASGNI4 +line 679 +;679: pm->ps->saberLockFrame = genemy->saberLockFrame = 0; +ADDRLP4 40 +CNSTI4 532 +ASGNI4 +ADDRLP4 44 +CNSTI4 0 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 40 +INDIRI4 +ADDP4 +ADDRLP4 44 +INDIRI4 +ASGNI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 40 +INDIRI4 +ADDP4 +ADDRLP4 44 +INDIRI4 +ASGNI4 +line 680 +;680: pm->ps->saberLockEnemy = genemy->saberLockEnemy = 0; +ADDRLP4 48 +CNSTI4 528 +ASGNI4 +ADDRLP4 52 +CNSTI4 0 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +ADDRLP4 52 +INDIRI4 +ASGNI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +ADDRLP4 52 +INDIRI4 +ASGNI4 +line 682 +;681: +;682: pm->ps->forceHandExtend = HANDEXTEND_WEAPONREADY; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1236 +ADDP4 +CNSTI4 6 +ASGNI4 +line 684 +;683: +;684: PM_AddEvent( EV_JUMP ); +CNSTI4 14 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 685 +;685: if ( !victory ) +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $321 +line 686 +;686: {//no-one won +line 687 +;687: BG_AddPredictableEventToPlayerstate(EV_JUMP, 0, genemy); +CNSTI4 14 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 BG_AddPredictableEventToPlayerstate +CALLV +pop +line 688 +;688: } +ADDRGP4 $322 +JUMPV +LABELV $321 +line 690 +;689: else +;690: { +line 691 +;691: if ( Q_irand( 0, 1 ) ) +CNSTI4 0 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRLP4 56 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 0 +EQI4 $323 +line 692 +;692: { +line 693 +;693: BG_AddPredictableEventToPlayerstate(EV_JUMP, PM_irand_timesync( 0, 75 ), genemy); +CNSTI4 0 +ARGI4 +CNSTI4 75 +ARGI4 +ADDRLP4 60 +ADDRGP4 PM_irand_timesync +CALLI4 +ASGNI4 +CNSTI4 14 +ARGI4 +ADDRLP4 60 +INDIRI4 +ARGI4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 BG_AddPredictableEventToPlayerstate +CALLV +pop +line 694 +;694: } +LABELV $323 +line 695 +;695: } +LABELV $322 +line 696 +;696:} +LABELV $293 +endproc PM_SaberLockBreak 88 16 +export PM_SaberLocked +proc PM_SaberLocked 84 16 +line 700 +;697: +;698:extern qboolean ValidAnimFileIndex ( int index ); +;699:void PM_SaberLocked( void ) +;700:{ +line 701 +;701: int remaining = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 708 +;702: /* +;703: if ( pm->ps->weaponTime ) +;704: {//can't attack yet +;705: return; +;706: } +;707: */ +;708: playerState_t *genemy = pm->bgClients[pm->ps->saberLockEnemy]; +ADDRLP4 8 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +INDIRP4 +CNSTI4 528 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 248 +ADDP4 +ADDP4 +INDIRP4 +ASGNP4 +line 709 +;709: if ( !genemy ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $326 +line 710 +;710: { +line 711 +;711: return; +ADDRGP4 $325 +JUMPV +LABELV $326 +line 713 +;712: } +;713: if ( ( (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF2LOCK || +ADDRLP4 12 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 538 +EQI4 $332 +ADDRLP4 12 +INDIRI4 +CNSTI4 541 +EQI4 $332 +ADDRLP4 12 +INDIRI4 +CNSTI4 548 +EQI4 $332 +ADDRLP4 12 +INDIRI4 +CNSTI4 549 +NEI4 $328 +LABELV $332 +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 538 +EQI4 $335 +ADDRLP4 16 +INDIRI4 +CNSTI4 541 +EQI4 $335 +ADDRLP4 16 +INDIRI4 +CNSTI4 548 +EQI4 $335 +ADDRLP4 16 +INDIRI4 +CNSTI4 549 +NEI4 $328 +LABELV $335 +line 722 +;714: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF1LOCK || +;715: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CWCIRCLELOCK || +;716: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CCWCIRCLELOCK ) +;717: && ( (genemy->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF2LOCK || +;718: (genemy->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF1LOCK || +;719: (genemy->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CWCIRCLELOCK || +;720: (genemy->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CCWCIRCLELOCK ) +;721: ) +;722: { +line 723 +;723: float dist = 0; +ADDRLP4 20 +CNSTF4 0 +ASGNF4 +line 725 +;724: +;725: pm->ps->torsoTimer = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +CNSTI4 0 +ASGNI4 +line 726 +;726: pm->ps->weaponTime = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +CNSTI4 0 +ASGNI4 +line 727 +;727: genemy->torsoTimer = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 96 +ADDP4 +CNSTI4 0 +ASGNI4 +line 728 +;728: genemy->weaponTime = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 44 +ADDP4 +CNSTI4 0 +ASGNI4 +line 730 +;729: +;730: dist = DistanceSquared(pm->ps->origin,genemy->origin); +ADDRLP4 24 +CNSTI4 20 +ASGNI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +ARGP4 +ADDRLP4 28 +ADDRGP4 DistanceSquared +CALLF4 +ASGNF4 +ADDRLP4 20 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 731 +;731: if ( dist < 64 || dist > 6400 )//( dist < 128 || dist > 2304 ) +ADDRLP4 32 +ADDRLP4 20 +INDIRF4 +ASGNF4 +ADDRLP4 32 +INDIRF4 +CNSTF4 1115684864 +LTF4 $338 +ADDRLP4 32 +INDIRF4 +CNSTF4 1170735104 +LEF4 $336 +LABELV $338 +line 732 +;732: {//between 8 and 80 from each other//was 16 and 48 +line 733 +;733: PM_SaberLockBreak( genemy, qfalse ); +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 PM_SaberLockBreak +CALLV +pop +line 734 +;734: return; +ADDRGP4 $325 +JUMPV +LABELV $336 +line 736 +;735: } +;736: if ( (pm->cmd.buttons & BUTTON_ATTACK) || pm->ps->saberLockAdvance ) +ADDRLP4 36 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 40 +CNSTI4 0 +ASGNI4 +ADDRLP4 36 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +ADDRLP4 40 +INDIRI4 +NEI4 $341 +ADDRLP4 36 +INDIRP4 +INDIRP4 +CNSTI4 540 +ADDP4 +INDIRI4 +ADDRLP4 40 +INDIRI4 +EQI4 $329 +LABELV $341 +line 737 +;737: {//holding attack +line 738 +;738: if (pm->ps->saberLockAdvance) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 540 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $325 +line 739 +;739: {//tapping +line 743 +;740: animation_t *anim; +;741: float currentFrame; +;742: int curFrame; +;743: int strength = 1; +ADDRLP4 44 +CNSTI4 1 +ASGNI4 +line 745 +;744: +;745: pm->ps->saberLockAdvance = qfalse; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 540 +ADDP4 +CNSTI4 0 +ASGNI4 +line 747 +;746: +;747: anim = &pm->animations[pm->ps->torsoAnim&~ANIM_TOGGLEBIT]; +ADDRLP4 60 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 48 +CNSTI4 28 +ADDRLP4 60 +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +MULI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRP4 +ADDP4 +ASGNP4 +line 749 +;748: +;749: currentFrame = pm->ps->saberLockFrame; +ADDRLP4 56 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 751 +;750: +;751: strength = pm->ps->fd.forcePowerLevel[FP_SABERATTACK]+1; +ADDRLP4 44 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 992 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 753 +;752: +;753: if ( (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CCWCIRCLELOCK || +ADDRLP4 64 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +CNSTI4 549 +EQI4 $346 +ADDRLP4 64 +INDIRI4 +CNSTI4 538 +NEI4 $344 +LABELV $346 +line 755 +;754: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF2LOCK ) +;755: { +line 756 +;756: curFrame = floor( currentFrame )-strength; +ADDRLP4 56 +INDIRF4 +ARGF4 +ADDRLP4 68 +ADDRGP4 floor +CALLF4 +ASGNF4 +ADDRLP4 52 +ADDRLP4 68 +INDIRF4 +ADDRLP4 44 +INDIRI4 +CVIF4 4 +SUBF4 +CVFI4 4 +ASGNI4 +line 758 +;757: //drop my frame one +;758: if ( curFrame <= anim->firstFrame ) +ADDRLP4 52 +INDIRI4 +ADDRLP4 48 +INDIRP4 +INDIRI4 +GTI4 $347 +line 759 +;759: {//I won! Break out +line 760 +;760: PM_SaberLockBreak( genemy, qtrue ); +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 PM_SaberLockBreak +CALLV +pop +line 761 +;761: return; +ADDRGP4 $325 +JUMPV +LABELV $347 +line 764 +;762: } +;763: else +;764: { +line 765 +;765: PM_SetAnimFrame( pm->ps, curFrame, qtrue, qtrue ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +ARGP4 +ADDRLP4 52 +INDIRI4 +ARGI4 +ADDRLP4 72 +CNSTI4 1 +ASGNI4 +ADDRLP4 72 +INDIRI4 +ARGI4 +ADDRLP4 72 +INDIRI4 +ARGI4 +ADDRGP4 PM_SetAnimFrame +CALLV +pop +line 766 +;766: remaining = curFrame-anim->firstFrame; +ADDRLP4 4 +ADDRLP4 52 +INDIRI4 +ADDRLP4 48 +INDIRP4 +INDIRI4 +SUBI4 +ASGNI4 +line 767 +;767: } +line 768 +;768: } +ADDRGP4 $345 +JUMPV +LABELV $344 +line 770 +;769: else +;770: { +line 771 +;771: curFrame = ceil( currentFrame )+strength; +ADDRLP4 56 +INDIRF4 +ARGF4 +ADDRLP4 68 +ADDRGP4 ceil +CALLF4 +ASGNF4 +ADDRLP4 52 +ADDRLP4 68 +INDIRF4 +ADDRLP4 44 +INDIRI4 +CVIF4 4 +ADDF4 +CVFI4 4 +ASGNI4 +line 773 +;772: //advance my frame one +;773: if ( curFrame >= anim->firstFrame+anim->numFrames ) +ADDRLP4 72 +ADDRLP4 48 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRI4 +ADDRLP4 72 +INDIRP4 +INDIRI4 +ADDRLP4 72 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDI4 +LTI4 $349 +line 774 +;774: {//I won! Break out +line 775 +;775: PM_SaberLockBreak( genemy, qtrue ); +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 PM_SaberLockBreak +CALLV +pop +line 776 +;776: return; +ADDRGP4 $325 +JUMPV +LABELV $349 +line 779 +;777: } +;778: else +;779: { +line 780 +;780: PM_SetAnimFrame( pm->ps, curFrame, qtrue, qtrue ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +ARGP4 +ADDRLP4 52 +INDIRI4 +ARGI4 +ADDRLP4 76 +CNSTI4 1 +ASGNI4 +ADDRLP4 76 +INDIRI4 +ARGI4 +ADDRLP4 76 +INDIRI4 +ARGI4 +ADDRGP4 PM_SetAnimFrame +CALLV +pop +line 781 +;781: remaining = anim->firstFrame+anim->numFrames-curFrame; +ADDRLP4 80 +ADDRLP4 48 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 80 +INDIRP4 +INDIRI4 +ADDRLP4 80 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDI4 +ADDRLP4 52 +INDIRI4 +SUBI4 +ASGNI4 +line 782 +;782: } +line 783 +;783: } +LABELV $345 +line 784 +;784: if ( !Q_irand( 0, 2 ) ) +CNSTI4 0 +ARGI4 +CNSTI4 2 +ARGI4 +ADDRLP4 68 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRLP4 68 +INDIRI4 +CNSTI4 0 +NEI4 $343 +line 785 +;785: { +line 786 +;786: PM_AddEvent( EV_JUMP ); +CNSTI4 14 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 787 +;787: } +line 788 +;788: } +line 790 +;789: else +;790: { +line 791 +;791: return; +LABELV $343 +line 793 +;792: } +;793: if( 1/*ValidAnimFileIndex( genemy->client->clientInfo.animFileIndex )*/ ) +line 794 +;794: { +line 796 +;795: animation_t *anim; +;796: anim = &pm->animations[(genemy->torsoAnim&~ANIM_TOGGLEBIT)]; +ADDRLP4 44 +CNSTI4 28 +ADDRLP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +MULI4 +ADDRGP4 pm +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRP4 +ADDP4 +ASGNP4 +line 798 +;797: +;798: if ( (genemy->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CWCIRCLELOCK || +ADDRLP4 48 +ADDRLP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 548 +EQI4 $357 +ADDRLP4 48 +INDIRI4 +CNSTI4 541 +NEI4 $355 +LABELV $357 +line 800 +;799: (genemy->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF1LOCK ) +;800: { +line 801 +;801: if ( !Q_irand( 0, 2 ) ) +CNSTI4 0 +ARGI4 +CNSTI4 2 +ARGI4 +ADDRLP4 52 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 0 +NEI4 $358 +line 802 +;802: { +line 803 +;803: BG_AddPredictableEventToPlayerstate(EV_PAIN, floor((float)80/100*100.0f), genemy); +CNSTF4 1117782016 +ARGF4 +ADDRLP4 56 +ADDRGP4 floor +CALLF4 +ASGNF4 +CNSTI4 77 +ARGI4 +ADDRLP4 56 +INDIRF4 +CVFI4 4 +ARGI4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 BG_AddPredictableEventToPlayerstate +CALLV +pop +line 804 +;804: } +LABELV $358 +line 805 +;805: PM_SetAnimFrame( genemy, anim->firstFrame+remaining, qtrue, qtrue ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 44 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ARGI4 +ADDRLP4 56 +CNSTI4 1 +ASGNI4 +ADDRLP4 56 +INDIRI4 +ARGI4 +ADDRLP4 56 +INDIRI4 +ARGI4 +ADDRGP4 PM_SetAnimFrame +CALLV +pop +line 806 +;806: } +ADDRGP4 $329 +JUMPV +LABELV $355 +line 808 +;807: else +;808: { +line 809 +;809: PM_SetAnimFrame( genemy, anim->firstFrame+anim->numFrames-remaining, qtrue, qtrue ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 52 +ADDRLP4 44 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +INDIRI4 +ADDRLP4 52 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDI4 +ADDRLP4 4 +INDIRI4 +SUBI4 +ARGI4 +ADDRLP4 56 +CNSTI4 1 +ASGNI4 +ADDRLP4 56 +INDIRI4 +ARGI4 +ADDRLP4 56 +INDIRI4 +ARGI4 +ADDRGP4 PM_SetAnimFrame +CALLV +pop +line 810 +;810: } +line 811 +;811: } +line 812 +;812: } +line 813 +;813: } +ADDRGP4 $329 +JUMPV +LABELV $328 +line 815 +;814: else +;815: {//something broke us out of it +line 816 +;816: PM_SaberLockBreak( genemy, qfalse ); +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 PM_SaberLockBreak +CALLV +pop +line 817 +;817: } +LABELV $329 +line 818 +;818:} +LABELV $325 +endproc PM_SaberLocked 84 16 +export PM_SaberInBrokenParry +proc PM_SaberInBrokenParry 4 0 +line 821 +;819: +;820:qboolean PM_SaberInBrokenParry( int move ) +;821:{ +line 822 +;822: if ( move >= LS_H1_T_ && move <= LS_H1_BL ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 97 +LTI4 $361 +ADDRLP4 0 +INDIRI4 +CNSTI4 102 +GTI4 $361 +line 823 +;823: { +line 824 +;824: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $360 +JUMPV +LABELV $361 +line 826 +;825: } +;826: return qfalse; +CNSTI4 0 +RETI4 +LABELV $360 +endproc PM_SaberInBrokenParry 4 0 +export PM_BrokenParryForParry +proc PM_BrokenParryForParry 12 0 +line 831 +;827:} +;828: +;829: +;830:int PM_BrokenParryForParry( int move ) +;831:{ +line 834 +;832: //FIXME: need actual anims for this +;833: //FIXME: need to know which side of the saber was hit! For now, we presume the saber gets knocked away from the center +;834: switch ( move ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $371 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +LTI4 $364 +LABELV $372 +ADDRLP4 8 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 108 +LTI4 $364 +ADDRLP4 8 +INDIRI4 +CNSTI4 112 +GTI4 $364 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $373-432 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $373 +address $366 +address $367 +address $368 +address $369 +address $370 +code +line 835 +;835: { +LABELV $366 +line 837 +;836: case LS_PARRY_UP: +;837: return LS_H1_T_; +CNSTI4 97 +RETI4 +ADDRGP4 $363 +JUMPV +line 838 +;838: break; +LABELV $367 +line 840 +;839: case LS_PARRY_UR: +;840: return LS_H1_TR; +CNSTI4 98 +RETI4 +ADDRGP4 $363 +JUMPV +line 841 +;841: break; +LABELV $368 +line 843 +;842: case LS_PARRY_UL: +;843: return LS_H1_TL; +CNSTI4 99 +RETI4 +ADDRGP4 $363 +JUMPV +line 844 +;844: break; +LABELV $369 +line 846 +;845: case LS_PARRY_LR: +;846: return LS_H1_BL; +CNSTI4 102 +RETI4 +ADDRGP4 $363 +JUMPV +line 847 +;847: break; +LABELV $370 +line 849 +;848: case LS_PARRY_LL: +;849: return LS_H1_BR; +CNSTI4 100 +RETI4 +ADDRGP4 $363 +JUMPV +line 850 +;850: break; +LABELV $371 +line 852 +;851: case LS_READY: +;852: return LS_H1_B_;//??? +CNSTI4 101 +RETI4 +ADDRGP4 $363 +JUMPV +line 853 +;853: break; +LABELV $364 +line 855 +;854: } +;855: return LS_NONE; +CNSTI4 0 +RETI4 +LABELV $363 +endproc PM_BrokenParryForParry 12 0 +lit +align 4 +LABELV $376 +byte 4 3245342720 +byte 4 3245342720 +byte 4 3238002688 +align 4 +LABELV $377 +byte 4 1097859072 +byte 4 1097859072 +byte 4 1090519040 +export PM_CanBackstab +code +proc PM_CanBackstab 1152 28 +line 861 +;856:} +;857: +;858:#define BACK_STAB_DISTANCE 128//64 +;859: +;860:qboolean PM_CanBackstab(void) +;861:{ +line 865 +;862: trace_t tr; +;863: vec3_t flatAng; +;864: vec3_t fwd, back; +;865: vec3_t trmins = {-15, -15, -8}; +ADDRLP4 1116 +ADDRGP4 $376 +INDIRB +ASGNB 12 +line 866 +;866: vec3_t trmaxs = {15, 15, 8}; +ADDRLP4 1128 +ADDRGP4 $377 +INDIRB +ASGNB 12 +line 868 +;867: +;868: VectorCopy(pm->ps->viewangles, flatAng); +ADDRLP4 1104 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 869 +;869: flatAng[PITCH] = 0; +ADDRLP4 1104 +CNSTF4 0 +ASGNF4 +line 871 +;870: +;871: AngleVectors(flatAng, fwd, 0, 0); +ADDRLP4 1104 +ARGP4 +ADDRLP4 1080 +ARGP4 +ADDRLP4 1140 +CNSTP4 0 +ASGNP4 +ADDRLP4 1140 +INDIRP4 +ARGP4 +ADDRLP4 1140 +INDIRP4 +ARGP4 +ADDRGP4 AngleVectors +CALLV +pop +line 873 +;872: +;873: back[0] = pm->ps->origin[0] - fwd[0]*BACK_STAB_DISTANCE; +ADDRLP4 1092 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +CNSTF4 1124073472 +ADDRLP4 1080 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 874 +;874: back[1] = pm->ps->origin[1] - fwd[1]*BACK_STAB_DISTANCE; +ADDRLP4 1092+4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +CNSTF4 1124073472 +ADDRLP4 1080+4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 875 +;875: back[2] = pm->ps->origin[2] - fwd[2]*BACK_STAB_DISTANCE; +ADDRLP4 1092+8 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +CNSTF4 1124073472 +ADDRLP4 1080+8 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 877 +;876: +;877: pm->trace(&tr, pm->ps->origin, trmins, trmaxs, back, pm->ps->clientNum, MASK_PLAYERSOLID); +ADDRLP4 0 +ARGP4 +ADDRLP4 1144 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1148 +ADDRLP4 1144 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1148 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 1116 +ARGP4 +ADDRLP4 1128 +ARGP4 +ADDRLP4 1092 +ARGP4 +ADDRLP4 1148 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 273 +ARGI4 +ADDRLP4 1144 +INDIRP4 +CNSTI4 240 +ADDP4 +INDIRP4 +CALLV +pop +line 879 +;878: +;879: if (tr.fraction != 1.0 && tr.entityNum >= 0 && tr.entityNum < MAX_CLIENTS) +ADDRLP4 0+8 +INDIRF4 +CNSTF4 1065353216 +EQF4 $382 +ADDRLP4 0+52 +INDIRI4 +CNSTI4 0 +LTI4 $382 +ADDRLP4 0+52 +INDIRI4 +CNSTI4 32 +GEI4 $382 +line 880 +;880: { //We don't have real entity access here so we can't do an indepth check. But if it's a client and it's behind us, I guess that's reason enough to stab backward +line 881 +;881: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $375 +JUMPV +LABELV $382 +line 884 +;882: } +;883: +;884: return qfalse; +CNSTI4 0 +RETI4 +LABELV $375 +endproc PM_CanBackstab 1152 28 +export PM_SaberFlipOverAttackMove +proc PM_SaberFlipOverAttackMove 56 16 +line 888 +;885:} +;886: +;887:saberMoveName_t PM_SaberFlipOverAttackMove(trace_t *tr) +;888:{ +line 891 +;889: //FIXME: check above for room enough to jump! +;890: vec3_t fwdAngles, jumpFwd; +;891: float zDiff = 0; +ADDRLP4 24 +CNSTF4 0 +ASGNF4 +line 894 +;892: playerState_t *psData; +;893: +;894: VectorCopy( pm->ps->viewangles, fwdAngles ); +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 895 +;895: fwdAngles[PITCH] = fwdAngles[ROLL] = 0; +ADDRLP4 32 +CNSTF4 0 +ASGNF4 +ADDRLP4 0+8 +ADDRLP4 32 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 32 +INDIRF4 +ASGNF4 +line 896 +;896: AngleVectors( fwdAngles, jumpFwd, NULL, NULL ); +ADDRLP4 0 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRLP4 36 +CNSTP4 0 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRGP4 AngleVectors +CALLV +pop +line 897 +;897: VectorScale( jumpFwd, /*100*/50, pm->ps->velocity ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +CNSTF4 1112014848 +ADDRLP4 12 +INDIRF4 +MULF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTF4 1112014848 +ADDRLP4 12+4 +INDIRF4 +MULF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1112014848 +ADDRLP4 12+8 +INDIRF4 +MULF4 +ASGNF4 +line 898 +;898: pm->ps->velocity[2] = 400; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1137180672 +ASGNF4 +line 900 +;899: +;900: psData = pm->bgClients[tr->entityNum]; +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 pm +INDIRP4 +CNSTI4 248 +ADDP4 +ADDP4 +INDIRP4 +ASGNP4 +line 902 +;901: +;902: pm->ps->velocity[2] *= 1;//(pm->gent->enemy->maxs[2]-pm->gent->enemy->mins[2])/64.0f; +ADDRLP4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +ASGNP4 +ADDRLP4 40 +INDIRP4 +CNSTF4 1065353216 +ADDRLP4 40 +INDIRP4 +INDIRF4 +MULF4 +ASGNF4 +line 905 +;903: +;904: //go higher for enemies higher than you, lower for those lower than you +;905: if (psData) +ADDRLP4 28 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $391 +line 906 +;906: { +line 907 +;907: zDiff = psData->origin[2] - pm->ps->origin[2]; +ADDRLP4 44 +CNSTI4 28 +ASGNI4 +ADDRLP4 24 +ADDRLP4 28 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 908 +;908: } +ADDRGP4 $392 +JUMPV +LABELV $391 +line 910 +;909: else +;910: { +line 911 +;911: zDiff = 0; +ADDRLP4 24 +CNSTF4 0 +ASGNF4 +line 912 +;912: } +LABELV $392 +line 913 +;913: pm->ps->velocity[2] += (zDiff)*1.5f; +ADDRLP4 44 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +ASGNP4 +ADDRLP4 44 +INDIRP4 +ADDRLP4 44 +INDIRP4 +INDIRF4 +CNSTF4 1069547520 +ADDRLP4 24 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 916 +;914: +;915: //clamp to decent-looking values +;916: if ( zDiff <= 0 && pm->ps->velocity[2] < 200 ) +ADDRLP4 24 +INDIRF4 +CNSTF4 0 +GTF4 $393 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1128792064 +GEF4 $393 +line 917 +;917: {//if we're on same level, don't let me jump so low, I clip into the ground +line 918 +;918: pm->ps->velocity[2] = 200; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1128792064 +ASGNF4 +line 919 +;919: } +ADDRGP4 $394 +JUMPV +LABELV $393 +line 920 +;920: else if ( pm->ps->velocity[2] < 100 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1120403456 +GEF4 $395 +line 921 +;921: { +line 922 +;922: pm->ps->velocity[2] = 100; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1120403456 +ASGNF4 +line 923 +;923: } +ADDRGP4 $396 +JUMPV +LABELV $395 +line 924 +;924: else if ( pm->ps->velocity[2] > 400 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1137180672 +LEF4 $397 +line 925 +;925: { +line 926 +;926: pm->ps->velocity[2] = 400; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1137180672 +ASGNF4 +line 927 +;927: } +LABELV $397 +LABELV $396 +LABELV $394 +line 929 +;928: +;929: pm->ps->fd.forceJumpZStart = pm->ps->origin[2];//so we don't take damage if we land at same height +ADDRLP4 48 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 48 +INDIRP4 +CNSTI4 1080 +ADDP4 +ADDRLP4 48 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ASGNF4 +line 931 +;930: +;931: PM_AddEvent( EV_JUMP ); +CNSTI4 14 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 932 +;932: pm->ps->fd.forceJumpSound = 1; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1088 +ADDP4 +CNSTI4 1 +ASGNI4 +line 933 +;933: pm->cmd.upmove = 0; +ADDRGP4 pm +INDIRP4 +CNSTI4 30 +ADDP4 +CNSTI1 0 +ASGNI1 +line 935 +;934: +;935: if ( Q_irand( 0, 1 ) ) +CNSTI4 0 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRLP4 52 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 0 +EQI4 $399 +line 936 +;936: { +line 937 +;937: return LS_A_FLIP_STAB; +CNSTI4 16 +RETI4 +ADDRGP4 $387 +JUMPV +LABELV $399 +line 940 +;938: } +;939: else +;940: { +line 941 +;941: return LS_A_FLIP_SLASH; +CNSTI4 17 +RETI4 +LABELV $387 +endproc PM_SaberFlipOverAttackMove 56 16 +lit +align 4 +LABELV $402 +byte 4 3245342720 +byte 4 3245342720 +byte 4 3238002688 +align 4 +LABELV $403 +byte 4 1097859072 +byte 4 1097859072 +byte 4 1090519040 +export PM_SomeoneInFront +code +proc PM_SomeoneInFront 80 28 +line 948 +;942: } +;943:} +;944: +;945:#define FLIPHACK_DISTANCE 200 +;946: +;947:qboolean PM_SomeoneInFront(trace_t *tr) +;948:{ //Also a very simplified version of the sp counterpart +line 951 +;949: vec3_t flatAng; +;950: vec3_t fwd, back; +;951: vec3_t trmins = {-15, -15, -8}; +ADDRLP4 36 +ADDRGP4 $402 +INDIRB +ASGNB 12 +line 952 +;952: vec3_t trmaxs = {15, 15, 8}; +ADDRLP4 48 +ADDRGP4 $403 +INDIRB +ASGNB 12 +line 954 +;953: +;954: VectorCopy(pm->ps->viewangles, flatAng); +ADDRLP4 24 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 955 +;955: flatAng[PITCH] = 0; +ADDRLP4 24 +CNSTF4 0 +ASGNF4 +line 957 +;956: +;957: AngleVectors(flatAng, fwd, 0, 0); +ADDRLP4 24 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRLP4 60 +CNSTP4 0 +ASGNP4 +ADDRLP4 60 +INDIRP4 +ARGP4 +ADDRLP4 60 +INDIRP4 +ARGP4 +ADDRGP4 AngleVectors +CALLV +pop +line 959 +;958: +;959: back[0] = pm->ps->origin[0] + fwd[0]*FLIPHACK_DISTANCE; +ADDRLP4 12 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +CNSTF4 1128792064 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 960 +;960: back[1] = pm->ps->origin[1] + fwd[1]*FLIPHACK_DISTANCE; +ADDRLP4 12+4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +CNSTF4 1128792064 +ADDRLP4 0+4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 961 +;961: back[2] = pm->ps->origin[2] + fwd[2]*FLIPHACK_DISTANCE; +ADDRLP4 12+8 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +CNSTF4 1128792064 +ADDRLP4 0+8 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 963 +;962: +;963: pm->trace(tr, pm->ps->origin, trmins, trmaxs, back, pm->ps->clientNum, MASK_PLAYERSOLID); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 64 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 68 +ADDRLP4 64 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 36 +ARGP4 +ADDRLP4 48 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRLP4 68 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 273 +ARGI4 +ADDRLP4 64 +INDIRP4 +CNSTI4 240 +ADDP4 +INDIRP4 +CALLV +pop +line 965 +;964: +;965: if (tr->fraction != 1.0 && tr->entityNum >= 0 && tr->entityNum < MAX_CLIENTS) +ADDRLP4 72 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +CNSTF4 1065353216 +EQF4 $408 +ADDRLP4 76 +ADDRLP4 72 +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 0 +LTI4 $408 +ADDRLP4 76 +INDIRI4 +CNSTI4 32 +GEI4 $408 +line 966 +;966: { +line 967 +;967: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $401 +JUMPV +LABELV $408 +line 970 +;968: } +;969: +;970: return qfalse; +CNSTI4 0 +RETI4 +LABELV $401 +endproc PM_SomeoneInFront 80 28 +export PM_SaberLungeAttackMove +proc PM_SaberLungeAttackMove 32 16 +line 974 +;971:} +;972: +;973:saberMoveName_t PM_SaberLungeAttackMove( void ) +;974:{ +line 977 +;975: vec3_t fwdAngles, jumpFwd; +;976: +;977: VectorCopy( pm->ps->viewangles, fwdAngles ); +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 978 +;978: fwdAngles[PITCH] = fwdAngles[ROLL] = 0; +ADDRLP4 24 +CNSTF4 0 +ASGNF4 +ADDRLP4 0+8 +ADDRLP4 24 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 980 +;979: //do the lunge +;980: AngleVectors( fwdAngles, jumpFwd, NULL, NULL ); +ADDRLP4 0 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRLP4 28 +CNSTP4 0 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRGP4 AngleVectors +CALLV +pop +line 981 +;981: VectorScale( jumpFwd, 150, pm->ps->velocity ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +CNSTF4 1125515264 +ADDRLP4 12 +INDIRF4 +MULF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTF4 1125515264 +ADDRLP4 12+4 +INDIRF4 +MULF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1125515264 +ADDRLP4 12+8 +INDIRF4 +MULF4 +ASGNF4 +line 983 +;982: //pm->ps->velocity[2] = 50; +;983: PM_AddEvent( EV_JUMP ); +CNSTI4 14 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 985 +;984: +;985: return LS_A_LUNGE; +CNSTI4 14 +RETI4 +LABELV $410 +endproc PM_SaberLungeAttackMove 32 16 +export PM_SaberJumpAttackMove +proc PM_SaberJumpAttackMove 36 16 +line 989 +;986:} +;987: +;988:saberMoveName_t PM_SaberJumpAttackMove( void ) +;989:{ +line 992 +;990: vec3_t fwdAngles, jumpFwd; +;991: +;992: VectorCopy( pm->ps->viewangles, fwdAngles ); +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 993 +;993: fwdAngles[PITCH] = fwdAngles[ROLL] = 0; +ADDRLP4 24 +CNSTF4 0 +ASGNF4 +ADDRLP4 0+8 +ADDRLP4 24 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 994 +;994: AngleVectors( fwdAngles, jumpFwd, NULL, NULL ); +ADDRLP4 0 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRLP4 28 +CNSTP4 0 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRGP4 AngleVectors +CALLV +pop +line 995 +;995: VectorScale( jumpFwd, /*200*/300, pm->ps->velocity ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +CNSTF4 1133903872 +ADDRLP4 12 +INDIRF4 +MULF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTF4 1133903872 +ADDRLP4 12+4 +INDIRF4 +MULF4 +ASGNF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1133903872 +ADDRLP4 12+8 +INDIRF4 +MULF4 +ASGNF4 +line 996 +;996: pm->ps->velocity[2] = 280;//180; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1133248512 +ASGNF4 +line 997 +;997: pm->ps->fd.forceJumpZStart = pm->ps->origin[2];//so we don't take damage if we land at same height +ADDRLP4 32 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +CNSTI4 1080 +ADDP4 +ADDRLP4 32 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ASGNF4 +line 999 +;998: +;999: PM_AddEvent( EV_JUMP ); +CNSTI4 14 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 1000 +;1000: pm->ps->fd.forceJumpSound = 1; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1088 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1001 +;1001: pm->cmd.upmove = 0; +ADDRGP4 pm +INDIRP4 +CNSTI4 30 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1003 +;1002: +;1003: return LS_A_JUMP_T__B_; +CNSTI4 15 +RETI4 +LABELV $414 +endproc PM_SaberJumpAttackMove 36 16 +export PM_GroundDistance +proc PM_GroundDistance 1108 28 +line 1007 +;1004:} +;1005: +;1006:float PM_GroundDistance(void) +;1007:{ +line 1011 +;1008: trace_t tr; +;1009: vec3_t down; +;1010: +;1011: VectorCopy(pm->ps->origin, down); +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 1013 +;1012: +;1013: down[2] -= 4096; +ADDRLP4 0+8 +ADDRLP4 0+8 +INDIRF4 +CNSTF4 1166016512 +SUBF4 +ASGNF4 +line 1015 +;1014: +;1015: pm->trace(&tr, pm->ps->origin, pm->mins, pm->maxs, down, pm->ps->clientNum, MASK_SOLID); +ADDRLP4 12 +ARGP4 +ADDRLP4 1092 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1096 +ADDRLP4 1092 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1096 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 1092 +INDIRP4 +CNSTI4 188 +ADDP4 +ARGP4 +ADDRLP4 1092 +INDIRP4 +CNSTI4 200 +ADDP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRLP4 1096 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRLP4 1092 +INDIRP4 +CNSTI4 240 +ADDP4 +INDIRP4 +CALLV +pop +line 1017 +;1016: +;1017: VectorSubtract(pm->ps->origin, tr.endpos, down); +ADDRLP4 1100 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 1100 +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 12+12 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 0+4 +ADDRLP4 1100 +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 12+12+4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 0+8 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 12+12+8 +INDIRF4 +SUBF4 +ASGNF4 +line 1019 +;1018: +;1019: return VectorLength(down); +ADDRLP4 0 +ARGP4 +ADDRLP4 1104 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 1104 +INDIRF4 +RETF4 +LABELV $418 +endproc PM_GroundDistance 1108 28 +export PM_SaberAttackForMovement +proc PM_SaberAttackForMovement 1104 8 +line 1023 +;1020:} +;1021: +;1022:saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove) +;1023:{ +line 1024 +;1024: saberMoveName_t newmove = -1; +ADDRLP4 0 +CNSTI4 -1 +ASGNI4 +line 1026 +;1025: +;1026: if ( pm->cmd.rightmove > 0 ) +ADDRGP4 pm +INDIRP4 +CNSTI4 29 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $428 +line 1027 +;1027: {//moving right +line 1028 +;1028: if ( pm->cmd.forwardmove > 0 ) +ADDRGP4 pm +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $430 +line 1029 +;1029: {//forward right = TL2BR slash +line 1030 +;1030: newmove = LS_A_TL2BR; +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +line 1031 +;1031: } +ADDRGP4 $429 +JUMPV +LABELV $430 +line 1032 +;1032: else if ( pm->cmd.forwardmove < 0 ) +ADDRGP4 pm +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +GEI4 $432 +line 1033 +;1033: {//backward right = BL2TR uppercut +line 1034 +;1034: newmove = LS_A_BL2TR; +ADDRLP4 0 +CNSTI4 6 +ASGNI4 +line 1035 +;1035: } +ADDRGP4 $429 +JUMPV +LABELV $432 +line 1037 +;1036: else +;1037: {//just right is a left slice +line 1038 +;1038: newmove = LS_A_L2R; +ADDRLP4 0 +CNSTI4 5 +ASGNI4 +line 1039 +;1039: } +line 1040 +;1040: } +ADDRGP4 $429 +JUMPV +LABELV $428 +line 1041 +;1041: else if ( pm->cmd.rightmove < 0 ) +ADDRGP4 pm +INDIRP4 +CNSTI4 29 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +GEI4 $434 +line 1042 +;1042: {//moving left +line 1043 +;1043: if ( pm->cmd.forwardmove > 0 ) +ADDRGP4 pm +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $436 +line 1044 +;1044: {//forward left = TR2BL slash +line 1045 +;1045: newmove = LS_A_TR2BL; +ADDRLP4 0 +CNSTI4 9 +ASGNI4 +line 1046 +;1046: } +ADDRGP4 $435 +JUMPV +LABELV $436 +line 1047 +;1047: else if ( pm->cmd.forwardmove < 0 ) +ADDRGP4 pm +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +GEI4 $438 +line 1048 +;1048: {//backward left = BR2TL uppercut +line 1049 +;1049: newmove = LS_A_BR2TL; +ADDRLP4 0 +CNSTI4 7 +ASGNI4 +line 1050 +;1050: } +ADDRGP4 $435 +JUMPV +LABELV $438 +line 1052 +;1051: else +;1052: {//just left is a right slice +line 1053 +;1053: newmove = LS_A_R2L; +ADDRLP4 0 +CNSTI4 8 +ASGNI4 +line 1054 +;1054: } +line 1055 +;1055: } +ADDRGP4 $435 +JUMPV +LABELV $434 +line 1057 +;1056: else +;1057: {//not moving left or right +line 1058 +;1058: if ( pm->cmd.forwardmove > 0 ) +ADDRGP4 pm +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $440 +line 1059 +;1059: {//forward= T2B slash +line 1060 +;1060: if (pm->ps->fd.saberAnimLevel == FORCE_LEVEL_2 && +ADDRLP4 4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1216 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $442 +ADDRLP4 4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 1120403456 +LEF4 $442 +ADDRLP4 8 +ADDRGP4 PM_GroundDistance +CALLF4 +ASGNF4 +ADDRLP4 8 +INDIRF4 +CNSTF4 1107296256 +GEF4 $442 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 12 +ADDRGP4 BG_InSpecialJump +CALLI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $442 +line 1065 +;1061: /*pm->ps->groundEntityNum != ENTITYNUM_NONE &&*/ +;1062: pm->ps->velocity[2] > 100 && +;1063: PM_GroundDistance() < 32 && +;1064: !BG_InSpecialJump(pm->ps->legsAnim)) +;1065: { //FLIP AND DOWNWARD ATTACK +line 1068 +;1066: trace_t tr; +;1067: +;1068: if (PM_SomeoneInFront(&tr)) +ADDRLP4 16 +ARGP4 +ADDRLP4 1096 +ADDRGP4 PM_SomeoneInFront +CALLI4 +ASGNI4 +ADDRLP4 1096 +INDIRI4 +CNSTI4 0 +EQI4 $441 +line 1069 +;1069: { +line 1070 +;1070: newmove = PM_SaberFlipOverAttackMove(&tr); +ADDRLP4 16 +ARGP4 +ADDRLP4 1100 +ADDRGP4 PM_SaberFlipOverAttackMove +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 1100 +INDIRI4 +ASGNI4 +line 1071 +;1071: } +line 1072 +;1072: } +ADDRGP4 $441 +JUMPV +LABELV $442 +line 1073 +;1073: else if (pm->ps->fd.saberAnimLevel == FORCE_LEVEL_1 && +ADDRLP4 16 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 20 +CNSTI4 1 +ASGNI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 1216 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +NEI4 $446 +ADDRLP4 24 +CNSTI4 0 +ASGNI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +BANDI4 +ADDRLP4 24 +INDIRI4 +EQI4 $446 +ADDRLP4 16 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +ADDRLP4 24 +INDIRI4 +GTI4 $446 +line 1076 +;1074: (pm->ps->pm_flags & PMF_DUCKED) && +;1075: pm->ps->weaponTime <= 0) +;1076: { //LUNGE (weak) +line 1077 +;1077: newmove = PM_SaberLungeAttackMove(); +ADDRLP4 28 +ADDRGP4 PM_SaberLungeAttackMove +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 28 +INDIRI4 +ASGNI4 +line 1078 +;1078: } +ADDRGP4 $441 +JUMPV +LABELV $446 +line 1080 +;1079: else +;1080: { +line 1081 +;1081: newmove = LS_A_T2B; +ADDRLP4 0 +CNSTI4 10 +ASGNI4 +line 1082 +;1082: } +line 1083 +;1083: } +ADDRGP4 $441 +JUMPV +LABELV $440 +line 1084 +;1084: else if ( pm->cmd.forwardmove < 0 ) +ADDRGP4 pm +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +GEI4 $448 +line 1085 +;1085: {//backward= T2B slash//B2T uppercut? +line 1086 +;1086: if (PM_CanBackstab()) +ADDRLP4 4 +ADDRGP4 PM_CanBackstab +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $450 +line 1087 +;1087: { //BACKSTAB (attack varies by level) +line 1088 +;1088: if (pm->ps->fd.saberAnimLevel >= FORCE_LEVEL_2) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1216 +ADDP4 +INDIRI4 +CNSTI4 2 +LTI4 $452 +line 1089 +;1089: {//medium and higher attacks +line 1090 +;1090: if ( (pm->ps->pm_flags&PMF_DUCKED) || pm->cmd.upmove < 0 ) +ADDRLP4 8 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRLP4 8 +INDIRP4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +ADDRLP4 12 +INDIRI4 +NEI4 $456 +ADDRLP4 8 +INDIRP4 +CNSTI4 30 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 12 +INDIRI4 +GEI4 $454 +LABELV $456 +line 1091 +;1091: { +line 1092 +;1092: newmove = LS_A_BACK_CR; +ADDRLP4 0 +CNSTI4 13 +ASGNI4 +line 1093 +;1093: } +ADDRGP4 $449 +JUMPV +LABELV $454 +line 1095 +;1094: else +;1095: { +line 1096 +;1096: newmove = LS_A_BACK; +ADDRLP4 0 +CNSTI4 12 +ASGNI4 +line 1097 +;1097: } +line 1098 +;1098: } +ADDRGP4 $449 +JUMPV +LABELV $452 +line 1100 +;1099: else +;1100: { //weak attack +line 1101 +;1101: newmove = LS_A_BACKSTAB; +ADDRLP4 0 +CNSTI4 11 +ASGNI4 +line 1102 +;1102: } +line 1103 +;1103: } +ADDRGP4 $449 +JUMPV +LABELV $450 +line 1105 +;1104: else +;1105: { +line 1106 +;1106: newmove = LS_A_T2B; +ADDRLP4 0 +CNSTI4 10 +ASGNI4 +line 1107 +;1107: } +line 1108 +;1108: } +ADDRGP4 $449 +JUMPV +LABELV $448 +line 1109 +;1109: else if ( PM_SaberInBounce( curmove ) ) +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +ADDRGP4 PM_SaberInBounce +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $457 +line 1110 +;1110: {//bounces should go to their default attack if you don't specify a direction but are attacking +line 1111 +;1111: if ( PM_SaberKataDone() ) +ADDRLP4 8 +ADDRGP4 PM_SaberKataDone +CALLI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $459 +line 1112 +;1112: { +line 1113 +;1113: newmove = saberMoveData[curmove].chain_idle; +ADDRLP4 0 +CNSTI4 40 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+28 +ADDP4 +INDIRI4 +ASGNI4 +line 1114 +;1114: } +ADDRGP4 $458 +JUMPV +LABELV $459 +line 1116 +;1115: else +;1116: { +line 1117 +;1117: newmove = saberMoveData[curmove].chain_attack; +ADDRLP4 0 +CNSTI4 40 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+32 +ADDP4 +INDIRI4 +ASGNI4 +line 1118 +;1118: } +line 1119 +;1119: } +ADDRGP4 $458 +JUMPV +LABELV $457 +line 1120 +;1120: else if ( curmove == LS_READY ) +ADDRFP4 0 +INDIRI4 +CNSTI4 1 +NEI4 $463 +line 1121 +;1121: {//Not moving at all, shouldn't have gotten here...? +line 1127 +;1122: //for now, just pick a random attack +;1123: //newmove = Q_irand( LS_A_TL2BR, LS_A_T2B ); +;1124: //rww - If we don't seed with a "common" value, the client and server will get mismatched +;1125: //prediction values. Under laggy conditions this will cause the appearance of rapid swing +;1126: //sequence changes. +;1127: newmove = PM_irand_timesync(LS_A_TL2BR, LS_A_T2B); +CNSTI4 4 +ARGI4 +CNSTI4 10 +ARGI4 +ADDRLP4 8 +ADDRGP4 PM_irand_timesync +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 1128 +;1128: } +LABELV $463 +LABELV $458 +LABELV $449 +LABELV $441 +line 1129 +;1129: } +LABELV $435 +LABELV $429 +line 1131 +;1130: +;1131: return newmove; +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $427 +endproc PM_SaberAttackForMovement 1104 8 +export PM_WeaponLightsaber +proc PM_WeaponLightsaber 104 16 +line 1144 +;1132:} +;1133:/* +;1134:================= +;1135:PM_WeaponLightsaber +;1136: +;1137:Consults a chart to choose what to do with the lightsaber. +;1138:While this is a little different than the Quake 3 code, there is no clean way of using the Q3 code for this kind of thing. +;1139:================= +;1140:*/ +;1141:// Ultimate goal is to set the sabermove to the proper next location +;1142:// Note that if the resultant animation is NONE, then the animation is essentially "idle", and is set in WP_TorsoAnim +;1143:void PM_WeaponLightsaber(void) +;1144:{ +line 1146 +;1145: int addTime,amount; +;1146: qboolean delayed_fire = qfalse; +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +line 1147 +;1147: int anim=-1, curmove, newmove=LS_NONE; +ADDRLP4 16 +CNSTI4 -1 +ASGNI4 +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1149 +;1148: +;1149: qboolean saberInAir = qtrue; +ADDRLP4 24 +CNSTI4 1 +ASGNI4 +line 1150 +;1150: qboolean checkOnlyWeap = qfalse; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 1152 +;1151: +;1152: if ( pm->ps->saberLockTime > pm->cmd.serverTime ) +ADDRLP4 32 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +INDIRP4 +CNSTI4 524 +ADDP4 +INDIRI4 +ADDRLP4 32 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +LEI4 $466 +line 1153 +;1153: { +line 1154 +;1154: pm->ps->saberMove = LS_NONE; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1155 +;1155: PM_SaberLocked(); +ADDRGP4 PM_SaberLocked +CALLV +pop +line 1156 +;1156: return; +ADDRGP4 $465 +JUMPV +LABELV $466 +line 1159 +;1157: } +;1158: else +;1159: { +line 1160 +;1160: if ( ( (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF2LOCK || +ADDRLP4 36 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 36 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 40 +INDIRI4 +CNSTI4 538 +EQI4 $473 +ADDRLP4 40 +INDIRI4 +CNSTI4 541 +EQI4 $473 +ADDRLP4 40 +INDIRI4 +CNSTI4 548 +EQI4 $473 +ADDRLP4 40 +INDIRI4 +CNSTI4 549 +EQI4 $473 +ADDRLP4 36 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $468 +LABELV $473 +line 1166 +;1161: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF1LOCK || +;1162: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CWCIRCLELOCK || +;1163: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CCWCIRCLELOCK || +;1164: pm->ps->saberLockFrame ) +;1165: ) +;1166: { +line 1167 +;1167: if (pm->ps->saberLockEnemy < ENTITYNUM_NONE && +ADDRLP4 44 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 528 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 1023 +GEI4 $474 +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +LTI4 $474 +line 1169 +;1168: pm->ps->saberLockEnemy >= 0) +;1169: { +line 1172 +;1170: playerState_t *en; +;1171: +;1172: en = pm->bgClients[pm->ps->saberLockEnemy]; +ADDRLP4 52 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 48 +ADDRLP4 52 +INDIRP4 +INDIRP4 +CNSTI4 528 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 52 +INDIRP4 +CNSTI4 248 +ADDP4 +ADDP4 +INDIRP4 +ASGNP4 +line 1174 +;1173: +;1174: if (en) +ADDRLP4 48 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $476 +line 1175 +;1175: { +line 1176 +;1176: PM_SaberLockBreak(en, qfalse); +ADDRLP4 48 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 PM_SaberLockBreak +CALLV +pop +line 1177 +;1177: return; +ADDRGP4 $465 +JUMPV +LABELV $476 +line 1179 +;1178: } +;1179: } +LABELV $474 +line 1181 +;1180: +;1181: if ( ( (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF2LOCK || +ADDRLP4 48 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 52 +ADDRLP4 48 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 538 +EQI4 $483 +ADDRLP4 52 +INDIRI4 +CNSTI4 541 +EQI4 $483 +ADDRLP4 52 +INDIRI4 +CNSTI4 548 +EQI4 $483 +ADDRLP4 52 +INDIRI4 +CNSTI4 549 +EQI4 $483 +ADDRLP4 48 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $478 +LABELV $483 +line 1187 +;1182: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF1LOCK || +;1183: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CWCIRCLELOCK || +;1184: (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CCWCIRCLELOCK || +;1185: pm->ps->saberLockFrame ) +;1186: ) +;1187: { +line 1188 +;1188: pm->ps->torsoTimer = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1189 +;1189: PM_SetAnim(SETANIM_TORSO,BOTH_STAND1,SETANIM_FLAG_OVERRIDE, 100); +ADDRLP4 56 +CNSTI4 1 +ASGNI4 +ADDRLP4 56 +INDIRI4 +ARGI4 +CNSTI4 550 +ARGI4 +ADDRLP4 56 +INDIRI4 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1190 +;1190: pm->ps->saberLockFrame = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 532 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1191 +;1191: } +LABELV $478 +line 1192 +;1192: } +LABELV $468 +line 1193 +;1193: } +line 1195 +;1194: +;1195: if (pm->ps->saberHolstered) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1300 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $484 +line 1196 +;1196: { +line 1197 +;1197: if (pm->ps->saberMove != LS_READY) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +CNSTI4 1 +EQI4 $486 +line 1198 +;1198: { +line 1199 +;1199: PM_SetSaberMove( LS_READY ); +CNSTI4 1 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1200 +;1200: } +LABELV $486 +line 1202 +;1201: +;1202: if ((pm->ps->legsAnim & ~ANIM_TOGGLEBIT) != (pm->ps->torsoAnim & ~ANIM_TOGGLEBIT)) +ADDRLP4 36 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 40 +CNSTI4 -2049 +ASGNI4 +ADDRLP4 36 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ADDRLP4 40 +INDIRI4 +BANDI4 +ADDRLP4 36 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +ADDRLP4 40 +INDIRI4 +BANDI4 +EQI4 $488 +line 1203 +;1203: { +line 1204 +;1204: PM_SetAnim(SETANIM_TORSO,(pm->ps->legsAnim & ~ANIM_TOGGLEBIT),SETANIM_FLAG_OVERRIDE, 100); +ADDRLP4 44 +CNSTI4 1 +ASGNI4 +ADDRLP4 44 +INDIRI4 +ARGI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ARGI4 +ADDRLP4 44 +INDIRI4 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1205 +;1205: } +LABELV $488 +line 1207 +;1206: +;1207: if (BG_InSaberStandAnim(pm->ps->torsoAnim)) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 44 +ADDRGP4 BG_InSaberStandAnim +CALLI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +EQI4 $490 +line 1208 +;1208: { +line 1209 +;1209: PM_SetAnim(SETANIM_TORSO,BOTH_STAND1,SETANIM_FLAG_OVERRIDE, 100); +ADDRLP4 48 +CNSTI4 1 +ASGNI4 +ADDRLP4 48 +INDIRI4 +ARGI4 +CNSTI4 550 +ARGI4 +ADDRLP4 48 +INDIRI4 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1210 +;1210: } +LABELV $490 +line 1212 +;1211: +;1212: if (pm->ps->weaponTime < 1 && ((pm->cmd.buttons & BUTTON_ALT_ATTACK) || (pm->cmd.buttons & BUTTON_ATTACK))) +ADDRLP4 48 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 52 +CNSTI4 1 +ASGNI4 +ADDRLP4 48 +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +ADDRLP4 52 +INDIRI4 +GEI4 $492 +ADDRLP4 56 +ADDRLP4 48 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 60 +CNSTI4 0 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 128 +BANDI4 +ADDRLP4 60 +INDIRI4 +NEI4 $494 +ADDRLP4 56 +INDIRI4 +ADDRLP4 52 +INDIRI4 +BANDI4 +ADDRLP4 60 +INDIRI4 +EQI4 $492 +LABELV $494 +line 1213 +;1213: { +line 1214 +;1214: if (pm->ps->duelTime < pm->cmd.serverTime) +ADDRLP4 64 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +INDIRP4 +CNSTI4 1288 +ADDP4 +INDIRI4 +ADDRLP4 64 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +GEI4 $495 +line 1215 +;1215: { +line 1216 +;1216: pm->ps->saberHolstered = qfalse; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1300 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1217 +;1217: PM_AddEvent(EV_SABER_UNHOLSTER); +CNSTI4 29 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 1218 +;1218: } +LABELV $495 +line 1219 +;1219: } +LABELV $492 +line 1221 +;1220: +;1221: if ( pm->ps->weaponTime > 0 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $497 +line 1222 +;1222: { +line 1223 +;1223: pm->ps->weaponTime -= pml.msec; +ADDRLP4 64 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +ADDRLP4 64 +INDIRP4 +INDIRI4 +ADDRGP4 pml+40 +INDIRI4 +SUBI4 +ASGNI4 +line 1224 +;1224: } +LABELV $497 +line 1226 +;1225: +;1226: checkOnlyWeap = qtrue; +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +line 1227 +;1227: goto weapChecks; +ADDRGP4 $500 +JUMPV +LABELV $484 +line 1230 +;1228: } +;1229: +;1230: if ((pm->cmd.buttons & BUTTON_ALT_ATTACK) && +ADDRLP4 36 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 40 +CNSTI4 0 +ASGNI4 +ADDRLP4 36 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRI4 +CNSTI4 128 +BANDI4 +ADDRLP4 40 +INDIRI4 +EQI4 $501 +ADDRLP4 44 +ADDRLP4 36 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 44 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 1 +GEI4 $501 +ADDRLP4 44 +INDIRP4 +CNSTI4 560 +ADDP4 +INDIRI4 +ADDRLP4 40 +INDIRI4 +EQI4 $501 +ADDRLP4 44 +INDIRP4 +CNSTI4 920 +ADDP4 +INDIRI4 +CNSTI4 72 +ADDRLP4 44 +INDIRP4 +CNSTI4 1000 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 forcePowerNeeded+68 +ADDP4 +INDIRI4 +LTI4 $501 +ADDRLP4 36 +INDIRP4 +CNSTI4 220 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 44 +INDIRP4 +ARGP4 +ADDRLP4 48 +ADDRGP4 BG_HasYsalamiri +CALLI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $501 +ADDRLP4 52 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CNSTI4 220 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 52 +INDIRP4 +INDIRP4 +ARGP4 +ADDRLP4 52 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 17 +ARGI4 +ADDRLP4 56 +ADDRGP4 BG_CanUseFPNow +CALLI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 0 +EQI4 $501 +line 1237 +;1231: pm->ps->weaponTime < 1 && +;1232: pm->ps->saberCanThrow && +;1233: pm->ps->fd.forcePower >= forcePowerNeeded[pm->ps->fd.forcePowerLevel[FP_SABERTHROW]][FP_SABERTHROW] && +;1234: !BG_HasYsalamiri(pm->gametype, pm->ps) && +;1235: BG_CanUseFPNow(pm->gametype, pm->ps, pm->cmd.serverTime, FP_SABERTHROW) +;1236: ) +;1237: { //might as well just check for a saber throw right here +line 1239 +;1238: //This will get set to false again once the saber makes it back to its owner game-side +;1239: if (!pm->ps->saberInFlight) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 504 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $504 +line 1240 +;1240: { +line 1241 +;1241: pm->ps->fd.forcePower -= forcePowerNeeded[pm->ps->fd.forcePowerLevel[FP_SABERTHROW]][FP_SABERTHROW]; +ADDRLP4 60 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 64 +ADDRLP4 60 +INDIRP4 +CNSTI4 920 +ADDP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +ADDRLP4 64 +INDIRP4 +INDIRI4 +CNSTI4 72 +ADDRLP4 60 +INDIRP4 +CNSTI4 1000 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 forcePowerNeeded+68 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 1242 +;1242: } +LABELV $504 +line 1244 +;1243: +;1244: pm->ps->saberInFlight = qtrue; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 504 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1245 +;1245: } +LABELV $501 +line 1247 +;1246: +;1247: if ( pm->ps->saberInFlight ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 504 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $507 +line 1248 +;1248: {//guiding saber +line 1249 +;1249: PM_SetAnim(SETANIM_TORSO, BOTH_SABERPULL, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 100); +CNSTI4 1 +ARGI4 +CNSTI4 946 +ARGI4 +CNSTI4 3 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1250 +;1250: pm->ps->torsoTimer = 1; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1251 +;1251: return; +ADDRGP4 $465 +JUMPV +LABELV $507 +line 1255 +;1252: } +;1253: +;1254: // don't allow attack until all buttons are up +;1255: if ( pm->ps->pm_flags & PMF_RESPAWNED ) { +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 512 +BANDI4 +CNSTI4 0 +EQI4 $509 +line 1256 +;1256: return; +ADDRGP4 $465 +JUMPV +LABELV $509 +line 1260 +;1257: } +;1258: +;1259: // check for dead player +;1260: if ( pm->ps->stats[STAT_HEALTH] <= 0 ) { +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $511 +line 1261 +;1261: return; +ADDRGP4 $465 +JUMPV +LABELV $511 +line 1264 +;1262: } +;1263: +;1264: if (pm->ps->weaponstate == WEAPON_READY || +ADDRLP4 60 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 60 +INDIRI4 +CNSTI4 0 +EQI4 $515 +ADDRLP4 60 +INDIRI4 +CNSTI4 6 +NEI4 $513 +LABELV $515 +line 1266 +;1265: pm->ps->weaponstate == WEAPON_IDLE) +;1266: { +line 1267 +;1267: if (pm->ps->saberMove != LS_READY && pm->ps->weaponTime <= 0 && !pm->ps->saberBlocked) +ADDRLP4 64 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +CNSTI4 1 +EQI4 $516 +ADDRLP4 68 +CNSTI4 0 +ASGNI4 +ADDRLP4 64 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +ADDRLP4 68 +INDIRI4 +GTI4 $516 +ADDRLP4 64 +INDIRP4 +CNSTI4 520 +ADDP4 +INDIRI4 +ADDRLP4 68 +INDIRI4 +NEI4 $516 +line 1268 +;1268: { +line 1269 +;1269: PM_SetSaberMove( LS_READY ); +CNSTI4 1 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1270 +;1270: } +LABELV $516 +line 1271 +;1271: } +LABELV $513 +line 1273 +;1272: +;1273: if( (pm->ps->torsoAnim & ~ANIM_TOGGLEBIT) == BOTH_RUN2 || +ADDRLP4 64 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +CNSTI4 734 +EQI4 $520 +ADDRLP4 64 +INDIRI4 +CNSTI4 731 +NEI4 $518 +LABELV $520 +line 1275 +;1274: (pm->ps->torsoAnim & ~ANIM_TOGGLEBIT) == BOTH_RUN1 ) +;1275: { +line 1276 +;1276: if ((pm->ps->torsoAnim & ~ANIM_TOGGLEBIT) != (pm->ps->legsAnim & ~ANIM_TOGGLEBIT)) +ADDRLP4 68 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 72 +CNSTI4 -2049 +ASGNI4 +ADDRLP4 68 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +ADDRLP4 72 +INDIRI4 +BANDI4 +ADDRLP4 68 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ADDRLP4 72 +INDIRI4 +BANDI4 +EQI4 $521 +line 1277 +;1277: { +line 1278 +;1278: PM_SetAnim(SETANIM_TORSO,(pm->ps->legsAnim & ~ANIM_TOGGLEBIT),SETANIM_FLAG_OVERRIDE, 100); +ADDRLP4 76 +CNSTI4 1 +ASGNI4 +ADDRLP4 76 +INDIRI4 +ARGI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ARGI4 +ADDRLP4 76 +INDIRI4 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1279 +;1279: } +LABELV $521 +line 1280 +;1280: } +LABELV $518 +line 1283 +;1281: +;1282: // make weapon function +;1283: if ( pm->ps->weaponTime > 0 ) { +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $523 +line 1284 +;1284: pm->ps->weaponTime -= pml.msec; +ADDRLP4 68 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +ADDRLP4 68 +INDIRP4 +INDIRI4 +ADDRGP4 pml+40 +INDIRI4 +SUBI4 +ASGNI4 +line 1286 +;1285: +;1286: if (pm->ps->saberBlocked && pm->ps->torsoAnim != saberMoveData[pm->ps->saberMove].animToUse) +ADDRLP4 72 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +CNSTI4 520 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $524 +ADDRLP4 72 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 40 +ADDRLP4 72 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+4 +ADDP4 +INDIRI4 +EQI4 $524 +line 1287 +;1287: { //rww - keep him in the blocking pose until he can attack again +line 1288 +;1288: PM_SetAnim(SETANIM_TORSO,saberMoveData[pm->ps->saberMove].animToUse,saberMoveData[pm->ps->saberMove].animSetFlags|SETANIM_FLAG_HOLD, saberMoveData[pm->ps->saberMove].blendTime); +CNSTI4 1 +ARGI4 +ADDRLP4 76 +CNSTI4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 76 +INDIRI4 +ADDRGP4 saberMoveData+4 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 76 +INDIRI4 +ADDRGP4 saberMoveData+16 +ADDP4 +INDIRU4 +CNSTU4 2 +BORU4 +CVUI4 4 +ARGI4 +ADDRLP4 76 +INDIRI4 +ADDRGP4 saberMoveData+20 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1289 +;1289: return; +ADDRGP4 $465 +JUMPV +line 1291 +;1290: } +;1291: } +LABELV $523 +line 1293 +;1292: else +;1293: { +line 1294 +;1294: pm->ps->weaponstate = WEAPON_READY; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1295 +;1295: } +LABELV $524 +line 1298 +;1296: +;1297: // Now we react to a block action by the player's lightsaber. +;1298: if ( pm->ps->saberBlocked ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 520 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $532 +line 1299 +;1299: { +line 1300 +;1300: int firstSet = 0; +ADDRLP4 68 +CNSTI4 0 +ASGNI4 +line 1302 +;1301: +;1302: if (!pm->ps->weaponTime) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $534 +line 1303 +;1303: { +line 1304 +;1304: firstSet = 1; +ADDRLP4 68 +CNSTI4 1 +ASGNI4 +line 1305 +;1305: } +LABELV $534 +line 1307 +;1306: +;1307: switch ( pm->ps->saberBlocked ) +ADDRLP4 72 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 520 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 1 +LTI4 $536 +ADDRLP4 72 +INDIRI4 +CNSTI4 12 +GTI4 $536 +ADDRLP4 72 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $572-4 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $572 +address $539 +address $544 +address $562 +address $564 +address $566 +address $568 +address $570 +address $563 +address $565 +address $567 +address $569 +address $571 +code +line 1308 +;1308: { +LABELV $539 +line 1311 +;1309: case BLOCKED_PARRY_BROKEN: +;1310: //whatever parry we were is in now broken, play the appropriate knocked-away anim +;1311: { +line 1314 +;1312: int nextMove; +;1313: +;1314: if ( PM_SaberInBrokenParry( pm->ps->saberMove ) ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 84 +ADDRGP4 PM_SaberInBrokenParry +CALLI4 +ASGNI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 0 +EQI4 $540 +line 1315 +;1315: {//already have one...? +line 1316 +;1316: nextMove = pm->ps->saberMove; +ADDRLP4 80 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ASGNI4 +line 1317 +;1317: } +ADDRGP4 $541 +JUMPV +LABELV $540 +line 1319 +;1318: else +;1319: { +line 1320 +;1320: nextMove = PM_BrokenParryForParry( pm->ps->saberMove ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 88 +ADDRGP4 PM_BrokenParryForParry +CALLI4 +ASGNI4 +ADDRLP4 80 +ADDRLP4 88 +INDIRI4 +ASGNI4 +line 1321 +;1321: } +LABELV $541 +line 1322 +;1322: if ( nextMove != LS_NONE ) +ADDRLP4 80 +INDIRI4 +CNSTI4 0 +EQI4 $537 +line 1323 +;1323: { +line 1324 +;1324: PM_SetSaberMove( nextMove ); +ADDRLP4 80 +INDIRI4 +CVII2 4 +CVII4 2 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1325 +;1325: pm->ps->weaponTime = pm->ps->torsoTimer; +ADDRLP4 88 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 88 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDRLP4 88 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRI4 +ASGNI4 +line 1326 +;1326: } +line 1328 +;1327: else +;1328: {//Maybe in a knockaway? +line 1329 +;1329: } +line 1330 +;1330: } +line 1331 +;1331: break; +ADDRGP4 $537 +JUMPV +LABELV $544 +line 1335 +;1332: case BLOCKED_ATK_BOUNCE: +;1333: // If there is absolutely no blocked move in the chart, don't even mess with the animation. +;1334: // OR if we are already in a block or parry. +;1335: if (pm->ps->saberMove >= LS_T1_BR__R/*LS_BOUNCE_TOP*/ )//|| saberMoveData[pm->ps->saberMove].bounceMove == LS_NONE ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +CNSTI4 32 +LTI4 $545 +line 1336 +;1336: {//an actual bounce? Other bounces before this are actually transitions? +line 1337 +;1337: pm->ps->saberBlocked = BLOCKED_NONE; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 520 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1338 +;1338: } +ADDRGP4 $537 +JUMPV +LABELV $545 +line 1340 +;1339: else +;1340: { +line 1343 +;1341: int bounceMove; +;1342: +;1343: if ( pm->cmd.buttons & BUTTON_ATTACK ) +ADDRGP4 pm +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 0 +EQI4 $547 +line 1344 +;1344: {//transition to a new attack +line 1345 +;1345: int newQuad = PM_SaberMoveQuadrantForMovement( &pm->cmd ); +ADDRGP4 pm +INDIRP4 +CNSTI4 4 +ADDP4 +ARGP4 +ADDRLP4 88 +ADDRGP4 PM_SaberMoveQuadrantForMovement +CALLI4 +ASGNI4 +ADDRLP4 84 +ADDRLP4 88 +INDIRI4 +ASGNI4 +ADDRGP4 $550 +JUMPV +LABELV $549 +line 1347 +;1346: while ( newQuad == saberMoveData[pm->ps->saberMove].startQuad ) +;1347: {//player is still in same attack quad, don't repeat that attack because it looks bad, +line 1350 +;1348: //FIXME: try to pick one that might look cool? +;1349: //newQuad = Q_irand( Q_BR, Q_BL ); +;1350: newQuad = PM_irand_timesync( Q_BR, Q_BL ); +CNSTI4 0 +ARGI4 +CNSTI4 6 +ARGI4 +ADDRLP4 92 +ADDRGP4 PM_irand_timesync +CALLI4 +ASGNI4 +ADDRLP4 84 +ADDRLP4 92 +INDIRI4 +ASGNI4 +line 1352 +;1351: //FIXME: sanity check, just in case? +;1352: }//else player is switching up anyway, take the new attack dir +LABELV $550 +line 1346 +ADDRLP4 84 +INDIRI4 +CNSTI4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +EQI4 $549 +line 1353 +;1353: bounceMove = transitionMove[saberMoveData[pm->ps->saberMove].startQuad][newQuad]; +ADDRLP4 80 +ADDRLP4 84 +INDIRI4 +CNSTI4 2 +LSHI4 +CNSTI4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +CNSTI4 5 +LSHI4 +ADDRGP4 transitionMove +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 1354 +;1354: } +ADDRGP4 $548 +JUMPV +LABELV $547 +line 1356 +;1355: else +;1356: {//return to ready +line 1357 +;1357: if ( saberMoveData[pm->ps->saberMove].startQuad == Q_T ) +CNSTI4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $554 +line 1358 +;1358: { +line 1359 +;1359: bounceMove = LS_R_BL2TR; +ADDRLP4 80 +CNSTI4 27 +ASGNI4 +line 1360 +;1360: } +ADDRGP4 $555 +JUMPV +LABELV $554 +line 1361 +;1361: else if ( saberMoveData[pm->ps->saberMove].startQuad < Q_T ) +CNSTI4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +CNSTI4 3 +GEI4 $557 +line 1362 +;1362: { +line 1363 +;1363: bounceMove = LS_R_TL2BR+saberMoveData[pm->ps->saberMove].startQuad-Q_BR; +ADDRLP4 80 +CNSTI4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +CNSTI4 25 +ADDI4 +ASGNI4 +line 1364 +;1364: } +ADDRGP4 $558 +JUMPV +LABELV $557 +line 1366 +;1365: else// if ( saberMoveData[pm->ps->saberMove].startQuad > Q_T ) +;1366: { +line 1367 +;1367: bounceMove = LS_R_BR2TL+saberMoveData[pm->ps->saberMove].startQuad-Q_TL; +ADDRLP4 80 +CNSTI4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+8 +ADDP4 +INDIRI4 +CNSTI4 28 +ADDI4 +CNSTI4 4 +SUBI4 +ASGNI4 +line 1368 +;1368: } +LABELV $558 +LABELV $555 +line 1369 +;1369: } +LABELV $548 +line 1370 +;1370: PM_SetSaberMove( bounceMove ); +ADDRLP4 80 +INDIRI4 +CVII2 4 +CVII4 2 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1372 +;1371: +;1372: pm->ps->weaponTime = pm->ps->torsoTimer;//+saberMoveData[bounceMove].blendTime+SABER_BLOCK_DUR; +ADDRLP4 84 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 84 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDRLP4 84 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRI4 +ASGNI4 +line 1374 +;1373: +;1374: } +line 1375 +;1375: break; +ADDRGP4 $537 +JUMPV +LABELV $562 +line 1377 +;1376: case BLOCKED_UPPER_RIGHT: +;1377: PM_SetSaberMove( LS_PARRY_UR ); +CNSTI4 109 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1378 +;1378: break; +ADDRGP4 $537 +JUMPV +LABELV $563 +line 1380 +;1379: case BLOCKED_UPPER_RIGHT_PROJ: +;1380: PM_SetSaberMove( LS_REFLECT_UR ); +CNSTI4 114 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1381 +;1381: break; +ADDRGP4 $537 +JUMPV +LABELV $564 +line 1383 +;1382: case BLOCKED_UPPER_LEFT: +;1383: PM_SetSaberMove( LS_PARRY_UL ); +CNSTI4 110 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1384 +;1384: break; +ADDRGP4 $537 +JUMPV +LABELV $565 +line 1386 +;1385: case BLOCKED_UPPER_LEFT_PROJ: +;1386: PM_SetSaberMove( LS_REFLECT_UL ); +CNSTI4 115 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1387 +;1387: break; +ADDRGP4 $537 +JUMPV +LABELV $566 +line 1389 +;1388: case BLOCKED_LOWER_RIGHT: +;1389: PM_SetSaberMove( LS_PARRY_LR ); +CNSTI4 111 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1390 +;1390: break; +ADDRGP4 $537 +JUMPV +LABELV $567 +line 1392 +;1391: case BLOCKED_LOWER_RIGHT_PROJ: +;1392: PM_SetSaberMove( LS_REFLECT_LR ); +CNSTI4 116 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1393 +;1393: break; +ADDRGP4 $537 +JUMPV +LABELV $568 +line 1395 +;1394: case BLOCKED_LOWER_LEFT: +;1395: PM_SetSaberMove( LS_PARRY_LL ); +CNSTI4 112 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1396 +;1396: break; +ADDRGP4 $537 +JUMPV +LABELV $569 +line 1398 +;1397: case BLOCKED_LOWER_LEFT_PROJ: +;1398: PM_SetSaberMove( LS_REFLECT_LL); +CNSTI4 117 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1399 +;1399: break; +ADDRGP4 $537 +JUMPV +LABELV $570 +line 1401 +;1400: case BLOCKED_TOP: +;1401: PM_SetSaberMove( LS_PARRY_UP ); +CNSTI4 108 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1402 +;1402: break; +ADDRGP4 $537 +JUMPV +LABELV $571 +line 1404 +;1403: case BLOCKED_TOP_PROJ: +;1404: PM_SetSaberMove( LS_REFLECT_UP ); +CNSTI4 113 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1405 +;1405: break; +ADDRGP4 $537 +JUMPV +LABELV $536 +line 1407 +;1406: default: +;1407: pm->ps->saberBlocked = BLOCKED_NONE; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 520 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1408 +;1408: break; +LABELV $537 +line 1411 +;1409: } +;1410: +;1411: if (pm->ps->saberBlocked != BLOCKED_ATK_BOUNCE && pm->ps->saberBlocked != BLOCKED_PARRY_BROKEN && pm->ps->weaponTime < 1) +ADDRLP4 80 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 84 +ADDRLP4 80 +INDIRP4 +CNSTI4 520 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 2 +EQI4 $574 +ADDRLP4 88 +CNSTI4 1 +ASGNI4 +ADDRLP4 84 +INDIRI4 +ADDRLP4 88 +INDIRI4 +EQI4 $574 +ADDRLP4 80 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GEI4 $574 +line 1412 +;1412: { +line 1413 +;1413: pm->ps->torsoTimer = SABER_BLOCK_DUR; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 96 +ADDP4 +CNSTI4 150 +ASGNI4 +line 1414 +;1414: pm->ps->weaponTime = pm->ps->torsoTimer; +ADDRLP4 92 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 92 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDRLP4 92 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRI4 +ASGNI4 +line 1415 +;1415: } +LABELV $574 +line 1417 +;1416: +;1417: if (firstSet) +ADDRLP4 68 +INDIRI4 +CNSTI4 0 +EQI4 $576 +line 1418 +;1418: { +line 1419 +;1419: return; +ADDRGP4 $465 +JUMPV +LABELV $576 +line 1423 +;1420: } +;1421: +;1422: // Charging is like a lead-up before attacking again. This is an appropriate use, or we can create a new weaponstate for blocking +;1423: pm->ps->weaponstate = WEAPON_READY; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1426 +;1424: +;1425: // Done with block, so stop these active weapon branches. +;1426: return; +ADDRGP4 $465 +JUMPV +LABELV $532 +LABELV $500 +line 1432 +;1427: } +;1428: +;1429:weapChecks: +;1430: // check for weapon change +;1431: // can't change if weapon is firing, but can change again if lowering or raising +;1432: if ( pm->ps->weaponTime <= 0 || pm->ps->weaponstate != WEAPON_FIRING ) { +ADDRLP4 68 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $580 +ADDRLP4 68 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +CNSTI4 3 +EQI4 $578 +LABELV $580 +line 1433 +;1433: if ( pm->ps->weapon != pm->cmd.weapon ) { +ADDRLP4 72 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +ADDRLP4 72 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRU1 +CVUI4 1 +EQI4 $581 +line 1434 +;1434: PM_BeginWeaponChange( pm->cmd.weapon ); +ADDRGP4 pm +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRU1 +CVUI4 1 +ARGI4 +ADDRGP4 PM_BeginWeaponChange +CALLV +pop +line 1435 +;1435: } +LABELV $581 +line 1436 +;1436: } +LABELV $578 +line 1438 +;1437: +;1438: if ( pm->ps->weaponTime > 0 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $583 +line 1439 +;1439: { +line 1440 +;1440: return; +ADDRGP4 $465 +JUMPV +LABELV $583 +line 1448 +;1441: } +;1442: +;1443: // ********************************************************* +;1444: // WEAPON_DROPPING +;1445: // ********************************************************* +;1446: +;1447: // change weapon if time +;1448: if ( pm->ps->weaponstate == WEAPON_DROPPING ) { +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $585 +line 1449 +;1449: PM_FinishWeaponChange(); +ADDRGP4 PM_FinishWeaponChange +CALLV +pop +line 1450 +;1450: return; +ADDRGP4 $465 +JUMPV +LABELV $585 +line 1457 +;1451: } +;1452: +;1453: // ********************************************************* +;1454: // WEAPON_RAISING +;1455: // ********************************************************* +;1456: +;1457: if ( pm->ps->weaponstate == WEAPON_RAISING ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $587 +line 1458 +;1458: {//Just selected the weapon +line 1459 +;1459: pm->ps->weaponstate = WEAPON_IDLE; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +CNSTI4 6 +ASGNI4 +line 1460 +;1460: if((pm->ps->legsAnim & ~ANIM_TOGGLEBIT) == BOTH_WALK1 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +CNSTI4 723 +NEI4 $589 +line 1461 +;1461: { +line 1462 +;1462: PM_SetAnim(SETANIM_TORSO,BOTH_WALK1,SETANIM_FLAG_NORMAL, 100); +CNSTI4 1 +ARGI4 +CNSTI4 723 +ARGI4 +CNSTI4 0 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1463 +;1463: } +ADDRGP4 $590 +JUMPV +LABELV $589 +line 1464 +;1464: else if((pm->ps->legsAnim & ~ANIM_TOGGLEBIT) == BOTH_RUN2 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +CNSTI4 734 +NEI4 $591 +line 1465 +;1465: { +line 1466 +;1466: PM_SetAnim(SETANIM_TORSO,BOTH_RUN2,SETANIM_FLAG_NORMAL, 100); +CNSTI4 1 +ARGI4 +CNSTI4 734 +ARGI4 +CNSTI4 0 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1467 +;1467: } +ADDRGP4 $592 +JUMPV +LABELV $591 +line 1468 +;1468: else if((pm->ps->legsAnim & ~ANIM_TOGGLEBIT) == BOTH_WALK2 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +CNSTI4 724 +NEI4 $593 +line 1469 +;1469: { +line 1470 +;1470: PM_SetAnim(SETANIM_TORSO,BOTH_WALK2,SETANIM_FLAG_NORMAL, 100); +CNSTI4 1 +ARGI4 +CNSTI4 724 +ARGI4 +CNSTI4 0 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1471 +;1471: } +ADDRGP4 $594 +JUMPV +LABELV $593 +line 1473 +;1472: else +;1473: { +line 1474 +;1474: PM_SetAnim(SETANIM_TORSO,PM_GetSaberStance(),SETANIM_FLAG_NORMAL, 100); +ADDRLP4 72 +ADDRGP4 PM_GetSaberStance +CALLI4 +ASGNI4 +CNSTI4 1 +ARGI4 +ADDRLP4 72 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1475 +;1475: } +LABELV $594 +LABELV $592 +LABELV $590 +line 1477 +;1476: +;1477: if (pm->ps->weaponstate == WEAPON_RAISING) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $595 +line 1478 +;1478: { +line 1479 +;1479: return; +ADDRGP4 $465 +JUMPV +LABELV $595 +line 1482 +;1480: } +;1481: +;1482: } +LABELV $587 +line 1484 +;1483: +;1484: if (checkOnlyWeap) +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $597 +line 1485 +;1485: { +line 1486 +;1486: return; +ADDRGP4 $465 +JUMPV +LABELV $597 +line 1495 +;1487: } +;1488: +;1489: // ********************************************************* +;1490: // Check for WEAPON ATTACK +;1491: // ********************************************************* +;1492: +;1493: // NOTENOTE This is simply a client-side struct. Anything that is needed client and server should be moved to bg_weapon. +;1494: +;1495: if(!delayed_fire) +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $599 +line 1496 +;1496: { +line 1498 +;1497: // Start with the current move, and cross index it with the current control states. +;1498: if ( pm->ps->saberMove > LS_NONE && pm->ps->saberMove < LS_MOVE_MAX ) +ADDRLP4 72 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +LEI4 $601 +ADDRLP4 72 +INDIRI4 +CNSTI4 118 +GEI4 $601 +line 1499 +;1499: { +line 1500 +;1500: curmove = pm->ps->saberMove; +ADDRLP4 4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ASGNI4 +line 1501 +;1501: } +ADDRGP4 $602 +JUMPV +LABELV $601 +line 1503 +;1502: else +;1503: { +line 1504 +;1504: curmove = LS_READY; +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +line 1505 +;1505: } +LABELV $602 +line 1507 +;1506: // check for fire +;1507: if ( !(pm->cmd.buttons & (BUTTON_ATTACK/*|BUTTON_ALT_ATTACK*/)) ) +ADDRGP4 pm +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 0 +NEI4 $603 +line 1508 +;1508: { +line 1509 +;1509: if (pm->ps->weaponTime != 0) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $605 +line 1510 +;1510: {//Still firing +line 1511 +;1511: pm->ps->weaponstate = WEAPON_FIRING; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +CNSTI4 3 +ASGNI4 +line 1512 +;1512: } +ADDRGP4 $606 +JUMPV +LABELV $605 +line 1513 +;1513: else if ( pm->ps->weaponstate != WEAPON_READY ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $607 +line 1514 +;1514: { +line 1515 +;1515: pm->ps->weaponstate = WEAPON_IDLE; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +CNSTI4 6 +ASGNI4 +line 1516 +;1516: } +LABELV $607 +LABELV $606 +line 1518 +;1517: //Check for finishing an anim if necc. +;1518: if ( curmove >= LS_S_TL2BR && curmove <= LS_S_T2B ) +ADDRLP4 76 +ADDRLP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 18 +LTI4 $609 +ADDRLP4 76 +INDIRI4 +CNSTI4 24 +GTI4 $609 +line 1519 +;1519: {//started a swing, must continue from here +line 1520 +;1520: newmove = LS_A_TL2BR + (curmove-LS_S_TL2BR); +ADDRLP4 8 +ADDRLP4 4 +INDIRI4 +CNSTI4 18 +SUBI4 +CNSTI4 4 +ADDI4 +ASGNI4 +line 1521 +;1521: } +ADDRGP4 $610 +JUMPV +LABELV $609 +line 1522 +;1522: else if ( curmove >= LS_A_TL2BR && curmove <= LS_A_T2B ) +ADDRLP4 80 +ADDRLP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 80 +INDIRI4 +CNSTI4 4 +LTI4 $611 +ADDRLP4 80 +INDIRI4 +CNSTI4 10 +GTI4 $611 +line 1523 +;1523: {//finished an attack, must continue from here +line 1524 +;1524: newmove = LS_R_TL2BR + (curmove-LS_A_TL2BR); +ADDRLP4 8 +ADDRLP4 4 +INDIRI4 +CNSTI4 4 +SUBI4 +CNSTI4 25 +ADDI4 +ASGNI4 +line 1525 +;1525: } +ADDRGP4 $612 +JUMPV +LABELV $611 +line 1526 +;1526: else if ( PM_SaberInTransition( curmove ) ) +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 84 +ADDRGP4 PM_SaberInTransition +CALLI4 +ASGNI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 0 +EQI4 $613 +line 1527 +;1527: {//in a transition, must play sequential attack +line 1528 +;1528: newmove = saberMoveData[curmove].chain_attack; +ADDRLP4 8 +CNSTI4 40 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+32 +ADDP4 +INDIRI4 +ASGNI4 +line 1529 +;1529: } +ADDRGP4 $614 +JUMPV +LABELV $613 +line 1530 +;1530: else if ( PM_SaberInBounce( curmove ) ) +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 88 +ADDRGP4 PM_SaberInBounce +CALLI4 +ASGNI4 +ADDRLP4 88 +INDIRI4 +CNSTI4 0 +EQI4 $616 +line 1531 +;1531: {//in a bounce +line 1532 +;1532: newmove = saberMoveData[curmove].chain_idle;//oops, not attacking, so don't chain +ADDRLP4 8 +CNSTI4 40 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+28 +ADDP4 +INDIRI4 +ASGNI4 +line 1533 +;1533: } +ADDRGP4 $617 +JUMPV +LABELV $616 +line 1535 +;1534: else +;1535: {//FIXME: what about returning from a parry? +line 1536 +;1536: PM_SetSaberMove( LS_READY ); +CNSTI4 1 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1537 +;1537: return; +ADDRGP4 $465 +JUMPV +LABELV $617 +LABELV $614 +LABELV $612 +LABELV $610 +line 1539 +;1538: } +;1539: } +LABELV $603 +line 1544 +;1540: +;1541: // *************************************************** +;1542: // Pressing attack, so we must look up the proper attack move. +;1543: +;1544: saberInAir = qtrue; +ADDRLP4 24 +CNSTI4 1 +ASGNI4 +line 1546 +;1545: +;1546: if ( pm->ps->weaponTime > 0 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $619 +line 1547 +;1547: { // Last attack is not yet complete. +line 1548 +;1548: pm->ps->weaponstate = WEAPON_FIRING; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +CNSTI4 3 +ASGNI4 +line 1549 +;1549: return; +ADDRGP4 $465 +JUMPV +LABELV $619 +line 1552 +;1550: } +;1551: else +;1552: { +line 1553 +;1553: int both = qfalse; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +line 1555 +;1554: +;1555: if ( curmove >= LS_PARRY_UP && curmove <= LS_REFLECT_LL ) +ADDRLP4 80 +ADDRLP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 80 +INDIRI4 +CNSTI4 108 +LTI4 $621 +ADDRLP4 80 +INDIRI4 +CNSTI4 117 +GTI4 $621 +line 1556 +;1556: {//from a parry or deflection, can go directly into an attack (?) +line 1557 +;1557: switch ( saberMoveData[curmove].endQuad ) +ADDRLP4 84 +CNSTI4 40 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+12 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 0 +LTI4 $623 +ADDRLP4 84 +INDIRI4 +CNSTI4 6 +GTI4 $623 +ADDRLP4 84 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $632 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $632 +address $630 +address $623 +address $628 +address $627 +address $629 +address $623 +address $631 +code +line 1558 +;1558: { +LABELV $627 +line 1560 +;1559: case Q_T: +;1560: newmove = LS_A_T2B; +ADDRLP4 8 +CNSTI4 10 +ASGNI4 +line 1561 +;1561: break; +ADDRGP4 $624 +JUMPV +LABELV $628 +line 1563 +;1562: case Q_TR: +;1563: newmove = LS_A_TL2BR; +ADDRLP4 8 +CNSTI4 4 +ASGNI4 +line 1564 +;1564: break; +ADDRGP4 $624 +JUMPV +LABELV $629 +line 1566 +;1565: case Q_TL: +;1566: newmove = LS_A_TR2BL; +ADDRLP4 8 +CNSTI4 9 +ASGNI4 +line 1567 +;1567: break; +ADDRGP4 $624 +JUMPV +LABELV $630 +line 1569 +;1568: case Q_BR: +;1569: newmove = LS_A_BR2TL; +ADDRLP4 8 +CNSTI4 7 +ASGNI4 +line 1570 +;1570: break; +ADDRGP4 $624 +JUMPV +LABELV $631 +line 1572 +;1571: case Q_BL: +;1572: newmove = LS_A_BL2TR; +ADDRLP4 8 +CNSTI4 6 +ASGNI4 +line 1573 +;1573: break; +LABELV $623 +LABELV $624 +line 1576 +;1574: //shouldn't be a parry that ends at L, R or B +;1575: } +;1576: } +LABELV $621 +line 1578 +;1577: +;1578: if ( newmove != LS_NONE ) +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $633 +line 1579 +;1579: {//have a valid, final LS_ move picked, so skip findingt he transition move and just get the anim +line 1580 +;1580: anim = saberMoveData[newmove].animToUse; +ADDRLP4 16 +CNSTI4 40 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+4 +ADDP4 +INDIRI4 +ASGNI4 +line 1581 +;1581: } +LABELV $633 +line 1584 +;1582: +;1583: //FIXME: diagonal dirs use the figure-eight attacks from ready pose? +;1584: if ( anim == -1 ) +ADDRLP4 16 +INDIRI4 +CNSTI4 -1 +NEI4 $636 +line 1585 +;1585: { +line 1587 +;1586: //FIXME: take FP_SABER_OFFENSE into account here somehow? +;1587: if ( curmove >= LS_T1_BR__R && curmove <= LS_T1_BL__L ) +ADDRLP4 84 +ADDRLP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 32 +LTI4 $638 +ADDRLP4 84 +INDIRI4 +CNSTI4 73 +GTI4 $638 +line 1588 +;1588: {//in a transition, must play sequential attack +line 1589 +;1589: newmove = saberMoveData[curmove].chain_attack; +ADDRLP4 8 +CNSTI4 40 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+32 +ADDP4 +INDIRI4 +ASGNI4 +line 1590 +;1590: } +ADDRGP4 $639 +JUMPV +LABELV $638 +line 1591 +;1591: else if ( curmove >= LS_S_TL2BR && curmove <= LS_S_T2B ) +ADDRLP4 88 +ADDRLP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 88 +INDIRI4 +CNSTI4 18 +LTI4 $641 +ADDRLP4 88 +INDIRI4 +CNSTI4 24 +GTI4 $641 +line 1592 +;1592: {//started a swing, must continue from here +line 1593 +;1593: newmove = LS_A_TL2BR + (curmove-LS_S_TL2BR); +ADDRLP4 8 +ADDRLP4 4 +INDIRI4 +CNSTI4 18 +SUBI4 +CNSTI4 4 +ADDI4 +ASGNI4 +line 1594 +;1594: } +ADDRGP4 $642 +JUMPV +LABELV $641 +line 1596 +;1595: else +;1596: { +line 1597 +;1597: if ( PM_SaberKataDone() ) +ADDRLP4 92 +ADDRGP4 PM_SaberKataDone +CALLI4 +ASGNI4 +ADDRLP4 92 +INDIRI4 +CNSTI4 0 +EQI4 $643 +line 1598 +;1598: {//we came from a bounce and cannot chain to another attack because our kata is done +line 1599 +;1599: newmove = saberMoveData[curmove].chain_idle; +ADDRLP4 8 +CNSTI4 40 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+28 +ADDP4 +INDIRI4 +ASGNI4 +line 1600 +;1600: } +ADDRGP4 $644 +JUMPV +LABELV $643 +line 1602 +;1601: else +;1602: { +line 1603 +;1603: saberMoveName_t checkMove = PM_SaberAttackForMovement(curmove); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 100 +ADDRGP4 PM_SaberAttackForMovement +CALLI4 +ASGNI4 +ADDRLP4 96 +ADDRLP4 100 +INDIRI4 +ASGNI4 +line 1604 +;1604: if (checkMove != -1) +ADDRLP4 96 +INDIRI4 +CNSTI4 -1 +EQI4 $646 +line 1605 +;1605: { +line 1606 +;1606: newmove = checkMove; +ADDRLP4 8 +ADDRLP4 96 +INDIRI4 +ASGNI4 +line 1607 +;1607: } +LABELV $646 +line 1608 +;1608: } +LABELV $644 +line 1609 +;1609: } +LABELV $642 +LABELV $639 +line 1617 +;1610: /* +;1611: if ( newmove == LS_NONE ) +;1612: {//FIXME: should we allow this? Are there some anims that you should never be able to chain into an attack? +;1613: //only curmove that might get in here is LS_NONE, LS_DRAW, LS_PUTAWAY and the LS_R_ returns... all of which are in Q_R +;1614: newmove = PM_AttackMoveForQuad( saberMoveData[curmove].endQuad ); +;1615: } +;1616: */ +;1617: if ( newmove != LS_NONE ) +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $648 +line 1618 +;1618: { +line 1620 +;1619: //Now get the proper transition move +;1620: newmove = PM_SaberAnimTransitionAnim( curmove, newmove ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 8 +INDIRI4 +ARGI4 +ADDRLP4 92 +ADDRGP4 PM_SaberAnimTransitionAnim +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 92 +INDIRI4 +ASGNI4 +line 1626 +;1621: // NOTENOTE Had to remove this concept since there is no gent in pmove. +;1622: /* +;1623: if ( PM_HasAnimation( pm->gent, saberMoveData[newmove].animToUse ) ) +;1624: */ +;1625: +;1626: assert( bgGlobalAnimations[saberMoveData[newmove].animToUse].firstFrame != 0 || +line 1629 +;1627: bgGlobalAnimations[saberMoveData[newmove].animToUse].numFrames != 0); +;1628: +;1629: if (1) +line 1630 +;1630: { +line 1631 +;1631: anim = saberMoveData[newmove].animToUse; +ADDRLP4 16 +CNSTI4 40 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+4 +ADDP4 +INDIRI4 +ASGNI4 +line 1632 +;1632: } +LABELV $650 +line 1633 +;1633: } +LABELV $648 +line 1634 +;1634: } +LABELV $636 +line 1636 +;1635: +;1636: if (anim == -1) +ADDRLP4 16 +INDIRI4 +CNSTI4 -1 +NEI4 $653 +line 1637 +;1637: {//not side-stepping, pick neutral anim +line 1639 +;1638: // Add randomness for prototype? +;1639: newmove = saberMoveData[curmove].chain_attack; +ADDRLP4 8 +CNSTI4 40 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+32 +ADDP4 +INDIRI4 +ASGNI4 +line 1641 +;1640: +;1641: anim= saberMoveData[newmove].animToUse; +ADDRLP4 16 +CNSTI4 40 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+4 +ADDP4 +INDIRI4 +ASGNI4 +line 1643 +;1642: +;1643: if ( !pm->cmd.forwardmove && !pm->cmd.rightmove && pm->cmd.upmove >= 0 && pm->ps->groundEntityNum != ENTITYNUM_NONE ) +ADDRLP4 84 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 88 +CNSTI4 0 +ASGNI4 +ADDRLP4 84 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 88 +INDIRI4 +NEI4 $657 +ADDRLP4 84 +INDIRP4 +CNSTI4 29 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 88 +INDIRI4 +NEI4 $657 +ADDRLP4 84 +INDIRP4 +CNSTI4 30 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 88 +INDIRI4 +LTI4 $657 +ADDRLP4 84 +INDIRP4 +INDIRP4 +CNSTI4 84 +ADDP4 +INDIRI4 +CNSTI4 1023 +EQI4 $657 +line 1644 +;1644: {//not moving at all, so set the anim on entire body +line 1645 +;1645: both = qtrue; +ADDRLP4 76 +CNSTI4 1 +ASGNI4 +line 1646 +;1646: } +LABELV $657 +line 1648 +;1647: +;1648: } +LABELV $653 +line 1650 +;1649: +;1650: if ( anim == -1) +ADDRLP4 16 +INDIRI4 +CNSTI4 -1 +NEI4 $659 +line 1651 +;1651: { +line 1652 +;1652: if((pm->ps->legsAnim & ~ANIM_TOGGLEBIT) == BOTH_WALK1 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +CNSTI4 723 +NEI4 $661 +line 1653 +;1653: { +line 1654 +;1654: anim = BOTH_WALK1; +ADDRLP4 16 +CNSTI4 723 +ASGNI4 +line 1655 +;1655: } +ADDRGP4 $662 +JUMPV +LABELV $661 +line 1656 +;1656: else if((pm->ps->legsAnim & ~ANIM_TOGGLEBIT) == BOTH_RUN2 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +CNSTI4 734 +NEI4 $663 +line 1657 +;1657: { +line 1658 +;1658: anim = BOTH_RUN2; +ADDRLP4 16 +CNSTI4 734 +ASGNI4 +line 1659 +;1659: } +ADDRGP4 $664 +JUMPV +LABELV $663 +line 1660 +;1660: else if((pm->ps->legsAnim & ~ANIM_TOGGLEBIT) == BOTH_WALK2 ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +CNSTI4 724 +NEI4 $665 +line 1661 +;1661: { +line 1662 +;1662: anim = BOTH_WALK2; +ADDRLP4 16 +CNSTI4 724 +ASGNI4 +line 1663 +;1663: } +ADDRGP4 $666 +JUMPV +LABELV $665 +line 1665 +;1664: else +;1665: { +line 1666 +;1666: anim = PM_GetSaberStance(); +ADDRLP4 84 +ADDRGP4 PM_GetSaberStance +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 84 +INDIRI4 +ASGNI4 +line 1667 +;1667: } +LABELV $666 +LABELV $664 +LABELV $662 +line 1668 +;1668: newmove = LS_READY; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 1669 +;1669: } +LABELV $659 +line 1671 +;1670: +;1671: if ( !pm->ps->saberActive ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 508 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $667 +line 1672 +;1672: {//turn on the saber if it's not on +line 1673 +;1673: pm->ps->saberActive = qtrue; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 508 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1674 +;1674: } +LABELV $667 +line 1676 +;1675: +;1676: PM_SetSaberMove( newmove ); +ADDRLP4 8 +INDIRI4 +CVII2 4 +CVII4 2 +ARGI4 +ADDRGP4 PM_SetSaberMove +CALLV +pop +line 1678 +;1677: +;1678: if ( both ) +ADDRLP4 76 +INDIRI4 +CNSTI4 0 +EQI4 $669 +line 1679 +;1679: { +line 1680 +;1680: PM_SetAnim(SETANIM_LEGS,anim,SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 100); +CNSTI4 2 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +CNSTI4 3 +ARGI4 +CNSTI4 100 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1681 +;1681: } +LABELV $669 +line 1684 +;1682: +;1683: //don't fire again until anim is done +;1684: pm->ps->weaponTime = pm->ps->torsoTimer; +ADDRLP4 84 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 84 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDRLP4 84 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRI4 +ASGNI4 +line 1685 +;1685: } +line 1686 +;1686: } +LABELV $599 +line 1692 +;1687: +;1688: // ********************************************************* +;1689: // WEAPON_FIRING +;1690: // ********************************************************* +;1691: +;1692: pm->ps->weaponstate = WEAPON_FIRING; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 152 +ADDP4 +CNSTI4 3 +ASGNI4 +line 1694 +;1693: +;1694: amount = weaponData[pm->ps->weapon].energyPerShot; +ADDRLP4 28 +CNSTI4 56 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 weaponData+8 +ADDP4 +INDIRI4 +ASGNI4 +line 1696 +;1695: +;1696: addTime = pm->ps->weaponTime; +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +ASGNI4 +line 1698 +;1697: +;1698: pm->ps->saberAttackSequence = pm->ps->torsoAnim; +ADDRLP4 72 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +CNSTI4 732 +ADDP4 +ADDRLP4 72 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +ASGNI4 +line 1699 +;1699: if ( !addTime ) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $672 +line 1700 +;1700: { +line 1701 +;1701: addTime = weaponData[pm->ps->weapon].fireTime; +ADDRLP4 0 +CNSTI4 56 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 weaponData+12 +ADDP4 +INDIRI4 +ASGNI4 +line 1702 +;1702: } +LABELV $672 +line 1703 +;1703: pm->ps->weaponTime = addTime; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1704 +;1704:} +LABELV $465 +endproc PM_WeaponLightsaber 104 16 +export PM_SetSaberMove +proc PM_SetSaberMove 52 16 +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CVII2 4 +ASGNI2 +line 1707 +;1705: +;1706:void PM_SetSaberMove(short newMove) +;1707:{ +line 1708 +;1708: unsigned int setflags = saberMoveData[newMove].animSetFlags; +ADDRLP4 4 +CNSTI4 40 +ADDRFP4 0 +INDIRI2 +CVII4 2 +MULI4 +ADDRGP4 saberMoveData+16 +ADDP4 +INDIRU4 +ASGNU4 +line 1709 +;1709: int anim = saberMoveData[newMove].animToUse; +ADDRLP4 0 +CNSTI4 40 +ADDRFP4 0 +INDIRI2 +CVII4 2 +MULI4 +ADDRGP4 saberMoveData+4 +ADDP4 +INDIRI4 +ASGNI4 +line 1710 +;1710: int parts = SETANIM_TORSO; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 1712 +;1711: +;1712: if ( newMove == LS_READY ) +ADDRFP4 0 +INDIRI2 +CVII4 2 +CNSTI4 1 +NEI4 $678 +line 1713 +;1713: {//finished with a kata, reset attack counter +line 1714 +;1714: pm->ps->saberAttackChainCount = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1296 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1715 +;1715: } +ADDRGP4 $679 +JUMPV +LABELV $678 +line 1716 +;1716: else if ( BG_SaberInAttack( newMove ) ) +ADDRFP4 0 +INDIRI2 +CVII4 2 +ARGI4 +ADDRLP4 12 +ADDRGP4 BG_SaberInAttack +CALLI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $680 +line 1717 +;1717: {//continuing with a kata, increment attack counter +line 1718 +;1718: pm->ps->saberAttackChainCount++; +ADDRLP4 16 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1296 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1719 +;1719: } +LABELV $680 +LABELV $679 +line 1721 +;1720: +;1721: if (pm->ps->saberAttackChainCount > 16) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1296 +ADDP4 +INDIRI4 +CNSTI4 16 +LEI4 $682 +line 1722 +;1722: { //for the sake of being able to send the value over the net within a reasonable bit count +line 1723 +;1723: pm->ps->saberAttackChainCount = 16; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1296 +ADDP4 +CNSTI4 16 +ASGNI4 +line 1724 +;1724: } +LABELV $682 +line 1726 +;1725: +;1726: if ( pm->ps->fd.saberAnimLevel > FORCE_LEVEL_1 && +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1216 +ADDP4 +INDIRI4 +CNSTI4 1 +LEI4 $684 +ADDRFP4 0 +INDIRI2 +CVII4 2 +ARGI4 +ADDRLP4 16 +ADDRGP4 BG_SaberInIdle +CALLI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $684 +ADDRFP4 0 +INDIRI2 +CVII4 2 +ARGI4 +ADDRLP4 20 +ADDRGP4 PM_SaberInParry +CALLI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $684 +ADDRFP4 0 +INDIRI2 +CVII4 2 +ARGI4 +ADDRLP4 24 +ADDRGP4 PM_SaberInReflect +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +NEI4 $684 +ADDRFP4 0 +INDIRI2 +CVII4 2 +ARGI4 +ADDRLP4 28 +ADDRGP4 BG_SaberInSpecial +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +NEI4 $684 +line 1728 +;1727: !BG_SaberInIdle( newMove ) && !PM_SaberInParry( newMove ) && !PM_SaberInReflect( newMove ) && !BG_SaberInSpecial(newMove)) +;1728: {//readies, parries and reflections have only 1 level +line 1730 +;1729: //increment the anim to the next level of saber anims +;1730: if ( !PM_SaberInTransition( newMove ) ) +ADDRFP4 0 +INDIRI2 +CVII4 2 +ARGI4 +ADDRLP4 32 +ADDRGP4 PM_SaberInTransition +CALLI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +NEI4 $686 +line 1731 +;1731: {//FIXME: only have level 1 transitions for now +line 1732 +;1732: anim += (pm->ps->fd.saberAnimLevel-FORCE_LEVEL_1) * SABER_ANIM_GROUP_SIZE; +ADDRLP4 36 +CNSTI4 77 +ASGNI4 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRLP4 36 +INDIRI4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1216 +ADDP4 +INDIRI4 +MULI4 +ADDRLP4 36 +INDIRI4 +SUBI4 +ADDI4 +ASGNI4 +line 1733 +;1733: } +LABELV $686 +line 1734 +;1734: } +LABELV $684 +line 1737 +;1735: +;1736: // If the move does the same animation as the last one, we need to force a restart... +;1737: if ( saberMoveData[pm->ps->saberMove].animToUse == anim && newMove > LS_PUTAWAY) +CNSTI4 40 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 saberMoveData+4 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +NEI4 $688 +ADDRFP4 0 +INDIRI2 +CVII4 2 +CNSTI4 3 +LEI4 $688 +line 1738 +;1738: { +line 1739 +;1739: setflags |= SETANIM_FLAG_RESTART; +ADDRLP4 4 +ADDRLP4 4 +INDIRU4 +CNSTU4 4 +BORU4 +ASGNU4 +line 1740 +;1740: } +LABELV $688 +line 1743 +;1741: +;1742: //saber torso anims should always be highest priority +;1743: setflags |= SETANIM_FLAG_OVERRIDE; +ADDRLP4 4 +ADDRLP4 4 +INDIRU4 +CNSTU4 1 +BORU4 +ASGNU4 +line 1745 +;1744: +;1745: if ( BG_InSaberStandAnim(anim) || anim == BOTH_STAND1 ) +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 32 +ADDRGP4 BG_InSaberStandAnim +CALLI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +NEI4 $693 +ADDRLP4 0 +INDIRI4 +CNSTI4 550 +NEI4 $691 +LABELV $693 +line 1746 +;1746: { +line 1747 +;1747: anim = (pm->ps->legsAnim & ~ANIM_TOGGLEBIT); +ADDRLP4 0 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +line 1749 +;1748: +;1749: if ((anim >= BOTH_STAND1 && anim <= BOTH_STAND4TOATTACK2) || +ADDRLP4 0 +INDIRI4 +CNSTI4 550 +LTI4 $697 +ADDRLP4 0 +INDIRI4 +CNSTI4 571 +LEI4 $696 +LABELV $697 +ADDRLP4 0 +INDIRI4 +CNSTI4 954 +LTI4 $694 +ADDRLP4 0 +INDIRI4 +CNSTI4 985 +GTI4 $694 +LABELV $696 +line 1751 +;1750: (anim >= TORSO_DROPWEAP1 && anim <= TORSO_WEAPONIDLE12)) +;1751: { //If standing then use the special saber stand anim +line 1752 +;1752: anim = PM_GetSaberStance(); +ADDRLP4 44 +ADDRGP4 PM_GetSaberStance +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 44 +INDIRI4 +ASGNI4 +line 1753 +;1753: } +LABELV $694 +line 1755 +;1754: +;1755: if (pm->ps->pm_flags & PMF_DUCKED) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 0 +EQI4 $698 +line 1756 +;1756: { //Playing torso walk anims while crouched makes you look like a monkey +line 1757 +;1757: anim = PM_GetSaberStance(); +ADDRLP4 44 +ADDRGP4 PM_GetSaberStance +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 44 +INDIRI4 +ASGNI4 +line 1758 +;1758: } +LABELV $698 +line 1760 +;1759: +;1760: if (anim == BOTH_WALKBACK1 || anim == BOTH_WALKBACK2) +ADDRLP4 0 +INDIRI4 +CNSTI4 748 +EQI4 $702 +ADDRLP4 0 +INDIRI4 +CNSTI4 749 +NEI4 $700 +LABELV $702 +line 1761 +;1761: { //normal stance when walking backward so saber doesn't look like it's cutting through leg +line 1762 +;1762: anim = PM_GetSaberStance(); +ADDRLP4 48 +ADDRGP4 PM_GetSaberStance +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 48 +INDIRI4 +ASGNI4 +line 1763 +;1763: } +LABELV $700 +line 1765 +;1764: +;1765: parts = SETANIM_TORSO; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 1766 +;1766: } +LABELV $691 +line 1768 +;1767: +;1768: if ( newMove == LS_A_LUNGE +ADDRLP4 36 +ADDRFP4 0 +INDIRI2 +CVII4 2 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 14 +EQI4 $710 +ADDRLP4 36 +INDIRI4 +CNSTI4 15 +EQI4 $710 +ADDRLP4 36 +INDIRI4 +CNSTI4 11 +EQI4 $710 +ADDRLP4 36 +INDIRI4 +CNSTI4 12 +EQI4 $710 +ADDRLP4 36 +INDIRI4 +CNSTI4 13 +EQI4 $710 +ADDRLP4 36 +INDIRI4 +CNSTI4 16 +EQI4 $710 +ADDRLP4 36 +INDIRI4 +CNSTI4 17 +NEI4 $703 +LABELV $710 +line 1775 +;1769: || newMove == LS_A_JUMP_T__B_ +;1770: || newMove == LS_A_BACKSTAB +;1771: || newMove == LS_A_BACK +;1772: || newMove == LS_A_BACK_CR +;1773: || newMove == LS_A_FLIP_STAB +;1774: || newMove == LS_A_FLIP_SLASH ) +;1775: { +line 1776 +;1776: parts = SETANIM_BOTH; +ADDRLP4 8 +CNSTI4 3 +ASGNI4 +line 1777 +;1777: } +ADDRGP4 $704 +JUMPV +LABELV $703 +line 1778 +;1778: else if ( BG_SpinningSaberAnim( anim ) ) +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 40 +ADDRGP4 BG_SpinningSaberAnim +CALLI4 +ASGNI4 +ADDRLP4 40 +INDIRI4 +CNSTI4 0 +EQI4 $711 +line 1779 +;1779: {//spins must be played on entire body +line 1780 +;1780: parts = SETANIM_BOTH; +ADDRLP4 8 +CNSTI4 3 +ASGNI4 +line 1781 +;1781: } +LABELV $711 +LABELV $704 +line 1782 +;1782: PM_SetAnim(parts, anim, setflags|SETANIM_FLAG_HOLD, saberMoveData[newMove].blendTime); +ADDRLP4 8 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +INDIRU4 +CNSTU4 2 +BORU4 +CVUI4 4 +ARGI4 +CNSTI4 40 +ADDRFP4 0 +INDIRI2 +CVII4 2 +MULI4 +ADDRGP4 saberMoveData+20 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 PM_SetAnim +CALLV +pop +line 1784 +;1783: +;1784: if ( (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == anim ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ADDRLP4 0 +INDIRI4 +NEI4 $714 +line 1785 +;1785: {//successfully changed anims +line 1788 +;1786: //special check for *starting* a saber swing +;1787: //playing at attack +;1788: if ( BG_SaberInAttack( newMove ) || BG_SaberInSpecialAttack( anim ) ) +ADDRFP4 0 +INDIRI2 +CVII4 2 +ARGI4 +ADDRLP4 44 +ADDRGP4 BG_SaberInAttack +CALLI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +NEI4 $718 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 48 +ADDRGP4 BG_SaberInSpecialAttack +CALLI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +EQI4 $716 +LABELV $718 +line 1789 +;1789: { +line 1790 +;1790: if ( pm->ps->saberMove != newMove ) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI2 +CVII4 2 +EQI4 $719 +line 1791 +;1791: {//wasn't playing that attack before +line 1792 +;1792: PM_AddEvent(EV_SABER_ATTACK); +CNSTI4 26 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 1793 +;1793: } +LABELV $719 +line 1794 +;1794: } +LABELV $716 +line 1796 +;1795: +;1796: pm->ps->saberMove = newMove; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 512 +ADDP4 +ADDRFP4 0 +INDIRI2 +CVII4 2 +ASGNI4 +line 1797 +;1797: pm->ps->saberBlocking = saberMoveData[newMove].blocking; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 516 +ADDP4 +CNSTI4 40 +ADDRFP4 0 +INDIRI2 +CVII4 2 +MULI4 +ADDRGP4 saberMoveData+24 +ADDP4 +INDIRI4 +ASGNI4 +line 1799 +;1798: +;1799: pm->ps->torsoAnim = anim;//saberMoveData[newMove].animToUse; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 100 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1801 +;1800: +;1801: if (pm->ps->weaponTime <= 0) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $722 +line 1802 +;1802: { +line 1803 +;1803: pm->ps->saberBlocked = BLOCKED_NONE; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 520 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1804 +;1804: } +LABELV $722 +line 1805 +;1805: } +LABELV $714 +line 1806 +;1806:} +LABELV $675 +endproc PM_SetSaberMove 52 16 +import ValidAnimFileIndex +import PM_SetAnim +import PM_FinishWeaponChange +import PM_BeginWeaponChange +import PM_ForceLegsAnim +import PM_ContinueLegsAnim +import PM_StartTorsoAnim +import BG_CycleInven +import PM_StepSlideMove +import PM_SlideMove +import PM_AddEvent +import PM_AddTouchEnt +import PM_ClipVelocity +import PM_GetSaberStance +import PM_AnimLength +import PM_InRollComplete +import PM_InOnGroundAnim +import PM_SpinningAnim +import PM_LandingAnim +import PM_JumpingAnim +import PM_PainAnim +import PM_InKnockDown +import PM_InSaberAnim +import PM_SaberInStart +import PM_SaberInReflect +import PM_SaberInParry +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import forcePowerNeeded +import c_pmove +import pm_flightfriction +import pm_waterfriction +import pm_friction +import pm_flyaccelerate +import pm_wateraccelerate +import pm_airaccelerate +import pm_accelerate +import pm_wadeScale +import pm_swimScale +import pm_duckScale +import pm_stopspeed +import pml +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $212 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $211 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 76 +char 1 82 +char 1 0 +align 1 +LABELV $210 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 85 +char 1 76 +char 1 0 +align 1 +LABELV $209 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 85 +char 1 82 +char 1 0 +align 1 +LABELV $208 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 84 +char 1 111 +char 1 112 +char 1 0 +align 1 +LABELV $207 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $206 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 76 +char 1 82 +char 1 0 +align 1 +LABELV $205 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 85 +char 1 76 +char 1 0 +align 1 +LABELV $204 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 85 +char 1 82 +char 1 0 +align 1 +LABELV $203 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 84 +char 1 111 +char 1 112 +char 1 0 +align 1 +LABELV $202 +char 1 75 +char 1 110 +char 1 111 +char 1 99 +char 1 107 +char 1 32 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $201 +char 1 75 +char 1 110 +char 1 111 +char 1 99 +char 1 107 +char 1 32 +char 1 76 +char 1 82 +char 1 0 +align 1 +LABELV $200 +char 1 75 +char 1 110 +char 1 111 +char 1 99 +char 1 107 +char 1 32 +char 1 85 +char 1 76 +char 1 0 +align 1 +LABELV $199 +char 1 75 +char 1 110 +char 1 111 +char 1 99 +char 1 107 +char 1 32 +char 1 85 +char 1 82 +char 1 0 +align 1 +LABELV $198 +char 1 75 +char 1 110 +char 1 111 +char 1 99 +char 1 107 +char 1 32 +char 1 84 +char 1 111 +char 1 112 +char 1 0 +align 1 +LABELV $197 +char 1 66 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $196 +char 1 66 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 66 +char 1 111 +char 1 116 +char 1 0 +align 1 +LABELV $195 +char 1 66 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 76 +char 1 82 +char 1 0 +align 1 +LABELV $194 +char 1 66 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 85 +char 1 76 +char 1 0 +align 1 +LABELV $193 +char 1 66 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 85 +char 1 82 +char 1 0 +align 1 +LABELV $192 +char 1 66 +char 1 80 +char 1 97 +char 1 114 +char 1 114 +char 1 121 +char 1 32 +char 1 84 +char 1 111 +char 1 112 +char 1 0 +align 1 +LABELV $191 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 66 +char 1 0 +align 1 +LABELV $190 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $189 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 76 +char 1 0 +align 1 +LABELV $188 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $187 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 84 +char 1 0 +align 1 +LABELV $186 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $185 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 82 +char 1 0 +align 1 +LABELV $184 +char 1 82 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $183 +char 1 68 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 66 +char 1 0 +align 1 +LABELV $182 +char 1 68 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $181 +char 1 68 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 76 +char 1 0 +align 1 +LABELV $180 +char 1 68 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $179 +char 1 68 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 84 +char 1 0 +align 1 +LABELV $178 +char 1 68 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $177 +char 1 68 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 82 +char 1 0 +align 1 +LABELV $176 +char 1 68 +char 1 101 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 116 +char 1 32 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $175 +char 1 66 +char 1 111 +char 1 117 +char 1 110 +char 1 99 +char 1 101 +char 1 32 +char 1 66 +char 1 76 +char 1 0 +align 1 +LABELV $174 +char 1 66 +char 1 111 +char 1 117 +char 1 110 +char 1 99 +char 1 101 +char 1 32 +char 1 76 +char 1 0 +align 1 +LABELV $173 +char 1 66 +char 1 111 +char 1 117 +char 1 110 +char 1 99 +char 1 101 +char 1 32 +char 1 84 +char 1 76 +char 1 0 +align 1 +LABELV $172 +char 1 66 +char 1 111 +char 1 117 +char 1 110 +char 1 99 +char 1 101 +char 1 32 +char 1 84 +char 1 0 +align 1 +LABELV $171 +char 1 66 +char 1 111 +char 1 117 +char 1 110 +char 1 99 +char 1 101 +char 1 32 +char 1 84 +char 1 82 +char 1 0 +align 1 +LABELV $170 +char 1 66 +char 1 111 +char 1 117 +char 1 110 +char 1 99 +char 1 101 +char 1 32 +char 1 82 +char 1 0 +align 1 +LABELV $169 +char 1 66 +char 1 111 +char 1 117 +char 1 110 +char 1 99 +char 1 101 +char 1 32 +char 1 66 +char 1 82 +char 1 0 +align 1 +LABELV $168 +char 1 66 +char 1 76 +char 1 50 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $167 +char 1 66 +char 1 76 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $166 +char 1 66 +char 1 76 +char 1 50 +char 1 84 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $165 +char 1 66 +char 1 76 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $164 +char 1 66 +char 1 76 +char 1 50 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $163 +char 1 66 +char 1 76 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $162 +char 1 76 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $161 +char 1 76 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $160 +char 1 76 +char 1 50 +char 1 84 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $159 +char 1 76 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $158 +char 1 76 +char 1 50 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $157 +char 1 76 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $156 +char 1 84 +char 1 76 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $155 +char 1 84 +char 1 76 +char 1 50 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $154 +char 1 84 +char 1 76 +char 1 50 +char 1 84 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $153 +char 1 84 +char 1 76 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $152 +char 1 84 +char 1 76 +char 1 50 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $151 +char 1 84 +char 1 76 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $150 +char 1 84 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $149 +char 1 84 +char 1 50 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $148 +char 1 84 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $147 +char 1 84 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $146 +char 1 84 +char 1 50 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $145 +char 1 84 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $144 +char 1 84 +char 1 82 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $143 +char 1 84 +char 1 82 +char 1 50 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $142 +char 1 84 +char 1 82 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $141 +char 1 84 +char 1 82 +char 1 50 +char 1 84 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $140 +char 1 84 +char 1 82 +char 1 50 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $139 +char 1 84 +char 1 82 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $138 +char 1 82 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $137 +char 1 82 +char 1 50 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $136 +char 1 82 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $135 +char 1 82 +char 1 50 +char 1 84 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $134 +char 1 82 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $133 +char 1 82 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $132 +char 1 66 +char 1 82 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $131 +char 1 66 +char 1 82 +char 1 50 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $130 +char 1 66 +char 1 82 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $129 +char 1 66 +char 1 82 +char 1 50 +char 1 84 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $128 +char 1 66 +char 1 82 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $127 +char 1 66 +char 1 82 +char 1 50 +char 1 82 +char 1 32 +char 1 84 +char 1 114 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $126 +char 1 84 +char 1 50 +char 1 66 +char 1 32 +char 1 82 +char 1 101 +char 1 116 +char 1 0 +align 1 +LABELV $125 +char 1 84 +char 1 82 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 82 +char 1 101 +char 1 116 +char 1 0 +align 1 +LABELV $124 +char 1 82 +char 1 50 +char 1 76 +char 1 32 +char 1 82 +char 1 101 +char 1 116 +char 1 0 +align 1 +LABELV $123 +char 1 66 +char 1 82 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 82 +char 1 101 +char 1 116 +char 1 0 +align 1 +LABELV $122 +char 1 66 +char 1 76 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 82 +char 1 101 +char 1 116 +char 1 0 +align 1 +LABELV $121 +char 1 76 +char 1 50 +char 1 82 +char 1 32 +char 1 82 +char 1 101 +char 1 116 +char 1 0 +align 1 +LABELV $120 +char 1 84 +char 1 76 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 82 +char 1 101 +char 1 116 +char 1 0 +align 1 +LABELV $119 +char 1 84 +char 1 50 +char 1 66 +char 1 32 +char 1 83 +char 1 116 +char 1 0 +align 1 +LABELV $118 +char 1 84 +char 1 82 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 83 +char 1 116 +char 1 0 +align 1 +LABELV $117 +char 1 82 +char 1 50 +char 1 76 +char 1 32 +char 1 83 +char 1 116 +char 1 0 +align 1 +LABELV $116 +char 1 66 +char 1 82 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 83 +char 1 116 +char 1 0 +align 1 +LABELV $115 +char 1 66 +char 1 76 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 83 +char 1 116 +char 1 0 +align 1 +LABELV $114 +char 1 76 +char 1 50 +char 1 82 +char 1 32 +char 1 83 +char 1 116 +char 1 0 +align 1 +LABELV $113 +char 1 84 +char 1 76 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 83 +char 1 116 +char 1 0 +align 1 +LABELV $112 +char 1 70 +char 1 108 +char 1 105 +char 1 112 +char 1 32 +char 1 83 +char 1 108 +char 1 97 +char 1 115 +char 1 104 +char 1 0 +align 1 +LABELV $111 +char 1 70 +char 1 108 +char 1 105 +char 1 112 +char 1 32 +char 1 83 +char 1 116 +char 1 97 +char 1 98 +char 1 0 +align 1 +LABELV $110 +char 1 74 +char 1 117 +char 1 109 +char 1 112 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $109 +char 1 76 +char 1 117 +char 1 110 +char 1 103 +char 1 101 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $108 +char 1 67 +char 1 82 +char 1 32 +char 1 66 +char 1 97 +char 1 99 +char 1 107 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $107 +char 1 66 +char 1 97 +char 1 99 +char 1 107 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $106 +char 1 66 +char 1 97 +char 1 99 +char 1 107 +char 1 32 +char 1 83 +char 1 116 +char 1 97 +char 1 98 +char 1 0 +align 1 +LABELV $105 +char 1 84 +char 1 50 +char 1 66 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $104 +char 1 84 +char 1 82 +char 1 50 +char 1 66 +char 1 76 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $103 +char 1 82 +char 1 50 +char 1 76 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $102 +char 1 66 +char 1 82 +char 1 50 +char 1 84 +char 1 76 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $101 +char 1 66 +char 1 76 +char 1 50 +char 1 84 +char 1 82 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $100 +char 1 76 +char 1 50 +char 1 82 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $99 +char 1 84 +char 1 76 +char 1 50 +char 1 66 +char 1 82 +char 1 32 +char 1 65 +char 1 116 +char 1 116 +char 1 0 +align 1 +LABELV $98 +char 1 80 +char 1 117 +char 1 116 +char 1 97 +char 1 119 +char 1 97 +char 1 121 +char 1 0 +align 1 +LABELV $97 +char 1 68 +char 1 114 +char 1 97 +char 1 119 +char 1 0 +align 1 +LABELV $96 +char 1 82 +char 1 101 +char 1 97 +char 1 100 +char 1 121 +char 1 0 +align 1 +LABELV $95 +char 1 78 +char 1 111 +char 1 110 +char 1 101 +char 1 0 diff --git a/CODE-mp/game/vm/bg_slidemove.asm b/CODE-mp/game/vm/bg_slidemove.asm new file mode 100644 index 0000000..f274526 --- /dev/null +++ b/CODE-mp/game/vm/bg_slidemove.asm @@ -0,0 +1,2878 @@ +export PM_SlideMove +code +proc PM_SlideMove 1332 28 +file "../bg_slidemove.c" +line 25 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// bg_slidemove.c -- part of bg_pmove functionality +;4: +;5:#include "q_shared.h" +;6:#include "bg_public.h" +;7:#include "bg_local.h" +;8: +;9:/* +;10: +;11:input: origin, velocity, bounds, groundPlane, trace function +;12: +;13:output: origin, velocity, impacts, stairup boolean +;14: +;15:*/ +;16: +;17:/* +;18:================== +;19:PM_SlideMove +;20: +;21:Returns qtrue if the velocity was clipped in some way +;22:================== +;23:*/ +;24:#define MAX_CLIP_PLANES 5 +;25:qboolean PM_SlideMove( qboolean gravity ) { +line 41 +;26: int bumpcount, numbumps; +;27: vec3_t dir; +;28: float d; +;29: int numplanes; +;30: vec3_t planes[MAX_CLIP_PLANES]; +;31: vec3_t primal_velocity; +;32: vec3_t clipVelocity; +;33: int i, j, k; +;34: trace_t trace; +;35: vec3_t end; +;36: float time_left; +;37: float into; +;38: vec3_t endVelocity; +;39: vec3_t endClipVelocity; +;40: +;41: numbumps = 4; +ADDRLP4 1232 +CNSTI4 4 +ASGNI4 +line 43 +;42: +;43: VectorCopy (pm->ps->velocity, primal_velocity); +ADDRLP4 1236 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 45 +;44: +;45: if ( gravity ) { +ADDRFP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $66 +line 46 +;46: VectorCopy( pm->ps->velocity, endVelocity ); +ADDRLP4 116 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 47 +;47: endVelocity[2] -= pm->ps->gravity * pml.frametime; +ADDRLP4 116+8 +ADDRLP4 116+8 +INDIRF4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 56 +ADDP4 +INDIRI4 +CVIF4 4 +ADDRGP4 pml+36 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 48 +;48: pm->ps->velocity[2] = ( pm->ps->velocity[2] + endVelocity[2] ) * 0.5; +ADDRLP4 1248 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +ASGNP4 +ADDRLP4 1248 +INDIRP4 +CNSTF4 1056964608 +ADDRLP4 1248 +INDIRP4 +INDIRF4 +ADDRLP4 116+8 +INDIRF4 +ADDF4 +MULF4 +ASGNF4 +line 49 +;49: primal_velocity[2] = endVelocity[2]; +ADDRLP4 1236+8 +ADDRLP4 116+8 +INDIRF4 +ASGNF4 +line 50 +;50: if ( pml.groundPlane ) { +ADDRGP4 pml+48 +INDIRI4 +CNSTI4 0 +EQI4 $73 +line 52 +;51: // slide along the ground plane +;52: PM_ClipVelocity (pm->ps->velocity, pml.groundTrace.plane.normal, +ADDRLP4 1252 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ASGNP4 +ADDRLP4 1252 +INDIRP4 +ARGP4 +ADDRGP4 pml+52+24 +ARGP4 +ADDRLP4 1252 +INDIRP4 +ARGP4 +CNSTF4 1065361605 +ARGF4 +ADDRGP4 PM_ClipVelocity +CALLV +pop +line 54 +;53: pm->ps->velocity, OVERCLIP ); +;54: } +LABELV $73 +line 55 +;55: } +LABELV $66 +line 57 +;56: +;57: time_left = pml.frametime; +ADDRLP4 1212 +ADDRGP4 pml+36 +INDIRF4 +ASGNF4 +line 60 +;58: +;59: // never turn against the ground plane +;60: if ( pml.groundPlane ) { +ADDRGP4 pml+48 +INDIRI4 +CNSTI4 0 +EQI4 $79 +line 61 +;61: numplanes = 1; +ADDRLP4 96 +CNSTI4 1 +ASGNI4 +line 62 +;62: VectorCopy( pml.groundTrace.plane.normal, planes[0] ); +ADDRLP4 4 +ADDRGP4 pml+52+24 +INDIRB +ASGNB 12 +line 63 +;63: } else { +ADDRGP4 $80 +JUMPV +LABELV $79 +line 64 +;64: numplanes = 0; +ADDRLP4 96 +CNSTI4 0 +ASGNI4 +line 65 +;65: } +LABELV $80 +line 68 +;66: +;67: // never turn against original velocity +;68: VectorNormalize2( pm->ps->velocity, planes[numplanes] ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ARGP4 +CNSTI4 12 +ADDRLP4 96 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRGP4 VectorNormalize2 +CALLF4 +pop +line 69 +;69: numplanes++; +ADDRLP4 96 +ADDRLP4 96 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 71 +;70: +;71: for ( bumpcount=0 ; bumpcount < numbumps ; bumpcount++ ) { +ADDRLP4 1228 +CNSTI4 0 +ASGNI4 +ADDRGP4 $87 +JUMPV +LABELV $84 +line 74 +;72: +;73: // calculate position we are trying to move to +;74: VectorMA( pm->ps->origin, time_left, pm->ps->velocity, end ); +ADDRLP4 1248 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1252 +ADDRLP4 1248 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1216 +ADDRLP4 1252 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 1252 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 1212 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 1260 +ADDRLP4 1248 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1216+4 +ADDRLP4 1260 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 1260 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRF4 +ADDRLP4 1212 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 1264 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1216+8 +ADDRLP4 1264 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 1264 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +ADDRLP4 1212 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 77 +;75: +;76: // see if we can make it there +;77: pm->trace ( &trace, pm->ps->origin, pm->mins, pm->maxs, end, pm->ps->clientNum, pm->tracemask); +ADDRLP4 128 +ARGP4 +ADDRLP4 1268 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1272 +ADDRLP4 1268 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1272 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 1268 +INDIRP4 +CNSTI4 188 +ADDP4 +ARGP4 +ADDRLP4 1268 +INDIRP4 +CNSTI4 200 +ADDP4 +ARGP4 +ADDRLP4 1216 +ARGP4 +ADDRLP4 1272 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1268 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1268 +INDIRP4 +CNSTI4 240 +ADDP4 +INDIRP4 +CALLV +pop +line 79 +;78: +;79: if (trace.allsolid) { +ADDRLP4 128 +INDIRI4 +CNSTI4 0 +EQI4 $90 +line 81 +;80: // entity is completely trapped in another solid +;81: pm->ps->velocity[2] = 0; // don't build up falling damage, but allow sideways acceleration +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 0 +ASGNF4 +line 82 +;82: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $65 +JUMPV +LABELV $90 +line 85 +;83: } +;84: +;85: if (trace.fraction > 0) { +ADDRLP4 128+8 +INDIRF4 +CNSTF4 0 +LEF4 $92 +line 87 +;86: // actually covered some distance +;87: VectorCopy (trace.endpos, pm->ps->origin); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ADDRLP4 128+12 +INDIRB +ASGNB 12 +line 88 +;88: } +LABELV $92 +line 90 +;89: +;90: if (trace.fraction == 1) { +ADDRLP4 128+8 +INDIRF4 +CNSTF4 1065353216 +NEF4 $96 +line 91 +;91: break; // moved the entire distance +ADDRGP4 $86 +JUMPV +LABELV $96 +line 95 +;92: } +;93: +;94: // save entity for contact +;95: PM_AddTouchEnt( trace.entityNum ); +ADDRLP4 128+52 +INDIRI4 +ARGI4 +ADDRGP4 PM_AddTouchEnt +CALLV +pop +line 97 +;96: +;97: time_left -= time_left * trace.fraction; +ADDRLP4 1212 +ADDRLP4 1212 +INDIRF4 +ADDRLP4 1212 +INDIRF4 +ADDRLP4 128+8 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 99 +;98: +;99: if (numplanes >= MAX_CLIP_PLANES) { +ADDRLP4 96 +INDIRI4 +CNSTI4 5 +LTI4 $101 +line 101 +;100: // this shouldn't really happen +;101: VectorClear( pm->ps->velocity ); +ADDRLP4 1280 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1284 +CNSTF4 0 +ASGNF4 +ADDRLP4 1280 +INDIRP4 +CNSTI4 40 +ADDP4 +ADDRLP4 1284 +INDIRF4 +ASGNF4 +ADDRLP4 1280 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRLP4 1284 +INDIRF4 +ASGNF4 +ADDRLP4 1280 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 1284 +INDIRF4 +ASGNF4 +line 102 +;102: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $65 +JUMPV +LABELV $101 +line 110 +;103: } +;104: +;105: // +;106: // if this is the same plane we hit before, nudge velocity +;107: // out along it, which fixes some epsilon issues with +;108: // non-axial planes +;109: // +;110: for ( i = 0 ; i < numplanes ; i++ ) { +ADDRLP4 80 +CNSTI4 0 +ASGNI4 +ADDRGP4 $106 +JUMPV +LABELV $103 +line 111 +;111: if ( DotProduct( trace.plane.normal, planes[i] ) > 0.99 ) { +ADDRLP4 1280 +CNSTI4 12 +ADDRLP4 80 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 128+24 +INDIRF4 +ADDRLP4 1280 +INDIRI4 +ADDRLP4 4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 128+24+4 +INDIRF4 +ADDRLP4 1280 +INDIRI4 +ADDRLP4 4+4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 128+24+8 +INDIRF4 +ADDRLP4 1280 +INDIRI4 +ADDRLP4 4+8 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +CNSTF4 1065185444 +LEF4 $107 +line 112 +;112: VectorAdd( trace.plane.normal, pm->ps->velocity, pm->ps->velocity ); +ADDRLP4 1284 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ASGNP4 +ADDRLP4 1284 +INDIRP4 +ADDRLP4 128+24 +INDIRF4 +ADDRLP4 1284 +INDIRP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1288 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 36 +ADDP4 +ASGNP4 +ADDRLP4 1288 +INDIRP4 +ADDRLP4 128+24+4 +INDIRF4 +ADDRLP4 1288 +INDIRP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1292 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +ASGNP4 +ADDRLP4 1292 +INDIRP4 +ADDRLP4 128+24+8 +INDIRF4 +ADDRLP4 1292 +INDIRP4 +INDIRF4 +ADDF4 +ASGNF4 +line 113 +;113: break; +ADDRGP4 $105 +JUMPV +LABELV $107 +line 115 +;114: } +;115: } +LABELV $104 +line 110 +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $106 +ADDRLP4 80 +INDIRI4 +ADDRLP4 96 +INDIRI4 +LTI4 $103 +LABELV $105 +line 116 +;116: if ( i < numplanes ) { +ADDRLP4 80 +INDIRI4 +ADDRLP4 96 +INDIRI4 +GEI4 $121 +line 117 +;117: continue; +ADDRGP4 $85 +JUMPV +LABELV $121 +line 119 +;118: } +;119: VectorCopy (trace.plane.normal, planes[numplanes]); +CNSTI4 12 +ADDRLP4 96 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ADDRLP4 128+24 +INDIRB +ASGNB 12 +line 120 +;120: numplanes++; +ADDRLP4 96 +ADDRLP4 96 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 127 +;121: +;122: // +;123: // modify velocity so it parallels all of the clip planes +;124: // +;125: +;126: // find a plane that it enters +;127: for ( i = 0 ; i < numplanes ; i++ ) { +ADDRLP4 80 +CNSTI4 0 +ASGNI4 +ADDRGP4 $127 +JUMPV +LABELV $124 +line 128 +;128: into = DotProduct( pm->ps->velocity, planes[i] ); +ADDRLP4 1280 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1284 +CNSTI4 12 +ADDRLP4 80 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 1208 +ADDRLP4 1280 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 1284 +INDIRI4 +ADDRLP4 4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 1280 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRF4 +ADDRLP4 1284 +INDIRI4 +ADDRLP4 4+4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 1280 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +ADDRLP4 1284 +INDIRI4 +ADDRLP4 4+8 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 129 +;129: if ( into >= 0.1 ) { +ADDRLP4 1208 +INDIRF4 +CNSTF4 1036831949 +LTF4 $130 +line 130 +;130: continue; // move doesn't interact with the plane +ADDRGP4 $125 +JUMPV +LABELV $130 +line 134 +;131: } +;132: +;133: // see how hard we are hitting things +;134: if ( -into > pml.impactSpeed ) { +ADDRLP4 1208 +INDIRF4 +NEGF4 +ADDRGP4 pml+1132 +INDIRF4 +LEF4 $132 +line 135 +;135: pml.impactSpeed = -into; +ADDRGP4 pml+1132 +ADDRLP4 1208 +INDIRF4 +NEGF4 +ASGNF4 +line 136 +;136: } +LABELV $132 +line 139 +;137: +;138: // slide along the plane +;139: PM_ClipVelocity (pm->ps->velocity, planes[i], clipVelocity, OVERCLIP ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ARGP4 +CNSTI4 12 +ADDRLP4 80 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRLP4 64 +ARGP4 +CNSTF4 1065361605 +ARGF4 +ADDRGP4 PM_ClipVelocity +CALLV +pop +line 142 +;140: +;141: // slide along the plane +;142: PM_ClipVelocity (endVelocity, planes[i], endClipVelocity, OVERCLIP ); +ADDRLP4 116 +ARGP4 +CNSTI4 12 +ADDRLP4 80 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRLP4 104 +ARGP4 +CNSTF4 1065361605 +ARGF4 +ADDRGP4 PM_ClipVelocity +CALLV +pop +line 145 +;143: +;144: // see if there is a second plane that the new move enters +;145: for ( j = 0 ; j < numplanes ; j++ ) { +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRGP4 $139 +JUMPV +LABELV $136 +line 146 +;146: if ( j == i ) { +ADDRLP4 76 +INDIRI4 +ADDRLP4 80 +INDIRI4 +NEI4 $140 +line 147 +;147: continue; +ADDRGP4 $137 +JUMPV +LABELV $140 +line 149 +;148: } +;149: if ( DotProduct( clipVelocity, planes[j] ) >= 0.1 ) { +ADDRLP4 1288 +CNSTI4 12 +ADDRLP4 76 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 64 +INDIRF4 +ADDRLP4 1288 +INDIRI4 +ADDRLP4 4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 64+4 +INDIRF4 +ADDRLP4 1288 +INDIRI4 +ADDRLP4 4+4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 64+8 +INDIRF4 +ADDRLP4 1288 +INDIRI4 +ADDRLP4 4+8 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +CNSTF4 1036831949 +LTF4 $142 +line 150 +;150: continue; // move doesn't interact with the plane +ADDRGP4 $137 +JUMPV +LABELV $142 +line 154 +;151: } +;152: +;153: // try clipping the move to the plane +;154: PM_ClipVelocity( clipVelocity, planes[j], clipVelocity, OVERCLIP ); +ADDRLP4 64 +ARGP4 +CNSTI4 12 +ADDRLP4 76 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRLP4 64 +ARGP4 +CNSTF4 1065361605 +ARGF4 +ADDRGP4 PM_ClipVelocity +CALLV +pop +line 155 +;155: PM_ClipVelocity( endClipVelocity, planes[j], endClipVelocity, OVERCLIP ); +ADDRLP4 104 +ARGP4 +CNSTI4 12 +ADDRLP4 76 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRLP4 104 +ARGP4 +CNSTF4 1065361605 +ARGF4 +ADDRGP4 PM_ClipVelocity +CALLV +pop +line 158 +;156: +;157: // see if it goes back into the first clip plane +;158: if ( DotProduct( clipVelocity, planes[i] ) >= 0 ) { +ADDRLP4 1292 +CNSTI4 12 +ADDRLP4 80 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 64 +INDIRF4 +ADDRLP4 1292 +INDIRI4 +ADDRLP4 4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 64+4 +INDIRF4 +ADDRLP4 1292 +INDIRI4 +ADDRLP4 4+4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 64+8 +INDIRF4 +ADDRLP4 1292 +INDIRI4 +ADDRLP4 4+8 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +CNSTF4 0 +LTF4 $148 +line 159 +;159: continue; +ADDRGP4 $137 +JUMPV +LABELV $148 +line 163 +;160: } +;161: +;162: // slide the original velocity along the crease +;163: CrossProduct (planes[i], planes[j], dir); +ADDRLP4 1296 +CNSTI4 12 +ASGNI4 +ADDRLP4 1296 +INDIRI4 +ADDRLP4 80 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRLP4 1296 +INDIRI4 +ADDRLP4 76 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRLP4 84 +ARGP4 +ADDRGP4 CrossProduct +CALLV +pop +line 164 +;164: VectorNormalize( dir ); +ADDRLP4 84 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 165 +;165: d = DotProduct( dir, pm->ps->velocity ); +ADDRLP4 1300 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 100 +ADDRLP4 84 +INDIRF4 +ADDRLP4 1300 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 84+4 +INDIRF4 +ADDRLP4 1300 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 84+8 +INDIRF4 +ADDRLP4 1300 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 166 +;166: VectorScale( dir, d, clipVelocity ); +ADDRLP4 64 +ADDRLP4 84 +INDIRF4 +ADDRLP4 100 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 64+4 +ADDRLP4 84+4 +INDIRF4 +ADDRLP4 100 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 64+8 +ADDRLP4 84+8 +INDIRF4 +ADDRLP4 100 +INDIRF4 +MULF4 +ASGNF4 +line 168 +;167: +;168: CrossProduct (planes[i], planes[j], dir); +ADDRLP4 1308 +CNSTI4 12 +ASGNI4 +ADDRLP4 1308 +INDIRI4 +ADDRLP4 80 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRLP4 1308 +INDIRI4 +ADDRLP4 76 +INDIRI4 +MULI4 +ADDRLP4 4 +ADDP4 +ARGP4 +ADDRLP4 84 +ARGP4 +ADDRGP4 CrossProduct +CALLV +pop +line 169 +;169: VectorNormalize( dir ); +ADDRLP4 84 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 170 +;170: d = DotProduct( dir, endVelocity ); +ADDRLP4 100 +ADDRLP4 84 +INDIRF4 +ADDRLP4 116 +INDIRF4 +MULF4 +ADDRLP4 84+4 +INDIRF4 +ADDRLP4 116+4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 84+8 +INDIRF4 +ADDRLP4 116+8 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 171 +;171: VectorScale( dir, d, endClipVelocity ); +ADDRLP4 104 +ADDRLP4 84 +INDIRF4 +ADDRLP4 100 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 104+4 +ADDRLP4 84+4 +INDIRF4 +ADDRLP4 100 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 104+8 +ADDRLP4 84+8 +INDIRF4 +ADDRLP4 100 +INDIRF4 +MULF4 +ASGNF4 +line 174 +;172: +;173: // see if there is a third plane the the new move enters +;174: for ( k = 0 ; k < numplanes ; k++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $171 +JUMPV +LABELV $168 +line 175 +;175: if ( k == i || k == j ) { +ADDRLP4 0 +INDIRI4 +ADDRLP4 80 +INDIRI4 +EQI4 $174 +ADDRLP4 0 +INDIRI4 +ADDRLP4 76 +INDIRI4 +NEI4 $172 +LABELV $174 +line 176 +;176: continue; +ADDRGP4 $169 +JUMPV +LABELV $172 +line 178 +;177: } +;178: if ( DotProduct( clipVelocity, planes[k] ) >= 0.1 ) { +ADDRLP4 1320 +CNSTI4 12 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 64 +INDIRF4 +ADDRLP4 1320 +INDIRI4 +ADDRLP4 4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 64+4 +INDIRF4 +ADDRLP4 1320 +INDIRI4 +ADDRLP4 4+4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 64+8 +INDIRF4 +ADDRLP4 1320 +INDIRI4 +ADDRLP4 4+8 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +CNSTF4 1036831949 +LTF4 $175 +line 179 +;179: continue; // move doesn't interact with the plane +ADDRGP4 $169 +JUMPV +LABELV $175 +line 183 +;180: } +;181: +;182: // stop dead at a tripple plane interaction +;183: VectorClear( pm->ps->velocity ); +ADDRLP4 1324 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1328 +CNSTF4 0 +ASGNF4 +ADDRLP4 1324 +INDIRP4 +CNSTI4 40 +ADDP4 +ADDRLP4 1328 +INDIRF4 +ASGNF4 +ADDRLP4 1324 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRLP4 1328 +INDIRF4 +ASGNF4 +ADDRLP4 1324 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 1328 +INDIRF4 +ASGNF4 +line 184 +;184: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $65 +JUMPV +LABELV $169 +line 174 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $171 +ADDRLP4 0 +INDIRI4 +ADDRLP4 96 +INDIRI4 +LTI4 $168 +line 186 +;185: } +;186: } +LABELV $137 +line 145 +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $139 +ADDRLP4 76 +INDIRI4 +ADDRLP4 96 +INDIRI4 +LTI4 $136 +line 189 +;187: +;188: // if we have fixed all interactions, try another move +;189: VectorCopy( clipVelocity, pm->ps->velocity ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 64 +INDIRB +ASGNB 12 +line 190 +;190: VectorCopy( endClipVelocity, endVelocity ); +ADDRLP4 116 +ADDRLP4 104 +INDIRB +ASGNB 12 +line 191 +;191: break; +ADDRGP4 $126 +JUMPV +LABELV $125 +line 127 +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $127 +ADDRLP4 80 +INDIRI4 +ADDRLP4 96 +INDIRI4 +LTI4 $124 +LABELV $126 +line 193 +;192: } +;193: } +LABELV $85 +line 71 +ADDRLP4 1228 +ADDRLP4 1228 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $87 +ADDRLP4 1228 +INDIRI4 +ADDRLP4 1232 +INDIRI4 +LTI4 $84 +LABELV $86 +line 195 +;194: +;195: if ( gravity ) { +ADDRFP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $181 +line 196 +;196: VectorCopy( endVelocity, pm->ps->velocity ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 116 +INDIRB +ASGNB 12 +line 197 +;197: } +LABELV $181 +line 200 +;198: +;199: // don't change velocity if in a timer (FIXME: is this correct?) +;200: if ( pm->ps->pm_time ) { +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $183 +line 201 +;201: VectorCopy( primal_velocity, pm->ps->velocity ); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 1236 +INDIRB +ASGNB 12 +line 202 +;202: } +LABELV $183 +line 204 +;203: +;204: return ( bumpcount != 0 ); +ADDRLP4 1228 +INDIRI4 +CNSTI4 0 +EQI4 $186 +ADDRLP4 1248 +CNSTI4 1 +ASGNI4 +ADDRGP4 $187 +JUMPV +LABELV $186 +ADDRLP4 1248 +CNSTI4 0 +ASGNI4 +LABELV $187 +ADDRLP4 1248 +INDIRI4 +RETI4 +LABELV $65 +endproc PM_SlideMove 1332 28 +export PM_StepSlideMove +proc PM_StepSlideMove 1244 28 +line 213 +;205:} +;206: +;207:/* +;208:================== +;209:PM_StepSlideMove +;210: +;211:================== +;212:*/ +;213:void PM_StepSlideMove( qboolean gravity ) { +line 227 +;214: vec3_t start_o, start_v; +;215: vec3_t down_o, down_v; +;216: trace_t trace; +;217:// float down_dist, up_dist; +;218:// vec3_t delta, delta2; +;219: vec3_t up, down; +;220: vec3_t nvel, prevel; +;221: float stepSize; +;222: float totalVel; +;223: float pre_z; +;224: int usingspeed; +;225: int i; +;226: +;227: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 229 +;228: +;229: usingspeed = 0; +ADDRLP4 1136 +CNSTI4 0 +ASGNI4 +line 231 +;230: +;231: VectorCopy (pm->ps->origin, start_o); +ADDRLP4 1108 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 232 +;232: VectorCopy (pm->ps->velocity, start_v); +ADDRLP4 1152 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 234 +;233: +;234: if ( PM_SlideMove( gravity ) == 0 ) { +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 1196 +ADDRGP4 PM_SlideMove +CALLI4 +ASGNI4 +ADDRLP4 1196 +INDIRI4 +CNSTI4 0 +NEI4 $189 +line 235 +;235: return; // we got exactly where we wanted to go first try +ADDRGP4 $188 +JUMPV +LABELV $189 +line 238 +;236: } +;237: +;238: if (pm->ps->fd.forcePowersActive & (1 << FP_SPEED)) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +EQI4 $191 +line 239 +;239: { +line 240 +;240: usingspeed = 1; +ADDRLP4 1136 +CNSTI4 1 +ASGNI4 +line 241 +;241: } +LABELV $191 +line 243 +;242: +;243: VectorCopy(start_o, down); +ADDRLP4 1120 +ADDRLP4 1108 +INDIRB +ASGNB 12 +line 244 +;244: down[2] -= STEPSIZE; +ADDRLP4 1120+8 +ADDRLP4 1120+8 +INDIRF4 +CNSTF4 1099956224 +SUBF4 +ASGNF4 +line 245 +;245: pm->trace (&trace, start_o, pm->mins, pm->maxs, down, pm->ps->clientNum, pm->tracemask); +ADDRLP4 16 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1200 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1200 +INDIRP4 +CNSTI4 188 +ADDP4 +ARGP4 +ADDRLP4 1200 +INDIRP4 +CNSTI4 200 +ADDP4 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 1200 +INDIRP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1200 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1200 +INDIRP4 +CNSTI4 240 +ADDP4 +INDIRP4 +CALLV +pop +line 246 +;246: VectorSet(up, 0, 0, 1); +ADDRLP4 1204 +CNSTF4 0 +ASGNF4 +ADDRLP4 1096 +ADDRLP4 1204 +INDIRF4 +ASGNF4 +ADDRLP4 1096+4 +ADDRLP4 1204 +INDIRF4 +ASGNF4 +ADDRLP4 1096+8 +CNSTF4 1065353216 +ASGNF4 +line 248 +;247: // never step up when you still have up velocity +;248: if ( pm->ps->velocity[2] > 0 && (trace.fraction == 1.0 || +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +CNSTF4 0 +LEF4 $196 +ADDRLP4 16+8 +INDIRF4 +CNSTF4 1065353216 +EQF4 $206 +ADDRLP4 16+24 +INDIRF4 +ADDRLP4 1096 +INDIRF4 +MULF4 +ADDRLP4 16+24+4 +INDIRF4 +ADDRLP4 1096+4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 16+24+8 +INDIRF4 +ADDRLP4 1096+8 +INDIRF4 +MULF4 +ADDF4 +CNSTF4 1060320051 +GEF4 $196 +LABELV $206 +line 249 +;249: DotProduct(trace.plane.normal, up) < 0.7)) { +line 251 +;250: +;251: if (!usingspeed) +ADDRLP4 1136 +INDIRI4 +CNSTI4 0 +NEI4 $207 +line 252 +;252: { +line 253 +;253: return; +ADDRGP4 $188 +JUMPV +LABELV $207 +line 255 +;254: } +;255: } +LABELV $196 +line 257 +;256: +;257: VectorCopy (pm->ps->origin, down_o); +ADDRLP4 1172 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 258 +;258: VectorCopy (pm->ps->velocity, down_v); +ADDRLP4 1184 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 260 +;259: +;260: VectorCopy (start_o, up); +ADDRLP4 1096 +ADDRLP4 1108 +INDIRB +ASGNB 12 +line 261 +;261: up[2] += STEPSIZE; +ADDRLP4 1096+8 +ADDRLP4 1096+8 +INDIRF4 +CNSTF4 1099956224 +ADDF4 +ASGNF4 +line 264 +;262: +;263: // test the player position if they were a stepheight higher +;264: pm->trace (&trace, start_o, pm->mins, pm->maxs, up, pm->ps->clientNum, pm->tracemask); +ADDRLP4 16 +ARGP4 +ADDRLP4 1108 +ARGP4 +ADDRLP4 1208 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1208 +INDIRP4 +CNSTI4 188 +ADDP4 +ARGP4 +ADDRLP4 1208 +INDIRP4 +CNSTI4 200 +ADDP4 +ARGP4 +ADDRLP4 1096 +ARGP4 +ADDRLP4 1208 +INDIRP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1208 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1208 +INDIRP4 +CNSTI4 240 +ADDP4 +INDIRP4 +CALLV +pop +line 265 +;265: if ( trace.allsolid ) { +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +EQI4 $210 +line 266 +;266: if ( pm->debugLevel ) { +ADDRGP4 pm +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $212 +line 267 +;267: Com_Printf("%i:bend can't step\n", c_pmove); +ADDRGP4 $214 +ARGP4 +ADDRGP4 c_pmove +INDIRI4 +ARGI4 +ADDRGP4 Com_Printf +CALLV +pop +line 268 +;268: } +LABELV $212 +line 269 +;269: if (!usingspeed) +ADDRLP4 1136 +INDIRI4 +CNSTI4 0 +NEI4 $215 +line 270 +;270: { +line 271 +;271: return; // can't step up +ADDRGP4 $188 +JUMPV +LABELV $215 +line 273 +;272: } +;273: } +LABELV $210 +line 275 +;274: +;275: stepSize = trace.endpos[2] - start_o[2]; +ADDRLP4 1164 +ADDRLP4 16+12+8 +INDIRF4 +ADDRLP4 1108+8 +INDIRF4 +SUBF4 +ASGNF4 +line 277 +;276: // try slidemove from this position +;277: VectorCopy (trace.endpos, pm->ps->origin); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ADDRLP4 16+12 +INDIRB +ASGNB 12 +line 278 +;278: VectorCopy (start_v, pm->ps->velocity); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 1152 +INDIRB +ASGNB 12 +line 280 +;279: +;280: VectorCopy(pm->ps->velocity, prevel); +ADDRLP4 4 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 282 +;281: +;282: pre_z = prevel[2]; +ADDRLP4 1132 +ADDRLP4 4+8 +INDIRF4 +ASGNF4 +line 284 +;283: +;284: PM_SlideMove( gravity ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 PM_SlideMove +CALLI4 +pop +line 286 +;285: +;286: VectorSubtract(pm->ps->velocity, prevel, prevel); +ADDRLP4 1212 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 1212 +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 4+4 +ADDRLP4 1212 +INDIRP4 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRF4 +ADDRLP4 4+4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 4+8 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +ADDRLP4 4+8 +INDIRF4 +SUBF4 +ASGNF4 +line 287 +;287: if (prevel[0] < 0) +ADDRLP4 4 +INDIRF4 +CNSTF4 0 +GEF4 $226 +line 288 +;288: { +line 289 +;289: prevel[0] = -prevel[0]; +ADDRLP4 4 +ADDRLP4 4 +INDIRF4 +NEGF4 +ASGNF4 +line 290 +;290: } +LABELV $226 +line 291 +;291: if (prevel[1] < 0) +ADDRLP4 4+4 +INDIRF4 +CNSTF4 0 +GEF4 $228 +line 292 +;292: { +line 293 +;293: prevel[1] = -prevel[1]; +ADDRLP4 4+4 +ADDRLP4 4+4 +INDIRF4 +NEGF4 +ASGNF4 +line 294 +;294: } +LABELV $228 +line 296 +;295: +;296: totalVel = prevel[0]+prevel[1]; +ADDRLP4 1168 +ADDRLP4 4 +INDIRF4 +ADDRLP4 4+4 +INDIRF4 +ADDF4 +ASGNF4 +line 298 +;297: +;298: if (pre_z > 480 && (pre_z - pm->ps->velocity[2]) >= 480 && pm->ps->fd.forceJumpZStart) +ADDRLP4 1220 +CNSTF4 1139802112 +ASGNF4 +ADDRLP4 1132 +INDIRF4 +ADDRLP4 1220 +INDIRF4 +LEF4 $234 +ADDRLP4 1224 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1132 +INDIRF4 +ADDRLP4 1224 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +SUBF4 +ADDRLP4 1220 +INDIRF4 +LTF4 $234 +ADDRLP4 1224 +INDIRP4 +CNSTI4 1080 +ADDP4 +INDIRF4 +CNSTF4 0 +EQF4 $234 +line 299 +;299: { //smashed head on the ceiling during a force jump +line 300 +;300: pm->ps->fd.forceSpeedDoDamage = (pre_z - pm->ps->velocity[2])*0.04; +ADDRLP4 1228 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1228 +INDIRP4 +CNSTI4 1128 +ADDP4 +CNSTF4 1025758986 +ADDRLP4 1132 +INDIRF4 +ADDRLP4 1228 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRF4 +SUBF4 +MULF4 +ASGNF4 +line 301 +;301: if (pm->numtouch) +ADDRGP4 pm +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $236 +line 302 +;302: { //do damage to the other player if we hit one +ADDRGP4 $239 +JUMPV +LABELV $238 +line 304 +;303: while (i < pm->numtouch) +;304: { +line 305 +;305: if (pm->touchents[i] < MAX_CLIENTS && pm->touchents[i] != pm->ps->clientNum) +ADDRLP4 1232 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1236 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 1232 +INDIRP4 +CNSTI4 56 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 1236 +INDIRI4 +CNSTI4 32 +GEI4 $241 +ADDRLP4 1236 +INDIRI4 +ADDRLP4 1232 +INDIRP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +EQI4 $241 +line 306 +;306: { +line 307 +;307: pm->ps->fd.forceSpeedHitIndex = pm->touchents[i]; +ADDRLP4 1240 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1240 +INDIRP4 +INDIRP4 +CNSTI4 1132 +ADDP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 1240 +INDIRP4 +CNSTI4 56 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 308 +;308: break; +ADDRGP4 $240 +JUMPV +LABELV $241 +line 311 +;309: } +;310: +;311: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 312 +;312: } +LABELV $239 +line 303 +ADDRLP4 0 +INDIRI4 +ADDRGP4 pm +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +LTI4 $238 +LABELV $240 +line 313 +;313: } +LABELV $236 +line 315 +;314: +;315: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 316 +;316: } +LABELV $234 +line 318 +;317: +;318: if (usingspeed) +ADDRLP4 1136 +INDIRI4 +CNSTI4 0 +EQI4 $243 +line 319 +;319: { +line 320 +;320: if (pm->ps->fd.forceSpeedSmash > 1.3 && totalVel > 500) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1124 +ADDP4 +INDIRF4 +CNSTF4 1067869798 +LEF4 $245 +ADDRLP4 1168 +INDIRF4 +CNSTF4 1140457472 +LEF4 $245 +line 321 +;321: { //if we were going fast enough and hadn't hit a while in a while then smash into it hard +line 324 +;322: //the difference between our velocity pre and post colide must also be greater than 600 to do damage +;323: //Com_Printf("SMASH %f\n", pm->ps->fd.forceSpeedSmash); +;324: VectorCopy(start_v, nvel); //then bounce the player back a bit in the opposite of the direction he was going +ADDRLP4 1140 +ADDRLP4 1152 +INDIRB +ASGNB 12 +line 325 +;325: nvel[0] += start_o[0]; +ADDRLP4 1140 +ADDRLP4 1140 +INDIRF4 +ADDRLP4 1108 +INDIRF4 +ADDF4 +ASGNF4 +line 326 +;326: nvel[1] += start_o[1]; +ADDRLP4 1140+4 +ADDRLP4 1140+4 +INDIRF4 +ADDRLP4 1108+4 +INDIRF4 +ADDF4 +ASGNF4 +line 327 +;327: nvel[2] += start_o[2]; +ADDRLP4 1140+8 +ADDRLP4 1140+8 +INDIRF4 +ADDRLP4 1108+8 +INDIRF4 +ADDF4 +ASGNF4 +line 328 +;328: VectorSubtract(start_o, nvel, nvel); +ADDRLP4 1140 +ADDRLP4 1108 +INDIRF4 +ADDRLP4 1140 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1140+4 +ADDRLP4 1108+4 +INDIRF4 +ADDRLP4 1140+4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1140+8 +ADDRLP4 1108+8 +INDIRF4 +ADDRLP4 1140+8 +INDIRF4 +SUBF4 +ASGNF4 +line 329 +;329: pm->ps->velocity[0] = nvel[0]*0.1; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +CNSTF4 1036831949 +ADDRLP4 1140 +INDIRF4 +MULF4 +ASGNF4 +line 330 +;330: pm->ps->velocity[1] = nvel[1]*0.1; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTF4 1036831949 +ADDRLP4 1140+4 +INDIRF4 +MULF4 +ASGNF4 +line 331 +;331: pm->ps->velocity[2] = 64; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1115684864 +ASGNF4 +line 332 +;332: pm->ps->fd.forceSpeedDoDamage = pm->ps->fd.forceSpeedSmash*10; //do somewhere in the range of 15-25 damage, depending on speed +ADDRLP4 1228 +ADDRGP4 pm +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1228 +INDIRP4 +CNSTI4 1128 +ADDP4 +CNSTF4 1092616192 +ADDRLP4 1228 +INDIRP4 +CNSTI4 1124 +ADDP4 +INDIRF4 +MULF4 +ASGNF4 +line 333 +;333: pm->ps->fd.forceSpeedSmash = 0; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1124 +ADDP4 +CNSTF4 0 +ASGNF4 +line 335 +;334: +;335: if (pm->numtouch) +ADDRGP4 pm +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $188 +line 336 +;336: { +ADDRGP4 $261 +JUMPV +LABELV $260 +line 338 +;337: while (i < pm->numtouch) +;338: { +line 339 +;339: if (pm->touchents[i] < MAX_CLIENTS && pm->touchents[i] != pm->ps->clientNum) +ADDRLP4 1232 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1236 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 1232 +INDIRP4 +CNSTI4 56 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 1236 +INDIRI4 +CNSTI4 32 +GEI4 $263 +ADDRLP4 1236 +INDIRI4 +ADDRLP4 1232 +INDIRP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +EQI4 $263 +line 340 +;340: { +line 341 +;341: pm->ps->fd.forceSpeedHitIndex = pm->touchents[i]; +ADDRLP4 1240 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1240 +INDIRP4 +INDIRP4 +CNSTI4 1132 +ADDP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 1240 +INDIRP4 +CNSTI4 56 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 342 +;342: break; +ADDRGP4 $188 +JUMPV +LABELV $263 +line 345 +;343: } +;344: +;345: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 346 +;346: } +LABELV $261 +line 337 +ADDRLP4 0 +INDIRI4 +ADDRGP4 pm +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +LTI4 $260 +line 347 +;347: } +line 348 +;348: return; +ADDRGP4 $188 +JUMPV +LABELV $245 +line 351 +;349: } +;350: +;351: pm->ps->fd.forceSpeedSmash -= 0.1; +ADDRLP4 1228 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1124 +ADDP4 +ASGNP4 +ADDRLP4 1228 +INDIRP4 +ADDRLP4 1228 +INDIRP4 +INDIRF4 +CNSTF4 1036831949 +SUBF4 +ASGNF4 +line 354 +;352: //we hit a wall so decrease speed +;353: +;354: if (pm->ps->fd.forceSpeedSmash < 1) +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1124 +ADDP4 +INDIRF4 +CNSTF4 1065353216 +GEF4 $265 +line 355 +;355: { +line 356 +;356: pm->ps->fd.forceSpeedSmash = 1; +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 1124 +ADDP4 +CNSTF4 1065353216 +ASGNF4 +line 357 +;357: } +LABELV $265 +line 358 +;358: } +LABELV $243 +line 361 +;359: +;360: // push down the final amount +;361: VectorCopy (pm->ps->origin, down); +ADDRLP4 1120 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 362 +;362: down[2] -= stepSize; +ADDRLP4 1120+8 +ADDRLP4 1120+8 +INDIRF4 +ADDRLP4 1164 +INDIRF4 +SUBF4 +ASGNF4 +line 363 +;363: pm->trace (&trace, pm->ps->origin, pm->mins, pm->maxs, down, pm->ps->clientNum, pm->tracemask); +ADDRLP4 16 +ARGP4 +ADDRLP4 1228 +ADDRGP4 pm +INDIRP4 +ASGNP4 +ADDRLP4 1232 +ADDRLP4 1228 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRLP4 1232 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 1228 +INDIRP4 +CNSTI4 188 +ADDP4 +ARGP4 +ADDRLP4 1228 +INDIRP4 +CNSTI4 200 +ADDP4 +ARGP4 +ADDRLP4 1120 +ARGP4 +ADDRLP4 1232 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1228 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1228 +INDIRP4 +CNSTI4 240 +ADDP4 +INDIRP4 +CALLV +pop +line 364 +;364: if ( !trace.allsolid ) { +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $268 +line 365 +;365: VectorCopy (trace.endpos, pm->ps->origin); +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ADDRLP4 16+12 +INDIRB +ASGNB 12 +line 366 +;366: } +LABELV $268 +line 367 +;367: if ( trace.fraction < 1.0 ) { +ADDRLP4 16+8 +INDIRF4 +CNSTF4 1065353216 +GEF4 $271 +line 368 +;368: PM_ClipVelocity( pm->ps->velocity, trace.plane.normal, pm->ps->velocity, OVERCLIP ); +ADDRLP4 1236 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ASGNP4 +ADDRLP4 1236 +INDIRP4 +ARGP4 +ADDRLP4 16+24 +ARGP4 +ADDRLP4 1236 +INDIRP4 +ARGP4 +CNSTF4 1065361605 +ARGF4 +ADDRGP4 PM_ClipVelocity +CALLV +pop +line 369 +;369: } +LABELV $271 +line 383 +;370: +;371:#if 0 +;372: // if the down trace can trace back to the original position directly, don't step +;373: pm->trace( &trace, pm->ps->origin, pm->mins, pm->maxs, start_o, pm->ps->clientNum, pm->tracemask); +;374: if ( trace.fraction == 1.0 ) { +;375: // use the original move +;376: VectorCopy (down_o, pm->ps->origin); +;377: VectorCopy (down_v, pm->ps->velocity); +;378: if ( pm->debugLevel ) { +;379: Com_Printf("%i:bend\n", c_pmove); +;380: } +;381: } else +;382:#endif +;383: { +line 387 +;384: // use the step move +;385: float delta; +;386: +;387: delta = pm->ps->origin[2] - start_o[2]; +ADDRLP4 1236 +ADDRGP4 pm +INDIRP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 1108+8 +INDIRF4 +SUBF4 +ASGNF4 +line 388 +;388: if ( delta > 2 ) { +ADDRLP4 1236 +INDIRF4 +CNSTF4 1073741824 +LEF4 $276 +line 389 +;389: if ( delta < 7 ) { +ADDRLP4 1236 +INDIRF4 +CNSTF4 1088421888 +GEF4 $278 +line 390 +;390: PM_AddEvent( EV_STEP_4 ); +CNSTI4 7 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 391 +;391: } else if ( delta < 11 ) { +ADDRGP4 $279 +JUMPV +LABELV $278 +ADDRLP4 1236 +INDIRF4 +CNSTF4 1093664768 +GEF4 $280 +line 392 +;392: PM_AddEvent( EV_STEP_8 ); +CNSTI4 8 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 393 +;393: } else if ( delta < 15 ) { +ADDRGP4 $281 +JUMPV +LABELV $280 +ADDRLP4 1236 +INDIRF4 +CNSTF4 1097859072 +GEF4 $282 +line 394 +;394: PM_AddEvent( EV_STEP_12 ); +CNSTI4 9 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 395 +;395: } else { +ADDRGP4 $283 +JUMPV +LABELV $282 +line 396 +;396: PM_AddEvent( EV_STEP_16 ); +CNSTI4 10 +ARGI4 +ADDRGP4 PM_AddEvent +CALLV +pop +line 397 +;397: } +LABELV $283 +LABELV $281 +LABELV $279 +line 398 +;398: } +LABELV $276 +line 399 +;399: if ( pm->debugLevel ) { +ADDRGP4 pm +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $284 +line 400 +;400: Com_Printf("%i:stepped\n", c_pmove); +ADDRGP4 $286 +ARGP4 +ADDRGP4 c_pmove +INDIRI4 +ARGI4 +ADDRGP4 Com_Printf +CALLV +pop +line 401 +;401: } +LABELV $284 +line 402 +;402: } +line 403 +;403:} +LABELV $188 +endproc PM_StepSlideMove 1244 28 +import PM_SetSaberMove +import PM_WeaponLightsaber +import PM_SetAnim +import PM_FinishWeaponChange +import PM_BeginWeaponChange +import PM_ForceLegsAnim +import PM_ContinueLegsAnim +import PM_StartTorsoAnim +import BG_CycleInven +import PM_AddEvent +import PM_AddTouchEnt +import PM_ClipVelocity +import PM_SaberJumpAttackMove +import PM_SaberFlipOverAttackMove +import PM_SomeoneInFront +import PM_GroundDistance +import PM_GetSaberStance +import PM_AnimLength +import PM_InRollComplete +import PM_InOnGroundAnim +import PM_SpinningAnim +import PM_LandingAnim +import PM_JumpingAnim +import PM_PainAnim +import PM_InKnockDown +import PM_InSaberAnim +import PM_SaberInStart +import PM_SaberInReflect +import PM_SaberInParry +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import forcePowerNeeded +import c_pmove +import pm_flightfriction +import pm_waterfriction +import pm_friction +import pm_flyaccelerate +import pm_wateraccelerate +import pm_airaccelerate +import pm_accelerate +import pm_wadeScale +import pm_swimScale +import pm_duckScale +import pm_stopspeed +import pml +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $286 +char 1 37 +char 1 105 +char 1 58 +char 1 115 +char 1 116 +char 1 101 +char 1 112 +char 1 112 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $214 +char 1 37 +char 1 105 +char 1 58 +char 1 98 +char 1 101 +char 1 110 +char 1 100 +char 1 32 +char 1 99 +char 1 97 +char 1 110 +char 1 39 +char 1 116 +char 1 32 +char 1 115 +char 1 116 +char 1 101 +char 1 112 +char 1 10 +char 1 0 diff --git a/CODE-mp/game/vm/bg_weapons.asm b/CODE-mp/game/vm/bg_weapons.asm new file mode 100644 index 0000000..878dc25 --- /dev/null +++ b/CODE-mp/game/vm/bg_weapons.asm @@ -0,0 +1,538 @@ +data +export WP_MuzzlePoint +align 4 +LABELV WP_MuzzlePoint +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1090519040 +byte 4 0 +byte 4 1090519040 +byte 4 1098907648 +byte 4 0 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1073741824 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1083179008 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1090519040 +byte 4 0 +byte 4 1094713344 +byte 4 0 +byte 4 3229614080 +byte 4 1094713344 +byte 4 0 +byte 4 3240099840 +byte 4 1094713344 +byte 4 0 +byte 4 3229614080 +skip 24 +export weaponData +align 4 +LABELV weaponData +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 5 +byte 4 0 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 5 +byte 4 0 +byte 4 100 +byte 4 8192 +byte 4 0 +byte 4 100 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 2 +byte 4 15 +byte 4 2 +byte 4 400 +byte 4 8192 +byte 4 2 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 200 +byte 4 0 +byte 4 1 +byte 4 0 +byte 4 1500 +byte 4 2 +byte 4 5 +byte 4 2 +byte 4 350 +byte 4 8192 +byte 4 3 +byte 4 150 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 3 +byte 4 5 +byte 4 5 +byte 4 600 +byte 4 8192 +byte 4 6 +byte 4 1300 +byte 4 8192 +byte 4 0 +byte 4 200 +byte 4 0 +byte 4 3 +byte 4 0 +byte 4 1700 +byte 4 3 +byte 4 5 +byte 4 5 +byte 4 1000 +byte 4 8192 +byte 4 5 +byte 4 750 +byte 4 8192 +byte 4 400 +byte 4 0 +byte 4 5 +byte 4 0 +byte 4 1700 +byte 4 0 +byte 4 4 +byte 4 5 +byte 4 1 +byte 4 100 +byte 4 8192 +byte 4 8 +byte 4 800 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 3 +byte 4 5 +byte 4 8 +byte 4 500 +byte 4 8192 +byte 4 6 +byte 4 900 +byte 4 8192 +byte 4 0 +byte 4 250 +byte 4 0 +byte 4 3 +byte 4 0 +byte 4 2100 +byte 4 4 +byte 4 5 +byte 4 10 +byte 4 700 +byte 4 8192 +byte 4 15 +byte 4 800 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 5 +byte 4 5 +byte 4 1 +byte 4 900 +byte 4 8192 +byte 4 2 +byte 4 1200 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 7 +byte 4 0 +byte 4 1 +byte 4 800 +byte 4 8192 +byte 4 1 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 800 +byte 4 8192 +byte 4 1 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 9 +byte 4 0 +byte 4 1 +byte 4 800 +byte 4 8192 +byte 4 0 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 100 +byte 4 8192 +byte 4 0 +byte 4 100 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +skip 56 +export ammoData +align 4 +LABELV ammoData +byte 4 0 +byte 4 100 +byte 4 300 +byte 4 300 +byte 4 300 +byte 4 25 +byte 4 800 +byte 4 10 +byte 4 10 +byte 4 10 +import PM_SetSaberMove +import PM_WeaponLightsaber +import PM_SetAnim +import PM_FinishWeaponChange +import PM_BeginWeaponChange +import PM_ForceLegsAnim +import PM_ContinueLegsAnim +import PM_StartTorsoAnim +import BG_CycleInven +import PM_StepSlideMove +import PM_SlideMove +import PM_AddEvent +import PM_AddTouchEnt +import PM_ClipVelocity +import PM_SaberJumpAttackMove +import PM_SaberFlipOverAttackMove +import PM_SomeoneInFront +import PM_GroundDistance +import PM_GetSaberStance +import PM_AnimLength +import PM_InRollComplete +import PM_InOnGroundAnim +import PM_SpinningAnim +import PM_LandingAnim +import PM_JumpingAnim +import PM_PainAnim +import PM_InKnockDown +import PM_InSaberAnim +import PM_SaberInStart +import PM_SaberInReflect +import PM_SaberInParry +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import forcePowerNeeded +import c_pmove +import pm_flightfriction +import pm_waterfriction +import pm_friction +import pm_flyaccelerate +import pm_wateraccelerate +import pm_airaccelerate +import pm_accelerate +import pm_wadeScale +import pm_swimScale +import pm_duckScale +import pm_stopspeed +import pml +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort diff --git a/CODE-mp/game/vm/g_active.asm b/CODE-mp/game/vm/g_active.asm new file mode 100644 index 0000000..5e540d4 --- /dev/null +++ b/CODE-mp/game/vm/g_active.asm @@ -0,0 +1,12167 @@ +export P_SetTwitchInfo +code +proc P_SetTwitchInfo 4 0 +file "../g_active.c" +line 7 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3: +;4:#include "g_local.h" +;5: +;6:void P_SetTwitchInfo(gclient_t *client) +;7:{ +line 8 +;8: client->ps.painTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 192 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 9 +;9: client->ps.painDirection ^= 1; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 196 +ADDP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +CNSTI4 1 +BXORI4 +ASGNI4 +line 10 +;10:} +LABELV $78 +endproc P_SetTwitchInfo 4 0 +export P_DamageFeedback +proc P_DamageFeedback 48 12 +line 22 +;11: +;12:/* +;13:=============== +;14:G_DamageFeedback +;15: +;16:Called just before a snapshot is sent to the given player. +;17:Totals up all damage and generates both the player_state_t +;18:damage values to that client for pain blends and kicks, and +;19:global pain sound events for all clients. +;20:=============== +;21:*/ +;22:void P_DamageFeedback( gentity_t *player ) { +line 27 +;23: gclient_t *client; +;24: float count; +;25: vec3_t angles; +;26: +;27: client = player->client; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 28 +;28: if ( client->ps.pm_type == PM_DEAD ) { +ADDRLP4 20 +CNSTI4 4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +NEI4 $81 +line 29 +;29: return; +ADDRGP4 $80 +JUMPV +LABELV $81 +line 33 +;30: } +;31: +;32: // total points of damage shot at the player this frame +;33: count = client->damage_blood + client->damage_armor; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1612 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1608 +ADDP4 +INDIRI4 +ADDI4 +CVIF4 4 +ASGNF4 +line 34 +;34: if ( count == 0 ) { +ADDRLP4 4 +INDIRF4 +CNSTF4 0 +NEF4 $83 +line 35 +;35: return; // didn't take any damage +ADDRGP4 $80 +JUMPV +LABELV $83 +line 38 +;36: } +;37: +;38: if ( count > 255 ) { +ADDRLP4 4 +INDIRF4 +CNSTF4 1132396544 +LEF4 $85 +line 39 +;39: count = 255; +ADDRLP4 4 +CNSTF4 1132396544 +ASGNF4 +line 40 +;40: } +LABELV $85 +line 46 +;41: +;42: // send the information to the client +;43: +;44: // world damage (falling, slime, etc) uses a special code +;45: // to make the blend blob centered instead of positional +;46: if ( client->damage_fromWorld ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1632 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $87 +line 47 +;47: client->ps.damagePitch = 255; +ADDRLP4 0 +INDIRP4 +CNSTI4 180 +ADDP4 +CNSTI4 255 +ASGNI4 +line 48 +;48: client->ps.damageYaw = 255; +ADDRLP4 0 +INDIRP4 +CNSTI4 176 +ADDP4 +CNSTI4 255 +ASGNI4 +line 50 +;49: +;50: client->damage_fromWorld = qfalse; +ADDRLP4 0 +INDIRP4 +CNSTI4 1632 +ADDP4 +CNSTI4 0 +ASGNI4 +line 51 +;51: } else { +ADDRGP4 $88 +JUMPV +LABELV $87 +line 52 +;52: vectoangles( client->damage_from, angles ); +ADDRLP4 0 +INDIRP4 +CNSTI4 1620 +ADDP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 vectoangles +CALLV +pop +line 53 +;53: client->ps.damagePitch = angles[PITCH]/360.0 * 256; +ADDRLP4 0 +INDIRP4 +CNSTI4 180 +ADDP4 +CNSTF4 1132462080 +ADDRLP4 8 +INDIRF4 +CNSTF4 1135869952 +DIVF4 +MULF4 +CVFI4 4 +ASGNI4 +line 54 +;54: client->ps.damageYaw = angles[YAW]/360.0 * 256; +ADDRLP4 0 +INDIRP4 +CNSTI4 176 +ADDP4 +CNSTF4 1132462080 +ADDRLP4 8+4 +INDIRF4 +CNSTF4 1135869952 +DIVF4 +MULF4 +CVFI4 4 +ASGNI4 +line 55 +;55: } +LABELV $88 +line 58 +;56: +;57: // play an apropriate pain sound +;58: if ( (level.time > player->pain_debounce_time) && !(player->flags & FL_GODMODE) ) { +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 level+32 +INDIRI4 +ADDRLP4 28 +INDIRP4 +CNSTI4 664 +ADDP4 +INDIRI4 +LEI4 $90 +ADDRLP4 28 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +CNSTI4 16 +BANDI4 +CNSTI4 0 +NEI4 $90 +line 61 +;59: +;60: // don't do more than two pain sounds a second +;61: if ( level.time - client->ps.painTime < 500 ) { +ADDRGP4 level+32 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 192 +ADDP4 +INDIRI4 +SUBI4 +CNSTI4 500 +GEI4 $93 +line 62 +;62: return; +ADDRGP4 $80 +JUMPV +LABELV $93 +line 64 +;63: } +;64: P_SetTwitchInfo(client); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 P_SetTwitchInfo +CALLV +pop +line 65 +;65: player->pain_debounce_time = level.time + 700; +ADDRFP4 0 +INDIRP4 +CNSTI4 664 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 700 +ADDI4 +ASGNI4 +line 66 +;66: G_AddEvent( player, EV_PAIN, player->health ); +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +CNSTI4 77 +ARGI4 +ADDRLP4 32 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 67 +;67: client->ps.damageEvent++; +ADDRLP4 36 +ADDRLP4 0 +INDIRP4 +CNSTI4 172 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 36 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 69 +;68: +;69: if (client->damage_armor && !client->damage_blood) +ADDRLP4 44 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1608 +ADDP4 +INDIRI4 +ADDRLP4 44 +INDIRI4 +EQI4 $97 +ADDRLP4 0 +INDIRP4 +CNSTI4 1612 +ADDP4 +INDIRI4 +ADDRLP4 44 +INDIRI4 +NEI4 $97 +line 70 +;70: { +line 71 +;71: client->ps.damageType = 1; //pure shields +ADDRLP4 0 +INDIRP4 +CNSTI4 188 +ADDP4 +CNSTI4 1 +ASGNI4 +line 72 +;72: } +ADDRGP4 $98 +JUMPV +LABELV $97 +line 73 +;73: else if (client->damage_armor) +ADDRLP4 0 +INDIRP4 +CNSTI4 1608 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $99 +line 74 +;74: { +line 75 +;75: client->ps.damageType = 2; //shields and health +ADDRLP4 0 +INDIRP4 +CNSTI4 188 +ADDP4 +CNSTI4 2 +ASGNI4 +line 76 +;76: } +ADDRGP4 $100 +JUMPV +LABELV $99 +line 78 +;77: else +;78: { +line 79 +;79: client->ps.damageType = 0; //pure health +ADDRLP4 0 +INDIRP4 +CNSTI4 188 +ADDP4 +CNSTI4 0 +ASGNI4 +line 80 +;80: } +LABELV $100 +LABELV $98 +line 81 +;81: } +LABELV $90 +line 84 +;82: +;83: +;84: client->ps.damageCount = count; +ADDRLP4 0 +INDIRP4 +CNSTI4 184 +ADDP4 +ADDRLP4 4 +INDIRF4 +CVFI4 4 +ASGNI4 +line 89 +;85: +;86: // +;87: // clear totals +;88: // +;89: client->damage_blood = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 1612 +ADDP4 +CNSTI4 0 +ASGNI4 +line 90 +;90: client->damage_armor = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 1608 +ADDP4 +CNSTI4 0 +ASGNI4 +line 91 +;91: client->damage_knockback = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 1616 +ADDP4 +CNSTI4 0 +ASGNI4 +line 92 +;92:} +LABELV $80 +endproc P_DamageFeedback 48 12 +export P_WorldEffects +proc P_WorldEffects 40 32 +line 103 +;93: +;94: +;95: +;96:/* +;97:============= +;98:P_WorldEffects +;99: +;100:Check for lava / slime contents and drowning +;101:============= +;102:*/ +;103:void P_WorldEffects( gentity_t *ent ) { +line 107 +;104: qboolean envirosuit; +;105: int waterlevel; +;106: +;107: if ( ent->client->noclip ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1576 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $102 +line 108 +;108: ent->client->airOutTime = level.time + 12000; // don't need air +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1688 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 12000 +ADDI4 +ASGNI4 +line 109 +;109: return; +ADDRGP4 $101 +JUMPV +LABELV $102 +line 112 +;110: } +;111: +;112: waterlevel = ent->waterlevel; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 748 +ADDP4 +INDIRI4 +ASGNI4 +line 114 +;113: +;114: envirosuit = ent->client->ps.powerups[PW_BATTLESUIT] > level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 352 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +LEI4 $107 +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +ADDRGP4 $108 +JUMPV +LABELV $107 +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +LABELV $108 +ADDRLP4 4 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 119 +;115: +;116: // +;117: // check for drowning +;118: // +;119: if ( waterlevel == 3 ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +NEI4 $109 +line 121 +;120: // envirosuit give air +;121: if ( envirosuit ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $111 +line 122 +;122: ent->client->airOutTime = level.time + 10000; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1688 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 10000 +ADDI4 +ASGNI4 +line 123 +;123: } +LABELV $111 +line 126 +;124: +;125: // if out of air, start drowning +;126: if ( ent->client->airOutTime < level.time) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1688 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +GEI4 $110 +line 128 +;127: // drown! +;128: ent->client->airOutTime += 1000; +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1688 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI4 +CNSTI4 1000 +ADDI4 +ASGNI4 +line 129 +;129: if ( ent->health > 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $110 +line 131 +;130: // take more damage the longer underwater +;131: ent->damage += 2; +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +CNSTI4 688 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CNSTI4 2 +ADDI4 +ASGNI4 +line 132 +;132: if (ent->damage > 15) +ADDRFP4 0 +INDIRP4 +CNSTI4 688 +ADDP4 +INDIRI4 +CNSTI4 15 +LEI4 $119 +line 133 +;133: ent->damage = 15; +ADDRFP4 0 +INDIRP4 +CNSTI4 688 +ADDP4 +CNSTI4 15 +ASGNI4 +LABELV $119 +line 136 +;134: +;135: // play a gurp sound instead of a normal pain sound +;136: if (ent->health <= ent->damage) { +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 688 +ADDP4 +INDIRI4 +GTI4 $121 +line 137 +;137: G_Sound(ent, CHAN_VOICE, G_SoundIndex(/*"*drown.wav"*/"sound/player/gurp1.wav")); +ADDRGP4 $123 +ARGP4 +ADDRLP4 24 +ADDRGP4 G_SoundIndex +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 3 +ARGI4 +ADDRLP4 24 +INDIRI4 +ARGI4 +ADDRGP4 G_Sound +CALLV +pop +line 138 +;138: } else if (rand()&1) { +ADDRGP4 $122 +JUMPV +LABELV $121 +ADDRLP4 24 +ADDRGP4 rand +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 0 +EQI4 $124 +line 139 +;139: G_Sound(ent, CHAN_VOICE, G_SoundIndex("sound/player/gurp1.wav")); +ADDRGP4 $123 +ARGP4 +ADDRLP4 28 +ADDRGP4 G_SoundIndex +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 3 +ARGI4 +ADDRLP4 28 +INDIRI4 +ARGI4 +ADDRGP4 G_Sound +CALLV +pop +line 140 +;140: } else { +ADDRGP4 $125 +JUMPV +LABELV $124 +line 141 +;141: G_Sound(ent, CHAN_VOICE, G_SoundIndex("sound/player/gurp2.wav")); +ADDRGP4 $126 +ARGP4 +ADDRLP4 28 +ADDRGP4 G_SoundIndex +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 3 +ARGI4 +ADDRLP4 28 +INDIRI4 +ARGI4 +ADDRGP4 G_Sound +CALLV +pop +line 142 +;142: } +LABELV $125 +LABELV $122 +line 145 +;143: +;144: // don't play a normal pain sound +;145: ent->pain_debounce_time = level.time + 200; +ADDRFP4 0 +INDIRP4 +CNSTI4 664 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 200 +ADDI4 +ASGNI4 +line 147 +;146: +;147: G_Damage (ent, NULL, NULL, NULL, NULL, +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRLP4 32 +CNSTP4 0 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRLP4 36 +CNSTP4 0 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRLP4 28 +INDIRP4 +CNSTI4 688 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 2 +ARGI4 +CNSTI4 29 +ARGI4 +ADDRGP4 G_Damage +CALLV +pop +line 149 +;148: ent->damage, DAMAGE_NO_ARMOR, MOD_WATER); +;149: } +line 150 +;150: } +line 151 +;151: } else { +ADDRGP4 $110 +JUMPV +LABELV $109 +line 152 +;152: ent->client->airOutTime = level.time + 12000; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1688 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 12000 +ADDI4 +ASGNI4 +line 153 +;153: ent->damage = 2; +ADDRFP4 0 +INDIRP4 +CNSTI4 688 +ADDP4 +CNSTI4 2 +ASGNI4 +line 154 +;154: } +LABELV $110 +line 159 +;155: +;156: // +;157: // check for sizzle damage (move to pmove?) +;158: // +;159: if (waterlevel && +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 12 +INDIRI4 +EQI4 $129 +ADDRFP4 0 +INDIRP4 +CNSTI4 744 +ADDP4 +INDIRI4 +CNSTI4 131074 +BANDI4 +ADDRLP4 12 +INDIRI4 +EQI4 $129 +line 160 +;160: (ent->watertype&(CONTENTS_LAVA|CONTENTS_SLIME)) ) { +line 161 +;161: if (ent->health > 0 +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $131 +ADDRLP4 16 +INDIRP4 +CNSTI4 664 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +GTI4 $131 +line 162 +;162: && ent->pain_debounce_time <= level.time ) { +line 164 +;163: +;164: if ( envirosuit ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $134 +line 165 +;165: G_AddEvent( ent, EV_POWERUP_BATTLESUIT, 0 ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 83 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 166 +;166: } else { +ADDRGP4 $135 +JUMPV +LABELV $134 +line 167 +;167: if (ent->watertype & CONTENTS_LAVA) { +ADDRFP4 0 +INDIRP4 +CNSTI4 744 +ADDP4 +INDIRI4 +CNSTI4 2 +BANDI4 +CNSTI4 0 +EQI4 $136 +line 168 +;168: G_Damage (ent, NULL, NULL, NULL, NULL, +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 20 +CNSTP4 0 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRLP4 24 +CNSTP4 0 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +CNSTI4 30 +ADDRLP4 0 +INDIRI4 +MULI4 +ARGI4 +CNSTI4 0 +ARGI4 +CNSTI4 31 +ARGI4 +ADDRGP4 G_Damage +CALLV +pop +line 170 +;169: 30*waterlevel, 0, MOD_LAVA); +;170: } +LABELV $136 +line 172 +;171: +;172: if (ent->watertype & CONTENTS_SLIME) { +ADDRFP4 0 +INDIRP4 +CNSTI4 744 +ADDP4 +INDIRI4 +CNSTI4 131072 +BANDI4 +CNSTI4 0 +EQI4 $138 +line 173 +;173: G_Damage (ent, NULL, NULL, NULL, NULL, +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 20 +CNSTP4 0 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRLP4 24 +CNSTP4 0 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +CNSTI4 10 +ADDRLP4 0 +INDIRI4 +MULI4 +ARGI4 +CNSTI4 0 +ARGI4 +CNSTI4 30 +ARGI4 +ADDRGP4 G_Damage +CALLV +pop +line 175 +;174: 10*waterlevel, 0, MOD_SLIME); +;175: } +LABELV $138 +line 176 +;176: } +LABELV $135 +line 177 +;177: } +LABELV $131 +line 178 +;178: } +LABELV $129 +line 179 +;179:} +LABELV $101 +endproc P_WorldEffects 40 32 +export DoImpact +proc DoImpact 96 32 +line 188 +;180: +;181: +;182: +;183: +;184: +;185://============================================================== +;186:extern void G_ApplyKnockback( gentity_t *targ, vec3_t newDir, float knockback ); +;187:void DoImpact( gentity_t *self, gentity_t *other, qboolean damageSelf ) +;188:{ +line 193 +;189: float magnitude, my_mass; +;190: vec3_t velocity; +;191: int cont; +;192: +;193: if( self->client ) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $141 +line 194 +;194: { +line 195 +;195: VectorCopy( self->client->ps.velocity, velocity ); +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 196 +;196: my_mass = self->mass; +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +CNSTI4 624 +ADDP4 +INDIRF4 +ASGNF4 +line 197 +;197: } +ADDRGP4 $142 +JUMPV +LABELV $141 +line 199 +;198: else +;199: { +line 200 +;200: VectorCopy( self->s.pos.trDelta, velocity ); +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRB +ASGNB 12 +line 201 +;201: if ( self->s.pos.trType == TR_GRAVITY ) +ADDRFP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +CNSTI4 5 +NEI4 $143 +line 202 +;202: { +line 203 +;203: velocity[2] -= 0.25f * g_gravity.value; +ADDRLP4 4+8 +ADDRLP4 4+8 +INDIRF4 +CNSTF4 1048576000 +ADDRGP4 g_gravity+8 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 204 +;204: } +LABELV $143 +line 205 +;205: if( !self->mass ) +ADDRFP4 0 +INDIRP4 +CNSTI4 624 +ADDP4 +INDIRF4 +CNSTF4 0 +NEF4 $147 +line 206 +;206: { +line 207 +;207: my_mass = 1; +ADDRLP4 16 +CNSTF4 1065353216 +ASGNF4 +line 208 +;208: } +ADDRGP4 $148 +JUMPV +LABELV $147 +line 209 +;209: else if ( self->mass <= 10 ) +ADDRFP4 0 +INDIRP4 +CNSTI4 624 +ADDP4 +INDIRF4 +CNSTF4 1092616192 +GTF4 $149 +line 210 +;210: { +line 211 +;211: my_mass = 10; +ADDRLP4 16 +CNSTF4 1092616192 +ASGNF4 +line 212 +;212: } +ADDRGP4 $150 +JUMPV +LABELV $149 +line 214 +;213: else +;214: { +line 215 +;215: my_mass = self->mass;///10; +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +CNSTI4 624 +ADDP4 +INDIRF4 +ASGNF4 +line 216 +;216: } +LABELV $150 +LABELV $148 +line 217 +;217: } +LABELV $142 +line 219 +;218: +;219: magnitude = VectorLength( velocity ) * my_mass / 10; +ADDRLP4 4 +ARGP4 +ADDRLP4 24 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 24 +INDIRF4 +ADDRLP4 16 +INDIRF4 +MULF4 +CNSTF4 1092616192 +DIVF4 +ASGNF4 +line 232 +;220: +;221: /* +;222: if(pointcontents(self.absmax)==CONTENT_WATER)//FIXME: or other watertypes +;223: magnitude/=3; //water absorbs 2/3 velocity +;224: +;225: if(self.classname=="barrel"&&self.aflag)//rolling barrels are made for impacts! +;226: magnitude*=3; +;227: +;228: if(self.frozen>0&&magnitude<300&&self.flags&FL_ONGROUND&&loser==world&&self.velocity_z<-20&&self.last_onground+0.3client || self->client->ps.lastOnGround+300client->ps.lastOnGround+100 < level.time && other->material >= MAT_GLASS ) ) +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $156 +ADDRLP4 32 +ADDRLP4 28 +INDIRP4 +CNSTI4 500 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 300 +ADDI4 +ADDRGP4 level+32 +INDIRI4 +LTI4 $156 +ADDRLP4 32 +INDIRI4 +CNSTI4 100 +ADDI4 +ADDRGP4 level+32 +INDIRI4 +GEI4 $151 +ADDRFP4 4 +INDIRP4 +CNSTI4 684 +ADDP4 +INDIRI4 +CNSTI4 1 +LTI4 $151 +LABELV $156 +line 233 +;233: { +line 235 +;234: vec3_t dir1, dir2; +;235: float force = 0, dot; +ADDRLP4 36 +CNSTF4 0 +ASGNF4 +line 237 +;236: +;237: if ( other->material >= MAT_GLASS ) +ADDRFP4 4 +INDIRP4 +CNSTI4 684 +ADDP4 +INDIRI4 +CNSTI4 1 +LTI4 $157 +line 238 +;238: magnitude *= 2; +ADDRLP4 0 +CNSTF4 1073741824 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +LABELV $157 +line 241 +;239: +;240: //damage them +;241: if ( magnitude >= 100 && other->s.number < ENTITYNUM_WORLD ) +ADDRLP4 0 +INDIRF4 +CNSTF4 1120403456 +LTF4 $159 +ADDRFP4 4 +INDIRP4 +INDIRI4 +CNSTI4 1022 +GEI4 $159 +line 242 +;242: { +line 243 +;243: VectorCopy( velocity, dir1 ); +ADDRLP4 52 +ADDRLP4 4 +INDIRB +ASGNB 12 +line 244 +;244: VectorNormalize( dir1 ); +ADDRLP4 52 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 245 +;245: if( VectorCompare( other->r.currentOrigin, vec3_origin ) ) +ADDRFP4 4 +INDIRP4 +CNSTI4 368 +ADDP4 +ARGP4 +ADDRGP4 vec3_origin +ARGP4 +ADDRLP4 68 +ADDRGP4 VectorCompare +CALLI4 +ASGNI4 +ADDRLP4 68 +INDIRI4 +CNSTI4 0 +EQI4 $161 +line 246 +;246: {//a brush with no origin +line 247 +;247: VectorCopy ( dir1, dir2 ); +ADDRLP4 40 +ADDRLP4 52 +INDIRB +ASGNB 12 +line 248 +;248: } +ADDRGP4 $162 +JUMPV +LABELV $161 +line 250 +;249: else +;250: { +line 251 +;251: VectorSubtract( other->r.currentOrigin, self->r.currentOrigin, dir2 ); +ADDRLP4 72 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 76 +CNSTI4 368 +ASGNI4 +ADDRLP4 80 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 72 +INDIRP4 +ADDRLP4 76 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 80 +INDIRP4 +ADDRLP4 76 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 84 +CNSTI4 372 +ASGNI4 +ADDRLP4 40+4 +ADDRLP4 72 +INDIRP4 +ADDRLP4 84 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 80 +INDIRP4 +ADDRLP4 84 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 88 +CNSTI4 376 +ASGNI4 +ADDRLP4 40+8 +ADDRFP4 4 +INDIRP4 +ADDRLP4 88 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 88 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 252 +;252: VectorNormalize( dir2 ); +ADDRLP4 40 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 253 +;253: } +LABELV $162 +line 255 +;254: +;255: dot = DotProduct( dir1, dir2 ); +ADDRLP4 64 +ADDRLP4 52 +INDIRF4 +ADDRLP4 40 +INDIRF4 +MULF4 +ADDRLP4 52+4 +INDIRF4 +ADDRLP4 40+4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 52+8 +INDIRF4 +ADDRLP4 40+8 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 257 +;256: +;257: if ( dot >= 0.2 ) +ADDRLP4 64 +INDIRF4 +CNSTF4 1045220557 +LTF4 $169 +line 258 +;258: { +line 259 +;259: force = dot; +ADDRLP4 36 +ADDRLP4 64 +INDIRF4 +ASGNF4 +line 260 +;260: } +ADDRGP4 $170 +JUMPV +LABELV $169 +line 262 +;261: else +;262: { +line 263 +;263: force = 0; +ADDRLP4 36 +CNSTF4 0 +ASGNF4 +line 264 +;264: } +LABELV $170 +line 266 +;265: +;266: force *= (magnitude/50); +ADDRLP4 36 +ADDRLP4 36 +INDIRF4 +ADDRLP4 0 +INDIRF4 +CNSTF4 1112014848 +DIVF4 +MULF4 +ASGNF4 +line 268 +;267: +;268: cont = trap_PointContents( other->r.absmax, other->s.number ); +ADDRLP4 72 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +CNSTI4 356 +ADDP4 +ARGP4 +ADDRLP4 72 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 76 +ADDRGP4 trap_PointContents +CALLI4 +ASGNI4 +ADDRLP4 20 +ADDRLP4 76 +INDIRI4 +ASGNI4 +line 269 +;269: if( (cont&CONTENTS_WATER) )//|| (self.classname=="barrel"&&self.aflag))//FIXME: or other watertypes +ADDRLP4 20 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +EQI4 $171 +line 270 +;270: { +line 271 +;271: force /= 3; //water absorbs 2/3 velocity +ADDRLP4 36 +ADDRLP4 36 +INDIRF4 +CNSTF4 1077936128 +DIVF4 +ASGNF4 +line 272 +;272: } +LABELV $171 +line 279 +;273: +;274: /* +;275: if(self.frozen>0&&force>10) +;276: force=10; +;277: */ +;278: +;279: if( ( force >= 1 && other->s.number != 0 ) || force >= 10) +ADDRLP4 36 +INDIRF4 +CNSTF4 1065353216 +LTF4 $176 +ADDRFP4 4 +INDIRP4 +INDIRI4 +CNSTI4 0 +NEI4 $175 +LABELV $176 +ADDRLP4 36 +INDIRF4 +CNSTF4 1092616192 +LTF4 $173 +LABELV $175 +line 280 +;280: { +line 288 +;281: /* +;282: dprint("Damage other ("); +;283: dprint(loser.classname); +;284: dprint("): "); +;285: dprint(ftos(force)); +;286: dprint("\n"); +;287: */ +;288: if ( other->r.svFlags & SVF_GLASS_BRUSH ) +ADDRFP4 4 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 134217728 +BANDI4 +CNSTI4 0 +EQI4 $177 +line 289 +;289: { +line 290 +;290: other->splashRadius = (float)(self->r.maxs[0] - self->r.mins[0])/4.0f; +ADDRLP4 80 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 700 +ADDP4 +ADDRLP4 80 +INDIRP4 +CNSTI4 328 +ADDP4 +INDIRF4 +ADDRLP4 80 +INDIRP4 +CNSTI4 316 +ADDP4 +INDIRF4 +SUBF4 +CNSTF4 1082130432 +DIVF4 +CVFI4 4 +ASGNI4 +line 291 +;291: } +LABELV $177 +line 292 +;292: if ( other->takedamage ) +ADDRFP4 4 +INDIRP4 +CNSTI4 680 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $179 +line 293 +;293: { +line 294 +;294: G_Damage( other, self, self, velocity, self->r.currentOrigin, force, DAMAGE_NO_ARMOR, MOD_CRUSH);//FIXME: MOD_IMPACT +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 80 +INDIRP4 +ARGP4 +ADDRLP4 80 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 80 +INDIRP4 +CNSTI4 368 +ADDP4 +ARGP4 +ADDRLP4 36 +INDIRF4 +CVFI4 4 +ARGI4 +CNSTI4 2 +ARGI4 +CNSTI4 32 +ARGI4 +ADDRGP4 G_Damage +CALLV +pop +line 295 +;295: } +ADDRGP4 $180 +JUMPV +LABELV $179 +line 297 +;296: else +;297: { +line 298 +;298: G_ApplyKnockback( other, dir2, force ); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 40 +ARGP4 +ADDRLP4 36 +INDIRF4 +ARGF4 +ADDRGP4 G_ApplyKnockback +CALLV +pop +line 299 +;299: } +LABELV $180 +line 300 +;300: } +LABELV $173 +line 301 +;301: } +LABELV $159 +line 303 +;302: +;303: if ( damageSelf && self->takedamage ) +ADDRLP4 68 +CNSTI4 0 +ASGNI4 +ADDRFP4 8 +INDIRI4 +ADDRLP4 68 +INDIRI4 +EQI4 $181 +ADDRFP4 0 +INDIRP4 +CNSTI4 680 +ADDP4 +INDIRI4 +ADDRLP4 68 +INDIRI4 +EQI4 $181 +line 304 +;304: { +line 307 +;305: //Now damage me +;306: //FIXME: more lenient falling damage, especially for when driving a vehicle +;307: if ( self->client && self->client->ps.fd.forceJumpZStart ) +ADDRLP4 72 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $183 +ADDRLP4 72 +INDIRP4 +CNSTI4 1080 +ADDP4 +INDIRF4 +CNSTF4 0 +EQF4 $183 +line 308 +;308: {//we were force-jumping +line 309 +;309: if ( self->r.currentOrigin[2] >= self->client->ps.fd.forceJumpZStart ) +ADDRLP4 76 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 76 +INDIRP4 +CNSTI4 376 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1080 +ADDP4 +INDIRF4 +LTF4 $185 +line 310 +;310: {//we landed at same height or higher than we landed +line 311 +;311: magnitude = 0; +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +line 312 +;312: } +ADDRGP4 $186 +JUMPV +LABELV $185 +line 314 +;313: else +;314: {//FIXME: take off some of it, at least? +line 315 +;315: magnitude = (self->client->ps.fd.forceJumpZStart-self->r.currentOrigin[2])/3; +ADDRLP4 80 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 80 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1080 +ADDP4 +INDIRF4 +ADDRLP4 80 +INDIRP4 +CNSTI4 376 +ADDP4 +INDIRF4 +SUBF4 +CNSTF4 1077936128 +DIVF4 +ASGNF4 +line 316 +;316: } +LABELV $186 +line 317 +;317: } +LABELV $183 +line 319 +;318: //if(self.classname!="monster_mezzoman"&&self.netname!="spider")//Cats always land on their feet +;319: if( ( magnitude >= 100 + self->health && self->s.number != 0 && self->s.weapon != WP_SABER ) || ( magnitude >= 700 ) )//&& self.safe_time < level.time ))//health here is used to simulate structural integrity +ADDRLP4 76 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRF4 +ADDRLP4 76 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +CNSTI4 100 +ADDI4 +CVIF4 4 +LTF4 $191 +ADDRLP4 76 +INDIRP4 +INDIRI4 +CNSTI4 0 +EQI4 $191 +ADDRLP4 76 +INDIRP4 +CNSTI4 276 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $189 +LABELV $191 +ADDRLP4 0 +INDIRF4 +CNSTF4 1143930880 +LTF4 $187 +LABELV $189 +line 320 +;320: { +line 321 +;321: if ( (self->s.weapon == WP_SABER || self->s.number == 0) && self->client && self->client->ps.groundEntityNum < ENTITYNUM_NONE && magnitude < 1000 ) +ADDRLP4 80 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 80 +INDIRP4 +CNSTI4 276 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $194 +ADDRLP4 80 +INDIRP4 +INDIRI4 +CNSTI4 0 +NEI4 $192 +LABELV $194 +ADDRLP4 84 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 84 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $192 +ADDRLP4 84 +INDIRP4 +CNSTI4 84 +ADDP4 +INDIRI4 +CNSTI4 1023 +GEI4 $192 +ADDRLP4 0 +INDIRF4 +CNSTF4 1148846080 +GEF4 $192 +line 322 +;322: {//players and jedi take less impact damage +line 324 +;323: //allow for some lenience on high falls +;324: magnitude /= 2; +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +CNSTF4 1073741824 +DIVF4 +ASGNF4 +line 331 +;325: /* +;326: if ( self.absorb_time >= time )//crouching on impact absorbs 1/2 the damage +;327: { +;328: magnitude/=2; +;329: } +;330: */ +;331: } +LABELV $192 +line 332 +;332: magnitude /= 40; +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +CNSTF4 1109393408 +DIVF4 +ASGNF4 +line 333 +;333: magnitude = magnitude - force/2;//If damage other, subtract half of that damage off of own injury +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +ADDRLP4 36 +INDIRF4 +CNSTF4 1073741824 +DIVF4 +SUBF4 +ASGNF4 +line 334 +;334: if ( magnitude >= 1 ) +ADDRLP4 0 +INDIRF4 +CNSTF4 1065353216 +LTF4 $195 +line 335 +;335: { +line 348 +;336: //FIXME: Put in a thingtype impact sound function +;337: /* +;338: dprint("Damage self ("); +;339: dprint(self.classname); +;340: dprint("): "); +;341: dprint(ftos(magnitude)); +;342: dprint("\n"); +;343: */ +;344: /* +;345: if ( self.classname=="player_sheep "&& self.flags&FL_ONGROUND && self.velocity_z > -50 ) +;346: return; +;347: */ +;348: G_Damage( self, NULL, NULL, NULL, self->r.currentOrigin, magnitude/2, DAMAGE_NO_ARMOR, MOD_FALLING );//FIXME: MOD_IMPACT +ADDRLP4 88 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 88 +INDIRP4 +ARGP4 +ADDRLP4 92 +CNSTP4 0 +ASGNP4 +ADDRLP4 92 +INDIRP4 +ARGP4 +ADDRLP4 92 +INDIRP4 +ARGP4 +CNSTP4 0 +ARGP4 +ADDRLP4 88 +INDIRP4 +CNSTI4 368 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRF4 +CNSTF4 1073741824 +DIVF4 +CVFI4 4 +ARGI4 +CNSTI4 2 +ARGI4 +CNSTI4 34 +ARGI4 +ADDRGP4 G_Damage +CALLV +pop +line 349 +;349: } +LABELV $195 +line 350 +;350: } +LABELV $187 +line 351 +;351: } +LABELV $181 +line 362 +;352: +;353: //FIXME: slow my velocity some? +;354: +;355: // NOTENOTE We don't use lastimpact as of yet +;356:// self->lastImpact = level.time; +;357: +;358: /* +;359: if(self.flags&FL_ONGROUND) +;360: self.last_onground=time; +;361: */ +;362: } +LABELV $151 +line 363 +;363:} +LABELV $140 +endproc DoImpact 96 32 +export G_SetClientSound +proc G_SetClientSound 8 0 +line 370 +;364: +;365:/* +;366:=============== +;367:G_SetClientSound +;368:=============== +;369:*/ +;370:void G_SetClientSound( gentity_t *ent ) { +line 371 +;371: if (ent->waterlevel && (ent->watertype&(CONTENTS_LAVA|CONTENTS_SLIME)) ) { +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 748 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $198 +ADDRLP4 0 +INDIRP4 +CNSTI4 744 +ADDP4 +INDIRI4 +CNSTI4 131074 +BANDI4 +ADDRLP4 4 +INDIRI4 +EQI4 $198 +line 372 +;372: ent->client->ps.loopSound = level.snd_fry; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 476 +ADDP4 +ADDRGP4 level+220 +INDIRI4 +ASGNI4 +line 373 +;373: } else { +ADDRGP4 $199 +JUMPV +LABELV $198 +line 374 +;374: ent->client->ps.loopSound = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 476 +ADDP4 +CNSTI4 0 +ASGNI4 +line 375 +;375: } +LABELV $199 +line 376 +;376:} +LABELV $197 +endproc G_SetClientSound 8 0 +export ClientImpacts +proc ClientImpacts 1100 12 +line 387 +;377: +;378: +;379: +;380://============================================================== +;381: +;382:/* +;383:============== +;384:ClientImpacts +;385:============== +;386:*/ +;387:void ClientImpacts( gentity_t *ent, pmove_t *pm ) { +line 392 +;388: int i, j; +;389: trace_t trace; +;390: gentity_t *other; +;391: +;392: memset( &trace, 0, sizeof( trace ) ); +ADDRLP4 12 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 1080 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 393 +;393: for (i=0 ; inumtouch ; i++) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $205 +JUMPV +LABELV $202 +line 394 +;394: for (j=0 ; jtouchents[j] == pm->touchents[i] ) { +ADDRLP4 1092 +CNSTI4 2 +ASGNI4 +ADDRLP4 1096 +ADDRFP4 4 +INDIRP4 +CNSTI4 56 +ADDP4 +ASGNP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 1092 +INDIRI4 +LSHI4 +ADDRLP4 1096 +INDIRP4 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 1092 +INDIRI4 +LSHI4 +ADDRLP4 1096 +INDIRP4 +ADDP4 +INDIRI4 +NEI4 $210 +line 396 +;396: break; +ADDRGP4 $208 +JUMPV +LABELV $210 +line 398 +;397: } +;398: } +LABELV $207 +line 394 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $209 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +LTI4 $206 +LABELV $208 +line 399 +;399: if (j != i) { +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $212 +line 400 +;400: continue; // duplicated +ADDRGP4 $203 +JUMPV +LABELV $212 +line 402 +;401: } +;402: other = &g_entities[ pm->touchents[i] ]; +ADDRLP4 8 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 4 +INDIRP4 +CNSTI4 56 +ADDP4 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 404 +;403: +;404: if ( ( ent->r.svFlags & SVF_BOT ) && ( ent->touch ) ) { +ADDRLP4 1092 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1092 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $214 +ADDRLP4 1092 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $214 +line 405 +;405: ent->touch( ent, other, &trace ); +ADDRLP4 1096 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1096 +INDIRP4 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRLP4 1096 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CALLV +pop +line 406 +;406: } +LABELV $214 +line 408 +;407: +;408: if ( !other->touch ) { +ADDRLP4 8 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $216 +line 409 +;409: continue; +ADDRGP4 $203 +JUMPV +LABELV $216 +line 412 +;410: } +;411: +;412: other->touch( other, ent, &trace ); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CALLV +pop +line 413 +;413: } +LABELV $203 +line 393 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $205 +ADDRLP4 4 +INDIRI4 +ADDRFP4 4 +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +LTI4 $202 +line 415 +;414: +;415:} +LABELV $201 +endproc ClientImpacts 1100 12 +data +align 4 +LABELV $219 +byte 4 1109393408 +byte 4 1109393408 +byte 4 1112539136 +export G_TouchTriggers +code +proc G_TouchTriggers 5264 16 +line 425 +;416: +;417:/* +;418:============ +;419:G_TouchTriggers +;420: +;421:Find all trigger entities that ent's current position touches. +;422:Spectators will only interact with teleporters. +;423:============ +;424:*/ +;425:void G_TouchTriggers( gentity_t *ent ) { +line 433 +;426: int i, num; +;427: int touch[MAX_GENTITIES]; +;428: gentity_t *hit; +;429: trace_t trace; +;430: vec3_t mins, maxs; +;431: static vec3_t range = { 40, 40, 52 }; +;432: +;433: if ( !ent->client ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $220 +line 434 +;434: return; +ADDRGP4 $218 +JUMPV +LABELV $220 +line 438 +;435: } +;436: +;437: // dead clients don't activate triggers! +;438: if ( ent->client->ps.stats[STAT_HEALTH] <= 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $222 +line 439 +;439: return; +ADDRGP4 $218 +JUMPV +LABELV $222 +line 442 +;440: } +;441: +;442: VectorSubtract( ent->client->ps.origin, range, mins ); +ADDRLP4 5212 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +ASGNP4 +ADDRLP4 1088 +ADDRLP4 5212 +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRGP4 $219 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1088+4 +ADDRLP4 5212 +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRGP4 $219+4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1088+8 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRGP4 $219+8 +INDIRF4 +SUBF4 +ASGNF4 +line 443 +;443: VectorAdd( ent->client->ps.origin, range, maxs ); +ADDRLP4 5216 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +ASGNP4 +ADDRLP4 1100 +ADDRLP4 5216 +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRGP4 $219 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1100+4 +ADDRLP4 5216 +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRGP4 $219+4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1100+8 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRGP4 $219+8 +INDIRF4 +ADDF4 +ASGNF4 +line 445 +;444: +;445: num = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES ); +ADDRLP4 1088 +ARGP4 +ADDRLP4 1100 +ARGP4 +ADDRLP4 1116 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 5220 +ADDRGP4 trap_EntitiesInBox +CALLI4 +ASGNI4 +ADDRLP4 1112 +ADDRLP4 5220 +INDIRI4 +ASGNI4 +line 448 +;446: +;447: // can't use ent->r.absmin, because that has a one unit pad +;448: VectorAdd( ent->client->ps.origin, ent->r.mins, mins ); +ADDRLP4 5224 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 5228 +ADDRLP4 5224 +INDIRP4 +CNSTI4 408 +ADDP4 +ASGNP4 +ADDRLP4 1088 +ADDRLP4 5228 +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 5224 +INDIRP4 +CNSTI4 316 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1088+4 +ADDRLP4 5228 +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 5224 +INDIRP4 +CNSTI4 320 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 5232 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1088+8 +ADDRLP4 5232 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 5232 +INDIRP4 +CNSTI4 324 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +line 449 +;449: VectorAdd( ent->client->ps.origin, ent->r.maxs, maxs ); +ADDRLP4 5236 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 5240 +ADDRLP4 5236 +INDIRP4 +CNSTI4 408 +ADDP4 +ASGNP4 +ADDRLP4 1100 +ADDRLP4 5240 +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 5236 +INDIRP4 +CNSTI4 328 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1100+4 +ADDRLP4 5240 +INDIRP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 5236 +INDIRP4 +CNSTI4 332 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 5244 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1100+8 +ADDRLP4 5244 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 5244 +INDIRP4 +CNSTI4 336 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +line 451 +;450: +;451: for ( i=0 ; itouch && !ent->touch ) { +ADDRLP4 5248 +CNSTI4 648 +ASGNI4 +ADDRLP4 5252 +CNSTU4 0 +ASGNU4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 5248 +INDIRI4 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 5252 +INDIRU4 +NEU4 $240 +ADDRFP4 0 +INDIRP4 +ADDRLP4 5248 +INDIRI4 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 5252 +INDIRU4 +NEU4 $240 +line 455 +;455: continue; +ADDRGP4 $237 +JUMPV +LABELV $240 +line 457 +;456: } +;457: if ( !( hit->r.contents & CONTENTS_TRIGGER ) ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 340 +ADDP4 +INDIRI4 +CNSTI4 1024 +BANDI4 +CNSTI4 0 +NEI4 $242 +line 458 +;458: continue; +ADDRGP4 $237 +JUMPV +LABELV $242 +line 462 +;459: } +;460: +;461: // ignore most entities if a spectator +;462: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $244 +line 463 +;463: if ( hit->s.eType != ET_TELEPORT_TRIGGER && +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 11 +EQI4 $246 +ADDRLP4 0 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRGP4 Touch_DoorTrigger +CVPU4 4 +EQU4 $246 +line 466 +;464: // this is ugly but adding a new ET_? type will +;465: // most likely cause network incompatibilities +;466: hit->touch != Touch_DoorTrigger) { +line 467 +;467: continue; +ADDRGP4 $237 +JUMPV +LABELV $246 +line 469 +;468: } +;469: } +LABELV $244 +line 473 +;470: +;471: // use seperate code for determining if an item is picked up +;472: // so you don't have to actually contact its bounding box +;473: if ( hit->s.eType == ET_ITEM ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $248 +line 474 +;474: if ( !BG_PlayerTouchesItem( &ent->client->ps, &hit->s, level.time ) ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 level+32 +INDIRI4 +ARGI4 +ADDRLP4 5256 +ADDRGP4 BG_PlayerTouchesItem +CALLI4 +ASGNI4 +ADDRLP4 5256 +INDIRI4 +CNSTI4 0 +NEI4 $249 +line 475 +;475: continue; +ADDRGP4 $237 +JUMPV +line 477 +;476: } +;477: } else { +LABELV $248 +line 478 +;478: if ( !trap_EntityContact( mins, maxs, hit ) ) { +ADDRLP4 1088 +ARGP4 +ADDRLP4 1100 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 5256 +ADDRGP4 trap_EntityContact +CALLI4 +ASGNI4 +ADDRLP4 5256 +INDIRI4 +CNSTI4 0 +NEI4 $253 +line 479 +;479: continue; +ADDRGP4 $237 +JUMPV +LABELV $253 +line 481 +;480: } +;481: } +LABELV $249 +line 483 +;482: +;483: memset( &trace, 0, sizeof(trace) ); +ADDRLP4 8 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 1080 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 485 +;484: +;485: if ( hit->touch ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $255 +line 486 +;486: hit->touch (hit, ent, &trace); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CALLV +pop +line 487 +;487: } +LABELV $255 +line 489 +;488: +;489: if ( ( ent->r.svFlags & SVF_BOT ) && ( ent->touch ) ) { +ADDRLP4 5256 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 5256 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $257 +ADDRLP4 5256 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $257 +line 490 +;490: ent->touch( ent, hit, &trace ); +ADDRLP4 5260 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 5260 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRLP4 5260 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CALLV +pop +line 491 +;491: } +LABELV $257 +line 492 +;492: } +LABELV $237 +line 451 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $239 +ADDRLP4 4 +INDIRI4 +ADDRLP4 1112 +INDIRI4 +LTI4 $236 +line 495 +;493: +;494: // if we didn't touch a jump pad this pmove frame +;495: if ( ent->client->ps.jumppad_frame != ent->client->ps.pmove_framecount ) { +ADDRLP4 5248 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 5248 +INDIRP4 +CNSTI4 492 +ADDP4 +INDIRI4 +ADDRLP4 5248 +INDIRP4 +CNSTI4 488 +ADDP4 +INDIRI4 +EQI4 $259 +line 496 +;496: ent->client->ps.jumppad_frame = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 492 +ADDP4 +CNSTI4 0 +ASGNI4 +line 497 +;497: ent->client->ps.jumppad_ent = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 480 +ADDP4 +CNSTI4 0 +ASGNI4 +line 498 +;498: } +LABELV $259 +line 499 +;499:} +LABELV $218 +endproc G_TouchTriggers 5264 16 +lit +align 4 +LABELV $262 +byte 4 1109393408 +byte 4 1109393408 +byte 4 1112539136 +export G_MoverTouchPushTriggers +code +proc G_MoverTouchPushTriggers 5328 16 +line 511 +;500: +;501: +;502:/* +;503:============ +;504:G_MoverTouchTriggers +;505: +;506:Find all trigger entities that ent's current position touches. +;507:Spectators will only interact with teleporters. +;508:============ +;509:*/ +;510:void G_MoverTouchPushTriggers( gentity_t *ent, vec3_t oldOrg ) +;511:{ +line 518 +;512: int i, num; +;513: float step, stepSize, dist; +;514: int touch[MAX_GENTITIES]; +;515: gentity_t *hit; +;516: trace_t trace; +;517: vec3_t mins, maxs, dir, size, checkSpot; +;518: const vec3_t range = { 40, 40, 52 }; +ADDRLP4 5224 +ADDRGP4 $262 +INDIRB +ASGNB 12 +line 521 +;519: +;520: // non-moving movers don't hit triggers! +;521: if ( !VectorLengthSquared( ent->s.pos.trDelta ) ) +ADDRFP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +ARGP4 +ADDRLP4 5272 +ADDRGP4 VectorLengthSquared +CALLF4 +ASGNF4 +ADDRLP4 5272 +INDIRF4 +CNSTF4 0 +NEF4 $263 +line 522 +;522: { +line 523 +;523: return; +ADDRGP4 $261 +JUMPV +LABELV $263 +line 526 +;524: } +;525: +;526: VectorSubtract( ent->r.mins, ent->r.maxs, size ); +ADDRLP4 5276 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 5260 +ADDRLP4 5276 +INDIRP4 +CNSTI4 316 +ADDP4 +INDIRF4 +ADDRLP4 5276 +INDIRP4 +CNSTI4 328 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 5260+4 +ADDRLP4 5276 +INDIRP4 +CNSTI4 320 +ADDP4 +INDIRF4 +ADDRLP4 5276 +INDIRP4 +CNSTI4 332 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 5280 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 5260+8 +ADDRLP4 5280 +INDIRP4 +CNSTI4 324 +ADDP4 +INDIRF4 +ADDRLP4 5280 +INDIRP4 +CNSTI4 336 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 527 +;527: stepSize = VectorLength( size ); +ADDRLP4 5260 +ARGP4 +ADDRLP4 5284 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 5252 +ADDRLP4 5284 +INDIRF4 +ASGNF4 +line 528 +;528: if ( stepSize < 1 ) +ADDRLP4 5252 +INDIRF4 +CNSTF4 1065353216 +GEF4 $267 +line 529 +;529: { +line 530 +;530: stepSize = 1; +ADDRLP4 5252 +CNSTF4 1065353216 +ASGNF4 +line 531 +;531: } +LABELV $267 +line 533 +;532: +;533: VectorSubtract( ent->r.currentOrigin, oldOrg, dir ); +ADDRLP4 5288 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 5292 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 5240 +ADDRLP4 5288 +INDIRP4 +CNSTI4 368 +ADDP4 +INDIRF4 +ADDRLP4 5292 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 5240+4 +ADDRLP4 5288 +INDIRP4 +CNSTI4 372 +ADDP4 +INDIRF4 +ADDRLP4 5292 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 5240+8 +ADDRFP4 0 +INDIRP4 +CNSTI4 376 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 534 +;534: dist = VectorNormalize( dir ); +ADDRLP4 5240 +ARGP4 +ADDRLP4 5296 +ADDRGP4 VectorNormalize +CALLF4 +ASGNF4 +ADDRLP4 5256 +ADDRLP4 5296 +INDIRF4 +ASGNF4 +line 535 +;535: for ( step = 0; step <= dist; step += stepSize ) +ADDRLP4 5236 +CNSTF4 0 +ASGNF4 +ADDRGP4 $274 +JUMPV +LABELV $271 +line 536 +;536: { +line 537 +;537: VectorMA( ent->r.currentOrigin, step, dir, checkSpot ); +ADDRLP4 5300 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1112 +ADDRLP4 5300 +INDIRP4 +CNSTI4 368 +ADDP4 +INDIRF4 +ADDRLP4 5240 +INDIRF4 +ADDRLP4 5236 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 1112+4 +ADDRLP4 5300 +INDIRP4 +CNSTI4 372 +ADDP4 +INDIRF4 +ADDRLP4 5240+4 +INDIRF4 +ADDRLP4 5236 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 1112+8 +ADDRFP4 0 +INDIRP4 +CNSTI4 376 +ADDP4 +INDIRF4 +ADDRLP4 5240+8 +INDIRF4 +ADDRLP4 5236 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 538 +;538: VectorSubtract( checkSpot, range, mins ); +ADDRLP4 1088 +ADDRLP4 1112 +INDIRF4 +ADDRLP4 5224 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1088+4 +ADDRLP4 1112+4 +INDIRF4 +ADDRLP4 5224+4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 1088+8 +ADDRLP4 1112+8 +INDIRF4 +ADDRLP4 5224+8 +INDIRF4 +SUBF4 +ASGNF4 +line 539 +;539: VectorAdd( checkSpot, range, maxs ); +ADDRLP4 1100 +ADDRLP4 1112 +INDIRF4 +ADDRLP4 5224 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1100+4 +ADDRLP4 1112+4 +INDIRF4 +ADDRLP4 5224+4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1100+8 +ADDRLP4 1112+8 +INDIRF4 +ADDRLP4 5224+8 +INDIRF4 +ADDF4 +ASGNF4 +line 541 +;540: +;541: num = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES ); +ADDRLP4 1088 +ARGP4 +ADDRLP4 1100 +ARGP4 +ADDRLP4 1128 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 5308 +ADDRGP4 trap_EntitiesInBox +CALLI4 +ASGNI4 +ADDRLP4 1124 +ADDRLP4 5308 +INDIRI4 +ASGNI4 +line 544 +;542: +;543: // can't use ent->r.absmin, because that has a one unit pad +;544: VectorAdd( checkSpot, ent->r.mins, mins ); +ADDRLP4 5312 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1088 +ADDRLP4 1112 +INDIRF4 +ADDRLP4 5312 +INDIRP4 +CNSTI4 316 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1088+4 +ADDRLP4 1112+4 +INDIRF4 +ADDRLP4 5312 +INDIRP4 +CNSTI4 320 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1088+8 +ADDRLP4 1112+8 +INDIRF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 324 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +line 545 +;545: VectorAdd( checkSpot, ent->r.maxs, maxs ); +ADDRLP4 5316 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1100 +ADDRLP4 1112 +INDIRF4 +ADDRLP4 5316 +INDIRP4 +CNSTI4 328 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1100+4 +ADDRLP4 1112+4 +INDIRF4 +ADDRLP4 5316 +INDIRP4 +CNSTI4 332 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 1100+8 +ADDRLP4 1112+8 +INDIRF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 336 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +line 547 +;546: +;547: for ( i=0 ; is.eType != ET_PUSH_TRIGGER ) +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 10 +EQI4 $303 +line 552 +;552: { +line 553 +;553: continue; +ADDRGP4 $300 +JUMPV +LABELV $303 +line 556 +;554: } +;555: +;556: if ( hit->touch == NULL ) +ADDRLP4 0 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $305 +line 557 +;557: { +line 558 +;558: continue; +ADDRGP4 $300 +JUMPV +LABELV $305 +line 561 +;559: } +;560: +;561: if ( !( hit->r.contents & CONTENTS_TRIGGER ) ) +ADDRLP4 0 +INDIRP4 +CNSTI4 340 +ADDP4 +INDIRI4 +CNSTI4 1024 +BANDI4 +CNSTI4 0 +NEI4 $307 +line 562 +;562: { +line 563 +;563: continue; +ADDRGP4 $300 +JUMPV +LABELV $307 +line 567 +;564: } +;565: +;566: +;567: if ( !trap_EntityContact( mins, maxs, hit ) ) +ADDRLP4 1088 +ARGP4 +ADDRLP4 1100 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 5320 +ADDRGP4 trap_EntityContact +CALLI4 +ASGNI4 +ADDRLP4 5320 +INDIRI4 +CNSTI4 0 +NEI4 $309 +line 568 +;568: { +line 569 +;569: continue; +ADDRGP4 $300 +JUMPV +LABELV $309 +line 572 +;570: } +;571: +;572: memset( &trace, 0, sizeof(trace) ); +ADDRLP4 8 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 1080 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 574 +;573: +;574: if ( hit->touch != NULL ) +ADDRLP4 0 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $311 +line 575 +;575: { +line 576 +;576: hit->touch(hit, ent, &trace); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 648 +ADDP4 +INDIRP4 +CALLV +pop +line 577 +;577: } +LABELV $311 +line 578 +;578: } +LABELV $300 +line 547 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $302 +ADDRLP4 4 +INDIRI4 +ADDRLP4 1124 +INDIRI4 +LTI4 $299 +line 579 +;579: } +LABELV $272 +line 535 +ADDRLP4 5236 +ADDRLP4 5236 +INDIRF4 +ADDRLP4 5252 +INDIRF4 +ADDF4 +ASGNF4 +LABELV $274 +ADDRLP4 5236 +INDIRF4 +ADDRLP4 5256 +INDIRF4 +LEF4 $271 +line 580 +;580:} +LABELV $261 +endproc G_MoverTouchPushTriggers 5328 16 +export SpectatorThink +proc SpectatorThink 396 12 +line 587 +;581: +;582:/* +;583:================= +;584:SpectatorThink +;585:================= +;586:*/ +;587:void SpectatorThink( gentity_t *ent, usercmd_t *ucmd ) { +line 591 +;588: pmove_t pm; +;589: gclient_t *client; +;590: +;591: client = ent->client; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 593 +;592: +;593: if ( client->sess.spectatorState != SPECTATOR_FOLLOW ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $314 +line 594 +;594: client->ps.pm_type = PM_SPECTATOR; +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 3 +ASGNI4 +line 595 +;595: client->ps.speed = 400; // faster than normal +ADDRLP4 0 +INDIRP4 +CNSTI4 60 +ADDP4 +CNSTI4 400 +ASGNI4 +line 596 +;596: client->ps.basespeed = 400; +ADDRLP4 0 +INDIRP4 +CNSTI4 64 +ADDP4 +CNSTI4 400 +ASGNI4 +line 599 +;597: +;598: // set up for pmove +;599: memset (&pm, 0, sizeof(pm)); +ADDRLP4 4 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 376 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 600 +;600: pm.ps = &client->ps; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 601 +;601: pm.cmd = *ucmd; +ADDRLP4 4+4 +ADDRFP4 4 +INDIRP4 +INDIRB +ASGNB 28 +line 602 +;602: pm.tracemask = MASK_PLAYERSOLID & ~CONTENTS_BODY; // spectators can fly through bodies +ADDRLP4 4+32 +CNSTI4 17 +ASGNI4 +line 603 +;603: pm.trace = trap_Trace; +ADDRLP4 4+240 +ADDRGP4 trap_Trace +ASGNP4 +line 604 +;604: pm.pointcontents = trap_PointContents; +ADDRLP4 4+244 +ADDRGP4 trap_PointContents +ASGNP4 +line 606 +;605: +;606: pm.animations = NULL; +ADDRLP4 4+224 +CNSTP4 0 +ASGNP4 +line 609 +;607: +;608: // perform a pmove +;609: Pmove (&pm); +ADDRLP4 4 +ARGP4 +ADDRGP4 Pmove +CALLV +pop +line 611 +;610: // save results of pmove +;611: VectorCopy( client->ps.origin, ent->s.origin ); +ADDRFP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 613 +;612: +;613: G_TouchTriggers( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_TouchTriggers +CALLV +pop +line 614 +;614: trap_UnlinkEntity( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_UnlinkEntity +CALLV +pop +line 615 +;615: } +LABELV $314 +line 617 +;616: +;617: client->oldbuttons = client->buttons; +ADDRLP4 0 +INDIRP4 +CNSTI4 1588 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1584 +ADDP4 +INDIRI4 +ASGNI4 +line 618 +;618: client->buttons = ucmd->buttons; +ADDRLP4 0 +INDIRP4 +CNSTI4 1584 +ADDP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ASGNI4 +line 621 +;619: +;620: // attack button cycles through spectators +;621: if ( ( client->buttons & BUTTON_ATTACK ) && ! ( client->oldbuttons & BUTTON_ATTACK ) ) { +ADDRLP4 388 +CNSTI4 1 +ASGNI4 +ADDRLP4 392 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1584 +ADDP4 +INDIRI4 +ADDRLP4 388 +INDIRI4 +BANDI4 +ADDRLP4 392 +INDIRI4 +EQI4 $321 +ADDRLP4 0 +INDIRP4 +CNSTI4 1588 +ADDP4 +INDIRI4 +ADDRLP4 388 +INDIRI4 +BANDI4 +ADDRLP4 392 +INDIRI4 +NEI4 $321 +line 622 +;622: Cmd_FollowCycle_f( ent, 1 ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Cmd_FollowCycle_f +CALLV +pop +line 623 +;623: } +LABELV $321 +line 625 +;624: +;625: if (client->sess.spectatorState == SPECTATOR_FOLLOW && (ucmd->upmove > 0)) +ADDRLP4 0 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $323 +ADDRFP4 4 +INDIRP4 +CNSTI4 26 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +LEI4 $323 +line 626 +;626: { //jump now removes you from follow mode +line 627 +;627: StopFollowing(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 StopFollowing +CALLV +pop +line 628 +;628: } +LABELV $323 +line 629 +;629:} +LABELV $313 +endproc SpectatorThink 396 12 +export ClientInactivityTimer +proc ClientInactivityTimer 12 8 +line 640 +;630: +;631: +;632: +;633:/* +;634:================= +;635:ClientInactivityTimer +;636: +;637:Returns qfalse if the client is dropped +;638:================= +;639:*/ +;640:qboolean ClientInactivityTimer( gclient_t *client ) { +line 641 +;641: if ( ! g_inactivity.integer ) { +ADDRGP4 g_inactivity+12 +INDIRI4 +CNSTI4 0 +NEI4 $326 +line 644 +;642: // give everyone some time, so if the operator sets g_inactivity during +;643: // gameplay, everyone isn't kicked +;644: client->inactivityTime = level.time + 60 * 1000; +ADDRFP4 0 +INDIRP4 +CNSTI4 1676 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 60000 +ADDI4 +ASGNI4 +line 645 +;645: client->inactivityWarning = qfalse; +ADDRFP4 0 +INDIRP4 +CNSTI4 1680 +ADDP4 +CNSTI4 0 +ASGNI4 +line 646 +;646: } else if ( client->pers.cmd.forwardmove || +ADDRGP4 $327 +JUMPV +LABELV $326 +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1396 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 4 +INDIRI4 +NEI4 $334 +ADDRLP4 0 +INDIRP4 +CNSTI4 1397 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 4 +INDIRI4 +NEI4 $334 +ADDRLP4 0 +INDIRP4 +CNSTI4 1398 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 4 +INDIRI4 +NEI4 $334 +ADDRLP4 0 +INDIRP4 +CNSTI4 1388 +ADDP4 +INDIRI4 +CNSTI4 129 +BANDI4 +ADDRLP4 4 +INDIRI4 +EQI4 $330 +LABELV $334 +line 649 +;647: client->pers.cmd.rightmove || +;648: client->pers.cmd.upmove || +;649: (client->pers.cmd.buttons & (BUTTON_ATTACK|BUTTON_ALT_ATTACK)) ) { +line 650 +;650: client->inactivityTime = level.time + g_inactivity.integer * 1000; +ADDRFP4 0 +INDIRP4 +CNSTI4 1676 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 1000 +ADDRGP4 g_inactivity+12 +INDIRI4 +MULI4 +ADDI4 +ASGNI4 +line 651 +;651: client->inactivityWarning = qfalse; +ADDRFP4 0 +INDIRP4 +CNSTI4 1680 +ADDP4 +CNSTI4 0 +ASGNI4 +line 652 +;652: } else if ( !client->pers.localClient ) { +ADDRGP4 $331 +JUMPV +LABELV $330 +ADDRFP4 0 +INDIRP4 +CNSTI4 1400 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $337 +line 653 +;653: if ( level.time > client->inactivityTime ) { +ADDRGP4 level+32 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1676 +ADDP4 +INDIRI4 +LEI4 $339 +line 654 +;654: trap_DropClient( client - level.clients, "Dropped due to inactivity" ); +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 level +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1756 +DIVI4 +ARGI4 +ADDRGP4 $342 +ARGP4 +ADDRGP4 trap_DropClient +CALLV +pop +line 655 +;655: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $325 +JUMPV +LABELV $339 +line 657 +;656: } +;657: if ( level.time > client->inactivityTime - 10000 && !client->inactivityWarning ) { +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 level+32 +INDIRI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 1676 +ADDP4 +INDIRI4 +CNSTI4 10000 +SUBI4 +LEI4 $343 +ADDRLP4 8 +INDIRP4 +CNSTI4 1680 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $343 +line 658 +;658: client->inactivityWarning = qtrue; +ADDRFP4 0 +INDIRP4 +CNSTI4 1680 +ADDP4 +CNSTI4 1 +ASGNI4 +line 659 +;659: trap_SendServerCommand( client - level.clients, "cp \"Ten seconds until inactivity drop!\n\"" ); +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 level +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1756 +DIVI4 +ARGI4 +ADDRGP4 $346 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 660 +;660: } +LABELV $343 +line 661 +;661: } +LABELV $337 +LABELV $331 +LABELV $327 +line 662 +;662: return qtrue; +CNSTI4 1 +RETI4 +LABELV $325 +endproc ClientInactivityTimer 12 8 +export ClientTimerActions +proc ClientTimerActions 20 0 +line 672 +;663:} +;664: +;665:/* +;666:================== +;667:ClientTimerActions +;668: +;669:Actions that happen once a second +;670:================== +;671:*/ +;672:void ClientTimerActions( gentity_t *ent, int msec ) { +line 675 +;673: gclient_t *client; +;674: +;675: client = ent->client; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 676 +;676: client->timeResidual += msec; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1708 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ADDRFP4 4 +INDIRI4 +ADDI4 +ASGNI4 +ADDRGP4 $349 +JUMPV +LABELV $348 +line 679 +;677: +;678: while ( client->timeResidual >= 1000 ) +;679: { +line 680 +;680: client->timeResidual -= 1000; +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +CNSTI4 1708 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1000 +SUBI4 +ASGNI4 +line 683 +;681: +;682: // count down health when over max +;683: if ( ent->health > client->ps.stats[STAT_MAX_HEALTH] ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +LEI4 $351 +line 684 +;684: ent->health--; +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 685 +;685: } +LABELV $351 +line 688 +;686: +;687: // count down armor when over max +;688: if ( client->ps.stats[STAT_ARMOR] > client->ps.stats[STAT_MAX_HEALTH] ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 236 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +LEI4 $353 +line 689 +;689: client->ps.stats[STAT_ARMOR]--; +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +CNSTI4 236 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 690 +;690: } +LABELV $353 +line 691 +;691: } +LABELV $349 +line 678 +ADDRLP4 0 +INDIRP4 +CNSTI4 1708 +ADDP4 +INDIRI4 +CNSTI4 1000 +GEI4 $348 +line 692 +;692:} +LABELV $347 +endproc ClientTimerActions 20 0 +export ClientIntermissionThink +proc ClientIntermissionThink 24 0 +line 699 +;693: +;694:/* +;695:==================== +;696:ClientIntermissionThink +;697:==================== +;698:*/ +;699:void ClientIntermissionThink( gclient_t *client ) { +line 700 +;700: client->ps.eFlags &= ~EF_TALK; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +CNSTI4 -4097 +BANDI4 +ASGNI4 +line 701 +;701: client->ps.eFlags &= ~EF_FIRING; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +CNSTI4 -257 +BANDI4 +ASGNI4 +line 706 +;702: +;703: // the level will exit when everyone wants to or after timeouts +;704: +;705: // swap and latch button actions +;706: client->oldbuttons = client->buttons; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 1588 +ADDP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 1584 +ADDP4 +INDIRI4 +ASGNI4 +line 707 +;707: client->buttons = client->pers.cmd.buttons; +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1584 +ADDP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1388 +ADDP4 +INDIRI4 +ASGNI4 +line 708 +;708: if ( client->buttons & ( BUTTON_ATTACK | BUTTON_USE_HOLDABLE ) & ( client->oldbuttons ^ client->buttons ) ) { +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +ADDRLP4 16 +INDIRP4 +CNSTI4 1584 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 5 +BANDI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 1588 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +BXORI4 +BANDI4 +CNSTI4 0 +EQI4 $356 +line 710 +;709: // this used to be an ^1 but once a player says ready, it should stick +;710: client->readyToExit = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 1572 +ADDP4 +CNSTI4 1 +ASGNI4 +line 711 +;711: } +LABELV $356 +line 712 +;712:} +LABELV $355 +endproc ClientIntermissionThink 24 0 +export ClientEvents +proc ClientEvents 68 32 +line 723 +;713: +;714: +;715:/* +;716:================ +;717:ClientEvents +;718: +;719:Events will be passed on to the clients for presentation, +;720:but any server game effects are handled here +;721:================ +;722:*/ +;723:void ClientEvents( gentity_t *ent, int oldEventSequence ) { +line 734 +;724: int i;//, j; +;725: int event; +;726: gclient_t *client; +;727: int damage; +;728: vec3_t dir; +;729:// vec3_t origin, angles; +;730:// qboolean fired; +;731:// gitem_t *item; +;732:// gentity_t *drop; +;733: +;734: client = ent->client; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 736 +;735: +;736: if ( oldEventSequence < client->ps.eventSequence - MAX_PS_EVENTS ) { +ADDRFP4 4 +INDIRI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +GEI4 $359 +line 737 +;737: oldEventSequence = client->ps.eventSequence - MAX_PS_EVENTS; +ADDRFP4 4 +ADDRLP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +ASGNI4 +line 738 +;738: } +LABELV $359 +line 739 +;739: for ( i = oldEventSequence ; i < client->ps.eventSequence ; i++ ) { +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRGP4 $364 +JUMPV +LABELV $361 +line 740 +;740: event = client->ps.events[ i & (MAX_PS_EVENTS-1) ]; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 742 +;741: +;742: switch ( event ) { +ADDRLP4 32 +CNSTI4 15 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 32 +INDIRI4 +EQI4 $367 +ADDRLP4 4 +INDIRI4 +ADDRLP4 32 +INDIRI4 +GTI4 $393 +LABELV $392 +ADDRLP4 4 +INDIRI4 +CNSTI4 11 +EQI4 $367 +ADDRGP4 $366 +JUMPV +LABELV $393 +ADDRLP4 40 +CNSTI4 24 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 40 +INDIRI4 +EQI4 $380 +ADDRLP4 4 +INDIRI4 +CNSTI4 25 +EQI4 $382 +ADDRLP4 4 +INDIRI4 +CNSTI4 26 +EQI4 $384 +ADDRLP4 4 +INDIRI4 +ADDRLP4 40 +INDIRI4 +LTI4 $366 +LABELV $394 +ADDRLP4 4 +INDIRI4 +CNSTI4 41 +LTI4 $366 +ADDRLP4 4 +INDIRI4 +CNSTI4 46 +GTI4 $366 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $395-164 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $395 +address $386 +address $387 +address $388 +address $366 +address $390 +address $391 +code +LABELV $367 +line 745 +;743: case EV_FALL: +;744: case EV_ROLL: +;745: { +line 746 +;746: int delta = client->ps.eventParms[ i & (MAX_PS_EVENTS-1) ]; +ADDRLP4 48 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 124 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 748 +;747: +;748: if (ent->client && ent->client->ps.fallingToDeath) +ADDRLP4 52 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $368 +ADDRLP4 52 +INDIRP4 +CNSTI4 1340 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $368 +line 749 +;749: { +line 750 +;750: break; +ADDRGP4 $366 +JUMPV +LABELV $368 +line 753 +;751: } +;752: +;753: if ( ent->s.eType != ET_PLAYER ) +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +CNSTI4 1 +EQI4 $370 +line 754 +;754: { +line 755 +;755: break; // not in the player model +ADDRGP4 $366 +JUMPV +LABELV $370 +line 758 +;756: } +;757: +;758: if ( g_dmflags.integer & DF_NO_FALLING ) +ADDRGP4 g_dmflags+12 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $372 +line 759 +;759: { +line 760 +;760: break; +ADDRGP4 $366 +JUMPV +LABELV $372 +line 763 +;761: } +;762: +;763: if (delta <= 44) +ADDRLP4 48 +INDIRI4 +CNSTI4 44 +GTI4 $375 +line 764 +;764: { +line 765 +;765: break; +ADDRGP4 $366 +JUMPV +LABELV $375 +line 768 +;766: } +;767: +;768: damage = delta*0.16; //good enough for now, I guess +ADDRLP4 24 +CNSTF4 1042536202 +ADDRLP4 48 +INDIRI4 +CVIF4 4 +MULF4 +CVFI4 4 +ASGNI4 +line 770 +;769: +;770: VectorSet (dir, 0, 0, 1); +ADDRLP4 56 +CNSTF4 0 +ASGNF4 +ADDRLP4 12 +ADDRLP4 56 +INDIRF4 +ASGNF4 +ADDRLP4 12+4 +ADDRLP4 56 +INDIRF4 +ASGNF4 +ADDRLP4 12+8 +CNSTF4 1065353216 +ASGNF4 +line 771 +;771: ent->pain_debounce_time = level.time + 200; // no normal pain sound +ADDRFP4 0 +INDIRP4 +CNSTI4 664 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 200 +ADDI4 +ASGNI4 +line 772 +;772: G_Damage (ent, NULL, NULL, NULL, NULL, damage, DAMAGE_NO_ARMOR, MOD_FALLING); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 60 +CNSTP4 0 +ASGNP4 +ADDRLP4 60 +INDIRP4 +ARGP4 +ADDRLP4 60 +INDIRP4 +ARGP4 +ADDRLP4 64 +CNSTP4 0 +ASGNP4 +ADDRLP4 64 +INDIRP4 +ARGP4 +ADDRLP4 64 +INDIRP4 +ARGP4 +ADDRLP4 24 +INDIRI4 +ARGI4 +CNSTI4 2 +ARGI4 +CNSTI4 34 +ARGI4 +ADDRGP4 G_Damage +CALLV +pop +line 773 +;773: } +line 774 +;774: break; +ADDRGP4 $366 +JUMPV +LABELV $380 +line 776 +;775: case EV_FIRE_WEAPON: +;776: FireWeapon( ent, qfalse ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 FireWeapon +CALLV +pop +line 777 +;777: ent->client->dangerTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1748 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 778 +;778: ent->client->ps.eFlags &= ~EF_INVULNERABLE; +ADDRLP4 48 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 48 +INDIRP4 +ADDRLP4 48 +INDIRP4 +INDIRI4 +CNSTI4 -67108865 +BANDI4 +ASGNI4 +line 779 +;779: ent->client->invulnerableTimer = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1564 +ADDP4 +CNSTI4 0 +ASGNI4 +line 780 +;780: break; +ADDRGP4 $366 +JUMPV +LABELV $382 +line 783 +;781: +;782: case EV_ALT_FIRE: +;783: FireWeapon( ent, qtrue ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 FireWeapon +CALLV +pop +line 784 +;784: ent->client->dangerTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1748 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 785 +;785: ent->client->ps.eFlags &= ~EF_INVULNERABLE; +ADDRLP4 52 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +ADDRLP4 52 +INDIRP4 +INDIRI4 +CNSTI4 -67108865 +BANDI4 +ASGNI4 +line 786 +;786: ent->client->invulnerableTimer = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1564 +ADDP4 +CNSTI4 0 +ASGNI4 +line 787 +;787: break; +ADDRGP4 $366 +JUMPV +LABELV $384 +line 790 +;788: +;789: case EV_SABER_ATTACK: +;790: ent->client->dangerTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1748 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 791 +;791: ent->client->ps.eFlags &= ~EF_INVULNERABLE; +ADDRLP4 56 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 56 +INDIRP4 +ADDRLP4 56 +INDIRP4 +INDIRI4 +CNSTI4 -67108865 +BANDI4 +ASGNI4 +line 792 +;792: ent->client->invulnerableTimer = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1564 +ADDP4 +CNSTI4 0 +ASGNI4 +line 793 +;793: break; +ADDRGP4 $366 +JUMPV +LABELV $386 +line 797 +;794: +;795: //rww - Note that these must be in the same order (ITEM#-wise) as they are in holdable_t +;796: case EV_USE_ITEM1: //seeker droid +;797: ItemUse_Seeker(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Seeker +CALLV +pop +line 798 +;798: break; +ADDRGP4 $366 +JUMPV +LABELV $387 +line 800 +;799: case EV_USE_ITEM2: //shield +;800: ItemUse_Shield(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Shield +CALLV +pop +line 801 +;801: break; +ADDRGP4 $366 +JUMPV +LABELV $388 +line 803 +;802: case EV_USE_ITEM3: //medpack +;803: ItemUse_MedPack(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_MedPack +CALLV +pop +line 804 +;804: break; +ADDRGP4 $366 +JUMPV +line 807 +;805: case EV_USE_ITEM4: //datapad +;806: //G_Printf("Used Datapad\n"); +;807: break; +LABELV $390 +line 809 +;808: case EV_USE_ITEM5: //binoculars +;809: ItemUse_Binoculars(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Binoculars +CALLV +pop +line 810 +;810: break; +ADDRGP4 $366 +JUMPV +LABELV $391 +line 812 +;811: case EV_USE_ITEM6: //sentry gun +;812: ItemUse_Sentry(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Sentry +CALLV +pop +line 813 +;813: break; +line 816 +;814: +;815: default: +;816: break; +LABELV $366 +line 818 +;817: } +;818: } +LABELV $362 +line 739 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $364 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +LTI4 $361 +line 820 +;819: +;820:} +LABELV $358 +endproc ClientEvents 68 32 +export SendPendingPredictableEvents +proc SendPendingPredictableEvents 40 12 +line 827 +;821: +;822:/* +;823:============== +;824:SendPendingPredictableEvents +;825:============== +;826:*/ +;827:void SendPendingPredictableEvents( playerState_t *ps ) { +line 833 +;828: gentity_t *t; +;829: int event, seq; +;830: int extEvent, number; +;831: +;832: // if there are still events pending +;833: if ( ps->entityEventSequence < ps->eventSequence ) { +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +GEI4 $398 +line 836 +;834: // create a temporary entity for this event which is sent to everyone +;835: // except the client who generated the event +;836: seq = ps->entityEventSequence & (MAX_PS_EVENTS-1); +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +ASGNI4 +line 837 +;837: event = ps->events[ seq ] | ( ( ps->entityEventSequence & 3 ) << 8 ); +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 24 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDP4 +INDIRI4 +ADDRLP4 24 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 3 +BANDI4 +CNSTI4 8 +LSHI4 +BORI4 +ASGNI4 +line 839 +;838: // set external event to zero before calling BG_PlayerStateToEntityState +;839: extEvent = ps->externalEvent; +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +ASGNI4 +line 840 +;840: ps->externalEvent = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +CNSTI4 0 +ASGNI4 +line 842 +;841: // create temporary entity for event +;842: t = G_TempEntity( ps->origin, event ); +ADDRFP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 28 +ADDRGP4 G_TempEntity +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 28 +INDIRP4 +ASGNP4 +line 843 +;843: number = t->s.number; +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +line 844 +;844: BG_PlayerStateToEntityState( ps, &t->s, qtrue ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 BG_PlayerStateToEntityState +CALLV +pop +line 845 +;845: t->s.number = number; +ADDRLP4 0 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ASGNI4 +line 846 +;846: t->s.eType = ET_EVENTS + event; +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 16 +ADDI4 +ASGNI4 +line 847 +;847: t->s.eFlags |= EF_PLAYER_EVENT; +ADDRLP4 32 +ADDRLP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 32 +INDIRP4 +INDIRI4 +CNSTI4 16 +BORI4 +ASGNI4 +line 848 +;848: t->s.otherEntityNum = ps->clientNum; +ADDRLP4 0 +INDIRP4 +CNSTI4 184 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 850 +;849: // send to everyone except the client who generated the event +;850: t->r.svFlags |= SVF_NOTSINGLECLIENT; +ADDRLP4 36 +ADDRLP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 36 +INDIRP4 +INDIRI4 +CNSTI4 2048 +BORI4 +ASGNI4 +line 851 +;851: t->r.singleClient = ps->clientNum; +ADDRLP4 0 +INDIRP4 +CNSTI4 308 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 853 +;852: // set back external event +;853: ps->externalEvent = extEvent; +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 854 +;854: } +LABELV $398 +line 855 +;855:} +LABELV $397 +endproc SendPendingPredictableEvents 40 12 +proc G_UpdateForceSightBroadcasts 72 12 +line 875 +;856: +;857:extern int saberOffSound; +;858:extern int saberOnSound; +;859: +;860:/* +;861:================== +;862:G_UpdateClientBroadcasts +;863: +;864:Determines whether this client should be broadcast to any other clients. +;865:A client is broadcast when another client is using force sight or is +;866:================== +;867:*/ +;868:#define MAX_JEDIMASTER_DISTANCE 2500 +;869:#define MAX_JEDIMASTER_FOV 100 +;870: +;871:#define MAX_SIGHT_DISTANCE 1500 +;872:#define MAX_SIGHT_FOV 100 +;873: +;874:static void G_UpdateForceSightBroadcasts ( gentity_t *self ) +;875:{ +line 879 +;876: int i; +;877: +;878: // Any clients with force sight on should see this client +;879: for ( i = 0; i < level.numConnectedClients; i ++ ) +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $404 +JUMPV +LABELV $401 +line 880 +;880: { +line 881 +;881: gentity_t *ent = &g_entities[level.sortedClients[i]]; +ADDRLP4 4 +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 level+84 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 885 +;882: float dist; +;883: vec3_t angles; +;884: +;885: if ( ent == self ) +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +NEU4 $407 +line 886 +;886: { +line 887 +;887: continue; +ADDRGP4 $402 +JUMPV +LABELV $407 +line 891 +;888: } +;889: +;890: // Not using force sight so we shouldnt broadcast to this one +;891: if ( !(ent->client->ps.fd.forcePowersActive & (1<client->ps.origin, ent->client->ps.origin, angles ); +ADDRLP4 24 +CNSTI4 408 +ASGNI4 +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 32 +CNSTI4 20 +ASGNI4 +ADDRLP4 36 +ADDRLP4 4 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 28 +INDIRP4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 40 +CNSTI4 24 +ASGNI4 +ADDRLP4 8+4 +ADDRLP4 28 +INDIRP4 +INDIRP4 +ADDRLP4 40 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +INDIRP4 +ADDRLP4 40 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 44 +CNSTI4 408 +ASGNI4 +ADDRLP4 48 +CNSTI4 28 +ASGNI4 +ADDRLP4 8+8 +ADDRFP4 0 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 897 +;897: dist = VectorLengthSquared ( angles ); +ADDRLP4 8 +ARGP4 +ADDRLP4 52 +ADDRGP4 VectorLengthSquared +CALLF4 +ASGNF4 +ADDRLP4 20 +ADDRLP4 52 +INDIRF4 +ASGNF4 +line 898 +;898: vectoangles ( angles, angles ); +ADDRLP4 8 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 vectoangles +CALLV +pop +line 901 +;899: +;900: // Too far away then just forget it +;901: if ( dist > MAX_SIGHT_DISTANCE * MAX_SIGHT_DISTANCE ) +ADDRLP4 20 +INDIRF4 +CNSTF4 1242125376 +LEF4 $413 +line 902 +;902: { +line 903 +;903: continue; +ADDRGP4 $402 +JUMPV +LABELV $413 +line 907 +;904: } +;905: +;906: // If not within the field of view then forget it +;907: if ( !InFieldOfVision ( ent->client->ps.viewangles, MAX_SIGHT_FOV, angles ) ) +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 156 +ADDP4 +ARGP4 +CNSTF4 1120403456 +ARGF4 +ADDRLP4 8 +ARGP4 +ADDRLP4 56 +ADDRGP4 InFieldOfVision +CALLI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 0 +NEI4 $415 +line 908 +;908: { +line 909 +;909: break; +ADDRGP4 $403 +JUMPV +LABELV $415 +line 914 +;910: } +;911: +;912: // Turn on the broadcast bit for the master and since there is only one +;913: // master we are done +;914: self->r.broadcastClients[ent->s.clientNum/32] |= (1 << (ent->s.clientNum%32)); +ADDRLP4 60 +ADDRLP4 4 +INDIRP4 +CNSTI4 220 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 64 +CNSTI4 32 +ASGNI4 +ADDRLP4 68 +ADDRLP4 60 +INDIRI4 +ADDRLP4 64 +INDIRI4 +DIVI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 400 +ADDP4 +ADDP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +ADDRLP4 68 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 60 +INDIRI4 +ADDRLP4 64 +INDIRI4 +MODI4 +LSHI4 +BORI4 +ASGNI4 +line 916 +;915: +;916: break; +ADDRGP4 $403 +JUMPV +LABELV $402 +line 879 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $404 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+72 +INDIRI4 +LTI4 $401 +LABELV $403 +line 918 +;917: } +;918:} +LABELV $400 +endproc G_UpdateForceSightBroadcasts 72 12 +proc G_UpdateJediMasterBroadcasts 72 12 +line 921 +;919: +;920:static void G_UpdateJediMasterBroadcasts ( gentity_t *self ) +;921:{ +line 925 +;922: int i; +;923: +;924: // Not jedi master mode then nothing to do +;925: if ( g_gametype.integer != GT_JEDIMASTER ) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 2 +EQI4 $418 +line 926 +;926: { +line 927 +;927: return; +ADDRGP4 $417 +JUMPV +LABELV $418 +line 931 +;928: } +;929: +;930: // This client isnt the jedi master so it shouldnt broadcast +;931: if ( !self->client->ps.isJediMaster ) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 604 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $421 +line 932 +;932: { +line 933 +;933: return; +ADDRGP4 $417 +JUMPV +LABELV $421 +line 937 +;934: } +;935: +;936: // Broadcast ourself to all clients within range +;937: for ( i = 0; i < level.numConnectedClients; i ++ ) +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $426 +JUMPV +LABELV $423 +line 938 +;938: { +line 939 +;939: gentity_t *ent = &g_entities[level.sortedClients[i]]; +ADDRLP4 4 +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 level+84 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 943 +;940: float dist; +;941: vec3_t angles; +;942: +;943: if ( ent == self ) +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +NEU4 $429 +line 944 +;944: { +line 945 +;945: continue; +ADDRGP4 $424 +JUMPV +LABELV $429 +line 948 +;946: } +;947: +;948: VectorSubtract( self->client->ps.origin, ent->client->ps.origin, angles ); +ADDRLP4 24 +CNSTI4 408 +ASGNI4 +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 32 +CNSTI4 20 +ASGNI4 +ADDRLP4 36 +ADDRLP4 4 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 28 +INDIRP4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 40 +CNSTI4 24 +ASGNI4 +ADDRLP4 8+4 +ADDRLP4 28 +INDIRP4 +INDIRP4 +ADDRLP4 40 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +INDIRP4 +ADDRLP4 40 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 44 +CNSTI4 408 +ASGNI4 +ADDRLP4 48 +CNSTI4 28 +ASGNI4 +ADDRLP4 8+8 +ADDRFP4 0 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 949 +;949: dist = VectorLengthSquared ( angles ); +ADDRLP4 8 +ARGP4 +ADDRLP4 52 +ADDRGP4 VectorLengthSquared +CALLF4 +ASGNF4 +ADDRLP4 20 +ADDRLP4 52 +INDIRF4 +ASGNF4 +line 950 +;950: vectoangles ( angles, angles ); +ADDRLP4 8 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 vectoangles +CALLV +pop +line 953 +;951: +;952: // Too far away then just forget it +;953: if ( dist > MAX_JEDIMASTER_DISTANCE * MAX_JEDIMASTER_DISTANCE ) +ADDRLP4 20 +INDIRF4 +CNSTF4 1254013984 +LEF4 $433 +line 954 +;954: { +line 955 +;955: continue; +ADDRGP4 $424 +JUMPV +LABELV $433 +line 959 +;956: } +;957: +;958: // If not within the field of view then forget it +;959: if ( !InFieldOfVision ( ent->client->ps.viewangles, MAX_JEDIMASTER_FOV, angles ) ) +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 156 +ADDP4 +ARGP4 +CNSTF4 1120403456 +ARGF4 +ADDRLP4 8 +ARGP4 +ADDRLP4 56 +ADDRGP4 InFieldOfVision +CALLI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 0 +NEI4 $435 +line 960 +;960: { +line 961 +;961: continue; +ADDRGP4 $424 +JUMPV +LABELV $435 +line 966 +;962: } +;963: +;964: // Turn on the broadcast bit for the master and since there is only one +;965: // master we are done +;966: self->r.broadcastClients[ent->s.clientNum/32] |= (1 << (ent->s.clientNum%32)); +ADDRLP4 60 +ADDRLP4 4 +INDIRP4 +CNSTI4 220 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 64 +CNSTI4 32 +ASGNI4 +ADDRLP4 68 +ADDRLP4 60 +INDIRI4 +ADDRLP4 64 +INDIRI4 +DIVI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 400 +ADDP4 +ADDP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +ADDRLP4 68 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 60 +INDIRI4 +ADDRLP4 64 +INDIRI4 +MODI4 +LSHI4 +BORI4 +ASGNI4 +line 967 +;967: } +LABELV $424 +line 937 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $426 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+72 +INDIRI4 +LTI4 $423 +line 968 +;968:} +LABELV $417 +endproc G_UpdateJediMasterBroadcasts 72 12 +export G_UpdateClientBroadcasts +proc G_UpdateClientBroadcasts 0 12 +line 971 +;969: +;970:void G_UpdateClientBroadcasts ( gentity_t *self ) +;971:{ +line 973 +;972: // Clear all the broadcast bits for this client +;973: memset ( self->r.broadcastClients, 0, sizeof ( self->r.broadcastClients ) ); +ADDRFP4 0 +INDIRP4 +CNSTI4 400 +ADDP4 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 8 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 976 +;974: +;975: // The jedi master is broadcast to everyone in range +;976: G_UpdateJediMasterBroadcasts ( self ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_UpdateJediMasterBroadcasts +CALLV +pop +line 979 +;977: +;978: // Anyone with force sight on should see this client +;979: G_UpdateForceSightBroadcasts ( self ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_UpdateForceSightBroadcasts +CALLV +pop +line 980 +;980:} +LABELV $437 +endproc G_UpdateClientBroadcasts 0 12 +export ClientThink_real +proc ClientThink_real 580 32 +line 993 +;981: +;982:/* +;983:============== +;984:ClientThink +;985: +;986:This will be called once for each client frame, which will +;987:usually be a couple times for each server frame on fast clients. +;988: +;989:If "g_synchronousClients 1" is set, this will be called exactly +;990:once for each server frame, which makes for smooth demo recording. +;991:============== +;992:*/ +;993:void ClientThink_real( gentity_t *ent ) { +line 1001 +;994: gclient_t *client; +;995: pmove_t pm; +;996: int oldEventSequence; +;997: int msec; +;998: int i; +;999: usercmd_t *ucmd; +;1000: +;1001: client = ent->client; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 1004 +;1002: +;1003: // don't think if the client is not yet connected (and thus not yet spawned in) +;1004: if (client->pers.connected != CON_CONNECTED) { +ADDRLP4 4 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $439 +line 1005 +;1005: return; +ADDRGP4 $438 +JUMPV +LABELV $439 +line 1008 +;1006: } +;1007: // mark the time, so the connection sprite can be removed +;1008: ucmd = &ent->client->pers.cmd; +ADDRLP4 384 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1372 +ADDP4 +ASGNP4 +line 1011 +;1009: +;1010: // sanity check the command time to prevent speedup cheating +;1011: if ( ucmd->serverTime > level.time + 200 ) { +ADDRLP4 384 +INDIRP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 200 +ADDI4 +LEI4 $441 +line 1012 +;1012: ucmd->serverTime = level.time + 200; +ADDRLP4 384 +INDIRP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 200 +ADDI4 +ASGNI4 +line 1014 +;1013:// G_Printf("serverTime <<<<<\n" ); +;1014: } +LABELV $441 +line 1015 +;1015: if ( ucmd->serverTime < level.time - 1000 ) { +ADDRLP4 384 +INDIRP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 1000 +SUBI4 +GEI4 $445 +line 1016 +;1016: ucmd->serverTime = level.time - 1000; +ADDRLP4 384 +INDIRP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 1000 +SUBI4 +ASGNI4 +line 1018 +;1017:// G_Printf("serverTime >>>>>\n" ); +;1018: } +LABELV $445 +line 1020 +;1019: +;1020: msec = ucmd->serverTime - client->ps.commandTime; +ADDRLP4 388 +ADDRLP4 384 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +SUBI4 +ASGNI4 +line 1023 +;1021: // following others may result in bad times, but we still want +;1022: // to check for follow toggles +;1023: if ( msec < 1 && client->sess.spectatorState != SPECTATOR_FOLLOW ) { +ADDRLP4 388 +INDIRI4 +CNSTI4 1 +GEI4 $449 +ADDRLP4 4 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $449 +line 1024 +;1024: return; +ADDRGP4 $438 +JUMPV +LABELV $449 +line 1026 +;1025: } +;1026: if ( msec > 200 ) { +ADDRLP4 388 +INDIRI4 +CNSTI4 200 +LEI4 $451 +line 1027 +;1027: msec = 200; +ADDRLP4 388 +CNSTI4 200 +ASGNI4 +line 1028 +;1028: } +LABELV $451 +line 1030 +;1029: +;1030: if ( pmove_msec.integer < 8 ) { +ADDRGP4 pmove_msec+12 +INDIRI4 +CNSTI4 8 +GEI4 $453 +line 1031 +;1031: trap_Cvar_Set("pmove_msec", "8"); +ADDRGP4 $456 +ARGP4 +ADDRGP4 $457 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1032 +;1032: } +ADDRGP4 $454 +JUMPV +LABELV $453 +line 1033 +;1033: else if (pmove_msec.integer > 33) { +ADDRGP4 pmove_msec+12 +INDIRI4 +CNSTI4 33 +LEI4 $458 +line 1034 +;1034: trap_Cvar_Set("pmove_msec", "33"); +ADDRGP4 $456 +ARGP4 +ADDRGP4 $461 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1035 +;1035: } +LABELV $458 +LABELV $454 +line 1037 +;1036: +;1037: if ( pmove_fixed.integer || client->pers.pmoveFixed ) { +ADDRLP4 396 +CNSTI4 0 +ASGNI4 +ADDRGP4 pmove_fixed+12 +INDIRI4 +ADDRLP4 396 +INDIRI4 +NEI4 $465 +ADDRLP4 4 +INDIRP4 +CNSTI4 1412 +ADDP4 +INDIRI4 +ADDRLP4 396 +INDIRI4 +EQI4 $462 +LABELV $465 +line 1038 +;1038: ucmd->serverTime = ((ucmd->serverTime + pmove_msec.integer-1) / pmove_msec.integer) * pmove_msec.integer; +ADDRLP4 384 +INDIRP4 +ADDRLP4 384 +INDIRP4 +INDIRI4 +ADDRGP4 pmove_msec+12 +INDIRI4 +ADDI4 +CNSTI4 1 +SUBI4 +ADDRGP4 pmove_msec+12 +INDIRI4 +DIVI4 +ADDRGP4 pmove_msec+12 +INDIRI4 +MULI4 +ASGNI4 +line 1041 +;1039: //if (ucmd->serverTime - client->ps.commandTime <= 0) +;1040: // return; +;1041: } +LABELV $462 +line 1046 +;1042: +;1043: // +;1044: // check for exiting intermission +;1045: // +;1046: if ( level.intermissiontime ) { +ADDRGP4 level+9008 +INDIRI4 +CNSTI4 0 +EQI4 $469 +line 1047 +;1047: ClientIntermissionThink( client ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 ClientIntermissionThink +CALLV +pop +line 1048 +;1048: return; +ADDRGP4 $438 +JUMPV +LABELV $469 +line 1052 +;1049: } +;1050: +;1051: // spectators don't do much +;1052: if ( client->sess.sessionTeam == TEAM_SPECTATOR ) { +ADDRLP4 4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $472 +line 1053 +;1053: if ( client->sess.spectatorState == SPECTATOR_SCOREBOARD ) { +ADDRLP4 4 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $474 +line 1054 +;1054: return; +ADDRGP4 $438 +JUMPV +LABELV $474 +line 1056 +;1055: } +;1056: SpectatorThink( ent, ucmd ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 384 +INDIRP4 +ARGP4 +ADDRGP4 SpectatorThink +CALLV +pop +line 1057 +;1057: return; +ADDRGP4 $438 +JUMPV +LABELV $472 +line 1060 +;1058: } +;1059: +;1060: if (ent && ent->client && (ent->client->ps.eFlags & EF_INVULNERABLE)) +ADDRLP4 400 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 404 +CNSTU4 0 +ASGNU4 +ADDRLP4 400 +INDIRP4 +CVPU4 4 +ADDRLP4 404 +INDIRU4 +EQU4 $476 +ADDRLP4 408 +ADDRLP4 400 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 408 +INDIRP4 +CVPU4 4 +ADDRLP4 404 +INDIRU4 +EQU4 $476 +ADDRLP4 408 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +CNSTI4 67108864 +BANDI4 +CNSTI4 0 +EQI4 $476 +line 1061 +;1061: { +line 1062 +;1062: if (ent->client->invulnerableTimer <= level.time) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1564 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +GTI4 $478 +line 1063 +;1063: { +line 1064 +;1064: ent->client->ps.eFlags &= ~EF_INVULNERABLE; +ADDRLP4 412 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 412 +INDIRP4 +ADDRLP4 412 +INDIRP4 +INDIRI4 +CNSTI4 -67108865 +BANDI4 +ASGNI4 +line 1065 +;1065: } +LABELV $478 +line 1066 +;1066: } +LABELV $476 +line 1069 +;1067: +;1068: // check for inactivity timer, but never drop the local client of a non-dedicated server +;1069: if ( !ClientInactivityTimer( client ) ) { +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 412 +ADDRGP4 ClientInactivityTimer +CALLI4 +ASGNI4 +ADDRLP4 412 +INDIRI4 +CNSTI4 0 +NEI4 $481 +line 1070 +;1070: return; +ADDRGP4 $438 +JUMPV +LABELV $481 +line 1074 +;1071: } +;1072: +;1073: // clear the rewards if time +;1074: if ( level.time > client->rewardTime ) { +ADDRGP4 level+32 +INDIRI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1684 +ADDP4 +INDIRI4 +LEI4 $483 +line 1075 +;1075: client->ps.eFlags &= ~(EF_AWARD_IMPRESSIVE | EF_AWARD_EXCELLENT | EF_AWARD_GAUNTLET | EF_AWARD_ASSIST | EF_AWARD_DEFEND | EF_AWARD_CAP ); +ADDRLP4 416 +ADDRLP4 4 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 416 +INDIRP4 +ADDRLP4 416 +INDIRP4 +INDIRI4 +CNSTI4 -231497 +BANDI4 +ASGNI4 +line 1076 +;1076: } +LABELV $483 +line 1078 +;1077: +;1078: if ( client->noclip ) { +ADDRLP4 4 +INDIRP4 +CNSTI4 1576 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $486 +line 1079 +;1079: client->ps.pm_type = PM_NOCLIP; +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 2 +ASGNI4 +line 1080 +;1080: } else if ( client->ps.eFlags & EF_DISINTEGRATION ) { +ADDRGP4 $487 +JUMPV +LABELV $486 +ADDRLP4 4 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +CNSTI4 33554432 +BANDI4 +CNSTI4 0 +EQI4 $488 +line 1081 +;1081: client->ps.pm_type = PM_NOCLIP; +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 2 +ASGNI4 +line 1082 +;1082: } else if ( client->ps.stats[STAT_HEALTH] <= 0 ) { +ADDRGP4 $489 +JUMPV +LABELV $488 +ADDRLP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $490 +line 1083 +;1083: client->ps.pm_type = PM_DEAD; +ADDRLP4 416 +CNSTI4 4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 416 +INDIRI4 +ADDP4 +ADDRLP4 416 +INDIRI4 +ASGNI4 +line 1084 +;1084: } else { +ADDRGP4 $491 +JUMPV +LABELV $490 +line 1085 +;1085: if (client->ps.forceGripChangeMovetype) +ADDRLP4 4 +INDIRP4 +CNSTI4 1276 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $492 +line 1086 +;1086: { +line 1087 +;1087: client->ps.pm_type = client->ps.forceGripChangeMovetype; +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1276 +ADDP4 +INDIRI4 +ASGNI4 +line 1088 +;1088: } +ADDRGP4 $493 +JUMPV +LABELV $492 +line 1090 +;1089: else +;1090: { +line 1091 +;1091: client->ps.pm_type = PM_NORMAL; +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1092 +;1092: } +LABELV $493 +line 1093 +;1093: } +LABELV $491 +LABELV $489 +LABELV $487 +line 1095 +;1094: +;1095: client->ps.gravity = g_gravity.value; +ADDRLP4 4 +INDIRP4 +CNSTI4 56 +ADDP4 +ADDRGP4 g_gravity+8 +INDIRF4 +CVFI4 4 +ASGNI4 +line 1098 +;1096: +;1097: // set speed +;1098: client->ps.speed = g_speed.value; +ADDRLP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ADDRGP4 g_speed+8 +INDIRF4 +CVFI4 4 +ASGNI4 +line 1099 +;1099: client->ps.basespeed = g_speed.value; +ADDRLP4 4 +INDIRP4 +CNSTI4 64 +ADDP4 +ADDRGP4 g_speed+8 +INDIRF4 +CVFI4 4 +ASGNI4 +line 1101 +;1100: +;1101: if (ent->client->ps.duelInProgress) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $497 +line 1102 +;1102: { +line 1103 +;1103: gentity_t *duelAgainst = &g_entities[ent->client->ps.duelIndex]; +ADDRLP4 416 +CNSTI4 828 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1284 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1108 +;1104: +;1105: //Keep the time updated, so once this duel ends this player can't engage in a duel for another +;1106: //10 seconds. This will give other people a chance to engage in duels in case this player wants +;1107: //to engage again right after he's done fighting and someone else is waiting. +;1108: ent->client->ps.fd.privateDuelTime = level.time + 10000; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1228 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 10000 +ADDI4 +ASGNI4 +line 1110 +;1109: +;1110: if (ent->client->ps.duelTime < level.time) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1288 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +GEI4 $500 +line 1111 +;1111: { +line 1113 +;1112: //Bring out the sabers +;1113: if (ent->client->ps.weapon == WP_SABER && ent->client->ps.saberHolstered && +ADDRLP4 420 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 420 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $503 +ADDRLP4 424 +CNSTI4 0 +ASGNI4 +ADDRLP4 420 +INDIRP4 +CNSTI4 1300 +ADDP4 +INDIRI4 +ADDRLP4 424 +INDIRI4 +EQI4 $503 +ADDRLP4 420 +INDIRP4 +CNSTI4 1288 +ADDP4 +INDIRI4 +ADDRLP4 424 +INDIRI4 +EQI4 $503 +line 1115 +;1114: ent->client->ps.duelTime) +;1115: { +line 1116 +;1116: if (!saberOffSound || !saberOnSound) +ADDRLP4 428 +CNSTI4 0 +ASGNI4 +ADDRGP4 saberOffSound +INDIRI4 +ADDRLP4 428 +INDIRI4 +EQI4 $507 +ADDRGP4 saberOnSound +INDIRI4 +ADDRLP4 428 +INDIRI4 +NEI4 $505 +LABELV $507 +line 1117 +;1117: { +line 1118 +;1118: saberOffSound = G_SoundIndex("sound/weapons/saber/saberoffquick.wav"); +ADDRGP4 $508 +ARGP4 +ADDRLP4 432 +ADDRGP4 G_SoundIndex +CALLI4 +ASGNI4 +ADDRGP4 saberOffSound +ADDRLP4 432 +INDIRI4 +ASGNI4 +line 1119 +;1119: saberOnSound = G_SoundIndex("sound/weapons/saber/saberon.wav"); +ADDRGP4 $509 +ARGP4 +ADDRLP4 436 +ADDRGP4 G_SoundIndex +CALLI4 +ASGNI4 +ADDRGP4 saberOnSound +ADDRLP4 436 +INDIRI4 +ASGNI4 +line 1120 +;1120: } +LABELV $505 +line 1122 +;1121: +;1122: ent->client->ps.saberHolstered = qfalse; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1300 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1123 +;1123: G_Sound(ent, CHAN_AUTO, saberOnSound); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 saberOnSound +INDIRI4 +ARGI4 +ADDRGP4 G_Sound +CALLV +pop +line 1125 +;1124: +;1125: G_AddEvent(ent, EV_PRIVATE_DUEL, 2); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 13 +ARGI4 +CNSTI4 2 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1127 +;1126: +;1127: ent->client->ps.duelTime = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1288 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1128 +;1128: } +LABELV $503 +line 1130 +;1129: +;1130: if (duelAgainst && duelAgainst->client && duelAgainst->inuse && +ADDRLP4 432 +CNSTU4 0 +ASGNU4 +ADDRLP4 416 +INDIRP4 +CVPU4 4 +ADDRLP4 432 +INDIRU4 +EQU4 $501 +ADDRLP4 436 +ADDRLP4 416 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 436 +INDIRP4 +CVPU4 4 +ADDRLP4 432 +INDIRU4 +EQU4 $501 +ADDRLP4 440 +CNSTI4 0 +ASGNI4 +ADDRLP4 416 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +ADDRLP4 440 +INDIRI4 +EQI4 $501 +ADDRLP4 436 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $501 +ADDRLP4 436 +INDIRP4 +CNSTI4 1300 +ADDP4 +INDIRI4 +ADDRLP4 440 +INDIRI4 +EQI4 $501 +ADDRLP4 436 +INDIRP4 +CNSTI4 1288 +ADDP4 +INDIRI4 +ADDRLP4 440 +INDIRI4 +EQI4 $501 +line 1133 +;1131: duelAgainst->client->ps.weapon == WP_SABER && duelAgainst->client->ps.saberHolstered && +;1132: duelAgainst->client->ps.duelTime) +;1133: { +line 1134 +;1134: if (!saberOffSound || !saberOnSound) +ADDRLP4 444 +CNSTI4 0 +ASGNI4 +ADDRGP4 saberOffSound +INDIRI4 +ADDRLP4 444 +INDIRI4 +EQI4 $514 +ADDRGP4 saberOnSound +INDIRI4 +ADDRLP4 444 +INDIRI4 +NEI4 $512 +LABELV $514 +line 1135 +;1135: { +line 1136 +;1136: saberOffSound = G_SoundIndex("sound/weapons/saber/saberoffquick.wav"); +ADDRGP4 $508 +ARGP4 +ADDRLP4 448 +ADDRGP4 G_SoundIndex +CALLI4 +ASGNI4 +ADDRGP4 saberOffSound +ADDRLP4 448 +INDIRI4 +ASGNI4 +line 1137 +;1137: saberOnSound = G_SoundIndex("sound/weapons/saber/saberon.wav"); +ADDRGP4 $509 +ARGP4 +ADDRLP4 452 +ADDRGP4 G_SoundIndex +CALLI4 +ASGNI4 +ADDRGP4 saberOnSound +ADDRLP4 452 +INDIRI4 +ASGNI4 +line 1138 +;1138: } +LABELV $512 +line 1140 +;1139: +;1140: duelAgainst->client->ps.saberHolstered = qfalse; +ADDRLP4 416 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1300 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1141 +;1141: G_Sound(duelAgainst, CHAN_AUTO, saberOnSound); +ADDRLP4 416 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 saberOnSound +INDIRI4 +ARGI4 +ADDRGP4 G_Sound +CALLV +pop +line 1143 +;1142: +;1143: G_AddEvent(duelAgainst, EV_PRIVATE_DUEL, 2); +ADDRLP4 416 +INDIRP4 +ARGP4 +CNSTI4 13 +ARGI4 +CNSTI4 2 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1145 +;1144: +;1145: duelAgainst->client->ps.duelTime = 0; +ADDRLP4 416 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1288 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1146 +;1146: } +line 1147 +;1147: } +ADDRGP4 $501 +JUMPV +LABELV $500 +line 1149 +;1148: else +;1149: { +line 1150 +;1150: client->ps.speed = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1151 +;1151: client->ps.basespeed = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 64 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1152 +;1152: ucmd->forwardmove = 0; +ADDRLP4 384 +INDIRP4 +CNSTI4 24 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1153 +;1153: ucmd->rightmove = 0; +ADDRLP4 384 +INDIRP4 +CNSTI4 25 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1154 +;1154: ucmd->upmove = 0; +ADDRLP4 384 +INDIRP4 +CNSTI4 26 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1155 +;1155: } +LABELV $501 +line 1157 +;1156: +;1157: if (!duelAgainst || !duelAgainst->client || !duelAgainst->inuse || +ADDRLP4 424 +CNSTU4 0 +ASGNU4 +ADDRLP4 416 +INDIRP4 +CVPU4 4 +ADDRLP4 424 +INDIRU4 +EQU4 $519 +ADDRLP4 428 +ADDRLP4 416 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 428 +INDIRP4 +CVPU4 4 +ADDRLP4 424 +INDIRU4 +EQU4 $519 +ADDRLP4 416 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $519 +ADDRLP4 428 +INDIRP4 +CNSTI4 1284 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +EQI4 $515 +LABELV $519 +line 1159 +;1158: duelAgainst->client->ps.duelIndex != ent->s.number) +;1159: { +line 1160 +;1160: ent->client->ps.duelInProgress = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1292 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1161 +;1161: G_AddEvent(ent, EV_PRIVATE_DUEL, 0); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 13 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1162 +;1162: } +ADDRGP4 $516 +JUMPV +LABELV $515 +line 1163 +;1163: else if (duelAgainst->health < 1 || duelAgainst->client->ps.stats[STAT_HEALTH] < 1) +ADDRLP4 436 +CNSTI4 1 +ASGNI4 +ADDRLP4 416 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 436 +INDIRI4 +LTI4 $522 +ADDRLP4 416 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +ADDRLP4 436 +INDIRI4 +GEI4 $520 +LABELV $522 +line 1164 +;1164: { +line 1165 +;1165: ent->client->ps.duelInProgress = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1292 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1166 +;1166: duelAgainst->client->ps.duelInProgress = 0; +ADDRLP4 416 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1292 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1168 +;1167: +;1168: G_AddEvent(ent, EV_PRIVATE_DUEL, 0); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 13 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1169 +;1169: G_AddEvent(duelAgainst, EV_PRIVATE_DUEL, 0); +ADDRLP4 416 +INDIRP4 +ARGP4 +CNSTI4 13 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1172 +;1170: +;1171: //Winner gets full health.. providing he's still alive +;1172: if (ent->health > 0 && ent->client->ps.stats[STAT_HEALTH] > 0) +ADDRLP4 440 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 444 +CNSTI4 0 +ASGNI4 +ADDRLP4 440 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 444 +INDIRI4 +LEI4 $523 +ADDRLP4 440 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +ADDRLP4 444 +INDIRI4 +LEI4 $523 +line 1173 +;1173: { +line 1174 +;1174: if (ent->health < ent->client->ps.stats[STAT_MAX_HEALTH]) +ADDRLP4 448 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 448 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 448 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +GEI4 $525 +line 1175 +;1175: { +line 1176 +;1176: ent->client->ps.stats[STAT_HEALTH] = ent->health = ent->client->ps.stats[STAT_MAX_HEALTH]; +ADDRLP4 452 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 456 +ADDRLP4 452 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 460 +ADDRLP4 456 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 452 +INDIRP4 +CNSTI4 676 +ADDP4 +ADDRLP4 460 +INDIRI4 +ASGNI4 +ADDRLP4 456 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRLP4 460 +INDIRI4 +ASGNI4 +line 1177 +;1177: } +LABELV $525 +line 1179 +;1178: +;1179: if (g_spawnInvulnerability.integer) +ADDRGP4 g_spawnInvulnerability+12 +INDIRI4 +CNSTI4 0 +EQI4 $527 +line 1180 +;1180: { +line 1181 +;1181: ent->client->ps.eFlags |= EF_INVULNERABLE; +ADDRLP4 452 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 452 +INDIRP4 +ADDRLP4 452 +INDIRP4 +INDIRI4 +CNSTI4 67108864 +BORI4 +ASGNI4 +line 1182 +;1182: ent->client->invulnerableTimer = level.time + g_spawnInvulnerability.integer; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1564 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ADDRGP4 g_spawnInvulnerability+12 +INDIRI4 +ADDI4 +ASGNI4 +line 1183 +;1183: } +LABELV $527 +line 1184 +;1184: } +LABELV $523 +line 1191 +;1185: +;1186: /* +;1187: trap_SendServerCommand( ent-g_entities, va("print \"%s %s\n\"", ent->client->pers.netname, G_GetStripEdString("SVINGAME", "PLDUELWINNER")) ); +;1188: trap_SendServerCommand( duelAgainst-g_entities, va("print \"%s %s\n\"", ent->client->pers.netname, G_GetStripEdString("SVINGAME", "PLDUELWINNER")) ); +;1189: */ +;1190: //Private duel announcements are now made globally because we only want one duel at a time. +;1191: if (ent->health > 0 && ent->client->ps.stats[STAT_HEALTH] > 0) +ADDRLP4 448 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 452 +CNSTI4 0 +ASGNI4 +ADDRLP4 448 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 452 +INDIRI4 +LEI4 $532 +ADDRLP4 448 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +ADDRLP4 452 +INDIRI4 +LEI4 $532 +line 1192 +;1192: { +line 1193 +;1193: trap_SendServerCommand( -1, va("cp \"%s %s %s!\n\"", ent->client->pers.netname, G_GetStripEdString("SVINGAME", "PLDUELWINNER"), duelAgainst->client->pers.netname) ); +ADDRGP4 $535 +ARGP4 +ADDRGP4 $536 +ARGP4 +ADDRLP4 456 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $534 +ARGP4 +ADDRLP4 460 +CNSTI4 408 +ASGNI4 +ADDRLP4 464 +CNSTI4 1416 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 460 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 464 +INDIRI4 +ADDP4 +ARGP4 +ADDRLP4 456 +INDIRP4 +ARGP4 +ADDRLP4 416 +INDIRP4 +ADDRLP4 460 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 464 +INDIRI4 +ADDP4 +ARGP4 +ADDRLP4 468 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 468 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1194 +;1194: } +ADDRGP4 $521 +JUMPV +LABELV $532 +line 1196 +;1195: else +;1196: { //it was a draw, because we both managed to die in the same frame +line 1197 +;1197: trap_SendServerCommand( -1, va("cp \"%s\n\"", G_GetStripEdString("SVINGAME", "PLDUELTIE")) ); +ADDRGP4 $535 +ARGP4 +ADDRGP4 $538 +ARGP4 +ADDRLP4 456 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $537 +ARGP4 +ADDRLP4 456 +INDIRP4 +ARGP4 +ADDRLP4 460 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 460 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1198 +;1198: } +line 1199 +;1199: } +ADDRGP4 $521 +JUMPV +LABELV $520 +line 1201 +;1200: else +;1201: { +line 1203 +;1202: vec3_t vSub; +;1203: float subLen = 0; +ADDRLP4 440 +CNSTF4 0 +ASGNF4 +line 1205 +;1204: +;1205: VectorSubtract(ent->client->ps.origin, duelAgainst->client->ps.origin, vSub); +ADDRLP4 456 +CNSTI4 408 +ASGNI4 +ADDRLP4 460 +ADDRFP4 0 +INDIRP4 +ADDRLP4 456 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 464 +CNSTI4 20 +ASGNI4 +ADDRLP4 468 +ADDRLP4 416 +INDIRP4 +ADDRLP4 456 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 444 +ADDRLP4 460 +INDIRP4 +INDIRP4 +ADDRLP4 464 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 468 +INDIRP4 +INDIRP4 +ADDRLP4 464 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 472 +CNSTI4 24 +ASGNI4 +ADDRLP4 444+4 +ADDRLP4 460 +INDIRP4 +INDIRP4 +ADDRLP4 472 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 468 +INDIRP4 +INDIRP4 +ADDRLP4 472 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 476 +CNSTI4 408 +ASGNI4 +ADDRLP4 480 +CNSTI4 28 +ASGNI4 +ADDRLP4 444+8 +ADDRFP4 0 +INDIRP4 +ADDRLP4 476 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 480 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 416 +INDIRP4 +ADDRLP4 476 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 480 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1206 +;1206: subLen = VectorLength(vSub); +ADDRLP4 444 +ARGP4 +ADDRLP4 484 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 440 +ADDRLP4 484 +INDIRF4 +ASGNF4 +line 1208 +;1207: +;1208: if (subLen >= 1024) +ADDRLP4 440 +INDIRF4 +CNSTF4 1149239296 +LTF4 $541 +line 1209 +;1209: { +line 1210 +;1210: ent->client->ps.duelInProgress = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1292 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1211 +;1211: duelAgainst->client->ps.duelInProgress = 0; +ADDRLP4 416 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1292 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1213 +;1212: +;1213: G_AddEvent(ent, EV_PRIVATE_DUEL, 0); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 13 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1214 +;1214: G_AddEvent(duelAgainst, EV_PRIVATE_DUEL, 0); +ADDRLP4 416 +INDIRP4 +ARGP4 +CNSTI4 13 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1216 +;1215: +;1216: trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "PLDUELSTOP")) ); +ADDRGP4 $535 +ARGP4 +ADDRGP4 $544 +ARGP4 +ADDRLP4 488 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $543 +ARGP4 +ADDRLP4 488 +INDIRP4 +ARGP4 +ADDRLP4 492 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 492 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1217 +;1217: } +LABELV $541 +line 1218 +;1218: } +LABELV $521 +LABELV $516 +line 1219 +;1219: } +LABELV $497 +line 1227 +;1220: +;1221: /* +;1222: if ( client->ps.powerups[PW_HASTE] ) { +;1223: client->ps.speed *= 1.3; +;1224: } +;1225: */ +;1226: +;1227: if (client->ps.usingATST && ent->health > 0) +ADDRLP4 416 +CNSTI4 0 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1304 +ADDP4 +INDIRI4 +ADDRLP4 416 +INDIRI4 +EQI4 $545 +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 416 +INDIRI4 +LEI4 $545 +line 1228 +;1228: { //we have special shot clip boxes as an ATST +line 1229 +;1229: ent->r.contents |= CONTENTS_NOSHOT; +ADDRLP4 420 +ADDRFP4 0 +INDIRP4 +CNSTI4 340 +ADDP4 +ASGNP4 +ADDRLP4 420 +INDIRP4 +ADDRLP4 420 +INDIRP4 +INDIRI4 +CNSTI4 2097152 +BORI4 +ASGNI4 +line 1230 +;1230: ATST_ManageDamageBoxes(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ATST_ManageDamageBoxes +CALLV +pop +line 1231 +;1231: } +ADDRGP4 $546 +JUMPV +LABELV $545 +line 1233 +;1232: else +;1233: { +line 1234 +;1234: ent->r.contents &= ~CONTENTS_NOSHOT; +ADDRLP4 420 +ADDRFP4 0 +INDIRP4 +CNSTI4 340 +ADDP4 +ASGNP4 +ADDRLP4 420 +INDIRP4 +ADDRLP4 420 +INDIRP4 +INDIRI4 +CNSTI4 -2097153 +BANDI4 +ASGNI4 +line 1235 +;1235: client->damageBoxHandle_Head = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 1636 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1236 +;1236: client->damageBoxHandle_RLeg = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 1640 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1237 +;1237: client->damageBoxHandle_LLeg = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 1644 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1238 +;1238: } +LABELV $546 +line 1244 +;1239: +;1240: //rww - moved this stuff into the pmove code so that it's predicted properly +;1241: //BG_AdjustClientSpeed(&client->ps, &client->pers.cmd, level.time); +;1242: +;1243: // set up for pmove +;1244: oldEventSequence = client->ps.eventSequence; +ADDRLP4 392 +ADDRLP4 4 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +ASGNI4 +line 1246 +;1245: +;1246: memset (&pm, 0, sizeof(pm)); +ADDRLP4 8 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 376 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 1248 +;1247: +;1248: if ( ent->flags & FL_FORCE_GESTURE ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +CNSTI4 32768 +BANDI4 +CNSTI4 0 +EQI4 $547 +line 1249 +;1249: ent->flags &= ~FL_FORCE_GESTURE; +ADDRLP4 420 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +ASGNP4 +ADDRLP4 420 +INDIRP4 +ADDRLP4 420 +INDIRP4 +INDIRI4 +CNSTI4 -32769 +BANDI4 +ASGNI4 +line 1250 +;1250: ent->client->pers.cmd.buttons |= BUTTON_GESTURE; +ADDRLP4 424 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1388 +ADDP4 +ASGNP4 +ADDRLP4 424 +INDIRP4 +ADDRLP4 424 +INDIRP4 +INDIRI4 +CNSTI4 8 +BORI4 +ASGNI4 +line 1251 +;1251: } +LABELV $547 +line 1253 +;1252: +;1253: if (ent->client && ent->client->ps.fallingToDeath && +ADDRLP4 420 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 420 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $549 +ADDRLP4 424 +ADDRLP4 420 +INDIRP4 +CNSTI4 1340 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 424 +INDIRI4 +CNSTI4 0 +EQI4 $549 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 3000 +SUBI4 +ADDRLP4 424 +INDIRI4 +LEI4 $549 +line 1255 +;1254: (level.time - FALL_FADE_TIME) > ent->client->ps.fallingToDeath) +;1255: { //die! +line 1256 +;1256: player_die(ent, ent, ent, 100000, MOD_FALLING); +ADDRLP4 428 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 428 +INDIRP4 +ARGP4 +ADDRLP4 428 +INDIRP4 +ARGP4 +ADDRLP4 428 +INDIRP4 +ARGP4 +CNSTI4 100000 +ARGI4 +CNSTI4 34 +ARGI4 +ADDRGP4 player_die +CALLV +pop +line 1257 +;1257: respawn(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 respawn +CALLV +pop +line 1258 +;1258: ent->client->ps.fallingToDeath = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1340 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1260 +;1259: +;1260: G_MuteSound(ent->s.number, CHAN_VOICE); //stop screaming, because you are dead! +ADDRFP4 0 +INDIRP4 +INDIRI4 +ARGI4 +CNSTI4 3 +ARGI4 +ADDRGP4 G_MuteSound +CALLV +pop +line 1261 +;1261: } +LABELV $549 +line 1263 +;1262: +;1263: if (ent->client->ps.otherKillerTime > level.time && +ADDRLP4 428 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 428 +INDIRP4 +CNSTI4 752 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +LEI4 $552 +ADDRLP4 428 +INDIRP4 +CNSTI4 84 +ADDP4 +INDIRI4 +CNSTI4 1023 +EQI4 $552 +ADDRLP4 428 +INDIRP4 +CNSTI4 756 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +GEI4 $552 +line 1266 +;1264: ent->client->ps.groundEntityNum != ENTITYNUM_NONE && +;1265: ent->client->ps.otherKillerDebounceTime < level.time) +;1266: { +line 1267 +;1267: ent->client->ps.otherKillerTime = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 752 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1268 +;1268: ent->client->ps.otherKiller = ENTITYNUM_NONE; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 748 +ADDP4 +CNSTI4 1023 +ASGNI4 +line 1269 +;1269: } +ADDRGP4 $553 +JUMPV +LABELV $552 +line 1270 +;1270: else if (ent->client->ps.otherKillerTime > level.time && +ADDRLP4 432 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 432 +INDIRP4 +CNSTI4 752 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +LEI4 $556 +ADDRLP4 432 +INDIRP4 +CNSTI4 84 +ADDP4 +INDIRI4 +CNSTI4 1023 +NEI4 $556 +line 1272 +;1271: ent->client->ps.groundEntityNum == ENTITYNUM_NONE) +;1272: { +line 1273 +;1273: if (ent->client->ps.otherKillerDebounceTime < (level.time + 100)) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 756 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 100 +ADDI4 +GEI4 $559 +line 1274 +;1274: { +line 1275 +;1275: ent->client->ps.otherKillerDebounceTime = level.time + 100; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 756 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 100 +ADDI4 +ASGNI4 +line 1276 +;1276: } +LABELV $559 +line 1277 +;1277: } +LABELV $556 +LABELV $553 +line 1282 +;1278: +;1279:// WP_ForcePowersUpdate( ent, msec, ucmd); //update any active force powers +;1280:// WP_SaberPositionUpdate(ent, ucmd); //check the server-side saber point, do apprioriate server-side actions (effects are cs-only) +;1281: +;1282: if ((ent->client->pers.cmd.buttons & BUTTON_USE) && ent->client->ps.useDelay < level.time) +ADDRLP4 436 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 436 +INDIRP4 +CNSTI4 1388 +ADDP4 +INDIRI4 +CNSTI4 32 +BANDI4 +CNSTI4 0 +EQI4 $563 +ADDRLP4 436 +INDIRP4 +CNSTI4 1344 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +GEI4 $563 +line 1283 +;1283: { +line 1284 +;1284: TryUse(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 TryUse +CALLV +pop +line 1285 +;1285: ent->client->ps.useDelay = level.time + 100; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1344 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 100 +ADDI4 +ASGNI4 +line 1286 +;1286: } +LABELV $563 +line 1288 +;1287: +;1288: pm.ps = &client->ps; +ADDRLP4 8 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1289 +;1289: pm.cmd = *ucmd; +ADDRLP4 8+4 +ADDRLP4 384 +INDIRP4 +INDIRB +ASGNB 28 +line 1290 +;1290: if ( pm.ps->pm_type == PM_DEAD ) { +ADDRLP4 440 +CNSTI4 4 +ASGNI4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 440 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 440 +INDIRI4 +NEI4 $568 +line 1291 +;1291: pm.tracemask = MASK_PLAYERSOLID & ~CONTENTS_BODY; +ADDRLP4 8+32 +CNSTI4 17 +ASGNI4 +line 1292 +;1292: } +ADDRGP4 $569 +JUMPV +LABELV $568 +line 1293 +;1293: else if ( ent->r.svFlags & SVF_BOT ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $571 +line 1294 +;1294: pm.tracemask = MASK_PLAYERSOLID | CONTENTS_BOTCLIP; +ADDRLP4 8+32 +CNSTI4 337 +ASGNI4 +line 1295 +;1295: } +ADDRGP4 $572 +JUMPV +LABELV $571 +line 1296 +;1296: else { +line 1297 +;1297: pm.tracemask = MASK_PLAYERSOLID; +ADDRLP4 8+32 +CNSTI4 273 +ASGNI4 +line 1298 +;1298: } +LABELV $572 +LABELV $569 +line 1299 +;1299: pm.trace = trap_Trace; +ADDRLP4 8+240 +ADDRGP4 trap_Trace +ASGNP4 +line 1300 +;1300: pm.pointcontents = trap_PointContents; +ADDRLP4 8+244 +ADDRGP4 trap_PointContents +ASGNP4 +line 1301 +;1301: pm.debugLevel = g_debugMove.integer; +ADDRLP4 8+36 +ADDRGP4 g_debugMove+12 +INDIRI4 +ASGNI4 +line 1302 +;1302: pm.noFootsteps = ( g_dmflags.integer & DF_NO_FOOTSTEPS ) > 0; +ADDRGP4 g_dmflags+12 +INDIRI4 +CNSTI4 32 +BANDI4 +CNSTI4 0 +LEI4 $582 +ADDRLP4 444 +CNSTI4 1 +ASGNI4 +ADDRGP4 $583 +JUMPV +LABELV $582 +ADDRLP4 444 +CNSTI4 0 +ASGNI4 +LABELV $583 +ADDRLP4 8+40 +ADDRLP4 444 +INDIRI4 +ASGNI4 +line 1304 +;1303: +;1304: pm.pmove_fixed = pmove_fixed.integer | client->pers.pmoveFixed; +ADDRLP4 8+232 +ADDRGP4 pmove_fixed+12 +INDIRI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1412 +ADDP4 +INDIRI4 +BORI4 +ASGNI4 +line 1305 +;1305: pm.pmove_msec = pmove_msec.integer; +ADDRLP4 8+236 +ADDRGP4 pmove_msec+12 +INDIRI4 +ASGNI4 +line 1307 +;1306: +;1307: pm.animations = bgGlobalAnimations;//NULL; +ADDRLP4 8+224 +ADDRGP4 bgGlobalAnimations +ASGNP4 +line 1309 +;1308: +;1309: pm.gametype = g_gametype.integer; +ADDRLP4 8+220 +ADDRGP4 g_gametype+12 +INDIRI4 +ASGNI4 +line 1311 +;1310: +;1311: VectorCopy( client->ps.origin, client->oldOrigin ); +ADDRLP4 4 +INDIRP4 +CNSTI4 1596 +ADDP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 1313 +;1312: +;1313: if (level.intermissionQueued != 0 && g_singlePlayer.integer) { +ADDRLP4 452 +CNSTI4 0 +ASGNI4 +ADDRGP4 level+9004 +INDIRI4 +ADDRLP4 452 +INDIRI4 +EQI4 $591 +ADDRGP4 g_singlePlayer+12 +INDIRI4 +ADDRLP4 452 +INDIRI4 +EQI4 $591 +line 1314 +;1314: if ( level.time - level.intermissionQueued >= 1000 ) { +ADDRGP4 level+32 +INDIRI4 +ADDRGP4 level+9004 +INDIRI4 +SUBI4 +CNSTI4 1000 +LTI4 $595 +line 1315 +;1315: pm.cmd.buttons = 0; +ADDRLP4 8+4+16 +CNSTI4 0 +ASGNI4 +line 1316 +;1316: pm.cmd.forwardmove = 0; +ADDRLP4 8+4+24 +CNSTI1 0 +ASGNI1 +line 1317 +;1317: pm.cmd.rightmove = 0; +ADDRLP4 8+4+25 +CNSTI1 0 +ASGNI1 +line 1318 +;1318: pm.cmd.upmove = 0; +ADDRLP4 8+4+26 +CNSTI1 0 +ASGNI1 +line 1319 +;1319: if ( level.time - level.intermissionQueued >= 2000 && level.time - level.intermissionQueued <= 2500 ) { +ADDRGP4 level+32 +INDIRI4 +ADDRGP4 level+9004 +INDIRI4 +SUBI4 +CNSTI4 2000 +LTI4 $607 +ADDRGP4 level+32 +INDIRI4 +ADDRGP4 level+9004 +INDIRI4 +SUBI4 +CNSTI4 2500 +GTI4 $607 +line 1320 +;1320: trap_SendConsoleCommand( EXEC_APPEND, "centerview\n"); +CNSTI4 2 +ARGI4 +ADDRGP4 $613 +ARGP4 +ADDRGP4 trap_SendConsoleCommand +CALLV +pop +line 1321 +;1321: } +LABELV $607 +line 1322 +;1322: ent->client->ps.pm_type = PM_SPINTERMISSION; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 7 +ASGNI4 +line 1323 +;1323: } +LABELV $595 +line 1324 +;1324: } +LABELV $591 +line 1326 +;1325: +;1326: for ( i = 0 ; i < MAX_CLIENTS ; i++ ) +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $614 +line 1327 +;1327: { +line 1328 +;1328: if (g_entities[i].inuse && g_entities[i].client) +ADDRLP4 456 +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 456 +INDIRI4 +ADDRGP4 g_entities+412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $618 +ADDRLP4 456 +INDIRI4 +ADDRGP4 g_entities+408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $618 +line 1329 +;1329: { +line 1330 +;1330: pm.bgClients[i] = &g_entities[i].client->ps; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8+248 +ADDP4 +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities+408 +ADDP4 +INDIRP4 +ASGNP4 +line 1331 +;1331: } +LABELV $618 +line 1332 +;1332: } +LABELV $615 +line 1326 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 32 +LTI4 $614 +line 1334 +;1333: +;1334: if (ent->client->ps.saberLockTime > level.time) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 524 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +LEI4 $624 +line 1335 +;1335: { +line 1336 +;1336: gentity_t *blockOpp = &g_entities[ent->client->ps.saberLockEnemy]; +ADDRLP4 456 +CNSTI4 828 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 528 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1338 +;1337: +;1338: if (blockOpp && blockOpp->inuse && blockOpp->client) +ADDRLP4 464 +CNSTU4 0 +ASGNU4 +ADDRLP4 456 +INDIRP4 +CVPU4 4 +ADDRLP4 464 +INDIRU4 +EQU4 $627 +ADDRLP4 456 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $627 +ADDRLP4 456 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 464 +INDIRU4 +EQU4 $627 +line 1339 +;1339: { +line 1343 +;1340: vec3_t lockDir, lockAng; +;1341: +;1342: //VectorClear( ent->client->ps.velocity ); +;1343: VectorSubtract( blockOpp->r.currentOrigin, ent->r.currentOrigin, lockDir ); +ADDRLP4 496 +CNSTI4 368 +ASGNI4 +ADDRLP4 500 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 468 +ADDRLP4 456 +INDIRP4 +ADDRLP4 496 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 500 +INDIRP4 +ADDRLP4 496 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 504 +CNSTI4 372 +ASGNI4 +ADDRLP4 468+4 +ADDRLP4 456 +INDIRP4 +ADDRLP4 504 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 500 +INDIRP4 +ADDRLP4 504 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 508 +CNSTI4 376 +ASGNI4 +ADDRLP4 468+8 +ADDRLP4 456 +INDIRP4 +ADDRLP4 508 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 508 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1345 +;1344: //lockAng[YAW] = vectoyaw( defDir ); +;1345: vectoangles(lockDir, lockAng); +ADDRLP4 468 +ARGP4 +ADDRLP4 480 +ARGP4 +ADDRGP4 vectoangles +CALLV +pop +line 1346 +;1346: SetClientViewAngle( ent, lockAng ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 480 +ARGP4 +ADDRGP4 SetClientViewAngle +CALLV +pop +line 1347 +;1347: } +LABELV $627 +line 1349 +;1348: +;1349: if ( ( ent->client->buttons & BUTTON_ATTACK ) && ! ( ent->client->oldbuttons & BUTTON_ATTACK ) ) +ADDRLP4 468 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 472 +CNSTI4 1 +ASGNI4 +ADDRLP4 476 +CNSTI4 0 +ASGNI4 +ADDRLP4 468 +INDIRP4 +CNSTI4 1584 +ADDP4 +INDIRI4 +ADDRLP4 472 +INDIRI4 +BANDI4 +ADDRLP4 476 +INDIRI4 +EQI4 $631 +ADDRLP4 468 +INDIRP4 +CNSTI4 1588 +ADDP4 +INDIRI4 +ADDRLP4 472 +INDIRI4 +BANDI4 +ADDRLP4 476 +INDIRI4 +NEI4 $631 +line 1350 +;1350: { +line 1351 +;1351: ent->client->ps.saberLockHits++; +ADDRLP4 480 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 536 +ADDP4 +ASGNP4 +ADDRLP4 480 +INDIRP4 +ADDRLP4 480 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1352 +;1352: } +LABELV $631 +line 1353 +;1353: if (ent->client->ps.saberLockHits > 2) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 536 +ADDP4 +INDIRI4 +CNSTI4 2 +LEI4 $625 +line 1354 +;1354: { +line 1355 +;1355: if (!ent->client->ps.saberLockAdvance) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 540 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $635 +line 1356 +;1356: { +line 1357 +;1357: ent->client->ps.saberLockHits -= 3; +ADDRLP4 480 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 536 +ADDP4 +ASGNP4 +ADDRLP4 480 +INDIRP4 +ADDRLP4 480 +INDIRP4 +INDIRI4 +CNSTI4 3 +SUBI4 +ASGNI4 +line 1358 +;1358: } +LABELV $635 +line 1359 +;1359: ent->client->ps.saberLockAdvance = qtrue; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 540 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1360 +;1360: } +line 1361 +;1361: } +ADDRGP4 $625 +JUMPV +LABELV $624 +line 1363 +;1362: else +;1363: { +line 1364 +;1364: ent->client->ps.saberLockFrame = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 532 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1365 +;1365: } +LABELV $625 +line 1367 +;1366: +;1367: Pmove (&pm); +ADDRLP4 8 +ARGP4 +ADDRGP4 Pmove +CALLV +pop +line 1369 +;1368: +;1369: switch(pm.cmd.generic_cmd) +ADDRLP4 456 +ADDRLP4 8+4+23 +INDIRU1 +CVUI4 1 +ASGNI4 +ADDRLP4 456 +INDIRI4 +CNSTI4 0 +LTI4 $638 +ADDRLP4 456 +INDIRI4 +CNSTI4 20 +GTI4 $638 +ADDRLP4 456 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $679 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $679 +address $638 +address $643 +address $644 +address $645 +address $646 +address $647 +address $648 +address $649 +address $650 +address $651 +address $652 +address $653 +address $654 +address $655 +address $656 +address $659 +address $662 +address $665 +address $670 +address $675 +address $678 +code +line 1370 +;1370: { +line 1372 +;1371: case 0: +;1372: break; +LABELV $643 +line 1374 +;1373: case GENCMD_SABERSWITCH: +;1374: Cmd_ToggleSaber_f(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Cmd_ToggleSaber_f +CALLV +pop +line 1375 +;1375: break; +ADDRGP4 $638 +JUMPV +LABELV $644 +line 1377 +;1376: case GENCMD_ENGAGE_DUEL: +;1377: Cmd_EngageDuel_f(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Cmd_EngageDuel_f +CALLV +pop +line 1378 +;1378: break; +ADDRGP4 $638 +JUMPV +LABELV $645 +line 1380 +;1379: case GENCMD_FORCE_HEAL: +;1380: ForceHeal(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ForceHeal +CALLV +pop +line 1381 +;1381: break; +ADDRGP4 $638 +JUMPV +LABELV $646 +line 1383 +;1382: case GENCMD_FORCE_SPEED: +;1383: ForceSpeed(ent, 0); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 ForceSpeed +CALLV +pop +line 1384 +;1384: break; +ADDRGP4 $638 +JUMPV +LABELV $647 +line 1386 +;1385: case GENCMD_FORCE_THROW: +;1386: ForceThrow(ent, qfalse); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 ForceThrow +CALLV +pop +line 1387 +;1387: break; +ADDRGP4 $638 +JUMPV +LABELV $648 +line 1389 +;1388: case GENCMD_FORCE_PULL: +;1389: ForceThrow(ent, qtrue); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 ForceThrow +CALLV +pop +line 1390 +;1390: break; +ADDRGP4 $638 +JUMPV +LABELV $649 +line 1392 +;1391: case GENCMD_FORCE_DISTRACT: +;1392: ForceTelepathy(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ForceTelepathy +CALLV +pop +line 1393 +;1393: break; +ADDRGP4 $638 +JUMPV +LABELV $650 +line 1395 +;1394: case GENCMD_FORCE_RAGE: +;1395: ForceRage(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ForceRage +CALLV +pop +line 1396 +;1396: break; +ADDRGP4 $638 +JUMPV +LABELV $651 +line 1398 +;1397: case GENCMD_FORCE_PROTECT: +;1398: ForceProtect(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ForceProtect +CALLV +pop +line 1399 +;1399: break; +ADDRGP4 $638 +JUMPV +LABELV $652 +line 1401 +;1400: case GENCMD_FORCE_ABSORB: +;1401: ForceAbsorb(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ForceAbsorb +CALLV +pop +line 1402 +;1402: break; +ADDRGP4 $638 +JUMPV +LABELV $653 +line 1404 +;1403: case GENCMD_FORCE_HEALOTHER: +;1404: ForceTeamHeal(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ForceTeamHeal +CALLV +pop +line 1405 +;1405: break; +ADDRGP4 $638 +JUMPV +LABELV $654 +line 1407 +;1406: case GENCMD_FORCE_FORCEPOWEROTHER: +;1407: ForceTeamForceReplenish(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ForceTeamForceReplenish +CALLV +pop +line 1408 +;1408: break; +ADDRGP4 $638 +JUMPV +LABELV $655 +line 1410 +;1409: case GENCMD_FORCE_SEEING: +;1410: ForceSeeing(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ForceSeeing +CALLV +pop +line 1411 +;1411: break; +ADDRGP4 $638 +JUMPV +LABELV $656 +line 1413 +;1412: case GENCMD_USE_SEEKER: +;1413: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_SEEKER)) && +ADDRLP4 464 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 464 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 2 +BANDI4 +CNSTI4 0 +EQI4 $638 +ADDRLP4 464 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRLP4 468 +ADDRGP4 G_ItemUsable +CALLI4 +ASGNI4 +ADDRLP4 468 +INDIRI4 +CNSTI4 0 +EQI4 $638 +line 1415 +;1414: G_ItemUsable(&ent->client->ps, HI_SEEKER) ) +;1415: { +line 1416 +;1416: ItemUse_Seeker(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Seeker +CALLV +pop +line 1417 +;1417: G_AddEvent(ent, EV_USE_ITEM0+HI_SEEKER, 0); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 41 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1418 +;1418: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] &= ~(1 << HI_SEEKER); +ADDRLP4 472 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 224 +ADDP4 +ASGNP4 +ADDRLP4 472 +INDIRP4 +ADDRLP4 472 +INDIRP4 +INDIRI4 +CNSTI4 -3 +BANDI4 +ASGNI4 +line 1419 +;1419: } +line 1420 +;1420: break; +ADDRGP4 $638 +JUMPV +LABELV $659 +line 1422 +;1421: case GENCMD_USE_FIELD: +;1422: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_SHIELD)) && +ADDRLP4 472 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 472 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +EQI4 $638 +ADDRLP4 472 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRLP4 476 +ADDRGP4 G_ItemUsable +CALLI4 +ASGNI4 +ADDRLP4 476 +INDIRI4 +CNSTI4 0 +EQI4 $638 +line 1424 +;1423: G_ItemUsable(&ent->client->ps, HI_SHIELD) ) +;1424: { +line 1425 +;1425: ItemUse_Shield(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Shield +CALLV +pop +line 1426 +;1426: G_AddEvent(ent, EV_USE_ITEM0+HI_SHIELD, 0); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 42 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1427 +;1427: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] &= ~(1 << HI_SHIELD); +ADDRLP4 480 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 224 +ADDP4 +ASGNP4 +ADDRLP4 480 +INDIRP4 +ADDRLP4 480 +INDIRP4 +INDIRI4 +CNSTI4 -5 +BANDI4 +ASGNI4 +line 1428 +;1428: } +line 1429 +;1429: break; +ADDRGP4 $638 +JUMPV +LABELV $662 +line 1431 +;1430: case GENCMD_USE_BACTA: +;1431: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_MEDPAC)) && +ADDRLP4 480 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 480 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $638 +ADDRLP4 480 +INDIRP4 +ARGP4 +CNSTI4 3 +ARGI4 +ADDRLP4 484 +ADDRGP4 G_ItemUsable +CALLI4 +ASGNI4 +ADDRLP4 484 +INDIRI4 +CNSTI4 0 +EQI4 $638 +line 1433 +;1432: G_ItemUsable(&ent->client->ps, HI_MEDPAC) ) +;1433: { +line 1434 +;1434: ItemUse_MedPack(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_MedPack +CALLV +pop +line 1435 +;1435: G_AddEvent(ent, EV_USE_ITEM0+HI_MEDPAC, 0); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 43 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1436 +;1436: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] &= ~(1 << HI_MEDPAC); +ADDRLP4 488 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 224 +ADDP4 +ASGNP4 +ADDRLP4 488 +INDIRP4 +ADDRLP4 488 +INDIRP4 +INDIRI4 +CNSTI4 -9 +BANDI4 +ASGNI4 +line 1437 +;1437: } +line 1438 +;1438: break; +ADDRGP4 $638 +JUMPV +LABELV $665 +line 1440 +;1439: case GENCMD_USE_ELECTROBINOCULARS: +;1440: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_BINOCULARS)) && +ADDRLP4 488 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 488 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 32 +BANDI4 +CNSTI4 0 +EQI4 $638 +ADDRLP4 488 +INDIRP4 +ARGP4 +CNSTI4 5 +ARGI4 +ADDRLP4 492 +ADDRGP4 G_ItemUsable +CALLI4 +ASGNI4 +ADDRLP4 492 +INDIRI4 +CNSTI4 0 +EQI4 $638 +line 1442 +;1441: G_ItemUsable(&ent->client->ps, HI_BINOCULARS) ) +;1442: { +line 1443 +;1443: ItemUse_Binoculars(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Binoculars +CALLV +pop +line 1444 +;1444: if (ent->client->ps.zoomMode == 0) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1320 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $668 +line 1445 +;1445: { +line 1446 +;1446: G_AddEvent(ent, EV_USE_ITEM0+HI_BINOCULARS, 1); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 45 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1447 +;1447: } +ADDRGP4 $638 +JUMPV +LABELV $668 +line 1449 +;1448: else +;1449: { +line 1450 +;1450: G_AddEvent(ent, EV_USE_ITEM0+HI_BINOCULARS, 2); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 45 +ARGI4 +CNSTI4 2 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1451 +;1451: } +line 1452 +;1452: } +line 1453 +;1453: break; +ADDRGP4 $638 +JUMPV +LABELV $670 +line 1455 +;1454: case GENCMD_ZOOM: +;1455: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_BINOCULARS)) && +ADDRLP4 496 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 496 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 32 +BANDI4 +CNSTI4 0 +EQI4 $638 +ADDRLP4 496 +INDIRP4 +ARGP4 +CNSTI4 5 +ARGI4 +ADDRLP4 500 +ADDRGP4 G_ItemUsable +CALLI4 +ASGNI4 +ADDRLP4 500 +INDIRI4 +CNSTI4 0 +EQI4 $638 +line 1457 +;1456: G_ItemUsable(&ent->client->ps, HI_BINOCULARS) ) +;1457: { +line 1458 +;1458: ItemUse_Binoculars(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Binoculars +CALLV +pop +line 1459 +;1459: if (ent->client->ps.zoomMode == 0) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1320 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $673 +line 1460 +;1460: { +line 1461 +;1461: G_AddEvent(ent, EV_USE_ITEM0+HI_BINOCULARS, 1); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 45 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1462 +;1462: } +ADDRGP4 $638 +JUMPV +LABELV $673 +line 1464 +;1463: else +;1464: { +line 1465 +;1465: G_AddEvent(ent, EV_USE_ITEM0+HI_BINOCULARS, 2); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 45 +ARGI4 +CNSTI4 2 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1466 +;1466: } +line 1467 +;1467: } +line 1468 +;1468: break; +ADDRGP4 $638 +JUMPV +LABELV $675 +line 1470 +;1469: case GENCMD_USE_SENTRY: +;1470: if ( (ent->client->ps.stats[STAT_HOLDABLE_ITEMS] & (1 << HI_SENTRY_GUN)) && +ADDRLP4 504 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 504 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 64 +BANDI4 +CNSTI4 0 +EQI4 $638 +ADDRLP4 504 +INDIRP4 +ARGP4 +CNSTI4 6 +ARGI4 +ADDRLP4 508 +ADDRGP4 G_ItemUsable +CALLI4 +ASGNI4 +ADDRLP4 508 +INDIRI4 +CNSTI4 0 +EQI4 $638 +line 1472 +;1471: G_ItemUsable(&ent->client->ps, HI_SENTRY_GUN) ) +;1472: { +line 1473 +;1473: ItemUse_Sentry(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ItemUse_Sentry +CALLV +pop +line 1474 +;1474: G_AddEvent(ent, EV_USE_ITEM0+HI_SENTRY_GUN, 0); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 46 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 1475 +;1475: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] &= ~(1 << HI_SENTRY_GUN); +ADDRLP4 512 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 224 +ADDP4 +ASGNP4 +ADDRLP4 512 +INDIRP4 +ADDRLP4 512 +INDIRP4 +INDIRI4 +CNSTI4 -65 +BANDI4 +ASGNI4 +line 1476 +;1476: } +line 1477 +;1477: break; +ADDRGP4 $638 +JUMPV +LABELV $678 +line 1479 +;1478: case GENCMD_SABERATTACKCYCLE: +;1479: Cmd_SaberAttackCycle_f(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Cmd_SaberAttackCycle_f +CALLV +pop +line 1480 +;1480: break; +line 1482 +;1481: default: +;1482: break; +LABELV $638 +line 1486 +;1483: } +;1484: +;1485: // save results of pmove +;1486: if ( ent->client->ps.eventSequence != oldEventSequence ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +ADDRLP4 392 +INDIRI4 +EQI4 $680 +line 1487 +;1487: ent->eventTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 488 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 1488 +;1488: } +LABELV $680 +line 1489 +;1489: if (g_smoothClients.integer) { +ADDRGP4 g_smoothClients+12 +INDIRI4 +CNSTI4 0 +EQI4 $683 +line 1490 +;1490: BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, qtrue ); +ADDRLP4 464 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 468 +ADDRLP4 464 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 468 +INDIRP4 +ARGP4 +ADDRLP4 464 +INDIRP4 +ARGP4 +ADDRLP4 468 +INDIRP4 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 BG_PlayerStateToEntityStateExtraPolate +CALLV +pop +line 1491 +;1491: } +ADDRGP4 $684 +JUMPV +LABELV $683 +line 1492 +;1492: else { +line 1493 +;1493: BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, qtrue ); +ADDRLP4 464 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 464 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 464 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 BG_PlayerStateToEntityState +CALLV +pop +line 1494 +;1494: } +LABELV $684 +line 1495 +;1495: SendPendingPredictableEvents( &ent->client->ps ); +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 SendPendingPredictableEvents +CALLV +pop +line 1497 +;1496: +;1497: if ( !( ent->client->ps.eFlags & EF_FIRING ) ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +CNSTI4 256 +BANDI4 +CNSTI4 0 +NEI4 $686 +line 1498 +;1498: client->fireHeld = qfalse; // for grapple +ADDRLP4 4 +INDIRP4 +CNSTI4 1696 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1499 +;1499: } +LABELV $686 +line 1502 +;1500: +;1501: // use the snapped origin for linking so it matches client predicted versions +;1502: VectorCopy( ent->s.pos.trBase, ent->r.currentOrigin ); +ADDRLP4 464 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 464 +INDIRP4 +CNSTI4 368 +ADDP4 +ADDRLP4 464 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 1504 +;1503: +;1504: VectorCopy (pm.mins, ent->r.mins); +ADDRFP4 0 +INDIRP4 +CNSTI4 316 +ADDP4 +ADDRLP4 8+188 +INDIRB +ASGNB 12 +line 1505 +;1505: VectorCopy (pm.maxs, ent->r.maxs); +ADDRFP4 0 +INDIRP4 +CNSTI4 328 +ADDP4 +ADDRLP4 8+200 +INDIRB +ASGNB 12 +line 1507 +;1506: +;1507: ent->waterlevel = pm.waterlevel; +ADDRFP4 0 +INDIRP4 +CNSTI4 748 +ADDP4 +ADDRLP4 8+216 +INDIRI4 +ASGNI4 +line 1508 +;1508: ent->watertype = pm.watertype; +ADDRFP4 0 +INDIRP4 +CNSTI4 744 +ADDP4 +ADDRLP4 8+212 +INDIRI4 +ASGNI4 +line 1511 +;1509: +;1510: // execute client events +;1511: ClientEvents( ent, oldEventSequence ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 392 +INDIRI4 +ARGI4 +ADDRGP4 ClientEvents +CALLV +pop +line 1513 +;1512: +;1513: if ( pm.useEvent ) +ADDRLP4 8+184 +INDIRI4 +CNSTI4 0 +EQI4 $692 +line 1514 +;1514: { +line 1517 +;1515: //TODO: Use +;1516:// TryUse( ent ); +;1517: } +LABELV $692 +line 1520 +;1518: +;1519: // link entity now, after any personal teleporters have been used +;1520: trap_LinkEntity (ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 1521 +;1521: if ( !ent->client->noclip ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1576 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $695 +line 1522 +;1522: G_TouchTriggers( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_TouchTriggers +CALLV +pop +line 1523 +;1523: } +LABELV $695 +line 1526 +;1524: +;1525: // NOTE: now copy the exact origin over otherwise clients can be snapped into solid +;1526: VectorCopy( ent->client->ps.origin, ent->r.currentOrigin ); +ADDRLP4 468 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 468 +INDIRP4 +CNSTI4 368 +ADDP4 +ADDRLP4 468 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 1532 +;1527: +;1528: //test for solid areas in the AAS file +;1529:// BotTestAAS(ent->r.currentOrigin); +;1530: +;1531: // touch other objects +;1532: ClientImpacts( ent, &pm ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 ClientImpacts +CALLV +pop +line 1535 +;1533: +;1534: // save results of triggers and client events +;1535: if (ent->client->ps.eventSequence != oldEventSequence) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +ADDRLP4 392 +INDIRI4 +EQI4 $697 +line 1536 +;1536: ent->eventTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 488 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 1537 +;1537: } +LABELV $697 +line 1540 +;1538: +;1539: // swap and latch button actions +;1540: client->oldbuttons = client->buttons; +ADDRLP4 4 +INDIRP4 +CNSTI4 1588 +ADDP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1584 +ADDP4 +INDIRI4 +ASGNI4 +line 1541 +;1541: client->buttons = ucmd->buttons; +ADDRLP4 4 +INDIRP4 +CNSTI4 1584 +ADDP4 +ADDRLP4 384 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ASGNI4 +line 1542 +;1542: client->latched_buttons |= client->buttons & ~client->oldbuttons; +ADDRLP4 480 +ADDRLP4 4 +INDIRP4 +CNSTI4 1592 +ADDP4 +ASGNP4 +ADDRLP4 480 +INDIRP4 +ADDRLP4 480 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1584 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1588 +ADDP4 +INDIRI4 +BCOMI4 +BANDI4 +BORI4 +ASGNI4 +line 1545 +;1543: +;1544: // Did we kick someone in our pmove sequence? +;1545: if (client->ps.forceKickFlip) +ADDRLP4 4 +INDIRP4 +CNSTI4 1280 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $700 +line 1546 +;1546: { +line 1547 +;1547: gentity_t *faceKicked = &g_entities[client->ps.forceKickFlip-1]; +ADDRLP4 484 +CNSTI4 828 +ADDRLP4 4 +INDIRP4 +CNSTI4 1280 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities-828 +ADDP4 +ASGNP4 +line 1549 +;1548: +;1549: if (faceKicked && faceKicked->client && (!OnSameTeam(ent, faceKicked) || g_friendlyFire.integer) && +ADDRLP4 492 +CNSTU4 0 +ASGNU4 +ADDRLP4 484 +INDIRP4 +CVPU4 4 +ADDRLP4 492 +INDIRU4 +EQU4 $703 +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 492 +INDIRU4 +EQU4 $703 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 484 +INDIRP4 +ARGP4 +ADDRLP4 496 +ADDRGP4 OnSameTeam +CALLI4 +ASGNI4 +ADDRLP4 500 +CNSTI4 0 +ASGNI4 +ADDRLP4 496 +INDIRI4 +ADDRLP4 500 +INDIRI4 +EQI4 $706 +ADDRGP4 g_friendlyFire+12 +INDIRI4 +ADDRLP4 500 +INDIRI4 +EQI4 $703 +LABELV $706 +ADDRLP4 504 +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 504 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $707 +ADDRLP4 504 +INDIRP4 +CNSTI4 1284 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +NEI4 $703 +LABELV $707 +ADDRLP4 508 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 508 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $708 +ADDRLP4 508 +INDIRP4 +CNSTI4 1284 +ADDP4 +INDIRI4 +ADDRLP4 484 +INDIRP4 +INDIRI4 +NEI4 $703 +LABELV $708 +line 1552 +;1550: (!faceKicked->client->ps.duelInProgress || faceKicked->client->ps.duelIndex == ent->s.number) && +;1551: (!ent->client->ps.duelInProgress || ent->client->ps.duelIndex == faceKicked->s.number)) +;1552: { +line 1553 +;1553: if ( faceKicked && faceKicked->client && faceKicked->health && faceKicked->takedamage ) +ADDRLP4 516 +CNSTU4 0 +ASGNU4 +ADDRLP4 484 +INDIRP4 +CVPU4 4 +ADDRLP4 516 +INDIRU4 +EQU4 $709 +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 516 +INDIRU4 +EQU4 $709 +ADDRLP4 520 +CNSTI4 0 +ASGNI4 +ADDRLP4 484 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 520 +INDIRI4 +EQI4 $709 +ADDRLP4 484 +INDIRP4 +CNSTI4 680 +ADDP4 +INDIRI4 +ADDRLP4 520 +INDIRI4 +EQI4 $709 +line 1554 +;1554: {//push them away and do pain +line 1556 +;1555: vec3_t oppDir; +;1556: int strength = (int)VectorNormalize2( client->ps.velocity, oppDir ); +ADDRLP4 4 +INDIRP4 +CNSTI4 32 +ADDP4 +ARGP4 +ADDRLP4 528 +ARGP4 +ADDRLP4 540 +ADDRGP4 VectorNormalize2 +CALLF4 +ASGNF4 +ADDRLP4 524 +ADDRLP4 540 +INDIRF4 +CVFI4 4 +ASGNI4 +line 1558 +;1557: +;1558: strength *= 0.05; +ADDRLP4 524 +CNSTF4 1028443341 +ADDRLP4 524 +INDIRI4 +CVIF4 4 +MULF4 +CVFI4 4 +ASGNI4 +line 1560 +;1559: +;1560: VectorScale( oppDir, -1, oppDir ); +ADDRLP4 544 +CNSTF4 3212836864 +ASGNF4 +ADDRLP4 528 +ADDRLP4 544 +INDIRF4 +ADDRLP4 528 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 528+4 +ADDRLP4 544 +INDIRF4 +ADDRLP4 528+4 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 528+8 +CNSTF4 3212836864 +ADDRLP4 528+8 +INDIRF4 +MULF4 +ASGNF4 +line 1562 +;1561: +;1562: G_Damage( faceKicked, ent, ent, oppDir, client->ps.origin, strength, DAMAGE_NO_ARMOR, MOD_MELEE ); +ADDRLP4 484 +INDIRP4 +ARGP4 +ADDRLP4 548 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 548 +INDIRP4 +ARGP4 +ADDRLP4 548 +INDIRP4 +ARGP4 +ADDRLP4 528 +ARGP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 524 +INDIRI4 +ARGI4 +ADDRLP4 552 +CNSTI4 2 +ASGNI4 +ADDRLP4 552 +INDIRI4 +ARGI4 +ADDRLP4 552 +INDIRI4 +ARGI4 +ADDRGP4 G_Damage +CALLV +pop +line 1564 +;1563: +;1564: if (faceKicked->health > 0 && +ADDRLP4 560 +CNSTI4 0 +ASGNI4 +ADDRLP4 484 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 560 +INDIRI4 +LEI4 $715 +ADDRLP4 564 +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 564 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +ADDRLP4 560 +INDIRI4 +LEI4 $715 +ADDRLP4 564 +INDIRP4 +CNSTI4 1236 +ADDP4 +INDIRI4 +CNSTI4 8 +EQI4 $715 +line 1567 +;1565: faceKicked->client->ps.stats[STAT_HEALTH] > 0 && +;1566: faceKicked->client->ps.forceHandExtend != HANDEXTEND_KNOCKDOWN) +;1567: { +line 1568 +;1568: if (Q_irand(1, 10) <= 3) +CNSTI4 1 +ARGI4 +CNSTI4 10 +ARGI4 +ADDRLP4 568 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRLP4 568 +INDIRI4 +CNSTI4 3 +GTI4 $717 +line 1569 +;1569: { //only actually knock over sometimes, but always do velocity hit +line 1570 +;1570: faceKicked->client->ps.forceHandExtend = HANDEXTEND_KNOCKDOWN; +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1236 +ADDP4 +CNSTI4 8 +ASGNI4 +line 1571 +;1571: faceKicked->client->ps.forceHandExtendTime = level.time + 1100; +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1240 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 1100 +ADDI4 +ASGNI4 +line 1572 +;1572: faceKicked->client->ps.forceDodgeAnim = 0; //this toggles between 1 and 0, when it's 1 we should play the get up anim +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1248 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1573 +;1573: } +LABELV $717 +line 1575 +;1574: +;1575: faceKicked->client->ps.otherKiller = ent->s.number; +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 748 +ADDP4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +line 1576 +;1576: faceKicked->client->ps.otherKillerTime = level.time + 5000; +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 752 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 5000 +ADDI4 +ASGNI4 +line 1577 +;1577: faceKicked->client->ps.otherKillerDebounceTime = level.time + 100; +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 756 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 100 +ADDI4 +ASGNI4 +line 1579 +;1578: +;1579: faceKicked->client->ps.velocity[0] = oppDir[0]*(strength*40); +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRLP4 528 +INDIRF4 +CNSTI4 40 +ADDRLP4 524 +INDIRI4 +MULI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1580 +;1580: faceKicked->client->ps.velocity[1] = oppDir[1]*(strength*40); +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRLP4 528+4 +INDIRF4 +CNSTI4 40 +ADDRLP4 524 +INDIRI4 +MULI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1581 +;1581: faceKicked->client->ps.velocity[2] = 200; +ADDRLP4 484 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1128792064 +ASGNF4 +line 1582 +;1582: } +LABELV $715 +line 1584 +;1583: +;1584: G_Sound( faceKicked, CHAN_AUTO, G_SoundIndex( va("sound/weapons/melee/punch%d", Q_irand(1, 4)) ) ); +CNSTI4 1 +ARGI4 +CNSTI4 4 +ARGI4 +ADDRLP4 568 +ADDRGP4 Q_irand +CALLI4 +ASGNI4 +ADDRGP4 $723 +ARGP4 +ADDRLP4 568 +INDIRI4 +ARGI4 +ADDRLP4 572 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 572 +INDIRP4 +ARGP4 +ADDRLP4 576 +ADDRGP4 G_SoundIndex +CALLI4 +ASGNI4 +ADDRLP4 484 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 576 +INDIRI4 +ARGI4 +ADDRGP4 G_Sound +CALLV +pop +line 1585 +;1585: } +LABELV $709 +line 1586 +;1586: } +LABELV $703 +line 1588 +;1587: +;1588: client->ps.forceKickFlip = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 1280 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1589 +;1589: } +LABELV $700 +line 1592 +;1590: +;1591: // check for respawning +;1592: if ( client->ps.stats[STAT_HEALTH] <= 0 ) { +ADDRLP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $724 +line 1594 +;1593: // wait for the attack button to be pressed +;1594: if ( level.time > client->respawnTime ) { +ADDRGP4 level+32 +INDIRI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1672 +ADDP4 +INDIRI4 +LEI4 $438 +line 1596 +;1595: // forcerespawn is to prevent users from waiting out powerups +;1596: if ( g_forcerespawn.integer > 0 && +ADDRGP4 g_forcerespawn+12 +INDIRI4 +CNSTI4 0 +LEI4 $729 +ADDRGP4 level+32 +INDIRI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1672 +ADDP4 +INDIRI4 +SUBI4 +CNSTI4 1000 +ADDRGP4 g_forcerespawn+12 +INDIRI4 +MULI4 +LEI4 $729 +line 1597 +;1597: ( level.time - client->respawnTime ) > g_forcerespawn.integer * 1000 ) { +line 1598 +;1598: respawn( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 respawn +CALLV +pop +line 1599 +;1599: return; +ADDRGP4 $438 +JUMPV +LABELV $729 +line 1603 +;1600: } +;1601: +;1602: // pressing attack or use is the normal respawn method +;1603: if ( ucmd->buttons & ( BUTTON_ATTACK | BUTTON_USE_HOLDABLE ) ) { +ADDRLP4 384 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +CNSTI4 5 +BANDI4 +CNSTI4 0 +EQI4 $438 +line 1604 +;1604: respawn( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 respawn +CALLV +pop +line 1605 +;1605: } +line 1606 +;1606: } +line 1607 +;1607: return; +ADDRGP4 $438 +JUMPV +LABELV $724 +line 1611 +;1608: } +;1609: +;1610: // perform once-a-second actions +;1611: ClientTimerActions( ent, msec ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 388 +INDIRI4 +ARGI4 +ADDRGP4 ClientTimerActions +CALLV +pop +line 1613 +;1612: +;1613: G_UpdateClientBroadcasts ( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_UpdateClientBroadcasts +CALLV +pop +line 1614 +;1614:} +LABELV $438 +endproc ClientThink_real 580 32 +export G_CheckClientTimeouts +proc G_CheckClientTimeouts 0 8 +line 1624 +;1615: +;1616:/* +;1617:================== +;1618:G_CheckClientTimeouts +;1619: +;1620:Checks whether a client has exceded any timeouts and act accordingly +;1621:================== +;1622:*/ +;1623:void G_CheckClientTimeouts ( gentity_t *ent ) +;1624:{ +line 1626 +;1625: // Only timeout supported right now is the timeout to spectator mode +;1626: if ( !g_timeouttospec.integer ) +ADDRGP4 g_timeouttospec+12 +INDIRI4 +CNSTI4 0 +NEI4 $737 +line 1627 +;1627: { +line 1628 +;1628: return; +ADDRGP4 $736 +JUMPV +LABELV $737 +line 1632 +;1629: } +;1630: +;1631: // Already a spectator, no need to boot them to spectator +;1632: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $740 +line 1633 +;1633: { +line 1634 +;1634: return; +ADDRGP4 $736 +JUMPV +LABELV $740 +line 1639 +;1635: } +;1636: +;1637: // See how long its been since a command was received by the client and if its +;1638: // longer than the timeout to spectator then force this client into spectator mode +;1639: if ( level.time - ent->client->pers.cmd.serverTime > g_timeouttospec.integer * 1000 ) +ADDRGP4 level+32 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1372 +ADDP4 +INDIRI4 +SUBI4 +CNSTI4 1000 +ADDRGP4 g_timeouttospec+12 +INDIRI4 +MULI4 +LEI4 $742 +line 1640 +;1640: { +line 1641 +;1641: SetTeam ( ent, "spectator" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $746 +ARGP4 +ADDRGP4 SetTeam +CALLV +pop +line 1642 +;1642: } +LABELV $742 +line 1643 +;1643:} +LABELV $736 +endproc G_CheckClientTimeouts 0 8 +export ClientThink +proc ClientThink 8 8 +line 1652 +;1644: +;1645:/* +;1646:================== +;1647:ClientThink +;1648: +;1649:A new command has arrived from the client +;1650:================== +;1651:*/ +;1652:void ClientThink( int clientNum ) { +line 1655 +;1653: gentity_t *ent; +;1654: +;1655: ent = g_entities + clientNum; +ADDRLP4 0 +CNSTI4 828 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1656 +;1656: trap_GetUsercmd( clientNum, &ent->client->pers.cmd ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1372 +ADDP4 +ARGP4 +ADDRGP4 trap_GetUsercmd +CALLV +pop +line 1660 +;1657: +;1658: // mark the time we got info, so we can display the +;1659: // phone jack if they don't get any for a while +;1660: ent->client->lastCmdTime = level.time; +ADDRLP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1580 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 1662 +;1661: +;1662: if ( !(ent->r.svFlags & SVF_BOT) && !g_synchronousClients.integer ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +ADDRLP4 4 +INDIRI4 +NEI4 $749 +ADDRGP4 g_synchronousClients+12 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $749 +line 1663 +;1663: ClientThink_real( ent ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ClientThink_real +CALLV +pop +line 1664 +;1664: } +LABELV $749 +line 1665 +;1665:} +LABELV $747 +endproc ClientThink 8 8 +export G_RunClient +proc G_RunClient 4 4 +line 1668 +;1666: +;1667: +;1668:void G_RunClient( gentity_t *ent ) { +line 1669 +;1669: if ( !(ent->r.svFlags & SVF_BOT) && !g_synchronousClients.integer ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +ADDRLP4 0 +INDIRI4 +NEI4 $753 +ADDRGP4 g_synchronousClients+12 +INDIRI4 +ADDRLP4 0 +INDIRI4 +NEI4 $753 +line 1670 +;1670: return; +ADDRGP4 $752 +JUMPV +LABELV $753 +line 1672 +;1671: } +;1672: ent->client->pers.cmd.serverTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1372 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 1673 +;1673: ClientThink_real( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ClientThink_real +CALLV +pop +line 1674 +;1674:} +LABELV $752 +endproc G_RunClient 4 4 +export SpectatorClientEndFrame +proc SpectatorClientEndFrame 24 8 +line 1683 +;1675: +;1676: +;1677:/* +;1678:================== +;1679:SpectatorClientEndFrame +;1680: +;1681:================== +;1682:*/ +;1683:void SpectatorClientEndFrame( gentity_t *ent ) { +line 1687 +;1684: gclient_t *cl; +;1685: +;1686: // if we are doing a chase cam or a remote view, grab the latest info +;1687: if ( ent->client->sess.spectatorState == SPECTATOR_FOLLOW ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $758 +line 1690 +;1688: int clientNum, flags; +;1689: +;1690: clientNum = ent->client->sess.spectatorClient; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1532 +ADDP4 +INDIRI4 +ASGNI4 +line 1693 +;1691: +;1692: // team follow1 and team follow2 go to whatever clients are playing +;1693: if ( clientNum == -1 ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 -1 +NEI4 $760 +line 1694 +;1694: clientNum = level.follow1; +ADDRLP4 4 +ADDRGP4 level+212 +INDIRI4 +ASGNI4 +line 1695 +;1695: } else if ( clientNum == -2 ) { +ADDRGP4 $761 +JUMPV +LABELV $760 +ADDRLP4 4 +INDIRI4 +CNSTI4 -2 +NEI4 $763 +line 1696 +;1696: clientNum = level.follow2; +ADDRLP4 4 +ADDRGP4 level+216 +INDIRI4 +ASGNI4 +line 1697 +;1697: } +LABELV $763 +LABELV $761 +line 1698 +;1698: if ( clientNum >= 0 ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +LTI4 $766 +line 1699 +;1699: cl = &level.clients[ clientNum ]; +ADDRLP4 0 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 1700 +;1700: if ( cl->pers.connected == CON_CONNECTED && cl->sess.sessionTeam != TEAM_SPECTATOR ) { +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $768 +ADDRLP4 12 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +EQI4 $768 +line 1701 +;1701: flags = (cl->ps.eFlags & ~(EF_VOTED | EF_TEAMVOTED)) | (ent->client->ps.eFlags & (EF_VOTED | EF_TEAMVOTED)); +ADDRLP4 16 +CNSTI4 108 +ASGNI4 +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRI4 +CNSTI4 -540673 +BANDI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRI4 +CNSTI4 540672 +BANDI4 +BORI4 +ASGNI4 +line 1702 +;1702: ent->client->ps = cl->ps; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRB +ASGNB 1368 +line 1703 +;1703: ent->client->ps.pm_flags |= PMF_FOLLOW; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 20 +INDIRP4 +INDIRI4 +CNSTI4 4096 +BORI4 +ASGNI4 +line 1704 +;1704: ent->client->ps.eFlags = flags; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 1705 +;1705: return; +ADDRGP4 $757 +JUMPV +LABELV $768 +line 1706 +;1706: } else { +line 1708 +;1707: // drop them to free spectators unless they are dedicated camera followers +;1708: if ( ent->client->sess.spectatorClient >= 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1532 +ADDP4 +INDIRI4 +CNSTI4 0 +LTI4 $770 +line 1709 +;1709: ent->client->sess.spectatorState = SPECTATOR_FREE; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1528 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1710 +;1710: ClientBegin( ent->client - level.clients, qtrue ); +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRGP4 level +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1756 +DIVI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 ClientBegin +CALLV +pop +line 1711 +;1711: } +LABELV $770 +line 1712 +;1712: } +line 1713 +;1713: } +LABELV $766 +line 1714 +;1714: } +LABELV $758 +line 1716 +;1715: +;1716: if ( ent->client->sess.spectatorState == SPECTATOR_SCOREBOARD ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $772 +line 1717 +;1717: ent->client->ps.pm_flags |= PMF_SCOREBOARD; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +CNSTI4 8192 +BORI4 +ASGNI4 +line 1718 +;1718: } else { +ADDRGP4 $773 +JUMPV +LABELV $772 +line 1719 +;1719: ent->client->ps.pm_flags &= ~PMF_SCOREBOARD; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +CNSTI4 -8193 +BANDI4 +ASGNI4 +line 1720 +;1720: } +LABELV $773 +line 1721 +;1721:} +LABELV $757 +endproc SpectatorClientEndFrame 24 8 +export ClientEndFrame +proc ClientEndFrame 20 16 +line 1732 +;1722: +;1723:/* +;1724:============== +;1725:ClientEndFrame +;1726: +;1727:Called at the end of each server frame for each connected client +;1728:A fast client will have multiple ClientThink for each ClientEdFrame, +;1729:while a slow client may have multiple ClientEndFrame between ClientThink. +;1730:============== +;1731:*/ +;1732:void ClientEndFrame( gentity_t *ent ) { +line 1736 +;1733: int i; +;1734: clientPersistant_t *pers; +;1735: +;1736: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $775 +line 1737 +;1737: SpectatorClientEndFrame( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 SpectatorClientEndFrame +CALLV +pop +line 1738 +;1738: return; +ADDRGP4 $774 +JUMPV +LABELV $775 +line 1741 +;1739: } +;1740: +;1741: pers = &ent->client->pers; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1368 +ADDP4 +ASGNP4 +line 1744 +;1742: +;1743: // turn off any expired powerups +;1744: for ( i = 0 ; i < MAX_POWERUPS ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $777 +line 1745 +;1745: if ( ent->client->ps.powerups[ i ] < level.time ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 344 +ADDP4 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +GEI4 $781 +line 1746 +;1746: ent->client->ps.powerups[ i ] = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 344 +ADDP4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1747 +;1747: } +LABELV $781 +line 1748 +;1748: } +LABELV $778 +line 1744 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $777 +line 1762 +;1749: +;1750: // save network bandwidth +;1751:#if 0 +;1752: if ( !g_synchronousClients->integer && (ent->client->ps.pm_type == PM_NORMAL || ent->client->ps.pm_type == PM_FLOAT) ) { +;1753: // FIXME: this must change eventually for non-sync demo recording +;1754: VectorClear( ent->client->ps.viewangles ); +;1755: } +;1756:#endif +;1757: +;1758: // +;1759: // If the end of unit layout is displayed, don't give +;1760: // the player any normal movement attributes +;1761: // +;1762: if ( level.intermissiontime ) { +ADDRGP4 level+9008 +INDIRI4 +CNSTI4 0 +EQI4 $784 +line 1763 +;1763: return; +ADDRGP4 $774 +JUMPV +LABELV $784 +line 1767 +;1764: } +;1765: +;1766: // burn from lava, etc +;1767: P_WorldEffects (ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 P_WorldEffects +CALLV +pop +line 1770 +;1768: +;1769: // apply all the damage taken this frame +;1770: P_DamageFeedback (ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 P_DamageFeedback +CALLV +pop +line 1773 +;1771: +;1772: // add the EF_CONNECTION flag if we haven't gotten commands recently +;1773: if ( level.time - ent->client->lastCmdTime > 1000 ) { +ADDRGP4 level+32 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1580 +ADDP4 +INDIRI4 +SUBI4 +CNSTI4 1000 +LEI4 $787 +line 1774 +;1774: ent->s.eFlags |= EF_CONNECTION; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 8192 +BORI4 +ASGNI4 +line 1775 +;1775: } else { +ADDRGP4 $788 +JUMPV +LABELV $787 +line 1776 +;1776: ent->s.eFlags &= ~EF_CONNECTION; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 -8193 +BANDI4 +ASGNI4 +line 1777 +;1777: } +LABELV $788 +line 1779 +;1778: +;1779: ent->client->ps.stats[STAT_HEALTH] = ent->health; // FIXME: get rid of ent->health... +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ASGNI4 +line 1781 +;1780: +;1781: G_SetClientSound (ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_SetClientSound +CALLV +pop +line 1784 +;1782: +;1783: // set the latest infor +;1784: if (g_smoothClients.integer) { +ADDRGP4 g_smoothClients+12 +INDIRI4 +CNSTI4 0 +EQI4 $790 +line 1785 +;1785: BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, qtrue ); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +ADDRLP4 12 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRGP4 BG_PlayerStateToEntityStateExtraPolate +CALLV +pop +line 1786 +;1786: } +ADDRGP4 $791 +JUMPV +LABELV $790 +line 1787 +;1787: else { +line 1788 +;1788: BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, qtrue ); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 BG_PlayerStateToEntityState +CALLV +pop +line 1789 +;1789: } +LABELV $791 +line 1790 +;1790: SendPendingPredictableEvents( &ent->client->ps ); +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 SendPendingPredictableEvents +CALLV +pop +line 1795 +;1791: +;1792: // set the bit for the reachability area the client is currently in +;1793:// i = trap_AAS_PointReachabilityAreaIndex( ent->client->ps.origin ); +;1794:// ent->client->areabits[i >> 3] |= 1 << (i & 7); +;1795:} +LABELV $774 +endproc ClientEndFrame 20 16 +import saberOnSound +import saberOffSound +import G_ApplyKnockback +import trap_ROFF_Purge_Ent +import trap_ROFF_Play +import trap_ROFF_Cache +import trap_ROFF_UpdateEntities +import trap_ROFF_Clean +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_SnapVector +import trap_GeneticParentsAndChildSelection +import trap_BotResetWeaponState +import trap_BotFreeWeaponState +import trap_BotAllocWeaponState +import trap_BotLoadWeaponWeights +import trap_BotGetWeaponInfo +import trap_BotChooseBestFightWeapon +import trap_BotAddAvoidSpot +import trap_BotInitMoveState +import trap_BotFreeMoveState +import trap_BotAllocMoveState +import trap_BotPredictVisiblePosition +import trap_BotMovementViewTarget +import trap_BotReachabilityArea +import trap_BotResetLastAvoidReach +import trap_BotResetAvoidReach +import trap_BotMoveInDirection +import trap_BotMoveToGoal +import trap_BotResetMoveState +import trap_BotFreeGoalState +import trap_BotAllocGoalState +import trap_BotMutateGoalFuzzyLogic +import trap_BotSaveGoalFuzzyLogic +import trap_BotInterbreedGoalFuzzyLogic +import trap_BotFreeItemWeights +import trap_BotLoadItemWeights +import trap_BotUpdateEntityItems +import trap_BotInitLevelItems +import trap_BotSetAvoidGoalTime +import trap_BotAvoidGoalTime +import trap_BotGetLevelItemGoal +import trap_BotGetMapLocationGoal +import trap_BotGetNextCampSpotGoal +import trap_BotItemGoalInVisButNotVisible +import trap_BotTouchingGoal +import trap_BotChooseNBGItem +import trap_BotChooseLTGItem +import trap_BotGetSecondGoal +import trap_BotGetTopGoal +import trap_BotGoalName +import trap_BotDumpGoalStack +import trap_BotDumpAvoidGoals +import trap_BotEmptyGoalStack +import trap_BotPopGoal +import trap_BotPushGoal +import trap_BotResetAvoidGoals +import trap_BotRemoveFromAvoidGoals +import trap_BotResetGoalState +import trap_BotSetChatName +import trap_BotSetChatGender +import trap_BotLoadChatFile +import trap_BotReplaceSynonyms +import trap_UnifyWhiteSpaces +import trap_BotMatchVariable +import trap_BotFindMatch +import trap_StringContains +import trap_BotGetChatMessage +import trap_BotEnterChat +import trap_BotChatLength +import trap_BotReplyChat +import trap_BotNumInitialChats +import trap_BotInitialChat +import trap_BotNumConsoleMessages +import trap_BotNextConsoleMessage +import trap_BotRemoveConsoleMessage +import trap_BotQueueConsoleMessage +import trap_BotFreeChatState +import trap_BotAllocChatState +import trap_Characteristic_String +import trap_Characteristic_BInteger +import trap_Characteristic_Integer +import trap_Characteristic_BFloat +import trap_Characteristic_Float +import trap_BotFreeCharacter +import trap_BotLoadCharacter +import trap_EA_ResetInput +import trap_EA_GetInput +import trap_EA_EndRegular +import trap_EA_ForcePower +import trap_EA_Alt_Attack +import trap_EA_View +import trap_EA_Move +import trap_EA_DelayedJump +import trap_EA_Jump +import trap_EA_SelectWeapon +import trap_EA_MoveRight +import trap_EA_MoveLeft +import trap_EA_MoveBack +import trap_EA_MoveForward +import trap_EA_MoveDown +import trap_EA_MoveUp +import trap_EA_Crouch +import trap_EA_Respawn +import trap_EA_Use +import trap_EA_Attack +import trap_EA_Talk +import trap_EA_Gesture +import trap_EA_Action +import trap_EA_Command +import trap_EA_SayTeam +import trap_EA_Say +import trap_AAS_PredictClientMovement +import trap_AAS_Swimming +import trap_AAS_AlternativeRouteGoals +import trap_AAS_PredictRoute +import trap_AAS_EnableRoutingArea +import trap_AAS_AreaTravelTimeToGoalArea +import trap_AAS_AreaReachability +import trap_AAS_IntForBSPEpairKey +import trap_AAS_FloatForBSPEpairKey +import trap_AAS_VectorForBSPEpairKey +import trap_AAS_ValueForBSPEpairKey +import trap_AAS_NextBSPEntity +import trap_AAS_PointContents +import trap_AAS_TraceAreas +import trap_AAS_PointReachabilityAreaIndex +import trap_AAS_PointAreaNum +import trap_AAS_Time +import trap_AAS_PresenceTypeBoundingBox +import trap_AAS_Initialized +import trap_AAS_EntityInfo +import trap_AAS_AreaInfo +import trap_AAS_BBoxAreas +import trap_BotUserCommand +import trap_BotGetServerCommand +import trap_BotGetSnapshotEntity +import trap_BotLibTest +import trap_BotLibUpdateEntity +import trap_BotLibLoadMap +import trap_BotLibStartFrame +import trap_BotLibDefine +import trap_BotLibVarGet +import trap_BotLibVarSet +import trap_BotLibShutdown +import trap_BotLibSetup +import trap_DebugPolygonDelete +import trap_DebugPolygonCreate +import trap_GetEntityToken +import trap_GetUsercmd +import trap_BotFreeClient +import trap_BotAllocateClient +import trap_EntityContact +import trap_EntitiesInBox +import trap_UnlinkEntity +import trap_LinkEntity +import trap_AreasConnected +import trap_AdjustAreaPortalState +import trap_InPVSIgnorePortals +import trap_InPVS +import trap_PointContents +import trap_Trace +import trap_SetBrushModel +import trap_GetServerinfo +import trap_SetUserinfo +import trap_GetUserinfo +import trap_GetConfigstring +import trap_SetConfigstring +import trap_SendServerCommand +import trap_DropClient +import trap_LocateGameData +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableValue +import trap_Cvar_VariableIntegerValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_SendConsoleCommand +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Args +import trap_Argv +import trap_Argc +import trap_Milliseconds +import trap_Error +import trap_Printf +import g_timeouttospec +import g_forceDodge +import g_dismember +import g_singlePlayer +import g_enableBreath +import g_enableDust +import g_rankings +import pmove_msec +import pmove_fixed +import g_smoothClients +import g_blueteam +import g_redteam +import g_debugUp +import g_debugRight +import g_debugForward +import g_filterBan +import g_banIPs +import g_teamForceBalance +import g_teamAutoJoin +import g_allowVote +import g_blood +import g_doWarmup +import g_warmup +import g_motd +import g_synchronousClients +import g_adaptRespawn +import g_weaponTeamRespawn +import g_weaponRespawn +import g_debugDamage +import g_debugAlloc +import g_debugMove +import g_inactivity +import g_forcerespawn +import g_quadfactor +import g_knockback +import g_speed +import g_gravity +import g_needpass +import g_password +import g_friendlySaber +import g_friendlyFire +import g_saberInterpolate +import g_capturelimit +import g_timelimit +import g_duel_fraglimit +import g_fraglimit +import g_duelWeaponDisable +import g_weaponDisable +import g_forcePowerDisable +import g_spawnInvulnerability +import g_forceRegenTime +import g_saberLocking +import g_privateDuel +import g_forceBasedTeams +import g_maxForceRank +import g_dmflags +import g_autoMapCycle +import g_restarted +import g_maxGameClients +import g_maxclients +import g_cheats +import g_dedicated +import g_gametype +import g_entities +import level +import Pickup_Team +import CheckTeamStatus +import TeamplayInfoMessage +import Team_GetLocationMsg +import Team_GetLocation +import SelectSagaSpawnPoint +import SelectCTFSpawnPoint +import Team_FreeEntity +import Team_ReturnFlag +import Team_InitGame +import Team_CheckHurtCarrier +import Team_FragBonuses +import Team_DroppedFlagThink +import AddTeamScore +import TeamColorString +import OtherTeamName +import TeamName +import OtherTeam +import BotAIStartFrame +import BotAIShutdownClient +import BotAISetupClient +import BotAILoadMap +import BotAIShutdown +import BotAISetup +import B_CleanupAlloc +import B_InitAlloc +import InFieldOfVision +import BotOrder +import OrgVisible +import InitSagaMode +import G_ClearClientLog +import G_LogExit +import G_LogWeaponOutput +import G_LogWeaponInit +import G_LogWeaponItem +import G_LogWeaponPowerup +import G_LogWeaponFrag +import G_LogWeaponDeath +import G_LogWeaponKill +import G_LogWeaponDamage +import G_LogWeaponFire +import G_LogWeaponPickup +import Jedi_DodgeEvasion +import ForceTelepathy +import ForceThrow +import ForceSeeing +import ForceTeamForceReplenish +import ForceTeamHeal +import ForceAbsorb +import ForceProtect +import ForceGrip +import ForceRage +import ForceSpeed +import ForceHeal +import ForcePowerUsableOn +import WP_ForcePowersUpdate +import WP_SpawnInitForcePowers +import WP_InitForcePowers +import WP_SaberInitBladeData +import WP_SaberCanBlock +import WP_SaberPositionUpdate +import WP_ForcePowerStop +import HasSetSaberOnly +import G_PreDefSound +import G_RefreshNextMap +import G_DoesMapSupportGametype +import BotInterbreedEndMatch +import Svcmd_BotList_f +import Svcmd_AddBot_f +import G_BotConnect +import G_RemoveQueuedBotBegin +import G_CheckBotSpawn +import G_GetBotInfoByName +import G_GetBotInfoByNumber +import G_InitBots +import UpdateTournamentInfo +import G_WriteSessionData +import G_InitWorldSession +import G_InitSessionData +import G_ReadSessionData +import Svcmd_GameMem_f +import G_InitMemory +import G_Alloc +import Team_CheckDroppedItem +import OnSameTeam +import ClientCommand +import ClientBegin +import ClientDisconnect +import ClientUserinfoChanged +import ClientConnect +import G_GetStripEdString +import G_Error +import G_Printf +import SendScoreboardMessageToAllClients +import G_LogPrintf +import G_RunThink +import CheckTeamLeader +import SetLeader +import FindIntermissionPoint +import g_ff_objectives +import DeathmatchScoreboardMessage +import G_SetStats +import MoveClientToIntermission +import BlowDetpacks +import FireWeapon +import G_FilterPacket +import G_ProcessIPBans +import ConsoleCommand +import gJMSaberEnt +import SpotWouldTelefrag +import CalculateRanks +import AddScore +import player_die +import ClientSpawn +import InitBodyQue +import BeginIntermission +import respawn +import CopyToBodyQue +import SelectSpawnPoint +import SetClientViewAngle +import PickTeam +import TeamLeader +import TeamCount +import CheckGauntletAttack +import SnapVectorTowards +import CalcMuzzlePoint +import LogAccuracyHit +import WP_FireGenericBlasterMissile +import WP_FireTurretMissile +import G_PlayerBecomeATST +import ATST_ManageDamageBoxes +import TeleportPlayer +import trigger_teleporter_touch +import Touch_DoorTrigger +import G_RunMover +import WP_FireBlasterMissile +import G_ExplodeMissile +import G_BounceProjectile +import CreateMissile +import G_RunMissile +import G_ReflectMissile +import ExplodeDeath +import TossClientCubes +import TossClientItems +import TossClientWeapon +import body_die +import G_RadiusDamage +import G_Damage +import CanDamage +import trap_G2API_SetBoneAnim +import trap_G2API_GetGLAName +import trap_G2API_SetBoneAngles +import trap_G2API_CleanGhoul2Models +import trap_G2API_RemoveGhoul2Model +import trap_G2API_HasGhoul2ModelOnIndex +import trap_G2API_DuplicateGhoul2Instance +import trap_G2API_CopySpecificGhoul2Model +import trap_G2API_CopyGhoul2Instance +import trap_G2API_SetBoltInfo +import trap_G2API_AddBolt +import trap_G2API_InitGhoul2Model +import trap_G2API_GetBoltMatrix_NoReconstruct +import trap_G2API_GetBoltMatrix +import trap_G2_HaveWeGhoul2Models +import trap_G2_SetGhoul2ModelIndexes +import trap_G2_ListModelBones +import trap_G2_ListModelSurfaces +import G_SkinIndex +import BuildShaderStateConfig +import AddRemap +import G_SetOrigin +import G_AddEvent +import G_AddPredictableEvent +import vtos +import tv +import G_RunObject +import G_TouchSolids +import G_EntitiesFree +import G_FreeEntity +import G_KillG2Queue +import G_SendG2KillQueue +import TryUse +import G_EntitySound +import G_SoundAtLoc +import G_Sound +import G_MuteSound +import G_ScreenShake +import G_PlayEffect +import G_TempEntity +import G_Spawn +import G_InitGentity +import G_SetAngles +import G_SetMovedir +import G_UseTargets +import G_PickTarget +import G_RadiusList +import G_Find +import G_KillBox +import G_TeamCommand +import G_EffectIndex +import G_SoundIndex +import G_ModelIndex +import SaveRegisteredItems +import RegisterItem +import ClearRegisteredItems +import Touch_Item +import Add_Ammo +import ArmorIndex +import Think_Weapon +import FinishSpawningItem +import G_SpawnItem +import SetRespawn +import LaunchItem +import Drop_Item +import PrecacheItem +import UseHoldableItem +import RespawnItem +import G_RunItem +import G_CheckTeamItems +import ItemUse_MedPack +import ItemUse_Seeker +import ItemUse_Sentry +import ItemUse_Shield +import ItemUse_Binoculars +import G_GetDuelWinner +import Cmd_EngageDuel_f +import Cmd_ToggleSaber_f +import G_ItemUsable +import Cmd_SaberAttackCycle_f +import Cmd_FollowCycle_f +import SetTeam +import BroadcastTeamChange +import StopFollowing +import Cmd_Score_f +import G_NewString +import G_SpawnEntitiesFromString +import G_SpawnVector +import G_SpawnInt +import G_SpawnFloat +import G_SpawnString +import g2SaberInstance +import precachedKyle +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $746 +char 1 115 +char 1 112 +char 1 101 +char 1 99 +char 1 116 +char 1 97 +char 1 116 +char 1 111 +char 1 114 +char 1 0 +align 1 +LABELV $723 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 109 +char 1 101 +char 1 108 +char 1 101 +char 1 101 +char 1 47 +char 1 112 +char 1 117 +char 1 110 +char 1 99 +char 1 104 +char 1 37 +char 1 100 +char 1 0 +align 1 +LABELV $613 +char 1 99 +char 1 101 +char 1 110 +char 1 116 +char 1 101 +char 1 114 +char 1 118 +char 1 105 +char 1 101 +char 1 119 +char 1 10 +char 1 0 +align 1 +LABELV $544 +char 1 80 +char 1 76 +char 1 68 +char 1 85 +char 1 69 +char 1 76 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $543 +char 1 112 +char 1 114 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 10 +char 1 34 +char 1 0 +align 1 +LABELV $538 +char 1 80 +char 1 76 +char 1 68 +char 1 85 +char 1 69 +char 1 76 +char 1 84 +char 1 73 +char 1 69 +char 1 0 +align 1 +LABELV $537 +char 1 99 +char 1 112 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 10 +char 1 34 +char 1 0 +align 1 +LABELV $536 +char 1 80 +char 1 76 +char 1 68 +char 1 85 +char 1 69 +char 1 76 +char 1 87 +char 1 73 +char 1 78 +char 1 78 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $535 +char 1 83 +char 1 86 +char 1 73 +char 1 78 +char 1 71 +char 1 65 +char 1 77 +char 1 69 +char 1 0 +align 1 +LABELV $534 +char 1 99 +char 1 112 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 32 +char 1 37 +char 1 115 +char 1 32 +char 1 37 +char 1 115 +char 1 33 +char 1 10 +char 1 34 +char 1 0 +align 1 +LABELV $509 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 111 +char 1 110 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $508 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 111 +char 1 102 +char 1 102 +char 1 113 +char 1 117 +char 1 105 +char 1 99 +char 1 107 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $461 +char 1 51 +char 1 51 +char 1 0 +align 1 +LABELV $457 +char 1 56 +char 1 0 +align 1 +LABELV $456 +char 1 112 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 95 +char 1 109 +char 1 115 +char 1 101 +char 1 99 +char 1 0 +align 1 +LABELV $346 +char 1 99 +char 1 112 +char 1 32 +char 1 34 +char 1 84 +char 1 101 +char 1 110 +char 1 32 +char 1 115 +char 1 101 +char 1 99 +char 1 111 +char 1 110 +char 1 100 +char 1 115 +char 1 32 +char 1 117 +char 1 110 +char 1 116 +char 1 105 +char 1 108 +char 1 32 +char 1 105 +char 1 110 +char 1 97 +char 1 99 +char 1 116 +char 1 105 +char 1 118 +char 1 105 +char 1 116 +char 1 121 +char 1 32 +char 1 100 +char 1 114 +char 1 111 +char 1 112 +char 1 33 +char 1 10 +char 1 34 +char 1 0 +align 1 +LABELV $342 +char 1 68 +char 1 114 +char 1 111 +char 1 112 +char 1 112 +char 1 101 +char 1 100 +char 1 32 +char 1 100 +char 1 117 +char 1 101 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 105 +char 1 110 +char 1 97 +char 1 99 +char 1 116 +char 1 105 +char 1 118 +char 1 105 +char 1 116 +char 1 121 +char 1 0 +align 1 +LABELV $126 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 103 +char 1 117 +char 1 114 +char 1 112 +char 1 50 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $123 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 103 +char 1 117 +char 1 114 +char 1 112 +char 1 49 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 diff --git a/CODE-mp/game/vm/g_arenas.asm b/CODE-mp/game/vm/g_arenas.asm new file mode 100644 index 0000000..a1c2feb --- /dev/null +++ b/CODE-mp/game/vm/g_arenas.asm @@ -0,0 +1,1517 @@ +export UpdateTournamentInfo +code +proc UpdateTournamentInfo 1116 68 +file "../g_arenas.c" +line 20 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// +;4:// g_arenas.c +;5:// +;6: +;7:#include "g_local.h" +;8: +;9: +;10:gentity_t *podium1; +;11:gentity_t *podium2; +;12:gentity_t *podium3; +;13: +;14: +;15:/* +;16:================== +;17:UpdateTournamentInfo +;18:================== +;19:*/ +;20:void UpdateTournamentInfo( void ) { +line 32 +;21: int i; +;22: gentity_t *player; +;23: int playerClientNum; +;24: int n, accuracy, perfect, msglen; +;25: int buflen; +;26: int score1, score2; +;27: qboolean won; +;28: char buf[32]; +;29: char msg[MAX_STRING_CHARS]; +;30: +;31: // find the real player +;32: player = NULL; +ADDRLP4 40 +CNSTP4 0 +ASGNP4 +line 33 +;33: for (i = 0; i < level.maxclients; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $82 +JUMPV +LABELV $79 +line 34 +;34: player = &g_entities[i]; +ADDRLP4 40 +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 35 +;35: if ( !player->inuse ) { +ADDRLP4 40 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $84 +line 36 +;36: continue; +ADDRGP4 $80 +JUMPV +LABELV $84 +line 38 +;37: } +;38: if ( !( player->r.svFlags & SVF_BOT ) ) { +ADDRLP4 40 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $86 +line 39 +;39: break; +ADDRGP4 $81 +JUMPV +LABELV $86 +line 41 +;40: } +;41: } +LABELV $80 +line 33 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $82 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $79 +LABELV $81 +line 43 +;42: // this should never happen! +;43: if ( !player || i == level.maxclients ) { +ADDRLP4 40 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $91 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +NEI4 $88 +LABELV $91 +line 44 +;44: return; +ADDRGP4 $78 +JUMPV +LABELV $88 +line 46 +;45: } +;46: playerClientNum = i; +ADDRLP4 1076 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 48 +;47: +;48: CalculateRanks(); +ADDRGP4 CalculateRanks +CALLV +pop +line 50 +;49: +;50: if ( level.clients[playerClientNum].sess.sessionTeam == TEAM_SPECTATOR ) { +CNSTI4 1756 +ADDRLP4 1076 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $92 +line 51 +;51: Com_sprintf( msg, sizeof(msg), "postgame %i %i 0 0 0 0 0 0 0 0 0 0 0", level.numNonSpectatorClients, playerClientNum ); +ADDRLP4 44 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 $94 +ARGP4 +ADDRGP4 level+76 +INDIRI4 +ARGI4 +ADDRLP4 1076 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 52 +;52: } +ADDRGP4 $93 +JUMPV +LABELV $92 +line 53 +;53: else { +line 54 +;54: if( player->client->accuracy_shots ) { +ADDRLP4 40 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1652 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $96 +line 55 +;55: accuracy = player->client->accuracy_hits * 100 / player->client->accuracy_shots; +ADDRLP4 1100 +ADDRLP4 40 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 1084 +CNSTI4 100 +ADDRLP4 1100 +INDIRP4 +CNSTI4 1656 +ADDP4 +INDIRI4 +MULI4 +ADDRLP4 1100 +INDIRP4 +CNSTI4 1652 +ADDP4 +INDIRI4 +DIVI4 +ASGNI4 +line 56 +;56: } +ADDRGP4 $97 +JUMPV +LABELV $96 +line 57 +;57: else { +line 58 +;58: accuracy = 0; +ADDRLP4 1084 +CNSTI4 0 +ASGNI4 +line 59 +;59: } +LABELV $97 +line 60 +;60: won = qfalse; +ADDRLP4 1080 +CNSTI4 0 +ASGNI4 +line 61 +;61: if (g_gametype.integer >= GT_CTF) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 7 +LTI4 $98 +line 62 +;62: score1 = level.teamScores[TEAM_RED]; +ADDRLP4 1092 +ADDRGP4 level+44+4 +INDIRI4 +ASGNI4 +line 63 +;63: score2 = level.teamScores[TEAM_BLUE]; +ADDRLP4 1096 +ADDRGP4 level+44+8 +INDIRI4 +ASGNI4 +line 64 +;64: if (level.clients[playerClientNum].sess.sessionTeam == TEAM_RED) { +CNSTI4 1756 +ADDRLP4 1076 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $105 +line 65 +;65: won = (level.teamScores[TEAM_RED] > level.teamScores[TEAM_BLUE]); +ADDRGP4 level+44+4 +INDIRI4 +ADDRGP4 level+44+8 +INDIRI4 +LEI4 $112 +ADDRLP4 1100 +CNSTI4 1 +ASGNI4 +ADDRGP4 $113 +JUMPV +LABELV $112 +ADDRLP4 1100 +CNSTI4 0 +ASGNI4 +LABELV $113 +ADDRLP4 1080 +ADDRLP4 1100 +INDIRI4 +ASGNI4 +line 66 +;66: } else { +ADDRGP4 $99 +JUMPV +LABELV $105 +line 67 +;67: won = (level.teamScores[TEAM_BLUE] > level.teamScores[TEAM_RED]); +ADDRGP4 level+44+8 +INDIRI4 +ADDRGP4 level+44+4 +INDIRI4 +LEI4 $119 +ADDRLP4 1100 +CNSTI4 1 +ASGNI4 +ADDRGP4 $120 +JUMPV +LABELV $119 +ADDRLP4 1100 +CNSTI4 0 +ASGNI4 +LABELV $120 +ADDRLP4 1080 +ADDRLP4 1100 +INDIRI4 +ASGNI4 +line 68 +;68: } +line 69 +;69: } else { +ADDRGP4 $99 +JUMPV +LABELV $98 +line 70 +;70: if (&level.clients[playerClientNum] == &level.clients[ level.sortedClients[0] ]) { +ADDRLP4 1100 +CNSTI4 1756 +ASGNI4 +ADDRLP4 1104 +ADDRGP4 level +INDIRP4 +ASGNP4 +ADDRLP4 1100 +INDIRI4 +ADDRLP4 1076 +INDIRI4 +MULI4 +ADDRLP4 1104 +INDIRP4 +ADDP4 +CVPU4 4 +ADDRLP4 1100 +INDIRI4 +ADDRGP4 level+84 +INDIRI4 +MULI4 +ADDRLP4 1104 +INDIRP4 +ADDP4 +CVPU4 4 +NEU4 $121 +line 71 +;71: won = qtrue; +ADDRLP4 1080 +CNSTI4 1 +ASGNI4 +line 72 +;72: score1 = level.clients[ level.sortedClients[0] ].ps.persistant[PERS_SCORE]; +ADDRLP4 1092 +CNSTI4 1756 +ADDRGP4 level+84 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 280 +ADDP4 +INDIRI4 +ASGNI4 +line 73 +;73: score2 = level.clients[ level.sortedClients[1] ].ps.persistant[PERS_SCORE]; +ADDRLP4 1096 +CNSTI4 1756 +ADDRGP4 level+84+4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 280 +ADDP4 +INDIRI4 +ASGNI4 +line 74 +;74: } else { +ADDRGP4 $122 +JUMPV +LABELV $121 +line 75 +;75: score2 = level.clients[ level.sortedClients[0] ].ps.persistant[PERS_SCORE]; +ADDRLP4 1096 +CNSTI4 1756 +ADDRGP4 level+84 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 280 +ADDP4 +INDIRI4 +ASGNI4 +line 76 +;76: score1 = level.clients[ level.sortedClients[1] ].ps.persistant[PERS_SCORE]; +ADDRLP4 1092 +CNSTI4 1756 +ADDRGP4 level+84+4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 280 +ADDP4 +INDIRI4 +ASGNI4 +line 77 +;77: } +LABELV $122 +line 78 +;78: } +LABELV $99 +line 79 +;79: if (won && player->client->ps.persistant[PERS_KILLED] == 0) { +ADDRLP4 1100 +CNSTI4 0 +ASGNI4 +ADDRLP4 1080 +INDIRI4 +ADDRLP4 1100 +INDIRI4 +EQI4 $130 +ADDRLP4 40 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 312 +ADDP4 +INDIRI4 +ADDRLP4 1100 +INDIRI4 +NEI4 $130 +line 80 +;80: perfect = 1; +ADDRLP4 1088 +CNSTI4 1 +ASGNI4 +line 81 +;81: } else { +ADDRGP4 $131 +JUMPV +LABELV $130 +line 82 +;82: perfect = 0; +ADDRLP4 1088 +CNSTI4 0 +ASGNI4 +line 83 +;83: } +LABELV $131 +line 84 +;84: Com_sprintf( msg, sizeof(msg), "postgame %i %i %i %i %i %i %i %i %i %i %i %i %i %i", level.numNonSpectatorClients, playerClientNum, accuracy, +ADDRLP4 44 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 $132 +ARGP4 +ADDRGP4 level+76 +INDIRI4 +ARGI4 +ADDRLP4 1076 +INDIRI4 +ARGI4 +ADDRLP4 1084 +INDIRI4 +ARGI4 +ADDRLP4 1104 +ADDRLP4 40 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 1104 +INDIRP4 +CNSTI4 316 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1104 +INDIRP4 +CNSTI4 320 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1104 +INDIRP4 +CNSTI4 324 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1104 +INDIRP4 +CNSTI4 328 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1104 +INDIRP4 +CNSTI4 332 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1104 +INDIRP4 +CNSTI4 280 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1088 +INDIRI4 +ARGI4 +ADDRLP4 1092 +INDIRI4 +ARGI4 +ADDRLP4 1096 +INDIRI4 +ARGI4 +ADDRGP4 level+32 +INDIRI4 +ARGI4 +ADDRLP4 1104 +INDIRP4 +CNSTI4 336 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 88 +;85: player->client->ps.persistant[PERS_IMPRESSIVE_COUNT], player->client->ps.persistant[PERS_EXCELLENT_COUNT],player->client->ps.persistant[PERS_DEFEND_COUNT], +;86: player->client->ps.persistant[PERS_ASSIST_COUNT], player->client->ps.persistant[PERS_GAUNTLET_FRAG_COUNT], player->client->ps.persistant[PERS_SCORE], +;87: perfect, score1, score2, level.time, player->client->ps.persistant[PERS_CAPTURES] ); +;88: } +LABELV $93 +line 90 +;89: +;90: msglen = strlen( msg ); +ADDRLP4 44 +ARGP4 +ADDRLP4 1100 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 1072 +ADDRLP4 1100 +INDIRI4 +ASGNI4 +line 91 +;91: for( i = 0; i < level.numNonSpectatorClients; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $138 +JUMPV +LABELV $135 +line 92 +;92: n = level.sortedClients[i]; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 level+84 +ADDP4 +INDIRI4 +ASGNI4 +line 93 +;93: Com_sprintf( buf, sizeof(buf), " %i %i %i", n, level.clients[n].ps.persistant[PERS_RANK], level.clients[n].ps.persistant[PERS_SCORE] ); +ADDRLP4 8 +ARGP4 +CNSTI4 32 +ARGI4 +ADDRGP4 $141 +ARGP4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 1108 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 1108 +INDIRP4 +CNSTI4 288 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1108 +INDIRP4 +CNSTI4 280 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 94 +;94: buflen = strlen( buf ); +ADDRLP4 8 +ARGP4 +ADDRLP4 1112 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 1068 +ADDRLP4 1112 +INDIRI4 +ASGNI4 +line 95 +;95: if( msglen + buflen + 1 >= sizeof(msg) ) { +ADDRLP4 1072 +INDIRI4 +ADDRLP4 1068 +INDIRI4 +ADDI4 +CNSTI4 1 +ADDI4 +CVIU4 4 +CNSTU4 1024 +LTU4 $142 +line 96 +;96: break; +ADDRGP4 $137 +JUMPV +LABELV $142 +line 98 +;97: } +;98: strcat( msg, buf ); +ADDRLP4 44 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 strcat +CALLP4 +pop +line 99 +;99: } +LABELV $136 +line 91 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $138 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+76 +INDIRI4 +LTI4 $135 +LABELV $137 +line 100 +;100: trap_SendConsoleCommand( EXEC_APPEND, msg ); +CNSTI4 2 +ARGI4 +ADDRLP4 44 +ARGP4 +ADDRGP4 trap_SendConsoleCommand +CALLV +pop +line 101 +;101:} +LABELV $78 +endproc UpdateTournamentInfo 1116 68 +bss +export podium3 +align 4 +LABELV podium3 +skip 4 +export podium2 +align 4 +LABELV podium2 +skip 4 +export podium1 +align 4 +LABELV podium1 +skip 4 +import trap_ROFF_Purge_Ent +import trap_ROFF_Play +import trap_ROFF_Cache +import trap_ROFF_UpdateEntities +import trap_ROFF_Clean +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_SnapVector +import trap_GeneticParentsAndChildSelection +import trap_BotResetWeaponState +import trap_BotFreeWeaponState +import trap_BotAllocWeaponState +import trap_BotLoadWeaponWeights +import trap_BotGetWeaponInfo +import trap_BotChooseBestFightWeapon +import trap_BotAddAvoidSpot +import trap_BotInitMoveState +import trap_BotFreeMoveState +import trap_BotAllocMoveState +import trap_BotPredictVisiblePosition +import trap_BotMovementViewTarget +import trap_BotReachabilityArea +import trap_BotResetLastAvoidReach +import trap_BotResetAvoidReach +import trap_BotMoveInDirection +import trap_BotMoveToGoal +import trap_BotResetMoveState +import trap_BotFreeGoalState +import trap_BotAllocGoalState +import trap_BotMutateGoalFuzzyLogic +import trap_BotSaveGoalFuzzyLogic +import trap_BotInterbreedGoalFuzzyLogic +import trap_BotFreeItemWeights +import trap_BotLoadItemWeights +import trap_BotUpdateEntityItems +import trap_BotInitLevelItems +import trap_BotSetAvoidGoalTime +import trap_BotAvoidGoalTime +import trap_BotGetLevelItemGoal +import trap_BotGetMapLocationGoal +import trap_BotGetNextCampSpotGoal +import trap_BotItemGoalInVisButNotVisible +import trap_BotTouchingGoal +import trap_BotChooseNBGItem +import trap_BotChooseLTGItem +import trap_BotGetSecondGoal +import trap_BotGetTopGoal +import trap_BotGoalName +import trap_BotDumpGoalStack +import trap_BotDumpAvoidGoals +import trap_BotEmptyGoalStack +import trap_BotPopGoal +import trap_BotPushGoal +import trap_BotResetAvoidGoals +import trap_BotRemoveFromAvoidGoals +import trap_BotResetGoalState +import trap_BotSetChatName +import trap_BotSetChatGender +import trap_BotLoadChatFile +import trap_BotReplaceSynonyms +import trap_UnifyWhiteSpaces +import trap_BotMatchVariable +import trap_BotFindMatch +import trap_StringContains +import trap_BotGetChatMessage +import trap_BotEnterChat +import trap_BotChatLength +import trap_BotReplyChat +import trap_BotNumInitialChats +import trap_BotInitialChat +import trap_BotNumConsoleMessages +import trap_BotNextConsoleMessage +import trap_BotRemoveConsoleMessage +import trap_BotQueueConsoleMessage +import trap_BotFreeChatState +import trap_BotAllocChatState +import trap_Characteristic_String +import trap_Characteristic_BInteger +import trap_Characteristic_Integer +import trap_Characteristic_BFloat +import trap_Characteristic_Float +import trap_BotFreeCharacter +import trap_BotLoadCharacter +import trap_EA_ResetInput +import trap_EA_GetInput +import trap_EA_EndRegular +import trap_EA_ForcePower +import trap_EA_Alt_Attack +import trap_EA_View +import trap_EA_Move +import trap_EA_DelayedJump +import trap_EA_Jump +import trap_EA_SelectWeapon +import trap_EA_MoveRight +import trap_EA_MoveLeft +import trap_EA_MoveBack +import trap_EA_MoveForward +import trap_EA_MoveDown +import trap_EA_MoveUp +import trap_EA_Crouch +import trap_EA_Respawn +import trap_EA_Use +import trap_EA_Attack +import trap_EA_Talk +import trap_EA_Gesture +import trap_EA_Action +import trap_EA_Command +import trap_EA_SayTeam +import trap_EA_Say +import trap_AAS_PredictClientMovement +import trap_AAS_Swimming +import trap_AAS_AlternativeRouteGoals +import trap_AAS_PredictRoute +import trap_AAS_EnableRoutingArea +import trap_AAS_AreaTravelTimeToGoalArea +import trap_AAS_AreaReachability +import trap_AAS_IntForBSPEpairKey +import trap_AAS_FloatForBSPEpairKey +import trap_AAS_VectorForBSPEpairKey +import trap_AAS_ValueForBSPEpairKey +import trap_AAS_NextBSPEntity +import trap_AAS_PointContents +import trap_AAS_TraceAreas +import trap_AAS_PointReachabilityAreaIndex +import trap_AAS_PointAreaNum +import trap_AAS_Time +import trap_AAS_PresenceTypeBoundingBox +import trap_AAS_Initialized +import trap_AAS_EntityInfo +import trap_AAS_AreaInfo +import trap_AAS_BBoxAreas +import trap_BotUserCommand +import trap_BotGetServerCommand +import trap_BotGetSnapshotEntity +import trap_BotLibTest +import trap_BotLibUpdateEntity +import trap_BotLibLoadMap +import trap_BotLibStartFrame +import trap_BotLibDefine +import trap_BotLibVarGet +import trap_BotLibVarSet +import trap_BotLibShutdown +import trap_BotLibSetup +import trap_DebugPolygonDelete +import trap_DebugPolygonCreate +import trap_GetEntityToken +import trap_GetUsercmd +import trap_BotFreeClient +import trap_BotAllocateClient +import trap_EntityContact +import trap_EntitiesInBox +import trap_UnlinkEntity +import trap_LinkEntity +import trap_AreasConnected +import trap_AdjustAreaPortalState +import trap_InPVSIgnorePortals +import trap_InPVS +import trap_PointContents +import trap_Trace +import trap_SetBrushModel +import trap_GetServerinfo +import trap_SetUserinfo +import trap_GetUserinfo +import trap_GetConfigstring +import trap_SetConfigstring +import trap_SendServerCommand +import trap_DropClient +import trap_LocateGameData +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableValue +import trap_Cvar_VariableIntegerValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_SendConsoleCommand +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Args +import trap_Argv +import trap_Argc +import trap_Milliseconds +import trap_Error +import trap_Printf +import g_timeouttospec +import g_forceDodge +import g_dismember +import g_singlePlayer +import g_enableBreath +import g_enableDust +import g_rankings +import pmove_msec +import pmove_fixed +import g_smoothClients +import g_blueteam +import g_redteam +import g_debugUp +import g_debugRight +import g_debugForward +import g_filterBan +import g_banIPs +import g_teamForceBalance +import g_teamAutoJoin +import g_allowVote +import g_blood +import g_doWarmup +import g_warmup +import g_motd +import g_synchronousClients +import g_adaptRespawn +import g_weaponTeamRespawn +import g_weaponRespawn +import g_debugDamage +import g_debugAlloc +import g_debugMove +import g_inactivity +import g_forcerespawn +import g_quadfactor +import g_knockback +import g_speed +import g_gravity +import g_needpass +import g_password +import g_friendlySaber +import g_friendlyFire +import g_saberInterpolate +import g_capturelimit +import g_timelimit +import g_duel_fraglimit +import g_fraglimit +import g_duelWeaponDisable +import g_weaponDisable +import g_forcePowerDisable +import g_spawnInvulnerability +import g_forceRegenTime +import g_saberLocking +import g_privateDuel +import g_forceBasedTeams +import g_maxForceRank +import g_dmflags +import g_autoMapCycle +import g_restarted +import g_maxGameClients +import g_maxclients +import g_cheats +import g_dedicated +import g_gametype +import g_entities +import level +import Pickup_Team +import CheckTeamStatus +import TeamplayInfoMessage +import Team_GetLocationMsg +import Team_GetLocation +import SelectSagaSpawnPoint +import SelectCTFSpawnPoint +import Team_FreeEntity +import Team_ReturnFlag +import Team_InitGame +import Team_CheckHurtCarrier +import Team_FragBonuses +import Team_DroppedFlagThink +import AddTeamScore +import TeamColorString +import OtherTeamName +import TeamName +import OtherTeam +import BotAIStartFrame +import BotAIShutdownClient +import BotAISetupClient +import BotAILoadMap +import BotAIShutdown +import BotAISetup +import B_CleanupAlloc +import B_InitAlloc +import InFieldOfVision +import BotOrder +import OrgVisible +import InitSagaMode +import G_ClearClientLog +import G_LogExit +import G_LogWeaponOutput +import G_LogWeaponInit +import G_LogWeaponItem +import G_LogWeaponPowerup +import G_LogWeaponFrag +import G_LogWeaponDeath +import G_LogWeaponKill +import G_LogWeaponDamage +import G_LogWeaponFire +import G_LogWeaponPickup +import Jedi_DodgeEvasion +import ForceTelepathy +import ForceThrow +import ForceSeeing +import ForceTeamForceReplenish +import ForceTeamHeal +import ForceAbsorb +import ForceProtect +import ForceGrip +import ForceRage +import ForceSpeed +import ForceHeal +import ForcePowerUsableOn +import WP_ForcePowersUpdate +import WP_SpawnInitForcePowers +import WP_InitForcePowers +import WP_SaberInitBladeData +import WP_SaberCanBlock +import WP_SaberPositionUpdate +import WP_ForcePowerStop +import HasSetSaberOnly +import G_PreDefSound +import G_RefreshNextMap +import G_DoesMapSupportGametype +import BotInterbreedEndMatch +import Svcmd_BotList_f +import Svcmd_AddBot_f +import G_BotConnect +import G_RemoveQueuedBotBegin +import G_CheckBotSpawn +import G_GetBotInfoByName +import G_GetBotInfoByNumber +import G_InitBots +import G_WriteSessionData +import G_InitWorldSession +import G_InitSessionData +import G_ReadSessionData +import Svcmd_GameMem_f +import G_InitMemory +import G_Alloc +import Team_CheckDroppedItem +import OnSameTeam +import G_RunClient +import ClientEndFrame +import ClientThink +import G_CheckClientTimeouts +import ClientCommand +import ClientBegin +import ClientDisconnect +import ClientUserinfoChanged +import ClientConnect +import G_GetStripEdString +import G_Error +import G_Printf +import SendScoreboardMessageToAllClients +import G_LogPrintf +import G_RunThink +import CheckTeamLeader +import SetLeader +import FindIntermissionPoint +import g_ff_objectives +import DeathmatchScoreboardMessage +import G_SetStats +import MoveClientToIntermission +import BlowDetpacks +import FireWeapon +import G_FilterPacket +import G_ProcessIPBans +import ConsoleCommand +import gJMSaberEnt +import SpotWouldTelefrag +import CalculateRanks +import AddScore +import player_die +import ClientSpawn +import InitBodyQue +import BeginIntermission +import respawn +import CopyToBodyQue +import SelectSpawnPoint +import SetClientViewAngle +import PickTeam +import TeamLeader +import TeamCount +import CheckGauntletAttack +import SnapVectorTowards +import CalcMuzzlePoint +import LogAccuracyHit +import WP_FireGenericBlasterMissile +import WP_FireTurretMissile +import G_PlayerBecomeATST +import ATST_ManageDamageBoxes +import TeleportPlayer +import trigger_teleporter_touch +import Touch_DoorTrigger +import G_RunMover +import WP_FireBlasterMissile +import G_ExplodeMissile +import G_BounceProjectile +import CreateMissile +import G_RunMissile +import G_ReflectMissile +import ExplodeDeath +import TossClientCubes +import TossClientItems +import TossClientWeapon +import body_die +import G_RadiusDamage +import G_Damage +import CanDamage +import trap_G2API_SetBoneAnim +import trap_G2API_GetGLAName +import trap_G2API_SetBoneAngles +import trap_G2API_CleanGhoul2Models +import trap_G2API_RemoveGhoul2Model +import trap_G2API_HasGhoul2ModelOnIndex +import trap_G2API_DuplicateGhoul2Instance +import trap_G2API_CopySpecificGhoul2Model +import trap_G2API_CopyGhoul2Instance +import trap_G2API_SetBoltInfo +import trap_G2API_AddBolt +import trap_G2API_InitGhoul2Model +import trap_G2API_GetBoltMatrix_NoReconstruct +import trap_G2API_GetBoltMatrix +import trap_G2_HaveWeGhoul2Models +import trap_G2_SetGhoul2ModelIndexes +import trap_G2_ListModelBones +import trap_G2_ListModelSurfaces +import G_SkinIndex +import BuildShaderStateConfig +import AddRemap +import G_SetOrigin +import G_AddEvent +import G_AddPredictableEvent +import vtos +import tv +import G_RunObject +import G_TouchSolids +import G_TouchTriggers +import G_EntitiesFree +import G_FreeEntity +import G_KillG2Queue +import G_SendG2KillQueue +import TryUse +import G_EntitySound +import G_SoundAtLoc +import G_Sound +import G_MuteSound +import G_ScreenShake +import G_PlayEffect +import G_TempEntity +import G_Spawn +import G_InitGentity +import G_SetAngles +import G_SetMovedir +import G_UseTargets +import G_PickTarget +import G_RadiusList +import G_Find +import G_KillBox +import G_TeamCommand +import G_EffectIndex +import G_SoundIndex +import G_ModelIndex +import SaveRegisteredItems +import RegisterItem +import ClearRegisteredItems +import Touch_Item +import Add_Ammo +import ArmorIndex +import Think_Weapon +import FinishSpawningItem +import G_SpawnItem +import SetRespawn +import LaunchItem +import Drop_Item +import PrecacheItem +import UseHoldableItem +import RespawnItem +import G_RunItem +import G_CheckTeamItems +import ItemUse_MedPack +import ItemUse_Seeker +import ItemUse_Sentry +import ItemUse_Shield +import ItemUse_Binoculars +import G_GetDuelWinner +import Cmd_EngageDuel_f +import Cmd_ToggleSaber_f +import G_ItemUsable +import Cmd_SaberAttackCycle_f +import Cmd_FollowCycle_f +import SetTeam +import BroadcastTeamChange +import StopFollowing +import Cmd_Score_f +import G_NewString +import G_SpawnEntitiesFromString +import G_SpawnVector +import G_SpawnInt +import G_SpawnFloat +import G_SpawnString +import g2SaberInstance +import precachedKyle +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $141 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $132 +char 1 112 +char 1 111 +char 1 115 +char 1 116 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $94 +char 1 112 +char 1 111 +char 1 115 +char 1 116 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 32 +char 1 48 +char 1 0 diff --git a/CODE-mp/game/vm/g_bot.asm b/CODE-mp/game/vm/g_bot.asm new file mode 100644 index 0000000..a5ccc64 --- /dev/null +++ b/CODE-mp/game/vm/g_bot.asm @@ -0,0 +1,8798 @@ +export trap_Cvar_VariableValue +code +proc trap_Cvar_VariableValue 132 12 +file "../g_bot.c" +line 35 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// g_bot.c +;4: +;5:#include "g_local.h" +;6: +;7: +;8:static int g_numBots; +;9:static char *g_botInfos[MAX_BOTS]; +;10: +;11: +;12:int g_numArenas; +;13:static char *g_arenaInfos[MAX_ARENAS]; +;14: +;15: +;16:#define BOT_BEGIN_DELAY_BASE 2000 +;17:#define BOT_BEGIN_DELAY_INCREMENT 1500 +;18: +;19:#define BOT_SPAWN_QUEUE_DEPTH 16 +;20: +;21:typedef struct { +;22: int clientNum; +;23: int spawnTime; +;24:} botSpawnQueue_t; +;25: +;26://static int botBeginDelay = 0; // bk001206 - unused, init +;27:static botSpawnQueue_t botSpawnQueue[BOT_SPAWN_QUEUE_DEPTH]; +;28: +;29:vmCvar_t bot_minplayers; +;30: +;31:extern gentity_t *podium1; +;32:extern gentity_t *podium2; +;33:extern gentity_t *podium3; +;34: +;35:float trap_Cvar_VariableValue( const char *var_name ) { +line 38 +;36: char buf[128]; +;37: +;38: trap_Cvar_VariableStringBuffer(var_name, buf, sizeof(buf)); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +ARGP4 +CNSTI4 128 +ARGI4 +ADDRGP4 trap_Cvar_VariableStringBuffer +CALLV +pop +line 39 +;39: return atof(buf); +ADDRLP4 0 +ARGP4 +ADDRLP4 128 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 128 +INDIRF4 +RETF4 +LABELV $79 +endproc trap_Cvar_VariableValue 132 12 +export G_ParseInfos +proc G_ParseInfos 2084 12 +line 49 +;40:} +;41: +;42: +;43: +;44:/* +;45:=============== +;46:G_ParseInfos +;47:=============== +;48:*/ +;49:int G_ParseInfos( char *buf, int max, char *infos[] ) { +line 55 +;50: char *token; +;51: int count; +;52: char key[MAX_TOKEN_CHARS]; +;53: char info[MAX_INFO_STRING]; +;54: +;55: count = 0; +ADDRLP4 2052 +CNSTI4 0 +ASGNI4 +ADDRGP4 $82 +JUMPV +LABELV $81 +line 57 +;56: +;57: while ( 1 ) { +line 58 +;58: token = COM_Parse( (const char **)(&buf) ); +ADDRFP4 0 +ARGP4 +ADDRLP4 2056 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 2056 +INDIRP4 +ASGNP4 +line 59 +;59: if ( !token[0] ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $84 +line 60 +;60: break; +ADDRGP4 $83 +JUMPV +LABELV $84 +line 62 +;61: } +;62: if ( strcmp( token, "{" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $88 +ARGP4 +ADDRLP4 2060 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 2060 +INDIRI4 +CNSTI4 0 +EQI4 $86 +line 63 +;63: Com_Printf( "Missing { in info file\n" ); +ADDRGP4 $89 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 64 +;64: break; +ADDRGP4 $83 +JUMPV +LABELV $86 +line 67 +;65: } +;66: +;67: if ( count == max ) { +ADDRLP4 2052 +INDIRI4 +ADDRFP4 4 +INDIRI4 +NEI4 $90 +line 68 +;68: Com_Printf( "Max infos exceeded\n" ); +ADDRGP4 $92 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 69 +;69: break; +ADDRGP4 $83 +JUMPV +LABELV $90 +line 72 +;70: } +;71: +;72: info[0] = '\0'; +ADDRLP4 1028 +CNSTI1 0 +ASGNI1 +ADDRGP4 $94 +JUMPV +LABELV $93 +line 73 +;73: while ( 1 ) { +line 74 +;74: token = COM_ParseExt( (const char **)(&buf), qtrue ); +ADDRFP4 0 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRLP4 2064 +ADDRGP4 COM_ParseExt +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 2064 +INDIRP4 +ASGNP4 +line 75 +;75: if ( !token[0] ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $96 +line 76 +;76: Com_Printf( "Unexpected end of info file\n" ); +ADDRGP4 $98 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 77 +;77: break; +ADDRGP4 $95 +JUMPV +LABELV $96 +line 79 +;78: } +;79: if ( !strcmp( token, "}" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $101 +ARGP4 +ADDRLP4 2068 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 2068 +INDIRI4 +CNSTI4 0 +NEI4 $99 +line 80 +;80: break; +ADDRGP4 $95 +JUMPV +LABELV $99 +line 82 +;81: } +;82: Q_strncpyz( key, token, sizeof( key ) ); +ADDRLP4 4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 84 +;83: +;84: token = COM_ParseExt( (const char **)(&buf), qfalse ); +ADDRFP4 0 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 2072 +ADDRGP4 COM_ParseExt +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 2072 +INDIRP4 +ASGNP4 +line 85 +;85: if ( !token[0] ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $102 +line 86 +;86: strcpy( token, "" ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $104 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 87 +;87: } +LABELV $102 +line 88 +;88: Info_SetValueForKey( info, key, token ); +ADDRLP4 1028 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 89 +;89: } +LABELV $94 +line 73 +ADDRGP4 $93 +JUMPV +LABELV $95 +line 91 +;90: //NOTE: extra space for arena number +;91: infos[count] = G_Alloc(strlen(info) + strlen("\\num\\") + strlen(va("%d", MAX_ARENAS)) + 1); +ADDRLP4 1028 +ARGP4 +ADDRLP4 2064 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRGP4 $105 +ARGP4 +ADDRLP4 2068 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRGP4 $106 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 2072 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 2072 +INDIRP4 +ARGP4 +ADDRLP4 2076 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 2064 +INDIRI4 +ADDRLP4 2068 +INDIRI4 +ADDI4 +ADDRLP4 2076 +INDIRI4 +ADDI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRLP4 2080 +ADDRGP4 G_Alloc +CALLP4 +ASGNP4 +ADDRLP4 2052 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +ADDRLP4 2080 +INDIRP4 +ASGNP4 +line 92 +;92: if (infos[count]) { +ADDRLP4 2052 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $107 +line 93 +;93: strcpy(infos[count], info); +ADDRLP4 2052 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 1028 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 94 +;94: count++; +ADDRLP4 2052 +ADDRLP4 2052 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 95 +;95: } +LABELV $107 +line 96 +;96: } +LABELV $82 +line 57 +ADDRGP4 $81 +JUMPV +LABELV $83 +line 97 +;97: return count; +ADDRLP4 2052 +INDIRI4 +RETI4 +LABELV $80 +endproc G_ParseInfos 2084 12 +proc G_LoadArenasFromFile 8216 16 +line 105 +;98:} +;99: +;100:/* +;101:=============== +;102:G_LoadArenasFromFile +;103:=============== +;104:*/ +;105:static void G_LoadArenasFromFile( char *filename ) { +line 110 +;106: int len; +;107: fileHandle_t f; +;108: char buf[MAX_ARENAS_TEXT]; +;109: +;110: len = trap_FS_FOpenFile( filename, &f, FS_READ ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 8200 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8200 +INDIRI4 +ASGNI4 +line 111 +;111: if ( !f ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $110 +line 112 +;112: trap_Printf( va( S_COLOR_RED "file not found: %s\n", filename ) ); +ADDRGP4 $112 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8204 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8204 +INDIRP4 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 113 +;113: return; +ADDRGP4 $109 +JUMPV +LABELV $110 +line 115 +;114: } +;115: if ( len >= MAX_ARENAS_TEXT ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 8192 +LTI4 $113 +line 116 +;116: trap_Printf( va( S_COLOR_RED "file too large: %s is %i, max allowed is %i", filename, len, MAX_ARENAS_TEXT ) ); +ADDRGP4 $115 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +CNSTI4 8192 +ARGI4 +ADDRLP4 8204 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8204 +INDIRP4 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 117 +;117: trap_FS_FCloseFile( f ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 118 +;118: return; +ADDRGP4 $109 +JUMPV +LABELV $113 +line 121 +;119: } +;120: +;121: trap_FS_Read( buf, len, f ); +ADDRLP4 8 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 122 +;122: buf[len] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +ADDP4 +CNSTI1 0 +ASGNI1 +line 123 +;123: trap_FS_FCloseFile( f ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 125 +;124: +;125: g_numArenas += G_ParseInfos( buf, MAX_ARENAS - g_numArenas, &g_arenaInfos[g_numArenas] ); +ADDRLP4 8 +ARGP4 +ADDRLP4 8204 +ADDRGP4 g_numArenas +ASGNP4 +ADDRLP4 8208 +ADDRLP4 8204 +INDIRP4 +INDIRI4 +ASGNI4 +CNSTI4 1024 +ADDRLP4 8208 +INDIRI4 +SUBI4 +ARGI4 +ADDRLP4 8208 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +ARGP4 +ADDRLP4 8212 +ADDRGP4 G_ParseInfos +CALLI4 +ASGNI4 +ADDRLP4 8204 +INDIRP4 +ADDRLP4 8208 +INDIRI4 +ADDRLP4 8212 +INDIRI4 +ADDI4 +ASGNI4 +line 126 +;126:} +LABELV $109 +endproc G_LoadArenasFromFile 8216 16 +export G_GetMapTypeBits +proc G_GetMapTypeBits 32 8 +line 129 +;127: +;128:int G_GetMapTypeBits(char *type) +;129:{ +line 130 +;130: int typeBits = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 132 +;131: +;132: if( *type ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $117 +line 133 +;133: if( strstr( type, "ffa" ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $121 +ARGP4 +ADDRLP4 4 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $119 +line 134 +;134: typeBits |= (1 << GT_FFA); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +BORI4 +ASGNI4 +line 135 +;135: typeBits |= (1 << GT_TEAM); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 32 +BORI4 +ASGNI4 +line 136 +;136: } +LABELV $119 +line 137 +;137: if( strstr( type, "holocron" ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $124 +ARGP4 +ADDRLP4 8 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $122 +line 138 +;138: typeBits |= (1 << GT_HOLOCRON); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +BORI4 +ASGNI4 +line 139 +;139: } +LABELV $122 +line 140 +;140: if( strstr( type, "jedimaster" ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $127 +ARGP4 +ADDRLP4 12 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $125 +line 141 +;141: typeBits |= (1 << GT_JEDIMASTER); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +BORI4 +ASGNI4 +line 142 +;142: } +LABELV $125 +line 143 +;143: if( strstr( type, "duel" ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $130 +ARGP4 +ADDRLP4 16 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $128 +line 144 +;144: typeBits |= (1 << GT_TOURNAMENT); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 8 +BORI4 +ASGNI4 +line 145 +;145: } +LABELV $128 +line 146 +;146: if( strstr( type, "saga" ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $133 +ARGP4 +ADDRLP4 20 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $131 +line 147 +;147: typeBits |= (1 << GT_SAGA); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 64 +BORI4 +ASGNI4 +line 148 +;148: } +LABELV $131 +line 149 +;149: if( strstr( type, "ctf" ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $136 +ARGP4 +ADDRLP4 24 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $134 +line 150 +;150: typeBits |= (1 << GT_CTF); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 128 +BORI4 +ASGNI4 +line 151 +;151: } +LABELV $134 +line 152 +;152: if( strstr( type, "cty" ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $139 +ARGP4 +ADDRLP4 28 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $118 +line 153 +;153: typeBits |= (1 << GT_CTY); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 256 +BORI4 +ASGNI4 +line 154 +;154: } +line 155 +;155: } else { +ADDRGP4 $118 +JUMPV +LABELV $117 +line 156 +;156: typeBits |= (1 << GT_FFA); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +BORI4 +ASGNI4 +line 157 +;157: } +LABELV $118 +line 159 +;158: +;159: return typeBits; +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $116 +endproc G_GetMapTypeBits 32 8 +export G_DoesMapSupportGametype +proc G_DoesMapSupportGametype 28 8 +line 163 +;160:} +;161: +;162:qboolean G_DoesMapSupportGametype(const char *mapname, int gametype) +;163:{ +line 164 +;164: int typeBits = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 165 +;165: int thisLevel = -1; +ADDRLP4 8 +CNSTI4 -1 +ASGNI4 +line 166 +;166: int n = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 167 +;167: char *type = NULL; +ADDRLP4 4 +CNSTP4 0 +ASGNP4 +line 169 +;168: +;169: if (!g_arenaInfos[0]) +ADDRGP4 g_arenaInfos +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $141 +line 170 +;170: { +line 171 +;171: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $140 +JUMPV +LABELV $141 +line 174 +;172: } +;173: +;174: if (!mapname || !mapname[0]) +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $145 +ADDRLP4 16 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $143 +LABELV $145 +line 175 +;175: { +line 176 +;176: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $140 +JUMPV +LABELV $143 +line 179 +;177: } +;178: +;179: for( n = 0; n < g_numArenas; n++ ) +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $149 +JUMPV +LABELV $146 +line 180 +;180: { +line 181 +;181: type = Info_ValueForKey( g_arenaInfos[n], "map" ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $150 +ARGP4 +ADDRLP4 20 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 20 +INDIRP4 +ASGNP4 +line 183 +;182: +;183: if (Q_stricmp(mapname, type) == 0) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 24 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +NEI4 $151 +line 184 +;184: { +line 185 +;185: thisLevel = n; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 186 +;186: break; +ADDRGP4 $148 +JUMPV +LABELV $151 +line 188 +;187: } +;188: } +LABELV $147 +line 179 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $149 +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_numArenas +INDIRI4 +LTI4 $146 +LABELV $148 +line 190 +;189: +;190: if (thisLevel == -1) +ADDRLP4 8 +INDIRI4 +CNSTI4 -1 +NEI4 $153 +line 191 +;191: { +line 192 +;192: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $140 +JUMPV +LABELV $153 +line 195 +;193: } +;194: +;195: type = Info_ValueForKey(g_arenaInfos[thisLevel], "type"); +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $155 +ARGP4 +ADDRLP4 20 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 20 +INDIRP4 +ASGNP4 +line 197 +;196: +;197: typeBits = G_GetMapTypeBits(type); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 24 +ADDRGP4 G_GetMapTypeBits +CALLI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 24 +INDIRI4 +ASGNI4 +line 198 +;198: if (typeBits & (1 << gametype)) +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDRFP4 4 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $156 +line 199 +;199: { //the map in question supports the gametype in question, so.. +line 200 +;200: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $140 +JUMPV +LABELV $156 +line 203 +;201: } +;202: +;203: return qfalse; +CNSTI4 0 +RETI4 +LABELV $140 +endproc G_DoesMapSupportGametype 28 8 +export G_RefreshNextMap +proc G_RefreshNextMap 312 16 +line 208 +;204:} +;205: +;206://rww - auto-obtain nextmap. I could've sworn Q3 had something like this, but I guess not. +;207:const char *G_RefreshNextMap(int gametype, qboolean forced) +;208:{ +line 209 +;209: int typeBits = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 210 +;210: int thisLevel = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 211 +;211: int desiredMap = 0; +ADDRLP4 292 +CNSTI4 0 +ASGNI4 +line 212 +;212: int n = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 213 +;213: char *type = NULL; +ADDRLP4 4 +CNSTP4 0 +ASGNP4 +line 214 +;214: qboolean loopingUp = qfalse; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 217 +;215: vmCvar_t mapname; +;216: +;217: if (!g_autoMapCycle.integer && !forced) +ADDRLP4 296 +CNSTI4 0 +ASGNI4 +ADDRGP4 g_autoMapCycle+12 +INDIRI4 +ADDRLP4 296 +INDIRI4 +NEI4 $159 +ADDRFP4 4 +INDIRI4 +ADDRLP4 296 +INDIRI4 +NEI4 $159 +line 218 +;218: { +line 219 +;219: return NULL; +CNSTP4 0 +RETP4 +ADDRGP4 $158 +JUMPV +LABELV $159 +line 222 +;220: } +;221: +;222: if (!g_arenaInfos[0]) +ADDRGP4 g_arenaInfos +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $162 +line 223 +;223: { +line 224 +;224: return NULL; +CNSTP4 0 +RETP4 +ADDRGP4 $158 +JUMPV +LABELV $162 +line 227 +;225: } +;226: +;227: trap_Cvar_Register( &mapname, "mapname", "", CVAR_SERVERINFO | CVAR_ROM ); +ADDRLP4 20 +ARGP4 +ADDRGP4 $164 +ARGP4 +ADDRGP4 $165 +ARGP4 +CNSTI4 68 +ARGI4 +ADDRGP4 trap_Cvar_Register +CALLV +pop +line 228 +;228: for( n = 0; n < g_numArenas; n++ ) +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $169 +JUMPV +LABELV $166 +line 229 +;229: { +line 230 +;230: type = Info_ValueForKey( g_arenaInfos[n], "map" ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $150 +ARGP4 +ADDRLP4 300 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 300 +INDIRP4 +ASGNP4 +line 232 +;231: +;232: if (Q_stricmp(mapname.string, type) == 0) +ADDRLP4 20+16 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 304 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 304 +INDIRI4 +CNSTI4 0 +NEI4 $170 +line 233 +;233: { +line 234 +;234: thisLevel = n; +ADDRLP4 12 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 235 +;235: break; +ADDRGP4 $168 +JUMPV +LABELV $170 +line 237 +;236: } +;237: } +LABELV $167 +line 228 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $169 +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_numArenas +INDIRI4 +LTI4 $166 +LABELV $168 +line 239 +;238: +;239: desiredMap = thisLevel; +ADDRLP4 292 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 241 +;240: +;241: n = thisLevel+1; +ADDRLP4 0 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $174 +JUMPV +LABELV $173 +line 243 +;242: while (n != thisLevel) +;243: { //now cycle through the arena list and find the next map that matches the gametype we're in +line 244 +;244: if (!g_arenaInfos[n] || n >= g_numArenas) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $178 +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_numArenas +INDIRI4 +LTI4 $176 +LABELV $178 +line 245 +;245: { +line 246 +;246: if (loopingUp) +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +EQI4 $179 +line 247 +;247: { //this shouldn't happen, but if it does we have a null entry break in the arena file +line 249 +;248: //if this is the case just break out of the loop instead of sticking in an infinite loop +;249: break; +ADDRGP4 $175 +JUMPV +LABELV $179 +line 251 +;250: } +;251: n = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 252 +;252: loopingUp = qtrue; +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +line 253 +;253: } +LABELV $176 +line 255 +;254: +;255: type = Info_ValueForKey(g_arenaInfos[n], "type"); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $155 +ARGP4 +ADDRLP4 304 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 304 +INDIRP4 +ASGNP4 +line 257 +;256: +;257: typeBits = G_GetMapTypeBits(type); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 308 +ADDRGP4 G_GetMapTypeBits +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 308 +INDIRI4 +ASGNI4 +line 258 +;258: if (typeBits & (1 << gametype)) +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDRFP4 0 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $181 +line 259 +;259: { +line 260 +;260: desiredMap = n; +ADDRLP4 292 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 261 +;261: break; +ADDRGP4 $175 +JUMPV +LABELV $181 +line 264 +;262: } +;263: +;264: n++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 265 +;265: } +LABELV $174 +line 242 +ADDRLP4 0 +INDIRI4 +ADDRLP4 12 +INDIRI4 +NEI4 $173 +LABELV $175 +line 267 +;266: +;267: if (desiredMap == thisLevel) +ADDRLP4 292 +INDIRI4 +ADDRLP4 12 +INDIRI4 +NEI4 $183 +line 268 +;268: { //If this is the only level for this game mode or we just can't find a map for this game mode, then nextmap +line 270 +;269: //will always restart. +;270: trap_Cvar_Set( "nextmap", "map_restart 0"); +ADDRGP4 $185 +ARGP4 +ADDRGP4 $186 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 271 +;271: } +ADDRGP4 $184 +JUMPV +LABELV $183 +line 273 +;272: else +;273: { //otherwise we have a valid nextmap to cycle to, so use it. +line 274 +;274: type = Info_ValueForKey( g_arenaInfos[desiredMap], "map" ); +ADDRLP4 292 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $150 +ARGP4 +ADDRLP4 300 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 300 +INDIRP4 +ASGNP4 +line 275 +;275: trap_Cvar_Set( "nextmap", va("map %s", type)); +ADDRGP4 $187 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 304 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $185 +ARGP4 +ADDRLP4 304 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 276 +;276: } +LABELV $184 +line 278 +;277: +;278: return Info_ValueForKey( g_arenaInfos[desiredMap], "map" ); +ADDRLP4 292 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $150 +ARGP4 +ADDRLP4 300 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 300 +INDIRP4 +RETP4 +LABELV $158 +endproc G_RefreshNextMap 312 16 +proc G_LoadArenas 1460 16 +line 286 +;279:} +;280: +;281:/* +;282:=============== +;283:G_LoadArenas +;284:=============== +;285:*/ +;286:static void G_LoadArenas( void ) { +line 295 +;287: int numdirs; +;288: vmCvar_t arenasFile; +;289: char filename[128]; +;290: char dirlist[1024]; +;291: char* dirptr; +;292: int i, n; +;293: int dirlen; +;294: +;295: g_numArenas = 0; +ADDRGP4 g_numArenas +CNSTI4 0 +ASGNI4 +line 297 +;296: +;297: trap_Cvar_Register( &arenasFile, "g_arenasFile", "", CVAR_INIT|CVAR_ROM ); +ADDRLP4 148 +ARGP4 +ADDRGP4 $189 +ARGP4 +ADDRGP4 $165 +ARGP4 +CNSTI4 80 +ARGI4 +ADDRGP4 trap_Cvar_Register +CALLV +pop +line 298 +;298: if( *arenasFile.string ) { +ADDRLP4 148+16 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $190 +line 299 +;299: G_LoadArenasFromFile(arenasFile.string); +ADDRLP4 148+16 +ARGP4 +ADDRGP4 G_LoadArenasFromFile +CALLV +pop +line 300 +;300: } +ADDRGP4 $191 +JUMPV +LABELV $190 +line 301 +;301: else { +line 302 +;302: G_LoadArenasFromFile("scripts/arenas.txt"); +ADDRGP4 $194 +ARGP4 +ADDRGP4 G_LoadArenasFromFile +CALLV +pop +line 303 +;303: } +LABELV $191 +line 306 +;304: +;305: // get all arenas from .arena files +;306: numdirs = trap_FS_GetFileList("scripts", ".arena", dirlist, 1024 ); +ADDRGP4 $195 +ARGP4 +ADDRGP4 $196 +ARGP4 +ADDRLP4 420 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 1444 +ADDRGP4 trap_FS_GetFileList +CALLI4 +ASGNI4 +ADDRLP4 144 +ADDRLP4 1444 +INDIRI4 +ASGNI4 +line 307 +;307: dirptr = dirlist; +ADDRLP4 4 +ADDRLP4 420 +ASGNP4 +line 308 +;308: for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { +ADDRLP4 136 +CNSTI4 0 +ASGNI4 +ADDRGP4 $200 +JUMPV +LABELV $197 +line 309 +;309: dirlen = strlen(dirptr); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 1448 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 140 +ADDRLP4 1448 +INDIRI4 +ASGNI4 +line 310 +;310: strcpy(filename, "scripts/"); +ADDRLP4 8 +ARGP4 +ADDRGP4 $201 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 311 +;311: strcat(filename, dirptr); +ADDRLP4 8 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 strcat +CALLP4 +pop +line 312 +;312: G_LoadArenasFromFile(filename); +ADDRLP4 8 +ARGP4 +ADDRGP4 G_LoadArenasFromFile +CALLV +pop +line 313 +;313: } +LABELV $198 +line 308 +ADDRLP4 1448 +CNSTI4 1 +ASGNI4 +ADDRLP4 136 +ADDRLP4 136 +INDIRI4 +ADDRLP4 1448 +INDIRI4 +ADDI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 140 +INDIRI4 +ADDRLP4 1448 +INDIRI4 +ADDI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +ASGNP4 +LABELV $200 +ADDRLP4 136 +INDIRI4 +ADDRLP4 144 +INDIRI4 +LTI4 $197 +line 314 +;314: trap_Printf( va( "%i arenas parsed\n", g_numArenas ) ); +ADDRGP4 $202 +ARGP4 +ADDRGP4 g_numArenas +INDIRI4 +ARGI4 +ADDRLP4 1452 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1452 +INDIRP4 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 316 +;315: +;316: for( n = 0; n < g_numArenas; n++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $206 +JUMPV +LABELV $203 +line 317 +;317: Info_SetValueForKey( g_arenaInfos[n], "num", va( "%i", n ) ); +ADDRGP4 $208 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 1456 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $207 +ARGP4 +ADDRLP4 1456 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 318 +;318: } +LABELV $204 +line 316 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $206 +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_numArenas +INDIRI4 +LTI4 $203 +line 320 +;319: +;320: G_RefreshNextMap(g_gametype.integer, qfalse); +ADDRGP4 g_gametype+12 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_RefreshNextMap +CALLP4 +pop +line 321 +;321:} +LABELV $188 +endproc G_LoadArenas 1460 16 +export G_GetArenaInfoByMap +proc G_GetArenaInfoByMap 12 8 +line 329 +;322: +;323: +;324:/* +;325:=============== +;326:G_GetArenaInfoByNumber +;327:=============== +;328:*/ +;329:const char *G_GetArenaInfoByMap( const char *map ) { +line 332 +;330: int n; +;331: +;332: for( n = 0; n < g_numArenas; n++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $214 +JUMPV +LABELV $211 +line 333 +;333: if( Q_stricmp( Info_ValueForKey( g_arenaInfos[n], "map" ), map ) == 0 ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $150 +ARGP4 +ADDRLP4 4 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $215 +line 334 +;334: return g_arenaInfos[n]; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_arenaInfos +ADDP4 +INDIRP4 +RETP4 +ADDRGP4 $210 +JUMPV +LABELV $215 +line 336 +;335: } +;336: } +LABELV $212 +line 332 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $214 +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_numArenas +INDIRI4 +LTI4 $211 +line 338 +;337: +;338: return NULL; +CNSTP4 0 +RETP4 +LABELV $210 +endproc G_GetArenaInfoByMap 12 8 +proc PlayerIntroSound 80 12 +line 347 +;339:} +;340: +;341: +;342:/* +;343:================= +;344:PlayerIntroSound +;345:================= +;346:*/ +;347:static void PlayerIntroSound( const char *modelAndSkin ) { +line 351 +;348: char model[MAX_QPATH]; +;349: char *skin; +;350: +;351: Q_strncpyz( model, modelAndSkin, sizeof(model) ); +ADDRLP4 4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 352 +;352: skin = Q_strrchr( model, '/' ); +ADDRLP4 4 +ARGP4 +CNSTI4 47 +ARGI4 +ADDRLP4 68 +ADDRGP4 Q_strrchr +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 68 +INDIRP4 +ASGNP4 +line 353 +;353: if ( skin ) { +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $218 +line 354 +;354: *skin++ = '\0'; +ADDRLP4 72 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 72 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 72 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 355 +;355: } +ADDRGP4 $219 +JUMPV +LABELV $218 +line 356 +;356: else { +line 357 +;357: skin = model; +ADDRLP4 0 +ADDRLP4 4 +ASGNP4 +line 358 +;358: } +LABELV $219 +line 360 +;359: +;360: if( Q_stricmp( skin, "default" ) == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $222 +ARGP4 +ADDRLP4 72 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +NEI4 $220 +line 361 +;361: skin = model; +ADDRLP4 0 +ADDRLP4 4 +ASGNP4 +line 362 +;362: } +LABELV $220 +line 364 +;363: +;364: trap_SendConsoleCommand( EXEC_APPEND, va( "play sound/player/announce/%s.wav\n", skin ) ); +ADDRGP4 $223 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 76 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 2 +ARGI4 +ADDRLP4 76 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendConsoleCommand +CALLV +pop +line 365 +;365:} +LABELV $217 +endproc PlayerIntroSound 80 12 +export G_AddRandomBot +proc G_AddRandomBot 80 20 +line 372 +;366: +;367:/* +;368:=============== +;369:G_AddRandomBot +;370:=============== +;371:*/ +;372:void G_AddRandomBot( int team ) { +line 378 +;373: int i, n, num; +;374: float skill; +;375: char *value, netname[36], *teamstr; +;376: gclient_t *cl; +;377: +;378: num = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 379 +;379: for ( n = 0; n < g_numBots ; n++ ) { +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRGP4 $228 +JUMPV +LABELV $225 +line 380 +;380: value = Info_ValueForKey( g_botInfos[n], "name" ); +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $229 +ARGP4 +ADDRLP4 64 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 64 +INDIRP4 +ASGNP4 +line 382 +;381: // +;382: for ( i=0 ; i< g_maxclients.integer ; i++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $233 +JUMPV +LABELV $230 +line 383 +;383: cl = level.clients + i; +ADDRLP4 0 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 384 +;384: if ( cl->pers.connected != CON_CONNECTED ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $235 +line 385 +;385: continue; +ADDRGP4 $231 +JUMPV +LABELV $235 +line 387 +;386: } +;387: if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { +CNSTI4 828 +ADDRLP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities+296+8 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $237 +line 388 +;388: continue; +ADDRGP4 $231 +JUMPV +LABELV $237 +line 390 +;389: } +;390: if ( team >= 0 && cl->sess.sessionTeam != team ) { +ADDRLP4 68 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 68 +INDIRI4 +CNSTI4 0 +LTI4 $241 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRLP4 68 +INDIRI4 +EQI4 $241 +line 391 +;391: continue; +ADDRGP4 $231 +JUMPV +LABELV $241 +line 393 +;392: } +;393: if ( !Q_stricmp( value, cl->pers.netname ) ) { +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 72 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +NEI4 $243 +line 394 +;394: break; +ADDRGP4 $232 +JUMPV +LABELV $243 +line 396 +;395: } +;396: } +LABELV $231 +line 382 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $233 +ADDRLP4 4 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $230 +LABELV $232 +line 397 +;397: if (i >= g_maxclients.integer) { +ADDRLP4 4 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $245 +line 398 +;398: num++; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 399 +;399: } +LABELV $245 +line 400 +;400: } +LABELV $226 +line 379 +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $228 +ADDRLP4 12 +INDIRI4 +ADDRGP4 g_numBots +INDIRI4 +LTI4 $225 +line 401 +;401: num = random() * num; +ADDRLP4 64 +ADDRGP4 rand +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 64 +INDIRI4 +CNSTI4 32767 +BANDI4 +CVIF4 4 +CNSTF4 1191181824 +DIVF4 +ADDRLP4 16 +INDIRI4 +CVIF4 4 +MULF4 +CVFI4 4 +ASGNI4 +line 402 +;402: for ( n = 0; n < g_numBots ; n++ ) { +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRGP4 $251 +JUMPV +LABELV $248 +line 403 +;403: value = Info_ValueForKey( g_botInfos[n], "name" ); +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $229 +ARGP4 +ADDRLP4 68 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 68 +INDIRP4 +ASGNP4 +line 405 +;404: // +;405: for ( i=0 ; i< g_maxclients.integer ; i++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $255 +JUMPV +LABELV $252 +line 406 +;406: cl = level.clients + i; +ADDRLP4 0 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 407 +;407: if ( cl->pers.connected != CON_CONNECTED ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $257 +line 408 +;408: continue; +ADDRGP4 $253 +JUMPV +LABELV $257 +line 410 +;409: } +;410: if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { +CNSTI4 828 +ADDRLP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities+296+8 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $259 +line 411 +;411: continue; +ADDRGP4 $253 +JUMPV +LABELV $259 +line 413 +;412: } +;413: if ( team >= 0 && cl->sess.sessionTeam != team ) { +ADDRLP4 72 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +LTI4 $263 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRLP4 72 +INDIRI4 +EQI4 $263 +line 414 +;414: continue; +ADDRGP4 $253 +JUMPV +LABELV $263 +line 416 +;415: } +;416: if ( !Q_stricmp( value, cl->pers.netname ) ) { +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 76 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 0 +NEI4 $265 +line 417 +;417: break; +ADDRGP4 $254 +JUMPV +LABELV $265 +line 419 +;418: } +;419: } +LABELV $253 +line 405 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $255 +ADDRLP4 4 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $252 +LABELV $254 +line 420 +;420: if (i >= g_maxclients.integer) { +ADDRLP4 4 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $267 +line 421 +;421: num--; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 422 +;422: if (num <= 0) { +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +GTI4 $270 +line 423 +;423: skill = trap_Cvar_VariableValue( "g_spSkill" ); +ADDRGP4 $272 +ARGP4 +ADDRLP4 72 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 56 +ADDRLP4 72 +INDIRF4 +ASGNF4 +line 424 +;424: if (team == TEAM_RED) teamstr = "red"; +ADDRFP4 0 +INDIRI4 +CNSTI4 1 +NEI4 $273 +ADDRLP4 60 +ADDRGP4 $275 +ASGNP4 +ADDRGP4 $274 +JUMPV +LABELV $273 +line 425 +;425: else if (team == TEAM_BLUE) teamstr = "blue"; +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +NEI4 $276 +ADDRLP4 60 +ADDRGP4 $278 +ASGNP4 +ADDRGP4 $277 +JUMPV +LABELV $276 +line 426 +;426: else teamstr = ""; +ADDRLP4 60 +ADDRGP4 $165 +ASGNP4 +LABELV $277 +LABELV $274 +line 427 +;427: strncpy(netname, value, sizeof(netname)-1); +ADDRLP4 20 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +CNSTI4 35 +ARGI4 +ADDRGP4 strncpy +CALLP4 +pop +line 428 +;428: netname[sizeof(netname)-1] = '\0'; +ADDRLP4 20+35 +CNSTI1 0 +ASGNI1 +line 429 +;429: Q_CleanStr(netname); +ADDRLP4 20 +ARGP4 +ADDRGP4 Q_CleanStr +CALLP4 +pop +line 430 +;430: trap_SendConsoleCommand( EXEC_INSERT, va("addbot %s %f %s %i\n", netname, skill, teamstr, 0) ); +ADDRGP4 $280 +ARGP4 +ADDRLP4 20 +ARGP4 +ADDRLP4 56 +INDIRF4 +ARGF4 +ADDRLP4 60 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 76 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 1 +ARGI4 +ADDRLP4 76 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendConsoleCommand +CALLV +pop +line 431 +;431: return; +ADDRGP4 $224 +JUMPV +LABELV $270 +line 433 +;432: } +;433: } +LABELV $267 +line 434 +;434: } +LABELV $249 +line 402 +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $251 +ADDRLP4 12 +INDIRI4 +ADDRGP4 g_numBots +INDIRI4 +LTI4 $248 +line 435 +;435:} +LABELV $224 +endproc G_AddRandomBot 80 20 +export G_RemoveRandomBot +proc G_RemoveRandomBot 52 8 +line 442 +;436: +;437:/* +;438:=============== +;439:G_RemoveRandomBot +;440:=============== +;441:*/ +;442:int G_RemoveRandomBot( int team ) { +line 447 +;443: int i; +;444: char netname[36]; +;445: gclient_t *cl; +;446: +;447: for ( i=0 ; i< g_maxclients.integer ; i++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $285 +JUMPV +LABELV $282 +line 448 +;448: cl = level.clients + i; +ADDRLP4 0 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 449 +;449: if ( cl->pers.connected != CON_CONNECTED ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $287 +line 450 +;450: continue; +ADDRGP4 $283 +JUMPV +LABELV $287 +line 452 +;451: } +;452: if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { +CNSTI4 828 +ADDRLP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities+296+8 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $289 +line 453 +;453: continue; +ADDRGP4 $283 +JUMPV +LABELV $289 +line 455 +;454: } +;455: if ( team >= 0 && cl->sess.sessionTeam != team ) { +ADDRLP4 44 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +LTI4 $293 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRLP4 44 +INDIRI4 +EQI4 $293 +line 456 +;456: continue; +ADDRGP4 $283 +JUMPV +LABELV $293 +line 458 +;457: } +;458: strcpy(netname, cl->pers.netname); +ADDRLP4 8 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 459 +;459: Q_CleanStr(netname); +ADDRLP4 8 +ARGP4 +ADDRGP4 Q_CleanStr +CALLP4 +pop +line 460 +;460: trap_SendConsoleCommand( EXEC_INSERT, va("kick %s\n", netname) ); +ADDRGP4 $295 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRLP4 48 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 1 +ARGI4 +ADDRLP4 48 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendConsoleCommand +CALLV +pop +line 461 +;461: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $281 +JUMPV +LABELV $283 +line 447 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $285 +ADDRLP4 4 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $282 +line 463 +;462: } +;463: return qfalse; +CNSTI4 0 +RETI4 +LABELV $281 +endproc G_RemoveRandomBot 52 8 +export G_CountHumanPlayers +proc G_CountHumanPlayers 16 0 +line 471 +;464:} +;465: +;466:/* +;467:=============== +;468:G_CountHumanPlayers +;469:=============== +;470:*/ +;471:int G_CountHumanPlayers( int team ) { +line 475 +;472: int i, num; +;473: gclient_t *cl; +;474: +;475: num = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 476 +;476: for ( i=0 ; i< g_maxclients.integer ; i++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $300 +JUMPV +LABELV $297 +line 477 +;477: cl = level.clients + i; +ADDRLP4 0 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 478 +;478: if ( cl->pers.connected != CON_CONNECTED ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $302 +line 479 +;479: continue; +ADDRGP4 $298 +JUMPV +LABELV $302 +line 481 +;480: } +;481: if ( g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT ) { +CNSTI4 828 +ADDRLP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities+296+8 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $304 +line 482 +;482: continue; +ADDRGP4 $298 +JUMPV +LABELV $304 +line 484 +;483: } +;484: if ( team >= 0 && cl->sess.sessionTeam != team ) { +ADDRLP4 12 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +LTI4 $308 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +EQI4 $308 +line 485 +;485: continue; +ADDRGP4 $298 +JUMPV +LABELV $308 +line 487 +;486: } +;487: num++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 488 +;488: } +LABELV $298 +line 476 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $300 +ADDRLP4 4 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $297 +line 489 +;489: return num; +ADDRLP4 8 +INDIRI4 +RETI4 +LABELV $296 +endproc G_CountHumanPlayers 16 0 +export G_CountBotPlayers +proc G_CountBotPlayers 20 0 +line 497 +;490:} +;491: +;492:/* +;493:=============== +;494:G_CountBotPlayers +;495:=============== +;496:*/ +;497:int G_CountBotPlayers( int team ) { +line 501 +;498: int i, n, num; +;499: gclient_t *cl; +;500: +;501: num = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 502 +;502: for ( i=0 ; i< g_maxclients.integer ; i++ ) { +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $314 +JUMPV +LABELV $311 +line 503 +;503: cl = level.clients + i; +ADDRLP4 4 +CNSTI4 1756 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 504 +;504: if ( cl->pers.connected != CON_CONNECTED ) { +ADDRLP4 4 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $316 +line 505 +;505: continue; +ADDRGP4 $312 +JUMPV +LABELV $316 +line 507 +;506: } +;507: if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { +CNSTI4 828 +ADDRLP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities+296+8 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $318 +line 508 +;508: continue; +ADDRGP4 $312 +JUMPV +LABELV $318 +line 510 +;509: } +;510: if ( team >= 0 && cl->sess.sessionTeam != team ) { +ADDRLP4 16 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +LTI4 $322 +ADDRLP4 4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRLP4 16 +INDIRI4 +EQI4 $322 +line 511 +;511: continue; +ADDRGP4 $312 +JUMPV +LABELV $322 +line 513 +;512: } +;513: num++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 514 +;514: } +LABELV $312 +line 502 +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $314 +ADDRLP4 8 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $311 +line 515 +;515: for( n = 0; n < BOT_SPAWN_QUEUE_DEPTH; n++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $324 +line 516 +;516: if( !botSpawnQueue[n].spawnTime ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue+4 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $328 +line 517 +;517: continue; +ADDRGP4 $325 +JUMPV +LABELV $328 +line 519 +;518: } +;519: if ( botSpawnQueue[n].spawnTime > level.time ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue+4 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +LEI4 $331 +line 520 +;520: continue; +ADDRGP4 $325 +JUMPV +LABELV $331 +line 522 +;521: } +;522: num++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 523 +;523: } +LABELV $325 +line 515 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $324 +line 524 +;524: return num; +ADDRLP4 12 +INDIRI4 +RETI4 +LABELV $310 +endproc G_CountBotPlayers 20 0 +bss +align 4 +LABELV $336 +skip 4 +export G_CheckMinimumPlayers +code +proc G_CheckMinimumPlayers 36 4 +line 532 +;525:} +;526: +;527:/* +;528:=============== +;529:G_CheckMinimumPlayers +;530:=============== +;531:*/ +;532:void G_CheckMinimumPlayers( void ) { +line 537 +;533: int minplayers; +;534: int humanplayers, botplayers; +;535: static int checkminimumplayers_time; +;536: +;537: if (level.intermissiontime) return; +ADDRGP4 level+9008 +INDIRI4 +CNSTI4 0 +EQI4 $337 +ADDRGP4 $335 +JUMPV +LABELV $337 +line 539 +;538: //only check once each 10 seconds +;539: if (checkminimumplayers_time > level.time - 10000) { +ADDRGP4 $336 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 10000 +SUBI4 +LEI4 $340 +line 540 +;540: return; +ADDRGP4 $335 +JUMPV +LABELV $340 +line 542 +;541: } +;542: checkminimumplayers_time = level.time; +ADDRGP4 $336 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 543 +;543: trap_Cvar_Update(&bot_minplayers); +ADDRGP4 bot_minplayers +ARGP4 +ADDRGP4 trap_Cvar_Update +CALLV +pop +line 544 +;544: minplayers = bot_minplayers.integer; +ADDRLP4 0 +ADDRGP4 bot_minplayers+12 +INDIRI4 +ASGNI4 +line 545 +;545: if (minplayers <= 0) return; +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GTI4 $345 +ADDRGP4 $335 +JUMPV +LABELV $345 +line 547 +;546: +;547: if (g_gametype.integer >= GT_TEAM) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $347 +line 548 +;548: if (minplayers >= g_maxclients.integer / 2) { +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +CNSTI4 2 +DIVI4 +LTI4 $350 +line 549 +;549: minplayers = (g_maxclients.integer / 2) -1; +ADDRLP4 0 +ADDRGP4 g_maxclients+12 +INDIRI4 +CNSTI4 2 +DIVI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 550 +;550: } +LABELV $350 +line 552 +;551: +;552: humanplayers = G_CountHumanPlayers( TEAM_RED ); +CNSTI4 1 +ARGI4 +ADDRLP4 12 +ADDRGP4 G_CountHumanPlayers +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 553 +;553: botplayers = G_CountBotPlayers( TEAM_RED ); +CNSTI4 1 +ARGI4 +ADDRLP4 16 +ADDRGP4 G_CountBotPlayers +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 16 +INDIRI4 +ASGNI4 +line 555 +;554: // +;555: if (humanplayers + botplayers < minplayers) { +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +GEI4 $354 +line 556 +;556: G_AddRandomBot( TEAM_RED ); +CNSTI4 1 +ARGI4 +ADDRGP4 G_AddRandomBot +CALLV +pop +line 557 +;557: } else if (humanplayers + botplayers > minplayers && botplayers) { +ADDRGP4 $355 +JUMPV +LABELV $354 +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +LEI4 $356 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $356 +line 558 +;558: G_RemoveRandomBot( TEAM_RED ); +CNSTI4 1 +ARGI4 +ADDRGP4 G_RemoveRandomBot +CALLI4 +pop +line 559 +;559: } +LABELV $356 +LABELV $355 +line 561 +;560: // +;561: humanplayers = G_CountHumanPlayers( TEAM_BLUE ); +CNSTI4 2 +ARGI4 +ADDRLP4 24 +ADDRGP4 G_CountHumanPlayers +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 24 +INDIRI4 +ASGNI4 +line 562 +;562: botplayers = G_CountBotPlayers( TEAM_BLUE ); +CNSTI4 2 +ARGI4 +ADDRLP4 28 +ADDRGP4 G_CountBotPlayers +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 28 +INDIRI4 +ASGNI4 +line 564 +;563: // +;564: if (humanplayers + botplayers < minplayers) { +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +GEI4 $358 +line 565 +;565: G_AddRandomBot( TEAM_BLUE ); +CNSTI4 2 +ARGI4 +ADDRGP4 G_AddRandomBot +CALLV +pop +line 566 +;566: } else if (humanplayers + botplayers > minplayers && botplayers) { +ADDRGP4 $348 +JUMPV +LABELV $358 +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +LEI4 $348 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $348 +line 567 +;567: G_RemoveRandomBot( TEAM_BLUE ); +CNSTI4 2 +ARGI4 +ADDRGP4 G_RemoveRandomBot +CALLI4 +pop +line 568 +;568: } +line 569 +;569: } +ADDRGP4 $348 +JUMPV +LABELV $347 +line 570 +;570: else if (g_gametype.integer == GT_TOURNAMENT ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $362 +line 571 +;571: if (minplayers >= g_maxclients.integer) { +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $365 +line 572 +;572: minplayers = g_maxclients.integer-1; +ADDRLP4 0 +ADDRGP4 g_maxclients+12 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 573 +;573: } +LABELV $365 +line 574 +;574: humanplayers = G_CountHumanPlayers( -1 ); +CNSTI4 -1 +ARGI4 +ADDRLP4 12 +ADDRGP4 G_CountHumanPlayers +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 575 +;575: botplayers = G_CountBotPlayers( -1 ); +CNSTI4 -1 +ARGI4 +ADDRLP4 16 +ADDRGP4 G_CountBotPlayers +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 16 +INDIRI4 +ASGNI4 +line 577 +;576: // +;577: if (humanplayers + botplayers < minplayers) { +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +GEI4 $369 +line 578 +;578: G_AddRandomBot( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddRandomBot +CALLV +pop +line 579 +;579: } else if (humanplayers + botplayers > minplayers && botplayers) { +ADDRGP4 $363 +JUMPV +LABELV $369 +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +LEI4 $363 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $363 +line 581 +;580: // try to remove spectators first +;581: if (!G_RemoveRandomBot( TEAM_SPECTATOR )) { +CNSTI4 3 +ARGI4 +ADDRLP4 24 +ADDRGP4 G_RemoveRandomBot +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +NEI4 $363 +line 583 +;582: // just remove the bot that is playing +;583: G_RemoveRandomBot( -1 ); +CNSTI4 -1 +ARGI4 +ADDRGP4 G_RemoveRandomBot +CALLI4 +pop +line 584 +;584: } +line 585 +;585: } +line 586 +;586: } +ADDRGP4 $363 +JUMPV +LABELV $362 +line 587 +;587: else if (g_gametype.integer == GT_FFA) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 0 +NEI4 $375 +line 588 +;588: if (minplayers >= g_maxclients.integer) { +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $378 +line 589 +;589: minplayers = g_maxclients.integer-1; +ADDRLP4 0 +ADDRGP4 g_maxclients+12 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 590 +;590: } +LABELV $378 +line 591 +;591: humanplayers = G_CountHumanPlayers( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRLP4 12 +ADDRGP4 G_CountHumanPlayers +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 592 +;592: botplayers = G_CountBotPlayers( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRLP4 16 +ADDRGP4 G_CountBotPlayers +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 16 +INDIRI4 +ASGNI4 +line 594 +;593: // +;594: if (humanplayers + botplayers < minplayers) { +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +GEI4 $382 +line 595 +;595: G_AddRandomBot( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddRandomBot +CALLV +pop +line 596 +;596: } else if (humanplayers + botplayers > minplayers && botplayers) { +ADDRGP4 $376 +JUMPV +LABELV $382 +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +LEI4 $376 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $376 +line 597 +;597: G_RemoveRandomBot( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRGP4 G_RemoveRandomBot +CALLI4 +pop +line 598 +;598: } +line 599 +;599: } +ADDRGP4 $376 +JUMPV +LABELV $375 +line 600 +;600: else if (g_gametype.integer == GT_HOLOCRON || g_gametype.integer == GT_JEDIMASTER) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 1 +EQI4 $390 +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 2 +NEI4 $386 +LABELV $390 +line 601 +;601: if (minplayers >= g_maxclients.integer) { +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_maxclients+12 +INDIRI4 +LTI4 $391 +line 602 +;602: minplayers = g_maxclients.integer-1; +ADDRLP4 0 +ADDRGP4 g_maxclients+12 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 603 +;603: } +LABELV $391 +line 604 +;604: humanplayers = G_CountHumanPlayers( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRLP4 12 +ADDRGP4 G_CountHumanPlayers +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 605 +;605: botplayers = G_CountBotPlayers( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRLP4 16 +ADDRGP4 G_CountBotPlayers +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 16 +INDIRI4 +ASGNI4 +line 607 +;606: // +;607: if (humanplayers + botplayers < minplayers) { +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +GEI4 $395 +line 608 +;608: G_AddRandomBot( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddRandomBot +CALLV +pop +line 609 +;609: } else if (humanplayers + botplayers > minplayers && botplayers) { +ADDRGP4 $396 +JUMPV +LABELV $395 +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRI4 +LEI4 $397 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $397 +line 610 +;610: G_RemoveRandomBot( TEAM_FREE ); +CNSTI4 0 +ARGI4 +ADDRGP4 G_RemoveRandomBot +CALLI4 +pop +line 611 +;611: } +LABELV $397 +LABELV $396 +line 612 +;612: } +LABELV $386 +LABELV $376 +LABELV $363 +LABELV $348 +line 613 +;613:} +LABELV $335 +endproc G_CheckMinimumPlayers 36 4 +export G_CheckBotSpawn +proc G_CheckBotSpawn 1032 12 +line 620 +;614: +;615:/* +;616:=============== +;617:G_CheckBotSpawn +;618:=============== +;619:*/ +;620:void G_CheckBotSpawn( void ) { +line 624 +;621: int n; +;622: char userinfo[MAX_INFO_VALUE]; +;623: +;624: G_CheckMinimumPlayers(); +ADDRGP4 G_CheckMinimumPlayers +CALLV +pop +line 626 +;625: +;626: for( n = 0; n < BOT_SPAWN_QUEUE_DEPTH; n++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $400 +line 627 +;627: if( !botSpawnQueue[n].spawnTime ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue+4 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $404 +line 628 +;628: continue; +ADDRGP4 $401 +JUMPV +LABELV $404 +line 630 +;629: } +;630: if ( botSpawnQueue[n].spawnTime > level.time ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue+4 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +LEI4 $407 +line 631 +;631: continue; +ADDRGP4 $401 +JUMPV +LABELV $407 +line 633 +;632: } +;633: ClientBegin( botSpawnQueue[n].clientNum, qfalse ); +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 ClientBegin +CALLV +pop +line 634 +;634: botSpawnQueue[n].spawnTime = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue+4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 636 +;635: +;636: if( g_gametype.integer == GT_SINGLE_PLAYER ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 4 +NEI4 $412 +line 637 +;637: trap_GetUserinfo( botSpawnQueue[n].clientNum, userinfo, sizeof(userinfo) ); +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetUserinfo +CALLV +pop +line 638 +;638: PlayerIntroSound( Info_ValueForKey (userinfo, "model") ); +ADDRLP4 4 +ARGP4 +ADDRGP4 $415 +ARGP4 +ADDRLP4 1028 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 PlayerIntroSound +CALLV +pop +line 639 +;639: } +LABELV $412 +line 640 +;640: } +LABELV $401 +line 626 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $400 +line 641 +;641:} +LABELV $399 +endproc G_CheckBotSpawn 1032 12 +proc AddBotToSpawnQueue 4 8 +line 649 +;642: +;643: +;644:/* +;645:=============== +;646:AddBotToSpawnQueue +;647:=============== +;648:*/ +;649:static void AddBotToSpawnQueue( int clientNum, int delay ) { +line 652 +;650: int n; +;651: +;652: for( n = 0; n < BOT_SPAWN_QUEUE_DEPTH; n++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $417 +line 653 +;653: if( !botSpawnQueue[n].spawnTime ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue+4 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $421 +line 654 +;654: botSpawnQueue[n].spawnTime = level.time + delay; +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue+4 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ADDRFP4 4 +INDIRI4 +ADDI4 +ASGNI4 +line 655 +;655: botSpawnQueue[n].clientNum = clientNum; +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue +ADDP4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 656 +;656: return; +ADDRGP4 $416 +JUMPV +LABELV $421 +line 658 +;657: } +;658: } +LABELV $418 +line 652 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $417 +line 660 +;659: +;660: G_Printf( S_COLOR_YELLOW "Unable to delay spawn\n" ); +ADDRGP4 $426 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 661 +;661: ClientBegin( clientNum, qfalse ); +ADDRFP4 0 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 ClientBegin +CALLV +pop +line 662 +;662:} +LABELV $416 +endproc AddBotToSpawnQueue 4 8 +export G_RemoveQueuedBotBegin +proc G_RemoveQueuedBotBegin 4 0 +line 673 +;663: +;664: +;665:/* +;666:=============== +;667:G_RemoveQueuedBotBegin +;668: +;669:Called on client disconnect to make sure the delayed spawn +;670:doesn't happen on a freed index +;671:=============== +;672:*/ +;673:void G_RemoveQueuedBotBegin( int clientNum ) { +line 676 +;674: int n; +;675: +;676: for( n = 0; n < BOT_SPAWN_QUEUE_DEPTH; n++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $428 +line 677 +;677: if( botSpawnQueue[n].clientNum == clientNum ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $432 +line 678 +;678: botSpawnQueue[n].spawnTime = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 botSpawnQueue+4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 679 +;679: return; +ADDRGP4 $427 +JUMPV +LABELV $432 +line 681 +;680: } +;681: } +LABELV $429 +line 676 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $428 +line 682 +;682:} +LABELV $427 +endproc G_RemoveQueuedBotBegin 4 0 +export G_BotConnect +proc G_BotConnect 1336 12 +line 690 +;683: +;684: +;685:/* +;686:=============== +;687:G_BotConnect +;688:=============== +;689:*/ +;690:qboolean G_BotConnect( int clientNum, qboolean restart ) { +line 694 +;691: bot_settings_t settings; +;692: char userinfo[MAX_INFO_STRING]; +;693: +;694: trap_GetUserinfo( clientNum, userinfo, sizeof(userinfo) ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 292 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetUserinfo +CALLV +pop +line 696 +;695: +;696: Q_strncpyz( settings.personalityfile, Info_ValueForKey( userinfo, "personality" ), sizeof(settings.personalityfile) ); +ADDRLP4 292 +ARGP4 +ADDRGP4 $436 +ARGP4 +ADDRLP4 1316 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 0 +ARGP4 +ADDRLP4 1316 +INDIRP4 +ARGP4 +CNSTI4 144 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 697 +;697: settings.skill = atof( Info_ValueForKey( userinfo, "skill" ) ); +ADDRLP4 292 +ARGP4 +ADDRGP4 $438 +ARGP4 +ADDRLP4 1320 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1320 +INDIRP4 +ARGP4 +ADDRLP4 1324 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 0+144 +ADDRLP4 1324 +INDIRF4 +ASGNF4 +line 698 +;698: Q_strncpyz( settings.team, Info_ValueForKey( userinfo, "team" ), sizeof(settings.team) ); +ADDRLP4 292 +ARGP4 +ADDRGP4 $440 +ARGP4 +ADDRLP4 1328 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 0+148 +ARGP4 +ADDRLP4 1328 +INDIRP4 +ARGP4 +CNSTI4 144 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 700 +;699: +;700: if (!BotAISetupClient( clientNum, &settings, restart )) { +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 1332 +ADDRGP4 BotAISetupClient +CALLI4 +ASGNI4 +ADDRLP4 1332 +INDIRI4 +CNSTI4 0 +NEI4 $442 +line 701 +;701: trap_DropClient( clientNum, "BotAISetupClient failed" ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 $444 +ARGP4 +ADDRGP4 trap_DropClient +CALLV +pop +line 702 +;702: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $435 +JUMPV +LABELV $442 +line 705 +;703: } +;704: +;705: return qtrue; +CNSTI4 1 +RETI4 +LABELV $435 +endproc G_BotConnect 1336 12 +proc G_AddBot 1140 12 +line 714 +;706:} +;707: +;708: +;709:/* +;710:=============== +;711:G_AddBot +;712:=============== +;713:*/ +;714:static void G_AddBot( const char *name, float skill, const char *team, int delay, char *altname) { +line 724 +;715: int clientNum; +;716: char *botinfo; +;717: gentity_t *bot; +;718: char *key; +;719: char *s; +;720: char *botname; +;721: char *model; +;722:// char *headmodel; +;723: char userinfo[MAX_INFO_STRING]; +;724: int preTeam = 0; +ADDRLP4 1052 +CNSTI4 0 +ASGNI4 +line 727 +;725: +;726: // get the botinfo from bots.txt +;727: botinfo = G_GetBotInfoByName( name ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 1056 +ADDRGP4 G_GetBotInfoByName +CALLP4 +ASGNP4 +ADDRLP4 1032 +ADDRLP4 1056 +INDIRP4 +ASGNP4 +line 728 +;728: if ( !botinfo ) { +ADDRLP4 1032 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $446 +line 729 +;729: G_Printf( S_COLOR_RED "Error: Bot '%s' not defined\n", name ); +ADDRGP4 $448 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 730 +;730: return; +ADDRGP4 $445 +JUMPV +LABELV $446 +line 734 +;731: } +;732: +;733: // create the bot's userinfo +;734: userinfo[0] = '\0'; +ADDRLP4 0 +CNSTI1 0 +ASGNI1 +line 736 +;735: +;736: botname = Info_ValueForKey( botinfo, "funname" ); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRGP4 $449 +ARGP4 +ADDRLP4 1060 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1048 +ADDRLP4 1060 +INDIRP4 +ASGNP4 +line 737 +;737: if( !botname[0] ) { +ADDRLP4 1048 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $450 +line 738 +;738: botname = Info_ValueForKey( botinfo, "name" ); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRGP4 $229 +ARGP4 +ADDRLP4 1064 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1048 +ADDRLP4 1064 +INDIRP4 +ASGNP4 +line 739 +;739: } +LABELV $450 +line 741 +;740: // check for an alternative name +;741: if (altname && altname[0]) { +ADDRLP4 1064 +ADDRFP4 16 +INDIRP4 +ASGNP4 +ADDRLP4 1064 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $452 +ADDRLP4 1064 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $452 +line 742 +;742: botname = altname; +ADDRLP4 1048 +ADDRFP4 16 +INDIRP4 +ASGNP4 +line 743 +;743: } +LABELV $452 +line 744 +;744: Info_SetValueForKey( userinfo, "name", botname ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $229 +ARGP4 +ADDRLP4 1048 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 745 +;745: Info_SetValueForKey( userinfo, "rate", "25000" ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $454 +ARGP4 +ADDRGP4 $455 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 746 +;746: Info_SetValueForKey( userinfo, "snaps", "20" ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $456 +ARGP4 +ADDRGP4 $457 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 747 +;747: Info_SetValueForKey( userinfo, "skill", va("%1.2f", skill) ); +ADDRGP4 $458 +ARGP4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRLP4 1068 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 $438 +ARGP4 +ADDRLP4 1068 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 749 +;748: +;749: if ( skill >= 1 && skill < 2 ) { +ADDRLP4 1072 +ADDRFP4 4 +INDIRF4 +ASGNF4 +ADDRLP4 1072 +INDIRF4 +CNSTF4 1065353216 +LTF4 $459 +ADDRLP4 1072 +INDIRF4 +CNSTF4 1073741824 +GEF4 $459 +line 750 +;750: Info_SetValueForKey( userinfo, "handicap", "50" ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $461 +ARGP4 +ADDRGP4 $462 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 751 +;751: } +ADDRGP4 $460 +JUMPV +LABELV $459 +line 752 +;752: else if ( skill >= 2 && skill < 3 ) { +ADDRLP4 1076 +ADDRFP4 4 +INDIRF4 +ASGNF4 +ADDRLP4 1076 +INDIRF4 +CNSTF4 1073741824 +LTF4 $463 +ADDRLP4 1076 +INDIRF4 +CNSTF4 1077936128 +GEF4 $463 +line 753 +;753: Info_SetValueForKey( userinfo, "handicap", "70" ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $461 +ARGP4 +ADDRGP4 $465 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 754 +;754: } +ADDRGP4 $464 +JUMPV +LABELV $463 +line 755 +;755: else if ( skill >= 3 && skill < 4 ) { +ADDRLP4 1080 +ADDRFP4 4 +INDIRF4 +ASGNF4 +ADDRLP4 1080 +INDIRF4 +CNSTF4 1077936128 +LTF4 $466 +ADDRLP4 1080 +INDIRF4 +CNSTF4 1082130432 +GEF4 $466 +line 756 +;756: Info_SetValueForKey( userinfo, "handicap", "90" ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $461 +ARGP4 +ADDRGP4 $468 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 757 +;757: } +LABELV $466 +LABELV $464 +LABELV $460 +line 759 +;758: +;759: key = "model"; +ADDRLP4 1024 +ADDRGP4 $415 +ASGNP4 +line 760 +;760: model = Info_ValueForKey( botinfo, key ); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1084 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1044 +ADDRLP4 1084 +INDIRP4 +ASGNP4 +line 761 +;761: if ( !*model ) { +ADDRLP4 1044 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $469 +line 762 +;762: model = "visor/default"; +ADDRLP4 1044 +ADDRGP4 $471 +ASGNP4 +line 763 +;763: } +LABELV $469 +line 764 +;764: Info_SetValueForKey( userinfo, key, model ); +ADDRLP4 0 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1044 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 765 +;765: key = "team_model"; +ADDRLP4 1024 +ADDRGP4 $472 +ASGNP4 +line 766 +;766: Info_SetValueForKey( userinfo, key, model ); +ADDRLP4 0 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1044 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 777 +;767: +;768:/* key = "headmodel"; +;769: headmodel = Info_ValueForKey( botinfo, key ); +;770: if ( !*headmodel ) { +;771: headmodel = model; +;772: } +;773: Info_SetValueForKey( userinfo, key, headmodel ); +;774: key = "team_headmodel"; +;775: Info_SetValueForKey( userinfo, key, headmodel ); +;776:*/ +;777: key = "gender"; +ADDRLP4 1024 +ADDRGP4 $473 +ASGNP4 +line 778 +;778: s = Info_ValueForKey( botinfo, key ); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1088 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 1088 +INDIRP4 +ASGNP4 +line 779 +;779: if ( !*s ) { +ADDRLP4 1028 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $474 +line 780 +;780: s = "male"; +ADDRLP4 1028 +ADDRGP4 $476 +ASGNP4 +line 781 +;781: } +LABELV $474 +line 782 +;782: Info_SetValueForKey( userinfo, "sex", s ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $477 +ARGP4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 784 +;783: +;784: key = "color1"; +ADDRLP4 1024 +ADDRGP4 $478 +ASGNP4 +line 785 +;785: s = Info_ValueForKey( botinfo, key ); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1092 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 1092 +INDIRP4 +ASGNP4 +line 786 +;786: if ( !*s ) { +ADDRLP4 1028 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $479 +line 787 +;787: s = "4"; +ADDRLP4 1028 +ADDRGP4 $481 +ASGNP4 +line 788 +;788: } +LABELV $479 +line 789 +;789: Info_SetValueForKey( userinfo, key, s ); +ADDRLP4 0 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 791 +;790: +;791: key = "color2"; +ADDRLP4 1024 +ADDRGP4 $482 +ASGNP4 +line 792 +;792: s = Info_ValueForKey( botinfo, key ); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1096 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 1096 +INDIRP4 +ASGNP4 +line 793 +;793: if ( !*s ) { +ADDRLP4 1028 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $483 +line 794 +;794: s = "5"; +ADDRLP4 1028 +ADDRGP4 $485 +ASGNP4 +line 795 +;795: } +LABELV $483 +line 796 +;796: Info_SetValueForKey( userinfo, key, s ); +ADDRLP4 0 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 798 +;797: +;798: s = Info_ValueForKey(botinfo, "personality"); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRGP4 $436 +ARGP4 +ADDRLP4 1100 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 1100 +INDIRP4 +ASGNP4 +line 799 +;799: if (!*s ) +ADDRLP4 1028 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $486 +line 800 +;800: { +line 801 +;801: Info_SetValueForKey( userinfo, "personality", "botfiles/default.jkb" ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $436 +ARGP4 +ADDRGP4 $488 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 802 +;802: } +ADDRGP4 $487 +JUMPV +LABELV $486 +line 804 +;803: else +;804: { +line 805 +;805: Info_SetValueForKey( userinfo, "personality", s ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $436 +ARGP4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 806 +;806: } +LABELV $487 +line 809 +;807: +;808: // have the server allocate a client slot +;809: clientNum = trap_BotAllocateClient(); +ADDRLP4 1104 +ADDRGP4 trap_BotAllocateClient +CALLI4 +ASGNI4 +ADDRLP4 1036 +ADDRLP4 1104 +INDIRI4 +ASGNI4 +line 810 +;810: if ( clientNum == -1 ) { +ADDRLP4 1036 +INDIRI4 +CNSTI4 -1 +NEI4 $489 +line 813 +;811:// G_Printf( S_COLOR_RED "Unable to add bot. All player slots are in use.\n" ); +;812:// G_Printf( S_COLOR_RED "Start server with more 'open' slots.\n" ); +;813: trap_SendServerCommand( -1, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "UNABLE_TO_ADD_BOT"))); +ADDRGP4 $492 +ARGP4 +ADDRGP4 $493 +ARGP4 +ADDRLP4 1108 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $491 +ARGP4 +ADDRLP4 1108 +INDIRP4 +ARGP4 +ADDRLP4 1112 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 1112 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 814 +;814: return; +ADDRGP4 $445 +JUMPV +LABELV $489 +line 818 +;815: } +;816: +;817: // initialize the bot settings +;818: if( !team || !*team ) { +ADDRLP4 1108 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 1108 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $496 +ADDRLP4 1108 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $494 +LABELV $496 +line 819 +;819: if( g_gametype.integer >= GT_TEAM ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $497 +line 820 +;820: if( PickTeam(clientNum) == TEAM_RED) { +ADDRLP4 1036 +INDIRI4 +ARGI4 +ADDRLP4 1112 +ADDRGP4 PickTeam +CALLI4 +ASGNI4 +ADDRLP4 1112 +INDIRI4 +CNSTI4 1 +NEI4 $500 +line 821 +;821: team = "red"; +ADDRFP4 8 +ADDRGP4 $275 +ASGNP4 +line 822 +;822: } +ADDRGP4 $498 +JUMPV +LABELV $500 +line 823 +;823: else { +line 824 +;824: team = "blue"; +ADDRFP4 8 +ADDRGP4 $278 +ASGNP4 +line 825 +;825: } +line 826 +;826: } +ADDRGP4 $498 +JUMPV +LABELV $497 +line 827 +;827: else { +line 828 +;828: team = "red"; +ADDRFP4 8 +ADDRGP4 $275 +ASGNP4 +line 829 +;829: } +LABELV $498 +line 830 +;830: } +LABELV $494 +line 832 +;831:// Info_SetValueForKey( userinfo, "characterfile", Info_ValueForKey( botinfo, "aifile" ) ); +;832: Info_SetValueForKey( userinfo, "skill", va( "%5.2f", skill ) ); +ADDRGP4 $502 +ARGP4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRLP4 1112 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 $438 +ARGP4 +ADDRLP4 1112 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 833 +;833: Info_SetValueForKey( userinfo, "team", team ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $440 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 835 +;834: +;835: bot = &g_entities[ clientNum ]; +ADDRLP4 1040 +CNSTI4 828 +ADDRLP4 1036 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 836 +;836: bot->r.svFlags |= SVF_BOT; +ADDRLP4 1116 +ADDRLP4 1040 +INDIRP4 +CNSTI4 304 +ADDP4 +ASGNP4 +ADDRLP4 1116 +INDIRP4 +ADDRLP4 1116 +INDIRP4 +INDIRI4 +CNSTI4 8 +BORI4 +ASGNI4 +line 837 +;837: bot->inuse = qtrue; +ADDRLP4 1040 +INDIRP4 +CNSTI4 412 +ADDP4 +CNSTI4 1 +ASGNI4 +line 840 +;838: +;839: // register the userinfo +;840: trap_SetUserinfo( clientNum, userinfo ); +ADDRLP4 1036 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +ADDRGP4 trap_SetUserinfo +CALLV +pop +line 842 +;841: +;842: if (g_gametype.integer >= GT_TEAM) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $503 +line 843 +;843: { +line 844 +;844: if (team && Q_stricmp(team, "red") == 0) +ADDRLP4 1120 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 1120 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $506 +ADDRLP4 1120 +INDIRP4 +ARGP4 +ADDRGP4 $275 +ARGP4 +ADDRLP4 1124 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 1124 +INDIRI4 +CNSTI4 0 +NEI4 $506 +line 845 +;845: { +line 846 +;846: bot->client->sess.sessionTeam = TEAM_RED; +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +CNSTI4 1 +ASGNI4 +line 847 +;847: } +ADDRGP4 $507 +JUMPV +LABELV $506 +line 848 +;848: else if (team && Q_stricmp(team, "blue") == 0) +ADDRLP4 1128 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 1128 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $508 +ADDRLP4 1128 +INDIRP4 +ARGP4 +ADDRGP4 $278 +ARGP4 +ADDRLP4 1132 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 1132 +INDIRI4 +CNSTI4 0 +NEI4 $508 +line 849 +;849: { +line 850 +;850: bot->client->sess.sessionTeam = TEAM_BLUE; +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +CNSTI4 2 +ASGNI4 +line 851 +;851: } +ADDRGP4 $509 +JUMPV +LABELV $508 +line 853 +;852: else +;853: { +line 854 +;854: bot->client->sess.sessionTeam = PickTeam( -1 ); +CNSTI4 -1 +ARGI4 +ADDRLP4 1136 +ADDRGP4 PickTeam +CALLI4 +ASGNI4 +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +ADDRLP4 1136 +INDIRI4 +ASGNI4 +line 855 +;855: } +LABELV $509 +LABELV $507 +line 856 +;856: } +LABELV $503 +line 858 +;857: +;858: preTeam = bot->client->sess.sessionTeam; +ADDRLP4 1052 +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ASGNI4 +line 861 +;859: +;860: // have it connect to the game as a normal client +;861: if ( ClientConnect( clientNum, qtrue, qtrue ) ) { +ADDRLP4 1036 +INDIRI4 +ARGI4 +ADDRLP4 1120 +CNSTI4 1 +ASGNI4 +ADDRLP4 1120 +INDIRI4 +ARGI4 +ADDRLP4 1120 +INDIRI4 +ARGI4 +ADDRLP4 1124 +ADDRGP4 ClientConnect +CALLP4 +ASGNP4 +ADDRLP4 1124 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $510 +line 862 +;862: return; +ADDRGP4 $445 +JUMPV +LABELV $510 +line 865 +;863: } +;864: +;865: if (bot->client->sess.sessionTeam != preTeam) +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRLP4 1052 +INDIRI4 +EQI4 $512 +line 866 +;866: { +line 867 +;867: trap_GetUserinfo(clientNum, userinfo, MAX_INFO_STRING); +ADDRLP4 1036 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetUserinfo +CALLV +pop +line 869 +;868: +;869: if (bot->client->sess.sessionTeam == TEAM_SPECTATOR) +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $514 +line 870 +;870: { +line 871 +;871: bot->client->sess.sessionTeam = preTeam; +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +ADDRLP4 1052 +INDIRI4 +ASGNI4 +line 872 +;872: } +LABELV $514 +line 874 +;873: +;874: if (bot->client->sess.sessionTeam == TEAM_RED) +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $516 +line 875 +;875: { +line 876 +;876: team = "Red"; +ADDRFP4 8 +ADDRGP4 $518 +ASGNP4 +line 877 +;877: } +ADDRGP4 $517 +JUMPV +LABELV $516 +line 879 +;878: else +;879: { +line 880 +;880: team = "Blue"; +ADDRFP4 8 +ADDRGP4 $519 +ASGNP4 +line 881 +;881: } +LABELV $517 +line 883 +;882: +;883: Info_SetValueForKey( userinfo, "team", team ); +ADDRLP4 0 +ARGP4 +ADDRGP4 $440 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 885 +;884: +;885: trap_SetUserinfo( clientNum, userinfo ); +ADDRLP4 1036 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +ADDRGP4 trap_SetUserinfo +CALLV +pop +line 887 +;886: +;887: bot->client->ps.persistant[ PERS_TEAM ] = bot->client->sess.sessionTeam; +ADDRLP4 1128 +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 1128 +INDIRP4 +CNSTI4 292 +ADDP4 +ADDRLP4 1128 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ASGNI4 +line 889 +;888: +;889: G_ReadSessionData( bot->client ); +ADDRLP4 1040 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 G_ReadSessionData +CALLV +pop +line 890 +;890: ClientUserinfoChanged( clientNum ); +ADDRLP4 1036 +INDIRI4 +ARGI4 +ADDRGP4 ClientUserinfoChanged +CALLV +pop +line 891 +;891: } +LABELV $512 +line 893 +;892: +;893: if( delay == 0 ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $520 +line 894 +;894: ClientBegin( clientNum, qfalse ); +ADDRLP4 1036 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 ClientBegin +CALLV +pop +line 895 +;895: return; +ADDRGP4 $445 +JUMPV +LABELV $520 +line 898 +;896: } +;897: +;898: AddBotToSpawnQueue( clientNum, delay ); +ADDRLP4 1036 +INDIRI4 +ARGI4 +ADDRFP4 12 +INDIRI4 +ARGI4 +ADDRGP4 AddBotToSpawnQueue +CALLV +pop +line 899 +;899:} +LABELV $445 +endproc G_AddBot 1140 12 +export Svcmd_AddBot_f +proc Svcmd_AddBot_f 4112 20 +line 907 +;900: +;901: +;902:/* +;903:=============== +;904:Svcmd_AddBot_f +;905:=============== +;906:*/ +;907:void Svcmd_AddBot_f( void ) { +line 916 +;908: float skill; +;909: int delay; +;910: char name[MAX_TOKEN_CHARS]; +;911: char altname[MAX_TOKEN_CHARS]; +;912: char string[MAX_TOKEN_CHARS]; +;913: char team[MAX_TOKEN_CHARS]; +;914: +;915: // are bots enabled? +;916: if ( !trap_Cvar_VariableIntegerValue( "bot_enable" ) ) { +ADDRGP4 $525 +ARGP4 +ADDRLP4 4104 +ADDRGP4 trap_Cvar_VariableIntegerValue +CALLI4 +ASGNI4 +ADDRLP4 4104 +INDIRI4 +CNSTI4 0 +NEI4 $523 +line 917 +;917: return; +ADDRGP4 $522 +JUMPV +LABELV $523 +line 921 +;918: } +;919: +;920: // name +;921: trap_Argv( 1, name, sizeof( name ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 1024 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 922 +;922: if ( !name[0] ) { +ADDRLP4 1024 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $526 +line 923 +;923: trap_Printf( "Usage: Addbot [skill 1-5] [team] [msec delay] [altname]\n" ); +ADDRGP4 $528 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 924 +;924: return; +ADDRGP4 $522 +JUMPV +LABELV $526 +line 928 +;925: } +;926: +;927: // skill +;928: trap_Argv( 2, string, sizeof( string ) ); +CNSTI4 2 +ARGI4 +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 929 +;929: if ( !string[0] ) { +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $529 +line 930 +;930: skill = 4; +ADDRLP4 4096 +CNSTF4 1082130432 +ASGNF4 +line 931 +;931: } +ADDRGP4 $530 +JUMPV +LABELV $529 +line 932 +;932: else { +line 933 +;933: skill = atof( string ); +ADDRLP4 0 +ARGP4 +ADDRLP4 4108 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 4096 +ADDRLP4 4108 +INDIRF4 +ASGNF4 +line 934 +;934: } +LABELV $530 +line 937 +;935: +;936: // team +;937: trap_Argv( 3, team, sizeof( team ) ); +CNSTI4 3 +ARGI4 +ADDRLP4 3072 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 940 +;938: +;939: // delay +;940: trap_Argv( 4, string, sizeof( string ) ); +CNSTI4 4 +ARGI4 +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 941 +;941: if ( !string[0] ) { +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $531 +line 942 +;942: delay = 0; +ADDRLP4 4100 +CNSTI4 0 +ASGNI4 +line 943 +;943: } +ADDRGP4 $532 +JUMPV +LABELV $531 +line 944 +;944: else { +line 945 +;945: delay = atoi( string ); +ADDRLP4 0 +ARGP4 +ADDRLP4 4108 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 4100 +ADDRLP4 4108 +INDIRI4 +ASGNI4 +line 946 +;946: } +LABELV $532 +line 949 +;947: +;948: // alternative name +;949: trap_Argv( 5, altname, sizeof( altname ) ); +CNSTI4 5 +ARGI4 +ADDRLP4 2048 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 951 +;950: +;951: G_AddBot( name, skill, team, delay, altname ); +ADDRLP4 1024 +ARGP4 +ADDRLP4 4096 +INDIRF4 +ARGF4 +ADDRLP4 3072 +ARGP4 +ADDRLP4 4100 +INDIRI4 +ARGI4 +ADDRLP4 2048 +ARGP4 +ADDRGP4 G_AddBot +CALLV +pop +line 955 +;952: +;953: // if this was issued during gameplay and we are playing locally, +;954: // go ahead and load the bot's media immediately +;955: if ( level.time - level.startTime > 1000 && +ADDRGP4 level+32 +INDIRI4 +ADDRGP4 level+40 +INDIRI4 +SUBI4 +CNSTI4 1000 +LEI4 $533 +ADDRGP4 $537 +ARGP4 +ADDRLP4 4108 +ADDRGP4 trap_Cvar_VariableIntegerValue +CALLI4 +ASGNI4 +ADDRLP4 4108 +INDIRI4 +CNSTI4 0 +EQI4 $533 +line 956 +;956: trap_Cvar_VariableIntegerValue( "cl_running" ) ) { +line 957 +;957: trap_SendServerCommand( -1, "loaddefered\n" ); // FIXME: spelled wrong, but not changing for demo +CNSTI4 -1 +ARGI4 +ADDRGP4 $538 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 958 +;958: } +LABELV $533 +line 959 +;959:} +LABELV $522 +endproc Svcmd_AddBot_f 4112 20 +export Svcmd_BotList_f +proc Svcmd_BotList_f 4120 20 +line 966 +;960: +;961:/* +;962:=============== +;963:Svcmd_BotList_f +;964:=============== +;965:*/ +;966:void Svcmd_BotList_f( void ) { +line 973 +;967: int i; +;968: char name[MAX_TOKEN_CHARS]; +;969: char funname[MAX_TOKEN_CHARS]; +;970: char model[MAX_TOKEN_CHARS]; +;971: char personality[MAX_TOKEN_CHARS]; +;972: +;973: trap_Printf("^1name model personality funname\n"); +ADDRGP4 $540 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 974 +;974: for (i = 0; i < g_numBots; i++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $544 +JUMPV +LABELV $541 +line 975 +;975: strcpy(name, Info_ValueForKey( g_botInfos[i], "name" )); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $229 +ARGP4 +ADDRLP4 4100 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 4100 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 976 +;976: if ( !*name ) { +ADDRLP4 4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $545 +line 977 +;977: strcpy(name, "Padawan"); +ADDRLP4 4 +ARGP4 +ADDRGP4 $547 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 978 +;978: } +LABELV $545 +line 979 +;979: strcpy(funname, Info_ValueForKey( g_botInfos[i], "funname" )); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $449 +ARGP4 +ADDRLP4 4104 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ARGP4 +ADDRLP4 4104 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 980 +;980: if ( !*funname ) { +ADDRLP4 1028 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $548 +line 981 +;981: strcpy(funname, ""); +ADDRLP4 1028 +ARGP4 +ADDRGP4 $165 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 982 +;982: } +LABELV $548 +line 983 +;983: strcpy(model, Info_ValueForKey( g_botInfos[i], "model" )); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $415 +ARGP4 +ADDRLP4 4108 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 2052 +ARGP4 +ADDRLP4 4108 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 984 +;984: if ( !*model ) { +ADDRLP4 2052 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $550 +line 985 +;985: strcpy(model, "visor/default"); +ADDRLP4 2052 +ARGP4 +ADDRGP4 $471 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 986 +;986: } +LABELV $550 +line 987 +;987: strcpy(personality, Info_ValueForKey( g_botInfos[i], "personality")); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $436 +ARGP4 +ADDRLP4 4112 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 3076 +ARGP4 +ADDRLP4 4112 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 988 +;988: if (!*personality ) { +ADDRLP4 3076 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $552 +line 989 +;989: strcpy(personality, "botfiles/default.jkb"); +ADDRLP4 3076 +ARGP4 +ADDRGP4 $488 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 990 +;990: } +LABELV $552 +line 991 +;991: trap_Printf(va("%-16s %-16s %-20s %-20s\n", name, model, personality, funname)); +ADDRGP4 $554 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 2052 +ARGP4 +ADDRLP4 3076 +ARGP4 +ADDRLP4 1028 +ARGP4 +ADDRLP4 4116 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 4116 +INDIRP4 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 992 +;992: } +LABELV $542 +line 974 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $544 +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_numBots +INDIRI4 +LTI4 $541 +line 993 +;993:} +LABELV $539 +endproc Svcmd_BotList_f 4120 20 +proc G_SpawnBots 1056 16 +line 1001 +;994: +;995: +;996:/* +;997:=============== +;998:G_SpawnBots +;999:=============== +;1000:*/ +;1001:static void G_SpawnBots( char *botList, int baseDelay ) { +line 1008 +;1002: char *bot; +;1003: char *p; +;1004: float skill; +;1005: int delay; +;1006: char bots[MAX_INFO_VALUE]; +;1007: +;1008: podium1 = NULL; +ADDRGP4 podium1 +CNSTP4 0 +ASGNP4 +line 1009 +;1009: podium2 = NULL; +ADDRGP4 podium2 +CNSTP4 0 +ASGNP4 +line 1010 +;1010: podium3 = NULL; +ADDRGP4 podium3 +CNSTP4 0 +ASGNP4 +line 1012 +;1011: +;1012: skill = trap_Cvar_VariableValue( "g_spSkill" ); +ADDRGP4 $272 +ARGP4 +ADDRLP4 1040 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 1040 +INDIRF4 +ASGNF4 +line 1013 +;1013: if( skill < 1 ) { +ADDRLP4 12 +INDIRF4 +CNSTF4 1065353216 +GEF4 $556 +line 1014 +;1014: trap_Cvar_Set( "g_spSkill", "1" ); +ADDRGP4 $272 +ARGP4 +ADDRGP4 $558 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1015 +;1015: skill = 1; +ADDRLP4 12 +CNSTF4 1065353216 +ASGNF4 +line 1016 +;1016: } +ADDRGP4 $557 +JUMPV +LABELV $556 +line 1017 +;1017: else if ( skill > 5 ) { +ADDRLP4 12 +INDIRF4 +CNSTF4 1084227584 +LEF4 $559 +line 1018 +;1018: trap_Cvar_Set( "g_spSkill", "5" ); +ADDRGP4 $272 +ARGP4 +ADDRGP4 $485 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1019 +;1019: skill = 5; +ADDRLP4 12 +CNSTF4 1084227584 +ASGNF4 +line 1020 +;1020: } +LABELV $559 +LABELV $557 +line 1022 +;1021: +;1022: Q_strncpyz( bots, botList, sizeof(bots) ); +ADDRLP4 16 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1023 +;1023: p = &bots[0]; +ADDRLP4 0 +ADDRLP4 16 +ASGNP4 +line 1024 +;1024: delay = baseDelay; +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRGP4 $562 +JUMPV +line 1025 +;1025: while( *p ) { +LABELV $564 +line 1027 +;1026: //skip spaces +;1027: while( *p && *p == ' ' ) { +line 1028 +;1028: p++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1029 +;1029: } +LABELV $565 +line 1027 +ADDRLP4 1044 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 1044 +INDIRI4 +CNSTI4 0 +EQI4 $567 +ADDRLP4 1044 +INDIRI4 +CNSTI4 32 +EQI4 $564 +LABELV $567 +line 1030 +;1030: if( !p ) { +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $568 +line 1031 +;1031: break; +ADDRGP4 $563 +JUMPV +LABELV $568 +line 1035 +;1032: } +;1033: +;1034: // mark start of bot name +;1035: bot = p; +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $571 +JUMPV +LABELV $570 +line 1038 +;1036: +;1037: // skip until space of null +;1038: while( *p && *p != ' ' ) { +line 1039 +;1039: p++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1040 +;1040: } +LABELV $571 +line 1038 +ADDRLP4 1048 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 1048 +INDIRI4 +CNSTI4 0 +EQI4 $573 +ADDRLP4 1048 +INDIRI4 +CNSTI4 32 +NEI4 $570 +LABELV $573 +line 1041 +;1041: if( *p ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $574 +line 1042 +;1042: *p++ = 0; +ADDRLP4 1052 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 1052 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 1052 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1043 +;1043: } +LABELV $574 +line 1047 +;1044: +;1045: // we must add the bot this way, calling G_AddBot directly at this stage +;1046: // does "Bad Things" +;1047: trap_SendConsoleCommand( EXEC_INSERT, va("addbot %s %f free %i\n", bot, skill, delay) ); +ADDRGP4 $576 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRF4 +ARGF4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 1052 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 1 +ARGI4 +ADDRLP4 1052 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendConsoleCommand +CALLV +pop +line 1049 +;1048: +;1049: delay += BOT_BEGIN_DELAY_INCREMENT; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1500 +ADDI4 +ASGNI4 +line 1050 +;1050: } +LABELV $562 +line 1025 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $565 +LABELV $563 +line 1051 +;1051:} +LABELV $555 +endproc G_SpawnBots 1056 16 +proc G_LoadBotsFromFile 8216 16 +line 1059 +;1052: +;1053: +;1054:/* +;1055:=============== +;1056:G_LoadBotsFromFile +;1057:=============== +;1058:*/ +;1059:static void G_LoadBotsFromFile( char *filename ) { +line 1064 +;1060: int len; +;1061: fileHandle_t f; +;1062: char buf[MAX_BOTS_TEXT]; +;1063: +;1064: len = trap_FS_FOpenFile( filename, &f, FS_READ ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 8200 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8200 +INDIRI4 +ASGNI4 +line 1065 +;1065: if ( !f ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $578 +line 1066 +;1066: trap_Printf( va( S_COLOR_RED "file not found: %s\n", filename ) ); +ADDRGP4 $112 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8204 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8204 +INDIRP4 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 1067 +;1067: return; +ADDRGP4 $577 +JUMPV +LABELV $578 +line 1069 +;1068: } +;1069: if ( len >= MAX_BOTS_TEXT ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 8192 +LTI4 $580 +line 1070 +;1070: trap_Printf( va( S_COLOR_RED "file too large: %s is %i, max allowed is %i", filename, len, MAX_BOTS_TEXT ) ); +ADDRGP4 $115 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +CNSTI4 8192 +ARGI4 +ADDRLP4 8204 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8204 +INDIRP4 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 1071 +;1071: trap_FS_FCloseFile( f ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 1072 +;1072: return; +ADDRGP4 $577 +JUMPV +LABELV $580 +line 1075 +;1073: } +;1074: +;1075: trap_FS_Read( buf, len, f ); +ADDRLP4 8 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 1076 +;1076: buf[len] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1077 +;1077: trap_FS_FCloseFile( f ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 1079 +;1078: +;1079: g_numBots += G_ParseInfos( buf, MAX_BOTS - g_numBots, &g_botInfos[g_numBots] ); +ADDRLP4 8 +ARGP4 +ADDRLP4 8204 +ADDRGP4 g_numBots +ASGNP4 +ADDRLP4 8208 +ADDRLP4 8204 +INDIRP4 +INDIRI4 +ASGNI4 +CNSTI4 1024 +ADDRLP4 8208 +INDIRI4 +SUBI4 +ARGI4 +ADDRLP4 8208 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +ARGP4 +ADDRLP4 8212 +ADDRGP4 G_ParseInfos +CALLI4 +ASGNI4 +ADDRLP4 8204 +INDIRP4 +ADDRLP4 8208 +INDIRI4 +ADDRLP4 8212 +INDIRI4 +ADDI4 +ASGNI4 +line 1080 +;1080:} +LABELV $577 +endproc G_LoadBotsFromFile 8216 16 +proc G_LoadBots 1456 16 +line 1087 +;1081: +;1082:/* +;1083:=============== +;1084:G_LoadBots +;1085:=============== +;1086:*/ +;1087:static void G_LoadBots( void ) { +line 1096 +;1088: vmCvar_t botsFile; +;1089: int numdirs; +;1090: char filename[128]; +;1091: char dirlist[1024]; +;1092: char* dirptr; +;1093: int i; +;1094: int dirlen; +;1095: +;1096: if ( !trap_Cvar_VariableIntegerValue( "bot_enable" ) ) { +ADDRGP4 $525 +ARGP4 +ADDRLP4 1440 +ADDRGP4 trap_Cvar_VariableIntegerValue +CALLI4 +ASGNI4 +ADDRLP4 1440 +INDIRI4 +CNSTI4 0 +NEI4 $583 +line 1097 +;1097: return; +ADDRGP4 $582 +JUMPV +LABELV $583 +line 1100 +;1098: } +;1099: +;1100: g_numBots = 0; +ADDRGP4 g_numBots +CNSTI4 0 +ASGNI4 +line 1102 +;1101: +;1102: trap_Cvar_Register( &botsFile, "g_botsFile", "", CVAR_INIT|CVAR_ROM ); +ADDRLP4 144 +ARGP4 +ADDRGP4 $585 +ARGP4 +ADDRGP4 $165 +ARGP4 +CNSTI4 80 +ARGI4 +ADDRGP4 trap_Cvar_Register +CALLV +pop +line 1103 +;1103: if( *botsFile.string ) { +ADDRLP4 144+16 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $586 +line 1104 +;1104: G_LoadBotsFromFile(botsFile.string); +ADDRLP4 144+16 +ARGP4 +ADDRGP4 G_LoadBotsFromFile +CALLV +pop +line 1105 +;1105: } +ADDRGP4 $587 +JUMPV +LABELV $586 +line 1106 +;1106: else { +line 1108 +;1107: //G_LoadBotsFromFile("scripts/bots.txt"); +;1108: G_LoadBotsFromFile("botfiles/bots.txt"); +ADDRGP4 $590 +ARGP4 +ADDRGP4 G_LoadBotsFromFile +CALLV +pop +line 1109 +;1109: } +LABELV $587 +line 1112 +;1110: +;1111: // get all bots from .bot files +;1112: numdirs = trap_FS_GetFileList("scripts", ".bot", dirlist, 1024 ); +ADDRGP4 $195 +ARGP4 +ADDRGP4 $591 +ARGP4 +ADDRLP4 416 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 1444 +ADDRGP4 trap_FS_GetFileList +CALLI4 +ASGNI4 +ADDRLP4 140 +ADDRLP4 1444 +INDIRI4 +ASGNI4 +line 1113 +;1113: dirptr = dirlist; +ADDRLP4 0 +ADDRLP4 416 +ASGNP4 +line 1114 +;1114: for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { +ADDRLP4 132 +CNSTI4 0 +ASGNI4 +ADDRGP4 $595 +JUMPV +LABELV $592 +line 1115 +;1115: dirlen = strlen(dirptr); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 1448 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 136 +ADDRLP4 1448 +INDIRI4 +ASGNI4 +line 1116 +;1116: strcpy(filename, "scripts/"); +ADDRLP4 4 +ARGP4 +ADDRGP4 $201 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1117 +;1117: strcat(filename, dirptr); +ADDRLP4 4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcat +CALLP4 +pop +line 1118 +;1118: G_LoadBotsFromFile(filename); +ADDRLP4 4 +ARGP4 +ADDRGP4 G_LoadBotsFromFile +CALLV +pop +line 1119 +;1119: } +LABELV $593 +line 1114 +ADDRLP4 1448 +CNSTI4 1 +ASGNI4 +ADDRLP4 132 +ADDRLP4 132 +INDIRI4 +ADDRLP4 1448 +INDIRI4 +ADDI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 136 +INDIRI4 +ADDRLP4 1448 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ASGNP4 +LABELV $595 +ADDRLP4 132 +INDIRI4 +ADDRLP4 140 +INDIRI4 +LTI4 $592 +line 1120 +;1120: trap_Printf( va( "%i bots parsed\n", g_numBots ) ); +ADDRGP4 $596 +ARGP4 +ADDRGP4 g_numBots +INDIRI4 +ARGI4 +ADDRLP4 1452 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1452 +INDIRP4 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 1121 +;1121:} +LABELV $582 +endproc G_LoadBots 1456 16 +export G_GetBotInfoByNumber +proc G_GetBotInfoByNumber 8 8 +line 1130 +;1122: +;1123: +;1124: +;1125:/* +;1126:=============== +;1127:G_GetBotInfoByNumber +;1128:=============== +;1129:*/ +;1130:char *G_GetBotInfoByNumber( int num ) { +line 1131 +;1131: if( num < 0 || num >= g_numBots ) { +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +LTI4 $600 +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_numBots +INDIRI4 +LTI4 $598 +LABELV $600 +line 1132 +;1132: trap_Printf( va( S_COLOR_RED "Invalid bot number: %i\n", num ) ); +ADDRGP4 $601 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_Printf +CALLV +pop +line 1133 +;1133: return NULL; +CNSTP4 0 +RETP4 +ADDRGP4 $597 +JUMPV +LABELV $598 +line 1135 +;1134: } +;1135: return g_botInfos[num]; +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +RETP4 +LABELV $597 +endproc G_GetBotInfoByNumber 8 8 +export G_GetBotInfoByName +proc G_GetBotInfoByName 16 8 +line 1144 +;1136:} +;1137: +;1138: +;1139:/* +;1140:=============== +;1141:G_GetBotInfoByName +;1142:=============== +;1143:*/ +;1144:char *G_GetBotInfoByName( const char *name ) { +line 1148 +;1145: int n; +;1146: char *value; +;1147: +;1148: for ( n = 0; n < g_numBots ; n++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $606 +JUMPV +LABELV $603 +line 1149 +;1149: value = Info_ValueForKey( g_botInfos[n], "name" ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $229 +ARGP4 +ADDRLP4 8 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 1150 +;1150: if ( !Q_stricmp( value, name ) ) { +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $607 +line 1151 +;1151: return g_botInfos[n]; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 g_botInfos +ADDP4 +INDIRP4 +RETP4 +ADDRGP4 $602 +JUMPV +LABELV $607 +line 1153 +;1152: } +;1153: } +LABELV $604 +line 1148 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $606 +ADDRLP4 0 +INDIRI4 +ADDRGP4 g_numBots +INDIRI4 +LTI4 $603 +line 1155 +;1154: +;1155: return NULL; +CNSTP4 0 +RETP4 +LABELV $602 +endproc G_GetBotInfoByName 16 8 +export G_InitBots +proc G_InitBots 1148 16 +line 1167 +;1156:} +;1157: +;1158://rww - pd +;1159:void LoadPath_ThisLevel(void); +;1160://end rww +;1161: +;1162:/* +;1163:=============== +;1164:G_InitBots +;1165:=============== +;1166:*/ +;1167:void G_InitBots( qboolean restart ) { +line 1176 +;1168: int fragLimit; +;1169: int timeLimit; +;1170: const char *arenainfo; +;1171: char *strValue; +;1172: int basedelay; +;1173: char map[MAX_QPATH]; +;1174: char serverinfo[MAX_INFO_STRING]; +;1175: +;1176: G_LoadBots(); +ADDRGP4 G_LoadBots +CALLV +pop +line 1177 +;1177: G_LoadArenas(); +ADDRGP4 G_LoadArenas +CALLV +pop +line 1179 +;1178: +;1179: trap_Cvar_Register( &bot_minplayers, "bot_minplayers", "0", CVAR_SERVERINFO ); +ADDRGP4 bot_minplayers +ARGP4 +ADDRGP4 $610 +ARGP4 +ADDRGP4 $611 +ARGP4 +CNSTI4 4 +ARGI4 +ADDRGP4 trap_Cvar_Register +CALLV +pop +line 1182 +;1180: +;1181: //rww - new bot route stuff +;1182: LoadPath_ThisLevel(); +ADDRGP4 LoadPath_ThisLevel +CALLV +pop +line 1185 +;1183: //end rww +;1184: +;1185: if( g_gametype.integer == GT_SINGLE_PLAYER ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 4 +NEI4 $612 +line 1186 +;1186: trap_GetServerinfo( serverinfo, sizeof(serverinfo) ); +ADDRLP4 80 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetServerinfo +CALLV +pop +line 1187 +;1187: Q_strncpyz( map, Info_ValueForKey( serverinfo, "mapname" ), sizeof(map) ); +ADDRLP4 80 +ARGP4 +ADDRGP4 $164 +ARGP4 +ADDRLP4 1108 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 16 +ARGP4 +ADDRLP4 1108 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1188 +;1188: arenainfo = G_GetArenaInfoByMap( map ); +ADDRLP4 16 +ARGP4 +ADDRLP4 1112 +ADDRGP4 G_GetArenaInfoByMap +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 1112 +INDIRP4 +ASGNP4 +line 1189 +;1189: if ( !arenainfo ) { +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $615 +line 1190 +;1190: return; +ADDRGP4 $609 +JUMPV +LABELV $615 +line 1193 +;1191: } +;1192: +;1193: strValue = Info_ValueForKey( arenainfo, "fraglimit" ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $617 +ARGP4 +ADDRLP4 1116 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 1116 +INDIRP4 +ASGNP4 +line 1194 +;1194: fragLimit = atoi( strValue ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 1120 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 1120 +INDIRI4 +ASGNI4 +line 1195 +;1195: if ( fragLimit ) { +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $618 +line 1196 +;1196: trap_Cvar_Set( "fraglimit", strValue ); +ADDRGP4 $617 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1197 +;1197: } +ADDRGP4 $619 +JUMPV +LABELV $618 +line 1198 +;1198: else { +line 1199 +;1199: trap_Cvar_Set( "fraglimit", "0" ); +ADDRGP4 $617 +ARGP4 +ADDRGP4 $611 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1200 +;1200: } +LABELV $619 +line 1202 +;1201: +;1202: strValue = Info_ValueForKey( arenainfo, "timelimit" ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $620 +ARGP4 +ADDRLP4 1124 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 1124 +INDIRP4 +ASGNP4 +line 1203 +;1203: timeLimit = atoi( strValue ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 1128 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 1128 +INDIRI4 +ASGNI4 +line 1204 +;1204: if ( timeLimit ) { +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $621 +line 1205 +;1205: trap_Cvar_Set( "timelimit", strValue ); +ADDRGP4 $620 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1206 +;1206: } +ADDRGP4 $622 +JUMPV +LABELV $621 +line 1207 +;1207: else { +line 1208 +;1208: trap_Cvar_Set( "timelimit", "0" ); +ADDRGP4 $620 +ARGP4 +ADDRGP4 $611 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1209 +;1209: } +LABELV $622 +line 1211 +;1210: +;1211: if ( !fragLimit && !timeLimit ) { +ADDRLP4 1132 +CNSTI4 0 +ASGNI4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 1132 +INDIRI4 +NEI4 $623 +ADDRLP4 12 +INDIRI4 +ADDRLP4 1132 +INDIRI4 +NEI4 $623 +line 1212 +;1212: trap_Cvar_Set( "fraglimit", "10" ); +ADDRGP4 $617 +ARGP4 +ADDRGP4 $625 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1213 +;1213: trap_Cvar_Set( "timelimit", "0" ); +ADDRGP4 $620 +ARGP4 +ADDRGP4 $611 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 1214 +;1214: } +LABELV $623 +line 1216 +;1215: +;1216: basedelay = BOT_BEGIN_DELAY_BASE; +ADDRLP4 1104 +CNSTI4 2000 +ASGNI4 +line 1217 +;1217: strValue = Info_ValueForKey( arenainfo, "special" ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $626 +ARGP4 +ADDRLP4 1136 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 1136 +INDIRP4 +ASGNP4 +line 1218 +;1218: if( Q_stricmp( strValue, "training" ) == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $629 +ARGP4 +ADDRLP4 1140 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 1140 +INDIRI4 +CNSTI4 0 +NEI4 $627 +line 1219 +;1219: basedelay += 10000; +ADDRLP4 1104 +ADDRLP4 1104 +INDIRI4 +CNSTI4 10000 +ADDI4 +ASGNI4 +line 1220 +;1220: } +LABELV $627 +line 1222 +;1221: +;1222: if( !restart ) { +ADDRFP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $630 +line 1223 +;1223: G_SpawnBots( Info_ValueForKey( arenainfo, "bots" ), basedelay ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $632 +ARGP4 +ADDRLP4 1144 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1144 +INDIRP4 +ARGP4 +ADDRLP4 1104 +INDIRI4 +ARGI4 +ADDRGP4 G_SpawnBots +CALLV +pop +line 1224 +;1224: } +LABELV $630 +line 1225 +;1225: } +LABELV $612 +line 1226 +;1226:} +LABELV $609 +endproc G_InitBots 1148 16 +import LoadPath_ThisLevel +import podium3 +import podium2 +import podium1 +bss +export bot_minplayers +align 4 +LABELV bot_minplayers +skip 272 +align 4 +LABELV botSpawnQueue +skip 128 +align 4 +LABELV g_arenaInfos +skip 4096 +export g_numArenas +align 4 +LABELV g_numArenas +skip 4 +align 4 +LABELV g_botInfos +skip 4096 +align 4 +LABELV g_numBots +skip 4 +import trap_ROFF_Purge_Ent +import trap_ROFF_Play +import trap_ROFF_Cache +import trap_ROFF_UpdateEntities +import trap_ROFF_Clean +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_SnapVector +import trap_GeneticParentsAndChildSelection +import trap_BotResetWeaponState +import trap_BotFreeWeaponState +import trap_BotAllocWeaponState +import trap_BotLoadWeaponWeights +import trap_BotGetWeaponInfo +import trap_BotChooseBestFightWeapon +import trap_BotAddAvoidSpot +import trap_BotInitMoveState +import trap_BotFreeMoveState +import trap_BotAllocMoveState +import trap_BotPredictVisiblePosition +import trap_BotMovementViewTarget +import trap_BotReachabilityArea +import trap_BotResetLastAvoidReach +import trap_BotResetAvoidReach +import trap_BotMoveInDirection +import trap_BotMoveToGoal +import trap_BotResetMoveState +import trap_BotFreeGoalState +import trap_BotAllocGoalState +import trap_BotMutateGoalFuzzyLogic +import trap_BotSaveGoalFuzzyLogic +import trap_BotInterbreedGoalFuzzyLogic +import trap_BotFreeItemWeights +import trap_BotLoadItemWeights +import trap_BotUpdateEntityItems +import trap_BotInitLevelItems +import trap_BotSetAvoidGoalTime +import trap_BotAvoidGoalTime +import trap_BotGetLevelItemGoal +import trap_BotGetMapLocationGoal +import trap_BotGetNextCampSpotGoal +import trap_BotItemGoalInVisButNotVisible +import trap_BotTouchingGoal +import trap_BotChooseNBGItem +import trap_BotChooseLTGItem +import trap_BotGetSecondGoal +import trap_BotGetTopGoal +import trap_BotGoalName +import trap_BotDumpGoalStack +import trap_BotDumpAvoidGoals +import trap_BotEmptyGoalStack +import trap_BotPopGoal +import trap_BotPushGoal +import trap_BotResetAvoidGoals +import trap_BotRemoveFromAvoidGoals +import trap_BotResetGoalState +import trap_BotSetChatName +import trap_BotSetChatGender +import trap_BotLoadChatFile +import trap_BotReplaceSynonyms +import trap_UnifyWhiteSpaces +import trap_BotMatchVariable +import trap_BotFindMatch +import trap_StringContains +import trap_BotGetChatMessage +import trap_BotEnterChat +import trap_BotChatLength +import trap_BotReplyChat +import trap_BotNumInitialChats +import trap_BotInitialChat +import trap_BotNumConsoleMessages +import trap_BotNextConsoleMessage +import trap_BotRemoveConsoleMessage +import trap_BotQueueConsoleMessage +import trap_BotFreeChatState +import trap_BotAllocChatState +import trap_Characteristic_String +import trap_Characteristic_BInteger +import trap_Characteristic_Integer +import trap_Characteristic_BFloat +import trap_Characteristic_Float +import trap_BotFreeCharacter +import trap_BotLoadCharacter +import trap_EA_ResetInput +import trap_EA_GetInput +import trap_EA_EndRegular +import trap_EA_ForcePower +import trap_EA_Alt_Attack +import trap_EA_View +import trap_EA_Move +import trap_EA_DelayedJump +import trap_EA_Jump +import trap_EA_SelectWeapon +import trap_EA_MoveRight +import trap_EA_MoveLeft +import trap_EA_MoveBack +import trap_EA_MoveForward +import trap_EA_MoveDown +import trap_EA_MoveUp +import trap_EA_Crouch +import trap_EA_Respawn +import trap_EA_Use +import trap_EA_Attack +import trap_EA_Talk +import trap_EA_Gesture +import trap_EA_Action +import trap_EA_Command +import trap_EA_SayTeam +import trap_EA_Say +import trap_AAS_PredictClientMovement +import trap_AAS_Swimming +import trap_AAS_AlternativeRouteGoals +import trap_AAS_PredictRoute +import trap_AAS_EnableRoutingArea +import trap_AAS_AreaTravelTimeToGoalArea +import trap_AAS_AreaReachability +import trap_AAS_IntForBSPEpairKey +import trap_AAS_FloatForBSPEpairKey +import trap_AAS_VectorForBSPEpairKey +import trap_AAS_ValueForBSPEpairKey +import trap_AAS_NextBSPEntity +import trap_AAS_PointContents +import trap_AAS_TraceAreas +import trap_AAS_PointReachabilityAreaIndex +import trap_AAS_PointAreaNum +import trap_AAS_Time +import trap_AAS_PresenceTypeBoundingBox +import trap_AAS_Initialized +import trap_AAS_EntityInfo +import trap_AAS_AreaInfo +import trap_AAS_BBoxAreas +import trap_BotUserCommand +import trap_BotGetServerCommand +import trap_BotGetSnapshotEntity +import trap_BotLibTest +import trap_BotLibUpdateEntity +import trap_BotLibLoadMap +import trap_BotLibStartFrame +import trap_BotLibDefine +import trap_BotLibVarGet +import trap_BotLibVarSet +import trap_BotLibShutdown +import trap_BotLibSetup +import trap_DebugPolygonDelete +import trap_DebugPolygonCreate +import trap_GetEntityToken +import trap_GetUsercmd +import trap_BotFreeClient +import trap_BotAllocateClient +import trap_EntityContact +import trap_EntitiesInBox +import trap_UnlinkEntity +import trap_LinkEntity +import trap_AreasConnected +import trap_AdjustAreaPortalState +import trap_InPVSIgnorePortals +import trap_InPVS +import trap_PointContents +import trap_Trace +import trap_SetBrushModel +import trap_GetServerinfo +import trap_SetUserinfo +import trap_GetUserinfo +import trap_GetConfigstring +import trap_SetConfigstring +import trap_SendServerCommand +import trap_DropClient +import trap_LocateGameData +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableIntegerValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_SendConsoleCommand +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Args +import trap_Argv +import trap_Argc +import trap_Milliseconds +import trap_Error +import trap_Printf +import g_timeouttospec +import g_forceDodge +import g_dismember +import g_singlePlayer +import g_enableBreath +import g_enableDust +import g_rankings +import pmove_msec +import pmove_fixed +import g_smoothClients +import g_blueteam +import g_redteam +import g_debugUp +import g_debugRight +import g_debugForward +import g_filterBan +import g_banIPs +import g_teamForceBalance +import g_teamAutoJoin +import g_allowVote +import g_blood +import g_doWarmup +import g_warmup +import g_motd +import g_synchronousClients +import g_adaptRespawn +import g_weaponTeamRespawn +import g_weaponRespawn +import g_debugDamage +import g_debugAlloc +import g_debugMove +import g_inactivity +import g_forcerespawn +import g_quadfactor +import g_knockback +import g_speed +import g_gravity +import g_needpass +import g_password +import g_friendlySaber +import g_friendlyFire +import g_saberInterpolate +import g_capturelimit +import g_timelimit +import g_duel_fraglimit +import g_fraglimit +import g_duelWeaponDisable +import g_weaponDisable +import g_forcePowerDisable +import g_spawnInvulnerability +import g_forceRegenTime +import g_saberLocking +import g_privateDuel +import g_forceBasedTeams +import g_maxForceRank +import g_dmflags +import g_autoMapCycle +import g_restarted +import g_maxGameClients +import g_maxclients +import g_cheats +import g_dedicated +import g_gametype +import g_entities +import level +import Pickup_Team +import CheckTeamStatus +import TeamplayInfoMessage +import Team_GetLocationMsg +import Team_GetLocation +import SelectSagaSpawnPoint +import SelectCTFSpawnPoint +import Team_FreeEntity +import Team_ReturnFlag +import Team_InitGame +import Team_CheckHurtCarrier +import Team_FragBonuses +import Team_DroppedFlagThink +import AddTeamScore +import TeamColorString +import OtherTeamName +import TeamName +import OtherTeam +import BotAIStartFrame +import BotAIShutdownClient +import BotAISetupClient +import BotAILoadMap +import BotAIShutdown +import BotAISetup +import B_CleanupAlloc +import B_InitAlloc +import InFieldOfVision +import BotOrder +import OrgVisible +import InitSagaMode +import G_ClearClientLog +import G_LogExit +import G_LogWeaponOutput +import G_LogWeaponInit +import G_LogWeaponItem +import G_LogWeaponPowerup +import G_LogWeaponFrag +import G_LogWeaponDeath +import G_LogWeaponKill +import G_LogWeaponDamage +import G_LogWeaponFire +import G_LogWeaponPickup +import Jedi_DodgeEvasion +import ForceTelepathy +import ForceThrow +import ForceSeeing +import ForceTeamForceReplenish +import ForceTeamHeal +import ForceAbsorb +import ForceProtect +import ForceGrip +import ForceRage +import ForceSpeed +import ForceHeal +import ForcePowerUsableOn +import WP_ForcePowersUpdate +import WP_SpawnInitForcePowers +import WP_InitForcePowers +import WP_SaberInitBladeData +import WP_SaberCanBlock +import WP_SaberPositionUpdate +import WP_ForcePowerStop +import HasSetSaberOnly +import G_PreDefSound +import BotInterbreedEndMatch +import UpdateTournamentInfo +import G_WriteSessionData +import G_InitWorldSession +import G_InitSessionData +import G_ReadSessionData +import Svcmd_GameMem_f +import G_InitMemory +import G_Alloc +import Team_CheckDroppedItem +import OnSameTeam +import G_RunClient +import ClientEndFrame +import ClientThink +import G_CheckClientTimeouts +import ClientCommand +import ClientBegin +import ClientDisconnect +import ClientUserinfoChanged +import ClientConnect +import G_GetStripEdString +import G_Error +import G_Printf +import SendScoreboardMessageToAllClients +import G_LogPrintf +import G_RunThink +import CheckTeamLeader +import SetLeader +import FindIntermissionPoint +import g_ff_objectives +import DeathmatchScoreboardMessage +import G_SetStats +import MoveClientToIntermission +import BlowDetpacks +import FireWeapon +import G_FilterPacket +import G_ProcessIPBans +import ConsoleCommand +import gJMSaberEnt +import SpotWouldTelefrag +import CalculateRanks +import AddScore +import player_die +import ClientSpawn +import InitBodyQue +import BeginIntermission +import respawn +import CopyToBodyQue +import SelectSpawnPoint +import SetClientViewAngle +import PickTeam +import TeamLeader +import TeamCount +import CheckGauntletAttack +import SnapVectorTowards +import CalcMuzzlePoint +import LogAccuracyHit +import WP_FireGenericBlasterMissile +import WP_FireTurretMissile +import G_PlayerBecomeATST +import ATST_ManageDamageBoxes +import TeleportPlayer +import trigger_teleporter_touch +import Touch_DoorTrigger +import G_RunMover +import WP_FireBlasterMissile +import G_ExplodeMissile +import G_BounceProjectile +import CreateMissile +import G_RunMissile +import G_ReflectMissile +import ExplodeDeath +import TossClientCubes +import TossClientItems +import TossClientWeapon +import body_die +import G_RadiusDamage +import G_Damage +import CanDamage +import trap_G2API_SetBoneAnim +import trap_G2API_GetGLAName +import trap_G2API_SetBoneAngles +import trap_G2API_CleanGhoul2Models +import trap_G2API_RemoveGhoul2Model +import trap_G2API_HasGhoul2ModelOnIndex +import trap_G2API_DuplicateGhoul2Instance +import trap_G2API_CopySpecificGhoul2Model +import trap_G2API_CopyGhoul2Instance +import trap_G2API_SetBoltInfo +import trap_G2API_AddBolt +import trap_G2API_InitGhoul2Model +import trap_G2API_GetBoltMatrix_NoReconstruct +import trap_G2API_GetBoltMatrix +import trap_G2_HaveWeGhoul2Models +import trap_G2_SetGhoul2ModelIndexes +import trap_G2_ListModelBones +import trap_G2_ListModelSurfaces +import G_SkinIndex +import BuildShaderStateConfig +import AddRemap +import G_SetOrigin +import G_AddEvent +import G_AddPredictableEvent +import vtos +import tv +import G_RunObject +import G_TouchSolids +import G_TouchTriggers +import G_EntitiesFree +import G_FreeEntity +import G_KillG2Queue +import G_SendG2KillQueue +import TryUse +import G_EntitySound +import G_SoundAtLoc +import G_Sound +import G_MuteSound +import G_ScreenShake +import G_PlayEffect +import G_TempEntity +import G_Spawn +import G_InitGentity +import G_SetAngles +import G_SetMovedir +import G_UseTargets +import G_PickTarget +import G_RadiusList +import G_Find +import G_KillBox +import G_TeamCommand +import G_EffectIndex +import G_SoundIndex +import G_ModelIndex +import SaveRegisteredItems +import RegisterItem +import ClearRegisteredItems +import Touch_Item +import Add_Ammo +import ArmorIndex +import Think_Weapon +import FinishSpawningItem +import G_SpawnItem +import SetRespawn +import LaunchItem +import Drop_Item +import PrecacheItem +import UseHoldableItem +import RespawnItem +import G_RunItem +import G_CheckTeamItems +import ItemUse_MedPack +import ItemUse_Seeker +import ItemUse_Sentry +import ItemUse_Shield +import ItemUse_Binoculars +import G_GetDuelWinner +import Cmd_EngageDuel_f +import Cmd_ToggleSaber_f +import G_ItemUsable +import Cmd_SaberAttackCycle_f +import Cmd_FollowCycle_f +import SetTeam +import BroadcastTeamChange +import StopFollowing +import Cmd_Score_f +import G_NewString +import G_SpawnEntitiesFromString +import G_SpawnVector +import G_SpawnInt +import G_SpawnFloat +import G_SpawnString +import g2SaberInstance +import precachedKyle +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $632 +char 1 98 +char 1 111 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $629 +char 1 116 +char 1 114 +char 1 97 +char 1 105 +char 1 110 +char 1 105 +char 1 110 +char 1 103 +char 1 0 +align 1 +LABELV $626 +char 1 115 +char 1 112 +char 1 101 +char 1 99 +char 1 105 +char 1 97 +char 1 108 +char 1 0 +align 1 +LABELV $625 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $620 +char 1 116 +char 1 105 +char 1 109 +char 1 101 +char 1 108 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $617 +char 1 102 +char 1 114 +char 1 97 +char 1 103 +char 1 108 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $611 +char 1 48 +char 1 0 +align 1 +LABELV $610 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 109 +char 1 105 +char 1 110 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 115 +char 1 0 +align 1 +LABELV $601 +char 1 94 +char 1 49 +char 1 73 +char 1 110 +char 1 118 +char 1 97 +char 1 108 +char 1 105 +char 1 100 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 32 +char 1 110 +char 1 117 +char 1 109 +char 1 98 +char 1 101 +char 1 114 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 0 +align 1 +LABELV $596 +char 1 37 +char 1 105 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 115 +char 1 32 +char 1 112 +char 1 97 +char 1 114 +char 1 115 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $591 +char 1 46 +char 1 98 +char 1 111 +char 1 116 +char 1 0 +align 1 +LABELV $590 +char 1 98 +char 1 111 +char 1 116 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 115 +char 1 47 +char 1 98 +char 1 111 +char 1 116 +char 1 115 +char 1 46 +char 1 116 +char 1 120 +char 1 116 +char 1 0 +align 1 +LABELV $585 +char 1 103 +char 1 95 +char 1 98 +char 1 111 +char 1 116 +char 1 115 +char 1 70 +char 1 105 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $576 +char 1 97 +char 1 100 +char 1 100 +char 1 98 +char 1 111 +char 1 116 +char 1 32 +char 1 37 +char 1 115 +char 1 32 +char 1 37 +char 1 102 +char 1 32 +char 1 102 +char 1 114 +char 1 101 +char 1 101 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 0 +align 1 +LABELV $558 +char 1 49 +char 1 0 +align 1 +LABELV $554 +char 1 37 +char 1 45 +char 1 49 +char 1 54 +char 1 115 +char 1 32 +char 1 37 +char 1 45 +char 1 49 +char 1 54 +char 1 115 +char 1 32 +char 1 37 +char 1 45 +char 1 50 +char 1 48 +char 1 115 +char 1 32 +char 1 37 +char 1 45 +char 1 50 +char 1 48 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $547 +char 1 80 +char 1 97 +char 1 100 +char 1 97 +char 1 119 +char 1 97 +char 1 110 +char 1 0 +align 1 +LABELV $540 +char 1 94 +char 1 49 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 112 +char 1 101 +char 1 114 +char 1 115 +char 1 111 +char 1 110 +char 1 97 +char 1 108 +char 1 105 +char 1 116 +char 1 121 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 32 +char 1 102 +char 1 117 +char 1 110 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 10 +char 1 0 +align 1 +LABELV $538 +char 1 108 +char 1 111 +char 1 97 +char 1 100 +char 1 100 +char 1 101 +char 1 102 +char 1 101 +char 1 114 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $537 +char 1 99 +char 1 108 +char 1 95 +char 1 114 +char 1 117 +char 1 110 +char 1 110 +char 1 105 +char 1 110 +char 1 103 +char 1 0 +align 1 +LABELV $528 +char 1 85 +char 1 115 +char 1 97 +char 1 103 +char 1 101 +char 1 58 +char 1 32 +char 1 65 +char 1 100 +char 1 100 +char 1 98 +char 1 111 +char 1 116 +char 1 32 +char 1 60 +char 1 98 +char 1 111 +char 1 116 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 62 +char 1 32 +char 1 91 +char 1 115 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 32 +char 1 49 +char 1 45 +char 1 53 +char 1 93 +char 1 32 +char 1 91 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 93 +char 1 32 +char 1 91 +char 1 109 +char 1 115 +char 1 101 +char 1 99 +char 1 32 +char 1 100 +char 1 101 +char 1 108 +char 1 97 +char 1 121 +char 1 93 +char 1 32 +char 1 91 +char 1 97 +char 1 108 +char 1 116 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 93 +char 1 10 +char 1 0 +align 1 +LABELV $525 +char 1 98 +char 1 111 +char 1 116 +char 1 95 +char 1 101 +char 1 110 +char 1 97 +char 1 98 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $519 +char 1 66 +char 1 108 +char 1 117 +char 1 101 +char 1 0 +align 1 +LABELV $518 +char 1 82 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $502 +char 1 37 +char 1 53 +char 1 46 +char 1 50 +char 1 102 +char 1 0 +align 1 +LABELV $493 +char 1 85 +char 1 78 +char 1 65 +char 1 66 +char 1 76 +char 1 69 +char 1 95 +char 1 84 +char 1 79 +char 1 95 +char 1 65 +char 1 68 +char 1 68 +char 1 95 +char 1 66 +char 1 79 +char 1 84 +char 1 0 +align 1 +LABELV $492 +char 1 83 +char 1 86 +char 1 73 +char 1 78 +char 1 71 +char 1 65 +char 1 77 +char 1 69 +char 1 0 +align 1 +LABELV $491 +char 1 112 +char 1 114 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 10 +char 1 34 +char 1 0 +align 1 +LABELV $488 +char 1 98 +char 1 111 +char 1 116 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 115 +char 1 47 +char 1 100 +char 1 101 +char 1 102 +char 1 97 +char 1 117 +char 1 108 +char 1 116 +char 1 46 +char 1 106 +char 1 107 +char 1 98 +char 1 0 +align 1 +LABELV $485 +char 1 53 +char 1 0 +align 1 +LABELV $482 +char 1 99 +char 1 111 +char 1 108 +char 1 111 +char 1 114 +char 1 50 +char 1 0 +align 1 +LABELV $481 +char 1 52 +char 1 0 +align 1 +LABELV $478 +char 1 99 +char 1 111 +char 1 108 +char 1 111 +char 1 114 +char 1 49 +char 1 0 +align 1 +LABELV $477 +char 1 115 +char 1 101 +char 1 120 +char 1 0 +align 1 +LABELV $476 +char 1 109 +char 1 97 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $473 +char 1 103 +char 1 101 +char 1 110 +char 1 100 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $472 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 0 +align 1 +LABELV $471 +char 1 118 +char 1 105 +char 1 115 +char 1 111 +char 1 114 +char 1 47 +char 1 100 +char 1 101 +char 1 102 +char 1 97 +char 1 117 +char 1 108 +char 1 116 +char 1 0 +align 1 +LABELV $468 +char 1 57 +char 1 48 +char 1 0 +align 1 +LABELV $465 +char 1 55 +char 1 48 +char 1 0 +align 1 +LABELV $462 +char 1 53 +char 1 48 +char 1 0 +align 1 +LABELV $461 +char 1 104 +char 1 97 +char 1 110 +char 1 100 +char 1 105 +char 1 99 +char 1 97 +char 1 112 +char 1 0 +align 1 +LABELV $458 +char 1 37 +char 1 49 +char 1 46 +char 1 50 +char 1 102 +char 1 0 +align 1 +LABELV $457 +char 1 50 +char 1 48 +char 1 0 +align 1 +LABELV $456 +char 1 115 +char 1 110 +char 1 97 +char 1 112 +char 1 115 +char 1 0 +align 1 +LABELV $455 +char 1 50 +char 1 53 +char 1 48 +char 1 48 +char 1 48 +char 1 0 +align 1 +LABELV $454 +char 1 114 +char 1 97 +char 1 116 +char 1 101 +char 1 0 +align 1 +LABELV $449 +char 1 102 +char 1 117 +char 1 110 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $448 +char 1 94 +char 1 49 +char 1 69 +char 1 114 +char 1 114 +char 1 111 +char 1 114 +char 1 58 +char 1 32 +char 1 66 +char 1 111 +char 1 116 +char 1 32 +char 1 39 +char 1 37 +char 1 115 +char 1 39 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 100 +char 1 101 +char 1 102 +char 1 105 +char 1 110 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $444 +char 1 66 +char 1 111 +char 1 116 +char 1 65 +char 1 73 +char 1 83 +char 1 101 +char 1 116 +char 1 117 +char 1 112 +char 1 67 +char 1 108 +char 1 105 +char 1 101 +char 1 110 +char 1 116 +char 1 32 +char 1 102 +char 1 97 +char 1 105 +char 1 108 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $440 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 0 +align 1 +LABELV $438 +char 1 115 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $436 +char 1 112 +char 1 101 +char 1 114 +char 1 115 +char 1 111 +char 1 110 +char 1 97 +char 1 108 +char 1 105 +char 1 116 +char 1 121 +char 1 0 +align 1 +LABELV $426 +char 1 94 +char 1 51 +char 1 85 +char 1 110 +char 1 97 +char 1 98 +char 1 108 +char 1 101 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 100 +char 1 101 +char 1 108 +char 1 97 +char 1 121 +char 1 32 +char 1 115 +char 1 112 +char 1 97 +char 1 119 +char 1 110 +char 1 10 +char 1 0 +align 1 +LABELV $415 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 0 +align 1 +LABELV $295 +char 1 107 +char 1 105 +char 1 99 +char 1 107 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $280 +char 1 97 +char 1 100 +char 1 100 +char 1 98 +char 1 111 +char 1 116 +char 1 32 +char 1 37 +char 1 115 +char 1 32 +char 1 37 +char 1 102 +char 1 32 +char 1 37 +char 1 115 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 0 +align 1 +LABELV $278 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 0 +align 1 +LABELV $275 +char 1 114 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $272 +char 1 103 +char 1 95 +char 1 115 +char 1 112 +char 1 83 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $229 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $223 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 97 +char 1 110 +char 1 110 +char 1 111 +char 1 117 +char 1 110 +char 1 99 +char 1 101 +char 1 47 +char 1 37 +char 1 115 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 10 +char 1 0 +align 1 +LABELV $222 +char 1 100 +char 1 101 +char 1 102 +char 1 97 +char 1 117 +char 1 108 +char 1 116 +char 1 0 +align 1 +LABELV $208 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $207 +char 1 110 +char 1 117 +char 1 109 +char 1 0 +align 1 +LABELV $202 +char 1 37 +char 1 105 +char 1 32 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 115 +char 1 32 +char 1 112 +char 1 97 +char 1 114 +char 1 115 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $201 +char 1 115 +char 1 99 +char 1 114 +char 1 105 +char 1 112 +char 1 116 +char 1 115 +char 1 47 +char 1 0 +align 1 +LABELV $196 +char 1 46 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 0 +align 1 +LABELV $195 +char 1 115 +char 1 99 +char 1 114 +char 1 105 +char 1 112 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $194 +char 1 115 +char 1 99 +char 1 114 +char 1 105 +char 1 112 +char 1 116 +char 1 115 +char 1 47 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 115 +char 1 46 +char 1 116 +char 1 120 +char 1 116 +char 1 0 +align 1 +LABELV $189 +char 1 103 +char 1 95 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 115 +char 1 70 +char 1 105 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $187 +char 1 109 +char 1 97 +char 1 112 +char 1 32 +char 1 37 +char 1 115 +char 1 0 +align 1 +LABELV $186 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 114 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 116 +char 1 32 +char 1 48 +char 1 0 +align 1 +LABELV $185 +char 1 110 +char 1 101 +char 1 120 +char 1 116 +char 1 109 +char 1 97 +char 1 112 +char 1 0 +align 1 +LABELV $165 +char 1 0 +align 1 +LABELV $164 +char 1 109 +char 1 97 +char 1 112 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $155 +char 1 116 +char 1 121 +char 1 112 +char 1 101 +char 1 0 +align 1 +LABELV $150 +char 1 109 +char 1 97 +char 1 112 +char 1 0 +align 1 +LABELV $139 +char 1 99 +char 1 116 +char 1 121 +char 1 0 +align 1 +LABELV $136 +char 1 99 +char 1 116 +char 1 102 +char 1 0 +align 1 +LABELV $133 +char 1 115 +char 1 97 +char 1 103 +char 1 97 +char 1 0 +align 1 +LABELV $130 +char 1 100 +char 1 117 +char 1 101 +char 1 108 +char 1 0 +align 1 +LABELV $127 +char 1 106 +char 1 101 +char 1 100 +char 1 105 +char 1 109 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $124 +char 1 104 +char 1 111 +char 1 108 +char 1 111 +char 1 99 +char 1 114 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $121 +char 1 102 +char 1 102 +char 1 97 +char 1 0 +align 1 +LABELV $115 +char 1 94 +char 1 49 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 116 +char 1 111 +char 1 111 +char 1 32 +char 1 108 +char 1 97 +char 1 114 +char 1 103 +char 1 101 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 32 +char 1 105 +char 1 115 +char 1 32 +char 1 37 +char 1 105 +char 1 44 +char 1 32 +char 1 109 +char 1 97 +char 1 120 +char 1 32 +char 1 97 +char 1 108 +char 1 108 +char 1 111 +char 1 119 +char 1 101 +char 1 100 +char 1 32 +char 1 105 +char 1 115 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $112 +char 1 94 +char 1 49 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 102 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $106 +char 1 37 +char 1 100 +char 1 0 +align 1 +LABELV $105 +char 1 92 +char 1 110 +char 1 117 +char 1 109 +char 1 92 +char 1 0 +align 1 +LABELV $104 +char 1 60 +char 1 78 +char 1 85 +char 1 76 +char 1 76 +char 1 62 +char 1 0 +align 1 +LABELV $101 +char 1 125 +char 1 0 +align 1 +LABELV $98 +char 1 85 +char 1 110 +char 1 101 +char 1 120 +char 1 112 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 101 +char 1 110 +char 1 100 +char 1 32 +char 1 111 +char 1 102 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 10 +char 1 0 +align 1 +LABELV $92 +char 1 77 +char 1 97 +char 1 120 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 115 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $89 +char 1 77 +char 1 105 +char 1 115 +char 1 115 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 123 +char 1 32 +char 1 105 +char 1 110 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 10 +char 1 0 +align 1 +LABELV $88 +char 1 123 +char 1 0 diff --git a/CODE-mp/game/vm/g_client.asm b/CODE-mp/game/vm/g_client.asm new file mode 100644 index 0000000..e9c8229 --- /dev/null +++ b/CODE-mp/game/vm/g_client.asm @@ -0,0 +1,12441 @@ +data +align 4 +LABELV playerMins +byte 4 3245342720 +byte 4 3245342720 +byte 4 3250585600 +align 4 +LABELV playerMaxs +byte 4 1097859072 +byte 4 1097859072 +byte 4 1109393408 +export SP_info_player_deathmatch +code +proc SP_info_player_deathmatch 8 12 +file "../g_client.c" +line 20 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:#include "g_local.h" +;4:#include "..\ghoul2\g2.h" +;5: +;6:// g_client.c -- client functions that don't happen every frame +;7: +;8:static vec3_t playerMins = {-15, -15, DEFAULT_MINS_2}; +;9:static vec3_t playerMaxs = {15, 15, DEFAULT_MAXS_2}; +;10: +;11:forcedata_t Client_Force[MAX_CLIENTS]; +;12: +;13:/*QUAKED info_player_deathmatch (1 0 1) (-16 -16 -24) (16 16 32) initial +;14:potential spawning position for deathmatch games. +;15:The first time a player enters the game, they will be at an 'initial' spot. +;16:Targets will be fired when someone spawns in on them. +;17:"nobots" will prevent bots from using this spot. +;18:"nohumans" will prevent non-bots from using this spot. +;19:*/ +;20:void SP_info_player_deathmatch( gentity_t *ent ) { +line 23 +;21: int i; +;22: +;23: G_SpawnInt( "nobots", "0", &i); +ADDRGP4 $79 +ARGP4 +ADDRGP4 $80 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 G_SpawnInt +CALLI4 +pop +line 24 +;24: if ( i ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $81 +line 25 +;25: ent->flags |= FL_NO_BOTS; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +CNSTI4 8192 +BORI4 +ASGNI4 +line 26 +;26: } +LABELV $81 +line 27 +;27: G_SpawnInt( "nohumans", "0", &i ); +ADDRGP4 $83 +ARGP4 +ADDRGP4 $80 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 G_SpawnInt +CALLI4 +pop +line 28 +;28: if ( i ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $84 +line 29 +;29: ent->flags |= FL_NO_HUMANS; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +CNSTI4 16384 +BORI4 +ASGNI4 +line 30 +;30: } +LABELV $84 +line 31 +;31:} +LABELV $78 +endproc SP_info_player_deathmatch 8 12 +export SP_info_player_start +proc SP_info_player_start 0 4 +line 36 +;32: +;33:/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 32) +;34:equivelant to info_player_deathmatch +;35:*/ +;36:void SP_info_player_start(gentity_t *ent) { +line 37 +;37: ent->classname = "info_player_deathmatch"; +ADDRFP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +ADDRGP4 $87 +ASGNP4 +line 38 +;38: SP_info_player_deathmatch( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 SP_info_player_deathmatch +CALLV +pop +line 39 +;39:} +LABELV $86 +endproc SP_info_player_start 0 4 +export SP_info_player_imperial +proc SP_info_player_imperial 0 4 +line 44 +;40: +;41:/*QUAKED info_player_imperial (1 0 0) (-16 -16 -24) (16 16 32) +;42:saga start point - imperial +;43:*/ +;44:void SP_info_player_imperial(gentity_t *ent) { +line 45 +;45: if (g_gametype.integer != GT_SAGA) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 6 +EQI4 $89 +line 46 +;46: { //turn into a DM spawn if not in saga game mode +line 47 +;47: ent->classname = "info_player_deathmatch"; +ADDRFP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +ADDRGP4 $87 +ASGNP4 +line 48 +;48: SP_info_player_deathmatch( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 SP_info_player_deathmatch +CALLV +pop +line 49 +;49: } +LABELV $89 +line 50 +;50:} +LABELV $88 +endproc SP_info_player_imperial 0 4 +export SP_info_player_rebel +proc SP_info_player_rebel 0 4 +line 55 +;51: +;52:/*QUAKED info_player_rebel (1 0 0) (-16 -16 -24) (16 16 32) +;53:saga start point - rebel +;54:*/ +;55:void SP_info_player_rebel(gentity_t *ent) { +line 56 +;56: if (g_gametype.integer != GT_SAGA) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 6 +EQI4 $93 +line 57 +;57: { //turn into a DM spawn if not in saga game mode +line 58 +;58: ent->classname = "info_player_deathmatch"; +ADDRFP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +ADDRGP4 $87 +ASGNP4 +line 59 +;59: SP_info_player_deathmatch( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 SP_info_player_deathmatch +CALLV +pop +line 60 +;60: } +LABELV $93 +line 61 +;61:} +LABELV $92 +endproc SP_info_player_rebel 0 4 +export SP_info_player_intermission +proc SP_info_player_intermission 0 0 +line 66 +;62: +;63:/*QUAKED info_player_intermission (1 0 1) (-16 -16 -24) (16 16 32) +;64:The intermission will be viewed from this point. Target an info_notnull for the view direction. +;65:*/ +;66:void SP_info_player_intermission( gentity_t *ent ) { +line 68 +;67: +;68:} +LABELV $96 +endproc SP_info_player_intermission 0 0 +export ThrowSaberToAttacker +proc ThrowSaberToAttacker 68 8 +line 73 +;69: +;70:#define JMSABER_RESPAWN_TIME 20000 //in case it gets stuck somewhere no one can reach +;71: +;72:void ThrowSaberToAttacker(gentity_t *self, gentity_t *attacker) +;73:{ +line 74 +;74: gentity_t *ent = &g_entities[self->client->ps.saberIndex]; +ADDRLP4 0 +CNSTI4 828 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 608 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 76 +;75: vec3_t a; +;76: int altVelocity = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 78 +;77: +;78: if (!ent || ent->enemy != self) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $100 +ADDRLP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +EQU4 $98 +LABELV $100 +line 79 +;79: { //something has gone very wrong (this should never happen) +line 84 +;80: //but in case it does.. find the saber manually +;81:#ifdef _DEBUG +;82: Com_Printf("Lost the saber! Attempting to use global pointer..\n"); +;83:#endif +;84: ent = gJMSaberEnt; +ADDRLP4 0 +ADDRGP4 gJMSaberEnt +INDIRP4 +ASGNP4 +line 86 +;85: +;86: if (!ent) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $101 +line 87 +;87: { +line 91 +;88:#ifdef _DEBUG +;89: Com_Printf("The global pointer was NULL. This is a bad thing.\n"); +;90:#endif +;91: return; +ADDRGP4 $97 +JUMPV +LABELV $101 +line 98 +;92: } +;93: +;94:#ifdef _DEBUG +;95: Com_Printf("Got it (%i). Setting enemy to client %i.\n", ent->s.number, self->s.number); +;96:#endif +;97: +;98: ent->enemy = self; +ADDRLP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 99 +;99: self->client->ps.saberIndex = ent->s.number; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 608 +ADDP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +line 100 +;100: } +LABELV $98 +line 102 +;101: +;102: trap_SetConfigstring ( CS_CLIENT_JEDIMASTER, "-1" ); +CNSTI4 28 +ARGI4 +ADDRGP4 $103 +ARGP4 +ADDRGP4 trap_SetConfigstring +CALLV +pop +line 104 +;103: +;104: if (attacker && attacker->client && self->client->ps.saberInFlight) +ADDRLP4 24 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 28 +CNSTU4 0 +ASGNU4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 28 +INDIRU4 +EQU4 $104 +ADDRLP4 32 +CNSTI4 408 +ASGNI4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 28 +INDIRU4 +EQU4 $104 +ADDRFP4 0 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRP4 +CNSTI4 504 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $104 +line 105 +;105: { //someone killed us and we had the saber thrown, so actually move this saber to the saber location +line 108 +;106: //if we killed ourselves with saber thrown, however, same suicide rules of respawning at spawn spot still +;107: //apply. +;108: gentity_t *flyingsaber = &g_entities[self->client->ps.saberEntityNum]; +ADDRLP4 36 +CNSTI4 828 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 544 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 110 +;109: +;110: if (flyingsaber && flyingsaber->inuse) +ADDRLP4 36 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $106 +ADDRLP4 36 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $106 +line 111 +;111: { +line 112 +;112: VectorCopy(flyingsaber->s.pos.trBase, ent->s.pos.trBase); +ADDRLP4 44 +CNSTI4 24 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 113 +;113: VectorCopy(flyingsaber->s.pos.trDelta, ent->s.pos.trDelta); +ADDRLP4 48 +CNSTI4 36 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 114 +;114: VectorCopy(flyingsaber->s.apos.trBase, ent->s.apos.trBase); +ADDRLP4 52 +CNSTI4 60 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 115 +;115: VectorCopy(flyingsaber->s.apos.trDelta, ent->s.apos.trDelta); +ADDRLP4 56 +CNSTI4 72 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 117 +;116: +;117: VectorCopy(flyingsaber->r.currentOrigin, ent->r.currentOrigin); +ADDRLP4 60 +CNSTI4 368 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 60 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 60 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 118 +;118: VectorCopy(flyingsaber->r.currentAngles, ent->r.currentAngles); +ADDRLP4 64 +CNSTI4 380 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 119 +;119: altVelocity = 1; +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +line 120 +;120: } +LABELV $106 +line 121 +;121: } +LABELV $104 +line 123 +;122: +;123: self->client->ps.saberInFlight = qtrue; //say he threw it anyway in order to properly remove from dead body +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 504 +ADDP4 +CNSTI4 1 +ASGNI4 +line 125 +;124: +;125: ent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm"); +ADDRGP4 $108 +ARGP4 +ADDRLP4 36 +ADDRGP4 G_ModelIndex +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 212 +ADDP4 +ADDRLP4 36 +INDIRI4 +ASGNI4 +line 126 +;126: ent->s.eFlags &= ~(EF_NODRAW); +ADDRLP4 40 +ADDRLP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 40 +INDIRP4 +INDIRI4 +CNSTI4 -129 +BANDI4 +ASGNI4 +line 127 +;127: ent->s.modelGhoul2 = 1; +ADDRLP4 0 +INDIRP4 +CNSTI4 204 +ADDP4 +CNSTI4 1 +ASGNI4 +line 128 +;128: ent->s.eType = ET_MISSILE; +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 3 +ASGNI4 +line 129 +;129: ent->enemy = NULL; +ADDRLP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +CNSTP4 0 +ASGNP4 +line 131 +;130: +;131: if (!attacker || !attacker->client) +ADDRLP4 44 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 48 +CNSTU4 0 +ASGNU4 +ADDRLP4 44 +INDIRP4 +CVPU4 4 +ADDRLP4 48 +INDIRU4 +EQU4 $111 +ADDRLP4 44 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 48 +INDIRU4 +NEU4 $109 +LABELV $111 +line 132 +;132: { +line 133 +;133: VectorCopy(ent->s.origin2, ent->s.pos.trBase); +ADDRLP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRB +ASGNB 12 +line 134 +;134: VectorCopy(ent->s.origin2, ent->s.origin); +ADDRLP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRB +ASGNB 12 +line 135 +;135: VectorCopy(ent->s.origin2, ent->r.currentOrigin); +ADDRLP4 0 +INDIRP4 +CNSTI4 368 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRB +ASGNB 12 +line 136 +;136: ent->pos2[0] = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 560 +ADDP4 +CNSTF4 0 +ASGNF4 +line 137 +;137: trap_LinkEntity(ent); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 138 +;138: return; +ADDRGP4 $97 +JUMPV +LABELV $109 +line 141 +;139: } +;140: +;141: if (!altVelocity) +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $112 +line 142 +;142: { +line 143 +;143: VectorCopy(self->s.pos.trBase, ent->s.pos.trBase); +ADDRLP4 52 +CNSTI4 24 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 144 +;144: VectorCopy(self->s.pos.trBase, ent->s.origin); +ADDRLP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 145 +;145: VectorCopy(self->s.pos.trBase, ent->r.currentOrigin); +ADDRLP4 0 +INDIRP4 +CNSTI4 368 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 147 +;146: +;147: VectorSubtract(attacker->client->ps.origin, ent->s.pos.trBase, a); +ADDRLP4 56 +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +ASGNP4 +ADDRLP4 64 +CNSTI4 24 +ASGNI4 +ADDRLP4 4 +ADDRLP4 56 +INDIRP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 4+4 +ADDRLP4 56 +INDIRP4 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 4+8 +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 149 +;148: +;149: VectorNormalize(a); +ADDRLP4 4 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 151 +;150: +;151: ent->s.pos.trDelta[0] = a[0]*256; +ADDRLP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +CNSTF4 1132462080 +ADDRLP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 152 +;152: ent->s.pos.trDelta[1] = a[1]*256; +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +CNSTF4 1132462080 +ADDRLP4 4+4 +INDIRF4 +MULF4 +ASGNF4 +line 153 +;153: ent->s.pos.trDelta[2] = 256; +ADDRLP4 0 +INDIRP4 +CNSTI4 44 +ADDP4 +CNSTF4 1132462080 +ASGNF4 +line 154 +;154: } +LABELV $112 +line 156 +;155: +;156: trap_LinkEntity(ent); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 157 +;157:} +LABELV $97 +endproc ThrowSaberToAttacker 68 8 +export JMSaberThink +proc JMSaberThink 28 4 +line 160 +;158: +;159:void JMSaberThink(gentity_t *ent) +;160:{ +line 161 +;161: gJMSaberEnt = ent; +ADDRGP4 gJMSaberEnt +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 163 +;162: +;163: if (ent->enemy) +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $118 +line 164 +;164: { +line 165 +;165: if (!ent->enemy->client || !ent->enemy->inuse) +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $122 +ADDRLP4 0 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $120 +LABELV $122 +line 166 +;166: { //disconnected? +line 167 +;167: VectorCopy(ent->enemy->s.pos.trBase, ent->s.pos.trBase); +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTI4 24 +ASGNI4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 168 +;168: VectorCopy(ent->enemy->s.pos.trBase, ent->s.origin); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 92 +ADDP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 169 +;169: VectorCopy(ent->enemy->s.pos.trBase, ent->r.currentOrigin); +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 368 +ADDP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 170 +;170: ent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm"); +ADDRGP4 $108 +ARGP4 +ADDRLP4 20 +ADDRGP4 G_ModelIndex +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 212 +ADDP4 +ADDRLP4 20 +INDIRI4 +ASGNI4 +line 171 +;171: ent->s.eFlags &= ~(EF_NODRAW); +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CNSTI4 -129 +BANDI4 +ASGNI4 +line 172 +;172: ent->s.modelGhoul2 = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 204 +ADDP4 +CNSTI4 1 +ASGNI4 +line 173 +;173: ent->s.eType = ET_MISSILE; +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 3 +ASGNI4 +line 174 +;174: ent->enemy = NULL; +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +CNSTP4 0 +ASGNP4 +line 176 +;175: +;176: ent->pos2[0] = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 560 +ADDP4 +CNSTF4 1065353216 +ASGNF4 +line 177 +;177: ent->pos2[1] = 0; //respawn next think +ADDRFP4 0 +INDIRP4 +CNSTI4 564 +ADDP4 +CNSTF4 0 +ASGNF4 +line 178 +;178: trap_LinkEntity(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 179 +;179: } +ADDRGP4 $119 +JUMPV +LABELV $120 +line 181 +;180: else +;181: { +line 182 +;182: ent->pos2[1] = level.time + JMSABER_RESPAWN_TIME; +ADDRFP4 0 +INDIRP4 +CNSTI4 564 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 20000 +ADDI4 +CVIF4 4 +ASGNF4 +line 183 +;183: } +line 184 +;184: } +ADDRGP4 $119 +JUMPV +LABELV $118 +line 185 +;185: else if (ent->pos2[0] && ent->pos2[1] < level.time) +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 560 +ADDP4 +INDIRF4 +CNSTF4 0 +EQF4 $124 +ADDRLP4 0 +INDIRP4 +CNSTI4 564 +ADDP4 +INDIRF4 +ADDRGP4 level+32 +INDIRI4 +CVIF4 4 +GEF4 $124 +line 186 +;186: { +line 187 +;187: VectorCopy(ent->s.origin2, ent->s.pos.trBase); +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRB +ASGNB 12 +line 188 +;188: VectorCopy(ent->s.origin2, ent->s.origin); +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 92 +ADDP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRB +ASGNB 12 +line 189 +;189: VectorCopy(ent->s.origin2, ent->r.currentOrigin); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 368 +ADDP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRB +ASGNB 12 +line 190 +;190: ent->pos2[0] = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 560 +ADDP4 +CNSTF4 0 +ASGNF4 +line 191 +;191: trap_LinkEntity(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 192 +;192: } +LABELV $124 +LABELV $119 +line 194 +;193: +;194: ent->nextthink = level.time + 50; +ADDRFP4 0 +INDIRP4 +CNSTI4 632 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 50 +ADDI4 +ASGNI4 +line 195 +;195: G_RunObject(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_RunObject +CALLV +pop +line 196 +;196:} +LABELV $117 +endproc JMSaberThink 28 4 +export JMSaberTouch +proc JMSaberTouch 36 12 +line 199 +;197: +;198:void JMSaberTouch(gentity_t *self, gentity_t *other, trace_t *trace) +;199:{ +line 200 +;200: int i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 203 +;201:// gentity_t *te; +;202: +;203: if (!other || !other->client || other->health < 1) +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTU4 0 +ASGNU4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRU4 +EQU4 $132 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRU4 +EQU4 $132 +ADDRLP4 4 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +CNSTI4 1 +GEI4 $129 +LABELV $132 +line 204 +;204: { +line 205 +;205: return; +ADDRGP4 $128 +JUMPV +LABELV $129 +line 208 +;206: } +;207: +;208: if (self->enemy) +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $133 +line 209 +;209: { +line 210 +;210: return; +ADDRGP4 $128 +JUMPV +LABELV $133 +line 213 +;211: } +;212: +;213: if (!self->s.modelindex) +ADDRFP4 0 +INDIRP4 +CNSTI4 212 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $135 +line 214 +;214: { +line 215 +;215: return; +ADDRGP4 $128 +JUMPV +LABELV $135 +line 218 +;216: } +;217: +;218: if (other->client->ps.stats[STAT_WEAPONS] & (1 << WP_SABER)) +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 232 +ADDP4 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +EQI4 $137 +line 219 +;219: { +line 220 +;220: return; +ADDRGP4 $128 +JUMPV +LABELV $137 +line 223 +;221: } +;222: +;223: if (other->client->ps.isJediMaster) +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 604 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $139 +line 224 +;224: { +line 225 +;225: return; +ADDRGP4 $128 +JUMPV +LABELV $139 +line 228 +;226: } +;227: +;228: self->enemy = other; +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +line 229 +;229: other->client->ps.stats[STAT_WEAPONS] = (1 << WP_SABER); +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 232 +ADDP4 +CNSTI4 4 +ASGNI4 +line 230 +;230: other->client->ps.weapon = WP_SABER; +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 148 +ADDP4 +CNSTI4 2 +ASGNI4 +line 231 +;231: other->s.weapon = WP_SABER; +ADDRFP4 4 +INDIRP4 +CNSTI4 276 +ADDP4 +CNSTI4 2 +ASGNI4 +line 232 +;232: G_AddEvent(other, EV_BECOME_JEDIMASTER, 0); +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 30 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 235 +;233: +;234: // Track the jedi master +;235: trap_SetConfigstring ( CS_CLIENT_JEDIMASTER, va("%i", other->s.number ) ); +ADDRGP4 $141 +ARGP4 +ADDRFP4 4 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 12 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 28 +ARGI4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 trap_SetConfigstring +CALLV +pop +line 237 +;236: +;237: if (g_spawnInvulnerability.integer) +ADDRGP4 g_spawnInvulnerability+12 +INDIRI4 +CNSTI4 0 +EQI4 $142 +line 238 +;238: { +line 239 +;239: other->client->ps.eFlags |= EF_INVULNERABLE; +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CNSTI4 67108864 +BORI4 +ASGNI4 +line 240 +;240: other->client->invulnerableTimer = level.time + g_spawnInvulnerability.integer; +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1564 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ADDRGP4 g_spawnInvulnerability+12 +INDIRI4 +ADDI4 +ASGNI4 +line 241 +;241: } +LABELV $142 +line 243 +;242: +;243: trap_SendServerCommand( -1, va("cp \"%s %s\n\"", other->client->pers.netname, G_GetStripEdString("SVINGAME", "BECOMEJM")) ); +ADDRGP4 $148 +ARGP4 +ADDRGP4 $149 +ARGP4 +ADDRLP4 16 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $147 +ARGP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRLP4 20 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 245 +;244: +;245: other->client->ps.isJediMaster = qtrue; +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 604 +ADDP4 +CNSTI4 1 +ASGNI4 +line 246 +;246: other->client->ps.saberIndex = self->s.number; +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 608 +ADDP4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +line 248 +;247: +;248: if (other->health < 200 && other->health > 0) +ADDRLP4 24 +ADDRFP4 4 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 200 +GEI4 $150 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +LEI4 $150 +line 249 +;249: { //full health when you become the Jedi Master +line 250 +;250: other->client->ps.stats[STAT_HEALTH] = other->health = 200; +ADDRLP4 28 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 32 +CNSTI4 200 +ASGNI4 +ADDRLP4 28 +INDIRP4 +CNSTI4 676 +ADDP4 +ADDRLP4 32 +INDIRI4 +ASGNI4 +ADDRLP4 28 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRLP4 32 +INDIRI4 +ASGNI4 +line 251 +;251: } +LABELV $150 +line 253 +;252: +;253: if (other->client->ps.fd.forcePower < 100) +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 920 +ADDP4 +INDIRI4 +CNSTI4 100 +GEI4 $155 +line 254 +;254: { +line 255 +;255: other->client->ps.fd.forcePower = 100; +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 920 +ADDP4 +CNSTI4 100 +ASGNI4 +line 256 +;256: } +ADDRGP4 $155 +JUMPV +LABELV $154 +line 259 +;257: +;258: while (i < NUM_FORCE_POWERS) +;259: { +line 260 +;260: other->client->ps.fd.forcePowersKnown |= (1 << i); +ADDRLP4 28 +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 832 +ADDP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BORI4 +ASGNI4 +line 261 +;261: other->client->ps.fd.forcePowerLevel[i] = FORCE_LEVEL_3; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 932 +ADDP4 +ADDP4 +CNSTI4 3 +ASGNI4 +line 263 +;262: +;263: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 264 +;264: } +LABELV $155 +line 258 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $154 +line 266 +;265: +;266: self->pos2[0] = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 560 +ADDP4 +CNSTF4 1065353216 +ASGNF4 +line 267 +;267: self->pos2[1] = level.time + JMSABER_RESPAWN_TIME; +ADDRFP4 0 +INDIRP4 +CNSTI4 564 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 20000 +ADDI4 +CVIF4 4 +ASGNF4 +line 269 +;268: +;269: self->s.modelindex = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 212 +ADDP4 +CNSTI4 0 +ASGNI4 +line 270 +;270: self->s.eFlags |= EF_NODRAW; +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRI4 +CNSTI4 128 +BORI4 +ASGNI4 +line 271 +;271: self->s.modelGhoul2 = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 204 +ADDP4 +CNSTI4 0 +ASGNI4 +line 272 +;272: self->s.eType = ET_GENERAL; +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 279 +;273: +;274: /* +;275: te = G_TempEntity( vec3_origin, EV_DESTROY_GHOUL2_INSTANCE ); +;276: te->r.svFlags |= SVF_BROADCAST; +;277: te->s.eventParm = self->s.number; +;278: */ +;279: G_KillG2Queue(self->s.number); +ADDRFP4 0 +INDIRP4 +INDIRI4 +ARGI4 +ADDRGP4 G_KillG2Queue +CALLV +pop +line 281 +;280: +;281: return; +LABELV $128 +endproc JMSaberTouch 36 12 +data +export gJMSaberEnt +align 4 +LABELV gJMSaberEnt +byte 4 0 +export SP_info_jedimaster_start +code +proc SP_info_jedimaster_start 8 4 +line 290 +;282:} +;283: +;284:gentity_t *gJMSaberEnt = NULL; +;285: +;286:/*QUAKED info_jedimaster_start (1 0 0) (-16 -16 -24) (16 16 32) +;287:"jedi master" saber spawn point +;288:*/ +;289:void SP_info_jedimaster_start(gentity_t *ent) +;290:{ +line 291 +;291: if (g_gametype.integer != GT_JEDIMASTER) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 2 +EQI4 $159 +line 292 +;292: { +line 293 +;293: gJMSaberEnt = NULL; +ADDRGP4 gJMSaberEnt +CNSTP4 0 +ASGNP4 +line 294 +;294: G_FreeEntity(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_FreeEntity +CALLV +pop +line 295 +;295: return; +ADDRGP4 $158 +JUMPV +LABELV $159 +line 298 +;296: } +;297: +;298: ent->enemy = NULL; +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +CNSTP4 0 +ASGNP4 +line 300 +;299: +;300: ent->s.eFlags = EF_BOUNCE_HALF; +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +CNSTI4 32 +ASGNI4 +line 302 +;301: +;302: ent->s.modelindex = G_ModelIndex("models/weapons2/saber/saber_w.glm"); +ADDRGP4 $108 +ARGP4 +ADDRLP4 0 +ADDRGP4 G_ModelIndex +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 212 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 303 +;303: ent->s.modelGhoul2 = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 204 +ADDP4 +CNSTI4 1 +ASGNI4 +line 304 +;304: ent->s.g2radius = 20; +ADDRFP4 0 +INDIRP4 +CNSTI4 208 +ADDP4 +CNSTI4 20 +ASGNI4 +line 306 +;305: //ent->s.eType = ET_GENERAL; +;306: ent->s.eType = ET_MISSILE; +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 3 +ASGNI4 +line 307 +;307: ent->s.weapon = WP_SABER; +ADDRFP4 0 +INDIRP4 +CNSTI4 276 +ADDP4 +CNSTI4 2 +ASGNI4 +line 308 +;308: ent->s.pos.trType = TR_GRAVITY; +ADDRFP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 5 +ASGNI4 +line 309 +;309: ent->s.pos.trTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 310 +;310: VectorSet( ent->r.maxs, 3, 3, 3 ); +ADDRFP4 0 +INDIRP4 +CNSTI4 328 +ADDP4 +CNSTF4 1077936128 +ASGNF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 332 +ADDP4 +CNSTF4 1077936128 +ASGNF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 336 +ADDP4 +CNSTF4 1077936128 +ASGNF4 +line 311 +;311: VectorSet( ent->r.mins, -3, -3, -3 ); +ADDRFP4 0 +INDIRP4 +CNSTI4 316 +ADDP4 +CNSTF4 3225419776 +ASGNF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 320 +ADDP4 +CNSTF4 3225419776 +ASGNF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 324 +ADDP4 +CNSTF4 3225419776 +ASGNF4 +line 312 +;312: ent->r.contents = CONTENTS_TRIGGER; +ADDRFP4 0 +INDIRP4 +CNSTI4 340 +ADDP4 +CNSTI4 1024 +ASGNI4 +line 313 +;313: ent->clipmask = MASK_SOLID; +ADDRFP4 0 +INDIRP4 +CNSTI4 508 +ADDP4 +CNSTI4 1 +ASGNI4 +line 315 +;314: +;315: ent->isSaberEntity = qtrue; +ADDRFP4 0 +INDIRP4 +CNSTI4 812 +ADDP4 +CNSTI4 1 +ASGNI4 +line 317 +;316: +;317: ent->bounceCount = -5; +ADDRFP4 0 +INDIRP4 +CNSTI4 716 +ADDP4 +CNSTI4 -5 +ASGNI4 +line 319 +;318: +;319: ent->physicsObject = qtrue; +ADDRFP4 0 +INDIRP4 +CNSTI4 500 +ADDP4 +CNSTI4 1 +ASGNI4 +line 321 +;320: +;321: VectorCopy(ent->s.pos.trBase, ent->s.origin2); //remember the spawn spot +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 323 +;322: +;323: ent->touch = JMSaberTouch; +ADDRFP4 0 +INDIRP4 +CNSTI4 648 +ADDP4 +ADDRGP4 JMSaberTouch +ASGNP4 +line 325 +;324: +;325: trap_LinkEntity(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 327 +;326: +;327: ent->think = JMSaberThink; +ADDRFP4 0 +INDIRP4 +CNSTI4 636 +ADDP4 +ADDRGP4 JMSaberThink +ASGNP4 +line 328 +;328: ent->nextthink = level.time + 50; +ADDRFP4 0 +INDIRP4 +CNSTI4 632 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 50 +ADDI4 +ASGNI4 +line 329 +;329:} +LABELV $158 +endproc SP_info_jedimaster_start 8 4 +export SpotWouldTelefrag +proc SpotWouldTelefrag 4144 16 +line 345 +;330: +;331:/* +;332:======================================================================= +;333: +;334: SelectSpawnPoint +;335: +;336:======================================================================= +;337:*/ +;338: +;339:/* +;340:================ +;341:SpotWouldTelefrag +;342: +;343:================ +;344:*/ +;345:qboolean SpotWouldTelefrag( gentity_t *spot ) { +line 351 +;346: int i, num; +;347: int touch[MAX_GENTITIES]; +;348: gentity_t *hit; +;349: vec3_t mins, maxs; +;350: +;351: VectorAdd( spot->s.origin, playerMins, mins ); +ADDRLP4 4132 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4108 +ADDRLP4 4132 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRF4 +ADDRGP4 playerMins +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 4108+4 +ADDRLP4 4132 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRF4 +ADDRGP4 playerMins+4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 4108+8 +ADDRFP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRF4 +ADDRGP4 playerMins+8 +INDIRF4 +ADDF4 +ASGNF4 +line 352 +;352: VectorAdd( spot->s.origin, playerMaxs, maxs ); +ADDRLP4 4136 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4120 +ADDRLP4 4136 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRF4 +ADDRGP4 playerMaxs +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 4120+4 +ADDRLP4 4136 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRF4 +ADDRGP4 playerMaxs+4 +INDIRF4 +ADDF4 +ASGNF4 +ADDRLP4 4120+8 +ADDRFP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRF4 +ADDRGP4 playerMaxs+8 +INDIRF4 +ADDF4 +ASGNF4 +line 353 +;353: num = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES ); +ADDRLP4 4108 +ARGP4 +ADDRLP4 4120 +ARGP4 +ADDRLP4 12 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 4140 +ADDRGP4 trap_EntitiesInBox +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 4140 +INDIRI4 +ASGNI4 +line 355 +;354: +;355: for (i=0 ; iclient && hit->client->ps.stats[STAT_HEALTH] > 0 ) { +;358: if ( hit->client) { +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $177 +line 359 +;359: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $164 +JUMPV +LABELV $177 +line 362 +;360: } +;361: +;362: } +LABELV $174 +line 355 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $176 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +LTI4 $173 +line 364 +;363: +;364: return qfalse; +CNSTI4 0 +RETI4 +LABELV $164 +endproc SpotWouldTelefrag 4144 16 +export SelectNearestDeathmatchSpawnPoint +proc SelectNearestDeathmatchSpawnPoint 40 12 +line 375 +;365:} +;366: +;367:/* +;368:================ +;369:SelectNearestDeathmatchSpawnPoint +;370: +;371:Find the spot that we DON'T want to use +;372:================ +;373:*/ +;374:#define MAX_SPAWN_POINTS 128 +;375:gentity_t *SelectNearestDeathmatchSpawnPoint( vec3_t from ) { +line 381 +;376: gentity_t *spot; +;377: vec3_t delta; +;378: float dist, nearestDist; +;379: gentity_t *nearestSpot; +;380: +;381: nearestDist = 999999; +ADDRLP4 20 +CNSTF4 1232348144 +ASGNF4 +line 382 +;382: nearestSpot = NULL; +ADDRLP4 24 +CNSTP4 0 +ASGNP4 +line 383 +;383: spot = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +ADDRGP4 $181 +JUMPV +LABELV $180 +line 385 +;384: +;385: while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { +line 387 +;386: +;387: VectorSubtract( spot->s.origin, from, delta ); +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRF4 +ADDRLP4 32 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 4+4 +ADDRLP4 0 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRF4 +ADDRLP4 32 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 4+8 +ADDRLP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 388 +;388: dist = VectorLength( delta ); +ADDRLP4 4 +ARGP4 +ADDRLP4 36 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 36 +INDIRF4 +ASGNF4 +line 389 +;389: if ( dist < nearestDist ) { +ADDRLP4 16 +INDIRF4 +ADDRLP4 20 +INDIRF4 +GEF4 $185 +line 390 +;390: nearestDist = dist; +ADDRLP4 20 +ADDRLP4 16 +INDIRF4 +ASGNF4 +line 391 +;391: nearestSpot = spot; +ADDRLP4 24 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 392 +;392: } +LABELV $185 +line 393 +;393: } +LABELV $181 +line 385 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 416 +ARGI4 +ADDRGP4 $87 +ARGP4 +ADDRLP4 28 +ADDRGP4 G_Find +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 28 +INDIRP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $180 +line 395 +;394: +;395: return nearestSpot; +ADDRLP4 24 +INDIRP4 +RETP4 +LABELV $179 +endproc SelectNearestDeathmatchSpawnPoint 40 12 +export SelectRandomDeathmatchSpawnPoint +proc SelectRandomDeathmatchSpawnPoint 532 12 +line 407 +;396:} +;397: +;398: +;399:/* +;400:================ +;401:SelectRandomDeathmatchSpawnPoint +;402: +;403:go to a random point that doesn't telefrag +;404:================ +;405:*/ +;406:#define MAX_SPAWN_POINTS 128 +;407:gentity_t *SelectRandomDeathmatchSpawnPoint( void ) { +line 413 +;408: gentity_t *spot; +;409: int count; +;410: int selection; +;411: gentity_t *spots[MAX_SPAWN_POINTS]; +;412: +;413: count = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 414 +;414: spot = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +ADDRGP4 $189 +JUMPV +LABELV $188 +line 416 +;415: +;416: while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { +line 417 +;417: if ( SpotWouldTelefrag( spot ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 524 +ADDRGP4 SpotWouldTelefrag +CALLI4 +ASGNI4 +ADDRLP4 524 +INDIRI4 +CNSTI4 0 +EQI4 $191 +line 418 +;418: continue; +ADDRGP4 $189 +JUMPV +LABELV $191 +line 420 +;419: } +;420: spots[ count ] = spot; +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +ADDP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 421 +;421: count++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 422 +;422: } +LABELV $189 +line 416 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 416 +ARGI4 +ADDRGP4 $87 +ARGP4 +ADDRLP4 524 +ADDRGP4 G_Find +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 524 +INDIRP4 +ASGNP4 +ADDRLP4 524 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $188 +line 424 +;423: +;424: if ( !count ) { // no spots that won't telefrag +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $193 +line 425 +;425: return G_Find( NULL, FOFS(classname), "info_player_deathmatch"); +CNSTP4 0 +ARGP4 +CNSTI4 416 +ARGI4 +ADDRGP4 $87 +ARGP4 +ADDRLP4 528 +ADDRGP4 G_Find +CALLP4 +ASGNP4 +ADDRLP4 528 +INDIRP4 +RETP4 +ADDRGP4 $187 +JUMPV +LABELV $193 +line 428 +;426: } +;427: +;428: selection = rand() % count; +ADDRLP4 528 +ADDRGP4 rand +CALLI4 +ASGNI4 +ADDRLP4 520 +ADDRLP4 528 +INDIRI4 +ADDRLP4 4 +INDIRI4 +MODI4 +ASGNI4 +line 429 +;429: return spots[ selection ]; +ADDRLP4 520 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +ADDP4 +INDIRP4 +RETP4 +LABELV $187 +endproc SelectRandomDeathmatchSpawnPoint 532 12 +export SelectRandomFurthestSpawnPoint +proc SelectRandomFurthestSpawnPoint 572 12 +line 439 +;430:} +;431: +;432:/* +;433:=========== +;434:SelectRandomFurthestSpawnPoint +;435: +;436:Chooses a player start, deathmatch start, etc +;437:============ +;438:*/ +;439:gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) { +line 447 +;440: gentity_t *spot; +;441: vec3_t delta; +;442: float dist; +;443: float list_dist[64]; +;444: gentity_t *list_spot[64]; +;445: int numSpots, rnd, i, j; +;446: +;447: numSpots = 0; +ADDRLP4 520 +CNSTI4 0 +ASGNI4 +line 448 +;448: spot = NULL; +ADDRLP4 528 +CNSTP4 0 +ASGNP4 +ADDRGP4 $197 +JUMPV +LABELV $196 +line 450 +;449: +;450: while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { +line 451 +;451: if ( SpotWouldTelefrag( spot ) ) { +ADDRLP4 528 +INDIRP4 +ARGP4 +ADDRLP4 548 +ADDRGP4 SpotWouldTelefrag +CALLI4 +ASGNI4 +ADDRLP4 548 +INDIRI4 +CNSTI4 0 +EQI4 $199 +line 452 +;452: continue; +ADDRGP4 $197 +JUMPV +LABELV $199 +line 454 +;453: } +;454: VectorSubtract( spot->s.origin, avoidPoint, delta ); +ADDRLP4 556 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 532 +ADDRLP4 528 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRF4 +ADDRLP4 556 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 532+4 +ADDRLP4 528 +INDIRP4 +CNSTI4 96 +ADDP4 +INDIRF4 +ADDRLP4 556 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 532+8 +ADDRLP4 528 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 455 +;455: dist = VectorLength( delta ); +ADDRLP4 532 +ARGP4 +ADDRLP4 560 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 524 +ADDRLP4 560 +INDIRF4 +ASGNF4 +line 456 +;456: for (i = 0; i < numSpots; i++) { +ADDRLP4 516 +CNSTI4 0 +ASGNI4 +ADDRGP4 $206 +JUMPV +LABELV $203 +line 457 +;457: if ( dist > list_dist[i] ) { +ADDRLP4 524 +INDIRF4 +ADDRLP4 516 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRF4 +LEF4 $207 +line 458 +;458: if ( numSpots >= 64 ) +ADDRLP4 520 +INDIRI4 +CNSTI4 64 +LTI4 $209 +line 459 +;459: numSpots = 64-1; +ADDRLP4 520 +CNSTI4 63 +ASGNI4 +LABELV $209 +line 460 +;460: for (j = numSpots; j > i; j--) { +ADDRLP4 0 +ADDRLP4 520 +INDIRI4 +ASGNI4 +ADDRGP4 $214 +JUMPV +LABELV $211 +line 461 +;461: list_dist[j] = list_dist[j-1]; +ADDRLP4 564 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 564 +INDIRI4 +ADDRLP4 4 +ADDP4 +ADDRLP4 564 +INDIRI4 +ADDRLP4 4-4 +ADDP4 +INDIRF4 +ASGNF4 +line 462 +;462: list_spot[j] = list_spot[j-1]; +ADDRLP4 568 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 568 +INDIRI4 +ADDRLP4 260 +ADDP4 +ADDRLP4 568 +INDIRI4 +ADDRLP4 260-4 +ADDP4 +INDIRP4 +ASGNP4 +line 463 +;463: } +LABELV $212 +line 460 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +LABELV $214 +ADDRLP4 0 +INDIRI4 +ADDRLP4 516 +INDIRI4 +GTI4 $211 +line 464 +;464: list_dist[i] = dist; +ADDRLP4 516 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +ADDRLP4 524 +INDIRF4 +ASGNF4 +line 465 +;465: list_spot[i] = spot; +ADDRLP4 516 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 260 +ADDP4 +ADDRLP4 528 +INDIRP4 +ASGNP4 +line 466 +;466: numSpots++; +ADDRLP4 520 +ADDRLP4 520 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 467 +;467: if (numSpots > 64) +ADDRLP4 520 +INDIRI4 +CNSTI4 64 +LEI4 $205 +line 468 +;468: numSpots = 64; +ADDRLP4 520 +CNSTI4 64 +ASGNI4 +line 469 +;469: break; +ADDRGP4 $205 +JUMPV +LABELV $207 +line 471 +;470: } +;471: } +LABELV $204 +line 456 +ADDRLP4 516 +ADDRLP4 516 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $206 +ADDRLP4 516 +INDIRI4 +ADDRLP4 520 +INDIRI4 +LTI4 $203 +LABELV $205 +line 472 +;472: if (i >= numSpots && numSpots < 64) { +ADDRLP4 516 +INDIRI4 +ADDRLP4 520 +INDIRI4 +LTI4 $219 +ADDRLP4 520 +INDIRI4 +CNSTI4 64 +GEI4 $219 +line 473 +;473: list_dist[numSpots] = dist; +ADDRLP4 520 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +ADDRLP4 524 +INDIRF4 +ASGNF4 +line 474 +;474: list_spot[numSpots] = spot; +ADDRLP4 520 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 260 +ADDP4 +ADDRLP4 528 +INDIRP4 +ASGNP4 +line 475 +;475: numSpots++; +ADDRLP4 520 +ADDRLP4 520 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 476 +;476: } +LABELV $219 +line 477 +;477: } +LABELV $197 +line 450 +ADDRLP4 528 +INDIRP4 +ARGP4 +CNSTI4 416 +ARGI4 +ADDRGP4 $87 +ARGP4 +ADDRLP4 548 +ADDRGP4 G_Find +CALLP4 +ASGNP4 +ADDRLP4 528 +ADDRLP4 548 +INDIRP4 +ASGNP4 +ADDRLP4 548 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $196 +line 478 +;478: if (!numSpots) { +ADDRLP4 520 +INDIRI4 +CNSTI4 0 +NEI4 $221 +line 479 +;479: spot = G_Find( NULL, FOFS(classname), "info_player_deathmatch"); +CNSTP4 0 +ARGP4 +CNSTI4 416 +ARGI4 +ADDRGP4 $87 +ARGP4 +ADDRLP4 552 +ADDRGP4 G_Find +CALLP4 +ASGNP4 +ADDRLP4 528 +ADDRLP4 552 +INDIRP4 +ASGNP4 +line 480 +;480: if (!spot) +ADDRLP4 528 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $223 +line 481 +;481: G_Error( "Couldn't find a spawn point" ); +ADDRGP4 $225 +ARGP4 +ADDRGP4 G_Error +CALLV +pop +LABELV $223 +line 482 +;482: VectorCopy (spot->s.origin, origin); +ADDRFP4 4 +INDIRP4 +ADDRLP4 528 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRB +ASGNB 12 +line 483 +;483: origin[2] += 9; +ADDRLP4 556 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 556 +INDIRP4 +ADDRLP4 556 +INDIRP4 +INDIRF4 +CNSTF4 1091567616 +ADDF4 +ASGNF4 +line 484 +;484: VectorCopy (spot->s.angles, angles); +ADDRFP4 8 +INDIRP4 +ADDRLP4 528 +INDIRP4 +CNSTI4 116 +ADDP4 +INDIRB +ASGNB 12 +line 485 +;485: return spot; +ADDRLP4 528 +INDIRP4 +RETP4 +ADDRGP4 $195 +JUMPV +LABELV $221 +line 489 +;486: } +;487: +;488: // select a random spot from the spawn points furthest away +;489: rnd = random() * (numSpots / 2); +ADDRLP4 552 +ADDRGP4 rand +CALLI4 +ASGNI4 +ADDRLP4 544 +ADDRLP4 552 +INDIRI4 +CNSTI4 32767 +BANDI4 +CVIF4 4 +CNSTF4 1191181824 +DIVF4 +ADDRLP4 520 +INDIRI4 +CNSTI4 2 +DIVI4 +CVIF4 4 +MULF4 +CVFI4 4 +ASGNI4 +line 491 +;490: +;491: VectorCopy (list_spot[rnd]->s.origin, origin); +ADDRFP4 4 +INDIRP4 +ADDRLP4 544 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 260 +ADDP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRB +ASGNB 12 +line 492 +;492: origin[2] += 9; +ADDRLP4 556 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 556 +INDIRP4 +ADDRLP4 556 +INDIRP4 +INDIRF4 +CNSTF4 1091567616 +ADDF4 +ASGNF4 +line 493 +;493: VectorCopy (list_spot[rnd]->s.angles, angles); +ADDRFP4 8 +INDIRP4 +ADDRLP4 544 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 260 +ADDP4 +INDIRP4 +CNSTI4 116 +ADDP4 +INDIRB +ASGNB 12 +line 495 +;494: +;495: return list_spot[rnd]; +ADDRLP4 544 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 260 +ADDP4 +INDIRP4 +RETP4 +LABELV $195 +endproc SelectRandomFurthestSpawnPoint 572 12 +export SelectSpawnPoint +proc SelectSpawnPoint 4 12 +line 505 +;496:} +;497: +;498:/* +;499:=========== +;500:SelectSpawnPoint +;501: +;502:Chooses a player start, deathmatch start, etc +;503:============ +;504:*/ +;505:gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) { +line 506 +;506: return SelectRandomFurthestSpawnPoint( avoidPoint, origin, angles ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 0 +ADDRGP4 SelectRandomFurthestSpawnPoint +CALLP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $226 +endproc SelectSpawnPoint 4 12 +export SelectInitialSpawnPoint +proc SelectInitialSpawnPoint 20 12 +line 545 +;507: +;508: /* +;509: gentity_t *spot; +;510: gentity_t *nearestSpot; +;511: +;512: nearestSpot = SelectNearestDeathmatchSpawnPoint( avoidPoint ); +;513: +;514: spot = SelectRandomDeathmatchSpawnPoint ( ); +;515: if ( spot == nearestSpot ) { +;516: // roll again if it would be real close to point of death +;517: spot = SelectRandomDeathmatchSpawnPoint ( ); +;518: if ( spot == nearestSpot ) { +;519: // last try +;520: spot = SelectRandomDeathmatchSpawnPoint ( ); +;521: } +;522: } +;523: +;524: // find a single player start spot +;525: if (!spot) { +;526: G_Error( "Couldn't find a spawn point" ); +;527: } +;528: +;529: VectorCopy (spot->s.origin, origin); +;530: origin[2] += 9; +;531: VectorCopy (spot->s.angles, angles); +;532: +;533: return spot; +;534: */ +;535:} +;536: +;537:/* +;538:=========== +;539:SelectInitialSpawnPoint +;540: +;541:Try to find a spawn point marked 'initial', otherwise +;542:use normal spawn selection. +;543:============ +;544:*/ +;545:gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles ) { +line 548 +;546: gentity_t *spot; +;547: +;548: spot = NULL; +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +ADDRGP4 $229 +JUMPV +LABELV $228 +line 549 +;549: while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) { +line 550 +;550: if ( spot->spawnflags & 1 ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 420 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 0 +EQI4 $231 +line 551 +;551: break; +ADDRGP4 $230 +JUMPV +LABELV $231 +line 553 +;552: } +;553: } +LABELV $229 +line 549 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 416 +ARGI4 +ADDRGP4 $87 +ARGP4 +ADDRLP4 4 +ADDRGP4 G_Find +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $228 +LABELV $230 +line 555 +;554: +;555: if ( !spot || SpotWouldTelefrag( spot ) ) { +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $235 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ADDRGP4 SpotWouldTelefrag +CALLI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $233 +LABELV $235 +line 556 +;556: return SelectSpawnPoint( vec3_origin, origin, angles ); +ADDRGP4 vec3_origin +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 16 +ADDRGP4 SelectSpawnPoint +CALLP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +RETP4 +ADDRGP4 $227 +JUMPV +LABELV $233 +line 559 +;557: } +;558: +;559: VectorCopy (spot->s.origin, origin); +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRB +ASGNB 12 +line 560 +;560: origin[2] += 9; +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CNSTF4 1091567616 +ADDF4 +ASGNF4 +line 561 +;561: VectorCopy (spot->s.angles, angles); +ADDRFP4 4 +INDIRP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 116 +ADDP4 +INDIRB +ASGNB 12 +line 563 +;562: +;563: return spot; +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $227 +endproc SelectInitialSpawnPoint 20 12 +export SelectSpectatorSpawnPoint +proc SelectSpectatorSpawnPoint 0 0 +line 572 +;564:} +;565: +;566:/* +;567:=========== +;568:SelectSpectatorSpawnPoint +;569: +;570:============ +;571:*/ +;572:gentity_t *SelectSpectatorSpawnPoint( vec3_t origin, vec3_t angles ) { +line 573 +;573: FindIntermissionPoint(); +ADDRGP4 FindIntermissionPoint +CALLV +pop +line 575 +;574: +;575: VectorCopy( level.intermission_origin, origin ); +ADDRFP4 0 +INDIRP4 +ADDRGP4 level+9024 +INDIRB +ASGNB 12 +line 576 +;576: VectorCopy( level.intermission_angle, angles ); +ADDRFP4 4 +INDIRP4 +ADDRGP4 level+9036 +INDIRB +ASGNB 12 +line 578 +;577: +;578: return NULL; +CNSTP4 0 +RETP4 +LABELV $236 +endproc SelectSpectatorSpawnPoint 0 0 +export InitBodyQue +proc InitBodyQue 12 0 +line 604 +;579:} +;580: +;581:/* +;582:======================================================================= +;583: +;584:BODYQUE +;585: +;586:======================================================================= +;587:*/ +;588: +;589:/* +;590:======================================================================= +;591: +;592:BODYQUE +;593: +;594:======================================================================= +;595:*/ +;596: +;597:#define BODY_SINK_TIME 45000 +;598: +;599:/* +;600:=============== +;601:InitBodyQue +;602:=============== +;603:*/ +;604:void InitBodyQue (void) { +line 608 +;605: int i; +;606: gentity_t *ent; +;607: +;608: level.bodyQueIndex = 0; +ADDRGP4 level+9056 +CNSTI4 0 +ASGNI4 +line 609 +;609: for (i=0; iclassname = "bodyque"; +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +ADDRGP4 $245 +ASGNP4 +line 612 +;612: ent->neverFree = qtrue; +ADDRLP4 0 +INDIRP4 +CNSTI4 468 +ADDP4 +CNSTI4 1 +ASGNI4 +line 613 +;613: level.bodyQue[i] = ent; +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 level+9060 +ADDP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 614 +;614: } +LABELV $242 +line 609 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 8 +LTI4 $241 +line 615 +;615:} +LABELV $239 +endproc InitBodyQue 12 0 +export BodySink +proc BodySink 4 4 +line 624 +;616: +;617:/* +;618:============= +;619:BodySink +;620: +;621:After sitting around for five seconds, fall into the ground and dissapear +;622:============= +;623:*/ +;624:void BodySink( gentity_t *ent ) { +line 625 +;625: if ( level.time - ent->timestamp > BODY_SINK_TIME + 1500 ) { +ADDRGP4 level+32 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 576 +ADDP4 +INDIRI4 +SUBI4 +CNSTI4 46500 +LEI4 $248 +line 627 +;626: // the body ques are never actually freed, they are just unlinked +;627: trap_UnlinkEntity( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_UnlinkEntity +CALLV +pop +line 628 +;628: ent->physicsObject = qfalse; +ADDRFP4 0 +INDIRP4 +CNSTI4 500 +ADDP4 +CNSTI4 0 +ASGNI4 +line 629 +;629: return; +ADDRGP4 $247 +JUMPV +LABELV $248 +line 631 +;630: } +;631: ent->nextthink = level.time + 100; +ADDRFP4 0 +INDIRP4 +CNSTI4 632 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 100 +ADDI4 +ASGNI4 +line 632 +;632: ent->s.pos.trBase[2] -= 1; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRF4 +CNSTF4 1065353216 +SUBF4 +ASGNF4 +line 633 +;633:} +LABELV $247 +endproc BodySink 4 4 +export CopyToBodyQue +proc CopyToBodyQue 64 12 +line 643 +;634: +;635:/* +;636:============= +;637:CopyToBodyQue +;638: +;639:A player is respawning, so make an entity that looks +;640:just like the existing corpse to leave behind. +;641:============= +;642:*/ +;643:void CopyToBodyQue( gentity_t *ent ) { +line 647 +;644: gentity_t *body; +;645: int contents; +;646: +;647: if (level.intermissiontime) +ADDRGP4 level+9008 +INDIRI4 +CNSTI4 0 +EQI4 $253 +line 648 +;648: { +line 649 +;649: return; +ADDRGP4 $252 +JUMPV +LABELV $253 +line 652 +;650: } +;651: +;652: trap_UnlinkEntity (ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_UnlinkEntity +CALLV +pop +line 655 +;653: +;654: // if client is in a nodrop area, don't leave the body +;655: contents = trap_PointContents( ent->s.origin, -1 ); +ADDRFP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +ARGP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 8 +ADDRGP4 trap_PointContents +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 656 +;656: if ( contents & CONTENTS_NODROP ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 2048 +BANDI4 +CNSTI4 0 +EQI4 $256 +line 657 +;657: return; +ADDRGP4 $252 +JUMPV +LABELV $256 +line 660 +;658: } +;659: +;660: if (ent->client && (ent->client->ps.eFlags & EF_DISINTEGRATION)) +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $258 +ADDRLP4 12 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +CNSTI4 33554432 +BANDI4 +CNSTI4 0 +EQI4 $258 +line 661 +;661: { //for now, just don't spawn a body if you got disint'd +line 662 +;662: return; +ADDRGP4 $252 +JUMPV +LABELV $258 +line 666 +;663: } +;664: +;665: // grab a body que and cycle to the next one +;666: body = level.bodyQue[ level.bodyQueIndex ]; +ADDRLP4 0 +ADDRGP4 level+9056 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 level+9060 +ADDP4 +INDIRP4 +ASGNP4 +line 667 +;667: level.bodyQueIndex = (level.bodyQueIndex + 1) % BODY_QUEUE_SIZE; +ADDRGP4 level+9056 +ADDRGP4 level+9056 +INDIRI4 +CNSTI4 1 +ADDI4 +CNSTI4 8 +MODI4 +ASGNI4 +line 669 +;668: +;669: trap_UnlinkEntity (body); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_UnlinkEntity +CALLV +pop +line 670 +;670: body->s = ent->s; +ADDRLP4 0 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 296 +line 673 +;671: +;672: //avoid oddly angled corpses floating around +;673: body->s.angles[PITCH] = body->s.angles[ROLL] = body->s.apos.trBase[PITCH] = body->s.apos.trBase[ROLL] = 0; +ADDRLP4 20 +CNSTF4 0 +ASGNF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 68 +ADDP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 60 +ADDP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 124 +ADDP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +line 675 +;674: +;675: body->s.g2radius = 100; +ADDRLP4 0 +INDIRP4 +CNSTI4 208 +ADDP4 +CNSTI4 100 +ASGNI4 +line 677 +;676: +;677: body->s.eType = ET_BODY; +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 15 +ASGNI4 +line 678 +;678: body->s.eFlags = EF_DEAD; // clear EF_TALK, etc +ADDRLP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +CNSTI4 1 +ASGNI4 +line 680 +;679: +;680: if (ent->client && (ent->client->ps.eFlags & EF_DISINTEGRATION)) +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $264 +ADDRLP4 24 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +CNSTI4 33554432 +BANDI4 +CNSTI4 0 +EQI4 $264 +line 681 +;681: { +line 682 +;682: body->s.eFlags |= EF_DISINTEGRATION; +ADDRLP4 28 +ADDRLP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRI4 +CNSTI4 33554432 +BORI4 +ASGNI4 +line 683 +;683: } +LABELV $264 +line 685 +;684: +;685: VectorCopy(ent->client->ps.lastHitLoc, body->s.origin2); +ADDRLP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1356 +ADDP4 +INDIRB +ASGNB 12 +line 687 +;686: +;687: body->s.powerups = 0; // clear powerups +ADDRLP4 0 +INDIRP4 +CNSTI4 272 +ADDP4 +CNSTI4 0 +ASGNI4 +line 688 +;688: body->s.loopSound = 0; // clear lava burning +ADDRLP4 0 +INDIRP4 +CNSTI4 200 +ADDP4 +CNSTI4 0 +ASGNI4 +line 689 +;689: body->s.number = body - g_entities; +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ASGNI4 +line 690 +;690: body->timestamp = level.time; +ADDRLP4 0 +INDIRP4 +CNSTI4 576 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 691 +;691: body->physicsObject = qtrue; +ADDRLP4 0 +INDIRP4 +CNSTI4 500 +ADDP4 +CNSTI4 1 +ASGNI4 +line 692 +;692: body->physicsBounce = 0; // don't bounce +ADDRLP4 0 +INDIRP4 +CNSTI4 504 +ADDP4 +CNSTF4 0 +ASGNF4 +line 693 +;693: if ( body->s.groundEntityNum == ENTITYNUM_NONE ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 192 +ADDP4 +INDIRI4 +CNSTI4 1023 +NEI4 $267 +line 694 +;694: body->s.pos.trType = TR_GRAVITY; +ADDRLP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 5 +ASGNI4 +line 695 +;695: body->s.pos.trTime = level.time; +ADDRLP4 0 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 696 +;696: VectorCopy( ent->client->ps.velocity, body->s.pos.trDelta ); +ADDRLP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 697 +;697: } else { +ADDRGP4 $268 +JUMPV +LABELV $267 +line 698 +;698: body->s.pos.trType = TR_STATIONARY; +ADDRLP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 0 +ASGNI4 +line 699 +;699: } +LABELV $268 +line 700 +;700: body->s.event = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 252 +ADDP4 +CNSTI4 0 +ASGNI4 +line 702 +;701: +;702: body->s.weapon = ent->s.bolt2; +ADDRLP4 0 +INDIRP4 +CNSTI4 276 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 704 +;703: +;704: if (body->s.weapon == WP_SABER && ent->client->ps.saberInFlight) +ADDRLP4 0 +INDIRP4 +CNSTI4 276 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $270 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 504 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $270 +line 705 +;705: { +line 706 +;706: body->s.weapon = WP_BLASTER; //lie to keep from putting a saber on the corpse, because it was thrown at death +ADDRLP4 0 +INDIRP4 +CNSTI4 276 +ADDP4 +CNSTI4 4 +ASGNI4 +line 707 +;707: } +LABELV $270 +line 709 +;708: +;709: G_AddEvent(body, EV_BODY_QUEUE_COPY, ent->s.clientNum); +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 109 +ARGI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 220 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 G_AddEvent +CALLV +pop +line 711 +;710: +;711: body->r.svFlags = ent->r.svFlags | SVF_BROADCAST; +ADDRLP4 32 +CNSTI4 304 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRI4 +CNSTI4 32 +BORI4 +ASGNI4 +line 712 +;712: VectorCopy (ent->r.mins, body->r.mins); +ADDRLP4 36 +CNSTI4 316 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 713 +;713: VectorCopy (ent->r.maxs, body->r.maxs); +ADDRLP4 40 +CNSTI4 328 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 40 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 40 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 714 +;714: VectorCopy (ent->r.absmin, body->r.absmin); +ADDRLP4 44 +CNSTI4 344 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 715 +;715: VectorCopy (ent->r.absmax, body->r.absmax); +ADDRLP4 48 +CNSTI4 356 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 717 +;716: +;717: body->s.torsoAnim = body->s.legsAnim = ent->client->ps.legsAnim & ~ANIM_TOGGLEBIT; +ADDRLP4 56 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +CNSTI4 -2049 +BANDI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 280 +ADDP4 +ADDRLP4 56 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 284 +ADDP4 +ADDRLP4 56 +INDIRI4 +ASGNI4 +line 719 +;718: +;719: body->clipmask = CONTENTS_SOLID | CONTENTS_PLAYERCLIP; +ADDRLP4 0 +INDIRP4 +CNSTI4 508 +ADDP4 +CNSTI4 17 +ASGNI4 +line 720 +;720: body->r.contents = CONTENTS_CORPSE; +ADDRLP4 0 +INDIRP4 +CNSTI4 340 +ADDP4 +CNSTI4 512 +ASGNI4 +line 721 +;721: body->r.ownerNum = ent->s.number; +ADDRLP4 0 +INDIRP4 +CNSTI4 396 +ADDP4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +line 723 +;722: +;723: body->nextthink = level.time + BODY_SINK_TIME; +ADDRLP4 0 +INDIRP4 +CNSTI4 632 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 45000 +ADDI4 +ASGNI4 +line 724 +;724: body->think = BodySink; +ADDRLP4 0 +INDIRP4 +CNSTI4 636 +ADDP4 +ADDRGP4 BodySink +ASGNP4 +line 726 +;725: +;726: body->die = body_die; +ADDRLP4 0 +INDIRP4 +CNSTI4 660 +ADDP4 +ADDRGP4 body_die +ASGNP4 +line 729 +;727: +;728: // don't take more damage if already gibbed +;729: if ( ent->health <= GIB_HEALTH ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +CNSTI4 -40 +GTI4 $273 +line 730 +;730: body->takedamage = qfalse; +ADDRLP4 0 +INDIRP4 +CNSTI4 680 +ADDP4 +CNSTI4 0 +ASGNI4 +line 731 +;731: } else { +ADDRGP4 $274 +JUMPV +LABELV $273 +line 732 +;732: body->takedamage = qtrue; +ADDRLP4 0 +INDIRP4 +CNSTI4 680 +ADDP4 +CNSTI4 1 +ASGNI4 +line 733 +;733: } +LABELV $274 +line 735 +;734: +;735: VectorCopy ( body->s.pos.trBase, body->r.currentOrigin ); +ADDRLP4 0 +INDIRP4 +CNSTI4 368 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 736 +;736: trap_LinkEntity (body); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 737 +;737:} +LABELV $252 +endproc CopyToBodyQue 64 12 +export SetClientViewAngle +proc SetClientViewAngle 16 0 +line 748 +;738: +;739://====================================================================== +;740: +;741: +;742:/* +;743:================== +;744:SetClientViewAngle +;745: +;746:================== +;747:*/ +;748:void SetClientViewAngle( gentity_t *ent, vec3_t angle ) { +line 752 +;749: int i; +;750: +;751: // set the delta angle +;752: for (i=0 ; i<3 ; i++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $276 +line 755 +;753: int cmdAngle; +;754: +;755: cmdAngle = ANGLE2SHORT(angle[i]); +ADDRLP4 4 +CNSTF4 1199570944 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRF4 +MULF4 +CNSTF4 1135869952 +DIVF4 +CVFI4 4 +CNSTI4 65535 +BANDI4 +ASGNI4 +line 756 +;756: ent->client->ps.delta_angles[i] = cmdAngle - ent->client->pers.cmd.angles[i]; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +CNSTI4 68 +ADDP4 +ADDP4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1376 +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 757 +;757: } +LABELV $277 +line 752 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LTI4 $276 +line 758 +;758: VectorCopy( angle, ent->s.angles ); +ADDRFP4 0 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDRFP4 4 +INDIRP4 +INDIRB +ASGNB 12 +line 759 +;759: VectorCopy (ent->s.angles, ent->client->ps.viewangles); +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 156 +ADDP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 116 +ADDP4 +INDIRB +ASGNB 12 +line 760 +;760:} +LABELV $275 +endproc SetClientViewAngle 16 0 +export respawn +proc respawn 12 8 +line 767 +;761: +;762:/* +;763:================ +;764:respawn +;765:================ +;766:*/ +;767:void respawn( gentity_t *ent ) { +line 770 +;768: gentity_t *tent; +;769: +;770: CopyToBodyQue (ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 CopyToBodyQue +CALLV +pop +line 772 +;771: +;772: trap_UnlinkEntity (ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_UnlinkEntity +CALLV +pop +line 773 +;773: ClientSpawn(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ClientSpawn +CALLV +pop +line 776 +;774: +;775: // add a teleportation effect +;776: tent = G_TempEntity( ent->client->ps.origin, EV_PLAYER_TELEPORT_IN ); +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 4 +ADDRGP4 G_TempEntity +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 777 +;777: tent->s.clientNum = ent->s.clientNum; +ADDRLP4 8 +CNSTI4 220 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 778 +;778:} +LABELV $280 +endproc respawn 12 8 +export TeamCount +proc TeamCount 8 0 +line 787 +;779: +;780:/* +;781:================ +;782:TeamCount +;783: +;784:Returns number of players on a team +;785:================ +;786:*/ +;787:team_t TeamCount( int ignoreClientNum, int team ) { +line 789 +;788: int i; +;789: int count = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 791 +;790: +;791: for ( i = 0 ; i < level.maxclients ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $285 +JUMPV +LABELV $282 +line 792 +;792: if ( i == ignoreClientNum ) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $287 +line 793 +;793: continue; +ADDRGP4 $283 +JUMPV +LABELV $287 +line 795 +;794: } +;795: if ( level.clients[i].pers.connected == CON_DISCONNECTED ) { +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $289 +line 796 +;796: continue; +ADDRGP4 $283 +JUMPV +LABELV $289 +line 798 +;797: } +;798: if ( level.clients[i].sess.sessionTeam == team ) { +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRFP4 4 +INDIRI4 +NEI4 $291 +line 799 +;799: count++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 800 +;800: } +LABELV $291 +line 801 +;801: } +LABELV $283 +line 791 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $285 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $282 +line 803 +;802: +;803: return count; +ADDRLP4 4 +INDIRI4 +RETI4 +LABELV $281 +endproc TeamCount 8 0 +export TeamLeader +proc TeamLeader 4 0 +line 813 +;804:} +;805: +;806:/* +;807:================ +;808:TeamLeader +;809: +;810:Returns the client number of the team leader +;811:================ +;812:*/ +;813:int TeamLeader( int team ) { +line 816 +;814: int i; +;815: +;816: for ( i = 0 ; i < level.maxclients ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $297 +JUMPV +LABELV $294 +line 817 +;817: if ( level.clients[i].pers.connected == CON_DISCONNECTED ) { +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $299 +line 818 +;818: continue; +ADDRGP4 $295 +JUMPV +LABELV $299 +line 820 +;819: } +;820: if ( level.clients[i].sess.sessionTeam == team ) { +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $301 +line 821 +;821: if ( level.clients[i].sess.teamLeader ) +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1560 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $303 +line 822 +;822: return i; +ADDRLP4 0 +INDIRI4 +RETI4 +ADDRGP4 $293 +JUMPV +LABELV $303 +line 823 +;823: } +LABELV $301 +line 824 +;824: } +LABELV $295 +line 816 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $297 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $294 +line 826 +;825: +;826: return -1; +CNSTI4 -1 +RETI4 +LABELV $293 +endproc TeamLeader 4 0 +export PickTeam +proc PickTeam 24 8 +line 836 +;827:} +;828: +;829: +;830:/* +;831:================ +;832:PickTeam +;833: +;834:================ +;835:*/ +;836:team_t PickTeam( int ignoreClientNum ) { +line 839 +;837: int counts[TEAM_NUM_TEAMS]; +;838: +;839: counts[TEAM_BLUE] = TeamCount( ignoreClientNum, TEAM_BLUE ); +ADDRFP4 0 +INDIRI4 +ARGI4 +CNSTI4 2 +ARGI4 +ADDRLP4 16 +ADDRGP4 TeamCount +CALLI4 +ASGNI4 +ADDRLP4 0+8 +ADDRLP4 16 +INDIRI4 +ASGNI4 +line 840 +;840: counts[TEAM_RED] = TeamCount( ignoreClientNum, TEAM_RED ); +ADDRFP4 0 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRLP4 20 +ADDRGP4 TeamCount +CALLI4 +ASGNI4 +ADDRLP4 0+4 +ADDRLP4 20 +INDIRI4 +ASGNI4 +line 842 +;841: +;842: if ( counts[TEAM_BLUE] > counts[TEAM_RED] ) { +ADDRLP4 0+8 +INDIRI4 +ADDRLP4 0+4 +INDIRI4 +LEI4 $308 +line 843 +;843: return TEAM_RED; +CNSTI4 1 +RETI4 +ADDRGP4 $305 +JUMPV +LABELV $308 +line 845 +;844: } +;845: if ( counts[TEAM_RED] > counts[TEAM_BLUE] ) { +ADDRLP4 0+4 +INDIRI4 +ADDRLP4 0+8 +INDIRI4 +LEI4 $312 +line 846 +;846: return TEAM_BLUE; +CNSTI4 2 +RETI4 +ADDRGP4 $305 +JUMPV +LABELV $312 +line 849 +;847: } +;848: // equal team count, so join the team with the lowest score +;849: if ( level.teamScores[TEAM_BLUE] > level.teamScores[TEAM_RED] ) { +ADDRGP4 level+44+8 +INDIRI4 +ADDRGP4 level+44+4 +INDIRI4 +LEI4 $316 +line 850 +;850: return TEAM_RED; +CNSTI4 1 +RETI4 +ADDRGP4 $305 +JUMPV +LABELV $316 +line 852 +;851: } +;852: return TEAM_BLUE; +CNSTI4 2 +RETI4 +LABELV $305 +endproc PickTeam 24 8 +proc ClientCleanName 40 12 +line 880 +;853:} +;854: +;855:/* +;856:=========== +;857:ForceClientSkin +;858: +;859:Forces a client's skin (for teamplay) +;860:=========== +;861:*/ +;862:/* +;863:static void ForceClientSkin( gclient_t *client, char *model, const char *skin ) { +;864: char *p; +;865: +;866: if ((p = Q_strrchr(model, '/')) != 0) { +;867: *p = 0; +;868: } +;869: +;870: Q_strcat(model, MAX_QPATH, "/"); +;871: Q_strcat(model, MAX_QPATH, skin); +;872:} +;873:*/ +;874: +;875:/* +;876:=========== +;877:ClientCheckName +;878:============ +;879:*/ +;880:static void ClientCleanName( const char *in, char *out, int outSize ) { +line 887 +;881: int len, colorlessLen; +;882: char ch; +;883: char *p; +;884: int spaces; +;885: +;886: //save room for trailing null byte +;887: outSize--; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 889 +;888: +;889: len = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 890 +;890: colorlessLen = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 891 +;891: p = out; +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +line 892 +;892: *p = 0; +ADDRLP4 12 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 893 +;893: spaces = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $324 +JUMPV +LABELV $323 +line 895 +;894: +;895: while( 1 ) { +line 896 +;896: ch = *in++; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 20 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 20 +INDIRP4 +INDIRI1 +ASGNI1 +line 897 +;897: if( !ch ) { +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $326 +line 898 +;898: break; +ADDRGP4 $325 +JUMPV +LABELV $326 +line 902 +;899: } +;900: +;901: // don't allow leading spaces +;902: if( !*p && ch == ' ' ) { +ADDRLP4 12 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $328 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $328 +line 903 +;903: continue; +ADDRGP4 $324 +JUMPV +LABELV $328 +line 907 +;904: } +;905: +;906: // check colors +;907: if( ch == Q_COLOR_ESCAPE ) { +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 94 +NEI4 $330 +line 909 +;908: // solo trailing carat is not a color prefix +;909: if( !*in ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $332 +line 910 +;910: break; +ADDRGP4 $325 +JUMPV +LABELV $332 +line 914 +;911: } +;912: +;913: // don't allow black in a name, period +;914: if( ColorIndex(*in) == 0 ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +CNSTI4 7 +BANDI4 +CNSTI4 0 +NEI4 $334 +line 915 +;915: in++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 916 +;916: continue; +ADDRGP4 $324 +JUMPV +LABELV $334 +line 920 +;917: } +;918: +;919: // make sure room in dest for both chars +;920: if( len > outSize - 2 ) { +ADDRLP4 4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +CNSTI4 2 +SUBI4 +LEI4 $336 +line 921 +;921: break; +ADDRGP4 $325 +JUMPV +LABELV $336 +line 924 +;922: } +;923: +;924: *out++ = ch; +ADDRLP4 24 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 24 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 0 +INDIRI1 +ASGNI1 +line 925 +;925: *out++ = *in++; +ADDRLP4 28 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 36 +CNSTI4 1 +ASGNI4 +ADDRFP4 4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 32 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 32 +INDIRP4 +INDIRI1 +ASGNI1 +line 926 +;926: len += 2; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +ADDI4 +ASGNI4 +line 927 +;927: continue; +ADDRGP4 $324 +JUMPV +LABELV $330 +line 931 +;928: } +;929: +;930: // don't allow too many consecutive spaces +;931: if( ch == ' ' ) { +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 32 +NEI4 $338 +line 932 +;932: spaces++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 933 +;933: if( spaces > 3 ) { +ADDRLP4 8 +INDIRI4 +CNSTI4 3 +LEI4 $339 +line 934 +;934: continue; +ADDRGP4 $324 +JUMPV +line 936 +;935: } +;936: } +LABELV $338 +line 937 +;937: else { +line 938 +;938: spaces = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 939 +;939: } +LABELV $339 +line 941 +;940: +;941: if( len > outSize - 1 ) { +ADDRLP4 4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +LEI4 $342 +line 942 +;942: break; +ADDRGP4 $325 +JUMPV +LABELV $342 +line 945 +;943: } +;944: +;945: *out++ = ch; +ADDRLP4 24 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 24 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 0 +INDIRI1 +ASGNI1 +line 946 +;946: colorlessLen++; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 947 +;947: len++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 948 +;948: } +LABELV $324 +line 895 +ADDRGP4 $323 +JUMPV +LABELV $325 +line 949 +;949: *out = 0; +ADDRFP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 952 +;950: +;951: // don't allow empty names +;952: if( *p == 0 || colorlessLen == 0 ) { +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +ADDRLP4 12 +INDIRP4 +INDIRI1 +CVII4 1 +ADDRLP4 20 +INDIRI4 +EQI4 $346 +ADDRLP4 16 +INDIRI4 +ADDRLP4 20 +INDIRI4 +NEI4 $344 +LABELV $346 +line 953 +;953: Q_strncpyz( p, "Padawan", outSize ); +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 $347 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 954 +;954: } +LABELV $344 +line 955 +;955:} +LABELV $322 +endproc ClientCleanName 40 12 +data +export g2SaberInstance +align 4 +LABELV g2SaberInstance +byte 4 0 +lit +align 4 +LABELV $349 +byte 4 0 +byte 4 0 +byte 4 0 +export SetupGameGhoul2Model +code +proc SetupGameGhoul2Model 188 44 +line 980 +;956: +;957:#ifdef _DEBUG +;958:void G_DebugWrite(const char *path, const char *text) +;959:{ +;960: fileHandle_t f; +;961: +;962: trap_FS_FOpenFile( path, &f, FS_APPEND ); +;963: trap_FS_Write(text, strlen(text), f); +;964: trap_FS_FCloseFile(f); +;965:} +;966:#endif +;967: +;968:/* +;969:=========== +;970:SetupGameGhoul2Model +;971: +;972:There are two ghoul2 model instances per player (actually three). One is on the clientinfo (the base for the client side +;973:player, and copied for player spawns and for corpses). One is attached to the centity itself, which is the model acutally +;974:animated and rendered by the system. The final is the game ghoul2 model. This is animated by pmove on the server, and +;975:is used for determining where the lightsaber should be, and for per-poly collision tests. +;976:=========== +;977:*/ +;978:void *g2SaberInstance = NULL; +;979:void SetupGameGhoul2Model(gclient_t *client, char *modelname) +;980:{ +line 985 +;981: int handle; +;982: char afilename[MAX_QPATH]; +;983: char /**GLAName,*/ *slash; +;984: char GLAName[MAX_QPATH]; +;985: vec3_t tempVec = {0,0,0}; +ADDRLP4 64 +ADDRGP4 $349 +INDIRB +ASGNB 12 +line 988 +;986: +;987: // First things first. If this is a ghoul2 model, then let's make sure we demolish this first. +;988: if (client->ghoul2 && trap_G2_HaveWeGhoul2Models(client->ghoul2)) +ADDRLP4 148 +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 148 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $350 +ADDRLP4 148 +INDIRP4 +ARGP4 +ADDRLP4 152 +ADDRGP4 trap_G2_HaveWeGhoul2Models +CALLI4 +ASGNI4 +ADDRLP4 152 +INDIRI4 +CNSTI4 0 +EQI4 $350 +line 989 +;989: { +line 990 +;990: trap_G2API_CleanGhoul2Models(&(client->ghoul2)); +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +ARGP4 +ADDRGP4 trap_G2API_CleanGhoul2Models +CALLV +pop +line 991 +;991: } +LABELV $350 +line 1009 +;992: +;993: /* +;994: Com_sprintf( afilename, sizeof( afilename ), "models/players/%s/model.glm", modelname ); +;995: handle = trap_G2API_InitGhoul2Model(&client->ghoul2, afilename, 0, 0, -20, 0, 0); +;996: if (handle<0) +;997: { +;998: Com_sprintf( afilename, sizeof( afilename ), "models/players/kyle/model.glm" ); +;999: handle = trap_G2API_InitGhoul2Model(&client->ghoul2, afilename, 0, 0, -20, 0, 0); +;1000: +;1001: if (handle<0) +;1002: { +;1003: return; +;1004: } +;1005: } +;1006: */ +;1007: +;1008: //rww - just load the "standard" model for the server" +;1009: if (!precachedKyle) +ADDRGP4 precachedKyle +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $352 +line 1010 +;1010: { +line 1011 +;1011: Com_sprintf( afilename, sizeof( afilename ), "models/players/kyle/model.glm" ); +ADDRLP4 0 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $354 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 1012 +;1012: handle = trap_G2API_InitGhoul2Model(&precachedKyle, afilename, 0, 0, -20, 0, 0); +ADDRGP4 precachedKyle +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRLP4 156 +CNSTI4 0 +ASGNI4 +ADDRLP4 156 +INDIRI4 +ARGI4 +ADDRLP4 156 +INDIRI4 +ARGI4 +CNSTI4 -20 +ARGI4 +ADDRLP4 156 +INDIRI4 +ARGI4 +ADDRLP4 156 +INDIRI4 +ARGI4 +ADDRLP4 160 +ADDRGP4 trap_G2API_InitGhoul2Model +CALLI4 +ASGNI4 +ADDRLP4 144 +ADDRLP4 160 +INDIRI4 +ASGNI4 +line 1014 +;1013: +;1014: if (handle<0) +ADDRLP4 144 +INDIRI4 +CNSTI4 0 +GEI4 $355 +line 1015 +;1015: { +line 1016 +;1016: return; +ADDRGP4 $348 +JUMPV +LABELV $355 +line 1018 +;1017: } +;1018: } +LABELV $352 +line 1020 +;1019: +;1020: if (precachedKyle && trap_G2_HaveWeGhoul2Models(precachedKyle)) +ADDRLP4 156 +ADDRGP4 precachedKyle +INDIRP4 +ASGNP4 +ADDRLP4 156 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $348 +ADDRLP4 156 +INDIRP4 +ARGP4 +ADDRLP4 160 +ADDRGP4 trap_G2_HaveWeGhoul2Models +CALLI4 +ASGNI4 +ADDRLP4 160 +INDIRI4 +CNSTI4 0 +EQI4 $348 +line 1021 +;1021: { +line 1022 +;1022: trap_G2API_DuplicateGhoul2Instance(precachedKyle, &client->ghoul2); +ADDRGP4 precachedKyle +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +ARGP4 +ADDRGP4 trap_G2API_DuplicateGhoul2Instance +CALLV +pop +line 1023 +;1023: } +line 1025 +;1024: else +;1025: { +line 1026 +;1026: return; +LABELV $358 +line 1031 +;1027: } +;1028: +;1029: // The model is now loaded. +;1030: +;1031: GLAName[0] = 0; +ADDRLP4 76 +CNSTI1 0 +ASGNI1 +line 1033 +;1032: +;1033: if (!BGPAFtextLoaded) +ADDRGP4 BGPAFtextLoaded +INDIRI4 +CNSTI4 0 +NEI4 $359 +line 1034 +;1034: { +line 1037 +;1035: //get the location of the animation.cfg +;1036: //GLAName = trap_G2API_GetGLAName( client->ghoul2, 0); +;1037: trap_G2API_GetGLAName( client->ghoul2, 0, GLAName); +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 76 +ARGP4 +ADDRGP4 trap_G2API_GetGLAName +CALLV +pop +line 1039 +;1038: +;1039: if (!GLAName[0]) +ADDRLP4 76 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $361 +line 1040 +;1040: { +line 1041 +;1041: if (!BG_ParseAnimationFile("models/players/_humanoid/animation.cfg")) +ADDRGP4 $365 +ARGP4 +ADDRLP4 164 +ADDRGP4 BG_ParseAnimationFile +CALLI4 +ASGNI4 +ADDRLP4 164 +INDIRI4 +CNSTI4 0 +NEI4 $348 +line 1042 +;1042: { +line 1043 +;1043: Com_Printf( "Failed to load animation file %s\n", afilename ); +ADDRGP4 $366 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1044 +;1044: return; +ADDRGP4 $348 +JUMPV +line 1046 +;1045: } +;1046: return; +LABELV $361 +line 1048 +;1047: } +;1048: Q_strncpyz( afilename, GLAName, sizeof( afilename )); +ADDRLP4 0 +ARGP4 +ADDRLP4 76 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1049 +;1049: slash = Q_strrchr( afilename, '/' ); +ADDRLP4 0 +ARGP4 +CNSTI4 47 +ARGI4 +ADDRLP4 164 +ADDRGP4 Q_strrchr +CALLP4 +ASGNP4 +ADDRLP4 140 +ADDRLP4 164 +INDIRP4 +ASGNP4 +line 1050 +;1050: if ( slash ) +ADDRLP4 140 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $348 +line 1051 +;1051: { +line 1052 +;1052: strcpy(slash, "/animation.cfg"); +ADDRLP4 140 +INDIRP4 +ARGP4 +ADDRGP4 $369 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1053 +;1053: } // Now afilename holds just the path to the animation.cfg +line 1055 +;1054: else +;1055: { // Didn't find any slashes, this is a raw filename right in base (whish isn't a good thing) +line 1056 +;1056: return; +LABELV $368 +line 1060 +;1057: } +;1058: +;1059: // Try to load the animation.cfg for this model then. +;1060: if ( !BG_ParseAnimationFile( afilename ) ) +ADDRLP4 0 +ARGP4 +ADDRLP4 168 +ADDRGP4 BG_ParseAnimationFile +CALLI4 +ASGNI4 +ADDRLP4 168 +INDIRI4 +CNSTI4 0 +NEI4 $370 +line 1061 +;1061: { // The GLA's animations failed +line 1062 +;1062: if (!BG_ParseAnimationFile("models/players/_humanoid/animation.cfg")) +ADDRGP4 $365 +ARGP4 +ADDRLP4 172 +ADDRGP4 BG_ParseAnimationFile +CALLI4 +ASGNI4 +ADDRLP4 172 +INDIRI4 +CNSTI4 0 +NEI4 $372 +line 1063 +;1063: { +line 1064 +;1064: Com_Printf( "Failed to load animation file %s\n", afilename ); +ADDRGP4 $366 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1065 +;1065: return; +ADDRGP4 $348 +JUMPV +LABELV $372 +line 1067 +;1066: } +;1067: } +LABELV $370 +line 1068 +;1068: } +LABELV $359 +line 1070 +;1069: +;1070: trap_G2API_AddBolt(client->ghoul2, 0, "*r_hand"); +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $374 +ARGP4 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +pop +line 1071 +;1071: trap_G2API_AddBolt(client->ghoul2, 0, "*l_hand"); +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $375 +ARGP4 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +pop +line 1074 +;1072: +;1073: // NOTE - ensure this sequence of bolt and bone accessing are always the same because the client expects them in a certain order +;1074: trap_G2API_SetBoneAnim(client->ghoul2, 0, "model_root", 0, 12, BONE_ANIM_OVERRIDE_LOOP, 1.0f, level.time, -1, -1); +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 164 +CNSTI4 0 +ASGNI4 +ADDRLP4 164 +INDIRI4 +ARGI4 +ADDRGP4 $376 +ARGP4 +ADDRLP4 164 +INDIRI4 +ARGI4 +CNSTI4 12 +ARGI4 +CNSTI4 16 +ARGI4 +CNSTF4 1065353216 +ARGF4 +ADDRGP4 level+32 +INDIRI4 +ARGI4 +CNSTF4 3212836864 +ARGF4 +CNSTI4 -1 +ARGI4 +ADDRGP4 trap_G2API_SetBoneAnim +CALLI4 +pop +line 1075 +;1075: trap_G2API_SetBoneAngles(client->ghoul2, 0, "upper_lumbar", tempVec, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, NULL, 0, level.time); +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 168 +CNSTI4 0 +ASGNI4 +ADDRLP4 168 +INDIRI4 +ARGI4 +ADDRGP4 $378 +ARGP4 +ADDRLP4 64 +ARGP4 +CNSTI4 2 +ARGI4 +CNSTI4 1 +ARGI4 +CNSTI4 6 +ARGI4 +CNSTI4 5 +ARGI4 +CNSTP4 0 +ARGP4 +ADDRLP4 168 +INDIRI4 +ARGI4 +ADDRGP4 level+32 +INDIRI4 +ARGI4 +ADDRGP4 trap_G2API_SetBoneAngles +CALLI4 +pop +line 1076 +;1076: trap_G2API_SetBoneAngles(client->ghoul2, 0, "cranium", tempVec, BONE_ANGLES_POSTMULT, POSITIVE_Z, NEGATIVE_Y, POSITIVE_X, NULL, 0, level.time); +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 172 +CNSTI4 0 +ASGNI4 +ADDRLP4 172 +INDIRI4 +ARGI4 +ADDRGP4 $380 +ARGP4 +ADDRLP4 64 +ARGP4 +ADDRLP4 176 +CNSTI4 2 +ASGNI4 +ADDRLP4 176 +INDIRI4 +ARGI4 +ADDRLP4 176 +INDIRI4 +ARGI4 +CNSTI4 6 +ARGI4 +CNSTI4 1 +ARGI4 +CNSTP4 0 +ARGP4 +ADDRLP4 172 +INDIRI4 +ARGI4 +ADDRGP4 level+32 +INDIRI4 +ARGI4 +ADDRGP4 trap_G2API_SetBoneAngles +CALLI4 +pop +line 1078 +;1077: +;1078: if (!g2SaberInstance) +ADDRGP4 g2SaberInstance +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $382 +line 1079 +;1079: { +line 1080 +;1080: trap_G2API_InitGhoul2Model(&g2SaberInstance, "models/weapons2/saber/saber_w.glm", 0, 0, -20, 0, 0); +ADDRGP4 g2SaberInstance +ARGP4 +ADDRGP4 $108 +ARGP4 +ADDRLP4 180 +CNSTI4 0 +ASGNI4 +ADDRLP4 180 +INDIRI4 +ARGI4 +ADDRLP4 180 +INDIRI4 +ARGI4 +CNSTI4 -20 +ARGI4 +ADDRLP4 180 +INDIRI4 +ARGI4 +ADDRLP4 180 +INDIRI4 +ARGI4 +ADDRGP4 trap_G2API_InitGhoul2Model +CALLI4 +pop +line 1082 +;1081: +;1082: if (g2SaberInstance) +ADDRGP4 g2SaberInstance +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $384 +line 1083 +;1083: { +line 1085 +;1084: // indicate we will be bolted to model 0 (ie the player) on bolt 0 (always the right hand) when we get copied +;1085: trap_G2API_SetBoltInfo(g2SaberInstance, 0, 0); +ADDRGP4 g2SaberInstance +INDIRP4 +ARGP4 +ADDRLP4 184 +CNSTI4 0 +ASGNI4 +ADDRLP4 184 +INDIRI4 +ARGI4 +ADDRLP4 184 +INDIRI4 +ARGI4 +ADDRGP4 trap_G2API_SetBoltInfo +CALLV +pop +line 1087 +;1086: // now set up the gun bolt on it +;1087: trap_G2API_AddBolt(g2SaberInstance, 0, "*flash"); +ADDRGP4 g2SaberInstance +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $386 +ARGP4 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +pop +line 1088 +;1088: } +LABELV $384 +line 1089 +;1089: } +LABELV $382 +line 1091 +;1090: +;1091: if (g2SaberInstance) +ADDRGP4 g2SaberInstance +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $387 +line 1092 +;1092: { +line 1093 +;1093: trap_G2API_CopySpecificGhoul2Model(g2SaberInstance, 0, client->ghoul2, 1); +ADDRGP4 g2SaberInstance +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_G2API_CopySpecificGhoul2Model +CALLV +pop +line 1094 +;1094: } +LABELV $387 +line 1095 +;1095:} +LABELV $348 +endproc SetupGameGhoul2Model 188 44 +export ClientUserinfoChanged +proc ClientUserinfoChanged 6372 52 +line 1111 +;1096: +;1097: +;1098: +;1099: +;1100:/* +;1101:=========== +;1102:ClientUserInfoChanged +;1103: +;1104:Called from ClientConnect when the player first connects and +;1105:directly by the server system when the player updates a userinfo variable. +;1106: +;1107:The game can override any of the settings and call trap_SetUserinfo +;1108:if desired. +;1109:============ +;1110:*/ +;1111:void ClientUserinfoChanged( int clientNum ) { +line 1126 +;1112: gentity_t *ent; +;1113: int teamTask, teamLeader, team, health; +;1114: char *s; +;1115: char model[MAX_QPATH]; +;1116: //char headModel[MAX_QPATH]; +;1117: char forcePowers[MAX_QPATH]; +;1118: char oldname[MAX_STRING_CHARS]; +;1119: gclient_t *client; +;1120: char c1[MAX_INFO_STRING]; +;1121: char c2[MAX_INFO_STRING]; +;1122: char redTeam[MAX_INFO_STRING]; +;1123: char blueTeam[MAX_INFO_STRING]; +;1124: char userinfo[MAX_INFO_STRING]; +;1125: +;1126: ent = g_entities + clientNum; +ADDRLP4 1032 +CNSTI4 828 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1127 +;1127: client = ent->client; +ADDRLP4 0 +ADDRLP4 1032 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 1129 +;1128: +;1129: trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetUserinfo +CALLV +pop +line 1132 +;1130: +;1131: // check for malformed or illegal info strings +;1132: if ( !Info_Validate(userinfo) ) { +ADDRLP4 4 +ARGP4 +ADDRLP4 6300 +ADDRGP4 Info_Validate +CALLI4 +ASGNI4 +ADDRLP4 6300 +INDIRI4 +CNSTI4 0 +NEI4 $390 +line 1133 +;1133: strcpy (userinfo, "\\name\\badinfo"); +ADDRLP4 4 +ARGP4 +ADDRGP4 $392 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1134 +;1134: } +LABELV $390 +line 1137 +;1135: +;1136: // check for local client +;1137: s = Info_ValueForKey( userinfo, "ip" ); +ADDRLP4 4 +ARGP4 +ADDRGP4 $393 +ARGP4 +ADDRLP4 6304 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 6304 +INDIRP4 +ASGNP4 +line 1138 +;1138: if ( !strcmp( s, "localhost" ) ) { +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 $396 +ARGP4 +ADDRLP4 6308 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 6308 +INDIRI4 +CNSTI4 0 +NEI4 $394 +line 1139 +;1139: client->pers.localClient = qtrue; +ADDRLP4 0 +INDIRP4 +CNSTI4 1400 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1140 +;1140: } +LABELV $394 +line 1143 +;1141: +;1142: // check the item prediction +;1143: s = Info_ValueForKey( userinfo, "cg_predictItems" ); +ADDRLP4 4 +ARGP4 +ADDRGP4 $397 +ARGP4 +ADDRLP4 6312 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 6312 +INDIRP4 +ASGNP4 +line 1144 +;1144: if ( !atoi( s ) ) { +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRLP4 6316 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 6316 +INDIRI4 +CNSTI4 0 +NEI4 $398 +line 1145 +;1145: client->pers.predictItemPickup = qfalse; +ADDRLP4 0 +INDIRP4 +CNSTI4 1408 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1146 +;1146: } else { +ADDRGP4 $399 +JUMPV +LABELV $398 +line 1147 +;1147: client->pers.predictItemPickup = qtrue; +ADDRLP4 0 +INDIRP4 +CNSTI4 1408 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1148 +;1148: } +LABELV $399 +line 1151 +;1149: +;1150: // set name +;1151: Q_strncpyz ( oldname, client->pers.netname, sizeof( oldname ) ); +ADDRLP4 1100 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1152 +;1152: s = Info_ValueForKey (userinfo, "name"); +ADDRLP4 4 +ARGP4 +ADDRGP4 $400 +ARGP4 +ADDRLP4 6320 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 6320 +INDIRP4 +ASGNP4 +line 1153 +;1153: ClientCleanName( s, client->pers.netname, sizeof(client->pers.netname) ); +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +CNSTI4 36 +ARGI4 +ADDRGP4 ClientCleanName +CALLV +pop +line 1155 +;1154: +;1155: if ( client->sess.sessionTeam == TEAM_SPECTATOR ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $401 +line 1156 +;1156: if ( client->sess.spectatorState == SPECTATOR_SCOREBOARD ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $403 +line 1157 +;1157: Q_strncpyz( client->pers.netname, "scoreboard", sizeof(client->pers.netname) ); +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRGP4 $405 +ARGP4 +CNSTI4 36 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1158 +;1158: } +LABELV $403 +line 1159 +;1159: } +LABELV $401 +line 1161 +;1160: +;1161: if ( client->pers.connected == CON_CONNECTED ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $406 +line 1162 +;1162: if ( strcmp( oldname, client->pers.netname ) ) { +ADDRLP4 1100 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 6324 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 6324 +INDIRI4 +CNSTI4 0 +EQI4 $408 +line 1163 +;1163: trap_SendServerCommand( -1, va("print \"%s" S_COLOR_WHITE " %s %s\n\"", oldname, G_GetStripEdString("SVINGAME", "PLRENAME"), +ADDRGP4 $148 +ARGP4 +ADDRGP4 $411 +ARGP4 +ADDRLP4 6328 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $410 +ARGP4 +ADDRLP4 1100 +ARGP4 +ADDRLP4 6328 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 6332 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 6332 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1165 +;1164: client->pers.netname) ); +;1165: } +LABELV $408 +line 1166 +;1166: } +LABELV $406 +line 1169 +;1167: +;1168: // set max health +;1169: health = 100; //atoi( Info_ValueForKey( userinfo, "handicap" ) ); +ADDRLP4 2132 +CNSTI4 100 +ASGNI4 +line 1170 +;1170: client->pers.maxHealth = health; +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +ADDRLP4 2132 +INDIRI4 +ASGNI4 +line 1171 +;1171: if ( client->pers.maxHealth < 1 || client->pers.maxHealth > 100 ) { +ADDRLP4 6324 +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 6324 +INDIRI4 +CNSTI4 1 +LTI4 $414 +ADDRLP4 6324 +INDIRI4 +CNSTI4 100 +LEI4 $412 +LABELV $414 +line 1172 +;1172: client->pers.maxHealth = 100; +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +CNSTI4 100 +ASGNI4 +line 1173 +;1173: } +LABELV $412 +line 1174 +;1174: client->ps.stats[STAT_MAX_HEALTH] = client->pers.maxHealth; +ADDRLP4 0 +INDIRP4 +CNSTI4 248 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +INDIRI4 +ASGNI4 +line 1177 +;1175: +;1176: // set model +;1177: if( g_gametype.integer >= GT_TEAM ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $415 +line 1178 +;1178: Q_strncpyz( model, Info_ValueForKey (userinfo, "team_model"), sizeof( model ) ); +ADDRLP4 4 +ARGP4 +ADDRGP4 $418 +ARGP4 +ADDRLP4 6332 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1036 +ARGP4 +ADDRLP4 6332 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1180 +;1179: //Q_strncpyz( headModel, Info_ValueForKey (userinfo, "team_headmodel"), sizeof( headModel ) ); +;1180: } else { +ADDRGP4 $416 +JUMPV +LABELV $415 +line 1181 +;1181: Q_strncpyz( model, Info_ValueForKey (userinfo, "model"), sizeof( model ) ); +ADDRLP4 4 +ARGP4 +ADDRGP4 $419 +ARGP4 +ADDRLP4 6332 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1036 +ARGP4 +ADDRLP4 6332 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1183 +;1182: //Q_strncpyz( headModel, Info_ValueForKey (userinfo, "headmodel"), sizeof( headModel ) ); +;1183: } +LABELV $416 +line 1185 +;1184: +;1185: Q_strncpyz( forcePowers, Info_ValueForKey (userinfo, "forcepowers"), sizeof( forcePowers ) ); +ADDRLP4 4 +ARGP4 +ADDRGP4 $420 +ARGP4 +ADDRLP4 6332 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 2136 +ARGP4 +ADDRLP4 6332 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1188 +;1186: +;1187: // bots set their team a few frames later +;1188: if (g_gametype.integer >= GT_TEAM && g_entities[clientNum].r.svFlags & SVF_BOT) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $421 +CNSTI4 828 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities+296+8 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $421 +line 1189 +;1189: s = Info_ValueForKey( userinfo, "team" ); +ADDRLP4 4 +ARGP4 +ADDRGP4 $426 +ARGP4 +ADDRLP4 6336 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 6336 +INDIRP4 +ASGNP4 +line 1190 +;1190: if ( !Q_stricmp( s, "red" ) || !Q_stricmp( s, "r" ) ) { +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 $429 +ARGP4 +ADDRLP4 6340 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 6340 +INDIRI4 +CNSTI4 0 +EQI4 $431 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 $430 +ARGP4 +ADDRLP4 6344 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 6344 +INDIRI4 +CNSTI4 0 +NEI4 $427 +LABELV $431 +line 1191 +;1191: team = TEAM_RED; +ADDRLP4 4248 +CNSTI4 1 +ASGNI4 +line 1192 +;1192: } else if ( !Q_stricmp( s, "blue" ) || !Q_stricmp( s, "b" ) ) { +ADDRGP4 $422 +JUMPV +LABELV $427 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 $434 +ARGP4 +ADDRLP4 6348 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 6348 +INDIRI4 +CNSTI4 0 +EQI4 $436 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 $435 +ARGP4 +ADDRLP4 6352 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 6352 +INDIRI4 +CNSTI4 0 +NEI4 $432 +LABELV $436 +line 1193 +;1193: team = TEAM_BLUE; +ADDRLP4 4248 +CNSTI4 2 +ASGNI4 +line 1194 +;1194: } else { +ADDRGP4 $422 +JUMPV +LABELV $432 +line 1196 +;1195: // pick the team with the least number of players +;1196: team = PickTeam( clientNum ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 6356 +ADDRGP4 PickTeam +CALLI4 +ASGNI4 +ADDRLP4 4248 +ADDRLP4 6356 +INDIRI4 +ASGNI4 +line 1197 +;1197: } +line 1198 +;1198: } +ADDRGP4 $422 +JUMPV +LABELV $421 +line 1199 +;1199: else { +line 1200 +;1200: team = client->sess.sessionTeam; +ADDRLP4 4248 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ASGNI4 +line 1201 +;1201: } +LABELV $422 +line 1224 +;1202: +;1203:/* NOTE: all client side now +;1204: +;1205: // team +;1206: switch( team ) { +;1207: case TEAM_RED: +;1208: ForceClientSkin(client, model, "red"); +;1209:// ForceClientSkin(client, headModel, "red"); +;1210: break; +;1211: case TEAM_BLUE: +;1212: ForceClientSkin(client, model, "blue"); +;1213:// ForceClientSkin(client, headModel, "blue"); +;1214: break; +;1215: } +;1216: // don't ever use a default skin in teamplay, it would just waste memory +;1217: // however bots will always join a team but they spawn in as spectator +;1218: if ( g_gametype.integer >= GT_TEAM && team == TEAM_SPECTATOR) { +;1219: ForceClientSkin(client, model, "red"); +;1220:// ForceClientSkin(client, headModel, "red"); +;1221: } +;1222:*/ +;1223: +;1224: if (g_gametype.integer >= GT_TEAM) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $437 +line 1225 +;1225: client->pers.teamInfo = qtrue; +ADDRLP4 0 +INDIRP4 +CNSTI4 1516 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1226 +;1226: } else { +ADDRGP4 $438 +JUMPV +LABELV $437 +line 1227 +;1227: s = Info_ValueForKey( userinfo, "teamoverlay" ); +ADDRLP4 4 +ARGP4 +ADDRGP4 $440 +ARGP4 +ADDRLP4 6336 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 6336 +INDIRP4 +ASGNP4 +line 1228 +;1228: if ( ! *s || atoi( s ) != 0 ) { +ADDRLP4 1028 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $443 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRLP4 6344 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 6344 +INDIRI4 +CNSTI4 0 +EQI4 $441 +LABELV $443 +line 1229 +;1229: client->pers.teamInfo = qtrue; +ADDRLP4 0 +INDIRP4 +CNSTI4 1516 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1230 +;1230: } else { +ADDRGP4 $442 +JUMPV +LABELV $441 +line 1231 +;1231: client->pers.teamInfo = qfalse; +ADDRLP4 0 +INDIRP4 +CNSTI4 1516 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1232 +;1232: } +LABELV $442 +line 1233 +;1233: } +LABELV $438 +line 1245 +;1234: /* +;1235: s = Info_ValueForKey( userinfo, "cg_pmove_fixed" ); +;1236: if ( !*s || atoi( s ) == 0 ) { +;1237: client->pers.pmoveFixed = qfalse; +;1238: } +;1239: else { +;1240: client->pers.pmoveFixed = qtrue; +;1241: } +;1242: */ +;1243: +;1244: // team task (0 = none, 1 = offence, 2 = defence) +;1245: teamTask = atoi(Info_ValueForKey(userinfo, "teamtask")); +ADDRLP4 4 +ARGP4 +ADDRGP4 $444 +ARGP4 +ADDRLP4 6336 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 6336 +INDIRP4 +ARGP4 +ADDRLP4 6340 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 2124 +ADDRLP4 6340 +INDIRI4 +ASGNI4 +line 1247 +;1246: // team Leader (1 = leader, 0 is normal player) +;1247: teamLeader = client->sess.teamLeader; +ADDRLP4 2128 +ADDRLP4 0 +INDIRP4 +CNSTI4 1560 +ADDP4 +INDIRI4 +ASGNI4 +line 1250 +;1248: +;1249: // colors +;1250: strcpy(c1, Info_ValueForKey( userinfo, "color1" )); +ADDRLP4 4 +ARGP4 +ADDRGP4 $445 +ARGP4 +ADDRLP4 6344 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 2200 +ARGP4 +ADDRLP4 6344 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1251 +;1251: strcpy(c2, Info_ValueForKey( userinfo, "color2" )); +ADDRLP4 4 +ARGP4 +ADDRGP4 $446 +ARGP4 +ADDRLP4 6348 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 3224 +ARGP4 +ADDRLP4 6348 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1253 +;1252: +;1253: strcpy(redTeam, Info_ValueForKey( userinfo, "g_redteam" )); +ADDRLP4 4 +ARGP4 +ADDRGP4 $447 +ARGP4 +ADDRLP4 6352 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4252 +ARGP4 +ADDRLP4 6352 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1254 +;1254: strcpy(blueTeam, Info_ValueForKey( userinfo, "g_blueteam" )); +ADDRLP4 4 +ARGP4 +ADDRGP4 $448 +ARGP4 +ADDRLP4 6356 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 5276 +ARGP4 +ADDRLP4 6356 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1258 +;1255: +;1256: // send over a subset of the userinfo keys so other clients can +;1257: // print scoreboards, display models, and play custom sounds +;1258: if ( ent->r.svFlags & SVF_BOT ) { +ADDRLP4 1032 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $449 +line 1259 +;1259: s = va("n\\%s\\t\\%i\\model\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\skill\\%s\\tt\\%d\\tl\\%d", +ADDRLP4 4 +ARGP4 +ADDRGP4 $452 +ARGP4 +ADDRLP4 6360 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRGP4 $451 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 4248 +INDIRI4 +ARGI4 +ADDRLP4 1036 +ARGP4 +ADDRLP4 2200 +ARGP4 +ADDRLP4 3224 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1536 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1540 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 6360 +INDIRP4 +ARGP4 +ADDRLP4 2124 +INDIRI4 +ARGI4 +ADDRLP4 2128 +INDIRI4 +ARGI4 +ADDRLP4 6368 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 6368 +INDIRP4 +ASGNP4 +line 1263 +;1260: client->pers.netname, team, model, c1, c2, +;1261: client->pers.maxHealth, client->sess.wins, client->sess.losses, +;1262: Info_ValueForKey( userinfo, "skill" ), teamTask, teamLeader ); +;1263: } else { +ADDRGP4 $450 +JUMPV +LABELV $449 +line 1264 +;1264: s = va("n\\%s\\t\\%i\\model\\%s\\g_redteam\\%s\\g_blueteam\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\tt\\%d\\tl\\%d", +ADDRGP4 $453 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1036 +ARGP4 +ADDRLP4 4252 +ARGP4 +ADDRLP4 5276 +ARGP4 +ADDRLP4 2200 +ARGP4 +ADDRLP4 3224 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1536 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1540 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 2124 +INDIRI4 +ARGI4 +ADDRLP4 2128 +INDIRI4 +ARGI4 +ADDRLP4 6364 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1028 +ADDRLP4 6364 +INDIRP4 +ASGNP4 +line 1267 +;1265: client->pers.netname, client->sess.sessionTeam, model, redTeam, blueTeam, c1, c2, +;1266: client->pers.maxHealth, client->sess.wins, client->sess.losses, teamTask, teamLeader); +;1267: } +LABELV $450 +line 1269 +;1268: +;1269: trap_SetConfigstring( CS_PLAYERS+clientNum, s ); +ADDRFP4 0 +INDIRI4 +CNSTI4 544 +ADDI4 +ARGI4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 trap_SetConfigstring +CALLV +pop +line 1271 +;1270: +;1271: G_LogPrintf( "ClientUserinfoChanged: %i %s\n", clientNum, s ); +ADDRGP4 $454 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 1272 +;1272:} +LABELV $389 +endproc ClientUserinfoChanged 6372 52 +export ClientConnect +proc ClientConnect 1068 12 +line 1295 +;1273: +;1274: +;1275:/* +;1276:=========== +;1277:ClientConnect +;1278: +;1279:Called when a player begins connecting to the server. +;1280:Called again for every map change or tournement restart. +;1281: +;1282:The session information will be valid after exit. +;1283: +;1284:Return NULL if the client should be allowed, otherwise return +;1285:a string with the reason for denial. +;1286: +;1287:Otherwise, the client will be sent the current gamestate +;1288:and will eventually get to ClientBegin. +;1289: +;1290:firstTime will be qtrue the very first time a client connects +;1291:to the server machine, but qfalse on map changes and tournement +;1292:restarts. +;1293:============ +;1294:*/ +;1295:char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) { +line 1303 +;1296: char *value; +;1297:// char *areabits; +;1298: gclient_t *client; +;1299: char userinfo[MAX_INFO_STRING]; +;1300: gentity_t *ent; +;1301: gentity_t *te; +;1302: +;1303: ent = &g_entities[ clientNum ]; +ADDRLP4 4 +CNSTI4 828 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1305 +;1304: +;1305: trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 8 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetUserinfo +CALLV +pop +line 1308 +;1306: +;1307: // check to see if they are on the banned IP list +;1308: value = Info_ValueForKey (userinfo, "ip"); +ADDRLP4 8 +ARGP4 +ADDRGP4 $393 +ARGP4 +ADDRLP4 1040 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1032 +ADDRLP4 1040 +INDIRP4 +ASGNP4 +line 1309 +;1309: if ( G_FilterPacket( value ) ) { +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRLP4 1044 +ADDRGP4 G_FilterPacket +CALLI4 +ASGNI4 +ADDRLP4 1044 +INDIRI4 +CNSTI4 0 +EQI4 $456 +line 1310 +;1310: return "Banned."; +ADDRGP4 $458 +RETP4 +ADDRGP4 $455 +JUMPV +LABELV $456 +line 1313 +;1311: } +;1312: +;1313: if ( !( ent->r.svFlags & SVF_BOT ) && !isBot && g_needpass.integer ) { +ADDRLP4 1048 +CNSTI4 0 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +ADDRLP4 1048 +INDIRI4 +NEI4 $459 +ADDRFP4 8 +INDIRI4 +ADDRLP4 1048 +INDIRI4 +NEI4 $459 +ADDRGP4 g_needpass+12 +INDIRI4 +ADDRLP4 1048 +INDIRI4 +EQI4 $459 +line 1315 +;1314: // check for a password +;1315: value = Info_ValueForKey (userinfo, "password"); +ADDRLP4 8 +ARGP4 +ADDRGP4 $462 +ARGP4 +ADDRLP4 1052 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1032 +ADDRLP4 1052 +INDIRP4 +ASGNP4 +line 1316 +;1316: if ( g_password.string[0] && Q_stricmp( g_password.string, "none" ) && +ADDRGP4 g_password+16 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $463 +ADDRGP4 g_password+16 +ARGP4 +ADDRGP4 $467 +ARGP4 +ADDRLP4 1056 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 1056 +INDIRI4 +CNSTI4 0 +EQI4 $463 +ADDRGP4 g_password+16 +ARGP4 +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRLP4 1060 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 1060 +INDIRI4 +CNSTI4 0 +EQI4 $463 +line 1317 +;1317: strcmp( g_password.string, value) != 0) { +line 1318 +;1318: return "Invalid password"; +ADDRGP4 $469 +RETP4 +ADDRGP4 $455 +JUMPV +LABELV $463 +line 1320 +;1319: } +;1320: } +LABELV $459 +line 1323 +;1321: +;1322: // they can connect +;1323: ent->client = level.clients + clientNum; +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +CNSTI4 1756 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 1324 +;1324: client = ent->client; +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 1328 +;1325: +;1326:// areabits = client->areabits; +;1327: +;1328: memset( client, 0, sizeof(*client) ); +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 1756 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 1330 +;1329: +;1330: client->pers.connected = CON_CONNECTING; +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1333 +;1331: +;1332: // read or initialize the session data +;1333: if ( firstTime || level.newSession ) { +ADDRLP4 1052 +CNSTI4 0 +ASGNI4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 1052 +INDIRI4 +NEI4 $473 +ADDRGP4 level+64 +INDIRI4 +ADDRLP4 1052 +INDIRI4 +EQI4 $470 +LABELV $473 +line 1334 +;1334: G_InitSessionData( client, userinfo, isBot ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRGP4 G_InitSessionData +CALLV +pop +line 1335 +;1335: } +LABELV $470 +line 1336 +;1336: G_ReadSessionData( client ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_ReadSessionData +CALLV +pop +line 1338 +;1337: +;1338: if( isBot ) { +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $474 +line 1339 +;1339: ent->r.svFlags |= SVF_BOT; +ADDRLP4 1056 +ADDRLP4 4 +INDIRP4 +CNSTI4 304 +ADDP4 +ASGNP4 +ADDRLP4 1056 +INDIRP4 +ADDRLP4 1056 +INDIRP4 +INDIRI4 +CNSTI4 8 +BORI4 +ASGNI4 +line 1340 +;1340: ent->inuse = qtrue; +ADDRLP4 4 +INDIRP4 +CNSTI4 412 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1341 +;1341: if( !G_BotConnect( clientNum, !firstTime ) ) { +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $479 +ADDRLP4 1060 +CNSTI4 1 +ASGNI4 +ADDRGP4 $480 +JUMPV +LABELV $479 +ADDRLP4 1060 +CNSTI4 0 +ASGNI4 +LABELV $480 +ADDRLP4 1060 +INDIRI4 +ARGI4 +ADDRLP4 1064 +ADDRGP4 G_BotConnect +CALLI4 +ASGNI4 +ADDRLP4 1064 +INDIRI4 +CNSTI4 0 +NEI4 $476 +line 1342 +;1342: return "BotConnectfailed"; +ADDRGP4 $481 +RETP4 +ADDRGP4 $455 +JUMPV +LABELV $476 +line 1344 +;1343: } +;1344: } +LABELV $474 +line 1347 +;1345: +;1346: // get and distribute relevent paramters +;1347: G_LogPrintf( "ClientConnect: %i\n", clientNum ); +ADDRGP4 $482 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 1348 +;1348: ClientUserinfoChanged( clientNum ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 ClientUserinfoChanged +CALLV +pop +line 1351 +;1349: +;1350: // don't do the "xxx connected" messages if they were caried over from previous level +;1351: if ( firstTime ) { +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $483 +line 1352 +;1352: trap_SendServerCommand( -1, va("print \"%s" S_COLOR_WHITE " %s\n\"", client->pers.netname, G_GetStripEdString("SVINGAME", "PLCONNECT")) ); +ADDRGP4 $148 +ARGP4 +ADDRGP4 $486 +ARGP4 +ADDRLP4 1056 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $485 +ARGP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 1056 +INDIRP4 +ARGP4 +ADDRLP4 1060 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 1060 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1353 +;1353: } +LABELV $483 +line 1355 +;1354: +;1355: if ( g_gametype.integer >= GT_TEAM && +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $487 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +EQI4 $487 +line 1356 +;1356: client->sess.sessionTeam != TEAM_SPECTATOR ) { +line 1357 +;1357: BroadcastTeamChange( client, -1 ); +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 -1 +ARGI4 +ADDRGP4 BroadcastTeamChange +CALLV +pop +line 1358 +;1358: } +LABELV $487 +line 1361 +;1359: +;1360: // count current clients and rank for scoreboard +;1361: CalculateRanks(); +ADDRGP4 CalculateRanks +CALLV +pop +line 1363 +;1362: +;1363: te = G_TempEntity( vec3_origin, EV_CLIENTJOIN ); +ADDRGP4 vec3_origin +ARGP4 +CNSTI4 1 +ARGI4 +ADDRLP4 1056 +ADDRGP4 G_TempEntity +CALLP4 +ASGNP4 +ADDRLP4 1036 +ADDRLP4 1056 +INDIRP4 +ASGNP4 +line 1364 +;1364: te->r.svFlags |= SVF_BROADCAST; +ADDRLP4 1060 +ADDRLP4 1036 +INDIRP4 +CNSTI4 304 +ADDP4 +ASGNP4 +ADDRLP4 1060 +INDIRP4 +ADDRLP4 1060 +INDIRP4 +INDIRI4 +CNSTI4 32 +BORI4 +ASGNI4 +line 1365 +;1365: te->s.eventParm = clientNum; +ADDRLP4 1036 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 1372 +;1366: +;1367: // for statistics +;1368:// client->areabits = areabits; +;1369:// if ( !client->areabits ) +;1370:// client->areabits = G_Alloc( (trap_AAS_PointReachabilityAreaIndex( NULL ) + 7) / 8 ); +;1371: +;1372: return NULL; +CNSTP4 0 +RETP4 +LABELV $455 +endproc ClientConnect 1068 12 +export ClientBegin +proc ClientBegin 1108 12 +line 1386 +;1373:} +;1374: +;1375:void G_WriteClientSessionData( gclient_t *client ); +;1376: +;1377:/* +;1378:=========== +;1379:ClientBegin +;1380: +;1381:called when a client has finished connecting, and is ready +;1382:to be placed into the level. This will happen every level load, +;1383:and on transition between teams, but doesn't happen on respawns +;1384:============ +;1385:*/ +;1386:void ClientBegin( int clientNum, qboolean allowTeamReset ) { +line 1393 +;1387: gentity_t *ent; +;1388: gclient_t *client; +;1389: gentity_t *tent; +;1390: int flags, i; +;1391: char userinfo[MAX_INFO_VALUE], *modelname; +;1392: +;1393: ent = g_entities + clientNum; +ADDRLP4 4 +CNSTI4 828 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1395 +;1394: +;1395: if ((ent->r.svFlags & SVF_BOT) && g_gametype.integer >= GT_TEAM) +ADDRLP4 4 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $491 +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $491 +line 1396 +;1396: { +line 1397 +;1397: if (allowTeamReset) +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $494 +line 1398 +;1398: { +line 1399 +;1399: const char *team = "Red"; +ADDRLP4 1048 +ADDRGP4 $496 +ASGNP4 +line 1403 +;1400: int preSess; +;1401: +;1402: //SetTeam(ent, ""); +;1403: ent->client->sess.sessionTeam = PickTeam(-1); +CNSTI4 -1 +ARGI4 +ADDRLP4 1056 +ADDRGP4 PickTeam +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +ADDRLP4 1056 +INDIRI4 +ASGNI4 +line 1404 +;1404: trap_GetUserinfo(clientNum, userinfo, MAX_INFO_STRING); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 12 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetUserinfo +CALLV +pop +line 1406 +;1405: +;1406: if (ent->client->sess.sessionTeam == TEAM_SPECTATOR) +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $497 +line 1407 +;1407: { +line 1408 +;1408: ent->client->sess.sessionTeam = TEAM_RED; +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1409 +;1409: } +LABELV $497 +line 1411 +;1410: +;1411: if (ent->client->sess.sessionTeam == TEAM_RED) +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $499 +line 1412 +;1412: { +line 1413 +;1413: team = "Red"; +ADDRLP4 1048 +ADDRGP4 $496 +ASGNP4 +line 1414 +;1414: } +ADDRGP4 $500 +JUMPV +LABELV $499 +line 1416 +;1415: else +;1416: { +line 1417 +;1417: team = "Blue"; +ADDRLP4 1048 +ADDRGP4 $501 +ASGNP4 +line 1418 +;1418: } +LABELV $500 +line 1420 +;1419: +;1420: Info_SetValueForKey( userinfo, "team", team ); +ADDRLP4 12 +ARGP4 +ADDRGP4 $426 +ARGP4 +ADDRLP4 1048 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 1422 +;1421: +;1422: trap_SetUserinfo( clientNum, userinfo ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 12 +ARGP4 +ADDRGP4 trap_SetUserinfo +CALLV +pop +line 1424 +;1423: +;1424: ent->client->ps.persistant[ PERS_TEAM ] = ent->client->sess.sessionTeam; +ADDRLP4 1060 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 1060 +INDIRP4 +CNSTI4 292 +ADDP4 +ADDRLP4 1060 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ASGNI4 +line 1426 +;1425: +;1426: preSess = ent->client->sess.sessionTeam; +ADDRLP4 1052 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ASGNI4 +line 1427 +;1427: G_ReadSessionData( ent->client ); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 G_ReadSessionData +CALLV +pop +line 1428 +;1428: ent->client->sess.sessionTeam = preSess; +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +ADDRLP4 1052 +INDIRI4 +ASGNI4 +line 1429 +;1429: G_WriteClientSessionData(ent->client); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 G_WriteClientSessionData +CALLV +pop +line 1430 +;1430: ClientUserinfoChanged( clientNum ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 ClientUserinfoChanged +CALLV +pop +line 1431 +;1431: ClientBegin(clientNum, qfalse); +ADDRFP4 0 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 ClientBegin +CALLV +pop +line 1432 +;1432: return; +ADDRGP4 $490 +JUMPV +LABELV $494 +line 1434 +;1433: } +;1434: } +LABELV $491 +line 1436 +;1435: +;1436: client = level.clients + clientNum; +ADDRLP4 8 +CNSTI4 1756 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 1438 +;1437: +;1438: if ( ent->r.linked ) { +ADDRLP4 4 +INDIRP4 +CNSTI4 296 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $502 +line 1439 +;1439: trap_UnlinkEntity( ent ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_UnlinkEntity +CALLV +pop +line 1440 +;1440: } +LABELV $502 +line 1441 +;1441: G_InitGentity( ent ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 G_InitGentity +CALLV +pop +line 1442 +;1442: ent->touch = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 648 +ADDP4 +CNSTP4 0 +ASGNP4 +line 1443 +;1443: ent->pain = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 656 +ADDP4 +CNSTP4 0 +ASGNP4 +line 1444 +;1444: ent->client = client; +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 1446 +;1445: +;1446: client->pers.connected = CON_CONNECTED; +ADDRLP4 8 +INDIRP4 +CNSTI4 1368 +ADDP4 +CNSTI4 2 +ASGNI4 +line 1447 +;1447: client->pers.enterTime = level.time; +ADDRLP4 8 +INDIRP4 +CNSTI4 1456 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 1448 +;1448: client->pers.teamState.state = TEAM_BEGIN; +ADDRLP4 8 +INDIRP4 +CNSTI4 1460 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1455 +;1449: +;1450: // save eflags around this, because changing teams will +;1451: // cause this to happen with a valid entity, and we +;1452: // want to make sure the teleport bit is set right +;1453: // so the viewpoint doesn't interpolate through the +;1454: // world to the new position +;1455: flags = client->ps.eFlags; +ADDRLP4 1036 +ADDRLP4 8 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +ASGNI4 +line 1457 +;1456: +;1457: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $506 +JUMPV +LABELV $505 +line 1460 +;1458: +;1459: while (i < NUM_FORCE_POWERS) +;1460: { +line 1461 +;1461: if (ent->client->ps.fd.forcePowersActive & (1 << i)) +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $508 +line 1462 +;1462: { +line 1463 +;1463: WP_ForcePowerStop(ent, i); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRGP4 WP_ForcePowerStop +CALLV +pop +line 1464 +;1464: } +LABELV $508 +line 1465 +;1465: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1466 +;1466: } +LABELV $506 +line 1459 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $505 +line 1468 +;1467: +;1468: i = TRACK_CHANNEL_1; +ADDRLP4 0 +CNSTI4 51 +ASGNI4 +ADDRGP4 $511 +JUMPV +LABELV $510 +line 1471 +;1469: +;1470: while (i < NUM_TRACK_CHANNELS) +;1471: { +line 1472 +;1472: if (ent->client->ps.fd.killSoundEntIndex[i-50] && ent->client->ps.fd.killSoundEntIndex[i-50] < MAX_GENTITIES && ent->client->ps.fd.killSoundEntIndex[i-50] > 0) +ADDRLP4 1048 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +CNSTI4 200 +SUBI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1188 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 1052 +CNSTI4 0 +ASGNI4 +ADDRLP4 1048 +INDIRI4 +ADDRLP4 1052 +INDIRI4 +EQI4 $513 +ADDRLP4 1048 +INDIRI4 +CNSTI4 1024 +GEI4 $513 +ADDRLP4 1048 +INDIRI4 +ADDRLP4 1052 +INDIRI4 +LEI4 $513 +line 1473 +;1473: { +line 1474 +;1474: G_MuteSound(ent->client->ps.fd.killSoundEntIndex[i-50], CHAN_VOICE); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +CNSTI4 200 +SUBI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1188 +ADDP4 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 3 +ARGI4 +ADDRGP4 G_MuteSound +CALLV +pop +line 1475 +;1475: } +LABELV $513 +line 1476 +;1476: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1477 +;1477: } +LABELV $511 +line 1470 +ADDRLP4 0 +INDIRI4 +CNSTI4 56 +LTI4 $510 +line 1478 +;1478: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1480 +;1479: +;1480: memset( &client->ps, 0, sizeof( client->ps ) ); +ADDRLP4 8 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 1368 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 1481 +;1481: client->ps.eFlags = flags; +ADDRLP4 8 +INDIRP4 +CNSTI4 108 +ADDP4 +ADDRLP4 1036 +INDIRI4 +ASGNI4 +line 1483 +;1482: +;1483: client->ps.hasDetPackPlanted = qfalse; +ADDRLP4 8 +INDIRP4 +CNSTI4 628 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1486 +;1484: +;1485: //first-time force power initialization +;1486: WP_InitForcePowers( ent ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 WP_InitForcePowers +CALLV +pop +line 1489 +;1487: +;1488: //init saber ent +;1489: WP_SaberInitBladeData( ent ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 WP_SaberInitBladeData +CALLV +pop +line 1492 +;1490: +;1491: // First time model setup for that player. +;1492: trap_GetUserinfo( clientNum, userinfo, sizeof(userinfo) ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 12 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetUserinfo +CALLV +pop +line 1493 +;1493: modelname = Info_ValueForKey (userinfo, "model"); +ADDRLP4 12 +ARGP4 +ADDRGP4 $419 +ARGP4 +ADDRLP4 1048 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1040 +ADDRLP4 1048 +INDIRP4 +ASGNP4 +line 1494 +;1494: SetupGameGhoul2Model(client, modelname); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 1040 +INDIRP4 +ARGP4 +ADDRGP4 SetupGameGhoul2Model +CALLV +pop +line 1496 +;1495: +;1496: if (ent->client->ghoul2) +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $515 +line 1497 +;1497: { +line 1498 +;1498: ent->bolt_Head = trap_G2API_AddBolt(ent->client->ghoul2, 0, "cranium"); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $380 +ARGP4 +ADDRLP4 1056 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 784 +ADDP4 +ADDRLP4 1056 +INDIRI4 +ASGNI4 +line 1499 +;1499: ent->bolt_Waist = trap_G2API_AddBolt(ent->client->ghoul2, 0, "thoracic"); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $517 +ARGP4 +ADDRLP4 1064 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 804 +ADDP4 +ADDRLP4 1064 +INDIRI4 +ASGNI4 +line 1500 +;1500: ent->bolt_LArm = trap_G2API_AddBolt(ent->client->ghoul2, 0, "lradius"); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $518 +ARGP4 +ADDRLP4 1072 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 788 +ADDP4 +ADDRLP4 1072 +INDIRI4 +ASGNI4 +line 1501 +;1501: ent->bolt_RArm = trap_G2API_AddBolt(ent->client->ghoul2, 0, "rradius"); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $519 +ARGP4 +ADDRLP4 1080 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 792 +ADDP4 +ADDRLP4 1080 +INDIRI4 +ASGNI4 +line 1502 +;1502: ent->bolt_LLeg = trap_G2API_AddBolt(ent->client->ghoul2, 0, "ltibia"); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $520 +ARGP4 +ADDRLP4 1088 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 796 +ADDP4 +ADDRLP4 1088 +INDIRI4 +ASGNI4 +line 1503 +;1503: ent->bolt_RLeg = trap_G2API_AddBolt(ent->client->ghoul2, 0, "rtibia"); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $521 +ARGP4 +ADDRLP4 1096 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 800 +ADDP4 +ADDRLP4 1096 +INDIRI4 +ASGNI4 +line 1504 +;1504: ent->bolt_Motion = trap_G2API_AddBolt(ent->client->ghoul2, 0, "Motion"); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 $522 +ARGP4 +ADDRLP4 1104 +ADDRGP4 trap_G2API_AddBolt +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 808 +ADDP4 +ADDRLP4 1104 +INDIRI4 +ASGNI4 +line 1505 +;1505: } +LABELV $515 +line 1508 +;1506: +;1507: // locate ent at a spawn point +;1508: ClientSpawn( ent ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 ClientSpawn +CALLV +pop +line 1510 +;1509: +;1510: if ( client->sess.sessionTeam != TEAM_SPECTATOR ) { +ADDRLP4 8 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +EQI4 $523 +line 1512 +;1511: // send event +;1512: tent = G_TempEntity( ent->client->ps.origin, EV_PLAYER_TELEPORT_IN ); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 1052 +ADDRGP4 G_TempEntity +CALLP4 +ASGNP4 +ADDRLP4 1044 +ADDRLP4 1052 +INDIRP4 +ASGNP4 +line 1513 +;1513: tent->s.clientNum = ent->s.clientNum; +ADDRLP4 1056 +CNSTI4 220 +ASGNI4 +ADDRLP4 1044 +INDIRP4 +ADDRLP4 1056 +INDIRI4 +ADDP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 1056 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 1515 +;1514: +;1515: if ( g_gametype.integer != GT_TOURNAMENT ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +EQI4 $525 +line 1516 +;1516: trap_SendServerCommand( -1, va("print \"%s" S_COLOR_WHITE " %s\n\"", client->pers.netname, G_GetStripEdString("SVINGAME", "PLENTER")) ); +ADDRGP4 $148 +ARGP4 +ADDRGP4 $528 +ARGP4 +ADDRLP4 1060 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $485 +ARGP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 1060 +INDIRP4 +ARGP4 +ADDRLP4 1064 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 1064 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1517 +;1517: } +LABELV $525 +line 1518 +;1518: } +LABELV $523 +line 1519 +;1519: G_LogPrintf( "ClientBegin: %i\n", clientNum ); +ADDRGP4 $529 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 1522 +;1520: +;1521: // count current clients and rank for scoreboard +;1522: CalculateRanks(); +ADDRGP4 CalculateRanks +CALLV +pop +line 1524 +;1523: +;1524: G_ClearClientLog(clientNum); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_ClearClientLog +CALLV +pop +line 1525 +;1525:} +LABELV $490 +endproc ClientBegin 1108 12 +export ClientSpawn +proc ClientSpawn 860 16 +line 1536 +;1526: +;1527:/* +;1528:=========== +;1529:ClientSpawn +;1530: +;1531:Called every time a client is placed fresh in the world: +;1532:after the first ClientBegin, and after each respawn +;1533:Initializes all non-persistant parts of playerState +;1534:============ +;1535:*/ +;1536:void ClientSpawn(gentity_t *ent) { +line 1553 +;1537: int index; +;1538: vec3_t spawn_origin, spawn_angles; +;1539: gclient_t *client; +;1540: int i; +;1541: clientPersistant_t saved; +;1542: clientSession_t savedSess; +;1543: int persistant[MAX_PERSISTANT]; +;1544: gentity_t *spawnPoint; +;1545: int flags; +;1546: int savedPing; +;1547:// char *savedAreaBits; +;1548: int accuracy_hits, accuracy_shots; +;1549: int eventSequence; +;1550:// char userinfo[MAX_INFO_STRING]; +;1551: forcedata_t savedForce; +;1552: void *ghoul2save; +;1553: int saveSaberNum = ENTITYNUM_NONE; +ADDRLP4 112 +CNSTI4 1023 +ASGNI4 +line 1554 +;1554: int wDisable = 0; +ADDRLP4 88 +CNSTI4 0 +ASGNI4 +line 1556 +;1555: +;1556: index = ent - g_entities; +ADDRLP4 104 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ASGNI4 +line 1557 +;1557: client = ent->client; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 1559 +;1558: +;1559: if (client->ps.fd.forceDoInit) +ADDRLP4 0 +INDIRP4 +CNSTI4 1172 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $531 +line 1560 +;1560: { //force a reread of force powers +line 1561 +;1561: WP_InitForcePowers( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 WP_InitForcePowers +CALLV +pop +line 1562 +;1562: client->ps.fd.forceDoInit = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 1172 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1563 +;1563: } +LABELV $531 +line 1567 +;1564: // find a spawn point +;1565: // do it before setting health back up, so farthest +;1566: // ranging doesn't count this client +;1567: if ( client->sess.sessionTeam == TEAM_SPECTATOR ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $533 +line 1568 +;1568: spawnPoint = SelectSpectatorSpawnPoint ( +ADDRLP4 76 +ARGP4 +ADDRLP4 92 +ARGP4 +ADDRLP4 804 +ADDRGP4 SelectSpectatorSpawnPoint +CALLP4 +ASGNP4 +ADDRLP4 72 +ADDRLP4 804 +INDIRP4 +ASGNP4 +line 1570 +;1569: spawn_origin, spawn_angles); +;1570: } else if (g_gametype.integer == GT_CTF || g_gametype.integer == GT_CTY) { +ADDRGP4 $534 +JUMPV +LABELV $533 +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 7 +EQI4 $539 +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 8 +NEI4 $535 +LABELV $539 +line 1572 +;1571: // all base oriented team games use the CTF spawn points +;1572: spawnPoint = SelectCTFSpawnPoint ( +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1460 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 76 +ARGP4 +ADDRLP4 92 +ARGP4 +ADDRLP4 808 +ADDRGP4 SelectCTFSpawnPoint +CALLP4 +ASGNP4 +ADDRLP4 72 +ADDRLP4 808 +INDIRP4 +ASGNP4 +line 1576 +;1573: client->sess.sessionTeam, +;1574: client->pers.teamState.state, +;1575: spawn_origin, spawn_angles); +;1576: } +ADDRGP4 $536 +JUMPV +LABELV $535 +line 1577 +;1577: else if (g_gametype.integer == GT_SAGA) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 6 +NEI4 $540 +line 1578 +;1578: { +line 1579 +;1579: spawnPoint = SelectSagaSpawnPoint ( +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1460 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 76 +ARGP4 +ADDRLP4 92 +ARGP4 +ADDRLP4 808 +ADDRGP4 SelectSagaSpawnPoint +CALLP4 +ASGNP4 +ADDRLP4 72 +ADDRLP4 808 +INDIRP4 +ASGNP4 +line 1583 +;1580: client->sess.sessionTeam, +;1581: client->pers.teamState.state, +;1582: spawn_origin, spawn_angles); +;1583: } +ADDRGP4 $541 +JUMPV +LABELV $540 +line 1584 +;1584: else { +LABELV $543 +line 1585 +;1585: do { +line 1587 +;1586: // the first spawn should be at a good looking spot +;1587: if ( !client->pers.initialSpawn && client->pers.localClient ) { +ADDRLP4 808 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1404 +ADDP4 +INDIRI4 +ADDRLP4 808 +INDIRI4 +NEI4 $546 +ADDRLP4 0 +INDIRP4 +CNSTI4 1400 +ADDP4 +INDIRI4 +ADDRLP4 808 +INDIRI4 +EQI4 $546 +line 1588 +;1588: client->pers.initialSpawn = qtrue; +ADDRLP4 0 +INDIRP4 +CNSTI4 1404 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1589 +;1589: spawnPoint = SelectInitialSpawnPoint( spawn_origin, spawn_angles ); +ADDRLP4 76 +ARGP4 +ADDRLP4 92 +ARGP4 +ADDRLP4 812 +ADDRGP4 SelectInitialSpawnPoint +CALLP4 +ASGNP4 +ADDRLP4 72 +ADDRLP4 812 +INDIRP4 +ASGNP4 +line 1590 +;1590: } else { +ADDRGP4 $547 +JUMPV +LABELV $546 +line 1592 +;1591: // don't spawn near existing origin if possible +;1592: spawnPoint = SelectSpawnPoint ( +ADDRLP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +ADDRLP4 76 +ARGP4 +ADDRLP4 92 +ARGP4 +ADDRLP4 812 +ADDRGP4 SelectSpawnPoint +CALLP4 +ASGNP4 +ADDRLP4 72 +ADDRLP4 812 +INDIRP4 +ASGNP4 +line 1595 +;1593: client->ps.origin, +;1594: spawn_origin, spawn_angles); +;1595: } +LABELV $547 +line 1599 +;1596: +;1597: // Tim needs to prevent bots from spawning at the initial point +;1598: // on q3dm0... +;1599: if ( ( spawnPoint->flags & FL_NO_BOTS ) && ( ent->r.svFlags & SVF_BOT ) ) { +ADDRLP4 812 +CNSTI4 0 +ASGNI4 +ADDRLP4 72 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +CNSTI4 8192 +BANDI4 +ADDRLP4 812 +INDIRI4 +EQI4 $548 +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +ADDRLP4 812 +INDIRI4 +EQI4 $548 +line 1600 +;1600: continue; // try again +ADDRGP4 $544 +JUMPV +LABELV $548 +line 1603 +;1601: } +;1602: // just to be symetric, we have a nohumans option... +;1603: if ( ( spawnPoint->flags & FL_NO_HUMANS ) && !( ent->r.svFlags & SVF_BOT ) ) { +ADDRLP4 816 +CNSTI4 0 +ASGNI4 +ADDRLP4 72 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +CNSTI4 16384 +BANDI4 +ADDRLP4 816 +INDIRI4 +EQI4 $545 +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +ADDRLP4 816 +INDIRI4 +NEI4 $545 +line 1604 +;1604: continue; // try again +line 1607 +;1605: } +;1606: +;1607: break; +LABELV $544 +line 1609 +;1608: +;1609: } while ( 1 ); +ADDRGP4 $543 +JUMPV +LABELV $545 +line 1610 +;1610: } +LABELV $541 +LABELV $536 +LABELV $534 +line 1611 +;1611: client->pers.teamState.state = TEAM_ACTIVE; +ADDRLP4 0 +INDIRP4 +CNSTI4 1460 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1615 +;1612: +;1613: // toggle the teleport bit so the client knows to not lerp +;1614: // and never clear the voted flag +;1615: flags = ent->client->ps.eFlags & (EF_TELEPORT_BIT | EF_VOTED | EF_TEAMVOTED); +ADDRLP4 108 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +CNSTI4 540676 +BANDI4 +ASGNI4 +line 1616 +;1616: flags ^= EF_TELEPORT_BIT; +ADDRLP4 108 +ADDRLP4 108 +INDIRI4 +CNSTI4 4 +BXORI4 +ASGNI4 +line 1620 +;1617: +;1618: // clear everything but the persistant data +;1619: +;1620: saved = client->pers; +ADDRLP4 116 +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRB +ASGNB 152 +line 1621 +;1621: savedSess = client->sess; +ADDRLP4 268 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRB +ASGNB 44 +line 1622 +;1622: savedPing = client->ps.ping; +ADDRLP4 312 +ADDRLP4 0 +INDIRP4 +CNSTI4 484 +ADDP4 +INDIRI4 +ASGNI4 +line 1624 +;1623:// savedAreaBits = client->areabits; +;1624: accuracy_hits = client->accuracy_hits; +ADDRLP4 316 +ADDRLP4 0 +INDIRP4 +CNSTI4 1656 +ADDP4 +INDIRI4 +ASGNI4 +line 1625 +;1625: accuracy_shots = client->accuracy_shots; +ADDRLP4 320 +ADDRLP4 0 +INDIRP4 +CNSTI4 1652 +ADDP4 +INDIRI4 +ASGNI4 +line 1626 +;1626: for ( i = 0 ; i < MAX_PERSISTANT ; i++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +LABELV $552 +line 1627 +;1627: persistant[i] = client->ps.persistant[i]; +ADDRLP4 804 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 804 +INDIRI4 +ADDRLP4 8 +ADDP4 +ADDRLP4 804 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 280 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 1628 +;1628: } +LABELV $553 +line 1626 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 16 +LTI4 $552 +line 1629 +;1629: eventSequence = client->ps.eventSequence; +ADDRLP4 324 +ADDRLP4 0 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +ASGNI4 +line 1631 +;1630: +;1631: savedForce = client->ps.fd; +ADDRLP4 328 +ADDRLP4 0 +INDIRP4 +CNSTI4 760 +ADDP4 +INDIRB +ASGNB 472 +line 1633 +;1632: +;1633: ghoul2save = client->ghoul2; +ADDRLP4 800 +ADDRLP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +INDIRP4 +ASGNP4 +line 1635 +;1634: +;1635: saveSaberNum = client->ps.saberEntityNum; +ADDRLP4 112 +ADDRLP4 0 +INDIRP4 +CNSTI4 544 +ADDP4 +INDIRI4 +ASGNI4 +line 1637 +;1636: +;1637: memset (client, 0, sizeof(*client)); // bk FIXME: Com_Memset? +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 1756 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 1640 +;1638: +;1639: //rww - Don't wipe the ghoul2 instance or the animation data +;1640: client->ghoul2 = ghoul2save; +ADDRLP4 0 +INDIRP4 +CNSTI4 1716 +ADDP4 +ADDRLP4 800 +INDIRP4 +ASGNP4 +line 1643 +;1641: +;1642: //or the saber ent num +;1643: client->ps.saberEntityNum = saveSaberNum; +ADDRLP4 0 +INDIRP4 +CNSTI4 544 +ADDP4 +ADDRLP4 112 +INDIRI4 +ASGNI4 +line 1645 +;1644: +;1645: client->ps.fd = savedForce; +ADDRLP4 0 +INDIRP4 +CNSTI4 760 +ADDP4 +ADDRLP4 328 +INDIRB +ASGNB 472 +line 1647 +;1646: +;1647: client->ps.duelIndex = ENTITYNUM_NONE; +ADDRLP4 0 +INDIRP4 +CNSTI4 1284 +ADDP4 +CNSTI4 1023 +ASGNI4 +line 1649 +;1648: +;1649: client->pers = saved; +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +ADDRLP4 116 +INDIRB +ASGNB 152 +line 1650 +;1650: client->sess = savedSess; +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +ADDRLP4 268 +INDIRB +ASGNB 44 +line 1651 +;1651: client->ps.ping = savedPing; +ADDRLP4 0 +INDIRP4 +CNSTI4 484 +ADDP4 +ADDRLP4 312 +INDIRI4 +ASGNI4 +line 1653 +;1652:// client->areabits = savedAreaBits; +;1653: client->accuracy_hits = accuracy_hits; +ADDRLP4 0 +INDIRP4 +CNSTI4 1656 +ADDP4 +ADDRLP4 316 +INDIRI4 +ASGNI4 +line 1654 +;1654: client->accuracy_shots = accuracy_shots; +ADDRLP4 0 +INDIRP4 +CNSTI4 1652 +ADDP4 +ADDRLP4 320 +INDIRI4 +ASGNI4 +line 1655 +;1655: client->lastkilled_client = -1; +ADDRLP4 0 +INDIRP4 +CNSTI4 1660 +ADDP4 +CNSTI4 -1 +ASGNI4 +line 1657 +;1656: +;1657: for ( i = 0 ; i < MAX_PERSISTANT ; i++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +LABELV $556 +line 1658 +;1658: client->ps.persistant[i] = persistant[i]; +ADDRLP4 804 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 804 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 280 +ADDP4 +ADDP4 +ADDRLP4 804 +INDIRI4 +ADDRLP4 8 +ADDP4 +INDIRI4 +ASGNI4 +line 1659 +;1659: } +LABELV $557 +line 1657 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 16 +LTI4 $556 +line 1660 +;1660: client->ps.eventSequence = eventSequence; +ADDRLP4 0 +INDIRP4 +CNSTI4 112 +ADDP4 +ADDRLP4 324 +INDIRI4 +ASGNI4 +line 1662 +;1661: // increment the spawncount so the client will detect the respawn +;1662: client->ps.persistant[PERS_SPAWN_COUNT]++; +ADDRLP4 804 +ADDRLP4 0 +INDIRP4 +CNSTI4 296 +ADDP4 +ASGNP4 +ADDRLP4 804 +INDIRP4 +ADDRLP4 804 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1663 +;1663: client->ps.persistant[PERS_TEAM] = client->sess.sessionTeam; +ADDRLP4 0 +INDIRP4 +CNSTI4 292 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ASGNI4 +line 1665 +;1664: +;1665: client->airOutTime = level.time + 12000; +ADDRLP4 0 +INDIRP4 +CNSTI4 1688 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 12000 +ADDI4 +ASGNI4 +line 1669 +;1666: +;1667:// trap_GetUserinfo( index, userinfo, sizeof(userinfo) ); +;1668: // set max health +;1669: client->pers.maxHealth = 100;//atoi( Info_ValueForKey( userinfo, "handicap" ) ); +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +CNSTI4 100 +ASGNI4 +line 1670 +;1670: if ( client->pers.maxHealth < 1 || client->pers.maxHealth > 100 ) { +ADDRLP4 812 +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 812 +INDIRI4 +CNSTI4 1 +LTI4 $563 +ADDRLP4 812 +INDIRI4 +CNSTI4 100 +LEI4 $561 +LABELV $563 +line 1671 +;1671: client->pers.maxHealth = 100; +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +CNSTI4 100 +ASGNI4 +line 1672 +;1672: } +LABELV $561 +line 1674 +;1673: // clear entity values +;1674: client->ps.stats[STAT_MAX_HEALTH] = client->pers.maxHealth; +ADDRLP4 0 +INDIRP4 +CNSTI4 248 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1452 +ADDP4 +INDIRI4 +ASGNI4 +line 1675 +;1675: client->ps.eFlags = flags; +ADDRLP4 0 +INDIRP4 +CNSTI4 108 +ADDP4 +ADDRLP4 108 +INDIRI4 +ASGNI4 +line 1677 +;1676: +;1677: ent->s.groundEntityNum = ENTITYNUM_NONE; +ADDRFP4 0 +INDIRP4 +CNSTI4 192 +ADDP4 +CNSTI4 1023 +ASGNI4 +line 1678 +;1678: ent->client = &level.clients[index]; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +CNSTI4 1756 +ADDRLP4 104 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 1679 +;1679: ent->takedamage = qtrue; +ADDRFP4 0 +INDIRP4 +CNSTI4 680 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1680 +;1680: ent->inuse = qtrue; +ADDRFP4 0 +INDIRP4 +CNSTI4 412 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1681 +;1681: ent->classname = "player"; +ADDRFP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +ADDRGP4 $564 +ASGNP4 +line 1682 +;1682: ent->r.contents = CONTENTS_BODY; +ADDRFP4 0 +INDIRP4 +CNSTI4 340 +ADDP4 +CNSTI4 256 +ASGNI4 +line 1683 +;1683: ent->clipmask = MASK_PLAYERSOLID; +ADDRFP4 0 +INDIRP4 +CNSTI4 508 +ADDP4 +CNSTI4 273 +ASGNI4 +line 1684 +;1684: ent->die = player_die; +ADDRFP4 0 +INDIRP4 +CNSTI4 660 +ADDP4 +ADDRGP4 player_die +ASGNP4 +line 1685 +;1685: ent->waterlevel = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 748 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1686 +;1686: ent->watertype = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 744 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1687 +;1687: ent->flags = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1689 +;1688: +;1689: VectorCopy (playerMins, ent->r.mins); +ADDRFP4 0 +INDIRP4 +CNSTI4 316 +ADDP4 +ADDRGP4 playerMins +INDIRB +ASGNB 12 +line 1690 +;1690: VectorCopy (playerMaxs, ent->r.maxs); +ADDRFP4 0 +INDIRP4 +CNSTI4 328 +ADDP4 +ADDRGP4 playerMaxs +INDIRB +ASGNB 12 +line 1692 +;1691: +;1692: client->ps.clientNum = index; +ADDRLP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +ADDRLP4 104 +INDIRI4 +ASGNI4 +line 1694 +;1693: //give default weapons +;1694: client->ps.stats[STAT_WEAPONS] = ( 1 << WP_NONE ); +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1696 +;1695: +;1696: if (g_gametype.integer == GT_HOLOCRON) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 1 +NEI4 $565 +line 1697 +;1697: { +line 1699 +;1698: //always get free saber level 1 in holocron +;1699: client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_SABER ); //these are precached in g_items, ClearRegisteredItems() +ADDRLP4 820 +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +ASGNP4 +ADDRLP4 820 +INDIRP4 +ADDRLP4 820 +INDIRP4 +INDIRI4 +CNSTI4 4 +BORI4 +ASGNI4 +line 1700 +;1700: } +ADDRGP4 $566 +JUMPV +LABELV $565 +line 1702 +;1701: else +;1702: { +line 1703 +;1703: if (client->ps.fd.forcePowerLevel[FP_SABERATTACK]) +ADDRLP4 0 +INDIRP4 +CNSTI4 992 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $568 +line 1704 +;1704: { +line 1705 +;1705: client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_SABER ); //these are precached in g_items, ClearRegisteredItems() +ADDRLP4 820 +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +ASGNP4 +ADDRLP4 820 +INDIRP4 +ADDRLP4 820 +INDIRP4 +INDIRI4 +CNSTI4 4 +BORI4 +ASGNI4 +line 1706 +;1706: } +ADDRGP4 $569 +JUMPV +LABELV $568 +line 1708 +;1707: else +;1708: { //if you don't have saber attack rank then you don't get a saber +line 1709 +;1709: client->ps.stats[STAT_WEAPONS] |= (1 << WP_STUN_BATON); +ADDRLP4 820 +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +ASGNP4 +ADDRLP4 820 +INDIRP4 +ADDRLP4 820 +INDIRP4 +INDIRI4 +CNSTI4 2 +BORI4 +ASGNI4 +line 1710 +;1710: } +LABELV $569 +line 1711 +;1711: } +LABELV $566 +line 1713 +;1712: +;1713: if (g_gametype.integer == GT_TOURNAMENT) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $570 +line 1714 +;1714: { +line 1715 +;1715: wDisable = g_duelWeaponDisable.integer; +ADDRLP4 88 +ADDRGP4 g_duelWeaponDisable+12 +INDIRI4 +ASGNI4 +line 1716 +;1716: } +ADDRGP4 $571 +JUMPV +LABELV $570 +line 1718 +;1717: else +;1718: { +line 1719 +;1719: wDisable = g_weaponDisable.integer; +ADDRLP4 88 +ADDRGP4 g_weaponDisable+12 +INDIRI4 +ASGNI4 +line 1720 +;1720: } +LABELV $571 +line 1722 +;1721: +;1722: if (!wDisable || !(wDisable & (1 << WP_BRYAR_PISTOL))) +ADDRLP4 824 +CNSTI4 0 +ASGNI4 +ADDRLP4 88 +INDIRI4 +ADDRLP4 824 +INDIRI4 +EQI4 $577 +ADDRLP4 88 +INDIRI4 +CNSTI4 8 +BANDI4 +ADDRLP4 824 +INDIRI4 +NEI4 $575 +LABELV $577 +line 1723 +;1723: { +line 1724 +;1724: client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_BRYAR_PISTOL ); +ADDRLP4 828 +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +ASGNP4 +ADDRLP4 828 +INDIRP4 +ADDRLP4 828 +INDIRP4 +INDIRI4 +CNSTI4 8 +BORI4 +ASGNI4 +line 1725 +;1725: } +ADDRGP4 $576 +JUMPV +LABELV $575 +line 1726 +;1726: else if (g_gametype.integer == GT_JEDIMASTER) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 2 +NEI4 $578 +line 1727 +;1727: { +line 1728 +;1728: client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_BRYAR_PISTOL ); +ADDRLP4 828 +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +ASGNP4 +ADDRLP4 828 +INDIRP4 +ADDRLP4 828 +INDIRP4 +INDIRI4 +CNSTI4 8 +BORI4 +ASGNI4 +line 1729 +;1729: } +LABELV $578 +LABELV $576 +line 1731 +;1730: +;1731: if (g_gametype.integer == GT_JEDIMASTER) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 2 +NEI4 $581 +line 1732 +;1732: { +line 1733 +;1733: client->ps.stats[STAT_WEAPONS] &= ~(1 << WP_SABER); +ADDRLP4 828 +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +ASGNP4 +ADDRLP4 828 +INDIRP4 +ADDRLP4 828 +INDIRP4 +INDIRI4 +CNSTI4 -5 +BANDI4 +ASGNI4 +line 1734 +;1734: client->ps.stats[STAT_WEAPONS] |= (1 << WP_STUN_BATON); +ADDRLP4 832 +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +ASGNP4 +ADDRLP4 832 +INDIRP4 +ADDRLP4 832 +INDIRP4 +INDIRI4 +CNSTI4 2 +BORI4 +ASGNI4 +line 1735 +;1735: } +LABELV $581 +line 1737 +;1736: +;1737: if (client->ps.stats[STAT_WEAPONS] & (1 << WP_BRYAR_PISTOL)) +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $584 +line 1738 +;1738: { +line 1739 +;1739: client->ps.weapon = WP_BRYAR_PISTOL; +ADDRLP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +CNSTI4 3 +ASGNI4 +line 1740 +;1740: } +ADDRGP4 $585 +JUMPV +LABELV $584 +line 1741 +;1741: else if (client->ps.stats[STAT_WEAPONS] & (1 << WP_SABER)) +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +EQI4 $586 +line 1742 +;1742: { +line 1743 +;1743: client->ps.weapon = WP_SABER; +ADDRLP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +CNSTI4 2 +ASGNI4 +line 1744 +;1744: } +ADDRGP4 $587 +JUMPV +LABELV $586 +line 1746 +;1745: else +;1746: { +line 1747 +;1747: client->ps.weapon = WP_STUN_BATON; +ADDRLP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1748 +;1748: } +LABELV $587 +LABELV $585 +line 1755 +;1749: +;1750: /* +;1751: client->ps.stats[STAT_HOLDABLE_ITEMS] |= ( 1 << HI_BINOCULARS ); +;1752: client->ps.stats[STAT_HOLDABLE_ITEM] = BG_GetItemIndexByTag(HI_BINOCULARS, IT_HOLDABLE); +;1753: */ +;1754: +;1755: client->ps.stats[STAT_HOLDABLE_ITEMS] = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 224 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1756 +;1756: client->ps.stats[STAT_HOLDABLE_ITEM] = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 220 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1758 +;1757: +;1758: if ( client->sess.sessionTeam == TEAM_SPECTATOR ) +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $588 +line 1759 +;1759: { +line 1760 +;1760: client->ps.stats[STAT_WEAPONS] = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1761 +;1761: client->ps.stats[STAT_HOLDABLE_ITEMS] = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 224 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1762 +;1762: client->ps.stats[STAT_HOLDABLE_ITEM] = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 220 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1763 +;1763: } +LABELV $588 +line 1765 +;1764: +;1765: client->ps.ammo[AMMO_BLASTER] = 100; //ammoData[AMMO_BLASTER].max; //100 seems fair. +ADDRLP4 0 +INDIRP4 +CNSTI4 416 +ADDP4 +CNSTI4 100 +ASGNI4 +line 1778 +;1766:// client->ps.ammo[AMMO_POWERCELL] = ammoData[AMMO_POWERCELL].max; +;1767:// client->ps.ammo[AMMO_FORCE] = ammoData[AMMO_FORCE].max; +;1768:// client->ps.ammo[AMMO_METAL_BOLTS] = ammoData[AMMO_METAL_BOLTS].max; +;1769:// client->ps.ammo[AMMO_ROCKETS] = ammoData[AMMO_ROCKETS].max; +;1770:/* +;1771: client->ps.stats[STAT_WEAPONS] = ( 1 << WP_BRYAR_PISTOL); +;1772: if ( g_gametype.integer == GT_TEAM ) { +;1773: client->ps.ammo[WP_BRYAR_PISTOL] = 50; +;1774: } else { +;1775: client->ps.ammo[WP_BRYAR_PISTOL] = 100; +;1776: } +;1777:*/ +;1778: client->ps.rocketLockIndex = MAX_CLIENTS; +ADDRLP4 0 +INDIRP4 +CNSTI4 580 +ADDP4 +CNSTI4 32 +ASGNI4 +line 1779 +;1779: client->ps.rocketLockTime = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 588 +ADDP4 +CNSTF4 0 +ASGNF4 +line 1790 +;1780: +;1781: //rww - Set here to initialize the circling seeker drone to off. +;1782: //A quick note about this so I don't forget how it works again: +;1783: //ps.genericEnemyIndex is kept in sync between the server and client. +;1784: //When it gets set then an entitystate value of the same name gets +;1785: //set along with an entitystate flag in the shared bg code. Which +;1786: //is why a value needs to be both on the player state and entity state. +;1787: //(it doesn't seem to just carry over the entitystate value automatically +;1788: //because entity state value is derived from player state data or some +;1789: //such) +;1790: client->ps.genericEnemyIndex = -1; +ADDRLP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +CNSTI4 -1 +ASGNI4 +line 1792 +;1791: +;1792: client->ps.isJediMaster = qfalse; +ADDRLP4 0 +INDIRP4 +CNSTI4 604 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1794 +;1793: +;1794: client->ps.fallingToDeath = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 1340 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1797 +;1795: +;1796: //Do per-spawn force power initialization +;1797: WP_SpawnInitForcePowers( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 WP_SpawnInitForcePowers +CALLV +pop +line 1800 +;1798: +;1799: // health will count down towards max_health +;1800: ent->health = client->ps.stats[STAT_HEALTH] = client->ps.stats[STAT_MAX_HEALTH] * 1.25; +ADDRLP4 832 +CNSTF4 1067450368 +ADDRLP4 0 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +CVIF4 4 +MULF4 +CVFI4 4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRLP4 832 +INDIRI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +ADDRLP4 832 +INDIRI4 +ASGNI4 +line 1803 +;1801: +;1802: // Start with a small amount of armor as well. +;1803: client->ps.stats[STAT_ARMOR] = client->ps.stats[STAT_MAX_HEALTH] * 0.25; +ADDRLP4 0 +INDIRP4 +CNSTI4 236 +ADDP4 +CNSTF4 1048576000 +ADDRLP4 0 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +CVIF4 4 +MULF4 +CVFI4 4 +ASGNI4 +line 1805 +;1804: +;1805: G_SetOrigin( ent, spawn_origin ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 76 +ARGP4 +ADDRGP4 G_SetOrigin +CALLV +pop +line 1806 +;1806: VectorCopy( spawn_origin, client->ps.origin ); +ADDRLP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +ADDRLP4 76 +INDIRB +ASGNB 12 +line 1809 +;1807: +;1808: // the respawned flag will be cleared after the attack and jump keys come up +;1809: client->ps.pm_flags |= PMF_RESPAWNED; +ADDRLP4 840 +ADDRLP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +ASGNP4 +ADDRLP4 840 +INDIRP4 +ADDRLP4 840 +INDIRP4 +INDIRI4 +CNSTI4 512 +BORI4 +ASGNI4 +line 1811 +;1810: +;1811: trap_GetUsercmd( client - level.clients, &ent->client->pers.cmd ); +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 level +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1756 +DIVI4 +ARGI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1372 +ADDP4 +ARGP4 +ADDRGP4 trap_GetUsercmd +CALLV +pop +line 1812 +;1812: SetClientViewAngle( ent, spawn_angles ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 92 +ARGP4 +ADDRGP4 SetClientViewAngle +CALLV +pop +line 1814 +;1813: +;1814: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $590 +line 1816 +;1815: +;1816: } else { +ADDRGP4 $591 +JUMPV +LABELV $590 +line 1817 +;1817: G_KillBox( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_KillBox +CALLV +pop +line 1818 +;1818: trap_LinkEntity (ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 1821 +;1819: +;1820: // force the base weapon up +;1821: client->ps.weapon = WP_BRYAR_PISTOL; +ADDRLP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +CNSTI4 3 +ASGNI4 +line 1822 +;1822: client->ps.weaponstate = FIRST_WEAPON; +ADDRLP4 0 +INDIRP4 +CNSTI4 152 +ADDP4 +CNSTI4 3 +ASGNI4 +line 1824 +;1823: +;1824: } +LABELV $591 +line 1827 +;1825: +;1826: // don't allow full run speed for a bit +;1827: client->ps.pm_flags |= PMF_TIME_KNOCKBACK; +ADDRLP4 844 +ADDRLP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +ASGNP4 +ADDRLP4 844 +INDIRP4 +ADDRLP4 844 +INDIRP4 +INDIRI4 +CNSTI4 64 +BORI4 +ASGNI4 +line 1828 +;1828: client->ps.pm_time = 100; +ADDRLP4 0 +INDIRP4 +CNSTI4 16 +ADDP4 +CNSTI4 100 +ASGNI4 +line 1830 +;1829: +;1830: client->respawnTime = level.time; +ADDRLP4 0 +INDIRP4 +CNSTI4 1672 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 1831 +;1831: client->inactivityTime = level.time + g_inactivity.integer * 1000; +ADDRLP4 0 +INDIRP4 +CNSTI4 1676 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 1000 +ADDRGP4 g_inactivity+12 +INDIRI4 +MULI4 +ADDI4 +ASGNI4 +line 1832 +;1832: client->latched_buttons = 0; +ADDRLP4 0 +INDIRP4 +CNSTI4 1592 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1835 +;1833: +;1834: // set default animations +;1835: client->ps.torsoAnim = WeaponReadyAnim[client->ps.weapon]; +ADDRLP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 WeaponReadyAnim +ADDP4 +INDIRI4 +ASGNI4 +line 1836 +;1836: client->ps.legsAnim = WeaponReadyAnim[client->ps.weapon]; +ADDRLP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 WeaponReadyAnim +ADDP4 +INDIRI4 +ASGNI4 +line 1838 +;1837: +;1838: if ( level.intermissiontime ) { +ADDRGP4 level+9008 +INDIRI4 +CNSTI4 0 +EQI4 $595 +line 1839 +;1839: MoveClientToIntermission( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 MoveClientToIntermission +CALLV +pop +line 1840 +;1840: } else { +ADDRGP4 $596 +JUMPV +LABELV $595 +line 1842 +;1841: // fire the targets of the spawn point +;1842: G_UseTargets( spawnPoint, ent ); +ADDRLP4 72 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_UseTargets +CALLV +pop +line 1846 +;1843: +;1844: // select the highest weapon number available, after any +;1845: // spawn given items have fired +;1846: client->ps.weapon = 1; +ADDRLP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +CNSTI4 1 +ASGNI4 +line 1847 +;1847: for ( i = WP_NUM_WEAPONS - 1 ; i > 0 ; i-- ) { +ADDRLP4 4 +CNSTI4 15 +ASGNI4 +LABELV $598 +line 1848 +;1848: if ( client->ps.stats[STAT_WEAPONS] & ( 1 << i ) ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 232 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 4 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $602 +line 1849 +;1849: client->ps.weapon = i; +ADDRLP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 1850 +;1850: break; +ADDRGP4 $600 +JUMPV +LABELV $602 +line 1852 +;1851: } +;1852: } +LABELV $599 +line 1847 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +GTI4 $598 +LABELV $600 +line 1853 +;1853: } +LABELV $596 +line 1857 +;1854: +;1855: // run a client frame to drop exactly to the floor, +;1856: // initialize animations and other things +;1857: client->ps.commandTime = level.time - 100; +ADDRLP4 0 +INDIRP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 100 +SUBI4 +ASGNI4 +line 1858 +;1858: ent->client->pers.cmd.serverTime = level.time; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1372 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 1859 +;1859: ClientThink( ent-g_entities ); +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRGP4 ClientThink +CALLV +pop +line 1862 +;1860: +;1861: // positively link the client, even if the command times are weird +;1862: if ( ent->client->sess.sessionTeam != TEAM_SPECTATOR ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +EQI4 $606 +line 1863 +;1863: BG_PlayerStateToEntityState( &client->ps, &ent->s, qtrue ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 BG_PlayerStateToEntityState +CALLV +pop +line 1864 +;1864: VectorCopy( ent->client->ps.origin, ent->r.currentOrigin ); +ADDRLP4 856 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 856 +INDIRP4 +CNSTI4 368 +ADDP4 +ADDRLP4 856 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 1865 +;1865: trap_LinkEntity( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_LinkEntity +CALLV +pop +line 1866 +;1866: } +LABELV $606 +line 1868 +;1867: +;1868: if (g_spawnInvulnerability.integer) +ADDRGP4 g_spawnInvulnerability+12 +INDIRI4 +CNSTI4 0 +EQI4 $608 +line 1869 +;1869: { +line 1870 +;1870: ent->client->ps.eFlags |= EF_INVULNERABLE; +ADDRLP4 856 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 108 +ADDP4 +ASGNP4 +ADDRLP4 856 +INDIRP4 +ADDRLP4 856 +INDIRP4 +INDIRI4 +CNSTI4 67108864 +BORI4 +ASGNI4 +line 1871 +;1871: ent->client->invulnerableTimer = level.time + g_spawnInvulnerability.integer; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1564 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ADDRGP4 g_spawnInvulnerability+12 +INDIRI4 +ADDI4 +ASGNI4 +line 1872 +;1872: } +LABELV $608 +line 1875 +;1873: +;1874: // run the presend to set anything else +;1875: ClientEndFrame( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 ClientEndFrame +CALLV +pop +line 1878 +;1876: +;1877: // clear entity state values +;1878: BG_PlayerStateToEntityState( &client->ps, &ent->s, qtrue ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 BG_PlayerStateToEntityState +CALLV +pop +line 1879 +;1879:} +LABELV $530 +endproc ClientSpawn 860 16 +export ClientDisconnect +proc ClientDisconnect 24 8 +line 1894 +;1880: +;1881: +;1882:/* +;1883:=========== +;1884:ClientDisconnect +;1885: +;1886:Called when a player drops from the server. +;1887:Will not be called between levels. +;1888: +;1889:This should NOT be called directly by any game logic, +;1890:call trap_DropClient(), which will call this and do +;1891:server system housekeeping. +;1892:============ +;1893:*/ +;1894:void ClientDisconnect( int clientNum ) { +line 1901 +;1895: gentity_t *ent; +;1896: gentity_t *tent; +;1897: int i; +;1898: +;1899: // cleanup if we are kicking a bot that +;1900: // hasn't spawned yet +;1901: G_RemoveQueuedBotBegin( clientNum ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_RemoveQueuedBotBegin +CALLV +pop +line 1903 +;1902: +;1903: ent = g_entities + clientNum; +ADDRLP4 4 +CNSTI4 828 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1904 +;1904: if ( !ent->client ) { +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $614 +line 1905 +;1905: return; +ADDRGP4 $613 +JUMPV +LABELV $614 +line 1908 +;1906: } +;1907: +;1908: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $617 +JUMPV +LABELV $616 +line 1911 +;1909: +;1910: while (i < NUM_FORCE_POWERS) +;1911: { +line 1912 +;1912: if (ent->client->ps.fd.forcePowersActive & (1 << i)) +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $619 +line 1913 +;1913: { +line 1914 +;1914: WP_ForcePowerStop(ent, i); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRGP4 WP_ForcePowerStop +CALLV +pop +line 1915 +;1915: } +LABELV $619 +line 1916 +;1916: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1917 +;1917: } +LABELV $617 +line 1910 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $616 +line 1919 +;1918: +;1919: i = TRACK_CHANNEL_1; +ADDRLP4 0 +CNSTI4 51 +ASGNI4 +ADDRGP4 $622 +JUMPV +LABELV $621 +line 1922 +;1920: +;1921: while (i < NUM_TRACK_CHANNELS) +;1922: { +line 1923 +;1923: if (ent->client->ps.fd.killSoundEntIndex[i-50] && ent->client->ps.fd.killSoundEntIndex[i-50] < MAX_GENTITIES && ent->client->ps.fd.killSoundEntIndex[i-50] > 0) +ADDRLP4 12 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +CNSTI4 200 +SUBI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1188 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +INDIRI4 +EQI4 $624 +ADDRLP4 12 +INDIRI4 +CNSTI4 1024 +GEI4 $624 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LEI4 $624 +line 1924 +;1924: { +line 1925 +;1925: G_MuteSound(ent->client->ps.fd.killSoundEntIndex[i-50], CHAN_VOICE); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +CNSTI4 200 +SUBI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1188 +ADDP4 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 3 +ARGI4 +ADDRGP4 G_MuteSound +CALLV +pop +line 1926 +;1926: } +LABELV $624 +line 1927 +;1927: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1928 +;1928: } +LABELV $622 +line 1921 +ADDRLP4 0 +INDIRI4 +CNSTI4 56 +LTI4 $621 +line 1929 +;1929: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1932 +;1930: +;1931: // stop any following clients +;1932: for ( i = 0 ; i < level.maxclients ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $629 +JUMPV +LABELV $626 +line 1933 +;1933: if ( level.clients[i].sess.sessionTeam == TEAM_SPECTATOR +ADDRLP4 12 +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $631 +ADDRLP4 12 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $631 +ADDRLP4 12 +INDIRP4 +CNSTI4 1532 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $631 +line 1935 +;1934: && level.clients[i].sess.spectatorState == SPECTATOR_FOLLOW +;1935: && level.clients[i].sess.spectatorClient == clientNum ) { +line 1936 +;1936: StopFollowing( &g_entities[i] ); +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ARGP4 +ADDRGP4 StopFollowing +CALLV +pop +line 1937 +;1937: } +LABELV $631 +line 1938 +;1938: } +LABELV $627 +line 1932 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $629 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $626 +line 1941 +;1939: +;1940: // send effect if they were completely connected +;1941: if ( ent->client->pers.connected == CON_CONNECTED +ADDRLP4 12 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $633 +ADDRLP4 12 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +EQI4 $633 +line 1942 +;1942: && ent->client->sess.sessionTeam != TEAM_SPECTATOR ) { +line 1943 +;1943: tent = G_TempEntity( ent->client->ps.origin, EV_PLAYER_TELEPORT_OUT ); +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 20 +ADDP4 +ARGP4 +CNSTI4 60 +ARGI4 +ADDRLP4 16 +ADDRGP4 G_TempEntity +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 16 +INDIRP4 +ASGNP4 +line 1944 +;1944: tent->s.clientNum = ent->s.clientNum; +ADDRLP4 20 +CNSTI4 220 +ASGNI4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRI4 +ASGNI4 +line 1948 +;1945: +;1946: // They don't get to take powerups with them! +;1947: // Especially important for stuff like CTF flags +;1948: TossClientItems( ent ); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 TossClientItems +CALLV +pop +line 1949 +;1949: } +LABELV $633 +line 1951 +;1950: +;1951: G_LogPrintf( "ClientDisconnect: %i\n", clientNum ); +ADDRGP4 $635 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 1954 +;1952: +;1953: // if we are playing in tourney mode and losing, give a win to the other player +;1954: if ( (g_gametype.integer == GT_TOURNAMENT ) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $636 +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +ADDRGP4 level+9008 +INDIRI4 +ADDRLP4 16 +INDIRI4 +NEI4 $636 +ADDRGP4 level+16 +INDIRI4 +ADDRLP4 16 +INDIRI4 +NEI4 $636 +ADDRGP4 level+84+4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $636 +line 1956 +;1955: && !level.intermissiontime +;1956: && !level.warmupTime && level.sortedClients[1] == clientNum ) { +line 1957 +;1957: level.clients[ level.sortedClients[0] ].sess.wins++; +ADDRLP4 20 +CNSTI4 1756 +ADDRGP4 level+84 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1536 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 20 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1958 +;1958: ClientUserinfoChanged( level.sortedClients[0] ); +ADDRGP4 level+84 +INDIRI4 +ARGI4 +ADDRGP4 ClientUserinfoChanged +CALLV +pop +line 1959 +;1959: } +LABELV $636 +line 1961 +;1960: +;1961: trap_UnlinkEntity (ent); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_UnlinkEntity +CALLV +pop +line 1962 +;1962: ent->s.modelindex = 0; +ADDRLP4 4 +INDIRP4 +CNSTI4 212 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1963 +;1963: ent->inuse = qfalse; +ADDRLP4 4 +INDIRP4 +CNSTI4 412 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1964 +;1964: ent->classname = "disconnected"; +ADDRLP4 4 +INDIRP4 +CNSTI4 416 +ADDP4 +ADDRGP4 $645 +ASGNP4 +line 1965 +;1965: ent->client->pers.connected = CON_DISCONNECTED; +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1368 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1966 +;1966: ent->client->ps.persistant[PERS_TEAM] = TEAM_FREE; +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 292 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1967 +;1967: ent->client->sess.sessionTeam = TEAM_FREE; +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +CNSTI4 0 +ASGNI4 +line 1969 +;1968: +;1969: trap_SetConfigstring( CS_PLAYERS + clientNum, ""); +ADDRFP4 0 +INDIRI4 +CNSTI4 544 +ADDI4 +ARGI4 +ADDRGP4 $646 +ARGP4 +ADDRGP4 trap_SetConfigstring +CALLV +pop +line 1971 +;1970: +;1971: CalculateRanks(); +ADDRGP4 CalculateRanks +CALLV +pop +line 1973 +;1972: +;1973: if ( ent->r.svFlags & SVF_BOT ) { +ADDRLP4 4 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +EQI4 $647 +line 1974 +;1974: BotAIShutdownClient( clientNum, qfalse ); +ADDRFP4 0 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 BotAIShutdownClient +CALLI4 +pop +line 1975 +;1975: } +LABELV $647 +line 1977 +;1976: +;1977: G_ClearClientLog(clientNum); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 G_ClearClientLog +CALLV +pop +line 1978 +;1978:} +LABELV $613 +endproc ClientDisconnect 24 8 +import G_WriteClientSessionData +bss +export Client_Force +align 4 +LABELV Client_Force +skip 15104 +import trap_ROFF_Purge_Ent +import trap_ROFF_Play +import trap_ROFF_Cache +import trap_ROFF_UpdateEntities +import trap_ROFF_Clean +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_SnapVector +import trap_GeneticParentsAndChildSelection +import trap_BotResetWeaponState +import trap_BotFreeWeaponState +import trap_BotAllocWeaponState +import trap_BotLoadWeaponWeights +import trap_BotGetWeaponInfo +import trap_BotChooseBestFightWeapon +import trap_BotAddAvoidSpot +import trap_BotInitMoveState +import trap_BotFreeMoveState +import trap_BotAllocMoveState +import trap_BotPredictVisiblePosition +import trap_BotMovementViewTarget +import trap_BotReachabilityArea +import trap_BotResetLastAvoidReach +import trap_BotResetAvoidReach +import trap_BotMoveInDirection +import trap_BotMoveToGoal +import trap_BotResetMoveState +import trap_BotFreeGoalState +import trap_BotAllocGoalState +import trap_BotMutateGoalFuzzyLogic +import trap_BotSaveGoalFuzzyLogic +import trap_BotInterbreedGoalFuzzyLogic +import trap_BotFreeItemWeights +import trap_BotLoadItemWeights +import trap_BotUpdateEntityItems +import trap_BotInitLevelItems +import trap_BotSetAvoidGoalTime +import trap_BotAvoidGoalTime +import trap_BotGetLevelItemGoal +import trap_BotGetMapLocationGoal +import trap_BotGetNextCampSpotGoal +import trap_BotItemGoalInVisButNotVisible +import trap_BotTouchingGoal +import trap_BotChooseNBGItem +import trap_BotChooseLTGItem +import trap_BotGetSecondGoal +import trap_BotGetTopGoal +import trap_BotGoalName +import trap_BotDumpGoalStack +import trap_BotDumpAvoidGoals +import trap_BotEmptyGoalStack +import trap_BotPopGoal +import trap_BotPushGoal +import trap_BotResetAvoidGoals +import trap_BotRemoveFromAvoidGoals +import trap_BotResetGoalState +import trap_BotSetChatName +import trap_BotSetChatGender +import trap_BotLoadChatFile +import trap_BotReplaceSynonyms +import trap_UnifyWhiteSpaces +import trap_BotMatchVariable +import trap_BotFindMatch +import trap_StringContains +import trap_BotGetChatMessage +import trap_BotEnterChat +import trap_BotChatLength +import trap_BotReplyChat +import trap_BotNumInitialChats +import trap_BotInitialChat +import trap_BotNumConsoleMessages +import trap_BotNextConsoleMessage +import trap_BotRemoveConsoleMessage +import trap_BotQueueConsoleMessage +import trap_BotFreeChatState +import trap_BotAllocChatState +import trap_Characteristic_String +import trap_Characteristic_BInteger +import trap_Characteristic_Integer +import trap_Characteristic_BFloat +import trap_Characteristic_Float +import trap_BotFreeCharacter +import trap_BotLoadCharacter +import trap_EA_ResetInput +import trap_EA_GetInput +import trap_EA_EndRegular +import trap_EA_ForcePower +import trap_EA_Alt_Attack +import trap_EA_View +import trap_EA_Move +import trap_EA_DelayedJump +import trap_EA_Jump +import trap_EA_SelectWeapon +import trap_EA_MoveRight +import trap_EA_MoveLeft +import trap_EA_MoveBack +import trap_EA_MoveForward +import trap_EA_MoveDown +import trap_EA_MoveUp +import trap_EA_Crouch +import trap_EA_Respawn +import trap_EA_Use +import trap_EA_Attack +import trap_EA_Talk +import trap_EA_Gesture +import trap_EA_Action +import trap_EA_Command +import trap_EA_SayTeam +import trap_EA_Say +import trap_AAS_PredictClientMovement +import trap_AAS_Swimming +import trap_AAS_AlternativeRouteGoals +import trap_AAS_PredictRoute +import trap_AAS_EnableRoutingArea +import trap_AAS_AreaTravelTimeToGoalArea +import trap_AAS_AreaReachability +import trap_AAS_IntForBSPEpairKey +import trap_AAS_FloatForBSPEpairKey +import trap_AAS_VectorForBSPEpairKey +import trap_AAS_ValueForBSPEpairKey +import trap_AAS_NextBSPEntity +import trap_AAS_PointContents +import trap_AAS_TraceAreas +import trap_AAS_PointReachabilityAreaIndex +import trap_AAS_PointAreaNum +import trap_AAS_Time +import trap_AAS_PresenceTypeBoundingBox +import trap_AAS_Initialized +import trap_AAS_EntityInfo +import trap_AAS_AreaInfo +import trap_AAS_BBoxAreas +import trap_BotUserCommand +import trap_BotGetServerCommand +import trap_BotGetSnapshotEntity +import trap_BotLibTest +import trap_BotLibUpdateEntity +import trap_BotLibLoadMap +import trap_BotLibStartFrame +import trap_BotLibDefine +import trap_BotLibVarGet +import trap_BotLibVarSet +import trap_BotLibShutdown +import trap_BotLibSetup +import trap_DebugPolygonDelete +import trap_DebugPolygonCreate +import trap_GetEntityToken +import trap_GetUsercmd +import trap_BotFreeClient +import trap_BotAllocateClient +import trap_EntityContact +import trap_EntitiesInBox +import trap_UnlinkEntity +import trap_LinkEntity +import trap_AreasConnected +import trap_AdjustAreaPortalState +import trap_InPVSIgnorePortals +import trap_InPVS +import trap_PointContents +import trap_Trace +import trap_SetBrushModel +import trap_GetServerinfo +import trap_SetUserinfo +import trap_GetUserinfo +import trap_GetConfigstring +import trap_SetConfigstring +import trap_SendServerCommand +import trap_DropClient +import trap_LocateGameData +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableValue +import trap_Cvar_VariableIntegerValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_SendConsoleCommand +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Args +import trap_Argv +import trap_Argc +import trap_Milliseconds +import trap_Error +import trap_Printf +import g_timeouttospec +import g_forceDodge +import g_dismember +import g_singlePlayer +import g_enableBreath +import g_enableDust +import g_rankings +import pmove_msec +import pmove_fixed +import g_smoothClients +import g_blueteam +import g_redteam +import g_debugUp +import g_debugRight +import g_debugForward +import g_filterBan +import g_banIPs +import g_teamForceBalance +import g_teamAutoJoin +import g_allowVote +import g_blood +import g_doWarmup +import g_warmup +import g_motd +import g_synchronousClients +import g_adaptRespawn +import g_weaponTeamRespawn +import g_weaponRespawn +import g_debugDamage +import g_debugAlloc +import g_debugMove +import g_inactivity +import g_forcerespawn +import g_quadfactor +import g_knockback +import g_speed +import g_gravity +import g_needpass +import g_password +import g_friendlySaber +import g_friendlyFire +import g_saberInterpolate +import g_capturelimit +import g_timelimit +import g_duel_fraglimit +import g_fraglimit +import g_duelWeaponDisable +import g_weaponDisable +import g_forcePowerDisable +import g_spawnInvulnerability +import g_forceRegenTime +import g_saberLocking +import g_privateDuel +import g_forceBasedTeams +import g_maxForceRank +import g_dmflags +import g_autoMapCycle +import g_restarted +import g_maxGameClients +import g_maxclients +import g_cheats +import g_dedicated +import g_gametype +import g_entities +import level +import Pickup_Team +import CheckTeamStatus +import TeamplayInfoMessage +import Team_GetLocationMsg +import Team_GetLocation +import SelectSagaSpawnPoint +import SelectCTFSpawnPoint +import Team_FreeEntity +import Team_ReturnFlag +import Team_InitGame +import Team_CheckHurtCarrier +import Team_FragBonuses +import Team_DroppedFlagThink +import AddTeamScore +import TeamColorString +import OtherTeamName +import TeamName +import OtherTeam +import BotAIStartFrame +import BotAIShutdownClient +import BotAISetupClient +import BotAILoadMap +import BotAIShutdown +import BotAISetup +import B_CleanupAlloc +import B_InitAlloc +import InFieldOfVision +import BotOrder +import OrgVisible +import InitSagaMode +import G_ClearClientLog +import G_LogExit +import G_LogWeaponOutput +import G_LogWeaponInit +import G_LogWeaponItem +import G_LogWeaponPowerup +import G_LogWeaponFrag +import G_LogWeaponDeath +import G_LogWeaponKill +import G_LogWeaponDamage +import G_LogWeaponFire +import G_LogWeaponPickup +import Jedi_DodgeEvasion +import ForceTelepathy +import ForceThrow +import ForceSeeing +import ForceTeamForceReplenish +import ForceTeamHeal +import ForceAbsorb +import ForceProtect +import ForceGrip +import ForceRage +import ForceSpeed +import ForceHeal +import ForcePowerUsableOn +import WP_ForcePowersUpdate +import WP_SpawnInitForcePowers +import WP_InitForcePowers +import WP_SaberInitBladeData +import WP_SaberCanBlock +import WP_SaberPositionUpdate +import WP_ForcePowerStop +import HasSetSaberOnly +import G_PreDefSound +import G_RefreshNextMap +import G_DoesMapSupportGametype +import BotInterbreedEndMatch +import Svcmd_BotList_f +import Svcmd_AddBot_f +import G_BotConnect +import G_RemoveQueuedBotBegin +import G_CheckBotSpawn +import G_GetBotInfoByName +import G_GetBotInfoByNumber +import G_InitBots +import UpdateTournamentInfo +import G_WriteSessionData +import G_InitWorldSession +import G_InitSessionData +import G_ReadSessionData +import Svcmd_GameMem_f +import G_InitMemory +import G_Alloc +import Team_CheckDroppedItem +import OnSameTeam +import G_RunClient +import ClientEndFrame +import ClientThink +import G_CheckClientTimeouts +import ClientCommand +import G_GetStripEdString +import G_Error +import G_Printf +import SendScoreboardMessageToAllClients +import G_LogPrintf +import G_RunThink +import CheckTeamLeader +import SetLeader +import FindIntermissionPoint +import g_ff_objectives +import DeathmatchScoreboardMessage +import G_SetStats +import MoveClientToIntermission +import BlowDetpacks +import FireWeapon +import G_FilterPacket +import G_ProcessIPBans +import ConsoleCommand +import CalculateRanks +import AddScore +import player_die +import BeginIntermission +import CheckGauntletAttack +import SnapVectorTowards +import CalcMuzzlePoint +import LogAccuracyHit +import WP_FireGenericBlasterMissile +import WP_FireTurretMissile +import G_PlayerBecomeATST +import ATST_ManageDamageBoxes +import TeleportPlayer +import trigger_teleporter_touch +import Touch_DoorTrigger +import G_RunMover +import WP_FireBlasterMissile +import G_ExplodeMissile +import G_BounceProjectile +import CreateMissile +import G_RunMissile +import G_ReflectMissile +import ExplodeDeath +import TossClientCubes +import TossClientItems +import TossClientWeapon +import body_die +import G_RadiusDamage +import G_Damage +import CanDamage +import trap_G2API_SetBoneAnim +import trap_G2API_GetGLAName +import trap_G2API_SetBoneAngles +import trap_G2API_CleanGhoul2Models +import trap_G2API_RemoveGhoul2Model +import trap_G2API_HasGhoul2ModelOnIndex +import trap_G2API_DuplicateGhoul2Instance +import trap_G2API_CopySpecificGhoul2Model +import trap_G2API_CopyGhoul2Instance +import trap_G2API_SetBoltInfo +import trap_G2API_AddBolt +import trap_G2API_InitGhoul2Model +import trap_G2API_GetBoltMatrix_NoReconstruct +import trap_G2API_GetBoltMatrix +import trap_G2_HaveWeGhoul2Models +import trap_G2_SetGhoul2ModelIndexes +import trap_G2_ListModelBones +import trap_G2_ListModelSurfaces +import G_SkinIndex +import BuildShaderStateConfig +import AddRemap +import G_SetOrigin +import G_AddEvent +import G_AddPredictableEvent +import vtos +import tv +import G_RunObject +import G_TouchSolids +import G_TouchTriggers +import G_EntitiesFree +import G_FreeEntity +import G_KillG2Queue +import G_SendG2KillQueue +import TryUse +import G_EntitySound +import G_SoundAtLoc +import G_Sound +import G_MuteSound +import G_ScreenShake +import G_PlayEffect +import G_TempEntity +import G_Spawn +import G_InitGentity +import G_SetAngles +import G_SetMovedir +import G_UseTargets +import G_PickTarget +import G_RadiusList +import G_Find +import G_KillBox +import G_TeamCommand +import G_EffectIndex +import G_SoundIndex +import G_ModelIndex +import SaveRegisteredItems +import RegisterItem +import ClearRegisteredItems +import Touch_Item +import Add_Ammo +import ArmorIndex +import Think_Weapon +import FinishSpawningItem +import G_SpawnItem +import SetRespawn +import LaunchItem +import Drop_Item +import PrecacheItem +import UseHoldableItem +import RespawnItem +import G_RunItem +import G_CheckTeamItems +import ItemUse_MedPack +import ItemUse_Seeker +import ItemUse_Sentry +import ItemUse_Shield +import ItemUse_Binoculars +import G_GetDuelWinner +import Cmd_EngageDuel_f +import Cmd_ToggleSaber_f +import G_ItemUsable +import Cmd_SaberAttackCycle_f +import Cmd_FollowCycle_f +import SetTeam +import BroadcastTeamChange +import StopFollowing +import Cmd_Score_f +import G_NewString +import G_SpawnEntitiesFromString +import G_SpawnVector +import G_SpawnInt +import G_SpawnFloat +import G_SpawnString +import precachedKyle +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $646 +char 1 0 +align 1 +LABELV $645 +char 1 100 +char 1 105 +char 1 115 +char 1 99 +char 1 111 +char 1 110 +char 1 110 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $635 +char 1 67 +char 1 108 +char 1 105 +char 1 101 +char 1 110 +char 1 116 +char 1 68 +char 1 105 +char 1 115 +char 1 99 +char 1 111 +char 1 110 +char 1 110 +char 1 101 +char 1 99 +char 1 116 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 0 +align 1 +LABELV $564 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $529 +char 1 67 +char 1 108 +char 1 105 +char 1 101 +char 1 110 +char 1 116 +char 1 66 +char 1 101 +char 1 103 +char 1 105 +char 1 110 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 0 +align 1 +LABELV $528 +char 1 80 +char 1 76 +char 1 69 +char 1 78 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $522 +char 1 77 +char 1 111 +char 1 116 +char 1 105 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $521 +char 1 114 +char 1 116 +char 1 105 +char 1 98 +char 1 105 +char 1 97 +char 1 0 +align 1 +LABELV $520 +char 1 108 +char 1 116 +char 1 105 +char 1 98 +char 1 105 +char 1 97 +char 1 0 +align 1 +LABELV $519 +char 1 114 +char 1 114 +char 1 97 +char 1 100 +char 1 105 +char 1 117 +char 1 115 +char 1 0 +align 1 +LABELV $518 +char 1 108 +char 1 114 +char 1 97 +char 1 100 +char 1 105 +char 1 117 +char 1 115 +char 1 0 +align 1 +LABELV $517 +char 1 116 +char 1 104 +char 1 111 +char 1 114 +char 1 97 +char 1 99 +char 1 105 +char 1 99 +char 1 0 +align 1 +LABELV $501 +char 1 66 +char 1 108 +char 1 117 +char 1 101 +char 1 0 +align 1 +LABELV $496 +char 1 82 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $486 +char 1 80 +char 1 76 +char 1 67 +char 1 79 +char 1 78 +char 1 78 +char 1 69 +char 1 67 +char 1 84 +char 1 0 +align 1 +LABELV $485 +char 1 112 +char 1 114 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 94 +char 1 55 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 34 +char 1 0 +align 1 +LABELV $482 +char 1 67 +char 1 108 +char 1 105 +char 1 101 +char 1 110 +char 1 116 +char 1 67 +char 1 111 +char 1 110 +char 1 110 +char 1 101 +char 1 99 +char 1 116 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 0 +align 1 +LABELV $481 +char 1 66 +char 1 111 +char 1 116 +char 1 67 +char 1 111 +char 1 110 +char 1 110 +char 1 101 +char 1 99 +char 1 116 +char 1 102 +char 1 97 +char 1 105 +char 1 108 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $469 +char 1 73 +char 1 110 +char 1 118 +char 1 97 +char 1 108 +char 1 105 +char 1 100 +char 1 32 +char 1 112 +char 1 97 +char 1 115 +char 1 115 +char 1 119 +char 1 111 +char 1 114 +char 1 100 +char 1 0 +align 1 +LABELV $467 +char 1 110 +char 1 111 +char 1 110 +char 1 101 +char 1 0 +align 1 +LABELV $462 +char 1 112 +char 1 97 +char 1 115 +char 1 115 +char 1 119 +char 1 111 +char 1 114 +char 1 100 +char 1 0 +align 1 +LABELV $458 +char 1 66 +char 1 97 +char 1 110 +char 1 110 +char 1 101 +char 1 100 +char 1 46 +char 1 0 +align 1 +LABELV $454 +char 1 67 +char 1 108 +char 1 105 +char 1 101 +char 1 110 +char 1 116 +char 1 85 +char 1 115 +char 1 101 +char 1 114 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 67 +char 1 104 +char 1 97 +char 1 110 +char 1 103 +char 1 101 +char 1 100 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $453 +char 1 110 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 116 +char 1 92 +char 1 37 +char 1 105 +char 1 92 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 103 +char 1 95 +char 1 114 +char 1 101 +char 1 100 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 103 +char 1 95 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 99 +char 1 49 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 99 +char 1 50 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 104 +char 1 99 +char 1 92 +char 1 37 +char 1 105 +char 1 92 +char 1 119 +char 1 92 +char 1 37 +char 1 105 +char 1 92 +char 1 108 +char 1 92 +char 1 37 +char 1 105 +char 1 92 +char 1 116 +char 1 116 +char 1 92 +char 1 37 +char 1 100 +char 1 92 +char 1 116 +char 1 108 +char 1 92 +char 1 37 +char 1 100 +char 1 0 +align 1 +LABELV $452 +char 1 115 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $451 +char 1 110 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 116 +char 1 92 +char 1 37 +char 1 105 +char 1 92 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 99 +char 1 49 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 99 +char 1 50 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 104 +char 1 99 +char 1 92 +char 1 37 +char 1 105 +char 1 92 +char 1 119 +char 1 92 +char 1 37 +char 1 105 +char 1 92 +char 1 108 +char 1 92 +char 1 37 +char 1 105 +char 1 92 +char 1 115 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 116 +char 1 116 +char 1 92 +char 1 37 +char 1 100 +char 1 92 +char 1 116 +char 1 108 +char 1 92 +char 1 37 +char 1 100 +char 1 0 +align 1 +LABELV $448 +char 1 103 +char 1 95 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 0 +align 1 +LABELV $447 +char 1 103 +char 1 95 +char 1 114 +char 1 101 +char 1 100 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 0 +align 1 +LABELV $446 +char 1 99 +char 1 111 +char 1 108 +char 1 111 +char 1 114 +char 1 50 +char 1 0 +align 1 +LABELV $445 +char 1 99 +char 1 111 +char 1 108 +char 1 111 +char 1 114 +char 1 49 +char 1 0 +align 1 +LABELV $444 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 116 +char 1 97 +char 1 115 +char 1 107 +char 1 0 +align 1 +LABELV $440 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 108 +char 1 97 +char 1 121 +char 1 0 +align 1 +LABELV $435 +char 1 98 +char 1 0 +align 1 +LABELV $434 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 0 +align 1 +LABELV $430 +char 1 114 +char 1 0 +align 1 +LABELV $429 +char 1 114 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $426 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 0 +align 1 +LABELV $420 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 115 +char 1 0 +align 1 +LABELV $419 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 0 +align 1 +LABELV $418 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 0 +align 1 +LABELV $411 +char 1 80 +char 1 76 +char 1 82 +char 1 69 +char 1 78 +char 1 65 +char 1 77 +char 1 69 +char 1 0 +align 1 +LABELV $410 +char 1 112 +char 1 114 +char 1 105 +char 1 110 +char 1 116 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 94 +char 1 55 +char 1 32 +char 1 37 +char 1 115 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 34 +char 1 0 +align 1 +LABELV $405 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 98 +char 1 111 +char 1 97 +char 1 114 +char 1 100 +char 1 0 +align 1 +LABELV $400 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $397 +char 1 99 +char 1 103 +char 1 95 +char 1 112 +char 1 114 +char 1 101 +char 1 100 +char 1 105 +char 1 99 +char 1 116 +char 1 73 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 0 +align 1 +LABELV $396 +char 1 108 +char 1 111 +char 1 99 +char 1 97 +char 1 108 +char 1 104 +char 1 111 +char 1 115 +char 1 116 +char 1 0 +align 1 +LABELV $393 +char 1 105 +char 1 112 +char 1 0 +align 1 +LABELV $392 +char 1 92 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 92 +char 1 98 +char 1 97 +char 1 100 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 0 +align 1 +LABELV $386 +char 1 42 +char 1 102 +char 1 108 +char 1 97 +char 1 115 +char 1 104 +char 1 0 +align 1 +LABELV $380 +char 1 99 +char 1 114 +char 1 97 +char 1 110 +char 1 105 +char 1 117 +char 1 109 +char 1 0 +align 1 +LABELV $378 +char 1 117 +char 1 112 +char 1 112 +char 1 101 +char 1 114 +char 1 95 +char 1 108 +char 1 117 +char 1 109 +char 1 98 +char 1 97 +char 1 114 +char 1 0 +align 1 +LABELV $376 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 95 +char 1 114 +char 1 111 +char 1 111 +char 1 116 +char 1 0 +align 1 +LABELV $375 +char 1 42 +char 1 108 +char 1 95 +char 1 104 +char 1 97 +char 1 110 +char 1 100 +char 1 0 +align 1 +LABELV $374 +char 1 42 +char 1 114 +char 1 95 +char 1 104 +char 1 97 +char 1 110 +char 1 100 +char 1 0 +align 1 +LABELV $369 +char 1 47 +char 1 97 +char 1 110 +char 1 105 +char 1 109 +char 1 97 +char 1 116 +char 1 105 +char 1 111 +char 1 110 +char 1 46 +char 1 99 +char 1 102 +char 1 103 +char 1 0 +align 1 +LABELV $366 +char 1 70 +char 1 97 +char 1 105 +char 1 108 +char 1 101 +char 1 100 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 108 +char 1 111 +char 1 97 +char 1 100 +char 1 32 +char 1 97 +char 1 110 +char 1 105 +char 1 109 +char 1 97 +char 1 116 +char 1 105 +char 1 111 +char 1 110 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $365 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 115 +char 1 47 +char 1 95 +char 1 104 +char 1 117 +char 1 109 +char 1 97 +char 1 110 +char 1 111 +char 1 105 +char 1 100 +char 1 47 +char 1 97 +char 1 110 +char 1 105 +char 1 109 +char 1 97 +char 1 116 +char 1 105 +char 1 111 +char 1 110 +char 1 46 +char 1 99 +char 1 102 +char 1 103 +char 1 0 +align 1 +LABELV $354 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 115 +char 1 47 +char 1 107 +char 1 121 +char 1 108 +char 1 101 +char 1 47 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $347 +char 1 80 +char 1 97 +char 1 100 +char 1 97 +char 1 119 +char 1 97 +char 1 110 +char 1 0 +align 1 +LABELV $245 +char 1 98 +char 1 111 +char 1 100 +char 1 121 +char 1 113 +char 1 117 +char 1 101 +char 1 0 +align 1 +LABELV $225 +char 1 67 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 110 +char 1 39 +char 1 116 +char 1 32 +char 1 102 +char 1 105 +char 1 110 +char 1 100 +char 1 32 +char 1 97 +char 1 32 +char 1 115 +char 1 112 +char 1 97 +char 1 119 +char 1 110 +char 1 32 +char 1 112 +char 1 111 +char 1 105 +char 1 110 +char 1 116 +char 1 0 +align 1 +LABELV $149 +char 1 66 +char 1 69 +char 1 67 +char 1 79 +char 1 77 +char 1 69 +char 1 74 +char 1 77 +char 1 0 +align 1 +LABELV $148 +char 1 83 +char 1 86 +char 1 73 +char 1 78 +char 1 71 +char 1 65 +char 1 77 +char 1 69 +char 1 0 +align 1 +LABELV $147 +char 1 99 +char 1 112 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 34 +char 1 0 +align 1 +LABELV $141 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $108 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $103 +char 1 45 +char 1 49 +char 1 0 +align 1 +LABELV $87 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 95 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 95 +char 1 100 +char 1 101 +char 1 97 +char 1 116 +char 1 104 +char 1 109 +char 1 97 +char 1 116 +char 1 99 +char 1 104 +char 1 0 +align 1 +LABELV $83 +char 1 110 +char 1 111 +char 1 104 +char 1 117 +char 1 109 +char 1 97 +char 1 110 +char 1 115 +char 1 0 +align 1 +LABELV $80 +char 1 48 +char 1 0 +align 1 +LABELV $79 +char 1 110 +char 1 111 +char 1 98 +char 1 111 +char 1 116 +char 1 115 +char 1 0 diff --git a/CODE-mp/game/vm/g_cmds.asm b/CODE-mp/game/vm/g_cmds.asm new file mode 100644 index 0000000..7232049 --- /dev/null +++ b/CODE-mp/game/vm/g_cmds.asm @@ -0,0 +1,19339 @@ +export DeathmatchScoreboardMessage +code +proc DeathmatchScoreboardMessage 2484 68 +file "../g_cmds.c" +line 20 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:#include "g_local.h" +;4: +;5:#include "../../ui/menudef.h" // for the voice chats +;6: +;7://rww - for getting bot commands... +;8:int AcceptBotCommand(char *cmd, gentity_t *pl); +;9://end rww +;10: +;11:void BG_CycleInven(playerState_t *ps, int direction); +;12:void BG_CycleForce(playerState_t *ps, int direction); +;13: +;14:/* +;15:================== +;16:DeathmatchScoreboardMessage +;17: +;18:================== +;19:*/ +;20:void DeathmatchScoreboardMessage( gentity_t *ent ) { +line 29 +;21: char entry[1024]; +;22: char string[1400]; +;23: int stringlength; +;24: int i, j; +;25: gclient_t *cl; +;26: int numSorted, scoreFlags, accuracy, perfect; +;27: +;28: // send the latest information on all clients +;29: string[0] = 0; +ADDRLP4 1052 +CNSTI1 0 +ASGNI1 +line 30 +;30: stringlength = 0; +ADDRLP4 1032 +CNSTI4 0 +ASGNI4 +line 31 +;31: scoreFlags = 0; +ADDRLP4 2452 +CNSTI4 0 +ASGNI4 +line 33 +;32: +;33: numSorted = level.numConnectedClients; +ADDRLP4 1048 +ADDRGP4 level+72 +INDIRI4 +ASGNI4 +line 35 +;34: +;35: if (numSorted > MAX_CLIENT_SCORE_SEND) +ADDRLP4 1048 +INDIRI4 +CNSTI4 20 +LEI4 $80 +line 36 +;36: { +line 37 +;37: numSorted = MAX_CLIENT_SCORE_SEND; +ADDRLP4 1048 +CNSTI4 20 +ASGNI4 +line 38 +;38: } +LABELV $80 +line 40 +;39: +;40: for (i=0 ; i < numSorted ; i++) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $85 +JUMPV +LABELV $82 +line 43 +;41: int ping; +;42: +;43: cl = &level.clients[level.sortedClients[i]]; +ADDRLP4 0 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 level+84 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 45 +;44: +;45: if ( cl->pers.connected == CON_CONNECTING ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $87 +line 46 +;46: ping = -1; +ADDRLP4 2456 +CNSTI4 -1 +ASGNI4 +line 47 +;47: } else { +ADDRGP4 $88 +JUMPV +LABELV $87 +line 48 +;48: ping = cl->ps.ping < 999 ? cl->ps.ping : 999; +ADDRLP4 0 +INDIRP4 +CNSTI4 484 +ADDP4 +INDIRI4 +CNSTI4 999 +GEI4 $90 +ADDRLP4 2460 +ADDRLP4 0 +INDIRP4 +CNSTI4 484 +ADDP4 +INDIRI4 +ASGNI4 +ADDRGP4 $91 +JUMPV +LABELV $90 +ADDRLP4 2460 +CNSTI4 999 +ASGNI4 +LABELV $91 +ADDRLP4 2456 +ADDRLP4 2460 +INDIRI4 +ASGNI4 +line 49 +;49: } +LABELV $88 +line 51 +;50: +;51: if( cl->accuracy_shots ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1652 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $92 +line 52 +;52: accuracy = cl->accuracy_hits * 100 / cl->accuracy_shots; +ADDRLP4 1040 +CNSTI4 100 +ADDRLP4 0 +INDIRP4 +CNSTI4 1656 +ADDP4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1652 +ADDP4 +INDIRI4 +DIVI4 +ASGNI4 +line 53 +;53: } +ADDRGP4 $93 +JUMPV +LABELV $92 +line 54 +;54: else { +line 55 +;55: accuracy = 0; +ADDRLP4 1040 +CNSTI4 0 +ASGNI4 +line 56 +;56: } +LABELV $93 +line 57 +;57: perfect = ( cl->ps.persistant[PERS_RANK] == 0 && cl->ps.persistant[PERS_KILLED] == 0 ) ? 1 : 0; +ADDRLP4 2468 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 288 +ADDP4 +INDIRI4 +ADDRLP4 2468 +INDIRI4 +NEI4 $95 +ADDRLP4 0 +INDIRP4 +CNSTI4 312 +ADDP4 +INDIRI4 +ADDRLP4 2468 +INDIRI4 +NEI4 $95 +ADDRLP4 2460 +CNSTI4 1 +ASGNI4 +ADDRGP4 $96 +JUMPV +LABELV $95 +ADDRLP4 2460 +CNSTI4 0 +ASGNI4 +LABELV $96 +ADDRLP4 1044 +ADDRLP4 2460 +INDIRI4 +ASGNI4 +line 59 +;58: +;59: Com_sprintf (entry, sizeof(entry), +ADDRLP4 8 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 $97 +ARGP4 +ADDRLP4 2472 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 2472 +INDIRI4 +ADDRGP4 level+84 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 280 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 2456 +INDIRI4 +ARGI4 +ADDRGP4 level+32 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 1456 +ADDP4 +INDIRI4 +SUBI4 +CNSTI4 60000 +DIVI4 +ARGI4 +ADDRLP4 2452 +INDIRI4 +ARGI4 +CNSTI4 828 +ADDRLP4 2472 +INDIRI4 +ADDRGP4 level+84 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities+272 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1040 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 316 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 320 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 332 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 324 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 328 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 1044 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 336 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 70 +;60: " %i %i %i %i %i %i %i %i %i %i %i %i %i %i", level.sortedClients[i], +;61: cl->ps.persistant[PERS_SCORE], ping, (level.time - cl->pers.enterTime)/60000, +;62: scoreFlags, g_entities[level.sortedClients[i]].s.powerups, accuracy, +;63: cl->ps.persistant[PERS_IMPRESSIVE_COUNT], +;64: cl->ps.persistant[PERS_EXCELLENT_COUNT], +;65: cl->ps.persistant[PERS_GAUNTLET_FRAG_COUNT], +;66: cl->ps.persistant[PERS_DEFEND_COUNT], +;67: cl->ps.persistant[PERS_ASSIST_COUNT], +;68: perfect, +;69: cl->ps.persistant[PERS_CAPTURES]); +;70: j = strlen(entry); +ADDRLP4 8 +ARGP4 +ADDRLP4 2480 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 1036 +ADDRLP4 2480 +INDIRI4 +ASGNI4 +line 71 +;71: if (stringlength + j > 1022) +ADDRLP4 1032 +INDIRI4 +ADDRLP4 1036 +INDIRI4 +ADDI4 +CNSTI4 1022 +LEI4 $102 +line 72 +;72: break; +ADDRGP4 $84 +JUMPV +LABELV $102 +line 73 +;73: strcpy (string + stringlength, entry); +ADDRLP4 1032 +INDIRI4 +ADDRLP4 1052 +ADDP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 74 +;74: stringlength += j; +ADDRLP4 1032 +ADDRLP4 1032 +INDIRI4 +ADDRLP4 1036 +INDIRI4 +ADDI4 +ASGNI4 +line 75 +;75: } +LABELV $83 +line 40 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $85 +ADDRLP4 4 +INDIRI4 +ADDRLP4 1048 +INDIRI4 +LTI4 $82 +LABELV $84 +line 78 +;76: +;77: //still want to know the total # of clients +;78: i = level.numConnectedClients; +ADDRLP4 4 +ADDRGP4 level+72 +INDIRI4 +ASGNI4 +line 80 +;79: +;80: trap_SendServerCommand( ent-g_entities, va("scores %i %i %i%s", i, +ADDRGP4 $105 +ARGP4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 level+44+4 +INDIRI4 +ARGI4 +ADDRGP4 level+44+8 +INDIRI4 +ARGI4 +ADDRLP4 1052 +ARGP4 +ADDRLP4 2456 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 2456 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 83 +;81: level.teamScores[TEAM_RED], level.teamScores[TEAM_BLUE], +;82: string ) ); +;83:} +LABELV $78 +endproc DeathmatchScoreboardMessage 2484 68 +export Cmd_Score_f +proc Cmd_Score_f 0 4 +line 93 +;84: +;85: +;86:/* +;87:================== +;88:Cmd_Score_f +;89: +;90:Request current scoreboard information +;91:================== +;92:*/ +;93:void Cmd_Score_f( gentity_t *ent ) { +line 94 +;94: DeathmatchScoreboardMessage( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 DeathmatchScoreboardMessage +CALLV +pop +line 95 +;95:} +LABELV $110 +endproc Cmd_Score_f 0 4 +export CheatsOk +proc CheatsOk 8 8 +line 104 +;96: +;97: +;98: +;99:/* +;100:================== +;101:CheatsOk +;102:================== +;103:*/ +;104:qboolean CheatsOk( gentity_t *ent ) { +line 105 +;105: if ( !g_cheats.integer ) { +ADDRGP4 g_cheats+12 +INDIRI4 +CNSTI4 0 +NEI4 $112 +line 106 +;106: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "NOCHEATS"))); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $117 +ARGP4 +ADDRLP4 0 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 107 +;107: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $111 +JUMPV +LABELV $112 +line 109 +;108: } +;109: if ( ent->health <= 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $118 +line 110 +;110: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "MUSTBEALIVE"))); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $120 +ARGP4 +ADDRLP4 0 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 111 +;111: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $111 +JUMPV +LABELV $118 +line 113 +;112: } +;113: return qtrue; +CNSTI4 1 +RETI4 +LABELV $111 +endproc CheatsOk 8 8 +bss +align 1 +LABELV $122 +skip 1024 +export ConcatArgs +code +proc ConcatArgs 1048 12 +line 122 +;114:} +;115: +;116: +;117:/* +;118:================== +;119:ConcatArgs +;120:================== +;121:*/ +;122:char *ConcatArgs( int start ) { +line 128 +;123: int i, c, tlen; +;124: static char line[MAX_STRING_CHARS]; +;125: int len; +;126: char arg[MAX_STRING_CHARS]; +;127: +;128: len = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 129 +;129: c = trap_Argc(); +ADDRLP4 1040 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 1036 +ADDRLP4 1040 +INDIRI4 +ASGNI4 +line 130 +;130: for ( i = start ; i < c ; i++ ) { +ADDRLP4 4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRGP4 $126 +JUMPV +LABELV $123 +line 131 +;131: trap_Argv( i, arg, sizeof( arg ) ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 12 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 132 +;132: tlen = strlen( arg ); +ADDRLP4 12 +ARGP4 +ADDRLP4 1044 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 1044 +INDIRI4 +ASGNI4 +line 133 +;133: if ( len + tlen >= MAX_STRING_CHARS - 1 ) { +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +ADDI4 +CNSTI4 1023 +LTI4 $127 +line 134 +;134: break; +ADDRGP4 $125 +JUMPV +LABELV $127 +line 136 +;135: } +;136: memcpy( line + len, arg, tlen ); +ADDRLP4 0 +INDIRI4 +ADDRGP4 $122 +ADDP4 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRLP4 8 +INDIRI4 +ARGI4 +ADDRGP4 memcpy +CALLP4 +pop +line 137 +;137: len += tlen; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +ADDI4 +ASGNI4 +line 138 +;138: if ( i != c - 1 ) { +ADDRLP4 4 +INDIRI4 +ADDRLP4 1036 +INDIRI4 +CNSTI4 1 +SUBI4 +EQI4 $129 +line 139 +;139: line[len] = ' '; +ADDRLP4 0 +INDIRI4 +ADDRGP4 $122 +ADDP4 +CNSTI1 32 +ASGNI1 +line 140 +;140: len++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 141 +;141: } +LABELV $129 +line 142 +;142: } +LABELV $124 +line 130 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $126 +ADDRLP4 4 +INDIRI4 +ADDRLP4 1036 +INDIRI4 +LTI4 $123 +LABELV $125 +line 144 +;143: +;144: line[len] = 0; +ADDRLP4 0 +INDIRI4 +ADDRGP4 $122 +ADDP4 +CNSTI1 0 +ASGNI1 +line 146 +;145: +;146: return line; +ADDRGP4 $122 +RETP4 +LABELV $121 +endproc ConcatArgs 1048 12 +export SanitizeString +proc SanitizeString 16 4 +line 156 +;147:} +;148: +;149:/* +;150:================== +;151:SanitizeString +;152: +;153:Remove case and control characters +;154:================== +;155:*/ +;156:void SanitizeString( char *in, char *out ) { +ADDRGP4 $133 +JUMPV +LABELV $132 +line 157 +;157: while ( *in ) { +line 158 +;158: if ( *in == 27 ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 27 +NEI4 $135 +line 159 +;159: in += 2; // skip color code +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 2 +ADDP4 +ASGNP4 +line 160 +;160: continue; +ADDRGP4 $133 +JUMPV +LABELV $135 +line 162 +;161: } +;162: if ( *in < 32 ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +GEI4 $137 +line 163 +;163: in++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 164 +;164: continue; +ADDRGP4 $133 +JUMPV +LABELV $137 +line 166 +;165: } +;166: *out++ = tolower( *in++ ); +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +ADDRFP4 4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +ARGI4 +ADDRLP4 12 +ADDRGP4 tolower +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +CVII1 4 +ASGNI1 +line 167 +;167: } +LABELV $133 +line 157 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $132 +line 169 +;168: +;169: *out = 0; +ADDRFP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 170 +;170:} +LABELV $131 +endproc SanitizeString 16 4 +export ClientNumberFromString +proc ClientNumberFromString 2072 8 +line 180 +;171: +;172:/* +;173:================== +;174:ClientNumberFromString +;175: +;176:Returns a player number for either a number or name string +;177:Returns -1 if invalid +;178:================== +;179:*/ +;180:int ClientNumberFromString( gentity_t *to, char *s ) { +line 187 +;181: gclient_t *cl; +;182: int idnum; +;183: char s2[MAX_STRING_CHARS]; +;184: char n2[MAX_STRING_CHARS]; +;185: +;186: // numeric values are just slot numbers +;187: if (s[0] >= '0' && s[0] <= '9') { +ADDRLP4 2056 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 2056 +INDIRI4 +CNSTI4 48 +LTI4 $140 +ADDRLP4 2056 +INDIRI4 +CNSTI4 57 +GTI4 $140 +line 188 +;188: idnum = atoi( s ); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 2060 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 2060 +INDIRI4 +ASGNI4 +line 189 +;189: if ( idnum < 0 || idnum >= level.maxclients ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +LTI4 $145 +ADDRLP4 4 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $142 +LABELV $145 +line 190 +;190: trap_SendServerCommand( to-g_entities, va("print \"Bad client slot: %i\n\"", idnum)); +ADDRGP4 $146 +ARGP4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 2068 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 2068 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 191 +;191: return -1; +CNSTI4 -1 +RETI4 +ADDRGP4 $139 +JUMPV +LABELV $142 +line 194 +;192: } +;193: +;194: cl = &level.clients[idnum]; +ADDRLP4 0 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 195 +;195: if ( cl->pers.connected != CON_CONNECTED ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $147 +line 196 +;196: trap_SendServerCommand( to-g_entities, va("print \"Client %i is not active\n\"", idnum)); +ADDRGP4 $149 +ARGP4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 2068 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 2068 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 197 +;197: return -1; +CNSTI4 -1 +RETI4 +ADDRGP4 $139 +JUMPV +LABELV $147 +line 199 +;198: } +;199: return idnum; +ADDRLP4 4 +INDIRI4 +RETI4 +ADDRGP4 $139 +JUMPV +LABELV $140 +line 203 +;200: } +;201: +;202: // check for a name match +;203: SanitizeString( s, s2 ); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 1032 +ARGP4 +ADDRGP4 SanitizeString +CALLV +pop +line 204 +;204: for ( idnum=0,cl=level.clients ; idnum < level.maxclients ; idnum++,cl++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +ADDRGP4 level +INDIRP4 +ASGNP4 +ADDRGP4 $153 +JUMPV +LABELV $150 +line 205 +;205: if ( cl->pers.connected != CON_CONNECTED ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $155 +line 206 +;206: continue; +ADDRGP4 $151 +JUMPV +LABELV $155 +line 208 +;207: } +;208: SanitizeString( cl->pers.netname, n2 ); +ADDRLP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 SanitizeString +CALLV +pop +line 209 +;209: if ( !strcmp( n2, s2 ) ) { +ADDRLP4 8 +ARGP4 +ADDRLP4 1032 +ARGP4 +ADDRLP4 2060 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 2060 +INDIRI4 +CNSTI4 0 +NEI4 $157 +line 210 +;210: return idnum; +ADDRLP4 4 +INDIRI4 +RETI4 +ADDRGP4 $139 +JUMPV +LABELV $157 +line 212 +;211: } +;212: } +LABELV $151 +line 204 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1756 +ADDP4 +ASGNP4 +LABELV $153 +ADDRLP4 4 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $150 +line 214 +;213: +;214: trap_SendServerCommand( to-g_entities, va("print \"User %s is not on the server\n\"", s)); +ADDRGP4 $159 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 2060 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 2060 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 215 +;215: return -1; +CNSTI4 -1 +RETI4 +LABELV $139 +endproc ClientNumberFromString 2072 8 +export Cmd_Give_f +proc Cmd_Give_f 3200 12 +line 226 +;216:} +;217: +;218:/* +;219:================== +;220:Cmd_Give_f +;221: +;222:Give items to a client +;223:================== +;224:*/ +;225:void Cmd_Give_f (gentity_t *ent) +;226:{ +line 235 +;227: char name[MAX_TOKEN_CHARS]; +;228: gitem_t *it; +;229: int i; +;230: qboolean give_all; +;231: gentity_t *it_ent; +;232: trace_t trace; +;233: char arg[MAX_TOKEN_CHARS]; +;234: +;235: if ( !CheatsOk( ent ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 3144 +ADDRGP4 CheatsOk +CALLI4 +ASGNI4 +ADDRLP4 3144 +INDIRI4 +CNSTI4 0 +NEI4 $161 +line 236 +;236: return; +ADDRGP4 $160 +JUMPV +LABELV $161 +line 239 +;237: } +;238: +;239: trap_Argv( 1, name, sizeof( name ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 241 +;240: +;241: if (Q_stricmp(name, "all") == 0) +ADDRLP4 4 +ARGP4 +ADDRGP4 $165 +ARGP4 +ADDRLP4 3148 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3148 +INDIRI4 +CNSTI4 0 +NEI4 $163 +line 242 +;242: give_all = qtrue; +ADDRLP4 1028 +CNSTI4 1 +ASGNI4 +ADDRGP4 $164 +JUMPV +LABELV $163 +line 244 +;243: else +;244: give_all = qfalse; +ADDRLP4 1028 +CNSTI4 0 +ASGNI4 +LABELV $164 +line 246 +;245: +;246: if (give_all) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +EQI4 $166 +line 247 +;247: { +line 248 +;248: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $169 +JUMPV +LABELV $168 +line 250 +;249: while (i < HI_NUM_HOLDABLE) +;250: { +line 251 +;251: ent->client->ps.stats[STAT_HOLDABLE_ITEMS] |= (1 << i); +ADDRLP4 3152 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 224 +ADDP4 +ASGNP4 +ADDRLP4 3152 +INDIRP4 +ADDRLP4 3152 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BORI4 +ASGNI4 +line 252 +;252: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 253 +;253: } +LABELV $169 +line 249 +ADDRLP4 0 +INDIRI4 +CNSTI4 7 +LTI4 $168 +line 254 +;254: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 255 +;255: } +LABELV $166 +line 257 +;256: +;257: if (give_all || Q_stricmp( name, "health") == 0) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $174 +ADDRLP4 4 +ARGP4 +ADDRGP4 $173 +ARGP4 +ADDRLP4 3152 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3152 +INDIRI4 +CNSTI4 0 +NEI4 $171 +LABELV $174 +line 258 +;258: { +line 259 +;259: if (trap_Argc() == 3) { +ADDRLP4 3156 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 3156 +INDIRI4 +CNSTI4 3 +NEI4 $175 +line 260 +;260: trap_Argv( 2, arg, sizeof( arg ) ); +CNSTI4 2 +ARGI4 +ADDRLP4 1036 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 261 +;261: ent->health = atoi(arg); +ADDRLP4 1036 +ARGP4 +ADDRLP4 3160 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +ADDRLP4 3160 +INDIRI4 +ASGNI4 +line 262 +;262: if (ent->health > ent->client->ps.stats[STAT_MAX_HEALTH]) { +ADDRLP4 3164 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 3164 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +ADDRLP4 3164 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +LEI4 $176 +line 263 +;263: ent->health = ent->client->ps.stats[STAT_MAX_HEALTH]; +ADDRLP4 3168 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 3168 +INDIRP4 +CNSTI4 676 +ADDP4 +ADDRLP4 3168 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +ASGNI4 +line 264 +;264: } +line 265 +;265: } +ADDRGP4 $176 +JUMPV +LABELV $175 +line 266 +;266: else { +line 267 +;267: ent->health = ent->client->ps.stats[STAT_MAX_HEALTH]; +ADDRLP4 3160 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 3160 +INDIRP4 +CNSTI4 676 +ADDP4 +ADDRLP4 3160 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +ASGNI4 +line 268 +;268: } +LABELV $176 +line 269 +;269: if (!give_all) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $179 +line 270 +;270: return; +ADDRGP4 $160 +JUMPV +LABELV $179 +line 271 +;271: } +LABELV $171 +line 273 +;272: +;273: if (give_all || Q_stricmp(name, "weapons") == 0) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $184 +ADDRLP4 4 +ARGP4 +ADDRGP4 $183 +ARGP4 +ADDRLP4 3156 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3156 +INDIRI4 +CNSTI4 0 +NEI4 $181 +LABELV $184 +line 274 +;274: { +line 275 +;275: ent->client->ps.stats[STAT_WEAPONS] = (1 << (WP_DET_PACK+1)) - ( 1 << WP_NONE ); +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 232 +ADDP4 +CNSTI4 16383 +ASGNI4 +line 276 +;276: if (!give_all) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $185 +line 277 +;277: return; +ADDRGP4 $160 +JUMPV +LABELV $185 +line 278 +;278: } +LABELV $181 +line 280 +;279: +;280: if ( !give_all && Q_stricmp(name, "weaponnum") == 0 ) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $187 +ADDRLP4 4 +ARGP4 +ADDRGP4 $189 +ARGP4 +ADDRLP4 3160 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3160 +INDIRI4 +CNSTI4 0 +NEI4 $187 +line 281 +;281: { +line 282 +;282: trap_Argv( 2, arg, sizeof( arg ) ); +CNSTI4 2 +ARGI4 +ADDRLP4 1036 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 283 +;283: ent->client->ps.stats[STAT_WEAPONS] |= (1 << atoi(arg)); +ADDRLP4 1036 +ARGP4 +ADDRLP4 3164 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 3168 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 232 +ADDP4 +ASGNP4 +ADDRLP4 3168 +INDIRP4 +ADDRLP4 3168 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 3164 +INDIRI4 +LSHI4 +BORI4 +ASGNI4 +line 284 +;284: return; +ADDRGP4 $160 +JUMPV +LABELV $187 +line 287 +;285: } +;286: +;287: if (give_all || Q_stricmp(name, "ammo") == 0) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $193 +ADDRLP4 4 +ARGP4 +ADDRGP4 $192 +ARGP4 +ADDRLP4 3164 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3164 +INDIRI4 +CNSTI4 0 +NEI4 $190 +LABELV $193 +line 288 +;288: { +line 289 +;289: int num = 999; +ADDRLP4 3168 +CNSTI4 999 +ASGNI4 +line 290 +;290: if (trap_Argc() == 3) { +ADDRLP4 3172 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 3172 +INDIRI4 +CNSTI4 3 +NEI4 $194 +line 291 +;291: trap_Argv( 2, arg, sizeof( arg ) ); +CNSTI4 2 +ARGI4 +ADDRLP4 1036 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 292 +;292: num = atoi(arg); +ADDRLP4 1036 +ARGP4 +ADDRLP4 3176 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 3168 +ADDRLP4 3176 +INDIRI4 +ASGNI4 +line 293 +;293: } +LABELV $194 +line 294 +;294: for ( i = 0 ; i < MAX_WEAPONS ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $196 +line 295 +;295: ent->client->ps.ammo[i] = num; +ADDRLP4 3176 +CNSTI4 408 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 3176 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 3176 +INDIRI4 +ADDP4 +ADDP4 +ADDRLP4 3168 +INDIRI4 +ASGNI4 +line 296 +;296: } +LABELV $197 +line 294 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $196 +line 297 +;297: if (!give_all) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $200 +line 298 +;298: return; +ADDRGP4 $160 +JUMPV +LABELV $200 +line 299 +;299: } +LABELV $190 +line 301 +;300: +;301: if (give_all || Q_stricmp(name, "armor") == 0) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $205 +ADDRLP4 4 +ARGP4 +ADDRGP4 $204 +ARGP4 +ADDRLP4 3168 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3168 +INDIRI4 +CNSTI4 0 +NEI4 $202 +LABELV $205 +line 302 +;302: { +line 303 +;303: if (trap_Argc() == 3) { +ADDRLP4 3172 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 3172 +INDIRI4 +CNSTI4 3 +NEI4 $206 +line 304 +;304: trap_Argv( 2, arg, sizeof( arg ) ); +CNSTI4 2 +ARGI4 +ADDRLP4 1036 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 305 +;305: ent->client->ps.stats[STAT_ARMOR] = atoi(arg); +ADDRLP4 1036 +ARGP4 +ADDRLP4 3176 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 236 +ADDP4 +ADDRLP4 3176 +INDIRI4 +ASGNI4 +line 306 +;306: } else { +ADDRGP4 $207 +JUMPV +LABELV $206 +line 307 +;307: ent->client->ps.stats[STAT_ARMOR] = ent->client->ps.stats[STAT_MAX_HEALTH]; +ADDRLP4 3176 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 3176 +INDIRP4 +CNSTI4 236 +ADDP4 +ADDRLP4 3176 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +ASGNI4 +line 308 +;308: } +LABELV $207 +line 310 +;309: +;310: if (!give_all) +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $208 +line 311 +;311: return; +ADDRGP4 $160 +JUMPV +LABELV $208 +line 312 +;312: } +LABELV $202 +line 314 +;313: +;314: if (Q_stricmp(name, "excellent") == 0) { +ADDRLP4 4 +ARGP4 +ADDRGP4 $212 +ARGP4 +ADDRLP4 3172 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3172 +INDIRI4 +CNSTI4 0 +NEI4 $210 +line 315 +;315: ent->client->ps.persistant[PERS_EXCELLENT_COUNT]++; +ADDRLP4 3176 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 320 +ADDP4 +ASGNP4 +ADDRLP4 3176 +INDIRP4 +ADDRLP4 3176 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 316 +;316: return; +ADDRGP4 $160 +JUMPV +LABELV $210 +line 318 +;317: } +;318: if (Q_stricmp(name, "impressive") == 0) { +ADDRLP4 4 +ARGP4 +ADDRGP4 $215 +ARGP4 +ADDRLP4 3176 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3176 +INDIRI4 +CNSTI4 0 +NEI4 $213 +line 319 +;319: ent->client->ps.persistant[PERS_IMPRESSIVE_COUNT]++; +ADDRLP4 3180 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 316 +ADDP4 +ASGNP4 +ADDRLP4 3180 +INDIRP4 +ADDRLP4 3180 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 320 +;320: return; +ADDRGP4 $160 +JUMPV +LABELV $213 +line 322 +;321: } +;322: if (Q_stricmp(name, "gauntletaward") == 0) { +ADDRLP4 4 +ARGP4 +ADDRGP4 $218 +ARGP4 +ADDRLP4 3180 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3180 +INDIRI4 +CNSTI4 0 +NEI4 $216 +line 323 +;323: ent->client->ps.persistant[PERS_GAUNTLET_FRAG_COUNT]++; +ADDRLP4 3184 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 332 +ADDP4 +ASGNP4 +ADDRLP4 3184 +INDIRP4 +ADDRLP4 3184 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 324 +;324: return; +ADDRGP4 $160 +JUMPV +LABELV $216 +line 326 +;325: } +;326: if (Q_stricmp(name, "defend") == 0) { +ADDRLP4 4 +ARGP4 +ADDRGP4 $221 +ARGP4 +ADDRLP4 3184 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3184 +INDIRI4 +CNSTI4 0 +NEI4 $219 +line 327 +;327: ent->client->ps.persistant[PERS_DEFEND_COUNT]++; +ADDRLP4 3188 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 324 +ADDP4 +ASGNP4 +ADDRLP4 3188 +INDIRP4 +ADDRLP4 3188 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 328 +;328: return; +ADDRGP4 $160 +JUMPV +LABELV $219 +line 330 +;329: } +;330: if (Q_stricmp(name, "assist") == 0) { +ADDRLP4 4 +ARGP4 +ADDRGP4 $224 +ARGP4 +ADDRLP4 3188 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 3188 +INDIRI4 +CNSTI4 0 +NEI4 $222 +line 331 +;331: ent->client->ps.persistant[PERS_ASSIST_COUNT]++; +ADDRLP4 3192 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 328 +ADDP4 +ASGNP4 +ADDRLP4 3192 +INDIRP4 +ADDRLP4 3192 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 332 +;332: return; +ADDRGP4 $160 +JUMPV +LABELV $222 +line 336 +;333: } +;334: +;335: // spawn a specific item right on the player +;336: if ( !give_all ) { +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +NEI4 $225 +line 337 +;337: it = BG_FindItem (name); +ADDRLP4 4 +ARGP4 +ADDRLP4 3192 +ADDRGP4 BG_FindItem +CALLP4 +ASGNP4 +ADDRLP4 2060 +ADDRLP4 3192 +INDIRP4 +ASGNP4 +line 338 +;338: if (!it) { +ADDRLP4 2060 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $227 +line 339 +;339: return; +ADDRGP4 $160 +JUMPV +LABELV $227 +line 342 +;340: } +;341: +;342: it_ent = G_Spawn(); +ADDRLP4 3196 +ADDRGP4 G_Spawn +CALLP4 +ASGNP4 +ADDRLP4 1032 +ADDRLP4 3196 +INDIRP4 +ASGNP4 +line 343 +;343: VectorCopy( ent->r.currentOrigin, it_ent->s.origin ); +ADDRLP4 1032 +INDIRP4 +CNSTI4 92 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 368 +ADDP4 +INDIRB +ASGNB 12 +line 344 +;344: it_ent->classname = it->classname; +ADDRLP4 1032 +INDIRP4 +CNSTI4 416 +ADDP4 +ADDRLP4 2060 +INDIRP4 +INDIRP4 +ASGNP4 +line 345 +;345: G_SpawnItem (it_ent, it); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRLP4 2060 +INDIRP4 +ARGP4 +ADDRGP4 G_SpawnItem +CALLV +pop +line 346 +;346: FinishSpawningItem(it_ent ); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRGP4 FinishSpawningItem +CALLV +pop +line 347 +;347: memset( &trace, 0, sizeof( trace ) ); +ADDRLP4 2064 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 1080 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 348 +;348: Touch_Item (it_ent, ent, &trace); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 2064 +ARGP4 +ADDRGP4 Touch_Item +CALLV +pop +line 349 +;349: if (it_ent->inuse) { +ADDRLP4 1032 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $229 +line 350 +;350: G_FreeEntity( it_ent ); +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRGP4 G_FreeEntity +CALLV +pop +line 351 +;351: } +LABELV $229 +line 352 +;352: } +LABELV $225 +line 353 +;353:} +LABELV $160 +endproc Cmd_Give_f 3200 12 +export Cmd_God_f +proc Cmd_God_f 16 8 +line 366 +;354: +;355: +;356:/* +;357:================== +;358:Cmd_God_f +;359: +;360:Sets client to godmode +;361: +;362:argv(0) god +;363:================== +;364:*/ +;365:void Cmd_God_f (gentity_t *ent) +;366:{ +line 369 +;367: char *msg; +;368: +;369: if ( !CheatsOk( ent ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 CheatsOk +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $232 +line 370 +;370: return; +ADDRGP4 $231 +JUMPV +LABELV $232 +line 373 +;371: } +;372: +;373: ent->flags ^= FL_GODMODE; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 16 +BXORI4 +ASGNI4 +line 374 +;374: if (!(ent->flags & FL_GODMODE) ) +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +CNSTI4 16 +BANDI4 +CNSTI4 0 +NEI4 $234 +line 375 +;375: msg = "godmode OFF\n"; +ADDRLP4 0 +ADDRGP4 $236 +ASGNP4 +ADDRGP4 $235 +JUMPV +LABELV $234 +line 377 +;376: else +;377: msg = "godmode ON\n"; +ADDRLP4 0 +ADDRGP4 $237 +ASGNP4 +LABELV $235 +line 379 +;378: +;379: trap_SendServerCommand( ent-g_entities, va("print \"%s\"", msg)); +ADDRGP4 $238 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 380 +;380:} +LABELV $231 +endproc Cmd_God_f 16 8 +export Cmd_Notarget_f +proc Cmd_Notarget_f 16 8 +line 392 +;381: +;382: +;383:/* +;384:================== +;385:Cmd_Notarget_f +;386: +;387:Sets client to notarget +;388: +;389:argv(0) notarget +;390:================== +;391:*/ +;392:void Cmd_Notarget_f( gentity_t *ent ) { +line 395 +;393: char *msg; +;394: +;395: if ( !CheatsOk( ent ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 CheatsOk +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $240 +line 396 +;396: return; +ADDRGP4 $239 +JUMPV +LABELV $240 +line 399 +;397: } +;398: +;399: ent->flags ^= FL_NOTARGET; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 32 +BXORI4 +ASGNI4 +line 400 +;400: if (!(ent->flags & FL_NOTARGET) ) +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +CNSTI4 32 +BANDI4 +CNSTI4 0 +NEI4 $242 +line 401 +;401: msg = "notarget OFF\n"; +ADDRLP4 0 +ADDRGP4 $244 +ASGNP4 +ADDRGP4 $243 +JUMPV +LABELV $242 +line 403 +;402: else +;403: msg = "notarget ON\n"; +ADDRLP4 0 +ADDRGP4 $245 +ASGNP4 +LABELV $243 +line 405 +;404: +;405: trap_SendServerCommand( ent-g_entities, va("print \"%s\"", msg)); +ADDRGP4 $238 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 406 +;406:} +LABELV $239 +endproc Cmd_Notarget_f 16 8 +export Cmd_Noclip_f +proc Cmd_Noclip_f 20 8 +line 416 +;407: +;408: +;409:/* +;410:================== +;411:Cmd_Noclip_f +;412: +;413:argv(0) noclip +;414:================== +;415:*/ +;416:void Cmd_Noclip_f( gentity_t *ent ) { +line 419 +;417: char *msg; +;418: +;419: if ( !CheatsOk( ent ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 CheatsOk +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $247 +line 420 +;420: return; +ADDRGP4 $246 +JUMPV +LABELV $247 +line 423 +;421: } +;422: +;423: if ( ent->client->noclip ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1576 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $249 +line 424 +;424: msg = "noclip OFF\n"; +ADDRLP4 0 +ADDRGP4 $251 +ASGNP4 +line 425 +;425: } else { +ADDRGP4 $250 +JUMPV +LABELV $249 +line 426 +;426: msg = "noclip ON\n"; +ADDRLP4 0 +ADDRGP4 $252 +ASGNP4 +line 427 +;427: } +LABELV $250 +line 428 +;428: ent->client->noclip = !ent->client->noclip; +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1576 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +INDIRI4 +CNSTI4 0 +NEI4 $254 +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +ADDRGP4 $255 +JUMPV +LABELV $254 +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +LABELV $255 +ADDRLP4 12 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 430 +;429: +;430: trap_SendServerCommand( ent-g_entities, va("print \"%s\"", msg)); +ADDRGP4 $238 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 16 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 431 +;431:} +LABELV $246 +endproc Cmd_Noclip_f 20 8 +export Cmd_LevelShot_f +proc Cmd_LevelShot_f 4 8 +line 444 +;432: +;433: +;434:/* +;435:================== +;436:Cmd_LevelShot_f +;437: +;438:This is just to help generate the level pictures +;439:for the menus. It goes to the intermission immediately +;440:and sends over a command to the client to resize the view, +;441:hide the scoreboard, and take a special screenshot +;442:================== +;443:*/ +;444:void Cmd_LevelShot_f( gentity_t *ent ) { +line 445 +;445: if ( !CheatsOk( ent ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +ADDRGP4 CheatsOk +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $257 +line 446 +;446: return; +ADDRGP4 $256 +JUMPV +LABELV $257 +line 450 +;447: } +;448: +;449: // doesn't work in single player +;450: if ( g_gametype.integer != 0 ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 0 +EQI4 $259 +line 451 +;451: trap_SendServerCommand( ent-g_entities, +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRGP4 $262 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 453 +;452: "print \"Must be in g_gametype 0 for levelshot\n\"" ); +;453: return; +ADDRGP4 $256 +JUMPV +LABELV $259 +line 456 +;454: } +;455: +;456: BeginIntermission(); +ADDRGP4 BeginIntermission +CALLV +pop +line 457 +;457: trap_SendServerCommand( ent-g_entities, "clientLevelShot" ); +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRGP4 $263 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 458 +;458:} +LABELV $256 +endproc Cmd_LevelShot_f 4 8 +export Cmd_TeamTask_f +proc Cmd_TeamTask_f 2068 12 +line 471 +;459: +;460: +;461:/* +;462:================== +;463:Cmd_LevelShot_f +;464: +;465:This is just to help generate the level pictures +;466:for the menus. It goes to the intermission immediately +;467:and sends over a command to the client to resize the view, +;468:hide the scoreboard, and take a special screenshot +;469:================== +;470:*/ +;471:void Cmd_TeamTask_f( gentity_t *ent ) { +line 475 +;472: char userinfo[MAX_INFO_STRING]; +;473: char arg[MAX_TOKEN_CHARS]; +;474: int task; +;475: int client = ent->client - level.clients; +ADDRLP4 1024 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRGP4 level +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1756 +DIVI4 +ASGNI4 +line 477 +;476: +;477: if ( trap_Argc() != 2 ) { +ADDRLP4 2056 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 2056 +INDIRI4 +CNSTI4 2 +EQI4 $265 +line 478 +;478: return; +ADDRGP4 $264 +JUMPV +LABELV $265 +line 480 +;479: } +;480: trap_Argv( 1, arg, sizeof( arg ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 1028 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 481 +;481: task = atoi( arg ); +ADDRLP4 1028 +ARGP4 +ADDRLP4 2060 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 2052 +ADDRLP4 2060 +INDIRI4 +ASGNI4 +line 483 +;482: +;483: trap_GetUserinfo(client, userinfo, sizeof(userinfo)); +ADDRLP4 1024 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetUserinfo +CALLV +pop +line 484 +;484: Info_SetValueForKey(userinfo, "teamtask", va("%d", task)); +ADDRGP4 $268 +ARGP4 +ADDRLP4 2052 +INDIRI4 +ARGI4 +ADDRLP4 2064 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 $267 +ARGP4 +ADDRLP4 2064 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 485 +;485: trap_SetUserinfo(client, userinfo); +ADDRLP4 1024 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +ADDRGP4 trap_SetUserinfo +CALLV +pop +line 486 +;486: ClientUserinfoChanged(client); +ADDRLP4 1024 +INDIRI4 +ARGI4 +ADDRGP4 ClientUserinfoChanged +CALLV +pop +line 487 +;487:} +LABELV $264 +endproc Cmd_TeamTask_f 2068 12 +export Cmd_Kill_f +proc Cmd_Kill_f 16 20 +line 496 +;488: +;489: +;490: +;491:/* +;492:================= +;493:Cmd_Kill_f +;494:================= +;495:*/ +;496:void Cmd_Kill_f( gentity_t *ent ) { +line 497 +;497: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $270 +line 498 +;498: return; +ADDRGP4 $269 +JUMPV +LABELV $270 +line 500 +;499: } +;500: if (ent->health <= 0) { +ADDRFP4 0 +INDIRP4 +CNSTI4 676 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $272 +line 501 +;501: return; +ADDRGP4 $269 +JUMPV +LABELV $272 +line 504 +;502: } +;503: +;504: if (g_gametype.integer == GT_TOURNAMENT && level.numPlayingClients > 1 && !level.warmupTime) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $274 +ADDRGP4 level+80 +INDIRI4 +CNSTI4 1 +LEI4 $274 +ADDRGP4 level+16 +INDIRI4 +CNSTI4 0 +NEI4 $274 +line 505 +;505: { +line 506 +;506: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "ATTEMPTDUELKILL")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $279 +ARGP4 +ADDRLP4 0 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 507 +;507: return; +ADDRGP4 $269 +JUMPV +LABELV $274 +line 510 +;508: } +;509: +;510: ent->flags &= ~FL_GODMODE; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +CNSTI4 -17 +BANDI4 +ASGNI4 +line 511 +;511: ent->client->ps.stats[STAT_HEALTH] = ent->health = -999; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTI4 -999 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 676 +ADDP4 +ADDRLP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 512 +;512: player_die (ent, ent, ent, 100000, MOD_SUICIDE); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +CNSTI4 100000 +ARGI4 +CNSTI4 35 +ARGI4 +ADDRGP4 player_die +CALLV +pop +line 513 +;513:} +LABELV $269 +endproc Cmd_Kill_f 16 20 +export G_GetDuelWinner +proc G_GetDuelWinner 16 0 +line 516 +;514: +;515:gentity_t *G_GetDuelWinner(gclient_t *client) +;516:{ +line 520 +;517: gclient_t *wCl; +;518: int i; +;519: +;520: for ( i = 0 ; i < level.maxclients ; i++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $284 +JUMPV +LABELV $281 +line 521 +;521: wCl = &level.clients[i]; +ADDRLP4 0 +CNSTI4 1756 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +ASGNP4 +line 523 +;522: +;523: if (wCl && wCl != client && /*wCl->ps.clientNum != client->ps.clientNum &&*/ +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ASGNU4 +ADDRLP4 12 +INDIRU4 +CNSTU4 0 +EQU4 $286 +ADDRLP4 12 +INDIRU4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +EQU4 $286 +ADDRLP4 0 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $286 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +EQI4 $286 +line 525 +;524: wCl->pers.connected == CON_CONNECTED && wCl->sess.sessionTeam != TEAM_SPECTATOR) +;525: { +line 526 +;526: return &g_entities[wCl->ps.clientNum]; +CNSTI4 828 +ADDRLP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +RETP4 +ADDRGP4 $280 +JUMPV +LABELV $286 +line 528 +;527: } +;528: } +LABELV $282 +line 520 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $284 +ADDRLP4 4 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $281 +line 530 +;529: +;530: return NULL; +CNSTP4 0 +RETP4 +LABELV $280 +endproc G_GetDuelWinner 16 0 +export BroadcastTeamChange +proc BroadcastTeamChange 12 16 +line 541 +;531:} +;532: +;533:/* +;534:================= +;535:BroadCastTeamChange +;536: +;537:Let everyone know about a team change +;538:================= +;539:*/ +;540:void BroadcastTeamChange( gclient_t *client, int oldTeam ) +;541:{ +line 542 +;542: client->ps.fd.forceDoInit = 1; //every time we change teams make sure our force powers are set right +ADDRFP4 0 +INDIRP4 +CNSTI4 1172 +ADDP4 +CNSTI4 1 +ASGNI4 +line 544 +;543: +;544: if ( client->sess.sessionTeam == TEAM_RED ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $289 +line 545 +;545: trap_SendServerCommand( -1, va("cp \"%s" S_COLOR_WHITE " %s\n\"", +ADDRGP4 $116 +ARGP4 +ADDRGP4 $292 +ARGP4 +ADDRLP4 0 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $291 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 547 +;546: client->pers.netname, G_GetStripEdString("SVINGAME", "JOINEDTHEREDTEAM")) ); +;547: } else if ( client->sess.sessionTeam == TEAM_BLUE ) { +ADDRGP4 $290 +JUMPV +LABELV $289 +ADDRFP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $293 +line 548 +;548: trap_SendServerCommand( -1, va("cp \"%s" S_COLOR_WHITE " %s\n\"", +ADDRGP4 $116 +ARGP4 +ADDRGP4 $295 +ARGP4 +ADDRLP4 0 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $291 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 550 +;549: client->pers.netname, G_GetStripEdString("SVINGAME", "JOINEDTHEBLUETEAM"))); +;550: } else if ( client->sess.sessionTeam == TEAM_SPECTATOR && oldTeam != TEAM_SPECTATOR ) { +ADDRGP4 $294 +JUMPV +LABELV $293 +ADDRLP4 0 +CNSTI4 3 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +NEI4 $296 +ADDRFP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +EQI4 $296 +line 551 +;551: trap_SendServerCommand( -1, va("cp \"%s" S_COLOR_WHITE " %s\n\"", +ADDRGP4 $116 +ARGP4 +ADDRGP4 $298 +ARGP4 +ADDRLP4 4 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $291 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 553 +;552: client->pers.netname, G_GetStripEdString("SVINGAME", "JOINEDTHESPECTATORS"))); +;553: } else if ( client->sess.sessionTeam == TEAM_FREE ) { +ADDRGP4 $297 +JUMPV +LABELV $296 +ADDRFP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $299 +line 554 +;554: if (g_gametype.integer == GT_TOURNAMENT) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $301 +line 555 +;555: { +line 571 +;556: /* +;557: gentity_t *currentWinner = G_GetDuelWinner(client); +;558: +;559: if (currentWinner && currentWinner->client) +;560: { +;561: trap_SendServerCommand( -1, va("cp \"%s" S_COLOR_WHITE " %s %s\n\"", +;562: currentWinner->client->pers.netname, G_GetStripEdString("SVINGAME", "VERSUS"), client->pers.netname)); +;563: } +;564: else +;565: { +;566: trap_SendServerCommand( -1, va("cp \"%s" S_COLOR_WHITE " %s\n\"", +;567: client->pers.netname, G_GetStripEdString("SVINGAME", "JOINEDTHEBATTLE"))); +;568: } +;569: */ +;570: //NOTE: Just doing a vs. once it counts two players up +;571: } +ADDRGP4 $302 +JUMPV +LABELV $301 +line 573 +;572: else +;573: { +line 574 +;574: trap_SendServerCommand( -1, va("cp \"%s" S_COLOR_WHITE " %s\n\"", +ADDRGP4 $116 +ARGP4 +ADDRGP4 $304 +ARGP4 +ADDRLP4 4 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $291 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 -1 +ARGI4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 576 +;575: client->pers.netname, G_GetStripEdString("SVINGAME", "JOINEDTHEBATTLE"))); +;576: } +LABELV $302 +line 577 +;577: } +LABELV $299 +LABELV $297 +LABELV $294 +LABELV $290 +line 579 +;578: +;579: G_LogPrintf ( "setteam: %i %s %s\n", +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 4 +ADDRGP4 TeamName +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 8 +ADDRGP4 TeamName +CALLP4 +ASGNP4 +ADDRGP4 $305 +ARGP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 level +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1756 +DIVI4 +ARGI4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 583 +;580: client - &level.clients[0], +;581: TeamName ( oldTeam ), +;582: TeamName ( client->sess.sessionTeam ) ); +;583:} +LABELV $288 +endproc BroadcastTeamChange 12 16 +export SetTeam +proc SetTeam 104 20 +line 590 +;584: +;585:/* +;586:================= +;587:SetTeam +;588:================= +;589:*/ +;590:void SetTeam( gentity_t *ent, char *s ) { +line 601 +;591: int team, oldTeam; +;592: gclient_t *client; +;593: int clientNum; +;594: spectatorState_t specState; +;595: int specClient; +;596: int teamLeader; +;597: +;598: // +;599: // see what change is requested +;600: // +;601: client = ent->client; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +line 603 +;602: +;603: clientNum = client - level.clients; +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 level +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 1756 +DIVI4 +ASGNI4 +line 604 +;604: specClient = 0; +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +line 605 +;605: specState = SPECTATOR_NOT; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 606 +;606: if ( !Q_stricmp( s, "scoreboard" ) || !Q_stricmp( s, "score" ) ) { +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $309 +ARGP4 +ADDRLP4 28 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +EQI4 $311 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $310 +ARGP4 +ADDRLP4 32 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +NEI4 $307 +LABELV $311 +line 607 +;607: team = TEAM_SPECTATOR; +ADDRLP4 4 +CNSTI4 3 +ASGNI4 +line 608 +;608: specState = SPECTATOR_SCOREBOARD; +ADDRLP4 16 +CNSTI4 3 +ASGNI4 +line 609 +;609: } else if ( !Q_stricmp( s, "follow1" ) ) { +ADDRGP4 $308 +JUMPV +LABELV $307 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $314 +ARGP4 +ADDRLP4 36 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 0 +NEI4 $312 +line 610 +;610: team = TEAM_SPECTATOR; +ADDRLP4 4 +CNSTI4 3 +ASGNI4 +line 611 +;611: specState = SPECTATOR_FOLLOW; +ADDRLP4 16 +CNSTI4 2 +ASGNI4 +line 612 +;612: specClient = -1; +ADDRLP4 20 +CNSTI4 -1 +ASGNI4 +line 613 +;613: } else if ( !Q_stricmp( s, "follow2" ) ) { +ADDRGP4 $313 +JUMPV +LABELV $312 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $317 +ARGP4 +ADDRLP4 40 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 40 +INDIRI4 +CNSTI4 0 +NEI4 $315 +line 614 +;614: team = TEAM_SPECTATOR; +ADDRLP4 4 +CNSTI4 3 +ASGNI4 +line 615 +;615: specState = SPECTATOR_FOLLOW; +ADDRLP4 16 +CNSTI4 2 +ASGNI4 +line 616 +;616: specClient = -2; +ADDRLP4 20 +CNSTI4 -2 +ASGNI4 +line 617 +;617: } else if ( !Q_stricmp( s, "spectator" ) || !Q_stricmp( s, "s" ) ) { +ADDRGP4 $316 +JUMPV +LABELV $315 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $320 +ARGP4 +ADDRLP4 44 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +EQI4 $322 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $321 +ARGP4 +ADDRLP4 48 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $318 +LABELV $322 +line 618 +;618: team = TEAM_SPECTATOR; +ADDRLP4 4 +CNSTI4 3 +ASGNI4 +line 619 +;619: specState = SPECTATOR_FREE; +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +line 620 +;620: } else if ( g_gametype.integer >= GT_TEAM ) { +ADDRGP4 $319 +JUMPV +LABELV $318 +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $323 +line 622 +;621: // if running a team game, assign player to one of the teams +;622: specState = SPECTATOR_NOT; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 623 +;623: if ( !Q_stricmp( s, "red" ) || !Q_stricmp( s, "r" ) ) { +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $328 +ARGP4 +ADDRLP4 52 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 52 +INDIRI4 +CNSTI4 0 +EQI4 $330 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $329 +ARGP4 +ADDRLP4 56 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 0 +NEI4 $326 +LABELV $330 +line 624 +;624: team = TEAM_RED; +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +line 625 +;625: } else if ( !Q_stricmp( s, "blue" ) || !Q_stricmp( s, "b" ) ) { +ADDRGP4 $327 +JUMPV +LABELV $326 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $333 +ARGP4 +ADDRLP4 60 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 60 +INDIRI4 +CNSTI4 0 +EQI4 $335 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 $334 +ARGP4 +ADDRLP4 64 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +CNSTI4 0 +NEI4 $331 +LABELV $335 +line 626 +;626: team = TEAM_BLUE; +ADDRLP4 4 +CNSTI4 2 +ASGNI4 +line 627 +;627: } else { +ADDRGP4 $332 +JUMPV +LABELV $331 +line 645 +;628: // pick the team with the least number of players +;629: //For now, don't do this. The legalize function will set powers properly now. +;630: /* +;631: if (g_forceBasedTeams.integer) +;632: { +;633: if (ent->client->ps.fd.forceSide == FORCE_LIGHTSIDE) +;634: { +;635: team = TEAM_BLUE; +;636: } +;637: else +;638: { +;639: team = TEAM_RED; +;640: } +;641: } +;642: else +;643: { +;644: */ +;645: team = PickTeam( clientNum ); +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 68 +ADDRGP4 PickTeam +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 68 +INDIRI4 +ASGNI4 +line 647 +;646: //} +;647: } +LABELV $332 +LABELV $327 +line 649 +;648: +;649: if ( g_teamForceBalance.integer ) { +ADDRGP4 g_teamForceBalance+12 +INDIRI4 +CNSTI4 0 +EQI4 $324 +line 652 +;650: int counts[TEAM_NUM_TEAMS]; +;651: +;652: counts[TEAM_BLUE] = TeamCount( ent->client->ps.clientNum, TEAM_BLUE ); +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 2 +ARGI4 +ADDRLP4 84 +ADDRGP4 TeamCount +CALLI4 +ASGNI4 +ADDRLP4 68+8 +ADDRLP4 84 +INDIRI4 +ASGNI4 +line 653 +;653: counts[TEAM_RED] = TeamCount( ent->client->ps.clientNum, TEAM_RED ); +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +CNSTI4 1 +ARGI4 +ADDRLP4 88 +ADDRGP4 TeamCount +CALLI4 +ASGNI4 +ADDRLP4 68+4 +ADDRLP4 88 +INDIRI4 +ASGNI4 +line 656 +;654: +;655: // We allow a spread of two +;656: if ( team == TEAM_RED && counts[TEAM_RED] - counts[TEAM_BLUE] > 1 ) { +ADDRLP4 92 +CNSTI4 1 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 92 +INDIRI4 +NEI4 $341 +ADDRLP4 68+4 +INDIRI4 +ADDRLP4 68+8 +INDIRI4 +SUBI4 +ADDRLP4 92 +INDIRI4 +LEI4 $341 +line 666 +;657: //For now, don't do this. The legalize function will set powers properly now. +;658: /* +;659: if (g_forceBasedTeams.integer && ent->client->ps.fd.forceSide == FORCE_DARKSIDE) +;660: { +;661: trap_SendServerCommand( ent->client->ps.clientNum, +;662: va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "TOOMANYRED_SWITCH")) ); +;663: } +;664: else +;665: */ +;666: { +line 667 +;667: trap_SendServerCommand( ent->client->ps.clientNum, +ADDRGP4 $116 +ARGP4 +ADDRGP4 $345 +ARGP4 +ADDRLP4 96 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 96 +INDIRP4 +ARGP4 +ADDRLP4 100 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 100 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 669 +;668: va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "TOOMANYRED")) ); +;669: } +line 670 +;670: return; // ignore the request +ADDRGP4 $306 +JUMPV +LABELV $341 +line 672 +;671: } +;672: if ( team == TEAM_BLUE && counts[TEAM_BLUE] - counts[TEAM_RED] > 1 ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +NEI4 $324 +ADDRLP4 68+8 +INDIRI4 +ADDRLP4 68+4 +INDIRI4 +SUBI4 +CNSTI4 1 +LEI4 $324 +line 682 +;673: //For now, don't do this. The legalize function will set powers properly now. +;674: /* +;675: if (g_forceBasedTeams.integer && ent->client->ps.fd.forceSide == FORCE_LIGHTSIDE) +;676: { +;677: trap_SendServerCommand( ent->client->ps.clientNum, +;678: va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "TOOMANYBLUE_SWITCH")) ); +;679: } +;680: else +;681: */ +;682: { +line 683 +;683: trap_SendServerCommand( ent->client->ps.clientNum, +ADDRGP4 $116 +ARGP4 +ADDRGP4 $350 +ARGP4 +ADDRLP4 96 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 96 +INDIRP4 +ARGP4 +ADDRLP4 100 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 100 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 685 +;684: va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "TOOMANYBLUE")) ); +;685: } +line 686 +;686: return; // ignore the request +ADDRGP4 $306 +JUMPV +line 690 +;687: } +;688: +;689: // It's ok, the team we are switching to has less or same number of players +;690: } +line 709 +;691: +;692: //For now, don't do this. The legalize function will set powers properly now. +;693: /* +;694: if (g_forceBasedTeams.integer) +;695: { +;696: if (team == TEAM_BLUE && ent->client->ps.fd.forceSide != FORCE_LIGHTSIDE) +;697: { +;698: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "MUSTBELIGHT")) ); +;699: return; +;700: } +;701: if (team == TEAM_RED && ent->client->ps.fd.forceSide != FORCE_DARKSIDE) +;702: { +;703: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "MUSTBEDARK")) ); +;704: return; +;705: } +;706: } +;707: */ +;708: +;709: } else { +LABELV $323 +line 711 +;710: // force them to spectators if there aren't any spots free +;711: team = TEAM_FREE; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 712 +;712: } +LABELV $324 +LABELV $319 +LABELV $316 +LABELV $313 +LABELV $308 +line 715 +;713: +;714: // override decision if limiting the players +;715: if ( (g_gametype.integer == GT_TOURNAMENT) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $351 +ADDRGP4 level+76 +INDIRI4 +CNSTI4 2 +LTI4 $351 +line 716 +;716: && level.numNonSpectatorClients >= 2 ) { +line 717 +;717: team = TEAM_SPECTATOR; +ADDRLP4 4 +CNSTI4 3 +ASGNI4 +line 718 +;718: } else if ( g_maxGameClients.integer > 0 && +ADDRGP4 $352 +JUMPV +LABELV $351 +ADDRGP4 g_maxGameClients+12 +INDIRI4 +CNSTI4 0 +LEI4 $355 +ADDRGP4 level+76 +INDIRI4 +ADDRGP4 g_maxGameClients+12 +INDIRI4 +LTI4 $355 +line 719 +;719: level.numNonSpectatorClients >= g_maxGameClients.integer ) { +line 720 +;720: team = TEAM_SPECTATOR; +ADDRLP4 4 +CNSTI4 3 +ASGNI4 +line 721 +;721: } +LABELV $355 +LABELV $352 +line 726 +;722: +;723: // +;724: // decide if we will allow the change +;725: // +;726: oldTeam = client->sess.sessionTeam; +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ASGNI4 +line 727 +;727: if ( team == oldTeam && team != TEAM_SPECTATOR ) { +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +NEI4 $360 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +EQI4 $360 +line 728 +;728: return; +ADDRGP4 $306 +JUMPV +LABELV $360 +line 736 +;729: } +;730: +;731: // +;732: // execute the team change +;733: // +;734: +;735: // if the player was dead leave the body +;736: if ( client->ps.stats[STAT_HEALTH] <= 0 ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $362 +line 737 +;737: CopyToBodyQue(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 CopyToBodyQue +CALLV +pop +line 738 +;738: } +LABELV $362 +line 741 +;739: +;740: // he starts at 'base' +;741: client->pers.teamState.state = TEAM_BEGIN; +ADDRLP4 0 +INDIRP4 +CNSTI4 1460 +ADDP4 +CNSTI4 0 +ASGNI4 +line 742 +;742: if ( oldTeam != TEAM_SPECTATOR ) { +ADDRLP4 8 +INDIRI4 +CNSTI4 3 +EQI4 $364 +line 744 +;743: // Kill him (makes sure he loses flags, etc) +;744: ent->flags &= ~FL_GODMODE; +ADDRLP4 56 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +ASGNP4 +ADDRLP4 56 +INDIRP4 +ADDRLP4 56 +INDIRP4 +INDIRI4 +CNSTI4 -17 +BANDI4 +ASGNI4 +line 745 +;745: ent->client->ps.stats[STAT_HEALTH] = ent->health = 0; +ADDRLP4 60 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 64 +CNSTI4 0 +ASGNI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 676 +ADDP4 +ADDRLP4 64 +INDIRI4 +ASGNI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRLP4 64 +INDIRI4 +ASGNI4 +line 746 +;746: player_die (ent, ent, ent, 100000, MOD_SUICIDE); +ADDRLP4 68 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +ARGP4 +ADDRLP4 68 +INDIRP4 +ARGP4 +ADDRLP4 68 +INDIRP4 +ARGP4 +CNSTI4 100000 +ARGI4 +CNSTI4 35 +ARGI4 +ADDRGP4 player_die +CALLV +pop +line 748 +;747: +;748: } +LABELV $364 +line 750 +;749: // they go to the end of the line for tournements +;750: if ( team == TEAM_SPECTATOR ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +NEI4 $366 +line 751 +;751: client->sess.spectatorTime = level.time; +ADDRLP4 0 +INDIRP4 +CNSTI4 1524 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +ASGNI4 +line 752 +;752: } +LABELV $366 +line 754 +;753: +;754: client->sess.sessionTeam = team; +ADDRLP4 0 +INDIRP4 +CNSTI4 1520 +ADDP4 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 755 +;755: client->sess.spectatorState = specState; +ADDRLP4 0 +INDIRP4 +CNSTI4 1528 +ADDP4 +ADDRLP4 16 +INDIRI4 +ASGNI4 +line 756 +;756: client->sess.spectatorClient = specClient; +ADDRLP4 0 +INDIRP4 +CNSTI4 1532 +ADDP4 +ADDRLP4 20 +INDIRI4 +ASGNI4 +line 758 +;757: +;758: client->sess.teamLeader = qfalse; +ADDRLP4 0 +INDIRP4 +CNSTI4 1560 +ADDP4 +CNSTI4 0 +ASGNI4 +line 759 +;759: if ( team == TEAM_RED || team == TEAM_BLUE ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +EQI4 $371 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +NEI4 $369 +LABELV $371 +line 760 +;760: teamLeader = TeamLeader( team ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 60 +ADDRGP4 TeamLeader +CALLI4 +ASGNI4 +ADDRLP4 24 +ADDRLP4 60 +INDIRI4 +ASGNI4 +line 762 +;761: // if there is no team leader or the team leader is a bot and this client is not a bot +;762: if ( teamLeader == -1 || ( !(g_entities[clientNum].r.svFlags & SVF_BOT) && (g_entities[teamLeader].r.svFlags & SVF_BOT) ) ) { +ADDRLP4 64 +ADDRLP4 24 +INDIRI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +CNSTI4 -1 +EQI4 $378 +ADDRLP4 68 +CNSTI4 828 +ASGNI4 +ADDRLP4 72 +CNSTI4 8 +ASGNI4 +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRLP4 68 +INDIRI4 +ADDRLP4 12 +INDIRI4 +MULI4 +ADDRGP4 g_entities+296+8 +ADDP4 +INDIRI4 +ADDRLP4 72 +INDIRI4 +BANDI4 +ADDRLP4 76 +INDIRI4 +NEI4 $372 +ADDRLP4 68 +INDIRI4 +ADDRLP4 64 +INDIRI4 +MULI4 +ADDRGP4 g_entities+296+8 +ADDP4 +INDIRI4 +ADDRLP4 72 +INDIRI4 +BANDI4 +ADDRLP4 76 +INDIRI4 +EQI4 $372 +LABELV $378 +line 763 +;763: SetLeader( team, clientNum ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRGP4 SetLeader +CALLV +pop +line 764 +;764: } +LABELV $372 +line 765 +;765: } +LABELV $369 +line 767 +;766: // make sure there is a team leader on the team the player came from +;767: if ( oldTeam == TEAM_RED || oldTeam == TEAM_BLUE ) { +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +EQI4 $381 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +NEI4 $379 +LABELV $381 +line 768 +;768: CheckTeamLeader( oldTeam ); +ADDRLP4 8 +INDIRI4 +ARGI4 +ADDRGP4 CheckTeamLeader +CALLV +pop +line 769 +;769: } +LABELV $379 +line 771 +;770: +;771: BroadcastTeamChange( client, oldTeam ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +INDIRI4 +ARGI4 +ADDRGP4 BroadcastTeamChange +CALLV +pop +line 774 +;772: +;773: // get and distribute relevent paramters +;774: ClientUserinfoChanged( clientNum ); +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRGP4 ClientUserinfoChanged +CALLV +pop +line 776 +;775: +;776: ClientBegin( clientNum, qfalse ); +ADDRLP4 12 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 ClientBegin +CALLV +pop +line 777 +;777:} +LABELV $306 +endproc SetTeam 104 20 +export StopFollowing +proc StopFollowing 12 0 +line 787 +;778: +;779:/* +;780:================= +;781:StopFollowing +;782: +;783:If the client being followed leaves the game, or you just want to drop +;784:to free floating spectator mode +;785:================= +;786:*/ +;787:void StopFollowing( gentity_t *ent ) { +line 788 +;788: ent->client->ps.persistant[ PERS_TEAM ] = TEAM_SPECTATOR; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 292 +ADDP4 +CNSTI4 3 +ASGNI4 +line 789 +;789: ent->client->sess.sessionTeam = TEAM_SPECTATOR; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +CNSTI4 3 +ASGNI4 +line 790 +;790: ent->client->sess.spectatorState = SPECTATOR_FREE; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1528 +ADDP4 +CNSTI4 1 +ASGNI4 +line 791 +;791: ent->client->ps.pm_flags &= ~PMF_FOLLOW; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 12 +ADDP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +CNSTI4 -4097 +BANDI4 +ASGNI4 +line 792 +;792: ent->r.svFlags &= ~SVF_BOT; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +CNSTI4 -9 +BANDI4 +ASGNI4 +line 793 +;793: ent->client->ps.clientNum = ent - g_entities; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 144 +ADDP4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ASGNI4 +line 794 +;794: ent->client->ps.weapon = WP_NONE; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 148 +ADDP4 +CNSTI4 0 +ASGNI4 +line 795 +;795:} +LABELV $382 +endproc StopFollowing 12 0 +export Cmd_Team_f +proc Cmd_Team_f 1068 12 +line 802 +;796: +;797:/* +;798:================= +;799:Cmd_Team_f +;800:================= +;801:*/ +;802:void Cmd_Team_f( gentity_t *ent ) { +line 806 +;803: int oldTeam; +;804: char s[MAX_TOKEN_CHARS]; +;805: +;806: if ( trap_Argc() != 2 ) { +ADDRLP4 1028 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 1028 +INDIRI4 +CNSTI4 2 +EQI4 $384 +line 807 +;807: oldTeam = ent->client->sess.sessionTeam; +ADDRLP4 1024 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +ASGNI4 +line 808 +;808: switch ( oldTeam ) { +ADDRLP4 1032 +ADDRLP4 1024 +INDIRI4 +ASGNI4 +ADDRLP4 1032 +INDIRI4 +CNSTI4 0 +LTI4 $383 +ADDRLP4 1032 +INDIRI4 +CNSTI4 3 +GTI4 $383 +ADDRLP4 1032 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $399 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $399 +address $393 +address $390 +address $388 +address $396 +code +LABELV $388 +line 810 +;809: case TEAM_BLUE: +;810: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "PRINTBLUETEAM")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $389 +ARGP4 +ADDRLP4 1036 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 1036 +INDIRP4 +ARGP4 +ADDRLP4 1040 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 1040 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 811 +;811: break; +ADDRGP4 $383 +JUMPV +LABELV $390 +line 813 +;812: case TEAM_RED: +;813: trap_SendServerCommand( ent-g_entities, va("print \"Red team\n\"", G_GetStripEdString("SVINGAME", "PRINTREDTEAM")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $392 +ARGP4 +ADDRLP4 1044 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $391 +ARGP4 +ADDRLP4 1044 +INDIRP4 +ARGP4 +ADDRLP4 1048 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 1048 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 814 +;814: break; +ADDRGP4 $383 +JUMPV +LABELV $393 +line 816 +;815: case TEAM_FREE: +;816: trap_SendServerCommand( ent-g_entities, va("print \"Free team\n\"", G_GetStripEdString("SVINGAME", "PRINTFREETEAM")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $395 +ARGP4 +ADDRLP4 1052 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $394 +ARGP4 +ADDRLP4 1052 +INDIRP4 +ARGP4 +ADDRLP4 1056 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 1056 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 817 +;817: break; +ADDRGP4 $383 +JUMPV +LABELV $396 +line 819 +;818: case TEAM_SPECTATOR: +;819: trap_SendServerCommand( ent-g_entities, va("print \"Spectator team\n\"", G_GetStripEdString("SVINGAME", "PRINTSPECTEAM")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $398 +ARGP4 +ADDRLP4 1060 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $397 +ARGP4 +ADDRLP4 1060 +INDIRP4 +ARGP4 +ADDRLP4 1064 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 1064 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 820 +;820: break; +line 822 +;821: } +;822: return; +ADDRGP4 $383 +JUMPV +LABELV $384 +line 825 +;823: } +;824: +;825: if ( ent->client->switchTeamTime > level.time ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1704 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +LEI4 $400 +line 826 +;826: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "NOSWITCH")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $403 +ARGP4 +ADDRLP4 1032 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRLP4 1036 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 1036 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 827 +;827: return; +ADDRGP4 $383 +JUMPV +LABELV $400 +line 831 +;828: } +;829: +;830: // if they are playing a tournement game, count as a loss +;831: if ( (g_gametype.integer == GT_TOURNAMENT ) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $404 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $404 +line 832 +;832: && ent->client->sess.sessionTeam == TEAM_FREE ) { +line 833 +;833: ent->client->sess.losses++; +ADDRLP4 1032 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1540 +ADDP4 +ASGNP4 +ADDRLP4 1032 +INDIRP4 +ADDRLP4 1032 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 834 +;834: } +LABELV $404 +line 836 +;835: +;836: trap_Argv( 1, s, sizeof( s ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 838 +;837: +;838: SetTeam( ent, s ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 SetTeam +CALLV +pop +line 840 +;839: +;840: ent->client->switchTeamTime = level.time + 5000; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1704 +ADDP4 +ADDRGP4 level+32 +INDIRI4 +CNSTI4 5000 +ADDI4 +ASGNI4 +line 841 +;841:} +LABELV $383 +endproc Cmd_Team_f 1068 12 +export Cmd_ForceChanged_f +proc Cmd_ForceChanged_f 2064 12 +line 849 +;842: +;843:/* +;844:================= +;845:Cmd_Team_f +;846:================= +;847:*/ +;848:void Cmd_ForceChanged_f( gentity_t *ent ) +;849:{ +line 853 +;850: char fpChStr[1024]; +;851: const char *buf; +;852:// Cmd_Kill_f(ent); +;853: if (ent->client->sess.sessionTeam == TEAM_SPECTATOR) +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $409 +line 854 +;854: { //if it's a spec, just make the changes now +line 857 +;855: //trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "FORCEAPPLIED")) ); +;856: //No longer print it, as the UI calls this a lot. +;857: WP_InitForcePowers( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 WP_InitForcePowers +CALLV +pop +line 858 +;858: goto argCheck; +ADDRGP4 $411 +JUMPV +LABELV $409 +line 861 +;859: } +;860: +;861: buf = G_GetStripEdString("SVINGAME", "FORCEPOWERCHANGED"); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $412 +ARGP4 +ADDRLP4 1028 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRLP4 1024 +ADDRLP4 1028 +INDIRP4 +ASGNP4 +line 863 +;862: +;863: strcpy(fpChStr, buf); +ADDRLP4 0 +ARGP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 865 +;864: +;865: trap_SendServerCommand( ent-g_entities, va("print \"%s%s\n\"", S_COLOR_GREEN, fpChStr) ); +ADDRGP4 $413 +ARGP4 +ADDRGP4 $414 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRLP4 1032 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 1032 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 867 +;866: +;867: ent->client->ps.fd.forceDoInit = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1172 +ADDP4 +CNSTI4 1 +ASGNI4 +LABELV $411 +line 869 +;868:argCheck: +;869: if (trap_Argc() > 1) +ADDRLP4 1036 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 1036 +INDIRI4 +CNSTI4 1 +LEI4 $415 +line 870 +;870: { +line 873 +;871: char arg[MAX_TOKEN_CHARS]; +;872: +;873: trap_Argv( 1, arg, sizeof( arg ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 1040 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 875 +;874: +;875: if (arg && arg[0]) +ADDRLP4 1040 +CVPU4 4 +CNSTU4 0 +EQU4 $417 +ADDRLP4 1040 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $417 +line 876 +;876: { //if there's an arg, assume it's a combo team command from the UI. +line 877 +;877: Cmd_Team_f(ent); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Cmd_Team_f +CALLV +pop +line 878 +;878: } +LABELV $417 +line 879 +;879: } +LABELV $415 +line 880 +;880:} +LABELV $408 +endproc Cmd_ForceChanged_f 2064 12 +export Cmd_Follow_f +proc Cmd_Follow_f 1040 12 +line 887 +;881: +;882:/* +;883:================= +;884:Cmd_Follow_f +;885:================= +;886:*/ +;887:void Cmd_Follow_f( gentity_t *ent ) { +line 891 +;888: int i; +;889: char arg[MAX_TOKEN_CHARS]; +;890: +;891: if ( trap_Argc() != 2 ) { +ADDRLP4 1028 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 1028 +INDIRI4 +CNSTI4 2 +EQI4 $420 +line 892 +;892: if ( ent->client->sess.spectatorState == SPECTATOR_FOLLOW ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $419 +line 893 +;893: StopFollowing( ent ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 StopFollowing +CALLV +pop +line 894 +;894: } +line 895 +;895: return; +ADDRGP4 $419 +JUMPV +LABELV $420 +line 898 +;896: } +;897: +;898: trap_Argv( 1, arg, sizeof( arg ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 899 +;899: i = ClientNumberFromString( ent, arg ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 1032 +ADDRGP4 ClientNumberFromString +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 1032 +INDIRI4 +ASGNI4 +line 900 +;900: if ( i == -1 ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 -1 +NEI4 $424 +line 901 +;901: return; +ADDRGP4 $419 +JUMPV +LABELV $424 +line 905 +;902: } +;903: +;904: // can't follow self +;905: if ( &level.clients[ i ] == ent->client ) { +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +NEU4 $426 +line 906 +;906: return; +ADDRGP4 $419 +JUMPV +LABELV $426 +line 910 +;907: } +;908: +;909: // can't follow another spectator +;910: if ( level.clients[ i ].sess.sessionTeam == TEAM_SPECTATOR ) { +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $428 +line 911 +;911: return; +ADDRGP4 $419 +JUMPV +LABELV $428 +line 915 +;912: } +;913: +;914: // if they are playing a tournement game, count as a loss +;915: if ( (g_gametype.integer == GT_TOURNAMENT ) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $430 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $430 +line 916 +;916: && ent->client->sess.sessionTeam == TEAM_FREE ) { +line 917 +;917: ent->client->sess.losses++; +ADDRLP4 1036 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1540 +ADDP4 +ASGNP4 +ADDRLP4 1036 +INDIRP4 +ADDRLP4 1036 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 918 +;918: } +LABELV $430 +line 921 +;919: +;920: // first set them to spectator +;921: if ( ent->client->sess.sessionTeam != TEAM_SPECTATOR ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +EQI4 $433 +line 922 +;922: SetTeam( ent, "spectator" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $320 +ARGP4 +ADDRGP4 SetTeam +CALLV +pop +line 923 +;923: } +LABELV $433 +line 925 +;924: +;925: ent->client->sess.spectatorState = SPECTATOR_FOLLOW; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1528 +ADDP4 +CNSTI4 2 +ASGNI4 +line 926 +;926: ent->client->sess.spectatorClient = i; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1532 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 927 +;927:} +LABELV $419 +endproc Cmd_Follow_f 1040 12 +export Cmd_FollowCycle_f +proc Cmd_FollowCycle_f 12 8 +line 934 +;928: +;929:/* +;930:================= +;931:Cmd_FollowCycle_f +;932:================= +;933:*/ +;934:void Cmd_FollowCycle_f( gentity_t *ent, int dir ) { +line 939 +;935: int clientnum; +;936: int original; +;937: +;938: // if they are playing a tournement game, count as a loss +;939: if ( (g_gametype.integer == GT_TOURNAMENT ) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $436 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $436 +line 940 +;940: && ent->client->sess.sessionTeam == TEAM_FREE ) { +line 941 +;941: ent->client->sess.losses++; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1540 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 942 +;942: } +LABELV $436 +line 944 +;943: // first set them to spectator +;944: if ( ent->client->sess.spectatorState == SPECTATOR_NOT ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1528 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $439 +line 945 +;945: SetTeam( ent, "spectator" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $320 +ARGP4 +ADDRGP4 SetTeam +CALLV +pop +line 946 +;946: } +LABELV $439 +line 948 +;947: +;948: if ( dir != 1 && dir != -1 ) { +ADDRLP4 8 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +EQI4 $441 +ADDRLP4 8 +INDIRI4 +CNSTI4 -1 +EQI4 $441 +line 949 +;949: G_Error( "Cmd_FollowCycle_f: bad dir %i", dir ); +ADDRGP4 $443 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Error +CALLV +pop +line 950 +;950: } +LABELV $441 +line 952 +;951: +;952: clientnum = ent->client->sess.spectatorClient; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1532 +ADDP4 +INDIRI4 +ASGNI4 +line 953 +;953: original = clientnum; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +LABELV $444 +line 954 +;954: do { +line 955 +;955: clientnum += dir; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRI4 +ADDI4 +ASGNI4 +line 956 +;956: if ( clientnum >= level.maxclients ) { +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $447 +line 957 +;957: clientnum = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 958 +;958: } +LABELV $447 +line 959 +;959: if ( clientnum < 0 ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $450 +line 960 +;960: clientnum = level.maxclients - 1; +ADDRLP4 0 +ADDRGP4 level+24 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 961 +;961: } +LABELV $450 +line 964 +;962: +;963: // can only follow connected clients +;964: if ( level.clients[ clientnum ].pers.connected != CON_CONNECTED ) { +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $453 +line 965 +;965: continue; +ADDRGP4 $445 +JUMPV +LABELV $453 +line 969 +;966: } +;967: +;968: // can't follow another spectator +;969: if ( level.clients[ clientnum ].sess.sessionTeam == TEAM_SPECTATOR ) { +CNSTI4 1756 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 level +INDIRP4 +ADDP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $455 +line 970 +;970: continue; +ADDRGP4 $445 +JUMPV +LABELV $455 +line 974 +;971: } +;972: +;973: // this is good, we can use it +;974: ent->client->sess.spectatorClient = clientnum; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1532 +ADDP4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 975 +;975: ent->client->sess.spectatorState = SPECTATOR_FOLLOW; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1528 +ADDP4 +CNSTI4 2 +ASGNI4 +line 976 +;976: return; +ADDRGP4 $435 +JUMPV +LABELV $445 +line 977 +;977: } while ( clientnum != original ); +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $444 +line 980 +;978: +;979: // leave it where it was +;980:} +LABELV $435 +endproc Cmd_FollowCycle_f 12 8 +proc G_SayTo 24 24 +line 989 +;981: +;982: +;983:/* +;984:================== +;985:G_Say +;986:================== +;987:*/ +;988: +;989:static void G_SayTo( gentity_t *ent, gentity_t *other, int mode, int color, const char *name, const char *message ) { +line 990 +;990: if (!other) { +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $458 +line 991 +;991: return; +ADDRGP4 $457 +JUMPV +LABELV $458 +line 993 +;992: } +;993: if (!other->inuse) { +ADDRFP4 4 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $460 +line 994 +;994: return; +ADDRGP4 $457 +JUMPV +LABELV $460 +line 996 +;995: } +;996: if (!other->client) { +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $462 +line 997 +;997: return; +ADDRGP4 $457 +JUMPV +LABELV $462 +line 999 +;998: } +;999: if ( other->client->pers.connected != CON_CONNECTED ) { +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1368 +ADDP4 +INDIRI4 +CNSTI4 2 +EQI4 $464 +line 1000 +;1000: return; +ADDRGP4 $457 +JUMPV +LABELV $464 +line 1002 +;1001: } +;1002: if ( mode == SAY_TEAM && !OnSameTeam(ent, other) ) { +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +NEI4 $466 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 0 +ADDRGP4 OnSameTeam +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $466 +line 1003 +;1003: return; +ADDRGP4 $457 +JUMPV +LABELV $466 +line 1006 +;1004: } +;1005: // no chatting to players in tournements +;1006: if ( (g_gametype.integer == GT_TOURNAMENT ) +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $468 +ADDRLP4 4 +CNSTI4 408 +ASGNI4 +ADDRLP4 8 +CNSTI4 1520 +ASGNI4 +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +NEI4 $468 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +EQI4 $468 +line 1008 +;1007: && other->client->sess.sessionTeam == TEAM_FREE +;1008: && ent->client->sess.sessionTeam != TEAM_FREE ) { +line 1009 +;1009: return; +ADDRGP4 $457 +JUMPV +LABELV $468 +line 1012 +;1010: } +;1011: +;1012: trap_SendServerCommand( other-g_entities, va("%s \"%s%c%c%s\"", +ADDRGP4 $471 +ARGP4 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +NEI4 $475 +ADDRLP4 16 +ADDRGP4 $472 +ASGNP4 +ADDRGP4 $476 +JUMPV +LABELV $475 +ADDRLP4 16 +ADDRGP4 $473 +ASGNP4 +LABELV $476 +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRFP4 16 +INDIRP4 +ARGP4 +CNSTI4 94 +ARGI4 +ADDRFP4 12 +INDIRI4 +ARGI4 +ADDRFP4 20 +INDIRP4 +ARGP4 +ADDRLP4 20 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 4 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1015 +;1013: mode == SAY_TEAM ? "tchat" : "chat", +;1014: name, Q_COLOR_ESCAPE, color, message)); +;1015:} +LABELV $457 +endproc G_SayTo 24 24 +export G_Say +proc G_Say 320 28 +line 1019 +;1016: +;1017:#define EC "\x19" +;1018: +;1019:void G_Say( gentity_t *ent, gentity_t *target, int mode, const char *chatText ) { +line 1028 +;1020: int j; +;1021: gentity_t *other; +;1022: int color; +;1023: char name[64]; +;1024: // don't let text be too long for malicious reasons +;1025: char text[MAX_SAY_TEXT]; +;1026: char location[64]; +;1027: +;1028: if ( g_gametype.integer < GT_TEAM && mode == SAY_TEAM ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +GEI4 $478 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +NEI4 $478 +line 1029 +;1029: mode = SAY_ALL; +ADDRFP4 8 +CNSTI4 0 +ASGNI4 +line 1030 +;1030: } +LABELV $478 +line 1032 +;1031: +;1032: switch ( mode ) { +ADDRLP4 292 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 292 +INDIRI4 +CNSTI4 0 +EQI4 $483 +ADDRLP4 292 +INDIRI4 +CNSTI4 1 +EQI4 $486 +ADDRLP4 292 +INDIRI4 +CNSTI4 2 +EQI4 $492 +ADDRGP4 $481 +JUMPV +LABELV $481 +LABELV $483 +line 1035 +;1033: default: +;1034: case SAY_ALL: +;1035: G_LogPrintf( "say: %s: %s\n", ent->client->pers.netname, chatText ); +ADDRGP4 $484 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 1036 +;1036: Com_sprintf (name, sizeof(name), "%s%c%c"EC": ", ent->client->pers.netname, Q_COLOR_ESCAPE, COLOR_WHITE ); +ADDRLP4 158 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $485 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +CNSTI4 94 +ARGI4 +CNSTI4 55 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 1037 +;1037: color = COLOR_GREEN; +ADDRLP4 224 +CNSTI4 50 +ASGNI4 +line 1038 +;1038: break; +ADDRGP4 $482 +JUMPV +LABELV $486 +line 1040 +;1039: case SAY_TEAM: +;1040: G_LogPrintf( "sayteam: %s: %s\n", ent->client->pers.netname, chatText ); +ADDRGP4 $487 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 1041 +;1041: if (Team_GetLocationMsg(ent, location, sizeof(location))) +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 228 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRLP4 296 +ADDRGP4 Team_GetLocationMsg +CALLI4 +ASGNI4 +ADDRLP4 296 +INDIRI4 +CNSTI4 0 +EQI4 $488 +line 1042 +;1042: Com_sprintf (name, sizeof(name), EC"(%s%c%c"EC") (%s)"EC": ", +ADDRLP4 158 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $490 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +CNSTI4 94 +ARGI4 +CNSTI4 55 +ARGI4 +ADDRLP4 228 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +ADDRGP4 $489 +JUMPV +LABELV $488 +line 1045 +;1043: ent->client->pers.netname, Q_COLOR_ESCAPE, COLOR_WHITE, location); +;1044: else +;1045: Com_sprintf (name, sizeof(name), EC"(%s%c%c"EC")"EC": ", +ADDRLP4 158 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $491 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +CNSTI4 94 +ARGI4 +CNSTI4 55 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +LABELV $489 +line 1047 +;1046: ent->client->pers.netname, Q_COLOR_ESCAPE, COLOR_WHITE ); +;1047: color = COLOR_CYAN; +ADDRLP4 224 +CNSTI4 53 +ASGNI4 +line 1048 +;1048: break; +ADDRGP4 $482 +JUMPV +LABELV $492 +line 1050 +;1049: case SAY_TELL: +;1050: if (target && g_gametype.integer >= GT_TEAM && +ADDRLP4 300 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 300 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $493 +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $493 +ADDRLP4 304 +CNSTI4 408 +ASGNI4 +ADDRLP4 308 +CNSTI4 1520 +ASGNI4 +ADDRLP4 312 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 300 +INDIRP4 +ADDRLP4 304 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 308 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 312 +INDIRP4 +ADDRLP4 304 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 308 +INDIRI4 +ADDP4 +INDIRI4 +NEI4 $493 +ADDRLP4 312 +INDIRP4 +ARGP4 +ADDRLP4 228 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRLP4 316 +ADDRGP4 Team_GetLocationMsg +CALLI4 +ASGNI4 +ADDRLP4 316 +INDIRI4 +CNSTI4 0 +EQI4 $493 +line 1053 +;1051: target->client->sess.sessionTeam == ent->client->sess.sessionTeam && +;1052: Team_GetLocationMsg(ent, location, sizeof(location))) +;1053: Com_sprintf (name, sizeof(name), EC"[%s%c%c"EC"] (%s)"EC": ", ent->client->pers.netname, Q_COLOR_ESCAPE, COLOR_WHITE, location ); +ADDRLP4 158 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $496 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +CNSTI4 94 +ARGI4 +CNSTI4 55 +ARGI4 +ADDRLP4 228 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +ADDRGP4 $494 +JUMPV +LABELV $493 +line 1055 +;1054: else +;1055: Com_sprintf (name, sizeof(name), EC"[%s%c%c"EC"]"EC": ", ent->client->pers.netname, Q_COLOR_ESCAPE, COLOR_WHITE ); +ADDRLP4 158 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $497 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +CNSTI4 94 +ARGI4 +CNSTI4 55 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +LABELV $494 +line 1056 +;1056: color = COLOR_MAGENTA; +ADDRLP4 224 +CNSTI4 54 +ASGNI4 +line 1057 +;1057: break; +LABELV $482 +line 1060 +;1058: } +;1059: +;1060: Q_strncpyz( text, chatText, sizeof(text) ); +ADDRLP4 8 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +CNSTI4 150 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 1062 +;1061: +;1062: if ( target ) { +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $498 +line 1063 +;1063: G_SayTo( ent, target, mode, color, name, text ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 224 +INDIRI4 +ARGI4 +ADDRLP4 158 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 G_SayTo +CALLV +pop +line 1064 +;1064: return; +ADDRGP4 $477 +JUMPV +LABELV $498 +line 1068 +;1065: } +;1066: +;1067: // echo the text to the console +;1068: if ( g_dedicated.integer ) { +ADDRGP4 g_dedicated+12 +INDIRI4 +CNSTI4 0 +EQI4 $500 +line 1069 +;1069: G_Printf( "%s%s\n", name, text); +ADDRGP4 $503 +ARGP4 +ADDRLP4 158 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 1070 +;1070: } +LABELV $500 +line 1073 +;1071: +;1072: // send it to all the apropriate clients +;1073: for (j = 0; j < level.maxclients; j++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $507 +JUMPV +LABELV $504 +line 1074 +;1074: other = &g_entities[j]; +ADDRLP4 4 +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1075 +;1075: G_SayTo( ent, other, mode, color, name, text ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 224 +INDIRI4 +ARGI4 +ADDRLP4 158 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRGP4 G_SayTo +CALLV +pop +line 1076 +;1076: } +LABELV $505 +line 1073 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $507 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $504 +line 1077 +;1077:} +LABELV $477 +endproc G_Say 320 28 +proc Cmd_Say_f 12 16 +line 1085 +;1078: +;1079: +;1080:/* +;1081:================== +;1082:Cmd_Say_f +;1083:================== +;1084:*/ +;1085:static void Cmd_Say_f( gentity_t *ent, int mode, qboolean arg0 ) { +line 1088 +;1086: char *p; +;1087: +;1088: if ( trap_Argc () < 2 && !arg0 ) { +ADDRLP4 4 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +GEI4 $510 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $510 +line 1089 +;1089: return; +ADDRGP4 $509 +JUMPV +LABELV $510 +line 1092 +;1090: } +;1091: +;1092: if (arg0) +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $512 +line 1093 +;1093: { +line 1094 +;1094: p = ConcatArgs( 0 ); +CNSTI4 0 +ARGI4 +ADDRLP4 8 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 1095 +;1095: } +ADDRGP4 $513 +JUMPV +LABELV $512 +line 1097 +;1096: else +;1097: { +line 1098 +;1098: p = ConcatArgs( 1 ); +CNSTI4 1 +ARGI4 +ADDRLP4 8 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 1099 +;1099: } +LABELV $513 +line 1101 +;1100: +;1101: G_Say( ent, NULL, mode, p ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTP4 0 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 G_Say +CALLV +pop +line 1102 +;1102:} +LABELV $509 +endproc Cmd_Say_f 12 16 +proc Cmd_Tell_f 1076 16 +line 1109 +;1103: +;1104:/* +;1105:================== +;1106:Cmd_Tell_f +;1107:================== +;1108:*/ +;1109:static void Cmd_Tell_f( gentity_t *ent ) { +line 1115 +;1110: int targetNum; +;1111: gentity_t *target; +;1112: char *p; +;1113: char arg[MAX_TOKEN_CHARS]; +;1114: +;1115: if ( trap_Argc () < 2 ) { +ADDRLP4 1036 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 1036 +INDIRI4 +CNSTI4 2 +GEI4 $515 +line 1116 +;1116: return; +ADDRGP4 $514 +JUMPV +LABELV $515 +line 1119 +;1117: } +;1118: +;1119: trap_Argv( 1, arg, sizeof( arg ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 12 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 1120 +;1120: targetNum = atoi( arg ); +ADDRLP4 12 +ARGP4 +ADDRLP4 1040 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 1040 +INDIRI4 +ASGNI4 +line 1121 +;1121: if ( targetNum < 0 || targetNum >= level.maxclients ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +LTI4 $520 +ADDRLP4 4 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $517 +LABELV $520 +line 1122 +;1122: return; +ADDRGP4 $514 +JUMPV +LABELV $517 +line 1125 +;1123: } +;1124: +;1125: target = &g_entities[targetNum]; +ADDRLP4 0 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1126 +;1126: if ( !target || !target->inuse || !target->client ) { +ADDRLP4 1052 +CNSTU4 0 +ASGNU4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 1052 +INDIRU4 +EQU4 $524 +ADDRLP4 0 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $524 +ADDRLP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 1052 +INDIRU4 +NEU4 $521 +LABELV $524 +line 1127 +;1127: return; +ADDRGP4 $514 +JUMPV +LABELV $521 +line 1130 +;1128: } +;1129: +;1130: p = ConcatArgs( 2 ); +CNSTI4 2 +ARGI4 +ADDRLP4 1056 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 1056 +INDIRP4 +ASGNP4 +line 1132 +;1131: +;1132: G_LogPrintf( "tell: %s to %s: %s\n", ent->client->pers.netname, target->client->pers.netname, p ); +ADDRGP4 $525 +ARGP4 +ADDRLP4 1060 +CNSTI4 408 +ASGNI4 +ADDRLP4 1064 +CNSTI4 1416 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 1060 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 1064 +INDIRI4 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 1060 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 1064 +INDIRI4 +ADDP4 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 1133 +;1133: G_Say( ent, target, SAY_TELL, p ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 G_Say +CALLV +pop +line 1136 +;1134: // don't tell to the player self if it was already directed to this player +;1135: // also don't send the chat back to a bot +;1136: if ( ent != target && !(ent->r.svFlags & SVF_BOT)) { +ADDRLP4 1068 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1068 +INDIRP4 +CVPU4 4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +EQU4 $526 +ADDRLP4 1068 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $526 +line 1137 +;1137: G_Say( ent, ent, SAY_TELL, p ); +ADDRLP4 1072 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1072 +INDIRP4 +ARGP4 +ADDRLP4 1072 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 G_Say +CALLV +pop +line 1138 +;1138: } +LABELV $526 +line 1139 +;1139:} +LABELV $514 +endproc Cmd_Tell_f 1076 16 +proc G_VoiceTo 16 24 +line 1142 +;1140: +;1141: +;1142:static void G_VoiceTo( gentity_t *ent, gentity_t *other, int mode, const char *id, qboolean voiceonly ) { +line 1146 +;1143: int color; +;1144: char *cmd; +;1145: +;1146: if (!other) { +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $529 +line 1147 +;1147: return; +ADDRGP4 $528 +JUMPV +LABELV $529 +line 1149 +;1148: } +;1149: if (!other->inuse) { +ADDRFP4 4 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $531 +line 1150 +;1150: return; +ADDRGP4 $528 +JUMPV +LABELV $531 +line 1152 +;1151: } +;1152: if (!other->client) { +ADDRFP4 4 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $533 +line 1153 +;1153: return; +ADDRGP4 $528 +JUMPV +LABELV $533 +line 1155 +;1154: } +;1155: if ( mode == SAY_TEAM && !OnSameTeam(ent, other) ) { +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +NEI4 $535 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 OnSameTeam +CALLI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $535 +line 1156 +;1156: return; +ADDRGP4 $528 +JUMPV +LABELV $535 +line 1159 +;1157: } +;1158: // no chatting to players in tournements +;1159: if ( (g_gametype.integer == GT_TOURNAMENT )) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 3 +NEI4 $537 +line 1160 +;1160: return; +ADDRGP4 $528 +JUMPV +LABELV $537 +line 1163 +;1161: } +;1162: +;1163: if (mode == SAY_TEAM) { +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +NEI4 $540 +line 1164 +;1164: color = COLOR_CYAN; +ADDRLP4 0 +CNSTI4 53 +ASGNI4 +line 1165 +;1165: cmd = "vtchat"; +ADDRLP4 4 +ADDRGP4 $542 +ASGNP4 +line 1166 +;1166: } +ADDRGP4 $541 +JUMPV +LABELV $540 +line 1167 +;1167: else if (mode == SAY_TELL) { +ADDRFP4 8 +INDIRI4 +CNSTI4 2 +NEI4 $543 +line 1168 +;1168: color = COLOR_MAGENTA; +ADDRLP4 0 +CNSTI4 54 +ASGNI4 +line 1169 +;1169: cmd = "vtell"; +ADDRLP4 4 +ADDRGP4 $545 +ASGNP4 +line 1170 +;1170: } +ADDRGP4 $544 +JUMPV +LABELV $543 +line 1171 +;1171: else { +line 1172 +;1172: color = COLOR_GREEN; +ADDRLP4 0 +CNSTI4 50 +ASGNI4 +line 1173 +;1173: cmd = "vchat"; +ADDRLP4 4 +ADDRGP4 $546 +ASGNP4 +line 1174 +;1174: } +LABELV $544 +LABELV $541 +line 1176 +;1175: +;1176: trap_SendServerCommand( other-g_entities, va("%s %d %d %d %s", cmd, voiceonly, ent->s.number, color, id)); +ADDRGP4 $547 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 16 +INDIRI4 +ARGI4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 12 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 4 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1177 +;1177:} +LABELV $528 +endproc G_VoiceTo 16 24 +export G_Voice +proc G_Voice 8 20 +line 1179 +;1178: +;1179:void G_Voice( gentity_t *ent, gentity_t *target, int mode, const char *id, qboolean voiceonly ) { +line 1183 +;1180: int j; +;1181: gentity_t *other; +;1182: +;1183: if ( g_gametype.integer < GT_TEAM && mode == SAY_TEAM ) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +GEI4 $549 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +NEI4 $549 +line 1184 +;1184: mode = SAY_ALL; +ADDRFP4 8 +CNSTI4 0 +ASGNI4 +line 1185 +;1185: } +LABELV $549 +line 1187 +;1186: +;1187: if ( target ) { +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $552 +line 1188 +;1188: G_VoiceTo( ent, target, mode, id, voiceonly ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRFP4 16 +INDIRI4 +ARGI4 +ADDRGP4 G_VoiceTo +CALLV +pop +line 1189 +;1189: return; +ADDRGP4 $548 +JUMPV +LABELV $552 +line 1193 +;1190: } +;1191: +;1192: // echo the text to the console +;1193: if ( g_dedicated.integer ) { +ADDRGP4 g_dedicated+12 +INDIRI4 +CNSTI4 0 +EQI4 $554 +line 1194 +;1194: G_Printf( "voice: %s %s\n", ent->client->pers.netname, id); +ADDRGP4 $557 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1416 +ADDP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRGP4 G_Printf +CALLV +pop +line 1195 +;1195: } +LABELV $554 +line 1198 +;1196: +;1197: // send it to all the apropriate clients +;1198: for (j = 0; j < level.maxclients; j++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $561 +JUMPV +LABELV $558 +line 1199 +;1199: other = &g_entities[j]; +ADDRLP4 4 +CNSTI4 828 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1200 +;1200: G_VoiceTo( ent, other, mode, id, voiceonly ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRFP4 16 +INDIRI4 +ARGI4 +ADDRGP4 G_VoiceTo +CALLV +pop +line 1201 +;1201: } +LABELV $559 +line 1198 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $561 +ADDRLP4 0 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $558 +line 1202 +;1202:} +LABELV $548 +endproc G_Voice 8 20 +proc Cmd_Voice_f 12 20 +line 1209 +;1203: +;1204:/* +;1205:================== +;1206:Cmd_Voice_f +;1207:================== +;1208:*/ +;1209:static void Cmd_Voice_f( gentity_t *ent, int mode, qboolean arg0, qboolean voiceonly ) { +line 1212 +;1210: char *p; +;1211: +;1212: if ( trap_Argc () < 2 && !arg0 ) { +ADDRLP4 4 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +GEI4 $564 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $564 +line 1213 +;1213: return; +ADDRGP4 $563 +JUMPV +LABELV $564 +line 1216 +;1214: } +;1215: +;1216: if (arg0) +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $566 +line 1217 +;1217: { +line 1218 +;1218: p = ConcatArgs( 0 ); +CNSTI4 0 +ARGI4 +ADDRLP4 8 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 1219 +;1219: } +ADDRGP4 $567 +JUMPV +LABELV $566 +line 1221 +;1220: else +;1221: { +line 1222 +;1222: p = ConcatArgs( 1 ); +CNSTI4 1 +ARGI4 +ADDRLP4 8 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 1223 +;1223: } +LABELV $567 +line 1225 +;1224: +;1225: G_Voice( ent, NULL, mode, p, voiceonly ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTP4 0 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 12 +INDIRI4 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1226 +;1226:} +LABELV $563 +endproc Cmd_Voice_f 12 20 +proc Cmd_VoiceTell_f 1076 20 +line 1233 +;1227: +;1228:/* +;1229:================== +;1230:Cmd_VoiceTell_f +;1231:================== +;1232:*/ +;1233:static void Cmd_VoiceTell_f( gentity_t *ent, qboolean voiceonly ) { +line 1239 +;1234: int targetNum; +;1235: gentity_t *target; +;1236: char *id; +;1237: char arg[MAX_TOKEN_CHARS]; +;1238: +;1239: if ( trap_Argc () < 2 ) { +ADDRLP4 1036 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 1036 +INDIRI4 +CNSTI4 2 +GEI4 $569 +line 1240 +;1240: return; +ADDRGP4 $568 +JUMPV +LABELV $569 +line 1243 +;1241: } +;1242: +;1243: trap_Argv( 1, arg, sizeof( arg ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 12 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 1244 +;1244: targetNum = atoi( arg ); +ADDRLP4 12 +ARGP4 +ADDRLP4 1040 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 1040 +INDIRI4 +ASGNI4 +line 1245 +;1245: if ( targetNum < 0 || targetNum >= level.maxclients ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +LTI4 $574 +ADDRLP4 4 +INDIRI4 +ADDRGP4 level+24 +INDIRI4 +LTI4 $571 +LABELV $574 +line 1246 +;1246: return; +ADDRGP4 $568 +JUMPV +LABELV $571 +line 1249 +;1247: } +;1248: +;1249: target = &g_entities[targetNum]; +ADDRLP4 0 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1250 +;1250: if ( !target || !target->inuse || !target->client ) { +ADDRLP4 1052 +CNSTU4 0 +ASGNU4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 1052 +INDIRU4 +EQU4 $578 +ADDRLP4 0 +INDIRP4 +CNSTI4 412 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $578 +ADDRLP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +ADDRLP4 1052 +INDIRU4 +NEU4 $575 +LABELV $578 +line 1251 +;1251: return; +ADDRGP4 $568 +JUMPV +LABELV $575 +line 1254 +;1252: } +;1253: +;1254: id = ConcatArgs( 2 ); +CNSTI4 2 +ARGI4 +ADDRLP4 1056 +ADDRGP4 ConcatArgs +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 1056 +INDIRP4 +ASGNP4 +line 1256 +;1255: +;1256: G_LogPrintf( "vtell: %s to %s: %s\n", ent->client->pers.netname, target->client->pers.netname, id ); +ADDRGP4 $579 +ARGP4 +ADDRLP4 1060 +CNSTI4 408 +ASGNI4 +ADDRLP4 1064 +CNSTI4 1416 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 1060 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 1064 +INDIRI4 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 1060 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 1064 +INDIRI4 +ADDP4 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 G_LogPrintf +CALLV +pop +line 1257 +;1257: G_Voice( ent, target, SAY_TELL, id, voiceonly ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1260 +;1258: // don't tell to the player self if it was already directed to this player +;1259: // also don't send the chat back to a bot +;1260: if ( ent != target && !(ent->r.svFlags & SVF_BOT)) { +ADDRLP4 1068 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1068 +INDIRP4 +CVPU4 4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +EQU4 $580 +ADDRLP4 1068 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $580 +line 1261 +;1261: G_Voice( ent, ent, SAY_TELL, id, voiceonly ); +ADDRLP4 1072 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1072 +INDIRP4 +ARGP4 +ADDRLP4 1072 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1262 +;1262: } +LABELV $580 +line 1263 +;1263:} +LABELV $568 +endproc Cmd_VoiceTell_f 1076 20 +proc Cmd_VoiceTaunt_f 56 20 +line 1271 +;1264: +;1265: +;1266:/* +;1267:================== +;1268:Cmd_VoiceTaunt_f +;1269:================== +;1270:*/ +;1271:static void Cmd_VoiceTaunt_f( gentity_t *ent ) { +line 1275 +;1272: gentity_t *who; +;1273: int i; +;1274: +;1275: if (!ent->client) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $583 +line 1276 +;1276: return; +ADDRGP4 $582 +JUMPV +LABELV $583 +line 1280 +;1277: } +;1278: +;1279: // insult someone who just killed you +;1280: if (ent->enemy && ent->enemy->client && ent->enemy->client->lastkilled_client == ent->s.number) { +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 8 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +CNSTU4 0 +ASGNU4 +ADDRLP4 12 +INDIRP4 +CVPU4 4 +ADDRLP4 16 +INDIRU4 +EQU4 $585 +ADDRLP4 20 +ADDRLP4 12 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +ADDRLP4 16 +INDIRU4 +EQU4 $585 +ADDRLP4 20 +INDIRP4 +CNSTI4 1660 +ADDP4 +INDIRI4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +NEI4 $585 +line 1282 +;1281: // i am a dead corpse +;1282: if (!(ent->enemy->r.svFlags & SVF_BOT)) { +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $587 +line 1283 +;1283: G_Voice( ent, ent->enemy, SAY_TELL, VOICECHAT_DEATHINSULT, qfalse ); +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRGP4 $589 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1284 +;1284: } +LABELV $587 +line 1285 +;1285: if (!(ent->r.svFlags & SVF_BOT)) { +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $590 +line 1286 +;1286: G_Voice( ent, ent, SAY_TELL, VOICECHAT_DEATHINSULT, qfalse ); +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRGP4 $589 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1287 +;1287: } +LABELV $590 +line 1288 +;1288: ent->enemy = NULL; +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +CNSTP4 0 +ASGNP4 +line 1289 +;1289: return; +ADDRGP4 $582 +JUMPV +LABELV $585 +line 1292 +;1290: } +;1291: // insult someone you just killed +;1292: if (ent->client->lastkilled_client >= 0 && ent->client->lastkilled_client != ent->s.number) { +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 28 +ADDRLP4 24 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1660 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +LTI4 $592 +ADDRLP4 28 +INDIRI4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +EQI4 $592 +line 1293 +;1293: who = g_entities + ent->client->lastkilled_client; +ADDRLP4 0 +CNSTI4 828 +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1660 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1294 +;1294: if (who->client) { +ADDRLP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $594 +line 1296 +;1295: // who is the person I just killed +;1296: if (who->client->lasthurt_mod == MOD_STUN_BATON) { +ADDRLP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1668 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $596 +line 1297 +;1297: if (!(who->r.svFlags & SVF_BOT)) { +ADDRLP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $598 +line 1298 +;1298: G_Voice( ent, who, SAY_TELL, VOICECHAT_KILLGAUNTLET, qfalse ); // and I killed them with a gauntlet +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRGP4 $600 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1299 +;1299: } +LABELV $598 +line 1300 +;1300: if (!(ent->r.svFlags & SVF_BOT)) { +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $597 +line 1301 +;1301: G_Voice( ent, ent, SAY_TELL, VOICECHAT_KILLGAUNTLET, qfalse ); +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRGP4 $600 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1302 +;1302: } +line 1303 +;1303: } else { +ADDRGP4 $597 +JUMPV +LABELV $596 +line 1304 +;1304: if (!(who->r.svFlags & SVF_BOT)) { +ADDRLP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $603 +line 1305 +;1305: G_Voice( ent, who, SAY_TELL, VOICECHAT_KILLINSULT, qfalse ); // and I killed them with something else +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRGP4 $605 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1306 +;1306: } +LABELV $603 +line 1307 +;1307: if (!(ent->r.svFlags & SVF_BOT)) { +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $606 +line 1308 +;1308: G_Voice( ent, ent, SAY_TELL, VOICECHAT_KILLINSULT, qfalse ); +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRGP4 $605 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1309 +;1309: } +LABELV $606 +line 1310 +;1310: } +LABELV $597 +line 1311 +;1311: ent->client->lastkilled_client = -1; +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1660 +ADDP4 +CNSTI4 -1 +ASGNI4 +line 1312 +;1312: return; +ADDRGP4 $582 +JUMPV +LABELV $594 +line 1314 +;1313: } +;1314: } +LABELV $592 +line 1316 +;1315: +;1316: if (g_gametype.integer >= GT_TEAM) { +ADDRGP4 g_gametype+12 +INDIRI4 +CNSTI4 5 +LTI4 $608 +line 1318 +;1317: // praise a team mate who just got a reward +;1318: for(i = 0; i < MAX_CLIENTS; i++) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +LABELV $611 +line 1319 +;1319: who = g_entities + i; +ADDRLP4 0 +CNSTI4 828 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ASGNP4 +line 1320 +;1320: if (who->client && who != ent && who->client->sess.sessionTeam == ent->client->sess.sessionTeam) { +ADDRLP4 36 +CNSTI4 408 +ASGNI4 +ADDRLP4 40 +ADDRLP4 0 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 40 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $615 +ADDRLP4 44 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 44 +INDIRP4 +CVPU4 4 +EQU4 $615 +ADDRLP4 48 +CNSTI4 1520 +ASGNI4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRI4 +ADDRLP4 44 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRI4 +NEI4 $615 +line 1321 +;1321: if (who->client->rewardTime > level.time) { +ADDRLP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1684 +ADDP4 +INDIRI4 +ADDRGP4 level+32 +INDIRI4 +LEI4 $617 +line 1322 +;1322: if (!(who->r.svFlags & SVF_BOT)) { +ADDRLP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $620 +line 1323 +;1323: G_Voice( ent, who, SAY_TELL, VOICECHAT_PRAISE, qfalse ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRGP4 $622 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1324 +;1324: } +LABELV $620 +line 1325 +;1325: if (!(ent->r.svFlags & SVF_BOT)) { +ADDRFP4 0 +INDIRP4 +CNSTI4 304 +ADDP4 +INDIRI4 +CNSTI4 8 +BANDI4 +CNSTI4 0 +NEI4 $582 +line 1326 +;1326: G_Voice( ent, ent, SAY_TELL, VOICECHAT_PRAISE, qfalse ); +ADDRLP4 52 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +ARGP4 +ADDRLP4 52 +INDIRP4 +ARGP4 +CNSTI4 2 +ARGI4 +ADDRGP4 $622 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1327 +;1327: } +line 1328 +;1328: return; +ADDRGP4 $582 +JUMPV +LABELV $617 +line 1330 +;1329: } +;1330: } +LABELV $615 +line 1331 +;1331: } +LABELV $612 +line 1318 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 32 +LTI4 $611 +line 1332 +;1332: } +LABELV $608 +line 1335 +;1333: +;1334: // just say something +;1335: G_Voice( ent, NULL, SAY_ALL, VOICECHAT_TAUNT, qfalse ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTP4 0 +ARGP4 +ADDRLP4 32 +CNSTI4 0 +ASGNI4 +ADDRLP4 32 +INDIRI4 +ARGI4 +ADDRGP4 $625 +ARGP4 +ADDRLP4 32 +INDIRI4 +ARGI4 +ADDRGP4 G_Voice +CALLV +pop +line 1336 +;1336:} +LABELV $582 +endproc Cmd_VoiceTaunt_f 56 20 +data +align 4 +LABELV gc_orders +address $626 +address $627 +address $628 +address $629 +address $630 +address $631 +address $632 +export Cmd_GameCommand_f +code +proc Cmd_GameCommand_f 1060 16 +line 1350 +;1337: +;1338: +;1339: +;1340:static char *gc_orders[] = { +;1341: "hold your position", +;1342: "hold this position", +;1343: "come here", +;1344: "cover me", +;1345: "guard location", +;1346: "search and destroy", +;1347: "report" +;1348:}; +;1349: +;1350:void Cmd_GameCommand_f( gentity_t *ent ) { +line 1355 +;1351: int player; +;1352: int order; +;1353: char str[MAX_TOKEN_CHARS]; +;1354: +;1355: trap_Argv( 1, str, sizeof( str ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 1356 +;1356: player = atoi( str ); +ADDRLP4 0 +ARGP4 +ADDRLP4 1032 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 1028 +ADDRLP4 1032 +INDIRI4 +ASGNI4 +line 1357 +;1357: trap_Argv( 2, str, sizeof( str ) ); +CNSTI4 2 +ARGI4 +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 1358 +;1358: order = atoi( str ); +ADDRLP4 0 +ARGP4 +ADDRLP4 1036 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 1024 +ADDRLP4 1036 +INDIRI4 +ASGNI4 +line 1360 +;1359: +;1360: if ( player < 0 || player >= MAX_CLIENTS ) { +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +LTI4 $636 +ADDRLP4 1028 +INDIRI4 +CNSTI4 32 +LTI4 $634 +LABELV $636 +line 1361 +;1361: return; +ADDRGP4 $633 +JUMPV +LABELV $634 +line 1363 +;1362: } +;1363: if ( order < 0 || order > sizeof(gc_orders)/sizeof(char *) ) { +ADDRLP4 1024 +INDIRI4 +CNSTI4 0 +LTI4 $639 +ADDRLP4 1024 +INDIRI4 +CVIU4 4 +CNSTU4 7 +LEU4 $637 +LABELV $639 +line 1364 +;1364: return; +ADDRGP4 $633 +JUMPV +LABELV $637 +line 1366 +;1365: } +;1366: G_Say( ent, &g_entities[player], SAY_TELL, gc_orders[order] ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 828 +ADDRLP4 1028 +INDIRI4 +MULI4 +ADDRGP4 g_entities +ADDP4 +ARGP4 +ADDRLP4 1048 +CNSTI4 2 +ASGNI4 +ADDRLP4 1048 +INDIRI4 +ARGI4 +ADDRLP4 1024 +INDIRI4 +ADDRLP4 1048 +INDIRI4 +LSHI4 +ADDRGP4 gc_orders +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 G_Say +CALLV +pop +line 1367 +;1367: G_Say( ent, ent, SAY_TELL, gc_orders[order] ); +ADDRLP4 1052 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 1052 +INDIRP4 +ARGP4 +ADDRLP4 1052 +INDIRP4 +ARGP4 +ADDRLP4 1056 +CNSTI4 2 +ASGNI4 +ADDRLP4 1056 +INDIRI4 +ARGI4 +ADDRLP4 1024 +INDIRI4 +ADDRLP4 1056 +INDIRI4 +LSHI4 +ADDRGP4 gc_orders +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 G_Say +CALLV +pop +line 1368 +;1368:} +LABELV $633 +endproc Cmd_GameCommand_f 1060 16 +export Cmd_Where_f +proc Cmd_Where_f 8 8 +line 1375 +;1369: +;1370:/* +;1371:================== +;1372:Cmd_Where_f +;1373:================== +;1374:*/ +;1375:void Cmd_Where_f( gentity_t *ent ) { +line 1376 +;1376: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", vtos( ent->s.origin ) ) ); +ADDRFP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +ARGP4 +ADDRLP4 0 +ADDRGP4 vtos +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1377 +;1377:} +LABELV $640 +endproc Cmd_Where_f 8 8 +data +align 4 +LABELV gameNames +address $641 +address $642 +address $643 +address $644 +address $645 +address $646 +address $647 +address $648 +address $649 +export Cmd_CallVote_f +code +proc Cmd_CallVote_f 3144 24 +line 1396 +;1378: +;1379:static const char *gameNames[] = { +;1380: "Free For All", +;1381: "Holocron FFA", +;1382: "Jedi Master", +;1383: "Duel", +;1384: "Single Player", +;1385: "Team FFA", +;1386: "N/A", +;1387: "Capture the Flag", +;1388: "Capture the Ysalamiri" +;1389:}; +;1390: +;1391:/* +;1392:================== +;1393:Cmd_CallVote_f +;1394:================== +;1395:*/ +;1396:void Cmd_CallVote_f( gentity_t *ent ) { +line 1401 +;1397: int i; +;1398: char arg1[MAX_STRING_TOKENS]; +;1399: char arg2[MAX_STRING_TOKENS]; +;1400: +;1401: if ( !g_allowVote.integer ) { +ADDRGP4 g_allowVote+12 +INDIRI4 +CNSTI4 0 +NEI4 $651 +line 1402 +;1402: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "NOVOTE")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $654 +ARGP4 +ADDRLP4 2052 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 2052 +INDIRP4 +ARGP4 +ADDRLP4 2056 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 2056 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1403 +;1403: return; +ADDRGP4 $650 +JUMPV +LABELV $651 +line 1406 +;1404: } +;1405: +;1406: if ( level.voteTime ) { +ADDRGP4 level+2276 +INDIRI4 +CNSTI4 0 +EQI4 $655 +line 1407 +;1407: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "VOTEINPROGRESS")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $658 +ARGP4 +ADDRLP4 2052 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 2052 +INDIRP4 +ARGP4 +ADDRLP4 2056 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 2056 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1408 +;1408: return; +ADDRGP4 $650 +JUMPV +LABELV $655 +line 1410 +;1409: } +;1410: if ( ent->client->pers.voteCount >= MAX_VOTE_COUNT ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1508 +ADDP4 +INDIRI4 +CNSTI4 3 +LTI4 $659 +line 1411 +;1411: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "MAXVOTES")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $661 +ARGP4 +ADDRLP4 2052 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 2052 +INDIRP4 +ARGP4 +ADDRLP4 2056 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 2056 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1412 +;1412: return; +ADDRGP4 $650 +JUMPV +LABELV $659 +line 1414 +;1413: } +;1414: if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 408 +ADDP4 +INDIRP4 +CNSTI4 1520 +ADDP4 +INDIRI4 +CNSTI4 3 +NEI4 $662 +line 1415 +;1415: trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", G_GetStripEdString("SVINGAME", "NOSPECVOTE")) ); +ADDRGP4 $116 +ARGP4 +ADDRGP4 $664 +ARGP4 +ADDRLP4 2052 +ADDRGP4 G_GetStripEdString +CALLP4 +ASGNP4 +ADDRGP4 $115 +ARGP4 +ADDRLP4 2052 +INDIRP4 +ARGP4 +ADDRLP4 2056 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRLP4 2056 +INDIRP4 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1416 +;1416: return; +ADDRGP4 $650 +JUMPV +LABELV $662 +line 1420 +;1417: } +;1418: +;1419: // make sure it is a valid command to vote on +;1420: trap_Argv( 1, arg1, sizeof( arg1 ) ); +CNSTI4 1 +ARGI4 +ADDRLP4 4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 1421 +;1421: trap_Argv( 2, arg2, sizeof( arg2 ) ); +CNSTI4 2 +ARGI4 +ADDRLP4 1028 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 1423 +;1422: +;1423: if( strchr( arg1, ';' ) || strchr( arg2, ';' ) ) { +ADDRLP4 4 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 2052 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 2052 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $667 +ADDRLP4 1028 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 2056 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 2056 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $665 +LABELV $667 +line 1424 +;1424: trap_SendServerCommand( ent-g_entities, "print \"Invalid vote string.\n\"" ); +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRGP4 $668 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1425 +;1425: return; +ADDRGP4 $650 +JUMPV +LABELV $665 +line 1428 +;1426: } +;1427: +;1428: if ( !Q_stricmp( arg1, "map_restart" ) ) { +ADDRLP4 4 +ARGP4 +ADDRGP4 $671 +ARGP4 +ADDRLP4 2060 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2060 +INDIRI4 +CNSTI4 0 +NEI4 $669 +line 1429 +;1429: } else if ( !Q_stricmp( arg1, "nextmap" ) ) { +ADDRGP4 $670 +JUMPV +LABELV $669 +ADDRLP4 4 +ARGP4 +ADDRGP4 $674 +ARGP4 +ADDRLP4 2064 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2064 +INDIRI4 +CNSTI4 0 +NEI4 $672 +line 1430 +;1430: } else if ( !Q_stricmp( arg1, "map" ) ) { +ADDRGP4 $673 +JUMPV +LABELV $672 +ADDRLP4 4 +ARGP4 +ADDRGP4 $677 +ARGP4 +ADDRLP4 2068 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2068 +INDIRI4 +CNSTI4 0 +NEI4 $675 +line 1431 +;1431: } else if ( !Q_stricmp( arg1, "g_gametype" ) ) { +ADDRGP4 $676 +JUMPV +LABELV $675 +ADDRLP4 4 +ARGP4 +ADDRGP4 $680 +ARGP4 +ADDRLP4 2072 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2072 +INDIRI4 +CNSTI4 0 +NEI4 $678 +line 1432 +;1432: } else if ( !Q_stricmp( arg1, "kick" ) ) { +ADDRGP4 $679 +JUMPV +LABELV $678 +ADDRLP4 4 +ARGP4 +ADDRGP4 $683 +ARGP4 +ADDRLP4 2076 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2076 +INDIRI4 +CNSTI4 0 +NEI4 $681 +line 1433 +;1433: } else if ( !Q_stricmp( arg1, "clientkick" ) ) { +ADDRGP4 $682 +JUMPV +LABELV $681 +ADDRLP4 4 +ARGP4 +ADDRGP4 $686 +ARGP4 +ADDRLP4 2080 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2080 +INDIRI4 +CNSTI4 0 +NEI4 $684 +line 1434 +;1434: } else if ( !Q_stricmp( arg1, "g_doWarmup" ) ) { +ADDRGP4 $685 +JUMPV +LABELV $684 +ADDRLP4 4 +ARGP4 +ADDRGP4 $689 +ARGP4 +ADDRLP4 2084 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2084 +INDIRI4 +CNSTI4 0 +NEI4 $687 +line 1435 +;1435: } else if ( !Q_stricmp( arg1, "timelimit" ) ) { +ADDRGP4 $688 +JUMPV +LABELV $687 +ADDRLP4 4 +ARGP4 +ADDRGP4 $692 +ARGP4 +ADDRLP4 2088 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2088 +INDIRI4 +CNSTI4 0 +NEI4 $690 +line 1436 +;1436: } else if ( !Q_stricmp( arg1, "fraglimit" ) ) { +ADDRGP4 $691 +JUMPV +LABELV $690 +ADDRLP4 4 +ARGP4 +ADDRGP4 $695 +ARGP4 +ADDRLP4 2092 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 2092 +INDIRI4 +CNSTI4 0 +NEI4 $693 +line 1437 +;1437: } else { +ADDRGP4 $694 +JUMPV +LABELV $693 +line 1438 +;1438: trap_SendServerCommand( ent-g_entities, "print \"Invalid vote string.\n\"" ); +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRGP4 g_entities +CVPU4 4 +SUBU4 +CVUI4 4 +CNSTI4 828 +DIVI4 +ARGI4 +ADDRGP4 $668 +ARGP4 +ADDRGP4 trap_SendServerCommand +CALLV +pop +line 1439 +;1439: trap_SendServerCommand( ent-g_entities, "print \"Vote commands are: map_restart, nextmap, map , g_gametype , kick , clientkick , g_doWarmup, timelimit

 

Build Log

+--------------------Configuration: ui - Win32 Release JK2-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP67C.tmp" with contents +[ +/nologo /G6 /ML /W4 /GX /Zi /O2 /D "NDEBUG" /D "_USRDL" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "UI_EXPORTS" /D "MISSIONPACK" /D "_JK2" /Fp"../Release/ui/ui.pch" /YX /Fo"../Release/ui/" /Fd"../Release/ui/" /FD /c +"C:\projects\jk2\CODE-mp\ui\ui_main.c" +] +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP67C.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP67D.tmp" with contents +[ +/nologo /base:"0x40000000" /dll /incremental:no /pdb:"../Release/uix86.pdb" /map:"../Release/ui/uix86.map" /debug /machine:I386 /def:".\ui.def" /out:"../Release/uix86.dll" /implib:"../Release/uix86.lib" +"\projects\jk2\CODE-mp\Release\ui\bg_misc.obj" +"\projects\jk2\CODE-mp\Release\ui\bg_weapons.obj" +"\projects\jk2\CODE-mp\Release\ui\q_math.obj" +"\projects\jk2\CODE-mp\Release\ui\q_shared.obj" +"\projects\jk2\CODE-mp\Release\ui\ui_atoms.obj" +"\projects\jk2\CODE-mp\Release\ui\ui_force.obj" +"\projects\jk2\CODE-mp\Release\ui\ui_gameinfo.obj" +"\projects\jk2\CODE-mp\Release\ui\ui_main.obj" +"\projects\jk2\CODE-mp\Release\ui\ui_shared.obj" +"\projects\jk2\CODE-mp\Release\ui\ui_syscalls.obj" +"\projects\jk2\CODE-mp\Release\ui\ui_util.obj" +] +Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP67D.tmp" +

Output Window

+Compiling... +ui_main.c +Linking... + Creating library ../Release/uix86.lib and object ../Release/uix86.exp +

+--------------------Configuration: jk2mp - Win32 Release JK2-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP686.tmp" with contents +[ +/nologo /G6 /ML /W4 /GX /Zi /O2 /Ob0 /D "_WIN32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_JK2" /Fp".\Release\jk2/jk2mp.pch" /YX /Fo".\Release\jk2/" /Fd".\Release\jk2/" /FD /c +"C:\projects\jk2\CODE-mp\client\cl_console.cpp" +"C:\projects\jk2\CODE-mp\qcommon\common.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP686.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP687.tmp" with contents +[ +advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:no /pdb:".\Release/jk2mp.pdb" /map:"Release/jk2mp.map" /debug /machine:I386 /out:".\Release/jk2mp.exe" +".\Release\jk2\cl_cgame.obj" +".\Release\jk2\cl_cin.obj" +".\Release\jk2\cl_console.obj" +".\Release\jk2\cl_input.obj" +".\Release\jk2\cl_keys.obj" +".\Release\jk2\cl_main.obj" +".\Release\jk2\cl_net_chan.obj" +".\Release\jk2\cl_parse.obj" +".\Release\jk2\cl_scrn.obj" +".\Release\jk2\cl_ui.obj" +".\Release\jk2\FXExport.obj" +".\Release\jk2\FxPrimitives.obj" +".\Release\jk2\FxScheduler.obj" +".\Release\jk2\FxSystem.obj" +".\Release\jk2\FxTemplate.obj" +".\Release\jk2\FxUtil.obj" +".\Release\jk2\cm_load.obj" +".\Release\jk2\cm_patch.obj" +".\Release\jk2\cm_polylib.obj" +".\Release\jk2\cm_shader.obj" +".\Release\jk2\cm_test.obj" +".\Release\jk2\cm_trace.obj" +".\Release\jk2\cmd.obj" +".\Release\jk2\CNetProfile.obj" +".\Release\jk2\common.obj" +".\Release\jk2\cvar.obj" +".\Release\jk2\files.obj" +".\Release\jk2\GenericParser2.obj" +".\Release\jk2\hstring.obj" +".\Release\jk2\huffman.obj" +".\Release\jk2\md4.obj" +".\Release\jk2\msg.obj" +".\Release\jk2\net_chan.obj" +".\Release\jk2\q_math.obj" +".\Release\jk2\q_shared.obj" +".\Release\jk2\RoffSystem.obj" +".\Release\jk2\strip.obj" +".\Release\jk2\unzip.obj" +".\Release\jk2\vm.obj" +".\Release\jk2\vm_interpreted.obj" +".\Release\jk2\vm_x86.obj" +".\Release\jk2\win_input.obj" +".\Release\jk2\win_main.obj" +".\Release\jk2\win_net.obj" +".\Release\jk2\win_shared.obj" +".\Release\jk2\win_snd.obj" +".\Release\jk2\win_syscon.obj" +".\Release\jk2\win_wndproc.obj" +".\Release\jk2\sv_bot.obj" +".\Release\jk2\sv_ccmds.obj" +".\Release\jk2\sv_client.obj" +".\Release\jk2\sv_game.obj" +".\Release\jk2\sv_init.obj" +".\Release\jk2\sv_main.obj" +".\Release\jk2\sv_net_chan.obj" +".\Release\jk2\sv_snapshot.obj" +".\Release\jk2\sv_world.obj" +".\Release\jk2\cdct.obj" +".\Release\jk2\csbt.obj" +".\Release\jk2\csbtb.obj" +".\Release\jk2\csbtl3.obj" +".\Release\jk2\cup.obj" +".\Release\jk2\cupini.obj" +".\Release\jk2\cupl1.obj" +".\Release\jk2\cupl3.obj" +".\Release\jk2\cwin.obj" +".\Release\jk2\cwinb.obj" +".\Release\jk2\cwinm.obj" +".\Release\jk2\hwin.obj" +".\Release\jk2\l3dq.obj" +".\Release\jk2\l3init.obj" +".\Release\jk2\mdct.obj" +".\Release\jk2\mhead.obj" +".\Release\jk2\msis.obj" +".\Release\jk2\towave.obj" +".\Release\jk2\uph.obj" +".\Release\jk2\upsf.obj" +".\Release\jk2\wavep.obj" +".\Release\jk2\snd_dma.obj" +".\Release\jk2\snd_mem.obj" +".\Release\jk2\snd_mix.obj" +".\Release\jk2\snd_mp3.obj" +".\Release\jk2\jcapimin.obj" +".\Release\jk2\jccoefct.obj" +".\Release\jk2\jccolor.obj" +".\Release\jk2\jcdctmgr.obj" +".\Release\jk2\jchuff.obj" +".\Release\jk2\jcinit.obj" +".\Release\jk2\jcmainct.obj" +".\Release\jk2\jcmarker.obj" +".\Release\jk2\jcmaster.obj" +".\Release\jk2\jcomapi.obj" +".\Release\jk2\jcparam.obj" +".\Release\jk2\jcphuff.obj" +".\Release\jk2\jcprepct.obj" +".\Release\jk2\jcsample.obj" +".\Release\jk2\jctrans.obj" +".\Release\jk2\jdapimin.obj" +".\Release\jk2\jdapistd.obj" +".\Release\jk2\jdatadst.obj" +".\Release\jk2\jdatasrc.obj" +".\Release\jk2\jdcoefct.obj" +".\Release\jk2\jdcolor.obj" +".\Release\jk2\jddctmgr.obj" +".\Release\jk2\jdhuff.obj" +".\Release\jk2\jdinput.obj" +".\Release\jk2\jdmainct.obj" +".\Release\jk2\jdmarker.obj" +".\Release\jk2\jdmaster.obj" +".\Release\jk2\jdpostct.obj" +".\Release\jk2\jdsample.obj" +".\Release\jk2\jdtrans.obj" +".\Release\jk2\jerror.obj" +".\Release\jk2\jfdctflt.obj" +".\Release\jk2\jidctflt.obj" +".\Release\jk2\jmemmgr.obj" +".\Release\jk2\jmemnobs.obj" +".\Release\jk2\jutils.obj" +".\Release\jk2\png.obj" +".\Release\jk2\matcomp.obj" +".\Release\jk2\tr_animation.obj" +".\Release\jk2\tr_backend.obj" +".\Release\jk2\tr_bsp.obj" +".\Release\jk2\tr_cmds.obj" +".\Release\jk2\tr_curve.obj" +".\Release\jk2\tr_flares.obj" +".\Release\jk2\tr_font.obj" +".\Release\jk2\tr_ghoul2.obj" +".\Release\jk2\tr_image.obj" +".\Release\jk2\tr_init.obj" +".\Release\jk2\tr_light.obj" +".\Release\jk2\tr_main.obj" +".\Release\jk2\tr_marks.obj" +".\Release\jk2\tr_mesh.obj" +".\Release\jk2\tr_model.obj" +".\Release\jk2\tr_noise.obj" +".\Release\jk2\tr_quicksprite.obj" +".\Release\jk2\tr_scene.obj" +".\Release\jk2\tr_shade.obj" +".\Release\jk2\tr_shade_calc.obj" +".\Release\jk2\tr_shader.obj" +".\Release\jk2\tr_shadows.obj" +".\Release\jk2\tr_sky.obj" +".\Release\jk2\tr_surface.obj" +".\Release\jk2\tr_surfacesprites.obj" +".\Release\jk2\tr_world.obj" +".\Release\jk2\tr_WorldEffects.obj" +".\Release\jk2\win_gamma.obj" +".\Release\jk2\win_glimp.obj" +".\Release\jk2\win_qgl.obj" +".\Release\jk2\G2_API.obj" +".\Release\jk2\G2_bolts.obj" +".\Release\jk2\G2_bones.obj" +".\Release\jk2\G2_misc.obj" +".\Release\jk2\G2_surfaces.obj" +".\Release\jk2\adler32.obj" +".\Release\jk2\crc32.obj" +".\Release\jk2\deflate.obj" +".\Release\jk2\infblock.obj" +".\Release\jk2\infcodes.obj" +".\Release\jk2\inffast.obj" +".\Release\jk2\inflate.obj" +".\Release\jk2\inftrees.obj" +".\Release\jk2\infutil.obj" +".\Release\jk2\trees.obj" +".\Release\jk2\zutil.obj" +".\Release\jk2\buffer.obj" +".\Release\jk2\cpp_interface.obj" +".\Release\jk2\sockets.obj" +".\Release\jk2\winquake.res" +".\Release\botlib.lib" +".\Release\uix86.lib" +".\Release\cgamex86.lib" +".\Release\jk2mpgamex86.lib" +] +Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP687.tmp" +

Output Window

+Compiling... +cl_console.cpp +common.cpp +Linking... + + + +

Results

+jk2mp.exe - 0 error(s), 0 warning(s) +

+--------------------Configuration: ui - Win32 Debug JK2-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68C.tmp" with contents +[ +/nologo /G6 /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "_USRDLL" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "UI_EXPORTS" /D "MISSIONPACK" /D "_JK2" /FR"../Debug/ui/" /Fp"../Debug/ui/ui.pch" /YX /Fo"../Debug/ui/" /Fd"../Debug/ui/" /FD /GZ /c +"C:\projects\jk2\CODE-mp\ui\ui_main.c" +] +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68C.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68D.tmp" with contents +[ +/nologo /base:"0x40000000" /dll /incremental:yes /pdb:"../Debug/uix86.pdb" /map:"../Debug/ui/uix86.map" /debug /machine:I386 /def:".\ui.def" /out:"../Debug/uix86.dll" /implib:"../Debug/uix86.lib" /pdbtype:sept +"\projects\jk2\CODE-mp\Debug\ui\bg_misc.obj" +"\projects\jk2\CODE-mp\Debug\ui\bg_weapons.obj" +"\projects\jk2\CODE-mp\Debug\ui\q_math.obj" +"\projects\jk2\CODE-mp\Debug\ui\q_shared.obj" +"\projects\jk2\CODE-mp\Debug\ui\ui_atoms.obj" +"\projects\jk2\CODE-mp\Debug\ui\ui_force.obj" +"\projects\jk2\CODE-mp\Debug\ui\ui_gameinfo.obj" +"\projects\jk2\CODE-mp\Debug\ui\ui_main.obj" +"\projects\jk2\CODE-mp\Debug\ui\ui_shared.obj" +"\projects\jk2\CODE-mp\Debug\ui\ui_syscalls.obj" +"\projects\jk2\CODE-mp\Debug\ui\ui_util.obj" +] +Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68D.tmp" +

Output Window

+Compiling... +ui_main.c +Linking... +

--------------------Configuration: jk2mp - Win32 Debug JK2--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP64B.tmp" with contents +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68F.tmp" with contents [ /nologo /G6 /MLd /W3 /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_JK2" /D "MEM_DEBUG" /Fr".\Debug\jk2/" /Fo".\Debug\jk2/" /Fd".\Debug\jk2/" /FD /GZ /c -"C:\projects\jk2\CODE-mp\win32\win_wndproc.cpp" +"C:\projects\jk2\CODE-mp\client\cl_console.cpp" +"C:\projects\jk2\CODE-mp\qcommon\common.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP64B.tmp" -Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP64C.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68F.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP690.tmp" with contents [ ./debug/jk2/smrtheap.obj advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:yes /pdb:".\Debug/jk2mp.pdb" /map:"Debug/jk2mp.map" /debug /machine:I386 /out:".\Debug/jk2mp.exe" ".\Debug\jk2\0_SH_Leak.obj" @@ -35,6 +297,7 @@ Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP64C.tmp" with cont ".\Debug\jk2\cm_load.obj" ".\Debug\jk2\cm_patch.obj" ".\Debug\jk2\cm_polylib.obj" +".\Debug\jk2\cm_shader.obj" ".\Debug\jk2\cm_test.obj" ".\Debug\jk2\cm_trace.obj" ".\Debug\jk2\cmd.obj" @@ -192,10 +455,243 @@ Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP64C.tmp" with cont ".\Debug\cgamex86.lib" ".\Debug\jk2mpgamex86.lib" ] -Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP64C.tmp" +Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP690.tmp"

Output Window

Compiling... -win_wndproc.cpp +cl_console.cpp +common.cpp +Generating Code... +Linking... + + + +

Results

+jk2mp.exe - 0 error(s), 0 warning(s) +

+--------------------Configuration: ui - Win32 Final JK2-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP692.tmp" with contents +[ +/nologo /G6 /ML /W4 /GX /O2 /D "NDEBUG" /D "_USRDL" /D "_WINDOWS" /D "_MBCS" /D "UI_EXPORTS" /D "MISSIONPACK" /D "WIN32" /D "_JK2" /D "FINAL_BUILD" /Fp"../Final/ui/ui.pch" /YX /Fo"../Final/ui/" /Fd"../Final/ui/" /FD /c +"C:\projects\jk2\CODE-mp\ui\ui_main.c" +] +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP692.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP693.tmp" with contents +[ +/nologo /base:"0x40000000" /dll /incremental:no /pdb:"../Final/uix86.pdb" /map:"../Final/ui/uix86.map" /debug /machine:I386 /def:".\ui.def" /out:"../Final/uix86.dll" /implib:"../Final/uix86.lib" +"\projects\jk2\CODE-mp\Final\ui\bg_misc.obj" +"\projects\jk2\CODE-mp\Final\ui\bg_weapons.obj" +"\projects\jk2\CODE-mp\Final\ui\q_math.obj" +"\projects\jk2\CODE-mp\Final\ui\q_shared.obj" +"\projects\jk2\CODE-mp\Final\ui\ui_atoms.obj" +"\projects\jk2\CODE-mp\Final\ui\ui_force.obj" +"\projects\jk2\CODE-mp\Final\ui\ui_gameinfo.obj" +"\projects\jk2\CODE-mp\Final\ui\ui_main.obj" +"\projects\jk2\CODE-mp\Final\ui\ui_shared.obj" +"\projects\jk2\CODE-mp\Final\ui\ui_syscalls.obj" +"\projects\jk2\CODE-mp\Final\ui\ui_util.obj" +] +Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP693.tmp" +

Output Window

+Compiling... +ui_main.c +Linking... + Creating library ../Final/uix86.lib and object ../Final/uix86.exp +

+--------------------Configuration: jk2mp - Win32 Final JK2-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP698.tmp" with contents +[ +/nologo /G6 /ML /W4 /GX /O2 /Ob0 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WIN32" /D "_JK2" /D "FINAL_BUILD" /Fp".\Final\jk2/jk2mp.pch" /YX /Fo".\Final\jk2/" /Fd".\Final\jk2/" /FD /c +"C:\projects\jk2\CODE-mp\client\cl_console.cpp" +"C:\projects\jk2\CODE-mp\qcommon\common.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP698.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP699.tmp" with contents +[ +advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:no /pdb:".\Final/jk2mp.pdb" /map:"Final/jk2mp.map" /machine:I386 /out:".\Final/jk2mp.exe" +".\Final\jk2\cl_cgame.obj" +".\Final\jk2\cl_cin.obj" +".\Final\jk2\cl_console.obj" +".\Final\jk2\cl_input.obj" +".\Final\jk2\cl_keys.obj" +".\Final\jk2\cl_main.obj" +".\Final\jk2\cl_net_chan.obj" +".\Final\jk2\cl_parse.obj" +".\Final\jk2\cl_scrn.obj" +".\Final\jk2\cl_ui.obj" +".\Final\jk2\FXExport.obj" +".\Final\jk2\FxPrimitives.obj" +".\Final\jk2\FxScheduler.obj" +".\Final\jk2\FxSystem.obj" +".\Final\jk2\FxTemplate.obj" +".\Final\jk2\FxUtil.obj" +".\Final\jk2\cm_load.obj" +".\Final\jk2\cm_patch.obj" +".\Final\jk2\cm_polylib.obj" +".\Final\jk2\cm_shader.obj" +".\Final\jk2\cm_test.obj" +".\Final\jk2\cm_trace.obj" +".\Final\jk2\cmd.obj" +".\Final\jk2\CNetProfile.obj" +".\Final\jk2\common.obj" +".\Final\jk2\cvar.obj" +".\Final\jk2\files.obj" +".\Final\jk2\GenericParser2.obj" +".\Final\jk2\hstring.obj" +".\Final\jk2\huffman.obj" +".\Final\jk2\md4.obj" +".\Final\jk2\msg.obj" +".\Final\jk2\net_chan.obj" +".\Final\jk2\q_math.obj" +".\Final\jk2\q_shared.obj" +".\Final\jk2\RoffSystem.obj" +".\Final\jk2\strip.obj" +".\Final\jk2\unzip.obj" +".\Final\jk2\vm.obj" +".\Final\jk2\vm_interpreted.obj" +".\Final\jk2\vm_x86.obj" +".\Final\jk2\win_input.obj" +".\Final\jk2\win_main.obj" +".\Final\jk2\win_net.obj" +".\Final\jk2\win_shared.obj" +".\Final\jk2\win_snd.obj" +".\Final\jk2\win_syscon.obj" +".\Final\jk2\win_wndproc.obj" +".\Final\jk2\sv_bot.obj" +".\Final\jk2\sv_ccmds.obj" +".\Final\jk2\sv_client.obj" +".\Final\jk2\sv_game.obj" +".\Final\jk2\sv_init.obj" +".\Final\jk2\sv_main.obj" +".\Final\jk2\sv_net_chan.obj" +".\Final\jk2\sv_snapshot.obj" +".\Final\jk2\sv_world.obj" +".\Final\jk2\cdct.obj" +".\Final\jk2\csbt.obj" +".\Final\jk2\csbtb.obj" +".\Final\jk2\csbtl3.obj" +".\Final\jk2\cup.obj" +".\Final\jk2\cupini.obj" +".\Final\jk2\cupl1.obj" +".\Final\jk2\cupl3.obj" +".\Final\jk2\cwin.obj" +".\Final\jk2\cwinb.obj" +".\Final\jk2\cwinm.obj" +".\Final\jk2\hwin.obj" +".\Final\jk2\l3dq.obj" +".\Final\jk2\l3init.obj" +".\Final\jk2\mdct.obj" +".\Final\jk2\mhead.obj" +".\Final\jk2\msis.obj" +".\Final\jk2\towave.obj" +".\Final\jk2\uph.obj" +".\Final\jk2\upsf.obj" +".\Final\jk2\wavep.obj" +".\Final\jk2\snd_dma.obj" +".\Final\jk2\snd_mem.obj" +".\Final\jk2\snd_mix.obj" +".\Final\jk2\snd_mp3.obj" +".\Final\jk2\jcapimin.obj" +".\Final\jk2\jccoefct.obj" +".\Final\jk2\jccolor.obj" +".\Final\jk2\jcdctmgr.obj" +".\Final\jk2\jchuff.obj" +".\Final\jk2\jcinit.obj" +".\Final\jk2\jcmainct.obj" +".\Final\jk2\jcmarker.obj" +".\Final\jk2\jcmaster.obj" +".\Final\jk2\jcomapi.obj" +".\Final\jk2\jcparam.obj" +".\Final\jk2\jcphuff.obj" +".\Final\jk2\jcprepct.obj" +".\Final\jk2\jcsample.obj" +".\Final\jk2\jctrans.obj" +".\Final\jk2\jdapimin.obj" +".\Final\jk2\jdapistd.obj" +".\Final\jk2\jdatadst.obj" +".\Final\jk2\jdatasrc.obj" +".\Final\jk2\jdcoefct.obj" +".\Final\jk2\jdcolor.obj" +".\Final\jk2\jddctmgr.obj" +".\Final\jk2\jdhuff.obj" +".\Final\jk2\jdinput.obj" +".\Final\jk2\jdmainct.obj" +".\Final\jk2\jdmarker.obj" +".\Final\jk2\jdmaster.obj" +".\Final\jk2\jdpostct.obj" +".\Final\jk2\jdsample.obj" +".\Final\jk2\jdtrans.obj" +".\Final\jk2\jerror.obj" +".\Final\jk2\jfdctflt.obj" +".\Final\jk2\jidctflt.obj" +".\Final\jk2\jmemmgr.obj" +".\Final\jk2\jmemnobs.obj" +".\Final\jk2\jutils.obj" +".\Final\jk2\png.obj" +".\Final\jk2\matcomp.obj" +".\Final\jk2\tr_animation.obj" +".\Final\jk2\tr_backend.obj" +".\Final\jk2\tr_bsp.obj" +".\Final\jk2\tr_cmds.obj" +".\Final\jk2\tr_curve.obj" +".\Final\jk2\tr_flares.obj" +".\Final\jk2\tr_font.obj" +".\Final\jk2\tr_ghoul2.obj" +".\Final\jk2\tr_image.obj" +".\Final\jk2\tr_init.obj" +".\Final\jk2\tr_light.obj" +".\Final\jk2\tr_main.obj" +".\Final\jk2\tr_marks.obj" +".\Final\jk2\tr_mesh.obj" +".\Final\jk2\tr_model.obj" +".\Final\jk2\tr_noise.obj" +".\Final\jk2\tr_quicksprite.obj" +".\Final\jk2\tr_scene.obj" +".\Final\jk2\tr_shade.obj" +".\Final\jk2\tr_shade_calc.obj" +".\Final\jk2\tr_shader.obj" +".\Final\jk2\tr_shadows.obj" +".\Final\jk2\tr_sky.obj" +".\Final\jk2\tr_surface.obj" +".\Final\jk2\tr_surfacesprites.obj" +".\Final\jk2\tr_world.obj" +".\Final\jk2\tr_WorldEffects.obj" +".\Final\jk2\win_gamma.obj" +".\Final\jk2\win_glimp.obj" +".\Final\jk2\win_qgl.obj" +".\Final\jk2\G2_API.obj" +".\Final\jk2\G2_bolts.obj" +".\Final\jk2\G2_bones.obj" +".\Final\jk2\G2_misc.obj" +".\Final\jk2\G2_surfaces.obj" +".\Final\jk2\adler32.obj" +".\Final\jk2\crc32.obj" +".\Final\jk2\deflate.obj" +".\Final\jk2\infblock.obj" +".\Final\jk2\infcodes.obj" +".\Final\jk2\inffast.obj" +".\Final\jk2\inflate.obj" +".\Final\jk2\inftrees.obj" +".\Final\jk2\infutil.obj" +".\Final\jk2\trees.obj" +".\Final\jk2\zutil.obj" +".\Final\jk2\buffer.obj" +".\Final\jk2\cpp_interface.obj" +".\Final\jk2\sockets.obj" +".\Final\jk2\winquake.res" +".\Final\botlib.lib" +".\Final\uix86.lib" +".\Final\cgamex86.lib" +".\Final\jk2mpgamex86.lib" +] +Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP699.tmp" +

Output Window

+Compiling... +cl_console.cpp +common.cpp Linking... diff --git a/CODE-mp/mssccprj.scc b/CODE-mp/mssccprj.scc new file mode 100644 index 0000000..3ec70d1 --- /dev/null +++ b/CODE-mp/mssccprj.scc @@ -0,0 +1,5 @@ +SCC = This is a Source Code Control file + +[jk2mp.dsp] +SCC_Aux_Path = "\\ravend\vss_projects\jk2sof2MP" +SCC_Project_Name = "$/General/code", EAAAAAAA diff --git a/CODE-mp/null/null_glimp.c b/CODE-mp/null/null_glimp.c new file mode 100644 index 0000000..2ca9693 --- /dev/null +++ b/CODE-mp/null/null_glimp.c @@ -0,0 +1,69 @@ +#include "../renderer/tr_local.h" + +#ifdef _WIN32 +BOOL (WINAPI * qwglSwapIntervalEXT)( int interval ); +void (APIENTRY * qglMultiTexCoord2fARB )( GLenum texture, float s, float t ); +void (APIENTRY * qglActiveTextureARB )( GLenum texture ); +void (APIENTRY * qglClientActiveTextureARB )( GLenum texture ); + + +void (APIENTRY * qglLockArraysEXT)( int, int); +void (APIENTRY * qglUnlockArraysEXT) ( void ); + + +void GLimp_EndFrame( void ) { +} + +void GLimp_Init( void ) +{ +} + +void GLimp_Shutdown( void ) { +} + +void GLimp_EnableLogging( qboolean enable ) { +} + +void GLimp_LogComment( char *comment ) { +} + +qboolean QGL_Init( const char *dllname ) { + return qtrue; +} + +void QGL_Shutdown( void ) { +} +#else +qboolean ( * qwglSwapIntervalEXT)( int interval ); +void ( * qglMultiTexCoord2fARB )( GLenum texture, float s, float t ); +void ( * qglActiveTextureARB )( GLenum texture ); +void ( * qglClientActiveTextureARB )( GLenum texture ); + + +void ( * qglLockArraysEXT)( int, int); +void ( * qglUnlockArraysEXT) ( void ); + + +void GLimp_EndFrame( void ) { +} + +void GLimp_Init( void ) +{ +} + +void GLimp_Shutdown( void ) { +} + +void GLimp_EnableLogging( qboolean enable ) { +} + +void GLimp_LogComment( char *comment ) { +} + +qboolean QGL_Init( const char *dllname ) { + return qtrue; +} + +void QGL_Shutdown( void ) { +} +#endif // !WIN32 diff --git a/CODE-mp/null/null_renderer.c b/CODE-mp/null/null_renderer.c new file mode 100644 index 0000000..dadb28c --- /dev/null +++ b/CODE-mp/null/null_renderer.c @@ -0,0 +1,21 @@ +/* Null renderer functions */ + +void RB_StageIteratorGeneric(void) +{ +} + +void RB_StageIteratorSky(void) +{ +} + +void RB_StageIteratorVertexLitTexture(void) +{ +} + +void RB_StageIteratorLightmappedMultitexture(void) +{ +} + +void R_SyncRenderThread(void) +{ +} diff --git a/CODE-mp/null/null_snddma.c b/CODE-mp/null/null_snddma.c new file mode 100644 index 0000000..eb2afce --- /dev/null +++ b/CODE-mp/null/null_snddma.c @@ -0,0 +1,49 @@ + +// snddma_null.c +// all other sound mixing is portable + +#include "../client/client.h" + +qboolean gbInsideLoadSound = qfalse; // important to default to this!!! + +qboolean SNDDMA_Init(void) +{ + return qfalse; +} + +int SNDDMA_GetDMAPos(void) +{ + return 0; +} + +void SNDDMA_Shutdown(void) +{ +} + +void SNDDMA_BeginPainting (void) +{ +} + +void SNDDMA_Submit(void) +{ +} + +sfxHandle_t S_RegisterSound( const char *name ) { + return 0; +} + +void S_StartLocalSound( sfxHandle_t sfxHandle, int channelNum ) { +} + +void S_ClearSoundBuffer( void ) { +} + +qboolean SND_RegisterAudio_LevelLoadEnd(qboolean something) +{ + return qfalse; +} + +int SND_FreeOldestSound(void) +{ + return 0; +} \ No newline at end of file diff --git a/CODE-mp/qcommon/cm_load.cpp b/CODE-mp/qcommon/cm_load.cpp index 5dcd38b..38eeafa 100644 --- a/CODE-mp/qcommon/cm_load.cpp +++ b/CODE-mp/qcommon/cm_load.cpp @@ -91,6 +91,7 @@ void CMod_LoadShaders( lump_t *l ) out->contentFlags = LittleLong( in->contentFlags ); out->surfaceFlags = LittleLong( in->surfaceFlags ); } + CM_SetupShaderProperties(); } @@ -673,6 +674,9 @@ static void CM_LoadMap_Actual( const char *name, qboolean clientload, int *check , name, header.version, BSP_VERSION ); } + // Load in the shader text - return instantly if already loaded + CM_LoadShaderText(qfalse); + cmod_base = (byte *)buf; // load into heap @@ -743,6 +747,10 @@ CM_ClearMap */ void CM_ClearMap( void ) { +#if !defined(BSPC) + CM_ShutdownShaderProperties(); +#endif + Com_Memset( &cm, 0, sizeof( cm ) ); CM_ClearLevelPatches(); } diff --git a/CODE-mp/qcommon/cm_local.h b/CODE-mp/qcommon/cm_local.h index 47e388c..08f9256 100644 --- a/CODE-mp/qcommon/cm_local.h +++ b/CODE-mp/qcommon/cm_local.h @@ -194,3 +194,10 @@ struct patchCollide_s *CM_GeneratePatchCollide( int width, int height, vec3_t *p void CM_TraceThroughPatchCollide( traceWork_t *tw, const struct patchCollide_s *pc ); qboolean CM_PositionTestInPatchCollide( traceWork_t *tw, const struct patchCollide_s *pc ); void CM_ClearLevelPatches( void ); + +// cm_shader.cpp +void CM_SetupShaderProperties( void ); +void CM_ShutdownShaderProperties(void); +CCMShader *CM_GetShaderInfo( const char *name ); +CCMShader *CM_GetShaderInfo( int shaderNum ); +int CM_HandleDamageShader(int sideNum, int damage); diff --git a/CODE-mp/qcommon/common.cpp b/CODE-mp/qcommon/common.cpp index f412a42..9aeb1f3 100644 --- a/CODE-mp/qcommon/common.cpp +++ b/CODE-mp/qcommon/common.cpp @@ -278,7 +278,6 @@ void QDECL Com_Error( int code, const char *fmt, ... ) { va_end (argptr); if ( code != ERR_DISCONNECT ) { - Cvar_Get("com_errorMessage", "", CVAR_ROM); //give com_errorMessage a default so it won't come back to life after a resetDefaults Cvar_Set("com_errorMessage", com_errorMessage); } @@ -2939,6 +2938,7 @@ void MSG_shutdownHuffman(); void Com_Shutdown (void) { CM_ClearMap(); + CM_FreeShaderText(); if (logfile) { FS_FCloseFile (logfile); diff --git a/CODE-mp/qcommon/cvar.cpp b/CODE-mp/qcommon/cvar.cpp index 323f3f0..a6449b5 100644 --- a/CODE-mp/qcommon/cvar.cpp +++ b/CODE-mp/qcommon/cvar.cpp @@ -902,7 +902,7 @@ Reads in all archived cvars ============ */ void Cvar_Init (void) { - cvar_cheats = Cvar_Get("sv_cheats", "0", CVAR_ROM | CVAR_SYSTEMINFO ); + cvar_cheats = Cvar_Get("sv_cheats", "1", CVAR_ROM | CVAR_SYSTEMINFO ); Cmd_AddCommand ("toggle", Cvar_Toggle_f); Cmd_AddCommand ("set", Cvar_Set_f); diff --git a/CODE-mp/qcommon/game_version.h b/CODE-mp/qcommon/game_version.h index a1d3b40..ad6a048 100644 --- a/CODE-mp/qcommon/game_version.h +++ b/CODE-mp/qcommon/game_version.h @@ -3,6 +3,6 @@ // Current version of the multi player game -#define Q3_VERSION "JK2MP: v1.02a" +#define Q3_VERSION "JK2MP: v1.02" //end diff --git a/CODE-mp/qcommon/strip.cpp b/CODE-mp/qcommon/strip.cpp index e0aaca4..6fc13db 100644 --- a/CODE-mp/qcommon/strip.cpp +++ b/CODE-mp/qcommon/strip.cpp @@ -1597,7 +1597,7 @@ int SP_GetStringID(const char *inReference) int ID; char Reference[MAX_QPATH]; Q_strncpyz(Reference, inReference, MAX_QPATH); - Q_strupr(Reference); + strupr(Reference); for(i = SP_ListByID.begin(); i != SP_ListByID.end(); i++) { @@ -1714,7 +1714,7 @@ static void SP_UpdateLanguage(void) void SP_Init(void) { - sp_language = Cvar_Get("sp_language", va("%d", SP_LANGUAGE_ENGLISH), CVAR_ARCHIVE | CVAR_NORESTART); + sp_language = Cvar_Get("sp_language", va("%d", SP_LANGUAGE_ENGLISH), CVAR_ARCHIVE); sp_show_strip = Cvar_Get ("sp_show_strip", "0", 0); SP_UpdateLanguage(); diff --git a/CODE-mp/qcommon/vssver.scc b/CODE-mp/qcommon/vssver.scc index d0573c2f02b7596f1b03b580227f88c132fa16ff..ae662b6e53ac1f80ca964366ed73a1b3f3563a8c 100644 GIT binary patch delta 109 zcmeys`hj(Vh$L@q(wsvK5O4%Yl}r}nl?UGtu3Ae7^l76KDlsE^(jY`H* z2X89`ux~u;&d7O4qsC%qx1+z%WLc(i$qhQu3Uy_@vRpuQ=Q$V{KCv%u%t<*gi*xc? GCT9TK#w2b4 diff --git a/CODE-mp/renderer/tr_ghoul2.cpp b/CODE-mp/renderer/tr_ghoul2.cpp index 15387b0..f41305b 100644 --- a/CODE-mp/renderer/tr_ghoul2.cpp +++ b/CODE-mp/renderer/tr_ghoul2.cpp @@ -1625,8 +1625,8 @@ void R_AddGhoulSurfaces( trRefEntity_t *ent ) { bool setNewOrigin = false; CGhoul2Info_v &ghoul2 = *((CGhoul2Info_v *)ent->e.ghoul2); - // if we don't want server ghoul2 models and this is one, then return - if ((r_noServerGhoul2->integer && !(ghoul2[0].mCreationID & WF_CLIENTONLY)) ) + // if we don't want server ghoul2 models and this is one, or we just don't want ghoul2 models at all, then return + if ((r_noServerGhoul2->integer && !(ghoul2[0].mCreationID & WF_CLIENTONLY)) || (r_noGhoul2->integer)) { return; } @@ -1902,8 +1902,8 @@ void G2_ConstructGhoulSkeleton( CGhoul2Info_v &ghoul2, const int frameNum, qhand bool setNewOrigin = false; mdxaBone_t rootMatrix; - // if we don't want server ghoul2 models and this is one, then return - if ((r_noServerGhoul2->integer && !(ghoul2[0].mCreationID & WF_CLIENTONLY)) ) + // if we don't want server ghoul2 models and this is one, or we just don't want ghoul2 models at all, then return + if ((r_noServerGhoul2->integer && !(ghoul2[0].mCreationID & WF_CLIENTONLY)) || (r_noGhoul2->integer)) { return; } diff --git a/CODE-mp/renderer/tr_init.cpp b/CODE-mp/renderer/tr_init.cpp index e0a4a31..5692042 100644 --- a/CODE-mp/renderer/tr_init.cpp +++ b/CODE-mp/renderer/tr_init.cpp @@ -160,6 +160,7 @@ Ghoul2 Insert Start */ cvar_t *r_noServerGhoul2; +cvar_t *r_noGhoul2; cvar_t *r_Ghoul2AnimSmooth=0; cvar_t *r_Ghoul2UnSqashAfterSmooth=0; //cvar_t *r_Ghoul2UnSqash; @@ -907,8 +908,8 @@ void R_Register( void ) r_debugSort = ri.Cvar_Get( "r_debugSort", "0", CVAR_CHEAT ); r_printShaders = ri.Cvar_Get( "r_printShaders", "0", 0 ); - r_surfaceSprites = ri.Cvar_Get ("r_surfaceSprites", "1", CVAR_TEMP); - r_surfaceWeather = ri.Cvar_Get ("r_surfaceWeather", "0", CVAR_TEMP); + r_surfaceSprites = ri.Cvar_Get ("r_surfaceSprites", "1", CVAR_CHEAT); + r_surfaceWeather = ri.Cvar_Get ("r_surfaceWeather", "0", 0); r_windSpeed = ri.Cvar_Get ("r_windSpeed", "0", 0); r_windAngle = ri.Cvar_Get ("r_windAngle", "0", 0); @@ -959,6 +960,7 @@ void R_Register( void ) Ghoul2 Insert Start */ r_noServerGhoul2 = ri.Cvar_Get( "r_noserverghoul2", "0", CVAR_CHEAT); + r_noGhoul2 = ri.Cvar_Get( "r_noghoul2", "0", CVAR_CHEAT); r_Ghoul2AnimSmooth = ri.Cvar_Get( "r_ghoul2animsmooth", ".3", 0 ); r_Ghoul2UnSqashAfterSmooth = ri.Cvar_Get( "r_ghoul2unsqashaftersmooth", "1", 0 ); diff --git a/CODE-mp/renderer/tr_local.h b/CODE-mp/renderer/tr_local.h index bb2665b..1fb9f51 100644 --- a/CODE-mp/renderer/tr_local.h +++ b/CODE-mp/renderer/tr_local.h @@ -1209,6 +1209,7 @@ extern cvar_t *r_printShaders; Ghoul2 Insert Start */ extern cvar_t *r_noServerGhoul2; +extern cvar_t *r_noGhoul2; /* Ghoul2 Insert End */ diff --git a/CODE-mp/renderer/tr_model.cpp b/CODE-mp/renderer/tr_model.cpp index 101e5fa..075f7a7 100644 --- a/CODE-mp/renderer/tr_model.cpp +++ b/CODE-mp/renderer/tr_model.cpp @@ -995,9 +995,10 @@ Ghoul2 Insert Start Ghoul2 Insert End */ - if (!r_noServerGhoul2) + if (!r_noServerGhoul2 || !r_noGhoul2) { //keep it from choking when it gets to these checks in the g2 code. Registering all r_ cvars for the server would be a Bad Thing though. r_noServerGhoul2 = Cvar_Get( "r_noserverghoul2", "0", 0); + r_noGhoul2 = Cvar_Get( "r_noghoul2", "0", 0); } if ( !name || !name[0] ) { diff --git a/CODE-mp/renderer/vssver.scc b/CODE-mp/renderer/vssver.scc index 72106970c3594fa1dd9b022554eb9c9e77840c50..51e600e054954e43ea3ce0874478235665fb5ef3 100644 GIT binary patch delta 68 zcmV-K0K5N?1&{@h6a)gd(pHfe90^A1l_|85*S95+J*Nr0>R@Cn2hF!7k?ltb{itA| a>-tVl9+N!*rwOF84{ZI=nNJ&&?E$0TRUU-^ delta 68 zcmV-K0K5N?1&{@h6a>te78;Ql90}t~O6q5|U}q+gJ*NpJd34XuKWk?vk?ltbc!6<(2+MLUORb3#Hk$MDjWz5tUasL{U|@I##9noruRo}KKB)j?KL_HZwE^Oq MHOsxEC)Nf706cpWI{*Lx delta 59 zcmcb>c!6<(2+K;Rn++2sY&4HYvr2JDC 0 || ui_freeSaber.integer) + if (uiForcePowersRank[FP_SABERATTACK] > 0) { // Show lightsaber stuff. Menu_ShowItemByName(menu, "nosaber", qfalse); Menu_ShowItemByName(menu, "yessaber", qtrue); @@ -1612,7 +1569,7 @@ static void UI_DrawNetSource(rectDef_t *rect, float scale, vec4_t color, int tex trap_SP_GetStringTextString("MENUS3_SOURCE", holdSPString, sizeof(holdSPString) ); Text_Paint(rect->x, rect->y, scale, color, va("%s %s",holdSPString, - GetNetSourceString(ui_netSource.integer)), 0, 0, textStyle, iMenuFont); + netSources[ui_netSource.integer]), 0, 0, textStyle, iMenuFont); } static void UI_DrawNetMapPreview(rectDef_t *rect, float scale, vec4_t color) { @@ -1914,13 +1871,11 @@ static int UI_OwnerDrawWidth(int ownerDraw, float scale) { if (i == FORCE_LIGHTSIDE) { -// s = "Light"; - s = (char *)UI_GetStripEdString("MENUS3", "FORCEDESC_LIGHT"); + s = "Light"; } else { -// s = "Dark"; - s = (char *)UI_GetStripEdString("MENUS3", "FORCEDESC_DARK"); + s = "Dark"; } break; case UI_FORCE_RANK: @@ -2048,7 +2003,7 @@ static int UI_OwnerDrawWidth(int ownerDraw, float scale) { ui_netSource.integer = 0; } trap_SP_GetStringTextString("MENUS3_SOURCE", holdSPString, sizeof(holdSPString)); - s = va("%s %s", holdSPString, GetNetSourceString(ui_netSource.integer)); + s = va("%s %s", holdSPString, netSources[ui_netSource.integer]); break; case UI_NETFILTER: if (ui_serverFilterType.integer < 0 || ui_serverFilterType.integer > numServerFilters) { @@ -4014,10 +3969,11 @@ static void UI_RunMenuScript(char **args) UI_GameType_HandleKey(0, 0, K_MOUSE1, qfalse); UI_GameType_HandleKey(0, 0, K_MOUSE2, qfalse); } else if (Q_stricmp(name, "resetDefaults") == 0) { - trap_Cmd_ExecuteText( EXEC_APPEND, "cvar_restart\n"); trap_Cmd_ExecuteText( EXEC_APPEND, "exec mpdefault.cfg\n"); - trap_Cmd_ExecuteText( EXEC_APPEND, "vid_restart\n" ); + trap_Cmd_ExecuteText( EXEC_APPEND, "cvar_restart\n"); + Controls_SetDefaults(); trap_Cvar_Set("com_introPlayed", "1" ); + trap_Cmd_ExecuteText( EXEC_APPEND, "vid_restart\n" ); #ifdef USE_CD_KEY } else if (Q_stricmp(name, "getCDKey") == 0) { char out[17]; @@ -6458,11 +6414,11 @@ static void UI_PrintTime ( char *buf, int bufsize, int time ) { time /= 1000; // change to seconds if (time > 3600) { // in the hours range - Com_sprintf( buf, bufsize, "%d hr %2d min", time / 3600, (time % 3600) / 60 ); + Com_sprintf( buf, bufsize, "%d hr %d min", time / 3600, (time % 3600) / 60 ); } else if (time > 60) { // mins - Com_sprintf( buf, bufsize, "%2d min %2d sec", time / 60, time % 60 ); + Com_sprintf( buf, bufsize, "%d min %d sec", time / 60, time % 60 ); } else { // secs - Com_sprintf( buf, bufsize, "%2d sec", time ); + Com_sprintf( buf, bufsize, "%d sec", time ); } } @@ -6473,36 +6429,16 @@ void Text_PaintCenter(float x, float y, float scale, vec4_t color, const char *t static void UI_DisplayDownloadInfo( const char *downloadName, float centerPoint, float yStart, float scale, int iMenuFont) { - char sDownLoading[256]; - char sEstimatedTimeLeft[256]; - char sTransferRate[256]; - char sOf[20]; - char sCopied[256]; - char sSec[20]; - // + static char dlText[] = "Downloading:"; + static char etaText[] = "Estimated time left:"; + static char xferText[] = "Transfer rate:"; + int downloadSize, downloadCount, downloadTime; char dlSizeBuf[64], totalSizeBuf[64], xferRateBuf[64], dlTimeBuf[64]; int xferRate; int leftWidth; const char *s; - vec4_t colorLtGreyAlpha = {0, 0, 0, .5}; - - UI_FillRect( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, colorLtGreyAlpha ); - - s = GetCRDelineatedString("MENUS3","DOWNLOAD_STUFF", 0); // "Downloading:" - strcpy(sDownLoading,s?s:""); - s = GetCRDelineatedString("MENUS3","DOWNLOAD_STUFF", 1); // "Estimated time left:" - strcpy(sEstimatedTimeLeft,s?s:""); - s = GetCRDelineatedString("MENUS3","DOWNLOAD_STUFF", 2); // "Transfer rate:" - strcpy(sTransferRate,s?s:""); - s = GetCRDelineatedString("MENUS3","DOWNLOAD_STUFF", 3); // "of" - strcpy(sOf,s?s:""); - s = GetCRDelineatedString("MENUS3","DOWNLOAD_STUFF", 4); // "copied" - strcpy(sCopied,s?s:""); - s = GetCRDelineatedString("MENUS3","DOWNLOAD_STUFF", 5); // "sec." - strcpy(sSec,s?s:""); - downloadSize = trap_Cvar_VariableValue( "cl_downloadSize" ); downloadCount = trap_Cvar_VariableValue( "cl_downloadCount" ); downloadTime = trap_Cvar_VariableValue( "cl_downloadTime" ); @@ -6510,10 +6446,9 @@ static void UI_DisplayDownloadInfo( const char *downloadName, float centerPoint, leftWidth = 320; UI_SetColor(colorWhite); - - Text_PaintCenter(centerPoint, yStart + 112, scale, colorWhite, sDownLoading, 0, iMenuFont); - Text_PaintCenter(centerPoint, yStart + 192, scale, colorWhite, sEstimatedTimeLeft, 0, iMenuFont); - Text_PaintCenter(centerPoint, yStart + 248, scale, colorWhite, sTransferRate, 0, iMenuFont); + Text_PaintCenter(centerPoint, yStart + 112, scale, colorWhite, dlText, 0, iMenuFont); + Text_PaintCenter(centerPoint, yStart + 192, scale, colorWhite, etaText, 0, iMenuFont); + Text_PaintCenter(centerPoint, yStart + 248, scale, colorWhite, xferText, 0, iMenuFont); if (downloadSize > 0) { s = va( "%s (%d%%)", downloadName, downloadCount * 100 / downloadSize ); @@ -6528,7 +6463,7 @@ static void UI_DisplayDownloadInfo( const char *downloadName, float centerPoint, if (downloadCount < 4096 || !downloadTime) { Text_PaintCenter(leftWidth, yStart+216, scale, colorWhite, "estimating", 0, iMenuFont); - Text_PaintCenter(leftWidth, yStart+160, scale, colorWhite, va("(%s %s %s %s)", dlSizeBuf, sOf, totalSizeBuf, sCopied), 0, iMenuFont); + Text_PaintCenter(leftWidth, yStart+160, scale, colorWhite, va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), 0, iMenuFont); } else { if ((uiInfo.uiDC.realTime - downloadTime) / 1000) { xferRate = downloadCount / ((uiInfo.uiDC.realTime - downloadTime) / 1000); @@ -6546,18 +6481,18 @@ static void UI_DisplayDownloadInfo( const char *downloadName, float centerPoint, (n - (((downloadCount/1024) * n) / (downloadSize/1024))) * 1000); Text_PaintCenter(leftWidth, yStart+216, scale, colorWhite, dlTimeBuf, 0, iMenuFont); - Text_PaintCenter(leftWidth, yStart+160, scale, colorWhite, va("(%s %s %s %s)", dlSizeBuf, sOf, totalSizeBuf, sCopied), 0, iMenuFont); + Text_PaintCenter(leftWidth, yStart+160, scale, colorWhite, va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), 0, iMenuFont); } else { Text_PaintCenter(leftWidth, yStart+216, scale, colorWhite, "estimating", 0, iMenuFont); if (downloadSize) { - Text_PaintCenter(leftWidth, yStart+160, scale, colorWhite, va("(%s %s %s %s)", dlSizeBuf, sOf, totalSizeBuf, sCopied), 0, iMenuFont); + Text_PaintCenter(leftWidth, yStart+160, scale, colorWhite, va("(%s of %s copied)", dlSizeBuf, totalSizeBuf), 0, iMenuFont); } else { - Text_PaintCenter(leftWidth, yStart+160, scale, colorWhite, va("(%s %s)", dlSizeBuf, sCopied), 0, iMenuFont); + Text_PaintCenter(leftWidth, yStart+160, scale, colorWhite, va("(%s copied)", dlSizeBuf), 0, iMenuFont); } } if (xferRate) { - Text_PaintCenter(leftWidth, yStart+272, scale, colorWhite, va("%s/%s", xferRateBuf,sSec), 0, iMenuFont); + Text_PaintCenter(leftWidth, yStart+272, scale, colorWhite, va("%s/Sec", xferRateBuf), 0, iMenuFont); } } } @@ -7057,7 +6992,7 @@ static void UI_StartServerRefresh(qboolean full) qtime_t q; trap_RealTime(&q); - trap_Cvar_Set( va("ui_lastServerRefresh_%i", ui_netSource.integer), va("%s-%i, %i @ %i:%2i", GetMonthAbbrevString(q.tm_mon),q.tm_mday, 1900+q.tm_year,q.tm_hour,q.tm_min)); + trap_Cvar_Set( va("ui_lastServerRefresh_%i", ui_netSource.integer), va("%s-%i, %i at %i:%i", MonthAbbrev[q.tm_mon],q.tm_mday, 1900+q.tm_year,q.tm_hour,q.tm_min)); if (!full) { UI_UpdatePendingPings(); diff --git a/CODE-mp/ui/ui_shared.c b/CODE-mp/ui/ui_shared.c index eeb507f..4b32af3 100644 --- a/CODE-mp/ui/ui_shared.c +++ b/CODE-mp/ui/ui_shared.c @@ -1572,12 +1572,12 @@ commandDef_t commandList[] = {"setitemcolor", &Script_SetItemColor}, // group/name {"setitemrect", &Script_SetItemRect}, // group/name {"setteamcolor", &Script_SetTeamColor}, // sets this background color to team color - {"setfocus", &Script_SetFocus}, // sets focus - {"setplayermodel", &Script_SetPlayerModel}, // sets model - {"setplayerhead", &Script_SetPlayerHead}, // sets head + {"setfocus", &Script_SetFocus}, // sets this background color to team color + {"setplayermodel", &Script_SetPlayerModel}, // sets this background color to team color + {"setplayerhead", &Script_SetPlayerHead}, // sets this background color to team color {"transition", &Script_Transition}, // group/name - {"setcvar", &Script_SetCvar}, // name - {"setcvartocvar", &Script_SetCvarToCvar}, // name + {"setcvar", &Script_SetCvar}, // group/name + {"setcvartocvar", &Script_SetCvarToCvar}, // group/name {"exec", &Script_Exec}, // group/name {"play", &Script_Play}, // group/name {"playlooped", &Script_playLooped}, // group/name @@ -4056,6 +4056,31 @@ void Controls_SetConfig(qboolean restart) // ^--this is bad, it shows the cursor during map load, if you need to, add it as an exec cmd to use_joy or something. } +/* +================= +Controls_SetDefaults +================= +*/ +void Controls_SetDefaults( void ) +{ + int i; + + // iterate each command, set its default binding + for (i=0; i < g_bindCount; i++) + { + g_bindings[i].bind1 = g_bindings[i].defaultbind1; + g_bindings[i].bind2 = g_bindings[i].defaultbind2; + } + + //s_controls.invertmouse.curvalue = Controls_GetCvarDefault( "m_pitch" ) < 0; + //s_controls.smoothmouse.curvalue = Controls_GetCvarDefault( "m_filter" ); + //s_controls.alwaysrun.curvalue = Controls_GetCvarDefault( "cl_run" ); + //s_controls.autoswitch.curvalue = Controls_GetCvarDefault( "cg_autoswitch" ); + //s_controls.sensitivity.curvalue = Controls_GetCvarDefault( "sensitivity" ); + //s_controls.joyenable.curvalue = Controls_GetCvarDefault( "in_joystick" ); + //s_controls.joythreshold.curvalue = Controls_GetCvarDefault( "joy_threshold" ); + //s_controls.freelook.curvalue = Controls_GetCvarDefault( "cl_freelook" ); +} int BindingIDFromName(const char *name) { int i; diff --git a/CODE-mp/ui/ui_shared.h b/CODE-mp/ui/ui_shared.h index 63845a7..6aef9dc 100644 --- a/CODE-mp/ui/ui_shared.h +++ b/CODE-mp/ui/ui_shared.h @@ -462,6 +462,7 @@ qboolean UI_OutOfMemory(); void Controls_GetConfig( void ); void Controls_SetConfig(qboolean restart); +void Controls_SetDefaults( void ); int trap_PC_AddGlobalDefine ( char *define ); int trap_PC_LoadSource ( const char *filename ); diff --git a/CODE-mp/ui/vm/bg_lib.asm b/CODE-mp/ui/vm/bg_lib.asm new file mode 100644 index 0000000..3eb0b9b --- /dev/null +++ b/CODE-mp/ui/vm/bg_lib.asm @@ -0,0 +1,5877 @@ +code +proc swapfunc 24 0 +file "../../game/bg_lib.c" +line 81 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// Copyright (C) 1999-2000 Id Software, Inc. +;4:// +;5:// bg_lib,c -- standard C library replacement routines used by code +;6:// compiled for the virtual machine +;7: +;8:#include "q_shared.h" +;9: +;10:/*- +;11: * Copyright (c) 1992, 1993 +;12: * The Regents of the University of California. All rights reserved. +;13: * +;14: * Redistribution and use in source and binary forms, with or without +;15: * modification, are permitted provided that the following conditions +;16: * are met: +;17: * 1. Redistributions of source code must retain the above copyright +;18: * notice, this list of conditions and the following disclaimer. +;19: * 2. Redistributions in binary form must reproduce the above copyright +;20: * notice, this list of conditions and the following disclaimer in the +;21: * documentation and/or other materials provided with the distribution. +;22: * 3. All advertising materials mentioning features or use of this software +;23: * must display the following acknowledgement: +;24: * This product includes software developed by the University of +;25: * California, Berkeley and its contributors. +;26: * 4. Neither the name of the University nor the names of its contributors +;27: * may be used to endorse or promote products derived from this software +;28: * without specific prior written permission. +;29: * +;30: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +;31: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;32: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +;33: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +;34: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;35: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +;36: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +;37: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +;38: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +;39: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +;40: * SUCH DAMAGE. +;41: */ +;42: +;43:#if defined(LIBC_SCCS) && !defined(lint) +;44:#if 0 +;45:static char sccsid[] = "@(#)qsort.c 8.1 (Berkeley) 6/4/93"; +;46:#endif +;47:static const char rcsid[] = +;48: "$Id: bg_lib.c,v 1.23 2000/02/04 06:46:50 zoid Exp $"; +;49:#endif /* LIBC_SCCS and not lint */ +;50: +;51:// bk001127 - needed for DLL's +;52:#if !defined( Q3_VM ) +;53:typedef int cmp_t(const void *, const void *); +;54:#endif +;55: +;56:static char* med3(char *, char *, char *, cmp_t *); +;57:static void swapfunc(char *, char *, int, int); +;58: +;59:#ifndef min +;60:#define min(a, b) (a) < (b) ? a : b +;61:#endif +;62: +;63:/* +;64: * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function". +;65: */ +;66:#define swapcode(TYPE, parmi, parmj, n) { \ +;67: long i = (n) / sizeof (TYPE); \ +;68: register TYPE *pi = (TYPE *) (parmi); \ +;69: register TYPE *pj = (TYPE *) (parmj); \ +;70: do { \ +;71: register TYPE t = *pi; \ +;72: *pi++ = *pj; \ +;73: *pj++ = t; \ +;74: } while (--i > 0); \ +;75:} +;76: +;77:#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \ +;78: es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1; +;79: +;80:static void swapfunc( char* a, char* b, int n, int swaptype) +;81:{ +line 82 +;82: if(swaptype <= 1) +ADDRFP4 12 +INDIRI4 +CNSTI4 1 +GTI4 $37 +line 83 +;83: swapcode(long, a, b, n) +ADDRLP4 8 +ADDRFP4 8 +INDIRI4 +CVIU4 4 +CNSTI4 2 +RSHU4 +CVUI4 4 +ASGNI4 +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +LABELV $39 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 16 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 20 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ASGNI4 +LABELV $40 +ADDRLP4 12 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +GTI4 $39 +ADDRGP4 $38 +JUMPV +LABELV $37 +line 85 +;84: else +;85: swapcode(char, a, b, n) +ADDRLP4 8 +ADDRFP4 8 +INDIRI4 +CVIU4 4 +CVUI4 4 +ASGNI4 +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +LABELV $42 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 16 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRLP4 20 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 20 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 12 +INDIRI1 +ASGNI1 +LABELV $43 +ADDRLP4 12 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +GTI4 $42 +LABELV $38 +line 86 +;86:} +LABELV $36 +endproc swapfunc 24 0 +proc med3 40 8 +line 99 +;87: +;88:#define swap(a, b) \ +;89: if (swaptype == 0) { \ +;90: long t = *(long *)(a); \ +;91: *(long *)(a) = *(long *)(b); \ +;92: *(long *)(b) = t; \ +;93: } else \ +;94: swapfunc(a, b, es, swaptype) +;95: +;96:#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype) +;97: +;98:static char *med3(char* a, char* b, char* c, cmp_t* cmp) +;99:{ +line 100 +;100: return cmp(a, b) < 0 ? +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 20 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +GEI4 $51 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 24 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +GEI4 $53 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRGP4 $54 +JUMPV +LABELV $53 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 28 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +GEI4 $55 +ADDRLP4 8 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRGP4 $56 +JUMPV +LABELV $55 +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +LABELV $56 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ASGNP4 +LABELV $54 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRGP4 $52 +JUMPV +LABELV $51 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 32 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +LEI4 $57 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRGP4 $58 +JUMPV +LABELV $57 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 36 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 0 +GEI4 $59 +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $60 +JUMPV +LABELV $59 +ADDRLP4 16 +ADDRFP4 8 +INDIRP4 +ASGNP4 +LABELV $60 +ADDRLP4 12 +ADDRLP4 16 +INDIRP4 +ASGNP4 +LABELV $58 +ADDRLP4 0 +ADDRLP4 12 +INDIRP4 +ASGNP4 +LABELV $52 +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $45 +endproc med3 40 8 +export qsort +proc qsort 104 16 +line 106 +;101: (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a )) +;102: :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c )); +;103:} +;104: +;105:void qsort( void* a, size_t n, size_t es, cmp_t* cmp) +;106:{ +LABELV $62 +line 110 +;107: char *pa, *pb, *pc, *pd, *pl, *pm, *pn; +;108: int d, r, swaptype, swap_cnt; +;109: +;110:loop: SWAPINIT(a, es); +ADDRLP4 52 +CNSTU4 3 +ASGNU4 +ADDRLP4 56 +CNSTU4 0 +ASGNU4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +CVUI4 4 +CVIU4 4 +ADDRLP4 52 +INDIRU4 +BANDU4 +ADDRLP4 56 +INDIRU4 +NEU4 $67 +ADDRFP4 8 +INDIRI4 +CVIU4 4 +ADDRLP4 52 +INDIRU4 +BANDU4 +ADDRLP4 56 +INDIRU4 +EQU4 $65 +LABELV $67 +ADDRLP4 44 +CNSTI4 2 +ASGNI4 +ADDRGP4 $66 +JUMPV +LABELV $65 +ADDRFP4 8 +INDIRI4 +CVIU4 4 +CNSTU4 4 +NEU4 $68 +ADDRLP4 48 +CNSTI4 0 +ASGNI4 +ADDRGP4 $69 +JUMPV +LABELV $68 +ADDRLP4 48 +CNSTI4 1 +ASGNI4 +LABELV $69 +ADDRLP4 44 +ADDRLP4 48 +INDIRI4 +ASGNI4 +LABELV $66 +ADDRLP4 16 +ADDRLP4 44 +INDIRI4 +ASGNI4 +line 111 +;111: swap_cnt = 0; +ADDRLP4 28 +CNSTI4 0 +ASGNI4 +line 112 +;112: if (n < 7) { +ADDRFP4 4 +INDIRI4 +CNSTI4 7 +GEI4 $70 +line 113 +;113: for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es) +ADDRLP4 32 +ADDRFP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRGP4 $75 +JUMPV +LABELV $72 +line 114 +;114: for (pl = pm; pl > (char *)a && cmp(pl - es, pl) > 0; +ADDRLP4 0 +ADDRLP4 32 +INDIRP4 +ASGNP4 +ADDRGP4 $79 +JUMPV +LABELV $76 +line 116 +;115: pl -= es) +;116: swap(pl, pl - es); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $80 +ADDRLP4 60 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ADDRLP4 60 +INDIRI4 +ASGNI4 +ADDRGP4 $81 +JUMPV +LABELV $80 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 64 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 64 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 64 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $81 +LABELV $77 +line 115 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +LABELV $79 +line 114 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +LEU4 $82 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +GTI4 $76 +LABELV $82 +LABELV $73 +line 113 +ADDRLP4 32 +ADDRFP4 8 +INDIRI4 +ADDRLP4 32 +INDIRP4 +ADDP4 +ASGNP4 +LABELV $75 +ADDRLP4 32 +INDIRP4 +CVPU4 4 +ADDRFP4 4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CVPU4 4 +LTU4 $72 +line 117 +;117: return; +ADDRGP4 $61 +JUMPV +LABELV $70 +line 119 +;118: } +;119: pm = (char *)a + (n / 2) * es; +ADDRLP4 32 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +DIVI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +line 120 +;120: if (n > 7) { +ADDRFP4 4 +INDIRI4 +CNSTI4 7 +LEI4 $83 +line 121 +;121: pl = a; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 122 +;122: pn = (char *)a + (n - 1) * es; +ADDRLP4 36 +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +line 123 +;123: if (n > 40) { +ADDRFP4 4 +INDIRI4 +CNSTI4 40 +LEI4 $85 +line 124 +;124: d = (n / 8) * es; +ADDRLP4 40 +ADDRFP4 4 +INDIRI4 +CNSTI4 8 +DIVI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ASGNI4 +line 125 +;125: pl = med3(pl, pl + d, pl + 2 * d, cmp); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 64 +ADDRLP4 40 +INDIRI4 +ASGNI4 +ADDRLP4 64 +INDIRI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ARGP4 +ADDRLP4 64 +INDIRI4 +CNSTI4 1 +LSHI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 68 +ADDRGP4 med3 +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 68 +INDIRP4 +ASGNP4 +line 126 +;126: pm = med3(pm - d, pm, pm + d, cmp); +ADDRLP4 76 +ADDRLP4 40 +INDIRI4 +ASGNI4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 76 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRLP4 76 +INDIRI4 +ADDRLP4 32 +INDIRP4 +ADDP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRGP4 med3 +CALLP4 +ASGNP4 +ADDRLP4 32 +ADDRLP4 80 +INDIRP4 +ASGNP4 +line 127 +;127: pn = med3(pn - 2 * d, pn - d, pn, cmp); +ADDRLP4 88 +ADDRLP4 40 +INDIRI4 +ASGNI4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 88 +INDIRI4 +CNSTI4 1 +LSHI4 +SUBP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 88 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 92 +ADDRGP4 med3 +CALLP4 +ASGNP4 +ADDRLP4 36 +ADDRLP4 92 +INDIRP4 +ASGNP4 +line 128 +;128: } +LABELV $85 +line 129 +;129: pm = med3(pl, pm, pn, cmp); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRLP4 60 +ADDRGP4 med3 +CALLP4 +ASGNP4 +ADDRLP4 32 +ADDRLP4 60 +INDIRP4 +ASGNP4 +line 130 +;130: } +LABELV $83 +line 131 +;131: swap(a, pm); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $87 +ADDRLP4 60 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 32 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 60 +INDIRI4 +ASGNI4 +ADDRGP4 $88 +JUMPV +LABELV $87 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 32 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $88 +line 132 +;132: pa = pb = (char *)a + es; +ADDRLP4 60 +ADDRFP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 60 +INDIRP4 +ASGNP4 +ADDRLP4 20 +ADDRLP4 60 +INDIRP4 +ASGNP4 +line 134 +;133: +;134: pc = pd = (char *)a + (n - 1) * es; +ADDRLP4 64 +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRLP4 24 +ADDRLP4 64 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 64 +INDIRP4 +ASGNP4 +line 135 +;135: for (;;) { +ADDRGP4 $94 +JUMPV +LABELV $93 +line 136 +;136: while (pb <= pc && (r = cmp(pb, a)) <= 0) { +line 137 +;137: if (r == 0) { +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $96 +line 138 +;138: swap_cnt = 1; +ADDRLP4 28 +CNSTI4 1 +ASGNI4 +line 139 +;139: swap(pa, pb); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $98 +ADDRLP4 68 +ADDRLP4 20 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ASGNI4 +ADDRGP4 $99 +JUMPV +LABELV $98 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $99 +line 140 +;140: pa += es; +ADDRLP4 20 +ADDRFP4 8 +INDIRI4 +ADDRLP4 20 +INDIRP4 +ADDP4 +ASGNP4 +line 141 +;141: } +LABELV $96 +line 142 +;142: pb += es; +ADDRLP4 4 +ADDRFP4 8 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +ASGNP4 +line 143 +;143: } +LABELV $94 +line 136 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +GTU4 $100 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 72 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 0 +LEI4 $93 +LABELV $100 +ADDRGP4 $102 +JUMPV +LABELV $101 +line 144 +;144: while (pb <= pc && (r = cmp(pc, a)) >= 0) { +line 145 +;145: if (r == 0) { +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $104 +line 146 +;146: swap_cnt = 1; +ADDRLP4 28 +CNSTI4 1 +ASGNI4 +line 147 +;147: swap(pc, pd); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $106 +ADDRLP4 76 +ADDRLP4 8 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 76 +INDIRI4 +ASGNI4 +ADDRGP4 $107 +JUMPV +LABELV $106 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $107 +line 148 +;148: pd -= es; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +line 149 +;149: } +LABELV $104 +line 150 +;150: pc -= es; +ADDRLP4 8 +ADDRLP4 8 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +line 151 +;151: } +LABELV $102 +line 144 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +GTU4 $108 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 80 +INDIRI4 +ASGNI4 +ADDRLP4 80 +INDIRI4 +CNSTI4 0 +GEI4 $101 +LABELV $108 +line 152 +;152: if (pb > pc) +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +LEU4 $109 +line 153 +;153: break; +ADDRGP4 $91 +JUMPV +LABELV $109 +line 154 +;154: swap(pb, pc); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $111 +ADDRLP4 84 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 84 +INDIRI4 +ASGNI4 +ADDRGP4 $112 +JUMPV +LABELV $111 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $112 +line 155 +;155: swap_cnt = 1; +ADDRLP4 28 +CNSTI4 1 +ASGNI4 +line 156 +;156: pb += es; +ADDRLP4 4 +ADDRFP4 8 +INDIRI4 +ADDRLP4 4 +INDIRP4 +ADDP4 +ASGNP4 +line 157 +;157: pc -= es; +ADDRLP4 8 +ADDRLP4 8 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +line 158 +;158: } +line 135 +ADDRGP4 $94 +JUMPV +LABELV $91 +line 159 +;159: if (swap_cnt == 0) { /* Switch to insertion sort */ +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +NEI4 $113 +line 160 +;160: for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es) +ADDRLP4 32 +ADDRFP4 8 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +ADDRGP4 $118 +JUMPV +LABELV $115 +line 161 +;161: for (pl = pm; pl > (char *)a && cmp(pl - es, pl) > 0; +ADDRLP4 0 +ADDRLP4 32 +INDIRP4 +ASGNP4 +ADDRGP4 $122 +JUMPV +LABELV $119 +line 163 +;162: pl -= es) +;163: swap(pl, pl - es); +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $123 +ADDRLP4 68 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ADDRLP4 68 +INDIRI4 +ASGNI4 +ADDRGP4 $124 +JUMPV +LABELV $123 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 72 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 72 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 72 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $124 +LABELV $120 +line 162 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ASGNP4 +LABELV $122 +line 161 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +LEU4 $125 +ADDRLP4 0 +INDIRP4 +ADDRFP4 8 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 80 +ADDRFP4 12 +INDIRP4 +CALLI4 +ASGNI4 +ADDRLP4 80 +INDIRI4 +CNSTI4 0 +GTI4 $119 +LABELV $125 +LABELV $116 +line 160 +ADDRLP4 32 +ADDRFP4 8 +INDIRI4 +ADDRLP4 32 +INDIRP4 +ADDP4 +ASGNP4 +LABELV $118 +ADDRLP4 32 +INDIRP4 +CVPU4 4 +ADDRFP4 4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CVPU4 4 +LTU4 $115 +line 164 +;164: return; +ADDRGP4 $61 +JUMPV +LABELV $113 +line 167 +;165: } +;166: +;167: pn = (char *)a + n * es; +ADDRLP4 36 +ADDRFP4 4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +MULI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ASGNP4 +line 168 +;168: r = min(pa - (char *)a, pb - pa); +ADDRLP4 72 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +ASGNU4 +ADDRLP4 72 +INDIRU4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 72 +INDIRU4 +SUBU4 +CVUI4 4 +GEI4 $127 +ADDRLP4 68 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRGP4 $128 +JUMPV +LABELV $127 +ADDRLP4 68 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +LABELV $128 +ADDRLP4 12 +ADDRLP4 68 +INDIRI4 +ASGNI4 +line 169 +;169: vecswap(a, pb - r, r); +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +LEI4 $129 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $129 +line 170 +;170: r = min(pd - pc, pn - pd - es); +ADDRLP4 84 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ASGNU4 +ADDRLP4 84 +INDIRU4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDRLP4 36 +INDIRP4 +CVPU4 4 +ADDRLP4 84 +INDIRU4 +SUBU4 +CVUI4 4 +ADDRFP4 8 +INDIRI4 +SUBI4 +GEI4 $132 +ADDRLP4 80 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRGP4 $133 +JUMPV +LABELV $132 +ADDRLP4 80 +ADDRLP4 36 +INDIRP4 +CVPU4 4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ADDRFP4 8 +INDIRI4 +SUBI4 +ASGNI4 +LABELV $133 +ADDRLP4 12 +ADDRLP4 80 +INDIRI4 +ASGNI4 +line 171 +;171: vecswap(pb, pn - r, r); +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +LEI4 $134 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 12 +INDIRI4 +SUBP4 +ARGP4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 swapfunc +CALLV +pop +LABELV $134 +line 172 +;172: if ((r = pb - pa) > es) +ADDRLP4 92 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 20 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 92 +INDIRI4 +ASGNI4 +ADDRLP4 92 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LEI4 $136 +line 173 +;173: qsort(a, r / es, es, cmp); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 96 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 96 +INDIRI4 +DIVI4 +ARGI4 +ADDRLP4 96 +INDIRI4 +ARGI4 +ADDRFP4 12 +INDIRP4 +ARGP4 +ADDRGP4 qsort +CALLV +pop +LABELV $136 +line 174 +;174: if ((r = pd - pc) > es) { +ADDRLP4 100 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 100 +INDIRI4 +ASGNI4 +ADDRLP4 100 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LEI4 $138 +line 176 +;175: /* Iterate rather than recurse to save stack space */ +;176: a = pn - r; +ADDRFP4 0 +ADDRLP4 36 +INDIRP4 +ADDRLP4 12 +INDIRI4 +SUBP4 +ASGNP4 +line 177 +;177: n = r / es; +ADDRFP4 4 +ADDRLP4 12 +INDIRI4 +ADDRFP4 8 +INDIRI4 +DIVI4 +ASGNI4 +line 178 +;178: goto loop; +ADDRGP4 $62 +JUMPV +LABELV $138 +line 181 +;179: } +;180:/* qsort(pn - r, r / es, es, cmp);*/ +;181:} +LABELV $61 +endproc qsort 104 16 +export strlen +proc strlen 4 0 +line 191 +;182: +;183://================================================================================== +;184: +;185: +;186:// this file is excluded from release builds because of intrinsics +;187: +;188:// bk001211 - gcc errors on compiling strcpy: parse error before `__extension__' +;189:#if defined ( Q3_VM ) +;190: +;191:size_t strlen( const char *string ) { +line 194 +;192: const char *s; +;193: +;194: s = string; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $142 +JUMPV +LABELV $141 +line 195 +;195: while ( *s ) { +line 196 +;196: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 197 +;197: } +LABELV $142 +line 195 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $141 +line 198 +;198: return s - string; +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +RETI4 +LABELV $140 +endproc strlen 4 0 +export strcat +proc strcat 16 0 +line 202 +;199:} +;200: +;201: +;202:char *strcat( char *strDestination, const char *strSource ) { +line 205 +;203: char *s; +;204: +;205: s = strDestination; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $146 +JUMPV +LABELV $145 +line 206 +;206: while ( *s ) { +line 207 +;207: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 208 +;208: } +LABELV $146 +line 206 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $145 +ADDRGP4 $149 +JUMPV +LABELV $148 +line 209 +;209: while ( *strSource ) { +line 210 +;210: *s++ = *strSource++; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI1 +ASGNI1 +line 211 +;211: } +LABELV $149 +line 209 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $148 +line 212 +;212: *s = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 213 +;213: return strDestination; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $144 +endproc strcat 16 0 +export strcpy +proc strcpy 16 0 +line 216 +;214:} +;215: +;216:char *strcpy( char *strDestination, const char *strSource ) { +line 219 +;217: char *s; +;218: +;219: s = strDestination; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $153 +JUMPV +LABELV $152 +line 220 +;220: while ( *strSource ) { +line 221 +;221: *s++ = *strSource++; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI1 +ASGNI1 +line 222 +;222: } +LABELV $153 +line 220 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $152 +line 223 +;223: *s = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 224 +;224: return strDestination; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $151 +endproc strcpy 16 0 +export strcmp +proc strcmp 12 0 +line 228 +;225:} +;226: +;227: +;228:int strcmp( const char *string1, const char *string2 ) { +ADDRGP4 $157 +JUMPV +LABELV $156 +line 229 +;229: while ( *string1 == *string2 && *string1 && *string2 ) { +line 230 +;230: string1++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 231 +;231: string2++; +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 232 +;232: } +LABELV $157 +line 229 +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $160 +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +EQI4 $160 +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +NEI4 $156 +LABELV $160 +line 233 +;233: return *string1 - *string2; +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +SUBI4 +RETI4 +LABELV $155 +endproc strcmp 12 0 +export strchr +proc strchr 0 0 +line 237 +;234:} +;235: +;236: +;237:char *strchr( const char *string, int c ) { +ADDRGP4 $163 +JUMPV +LABELV $162 +line 238 +;238: while ( *string ) { +line 239 +;239: if ( *string == c ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ADDRFP4 4 +INDIRI4 +NEI4 $165 +line 240 +;240: return ( char * )string; +ADDRFP4 0 +INDIRP4 +RETP4 +ADDRGP4 $161 +JUMPV +LABELV $165 +line 242 +;241: } +;242: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 243 +;243: } +LABELV $163 +line 238 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $162 +line 244 +;244: return (char *)0; +CNSTP4 0 +RETP4 +LABELV $161 +endproc strchr 0 0 +export strstr +proc strstr 8 0 +line 247 +;245:} +;246: +;247:char *strstr( const char *string, const char *strCharSet ) { +ADDRGP4 $169 +JUMPV +LABELV $168 +line 248 +;248: while ( *string ) { +line 251 +;249: int i; +;250: +;251: for ( i = 0 ; strCharSet[i] ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $174 +JUMPV +LABELV $171 +line 252 +;252: if ( string[i] != strCharSet[i] ) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +EQI4 $175 +line 253 +;253: break; +ADDRGP4 $173 +JUMPV +LABELV $175 +line 255 +;254: } +;255: } +LABELV $172 +line 251 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $174 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $171 +LABELV $173 +line 256 +;256: if ( !strCharSet[i] ) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $177 +line 257 +;257: return (char *)string; +ADDRFP4 0 +INDIRP4 +RETP4 +ADDRGP4 $167 +JUMPV +LABELV $177 +line 259 +;258: } +;259: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 260 +;260: } +LABELV $169 +line 248 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $168 +line 261 +;261: return (char *)0; +CNSTP4 0 +RETP4 +LABELV $167 +endproc strstr 8 0 +export tolower +proc tolower 4 0 +line 269 +;262:} +;263:#endif // bk001211 +;264: +;265:// bk001120 - presumably needed for Mac +;266://#if !defined(_MSC_VER) && !defined(__linux__) +;267:// bk001127 - undid undo +;268:#if defined ( Q3_VM ) +;269:int tolower( int c ) { +line 270 +;270: if ( c >= 'A' && c <= 'Z' ) { +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 65 +LTI4 $180 +ADDRLP4 0 +INDIRI4 +CNSTI4 90 +GTI4 $180 +line 271 +;271: c += 'a' - 'A'; +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 32 +ADDI4 +ASGNI4 +line 272 +;272: } +LABELV $180 +line 273 +;273: return c; +ADDRFP4 0 +INDIRI4 +RETI4 +LABELV $179 +endproc tolower 4 0 +export toupper +proc toupper 4 0 +line 277 +;274:} +;275: +;276: +;277:int toupper( int c ) { +line 278 +;278: if ( c >= 'a' && c <= 'z' ) { +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 97 +LTI4 $183 +ADDRLP4 0 +INDIRI4 +CNSTI4 122 +GTI4 $183 +line 279 +;279: c += 'A' - 'a'; +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 -32 +ADDI4 +ASGNI4 +line 280 +;280: } +LABELV $183 +line 281 +;281: return c; +ADDRFP4 0 +INDIRI4 +RETI4 +LABELV $182 +endproc toupper 4 0 +export memmove +proc memmove 8 0 +line 287 +;282:} +;283: +;284:#endif +;285://#ifndef _MSC_VER +;286: +;287:void *memmove( void *dest, const void *src, size_t count ) { +line 290 +;288: int i; +;289: +;290: if ( dest > src ) { +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 4 +INDIRP4 +CVPU4 4 +LEU4 $186 +line 291 +;291: for ( i = count-1 ; i >= 0 ; i-- ) { +ADDRLP4 0 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRGP4 $191 +JUMPV +LABELV $188 +line 292 +;292: ((char *)dest)[i] = ((char *)src)[i]; +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 293 +;293: } +LABELV $189 +line 291 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +LABELV $191 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $188 +line 294 +;294: } else { +ADDRGP4 $187 +JUMPV +LABELV $186 +line 295 +;295: for ( i = 0 ; i < count ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $195 +JUMPV +LABELV $192 +line 296 +;296: ((char *)dest)[i] = ((char *)src)[i]; +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 297 +;297: } +LABELV $193 +line 295 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $195 +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LTI4 $192 +line 298 +;298: } +LABELV $187 +line 299 +;299: return dest; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $185 +endproc memmove 8 0 +export tan +proc tan 8 4 +line 757 +;300:} +;301: +;302: +;303:#if 0 +;304: +;305:double floor( double x ) { +;306: return (int)(x + 0x40000000) - 0x40000000; +;307:} +;308: +;309:void *memset( void *dest, int c, size_t count ) { +;310: while ( count-- ) { +;311: ((char *)dest)[count] = c; +;312: } +;313: return dest; +;314:} +;315: +;316:void *memcpy( void *dest, const void *src, size_t count ) { +;317: while ( count-- ) { +;318: ((char *)dest)[count] = ((char *)src)[count]; +;319: } +;320: return dest; +;321:} +;322: +;323:char *strncpy( char *strDest, const char *strSource, size_t count ) { +;324: char *s; +;325: +;326: s = strDest; +;327: while ( *strSource && count ) { +;328: *s++ = *strSource++; +;329: count--; +;330: } +;331: while ( count-- ) { +;332: *s++ = 0; +;333: } +;334: return strDest; +;335:} +;336: +;337:double sqrt( double x ) { +;338: float y; +;339: float delta; +;340: float maxError; +;341: +;342: if ( x <= 0 ) { +;343: return 0; +;344: } +;345: +;346: // initial guess +;347: y = x / 2; +;348: +;349: // refine +;350: maxError = x * 0.001; +;351: +;352: do { +;353: delta = ( y * y ) - x; +;354: y -= delta / ( 2 * y ); +;355: } while ( delta > maxError || delta < -maxError ); +;356: +;357: return y; +;358:} +;359: +;360: +;361:float sintable[1024] = { +;362:0.000000,0.001534,0.003068,0.004602,0.006136,0.007670,0.009204,0.010738, +;363:0.012272,0.013805,0.015339,0.016873,0.018407,0.019940,0.021474,0.023008, +;364:0.024541,0.026075,0.027608,0.029142,0.030675,0.032208,0.033741,0.035274, +;365:0.036807,0.038340,0.039873,0.041406,0.042938,0.044471,0.046003,0.047535, +;366:0.049068,0.050600,0.052132,0.053664,0.055195,0.056727,0.058258,0.059790, +;367:0.061321,0.062852,0.064383,0.065913,0.067444,0.068974,0.070505,0.072035, +;368:0.073565,0.075094,0.076624,0.078153,0.079682,0.081211,0.082740,0.084269, +;369:0.085797,0.087326,0.088854,0.090381,0.091909,0.093436,0.094963,0.096490, +;370:0.098017,0.099544,0.101070,0.102596,0.104122,0.105647,0.107172,0.108697, +;371:0.110222,0.111747,0.113271,0.114795,0.116319,0.117842,0.119365,0.120888, +;372:0.122411,0.123933,0.125455,0.126977,0.128498,0.130019,0.131540,0.133061, +;373:0.134581,0.136101,0.137620,0.139139,0.140658,0.142177,0.143695,0.145213, +;374:0.146730,0.148248,0.149765,0.151281,0.152797,0.154313,0.155828,0.157343, +;375:0.158858,0.160372,0.161886,0.163400,0.164913,0.166426,0.167938,0.169450, +;376:0.170962,0.172473,0.173984,0.175494,0.177004,0.178514,0.180023,0.181532, +;377:0.183040,0.184548,0.186055,0.187562,0.189069,0.190575,0.192080,0.193586, +;378:0.195090,0.196595,0.198098,0.199602,0.201105,0.202607,0.204109,0.205610, +;379:0.207111,0.208612,0.210112,0.211611,0.213110,0.214609,0.216107,0.217604, +;380:0.219101,0.220598,0.222094,0.223589,0.225084,0.226578,0.228072,0.229565, +;381:0.231058,0.232550,0.234042,0.235533,0.237024,0.238514,0.240003,0.241492, +;382:0.242980,0.244468,0.245955,0.247442,0.248928,0.250413,0.251898,0.253382, +;383:0.254866,0.256349,0.257831,0.259313,0.260794,0.262275,0.263755,0.265234, +;384:0.266713,0.268191,0.269668,0.271145,0.272621,0.274097,0.275572,0.277046, +;385:0.278520,0.279993,0.281465,0.282937,0.284408,0.285878,0.287347,0.288816, +;386:0.290285,0.291752,0.293219,0.294685,0.296151,0.297616,0.299080,0.300543, +;387:0.302006,0.303468,0.304929,0.306390,0.307850,0.309309,0.310767,0.312225, +;388:0.313682,0.315138,0.316593,0.318048,0.319502,0.320955,0.322408,0.323859, +;389:0.325310,0.326760,0.328210,0.329658,0.331106,0.332553,0.334000,0.335445, +;390:0.336890,0.338334,0.339777,0.341219,0.342661,0.344101,0.345541,0.346980, +;391:0.348419,0.349856,0.351293,0.352729,0.354164,0.355598,0.357031,0.358463, +;392:0.359895,0.361326,0.362756,0.364185,0.365613,0.367040,0.368467,0.369892, +;393:0.371317,0.372741,0.374164,0.375586,0.377007,0.378428,0.379847,0.381266, +;394:0.382683,0.384100,0.385516,0.386931,0.388345,0.389758,0.391170,0.392582, +;395:0.393992,0.395401,0.396810,0.398218,0.399624,0.401030,0.402435,0.403838, +;396:0.405241,0.406643,0.408044,0.409444,0.410843,0.412241,0.413638,0.415034, +;397:0.416430,0.417824,0.419217,0.420609,0.422000,0.423390,0.424780,0.426168, +;398:0.427555,0.428941,0.430326,0.431711,0.433094,0.434476,0.435857,0.437237, +;399:0.438616,0.439994,0.441371,0.442747,0.444122,0.445496,0.446869,0.448241, +;400:0.449611,0.450981,0.452350,0.453717,0.455084,0.456449,0.457813,0.459177, +;401:0.460539,0.461900,0.463260,0.464619,0.465976,0.467333,0.468689,0.470043, +;402:0.471397,0.472749,0.474100,0.475450,0.476799,0.478147,0.479494,0.480839, +;403:0.482184,0.483527,0.484869,0.486210,0.487550,0.488889,0.490226,0.491563, +;404:0.492898,0.494232,0.495565,0.496897,0.498228,0.499557,0.500885,0.502212, +;405:0.503538,0.504863,0.506187,0.507509,0.508830,0.510150,0.511469,0.512786, +;406:0.514103,0.515418,0.516732,0.518045,0.519356,0.520666,0.521975,0.523283, +;407:0.524590,0.525895,0.527199,0.528502,0.529804,0.531104,0.532403,0.533701, +;408:0.534998,0.536293,0.537587,0.538880,0.540171,0.541462,0.542751,0.544039, +;409:0.545325,0.546610,0.547894,0.549177,0.550458,0.551738,0.553017,0.554294, +;410:0.555570,0.556845,0.558119,0.559391,0.560662,0.561931,0.563199,0.564466, +;411:0.565732,0.566996,0.568259,0.569521,0.570781,0.572040,0.573297,0.574553, +;412:0.575808,0.577062,0.578314,0.579565,0.580814,0.582062,0.583309,0.584554, +;413:0.585798,0.587040,0.588282,0.589521,0.590760,0.591997,0.593232,0.594466, +;414:0.595699,0.596931,0.598161,0.599389,0.600616,0.601842,0.603067,0.604290, +;415:0.605511,0.606731,0.607950,0.609167,0.610383,0.611597,0.612810,0.614022, +;416:0.615232,0.616440,0.617647,0.618853,0.620057,0.621260,0.622461,0.623661, +;417:0.624859,0.626056,0.627252,0.628446,0.629638,0.630829,0.632019,0.633207, +;418:0.634393,0.635578,0.636762,0.637944,0.639124,0.640303,0.641481,0.642657, +;419:0.643832,0.645005,0.646176,0.647346,0.648514,0.649681,0.650847,0.652011, +;420:0.653173,0.654334,0.655493,0.656651,0.657807,0.658961,0.660114,0.661266, +;421:0.662416,0.663564,0.664711,0.665856,0.667000,0.668142,0.669283,0.670422, +;422:0.671559,0.672695,0.673829,0.674962,0.676093,0.677222,0.678350,0.679476, +;423:0.680601,0.681724,0.682846,0.683965,0.685084,0.686200,0.687315,0.688429, +;424:0.689541,0.690651,0.691759,0.692866,0.693971,0.695075,0.696177,0.697278, +;425:0.698376,0.699473,0.700569,0.701663,0.702755,0.703845,0.704934,0.706021, +;426:0.707107,0.708191,0.709273,0.710353,0.711432,0.712509,0.713585,0.714659, +;427:0.715731,0.716801,0.717870,0.718937,0.720003,0.721066,0.722128,0.723188, +;428:0.724247,0.725304,0.726359,0.727413,0.728464,0.729514,0.730563,0.731609, +;429:0.732654,0.733697,0.734739,0.735779,0.736817,0.737853,0.738887,0.739920, +;430:0.740951,0.741980,0.743008,0.744034,0.745058,0.746080,0.747101,0.748119, +;431:0.749136,0.750152,0.751165,0.752177,0.753187,0.754195,0.755201,0.756206, +;432:0.757209,0.758210,0.759209,0.760207,0.761202,0.762196,0.763188,0.764179, +;433:0.765167,0.766154,0.767139,0.768122,0.769103,0.770083,0.771061,0.772036, +;434:0.773010,0.773983,0.774953,0.775922,0.776888,0.777853,0.778817,0.779778, +;435:0.780737,0.781695,0.782651,0.783605,0.784557,0.785507,0.786455,0.787402, +;436:0.788346,0.789289,0.790230,0.791169,0.792107,0.793042,0.793975,0.794907, +;437:0.795837,0.796765,0.797691,0.798615,0.799537,0.800458,0.801376,0.802293, +;438:0.803208,0.804120,0.805031,0.805940,0.806848,0.807753,0.808656,0.809558, +;439:0.810457,0.811355,0.812251,0.813144,0.814036,0.814926,0.815814,0.816701, +;440:0.817585,0.818467,0.819348,0.820226,0.821103,0.821977,0.822850,0.823721, +;441:0.824589,0.825456,0.826321,0.827184,0.828045,0.828904,0.829761,0.830616, +;442:0.831470,0.832321,0.833170,0.834018,0.834863,0.835706,0.836548,0.837387, +;443:0.838225,0.839060,0.839894,0.840725,0.841555,0.842383,0.843208,0.844032, +;444:0.844854,0.845673,0.846491,0.847307,0.848120,0.848932,0.849742,0.850549, +;445:0.851355,0.852159,0.852961,0.853760,0.854558,0.855354,0.856147,0.856939, +;446:0.857729,0.858516,0.859302,0.860085,0.860867,0.861646,0.862424,0.863199, +;447:0.863973,0.864744,0.865514,0.866281,0.867046,0.867809,0.868571,0.869330, +;448:0.870087,0.870842,0.871595,0.872346,0.873095,0.873842,0.874587,0.875329, +;449:0.876070,0.876809,0.877545,0.878280,0.879012,0.879743,0.880471,0.881197, +;450:0.881921,0.882643,0.883363,0.884081,0.884797,0.885511,0.886223,0.886932, +;451:0.887640,0.888345,0.889048,0.889750,0.890449,0.891146,0.891841,0.892534, +;452:0.893224,0.893913,0.894599,0.895284,0.895966,0.896646,0.897325,0.898001, +;453:0.898674,0.899346,0.900016,0.900683,0.901349,0.902012,0.902673,0.903332, +;454:0.903989,0.904644,0.905297,0.905947,0.906596,0.907242,0.907886,0.908528, +;455:0.909168,0.909806,0.910441,0.911075,0.911706,0.912335,0.912962,0.913587, +;456:0.914210,0.914830,0.915449,0.916065,0.916679,0.917291,0.917901,0.918508, +;457:0.919114,0.919717,0.920318,0.920917,0.921514,0.922109,0.922701,0.923291, +;458:0.923880,0.924465,0.925049,0.925631,0.926210,0.926787,0.927363,0.927935, +;459:0.928506,0.929075,0.929641,0.930205,0.930767,0.931327,0.931884,0.932440, +;460:0.932993,0.933544,0.934093,0.934639,0.935184,0.935726,0.936266,0.936803, +;461:0.937339,0.937872,0.938404,0.938932,0.939459,0.939984,0.940506,0.941026, +;462:0.941544,0.942060,0.942573,0.943084,0.943593,0.944100,0.944605,0.945107, +;463:0.945607,0.946105,0.946601,0.947094,0.947586,0.948075,0.948561,0.949046, +;464:0.949528,0.950008,0.950486,0.950962,0.951435,0.951906,0.952375,0.952842, +;465:0.953306,0.953768,0.954228,0.954686,0.955141,0.955594,0.956045,0.956494, +;466:0.956940,0.957385,0.957826,0.958266,0.958703,0.959139,0.959572,0.960002, +;467:0.960431,0.960857,0.961280,0.961702,0.962121,0.962538,0.962953,0.963366, +;468:0.963776,0.964184,0.964590,0.964993,0.965394,0.965793,0.966190,0.966584, +;469:0.966976,0.967366,0.967754,0.968139,0.968522,0.968903,0.969281,0.969657, +;470:0.970031,0.970403,0.970772,0.971139,0.971504,0.971866,0.972226,0.972584, +;471:0.972940,0.973293,0.973644,0.973993,0.974339,0.974684,0.975025,0.975365, +;472:0.975702,0.976037,0.976370,0.976700,0.977028,0.977354,0.977677,0.977999, +;473:0.978317,0.978634,0.978948,0.979260,0.979570,0.979877,0.980182,0.980485, +;474:0.980785,0.981083,0.981379,0.981673,0.981964,0.982253,0.982539,0.982824, +;475:0.983105,0.983385,0.983662,0.983937,0.984210,0.984480,0.984749,0.985014, +;476:0.985278,0.985539,0.985798,0.986054,0.986308,0.986560,0.986809,0.987057, +;477:0.987301,0.987544,0.987784,0.988022,0.988258,0.988491,0.988722,0.988950, +;478:0.989177,0.989400,0.989622,0.989841,0.990058,0.990273,0.990485,0.990695, +;479:0.990903,0.991108,0.991311,0.991511,0.991710,0.991906,0.992099,0.992291, +;480:0.992480,0.992666,0.992850,0.993032,0.993212,0.993389,0.993564,0.993737, +;481:0.993907,0.994075,0.994240,0.994404,0.994565,0.994723,0.994879,0.995033, +;482:0.995185,0.995334,0.995481,0.995625,0.995767,0.995907,0.996045,0.996180, +;483:0.996313,0.996443,0.996571,0.996697,0.996820,0.996941,0.997060,0.997176, +;484:0.997290,0.997402,0.997511,0.997618,0.997723,0.997825,0.997925,0.998023, +;485:0.998118,0.998211,0.998302,0.998390,0.998476,0.998559,0.998640,0.998719, +;486:0.998795,0.998870,0.998941,0.999011,0.999078,0.999142,0.999205,0.999265, +;487:0.999322,0.999378,0.999431,0.999481,0.999529,0.999575,0.999619,0.999660, +;488:0.999699,0.999735,0.999769,0.999801,0.999831,0.999858,0.999882,0.999905, +;489:0.999925,0.999942,0.999958,0.999971,0.999981,0.999989,0.999995,0.999999 +;490:}; +;491: +;492:double sin( double x ) { +;493: int index; +;494: int quad; +;495: +;496: index = 1024 * x / (M_PI * 0.5); +;497: quad = ( index >> 10 ) & 3; +;498: index &= 1023; +;499: switch ( quad ) { +;500: case 0: +;501: return sintable[index]; +;502: case 1: +;503: return sintable[1023-index]; +;504: case 2: +;505: return -sintable[index]; +;506: case 3: +;507: return -sintable[1023-index]; +;508: } +;509: return 0; +;510:} +;511: +;512: +;513:double cos( double x ) { +;514: int index; +;515: int quad; +;516: +;517: index = 1024 * x / (M_PI * 0.5); +;518: quad = ( index >> 10 ) & 3; +;519: index &= 1023; +;520: switch ( quad ) { +;521: case 3: +;522: return sintable[index]; +;523: case 0: +;524: return sintable[1023-index]; +;525: case 1: +;526: return -sintable[index]; +;527: case 2: +;528: return -sintable[1023-index]; +;529: } +;530: return 0; +;531:} +;532: +;533: +;534:/* +;535:void create_acostable( void ) { +;536: int i; +;537: FILE *fp; +;538: float a; +;539: +;540: fp = fopen("c:\\acostable.txt", "w"); +;541: fprintf(fp, "float acostable[] = {"); +;542: for (i = 0; i < 1024; i++) { +;543: if (!(i & 7)) +;544: fprintf(fp, "\n"); +;545: a = acos( (float) -1 + i / 512 ); +;546: fprintf(fp, "%1.8f,", a); +;547: } +;548: fprintf(fp, "\n}\n"); +;549: fclose(fp); +;550:} +;551:*/ +;552: +;553:float acostable[] = { +;554:3.14159265,3.07908248,3.05317551,3.03328655,3.01651113,3.00172442,2.98834964,2.97604422, +;555:2.96458497,2.95381690,2.94362719,2.93393068,2.92466119,2.91576615,2.90720289,2.89893629, +;556:2.89093699,2.88318015,2.87564455,2.86831188,2.86116621,2.85419358,2.84738169,2.84071962, +;557:2.83419760,2.82780691,2.82153967,2.81538876,2.80934770,2.80341062,2.79757211,2.79182724, +;558:2.78617145,2.78060056,2.77511069,2.76969824,2.76435988,2.75909250,2.75389319,2.74875926, +;559:2.74368816,2.73867752,2.73372510,2.72882880,2.72398665,2.71919677,2.71445741,2.70976688, +;560:2.70512362,2.70052613,2.69597298,2.69146283,2.68699438,2.68256642,2.67817778,2.67382735, +;561:2.66951407,2.66523692,2.66099493,2.65678719,2.65261279,2.64847088,2.64436066,2.64028133, +;562:2.63623214,2.63221238,2.62822133,2.62425835,2.62032277,2.61641398,2.61253138,2.60867440, +;563:2.60484248,2.60103507,2.59725167,2.59349176,2.58975488,2.58604053,2.58234828,2.57867769, +;564:2.57502832,2.57139977,2.56779164,2.56420354,2.56063509,2.55708594,2.55355572,2.55004409, +;565:2.54655073,2.54307530,2.53961750,2.53617701,2.53275354,2.52934680,2.52595650,2.52258238, +;566:2.51922417,2.51588159,2.51255441,2.50924238,2.50594525,2.50266278,2.49939476,2.49614096, +;567:2.49290115,2.48967513,2.48646269,2.48326362,2.48007773,2.47690482,2.47374472,2.47059722, +;568:2.46746215,2.46433933,2.46122860,2.45812977,2.45504269,2.45196720,2.44890314,2.44585034, +;569:2.44280867,2.43977797,2.43675809,2.43374890,2.43075025,2.42776201,2.42478404,2.42181622, +;570:2.41885841,2.41591048,2.41297232,2.41004380,2.40712480,2.40421521,2.40131491,2.39842379, +;571:2.39554173,2.39266863,2.38980439,2.38694889,2.38410204,2.38126374,2.37843388,2.37561237, +;572:2.37279910,2.36999400,2.36719697,2.36440790,2.36162673,2.35885335,2.35608768,2.35332964, +;573:2.35057914,2.34783610,2.34510044,2.34237208,2.33965094,2.33693695,2.33423003,2.33153010, +;574:2.32883709,2.32615093,2.32347155,2.32079888,2.31813284,2.31547337,2.31282041,2.31017388, +;575:2.30753373,2.30489988,2.30227228,2.29965086,2.29703556,2.29442632,2.29182309,2.28922580, +;576:2.28663439,2.28404881,2.28146900,2.27889490,2.27632647,2.27376364,2.27120637,2.26865460, +;577:2.26610827,2.26356735,2.26103177,2.25850149,2.25597646,2.25345663,2.25094195,2.24843238, +;578:2.24592786,2.24342836,2.24093382,2.23844420,2.23595946,2.23347956,2.23100444,2.22853408, +;579:2.22606842,2.22360742,2.22115104,2.21869925,2.21625199,2.21380924,2.21137096,2.20893709, +;580:2.20650761,2.20408248,2.20166166,2.19924511,2.19683280,2.19442469,2.19202074,2.18962092, +;581:2.18722520,2.18483354,2.18244590,2.18006225,2.17768257,2.17530680,2.17293493,2.17056692, +;582:2.16820274,2.16584236,2.16348574,2.16113285,2.15878367,2.15643816,2.15409630,2.15175805, +;583:2.14942338,2.14709226,2.14476468,2.14244059,2.14011997,2.13780279,2.13548903,2.13317865, +;584:2.13087163,2.12856795,2.12626757,2.12397047,2.12167662,2.11938600,2.11709859,2.11481435, +;585:2.11253326,2.11025530,2.10798044,2.10570867,2.10343994,2.10117424,2.09891156,2.09665185, +;586:2.09439510,2.09214129,2.08989040,2.08764239,2.08539725,2.08315496,2.08091550,2.07867884, +;587:2.07644495,2.07421383,2.07198545,2.06975978,2.06753681,2.06531651,2.06309887,2.06088387, +;588:2.05867147,2.05646168,2.05425445,2.05204979,2.04984765,2.04764804,2.04545092,2.04325628, +;589:2.04106409,2.03887435,2.03668703,2.03450211,2.03231957,2.03013941,2.02796159,2.02578610, +;590:2.02361292,2.02144204,2.01927344,2.01710710,2.01494300,2.01278113,2.01062146,2.00846399, +;591:2.00630870,2.00415556,2.00200457,1.99985570,1.99770895,1.99556429,1.99342171,1.99128119, +;592:1.98914271,1.98700627,1.98487185,1.98273942,1.98060898,1.97848051,1.97635399,1.97422942, +;593:1.97210676,1.96998602,1.96786718,1.96575021,1.96363511,1.96152187,1.95941046,1.95730088, +;594:1.95519310,1.95308712,1.95098292,1.94888050,1.94677982,1.94468089,1.94258368,1.94048818, +;595:1.93839439,1.93630228,1.93421185,1.93212308,1.93003595,1.92795046,1.92586659,1.92378433, +;596:1.92170367,1.91962459,1.91754708,1.91547113,1.91339673,1.91132385,1.90925250,1.90718266, +;597:1.90511432,1.90304746,1.90098208,1.89891815,1.89685568,1.89479464,1.89273503,1.89067683, +;598:1.88862003,1.88656463,1.88451060,1.88245794,1.88040664,1.87835668,1.87630806,1.87426076, +;599:1.87221477,1.87017008,1.86812668,1.86608457,1.86404371,1.86200412,1.85996577,1.85792866, +;600:1.85589277,1.85385809,1.85182462,1.84979234,1.84776125,1.84573132,1.84370256,1.84167495, +;601:1.83964848,1.83762314,1.83559892,1.83357582,1.83155381,1.82953289,1.82751305,1.82549429, +;602:1.82347658,1.82145993,1.81944431,1.81742973,1.81541617,1.81340362,1.81139207,1.80938151, +;603:1.80737194,1.80536334,1.80335570,1.80134902,1.79934328,1.79733848,1.79533460,1.79333164, +;604:1.79132959,1.78932843,1.78732817,1.78532878,1.78333027,1.78133261,1.77933581,1.77733985, +;605:1.77534473,1.77335043,1.77135695,1.76936428,1.76737240,1.76538132,1.76339101,1.76140148, +;606:1.75941271,1.75742470,1.75543743,1.75345090,1.75146510,1.74948002,1.74749565,1.74551198, +;607:1.74352900,1.74154672,1.73956511,1.73758417,1.73560389,1.73362426,1.73164527,1.72966692, +;608:1.72768920,1.72571209,1.72373560,1.72175971,1.71978441,1.71780969,1.71583556,1.71386199, +;609:1.71188899,1.70991653,1.70794462,1.70597325,1.70400241,1.70203209,1.70006228,1.69809297, +;610:1.69612416,1.69415584,1.69218799,1.69022062,1.68825372,1.68628727,1.68432127,1.68235571, +;611:1.68039058,1.67842588,1.67646160,1.67449772,1.67253424,1.67057116,1.66860847,1.66664615, +;612:1.66468420,1.66272262,1.66076139,1.65880050,1.65683996,1.65487975,1.65291986,1.65096028, +;613:1.64900102,1.64704205,1.64508338,1.64312500,1.64116689,1.63920905,1.63725148,1.63529416, +;614:1.63333709,1.63138026,1.62942366,1.62746728,1.62551112,1.62355517,1.62159943,1.61964388, +;615:1.61768851,1.61573332,1.61377831,1.61182346,1.60986877,1.60791422,1.60595982,1.60400556, +;616:1.60205142,1.60009739,1.59814349,1.59618968,1.59423597,1.59228235,1.59032882,1.58837536, +;617:1.58642196,1.58446863,1.58251535,1.58056211,1.57860891,1.57665574,1.57470259,1.57274945, +;618:1.57079633,1.56884320,1.56689007,1.56493692,1.56298375,1.56103055,1.55907731,1.55712403, +;619:1.55517069,1.55321730,1.55126383,1.54931030,1.54735668,1.54540297,1.54344917,1.54149526, +;620:1.53954124,1.53758710,1.53563283,1.53367843,1.53172389,1.52976919,1.52781434,1.52585933, +;621:1.52390414,1.52194878,1.51999323,1.51803748,1.51608153,1.51412537,1.51216900,1.51021240, +;622:1.50825556,1.50629849,1.50434117,1.50238360,1.50042576,1.49846765,1.49650927,1.49455060, +;623:1.49259163,1.49063237,1.48867280,1.48671291,1.48475270,1.48279215,1.48083127,1.47887004, +;624:1.47690845,1.47494650,1.47298419,1.47102149,1.46905841,1.46709493,1.46513106,1.46316677, +;625:1.46120207,1.45923694,1.45727138,1.45530538,1.45333893,1.45137203,1.44940466,1.44743682, +;626:1.44546850,1.44349969,1.44153038,1.43956057,1.43759024,1.43561940,1.43364803,1.43167612, +;627:1.42970367,1.42773066,1.42575709,1.42378296,1.42180825,1.41983295,1.41785705,1.41588056, +;628:1.41390346,1.41192573,1.40994738,1.40796840,1.40598877,1.40400849,1.40202755,1.40004594, +;629:1.39806365,1.39608068,1.39409701,1.39211264,1.39012756,1.38814175,1.38615522,1.38416795, +;630:1.38217994,1.38019117,1.37820164,1.37621134,1.37422025,1.37222837,1.37023570,1.36824222, +;631:1.36624792,1.36425280,1.36225684,1.36026004,1.35826239,1.35626387,1.35426449,1.35226422, +;632:1.35026307,1.34826101,1.34625805,1.34425418,1.34224937,1.34024364,1.33823695,1.33622932, +;633:1.33422072,1.33221114,1.33020059,1.32818904,1.32617649,1.32416292,1.32214834,1.32013273, +;634:1.31811607,1.31609837,1.31407960,1.31205976,1.31003885,1.30801684,1.30599373,1.30396951, +;635:1.30194417,1.29991770,1.29789009,1.29586133,1.29383141,1.29180031,1.28976803,1.28773456, +;636:1.28569989,1.28366400,1.28162688,1.27958854,1.27754894,1.27550809,1.27346597,1.27142257, +;637:1.26937788,1.26733189,1.26528459,1.26323597,1.26118602,1.25913471,1.25708205,1.25502803, +;638:1.25297262,1.25091583,1.24885763,1.24679802,1.24473698,1.24267450,1.24061058,1.23854519, +;639:1.23647833,1.23440999,1.23234015,1.23026880,1.22819593,1.22612152,1.22404557,1.22196806, +;640:1.21988898,1.21780832,1.21572606,1.21364219,1.21155670,1.20946958,1.20738080,1.20529037, +;641:1.20319826,1.20110447,1.19900898,1.19691177,1.19481283,1.19271216,1.19060973,1.18850553, +;642:1.18639955,1.18429178,1.18218219,1.18007079,1.17795754,1.17584244,1.17372548,1.17160663, +;643:1.16948589,1.16736324,1.16523866,1.16311215,1.16098368,1.15885323,1.15672081,1.15458638, +;644:1.15244994,1.15031147,1.14817095,1.14602836,1.14388370,1.14173695,1.13958808,1.13743709, +;645:1.13528396,1.13312866,1.13097119,1.12881153,1.12664966,1.12448556,1.12231921,1.12015061, +;646:1.11797973,1.11580656,1.11363107,1.11145325,1.10927308,1.10709055,1.10490563,1.10271831, +;647:1.10052856,1.09833638,1.09614174,1.09394462,1.09174500,1.08954287,1.08733820,1.08513098, +;648:1.08292118,1.08070879,1.07849378,1.07627614,1.07405585,1.07183287,1.06960721,1.06737882, +;649:1.06514770,1.06291382,1.06067715,1.05843769,1.05619540,1.05395026,1.05170226,1.04945136, +;650:1.04719755,1.04494080,1.04268110,1.04041841,1.03815271,1.03588399,1.03361221,1.03133735, +;651:1.02905939,1.02677830,1.02449407,1.02220665,1.01991603,1.01762219,1.01532509,1.01302471, +;652:1.01072102,1.00841400,1.00610363,1.00378986,1.00147268,0.99915206,0.99682798,0.99450039, +;653:0.99216928,0.98983461,0.98749636,0.98515449,0.98280898,0.98045980,0.97810691,0.97575030, +;654:0.97338991,0.97102573,0.96865772,0.96628585,0.96391009,0.96153040,0.95914675,0.95675912, +;655:0.95436745,0.95197173,0.94957191,0.94716796,0.94475985,0.94234754,0.93993099,0.93751017, +;656:0.93508504,0.93265556,0.93022170,0.92778341,0.92534066,0.92289341,0.92044161,0.91798524, +;657:0.91552424,0.91305858,0.91058821,0.90811309,0.90563319,0.90314845,0.90065884,0.89816430, +;658:0.89566479,0.89316028,0.89065070,0.88813602,0.88561619,0.88309116,0.88056088,0.87802531, +;659:0.87548438,0.87293806,0.87038629,0.86782901,0.86526619,0.86269775,0.86012366,0.85754385, +;660:0.85495827,0.85236686,0.84976956,0.84716633,0.84455709,0.84194179,0.83932037,0.83669277, +;661:0.83405893,0.83141877,0.82877225,0.82611928,0.82345981,0.82079378,0.81812110,0.81544172, +;662:0.81275556,0.81006255,0.80736262,0.80465570,0.80194171,0.79922057,0.79649221,0.79375655, +;663:0.79101352,0.78826302,0.78550497,0.78273931,0.77996593,0.77718475,0.77439569,0.77159865, +;664:0.76879355,0.76598029,0.76315878,0.76032891,0.75749061,0.75464376,0.75178826,0.74892402, +;665:0.74605092,0.74316887,0.74027775,0.73737744,0.73446785,0.73154885,0.72862033,0.72568217, +;666:0.72273425,0.71977644,0.71680861,0.71383064,0.71084240,0.70784376,0.70483456,0.70181469, +;667:0.69878398,0.69574231,0.69268952,0.68962545,0.68654996,0.68346288,0.68036406,0.67725332, +;668:0.67413051,0.67099544,0.66784794,0.66468783,0.66151492,0.65832903,0.65512997,0.65191753, +;669:0.64869151,0.64545170,0.64219789,0.63892987,0.63564741,0.63235028,0.62903824,0.62571106, +;670:0.62236849,0.61901027,0.61563615,0.61224585,0.60883911,0.60541564,0.60197515,0.59851735, +;671:0.59504192,0.59154856,0.58803694,0.58450672,0.58095756,0.57738911,0.57380101,0.57019288, +;672:0.56656433,0.56291496,0.55924437,0.55555212,0.55183778,0.54810089,0.54434099,0.54055758, +;673:0.53675018,0.53291825,0.52906127,0.52517867,0.52126988,0.51733431,0.51337132,0.50938028, +;674:0.50536051,0.50131132,0.49723200,0.49312177,0.48897987,0.48480547,0.48059772,0.47635573, +;675:0.47207859,0.46776530,0.46341487,0.45902623,0.45459827,0.45012983,0.44561967,0.44106652, +;676:0.43646903,0.43182577,0.42713525,0.42239588,0.41760600,0.41276385,0.40786755,0.40291513, +;677:0.39790449,0.39283339,0.38769946,0.38250016,0.37723277,0.37189441,0.36648196,0.36099209, +;678:0.35542120,0.34976542,0.34402054,0.33818204,0.33224495,0.32620390,0.32005298,0.31378574, +;679:0.30739505,0.30087304,0.29421096,0.28739907,0.28042645,0.27328078,0.26594810,0.25841250, +;680:0.25065566,0.24265636,0.23438976,0.22582651,0.21693146,0.20766198,0.19796546,0.18777575, +;681:0.17700769,0.16554844,0.15324301,0.13986823,0.12508152,0.10830610,0.08841715,0.06251018, +;682:} +;683: +;684:double acos( double x ) { +;685: int index; +;686: +;687: if (x < -1) +;688: x = -1; +;689: if (x > 1) +;690: x = 1; +;691: index = (float) (1.0 + x) * 511.9; +;692: return acostable[index]; +;693:} +;694: +;695:double atan2( double y, double x ) { +;696: float base; +;697: float temp; +;698: float dir; +;699: float test; +;700: int i; +;701: +;702: if ( x < 0 ) { +;703: if ( y >= 0 ) { +;704: // quad 1 +;705: base = M_PI / 2; +;706: temp = x; +;707: x = y; +;708: y = -temp; +;709: } else { +;710: // quad 2 +;711: base = M_PI; +;712: x = -x; +;713: y = -y; +;714: } +;715: } else { +;716: if ( y < 0 ) { +;717: // quad 3 +;718: base = 3 * M_PI / 2; +;719: temp = x; +;720: x = -y; +;721: y = temp; +;722: } +;723: } +;724: +;725: if ( y > x ) { +;726: base += M_PI/2; +;727: temp = x; +;728: x = y; +;729: y = temp; +;730: dir = -1; +;731: } else { +;732: dir = 1; +;733: } +;734: +;735: // calcualte angle in octant 0 +;736: if ( x == 0 ) { +;737: return base; +;738: } +;739: y /= x; +;740: +;741: for ( i = 0 ; i < 512 ; i++ ) { +;742: test = sintable[i] / sintable[1023-i]; +;743: if ( test > y ) { +;744: break; +;745: } +;746: } +;747: +;748: return base + dir * i * ( M_PI/2048); +;749:} +;750: +;751: +;752:#endif +;753: +;754:#ifdef Q3_VM +;755:// bk001127 - guarded this tan replacement +;756:// ld: undefined versioned symbol name tan@@GLIBC_2.0 +;757:double tan( double x ) { +line 758 +;758: return sin(x) / cos(x); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRLP4 4 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRLP4 0 +INDIRF4 +ADDRLP4 4 +INDIRF4 +DIVF4 +RETF4 +LABELV $196 +endproc tan 8 4 +data +align 4 +LABELV randSeed +byte 4 0 +export srand +code +proc srand 0 0 +line 765 +;759:} +;760:#endif +;761: +;762: +;763:static int randSeed = 0; +;764: +;765:void srand( unsigned seed ) { +line 766 +;766: randSeed = seed; +ADDRGP4 randSeed +ADDRFP4 0 +INDIRU4 +CVUI4 4 +ASGNI4 +line 767 +;767:} +LABELV $197 +endproc srand 0 0 +export rand +proc rand 4 0 +line 769 +;768: +;769:int rand( void ) { +line 770 +;770: randSeed = (69069 * randSeed + 1); +ADDRLP4 0 +ADDRGP4 randSeed +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 69069 +ADDRLP4 0 +INDIRP4 +INDIRI4 +MULI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 771 +;771: return randSeed & 0x7fff; +ADDRGP4 randSeed +INDIRI4 +CNSTI4 32767 +BANDI4 +RETI4 +LABELV $198 +endproc rand 4 0 +export atof +proc atof 32 0 +line 774 +;772:} +;773: +;774:double atof( const char *string ) { +ADDRGP4 $201 +JUMPV +LABELV $200 +line 781 +;775: float sign; +;776: float value; +;777: int c; +;778: +;779: +;780: // skip whitespace +;781: while ( *string <= ' ' ) { +line 782 +;782: if ( !*string ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $203 +line 783 +;783: return 0; +CNSTF4 0 +RETF4 +ADDRGP4 $199 +JUMPV +LABELV $203 +line 785 +;784: } +;785: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 786 +;786: } +LABELV $201 +line 781 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +LEI4 $200 +line 789 +;787: +;788: // check sign +;789: switch ( *string ) { +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 43 +EQI4 $208 +ADDRLP4 12 +INDIRI4 +CNSTI4 45 +EQI4 $209 +ADDRGP4 $205 +JUMPV +LABELV $208 +line 791 +;790: case '+': +;791: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 792 +;792: sign = 1; +ADDRLP4 8 +CNSTF4 1065353216 +ASGNF4 +line 793 +;793: break; +ADDRGP4 $206 +JUMPV +LABELV $209 +line 795 +;794: case '-': +;795: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 796 +;796: sign = -1; +ADDRLP4 8 +CNSTF4 3212836864 +ASGNF4 +line 797 +;797: break; +ADDRGP4 $206 +JUMPV +LABELV $205 +line 799 +;798: default: +;799: sign = 1; +ADDRLP4 8 +CNSTF4 1065353216 +ASGNF4 +line 800 +;800: break; +LABELV $206 +line 804 +;801: } +;802: +;803: // read digits +;804: value = 0; +ADDRLP4 4 +CNSTF4 0 +ASGNF4 +line 805 +;805: c = string[0]; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 806 +;806: if ( c != '.' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 46 +EQI4 $210 +LABELV $212 +line 807 +;807: do { +line 808 +;808: c = *string++; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 20 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 20 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 809 +;809: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $217 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $215 +LABELV $217 +line 810 +;810: break; +ADDRGP4 $211 +JUMPV +LABELV $215 +line 812 +;811: } +;812: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 813 +;813: value = value * 10 + c; +ADDRLP4 4 +CNSTF4 1092616192 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +ADDF4 +ASGNF4 +line 814 +;814: } while ( 1 ); +LABELV $213 +ADDRGP4 $212 +JUMPV +line 815 +;815: } else { +ADDRGP4 $211 +JUMPV +LABELV $210 +line 816 +;816: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 817 +;817: } +LABELV $211 +line 820 +;818: +;819: // check for decimal point +;820: if ( c == '.' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 46 +NEI4 $218 +line 823 +;821: double fraction; +;822: +;823: fraction = 0.1; +ADDRLP4 20 +CNSTF4 1036831949 +ASGNF4 +LABELV $220 +line 824 +;824: do { +line 825 +;825: c = *string++; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 24 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 24 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 826 +;826: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $225 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $223 +LABELV $225 +line 827 +;827: break; +ADDRGP4 $222 +JUMPV +LABELV $223 +line 829 +;828: } +;829: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 830 +;830: value += c * fraction; +ADDRLP4 4 +ADDRLP4 4 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +ADDRLP4 20 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 831 +;831: fraction *= 0.1; +ADDRLP4 20 +CNSTF4 1036831949 +ADDRLP4 20 +INDIRF4 +MULF4 +ASGNF4 +line 832 +;832: } while ( 1 ); +LABELV $221 +ADDRGP4 $220 +JUMPV +LABELV $222 +line 834 +;833: +;834: } +LABELV $218 +line 838 +;835: +;836: // not handling 10e10 notation... +;837: +;838: return value * sign; +ADDRLP4 4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +MULF4 +RETF4 +LABELV $199 +endproc atof 32 0 +export _atof +proc _atof 36 0 +line 841 +;839:} +;840: +;841:double _atof( const char **stringPtr ) { +line 845 +;842: const char *string; +;843: float sign; +;844: float value; +;845: int c = '0'; // bk001211 - uninitialized use possible +ADDRLP4 0 +CNSTI4 48 +ASGNI4 +line 847 +;846: +;847: string = *stringPtr; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRGP4 $228 +JUMPV +LABELV $227 +line 850 +;848: +;849: // skip whitespace +;850: while ( *string <= ' ' ) { +line 851 +;851: if ( !*string ) { +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $230 +line 852 +;852: *stringPtr = string; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 853 +;853: return 0; +CNSTF4 0 +RETF4 +ADDRGP4 $226 +JUMPV +LABELV $230 +line 855 +;854: } +;855: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 856 +;856: } +LABELV $228 +line 850 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +LEI4 $227 +line 859 +;857: +;858: // check sign +;859: switch ( *string ) { +ADDRLP4 16 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 43 +EQI4 $235 +ADDRLP4 16 +INDIRI4 +CNSTI4 45 +EQI4 $236 +ADDRGP4 $232 +JUMPV +LABELV $235 +line 861 +;860: case '+': +;861: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 862 +;862: sign = 1; +ADDRLP4 12 +CNSTF4 1065353216 +ASGNF4 +line 863 +;863: break; +ADDRGP4 $233 +JUMPV +LABELV $236 +line 865 +;864: case '-': +;865: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 866 +;866: sign = -1; +ADDRLP4 12 +CNSTF4 3212836864 +ASGNF4 +line 867 +;867: break; +ADDRGP4 $233 +JUMPV +LABELV $232 +line 869 +;868: default: +;869: sign = 1; +ADDRLP4 12 +CNSTF4 1065353216 +ASGNF4 +line 870 +;870: break; +LABELV $233 +line 874 +;871: } +;872: +;873: // read digits +;874: value = 0; +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +line 875 +;875: if ( string[0] != '.' ) { +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 46 +EQI4 $237 +LABELV $239 +line 876 +;876: do { +line 877 +;877: c = *string++; +ADDRLP4 24 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 24 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 24 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 878 +;878: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $244 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $242 +LABELV $244 +line 879 +;879: break; +ADDRGP4 $241 +JUMPV +LABELV $242 +line 881 +;880: } +;881: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 882 +;882: value = value * 10 + c; +ADDRLP4 8 +CNSTF4 1092616192 +ADDRLP4 8 +INDIRF4 +MULF4 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +ADDF4 +ASGNF4 +line 883 +;883: } while ( 1 ); +LABELV $240 +ADDRGP4 $239 +JUMPV +LABELV $241 +line 884 +;884: } +LABELV $237 +line 887 +;885: +;886: // check for decimal point +;887: if ( c == '.' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 46 +NEI4 $245 +line 890 +;888: double fraction; +;889: +;890: fraction = 0.1; +ADDRLP4 24 +CNSTF4 1036831949 +ASGNF4 +LABELV $247 +line 891 +;891: do { +line 892 +;892: c = *string++; +ADDRLP4 28 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 28 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 28 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 893 +;893: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $252 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $250 +LABELV $252 +line 894 +;894: break; +ADDRGP4 $249 +JUMPV +LABELV $250 +line 896 +;895: } +;896: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 897 +;897: value += c * fraction; +ADDRLP4 8 +ADDRLP4 8 +INDIRF4 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +ADDRLP4 24 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 898 +;898: fraction *= 0.1; +ADDRLP4 24 +CNSTF4 1036831949 +ADDRLP4 24 +INDIRF4 +MULF4 +ASGNF4 +line 899 +;899: } while ( 1 ); +LABELV $248 +ADDRGP4 $247 +JUMPV +LABELV $249 +line 901 +;900: +;901: } +LABELV $245 +line 904 +;902: +;903: // not handling 10e10 notation... +;904: *stringPtr = string; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 906 +;905: +;906: return value * sign; +ADDRLP4 8 +INDIRF4 +ADDRLP4 12 +INDIRF4 +MULF4 +RETF4 +LABELV $226 +endproc _atof 36 0 +export atoi +proc atoi 28 0 +line 915 +;907:} +;908: +;909: +;910:// bk001120 - presumably needed for Mac +;911://#if !defined ( _MSC_VER ) && ! defined ( __linux__ ) +;912: +;913:// bk001127 - undid undo +;914:#if defined ( Q3_VM ) +;915:int atoi( const char *string ) { +ADDRGP4 $255 +JUMPV +LABELV $254 +line 922 +;916: int sign; +;917: int value; +;918: int c; +;919: +;920: +;921: // skip whitespace +;922: while ( *string <= ' ' ) { +line 923 +;923: if ( !*string ) { +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $257 +line 924 +;924: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $253 +JUMPV +LABELV $257 +line 926 +;925: } +;926: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 927 +;927: } +LABELV $255 +line 922 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +LEI4 $254 +line 930 +;928: +;929: // check sign +;930: switch ( *string ) { +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 43 +EQI4 $262 +ADDRLP4 12 +INDIRI4 +CNSTI4 45 +EQI4 $263 +ADDRGP4 $259 +JUMPV +LABELV $262 +line 932 +;931: case '+': +;932: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 933 +;933: sign = 1; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 934 +;934: break; +ADDRGP4 $260 +JUMPV +LABELV $263 +line 936 +;935: case '-': +;936: string++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 937 +;937: sign = -1; +ADDRLP4 8 +CNSTI4 -1 +ASGNI4 +line 938 +;938: break; +ADDRGP4 $260 +JUMPV +LABELV $259 +line 940 +;939: default: +;940: sign = 1; +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +line 941 +;941: break; +LABELV $260 +line 945 +;942: } +;943: +;944: // read digits +;945: value = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +LABELV $264 +line 946 +;946: do { +line 947 +;947: c = *string++; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 20 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 20 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 948 +;948: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $269 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $267 +LABELV $269 +line 949 +;949: break; +ADDRGP4 $266 +JUMPV +LABELV $267 +line 951 +;950: } +;951: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 952 +;952: value = value * 10 + c; +ADDRLP4 4 +CNSTI4 10 +ADDRLP4 4 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 953 +;953: } while ( 1 ); +LABELV $265 +ADDRGP4 $264 +JUMPV +LABELV $266 +line 957 +;954: +;955: // not handling 10e10 notation... +;956: +;957: return value * sign; +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +MULI4 +RETI4 +LABELV $253 +endproc atoi 28 0 +export _atoi +proc _atoi 32 0 +line 961 +;958:} +;959: +;960: +;961:int _atoi( const char **stringPtr ) { +line 967 +;962: int sign; +;963: int value; +;964: int c; +;965: const char *string; +;966: +;967: string = *stringPtr; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRGP4 $272 +JUMPV +LABELV $271 +line 970 +;968: +;969: // skip whitespace +;970: while ( *string <= ' ' ) { +line 971 +;971: if ( !*string ) { +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $274 +line 972 +;972: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $270 +JUMPV +LABELV $274 +line 974 +;973: } +;974: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 975 +;975: } +LABELV $272 +line 970 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 32 +LEI4 $271 +line 978 +;976: +;977: // check sign +;978: switch ( *string ) { +ADDRLP4 16 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 43 +EQI4 $279 +ADDRLP4 16 +INDIRI4 +CNSTI4 45 +EQI4 $280 +ADDRGP4 $276 +JUMPV +LABELV $279 +line 980 +;979: case '+': +;980: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 981 +;981: sign = 1; +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +line 982 +;982: break; +ADDRGP4 $277 +JUMPV +LABELV $280 +line 984 +;983: case '-': +;984: string++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 985 +;985: sign = -1; +ADDRLP4 12 +CNSTI4 -1 +ASGNI4 +line 986 +;986: break; +ADDRGP4 $277 +JUMPV +LABELV $276 +line 988 +;987: default: +;988: sign = 1; +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +line 989 +;989: break; +LABELV $277 +line 993 +;990: } +;991: +;992: // read digits +;993: value = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +LABELV $281 +line 994 +;994: do { +line 995 +;995: c = *string++; +ADDRLP4 24 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 24 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 24 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 996 +;996: if ( c < '0' || c > '9' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +LTI4 $286 +ADDRLP4 0 +INDIRI4 +CNSTI4 57 +LEI4 $284 +LABELV $286 +line 997 +;997: break; +ADDRGP4 $283 +JUMPV +LABELV $284 +line 999 +;998: } +;999: c -= '0'; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 48 +SUBI4 +ASGNI4 +line 1000 +;1000: value = value * 10 + c; +ADDRLP4 8 +CNSTI4 10 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 1001 +;1001: } while ( 1 ); +LABELV $282 +ADDRGP4 $281 +JUMPV +LABELV $283 +line 1005 +;1002: +;1003: // not handling 10e10 notation... +;1004: +;1005: *stringPtr = string; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1007 +;1006: +;1007: return value * sign; +ADDRLP4 8 +INDIRI4 +ADDRLP4 12 +INDIRI4 +MULI4 +RETI4 +LABELV $270 +endproc _atoi 32 0 +export abs +proc abs 4 0 +line 1010 +;1008:} +;1009: +;1010:int abs( int n ) { +line 1011 +;1011: return n < 0 ? -n : n; +ADDRFP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $289 +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +NEGI4 +ASGNI4 +ADDRGP4 $290 +JUMPV +LABELV $289 +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +LABELV $290 +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $287 +endproc abs 4 0 +export fabs +proc fabs 4 0 +line 1014 +;1012:} +;1013: +;1014:double fabs( double x ) { +line 1015 +;1015: return x < 0 ? -x : x; +ADDRFP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $293 +ADDRLP4 0 +ADDRFP4 0 +INDIRF4 +NEGF4 +ASGNF4 +ADDRGP4 $294 +JUMPV +LABELV $293 +ADDRLP4 0 +ADDRFP4 0 +INDIRF4 +ASGNF4 +LABELV $294 +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $291 +endproc fabs 4 0 +export AddInt +proc AddInt 56 0 +line 1037 +;1016:} +;1017: +;1018: +;1019: +;1020://========================================================= +;1021: +;1022: +;1023:#define ALT 0x00000001 /* alternate form */ +;1024:#define HEXPREFIX 0x00000002 /* add 0x or 0X prefix */ +;1025:#define LADJUST 0x00000004 /* left adjustment */ +;1026:#define LONGDBL 0x00000008 /* long double */ +;1027:#define LONGINT 0x00000010 /* long integer */ +;1028:#define QUADINT 0x00000020 /* quad integer */ +;1029:#define SHORTINT 0x00000040 /* short integer */ +;1030:#define ZEROPAD 0x00000080 /* zero (as opposed to blank) pad */ +;1031:#define FPT 0x00000100 /* floating point number */ +;1032: +;1033:#define to_digit(c) ((c) - '0') +;1034:#define is_digit(c) ((unsigned)to_digit(c) <= 9) +;1035:#define to_char(n) ((n) + '0') +;1036: +;1037:void AddInt( char **buf_p, int val, int width, int flags ) { +line 1043 +;1038: char text[32]; +;1039: int digits; +;1040: int signedVal; +;1041: char *buf; +;1042: +;1043: digits = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1044 +;1044: signedVal = val; +ADDRLP4 40 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 1045 +;1045: if ( val < 0 ) { +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +GEI4 $296 +line 1046 +;1046: val = -val; +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +NEGI4 +ASGNI4 +line 1047 +;1047: } +LABELV $296 +LABELV $298 +line 1048 +;1048: do { +line 1049 +;1049: text[digits++] = '0' + val % 10; +ADDRLP4 44 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 44 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +ADDRLP4 8 +ADDP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 10 +MODI4 +CNSTI4 48 +ADDI4 +CVII1 4 +ASGNI1 +line 1050 +;1050: val /= 10; +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +CNSTI4 10 +DIVI4 +ASGNI4 +line 1051 +;1051: } while ( val ); +LABELV $299 +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $298 +line 1053 +;1052: +;1053: if ( signedVal < 0 ) { +ADDRLP4 40 +INDIRI4 +CNSTI4 0 +GEI4 $301 +line 1054 +;1054: text[digits++] = '-'; +ADDRLP4 44 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 44 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +ADDRLP4 8 +ADDP4 +CNSTI1 45 +ASGNI1 +line 1055 +;1055: } +LABELV $301 +line 1057 +;1056: +;1057: buf = *buf_p; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +line 1059 +;1058: +;1059: if( !( flags & LADJUST ) ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +NEI4 $312 +ADDRGP4 $306 +JUMPV +LABELV $305 +line 1060 +;1060: while ( digits < width ) { +line 1061 +;1061: *buf++ = ( flags & ZEROPAD ) ? '0' : ' '; +ADDRLP4 48 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 48 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRFP4 12 +INDIRI4 +CNSTI4 128 +BANDI4 +CNSTI4 0 +EQI4 $309 +ADDRLP4 44 +CNSTI4 48 +ASGNI4 +ADDRGP4 $310 +JUMPV +LABELV $309 +ADDRLP4 44 +CNSTI4 32 +ASGNI4 +LABELV $310 +ADDRLP4 48 +INDIRP4 +ADDRLP4 44 +INDIRI4 +CVII1 4 +ASGNI1 +line 1062 +;1062: width--; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1063 +;1063: } +LABELV $306 +line 1060 +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LTI4 $305 +line 1064 +;1064: } +ADDRGP4 $312 +JUMPV +LABELV $311 +line 1066 +;1065: +;1066: while ( digits-- ) { +line 1067 +;1067: *buf++ = text[digits]; +ADDRLP4 44 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 44 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 44 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +ADDP4 +INDIRI1 +ASGNI1 +line 1068 +;1068: width--; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1069 +;1069: } +LABELV $312 +line 1066 +ADDRLP4 44 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 44 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 44 +INDIRI4 +CNSTI4 0 +NEI4 $311 +line 1071 +;1070: +;1071: if( flags & LADJUST ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 4 +BANDI4 +CNSTI4 0 +EQI4 $314 +ADDRGP4 $317 +JUMPV +LABELV $316 +line 1072 +;1072: while ( width-- ) { +line 1073 +;1073: *buf++ = ( flags & ZEROPAD ) ? '0' : ' '; +ADDRLP4 52 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 52 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRFP4 12 +INDIRI4 +CNSTI4 128 +BANDI4 +CNSTI4 0 +EQI4 $320 +ADDRLP4 48 +CNSTI4 48 +ASGNI4 +ADDRGP4 $321 +JUMPV +LABELV $320 +ADDRLP4 48 +CNSTI4 32 +ASGNI4 +LABELV $321 +ADDRLP4 52 +INDIRP4 +ADDRLP4 48 +INDIRI4 +CVII1 4 +ASGNI1 +line 1074 +;1074: } +LABELV $317 +line 1072 +ADDRLP4 48 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRFP4 8 +ADDRLP4 48 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $316 +line 1075 +;1075: } +LABELV $314 +line 1077 +;1076: +;1077: *buf_p = buf; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1078 +;1078:} +LABELV $295 +endproc AddInt 56 0 +export AddFloat +proc AddFloat 60 0 +line 1080 +;1079: +;1080:void AddFloat( char **buf_p, float fval, int width, int prec ) { +line 1088 +;1081: char text[32]; +;1082: int digits; +;1083: float signedVal; +;1084: char *buf; +;1085: int val; +;1086: +;1087: // get the sign +;1088: signedVal = fval; +ADDRLP4 44 +ADDRFP4 4 +INDIRF4 +ASGNF4 +line 1089 +;1089: if ( fval < 0 ) { +ADDRFP4 4 +INDIRF4 +CNSTF4 0 +GEF4 $323 +line 1090 +;1090: fval = -fval; +ADDRFP4 4 +ADDRFP4 4 +INDIRF4 +NEGF4 +ASGNF4 +line 1091 +;1091: } +LABELV $323 +line 1094 +;1092: +;1093: // write the float number +;1094: digits = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1095 +;1095: val = (int)fval; +ADDRLP4 4 +ADDRFP4 4 +INDIRF4 +CVFI4 4 +ASGNI4 +LABELV $325 +line 1096 +;1096: do { +line 1097 +;1097: text[digits++] = '0' + val % 10; +ADDRLP4 48 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 48 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +ADDRLP4 8 +ADDP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +MODI4 +CNSTI4 48 +ADDI4 +CVII1 4 +ASGNI1 +line 1098 +;1098: val /= 10; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +DIVI4 +ASGNI4 +line 1099 +;1099: } while ( val ); +LABELV $326 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $325 +line 1101 +;1100: +;1101: if ( signedVal < 0 ) { +ADDRLP4 44 +INDIRF4 +CNSTF4 0 +GEF4 $328 +line 1102 +;1102: text[digits++] = '-'; +ADDRLP4 48 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 48 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +ADDRLP4 8 +ADDP4 +CNSTI1 45 +ASGNI1 +line 1103 +;1103: } +LABELV $328 +line 1105 +;1104: +;1105: buf = *buf_p; +ADDRLP4 40 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRGP4 $331 +JUMPV +LABELV $330 +line 1107 +;1106: +;1107: while ( digits < width ) { +line 1108 +;1108: *buf++ = ' '; +ADDRLP4 48 +ADDRLP4 40 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 48 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 48 +INDIRP4 +CNSTI1 32 +ASGNI1 +line 1109 +;1109: width--; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1110 +;1110: } +LABELV $331 +line 1107 +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LTI4 $330 +ADDRGP4 $334 +JUMPV +LABELV $333 +line 1112 +;1111: +;1112: while ( digits-- ) { +line 1113 +;1113: *buf++ = text[digits]; +ADDRLP4 48 +ADDRLP4 40 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 48 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 48 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +ADDP4 +INDIRI1 +ASGNI1 +line 1114 +;1114: } +LABELV $334 +line 1112 +ADDRLP4 48 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 48 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +CNSTI4 0 +NEI4 $333 +line 1116 +;1115: +;1116: *buf_p = buf; +ADDRFP4 0 +INDIRP4 +ADDRLP4 40 +INDIRP4 +ASGNP4 +line 1118 +;1117: +;1118: if (prec < 0) +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +GEI4 $336 +line 1119 +;1119: prec = 6; +ADDRFP4 12 +CNSTI4 6 +ASGNI4 +LABELV $336 +line 1121 +;1120: // write the fraction +;1121: digits = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $339 +JUMPV +LABELV $338 +line 1122 +;1122: while (digits < prec) { +line 1123 +;1123: fval -= (int) fval; +ADDRLP4 52 +ADDRFP4 4 +INDIRF4 +ASGNF4 +ADDRFP4 4 +ADDRLP4 52 +INDIRF4 +ADDRLP4 52 +INDIRF4 +CVFI4 4 +CVIF4 4 +SUBF4 +ASGNF4 +line 1124 +;1124: fval *= 10.0; +ADDRFP4 4 +CNSTF4 1092616192 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1125 +;1125: val = (int) fval; +ADDRLP4 4 +ADDRFP4 4 +INDIRF4 +CVFI4 4 +ASGNI4 +line 1126 +;1126: text[digits++] = '0' + val % 10; +ADDRLP4 56 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 56 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +ADDRLP4 8 +ADDP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +MODI4 +CNSTI4 48 +ADDI4 +CVII1 4 +ASGNI1 +line 1127 +;1127: } +LABELV $339 +line 1122 +ADDRLP4 0 +INDIRI4 +ADDRFP4 12 +INDIRI4 +LTI4 $338 +line 1129 +;1128: +;1129: if (digits > 0) { +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +LEI4 $341 +line 1130 +;1130: buf = *buf_p; +ADDRLP4 40 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +line 1131 +;1131: *buf++ = '.'; +ADDRLP4 52 +ADDRLP4 40 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 52 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CNSTI1 46 +ASGNI1 +line 1132 +;1132: for (prec = 0; prec < digits; prec++) { +ADDRFP4 12 +CNSTI4 0 +ASGNI4 +ADDRGP4 $346 +JUMPV +LABELV $343 +line 1133 +;1133: *buf++ = text[prec]; +ADDRLP4 56 +ADDRLP4 40 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRLP4 56 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 56 +INDIRP4 +ADDRFP4 12 +INDIRI4 +ADDRLP4 8 +ADDP4 +INDIRI1 +ASGNI1 +line 1134 +;1134: } +LABELV $344 +line 1132 +ADDRFP4 12 +ADDRFP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $346 +ADDRFP4 12 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LTI4 $343 +line 1135 +;1135: *buf_p = buf; +ADDRFP4 0 +INDIRP4 +ADDRLP4 40 +INDIRP4 +ASGNP4 +line 1136 +;1136: } +LABELV $341 +line 1137 +;1137:} +LABELV $322 +endproc AddFloat 60 0 +export AddString +proc AddString 20 4 +line 1140 +;1138: +;1139: +;1140:void AddString( char **buf_p, char *string, int width, int prec ) { +line 1144 +;1141: int size; +;1142: char *buf; +;1143: +;1144: buf = *buf_p; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +line 1146 +;1145: +;1146: if ( string == NULL ) { +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $348 +line 1147 +;1147: string = "(null)"; +ADDRFP4 4 +ADDRGP4 $350 +ASGNP4 +line 1148 +;1148: prec = -1; +ADDRFP4 12 +CNSTI4 -1 +ASGNI4 +line 1149 +;1149: } +LABELV $348 +line 1151 +;1150: +;1151: if ( prec >= 0 ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +LTI4 $351 +line 1152 +;1152: for( size = 0; size < prec; size++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $356 +JUMPV +LABELV $353 +line 1153 +;1153: if( string[size] == '\0' ) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $357 +line 1154 +;1154: break; +ADDRGP4 $352 +JUMPV +LABELV $357 +line 1156 +;1155: } +;1156: } +LABELV $354 +line 1152 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $356 +ADDRLP4 0 +INDIRI4 +ADDRFP4 12 +INDIRI4 +LTI4 $353 +line 1157 +;1157: } +ADDRGP4 $352 +JUMPV +LABELV $351 +line 1158 +;1158: else { +line 1159 +;1159: size = strlen( string ); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 1160 +;1160: } +LABELV $352 +line 1162 +;1161: +;1162: width -= size; +ADDRFP4 8 +ADDRFP4 8 +INDIRI4 +ADDRLP4 0 +INDIRI4 +SUBI4 +ASGNI4 +ADDRGP4 $360 +JUMPV +LABELV $359 +line 1164 +;1163: +;1164: while( size-- ) { +line 1165 +;1165: *buf++ = *string++; +ADDRLP4 8 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI1 +ASGNI1 +line 1166 +;1166: } +LABELV $360 +line 1164 +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $359 +ADDRGP4 $363 +JUMPV +LABELV $362 +line 1168 +;1167: +;1168: while( width-- > 0 ) { +line 1169 +;1169: *buf++ = ' '; +ADDRLP4 12 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI1 32 +ASGNI1 +line 1170 +;1170: } +LABELV $363 +line 1168 +ADDRLP4 12 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRFP4 8 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +GTI4 $362 +line 1172 +;1171: +;1172: *buf_p = buf; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 1173 +;1173:} +LABELV $347 +endproc AddString 20 4 +export vsprintf +proc vsprintf 72 16 +line 1183 +;1174: +;1175:/* +;1176:vsprintf +;1177: +;1178:I'm not going to support a bunch of the more arcane stuff in here +;1179:just to keep it simpler. For example, the '*' and '$' are not +;1180:currently supported. I've tried to make it so that it will just +;1181:parse and ignore formats we don't support. +;1182:*/ +;1183:int vsprintf( char *buffer, const char *fmt, va_list argptr ) { +line 1193 +;1184: int *arg; +;1185: char *buf_p; +;1186: char ch; +;1187: int flags; +;1188: int width; +;1189: int prec; +;1190: int n; +;1191: char sign; +;1192: +;1193: buf_p = buffer; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 1194 +;1194: arg = (int *)argptr; +ADDRLP4 24 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRGP4 $367 +JUMPV +LABELV $366 +line 1196 +;1195: +;1196: while( qtrue ) { +line 1198 +;1197: // run through the format string until we hit a '%' or '\0' +;1198: for ( ch = *fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++ ) { +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRGP4 $372 +JUMPV +LABELV $369 +line 1199 +;1199: *buf_p++ = ch; +ADDRLP4 32 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 32 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 0 +INDIRI1 +ASGNI1 +line 1200 +;1200: } +LABELV $370 +line 1198 +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +LABELV $372 +ADDRLP4 29 +ADDRFP4 4 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRLP4 0 +ADDRLP4 29 +INDIRI1 +ASGNI1 +ADDRLP4 29 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $373 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 37 +NEI4 $369 +LABELV $373 +line 1201 +;1201: if ( ch == '\0' ) { +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $374 +line 1202 +;1202: goto done; +ADDRGP4 $376 +JUMPV +LABELV $374 +line 1206 +;1203: } +;1204: +;1205: // skip over the '%' +;1206: fmt++; +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1209 +;1207: +;1208: // reset formatting state +;1209: flags = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 1210 +;1210: width = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 1211 +;1211: prec = -1; +ADDRLP4 20 +CNSTI4 -1 +ASGNI4 +line 1212 +;1212: sign = '\0'; +ADDRLP4 28 +CNSTI1 0 +ASGNI1 +LABELV $377 +line 1215 +;1213: +;1214:rflag: +;1215: ch = *fmt++; +ADDRLP4 32 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 32 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 32 +INDIRP4 +INDIRI1 +ASGNI1 +LABELV $378 +line 1217 +;1216:reswitch: +;1217: switch( ch ) { +ADDRLP4 36 +ADDRLP4 0 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 99 +LTI4 $400 +ADDRLP4 36 +INDIRI4 +CNSTI4 105 +GTI4 $401 +ADDRLP4 36 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $402-396 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $402 +address $395 +address $396 +address $379 +address $397 +address $379 +address $379 +address $396 +code +LABELV $400 +ADDRLP4 36 +INDIRI4 +CNSTI4 37 +LTI4 $379 +ADDRLP4 36 +INDIRI4 +CNSTI4 57 +GTI4 $379 +ADDRLP4 36 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $404-148 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $404 +address $399 +address $379 +address $379 +address $379 +address $379 +address $379 +address $379 +address $379 +address $382 +address $383 +address $379 +address $390 +address $391 +address $391 +address $391 +address $391 +address $391 +address $391 +address $391 +address $391 +address $391 +code +LABELV $401 +ADDRLP4 36 +INDIRI4 +CNSTI4 115 +EQI4 $398 +ADDRGP4 $379 +JUMPV +LABELV $382 +line 1219 +;1218: case '-': +;1219: flags |= LADJUST; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 4 +BORI4 +ASGNI4 +line 1220 +;1220: goto rflag; +ADDRGP4 $377 +JUMPV +LABELV $383 +line 1222 +;1221: case '.': +;1222: n = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $385 +JUMPV +LABELV $384 +line 1223 +;1223: while( is_digit( ( ch = *fmt++ ) ) ) { +line 1224 +;1224: n = 10 * n + ( ch - '0' ); +ADDRLP4 8 +CNSTI4 10 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +ADDI4 +ASGNI4 +line 1225 +;1225: } +LABELV $385 +line 1223 +ADDRLP4 48 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 48 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 52 +ADDRLP4 48 +INDIRP4 +INDIRI1 +ASGNI1 +ADDRLP4 0 +ADDRLP4 52 +INDIRI1 +ASGNI1 +ADDRLP4 52 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +CVIU4 4 +CNSTU4 9 +LEU4 $384 +line 1226 +;1226: prec = n < 0 ? -1 : n; +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +GEI4 $388 +ADDRLP4 56 +CNSTI4 -1 +ASGNI4 +ADDRGP4 $389 +JUMPV +LABELV $388 +ADDRLP4 56 +ADDRLP4 8 +INDIRI4 +ASGNI4 +LABELV $389 +ADDRLP4 20 +ADDRLP4 56 +INDIRI4 +ASGNI4 +line 1227 +;1227: goto reswitch; +ADDRGP4 $378 +JUMPV +LABELV $390 +line 1229 +;1228: case '0': +;1229: flags |= ZEROPAD; +ADDRLP4 16 +ADDRLP4 16 +INDIRI4 +CNSTI4 128 +BORI4 +ASGNI4 +line 1230 +;1230: goto rflag; +ADDRGP4 $377 +JUMPV +LABELV $391 +line 1240 +;1231: case '1': +;1232: case '2': +;1233: case '3': +;1234: case '4': +;1235: case '5': +;1236: case '6': +;1237: case '7': +;1238: case '8': +;1239: case '9': +;1240: n = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +LABELV $392 +line 1241 +;1241: do { +line 1242 +;1242: n = 10 * n + ( ch - '0' ); +ADDRLP4 8 +CNSTI4 10 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +ADDI4 +ASGNI4 +line 1243 +;1243: ch = *fmt++; +ADDRLP4 60 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 60 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 60 +INDIRP4 +INDIRI1 +ASGNI1 +line 1244 +;1244: } while( is_digit( ch ) ); +LABELV $393 +ADDRLP4 0 +INDIRI1 +CVII4 1 +CNSTI4 48 +SUBI4 +CVIU4 4 +CNSTU4 9 +LEU4 $392 +line 1245 +;1245: width = n; +ADDRLP4 12 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 1246 +;1246: goto reswitch; +ADDRGP4 $378 +JUMPV +LABELV $395 +line 1248 +;1247: case 'c': +;1248: *buf_p++ = (char)*arg; +ADDRLP4 60 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 60 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CVII1 4 +ASGNI1 +line 1249 +;1249: arg++; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1250 +;1250: break; +ADDRGP4 $380 +JUMPV +LABELV $396 +line 1253 +;1251: case 'd': +;1252: case 'i': +;1253: AddInt( &buf_p, *arg, width, flags ); +ADDRLP4 4 +ARGP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 16 +INDIRI4 +ARGI4 +ADDRGP4 AddInt +CALLV +pop +line 1254 +;1254: arg++; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1255 +;1255: break; +ADDRGP4 $380 +JUMPV +LABELV $397 +line 1257 +;1256: case 'f': +;1257: AddFloat( &buf_p, *(double *)arg, width, prec ); +ADDRLP4 4 +ARGP4 +ADDRLP4 24 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 20 +INDIRI4 +ARGI4 +ADDRGP4 AddFloat +CALLV +pop +line 1259 +;1258:#ifdef __LCC__ +;1259: arg += 1; // everything is 32 bit in my compiler +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1263 +;1260:#else +;1261: arg += 2; +;1262:#endif +;1263: break; +ADDRGP4 $380 +JUMPV +LABELV $398 +line 1265 +;1264: case 's': +;1265: AddString( &buf_p, (char *)*arg, width, prec ); +ADDRLP4 4 +ARGP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CVIU4 4 +CVUP4 4 +ARGP4 +ADDRLP4 12 +INDIRI4 +ARGI4 +ADDRLP4 20 +INDIRI4 +ARGI4 +ADDRGP4 AddString +CALLV +pop +line 1266 +;1266: arg++; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1267 +;1267: break; +ADDRGP4 $380 +JUMPV +LABELV $399 +line 1269 +;1268: case '%': +;1269: *buf_p++ = ch; +ADDRLP4 64 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 64 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +ADDRLP4 0 +INDIRI1 +ASGNI1 +line 1270 +;1270: break; +ADDRGP4 $380 +JUMPV +LABELV $379 +line 1272 +;1271: default: +;1272: *buf_p++ = (char)*arg; +ADDRLP4 68 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 68 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 68 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CVII1 4 +ASGNI1 +line 1273 +;1273: arg++; +ADDRLP4 24 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1274 +;1274: break; +LABELV $380 +line 1276 +;1275: } +;1276: } +LABELV $367 +line 1196 +ADDRGP4 $366 +JUMPV +LABELV $376 +line 1279 +;1277: +;1278:done: +;1279: *buf_p = 0; +ADDRLP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1280 +;1280: return buf_p - buffer; +ADDRLP4 4 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +RETI4 +LABELV $365 +endproc vsprintf 72 16 +export sscanf +proc sscanf 28 4 +line 1285 +;1281:} +;1282: +;1283: +;1284:/* this is really crappy */ +;1285:int sscanf( const char *buffer, const char *fmt, ... ) { +line 1290 +;1286: int cmd; +;1287: int **arg; +;1288: int count; +;1289: +;1290: arg = (int **)&fmt + 1; +ADDRLP4 4 +ADDRFP4 4+4 +ASGNP4 +line 1291 +;1291: count = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $409 +JUMPV +LABELV $408 +line 1293 +;1292: +;1293: while ( *fmt ) { +line 1294 +;1294: if ( fmt[0] != '%' ) { +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 37 +EQI4 $411 +line 1295 +;1295: fmt++; +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1296 +;1296: continue; +ADDRGP4 $409 +JUMPV +LABELV $411 +line 1299 +;1297: } +;1298: +;1299: cmd = fmt[1]; +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 1300 +;1300: fmt += 2; +ADDRFP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 2 +ADDP4 +ASGNP4 +line 1302 +;1301: +;1302: switch ( cmd ) { +ADDRLP4 16 +CNSTI4 100 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 16 +INDIRI4 +EQI4 $415 +ADDRLP4 0 +INDIRI4 +CNSTI4 102 +EQI4 $416 +ADDRLP4 0 +INDIRI4 +CNSTI4 105 +EQI4 $415 +ADDRLP4 0 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LTI4 $413 +LABELV $417 +ADDRLP4 0 +INDIRI4 +CNSTI4 117 +EQI4 $415 +ADDRGP4 $413 +JUMPV +LABELV $415 +line 1306 +;1303: case 'i': +;1304: case 'd': +;1305: case 'u': +;1306: **arg = _atoi( &buffer ); +ADDRFP4 0 +ARGP4 +ADDRLP4 20 +ADDRGP4 _atoi +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRP4 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ASGNI4 +line 1307 +;1307: break; +ADDRGP4 $414 +JUMPV +LABELV $416 +line 1309 +;1308: case 'f': +;1309: *(float *)*arg = _atof( &buffer ); +ADDRFP4 0 +ARGP4 +ADDRLP4 24 +ADDRGP4 _atof +CALLF4 +ASGNF4 +ADDRLP4 4 +INDIRP4 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 1310 +;1310: break; +LABELV $413 +LABELV $414 +line 1312 +;1311: } +;1312: arg++; +ADDRLP4 4 +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +line 1313 +;1313: } +LABELV $409 +line 1293 +ADDRFP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $408 +line 1315 +;1314: +;1315: return count; +ADDRLP4 8 +INDIRI4 +RETI4 +LABELV $406 +endproc sscanf 28 4 +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import strncpy +lit +align 1 +LABELV $350 +char 1 40 +char 1 110 +char 1 117 +char 1 108 +char 1 108 +char 1 41 +char 1 0 diff --git a/CODE-mp/ui/vm/bg_misc.asm b/CODE-mp/ui/vm/bg_misc.asm new file mode 100644 index 0000000..51e704a --- /dev/null +++ b/CODE-mp/ui/vm/bg_misc.asm @@ -0,0 +1,17606 @@ +data +export forceMasteryLevels +align 4 +LABELV forceMasteryLevels +address $120 +address $121 +address $122 +address $123 +address $124 +address $125 +address $126 +address $127 +export forceMasteryPoints +align 4 +LABELV forceMasteryPoints +byte 4 0 +byte 4 5 +byte 4 10 +byte 4 20 +byte 4 30 +byte 4 50 +byte 4 75 +byte 4 100 +export bgForcePowerCost +align 4 +LABELV bgForcePowerCost +byte 4 0 +byte 4 2 +byte 4 4 +byte 4 6 +byte 4 0 +byte 4 0 +byte 4 2 +byte 4 6 +byte 4 0 +byte 4 2 +byte 4 4 +byte 4 6 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 4 +byte 4 6 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 2 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 4 +byte 4 6 +byte 4 8 +byte 4 0 +byte 4 2 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 1 +byte 4 3 +byte 4 6 +byte 4 0 +byte 4 2 +byte 4 4 +byte 4 6 +byte 4 0 +byte 4 2 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 5 +byte 4 8 +byte 4 0 +byte 4 4 +byte 4 6 +byte 4 8 +export forcePowerSorted +align 4 +LABELV forcePowerSorted +byte 4 5 +byte 4 0 +byte 4 10 +byte 4 9 +byte 4 11 +byte 4 1 +byte 4 2 +byte 4 3 +byte 4 4 +byte 4 14 +byte 4 7 +byte 4 13 +byte 4 8 +byte 4 6 +byte 4 12 +byte 4 15 +byte 4 16 +byte 4 17 +export forcePowerDarkLight +align 4 +LABELV forcePowerDarkLight +byte 4 1 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1 +byte 4 2 +byte 4 2 +byte 4 2 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 2 +byte 4 2 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +export WeaponReadyAnim +align 4 +LABELV WeaponReadyAnim +byte 4 954 +byte 4 964 +byte 4 553 +byte 4 963 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 964 +byte 4 971 +byte 4 971 +byte 4 971 +byte 4 550 +byte 4 962 +export WeaponAttackAnim +align 4 +LABELV WeaponAttackAnim +byte 4 106 +byte 4 108 +byte 4 553 +byte 4 107 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 108 +byte 4 125 +byte 4 108 +byte 4 108 +byte 4 550 +byte 4 106 +export BG_LegalizedForcePowers +code +proc BG_LegalizedForcePowers 436 12 +file "../../game/bg_misc.c" +line 171 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// bg_misc.c -- both games misc functions, all completely stateless +;4: +;5:#include "q_shared.h" +;6:#include "bg_public.h" +;7: +;8:#ifdef QAGAME +;9:#include "g_local.h" +;10:#endif +;11: +;12:#ifdef UI_EXPORTS +;13:#include "../ui/ui_local.h" +;14:#endif +;15: +;16:#ifndef UI_EXPORTS +;17:#ifndef QAGAME +;18:#include "../cgame/cg_local.h" +;19:#endif +;20:#endif +;21: +;22://rww - not putting @ in front of these because +;23://we don't need them in a cgame striped lookup. +;24://Let me know if this causes problems, pat. +;25:char *forceMasteryLevels[NUM_FORCE_MASTERY_LEVELS] = +;26:{ +;27: "MASTERY0", //"Uninitiated", // FORCE_MASTERY_UNINITIATED, +;28: "MASTERY1", //"Initiate", // FORCE_MASTERY_INITIATE, +;29: "MASTERY2", //"Padawan", // FORCE_MASTERY_PADAWAN, +;30: "MASTERY3", //"Jedi", // FORCE_MASTERY_JEDI, +;31: "MASTERY4", //"Jedi Adept", // FORCE_MASTERY_JEDI_GUARDIAN, +;32: "MASTERY5", //"Jedi Guardian", // FORCE_MASTERY_JEDI_ADEPT, +;33: "MASTERY6", //"Jedi Knight", // FORCE_MASTERY_JEDI_KNIGHT, +;34: "MASTERY7", //"Jedi Master" // FORCE_MASTERY_JEDI_MASTER, +;35:}; +;36: +;37:int forceMasteryPoints[NUM_FORCE_MASTERY_LEVELS] = +;38:{ +;39: 0, // FORCE_MASTERY_UNINITIATED, +;40: 5, // FORCE_MASTERY_INITIATE, +;41: 10, // FORCE_MASTERY_PADAWAN, +;42: 20, // FORCE_MASTERY_JEDI, +;43: 30, // FORCE_MASTERY_JEDI_GUARDIAN, +;44: 50, // FORCE_MASTERY_JEDI_ADEPT, +;45: 75, // FORCE_MASTERY_JEDI_KNIGHT, +;46: 100 // FORCE_MASTERY_JEDI_MASTER, +;47:}; +;48: +;49:int bgForcePowerCost[NUM_FORCE_POWERS][NUM_FORCE_POWER_LEVELS] = //0 == neutral +;50:{ +;51: { 0, 2, 4, 6 }, // Heal // FP_HEAL +;52: { 0, 0, 2, 6 }, // Jump //FP_LEVITATION,//hold/duration +;53: { 0, 2, 4, 6 }, // Speed //FP_SPEED,//duration +;54: { 0, 1, 3, 6 }, // Push //FP_PUSH,//hold/duration +;55: { 0, 1, 3, 6 }, // Pull //FP_PULL,//hold/duration +;56: { 0, 4, 6, 8 }, // Mind Trick //FP_TELEPATHY,//instant +;57: { 0, 1, 3, 6 }, // Grip //FP_GRIP,//hold/duration +;58: { 0, 2, 5, 8 }, // Lightning //FP_LIGHTNING,//hold/duration +;59: { 0, 4, 6, 8 }, // Dark Rage //FP_RAGE,//duration +;60: { 0, 2, 5, 8 }, // Protection //FP_PROTECT,//duration +;61: { 0, 1, 3, 6 }, // Absorb //FP_ABSORB,//duration +;62: { 0, 1, 3, 6 }, // Team Heal //FP_TEAM_HEAL,//instant +;63: { 0, 1, 3, 6 }, // Team Force //FP_TEAM_FORCE,//instant +;64: { 0, 2, 4, 6 }, // Drain //FP_DRAIN,//hold/duration +;65: { 0, 2, 5, 8 }, // Sight //FP_SEE,//duration +;66: { 0, 1, 5, 8 }, // Saber Attack //FP_SABERATTACK, +;67: { 0, 1, 5, 8 }, // Saber Defend //FP_SABERDEFEND, +;68: { 0, 4, 6, 8 } // Saber Throw //FP_SABERTHROW, +;69: //NUM_FORCE_POWERS +;70:}; +;71: +;72:int forcePowerSorted[NUM_FORCE_POWERS] = +;73:{ //rww - always use this order when drawing force powers for any reason +;74: FP_TELEPATHY, +;75: FP_HEAL, +;76: FP_ABSORB, +;77: FP_PROTECT, +;78: FP_TEAM_HEAL, +;79: FP_LEVITATION, +;80: FP_SPEED, +;81: FP_PUSH, +;82: FP_PULL, +;83: FP_SEE, +;84: FP_LIGHTNING, +;85: FP_DRAIN, +;86: FP_RAGE, +;87: FP_GRIP, +;88: FP_TEAM_FORCE, +;89: FP_SABERATTACK, +;90: FP_SABERDEFEND, +;91: FP_SABERTHROW +;92:}; +;93: +;94:int forcePowerDarkLight[NUM_FORCE_POWERS] = //0 == neutral +;95:{ //nothing should be usable at rank 0.. +;96: FORCE_LIGHTSIDE,//FP_HEAL,//instant +;97: 0,//FP_LEVITATION,//hold/duration +;98: 0,//FP_SPEED,//duration +;99: 0,//FP_PUSH,//hold/duration +;100: 0,//FP_PULL,//hold/duration +;101: FORCE_LIGHTSIDE,//FP_TELEPATHY,//instant +;102: FORCE_DARKSIDE,//FP_GRIP,//hold/duration +;103: FORCE_DARKSIDE,//FP_LIGHTNING,//hold/duration +;104: FORCE_DARKSIDE,//FP_RAGE,//duration +;105: FORCE_LIGHTSIDE,//FP_PROTECT,//duration +;106: FORCE_LIGHTSIDE,//FP_ABSORB,//duration +;107: FORCE_LIGHTSIDE,//FP_TEAM_HEAL,//instant +;108: FORCE_DARKSIDE,//FP_TEAM_FORCE,//instant +;109: FORCE_DARKSIDE,//FP_DRAIN,//hold/duration +;110: 0,//FP_SEE,//duration +;111: 0,//FP_SABERATTACK, +;112: 0,//FP_SABERDEFEND, +;113: 0//FP_SABERTHROW, +;114: //NUM_FORCE_POWERS +;115:}; +;116: +;117:int WeaponReadyAnim[WP_NUM_WEAPONS] = +;118:{ +;119: TORSO_DROPWEAP1,//WP_NONE, +;120: +;121: TORSO_WEAPONREADY3,//WP_STUN_BATON, +;122: BOTH_STAND2,//WP_SABER, +;123: TORSO_WEAPONREADY2,//WP_BRYAR_PISTOL, +;124: TORSO_WEAPONREADY3,//WP_BLASTER, +;125: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY4,//WP_DISRUPTOR, +;126: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY5,//WP_BOWCASTER, +;127: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY6,//WP_REPEATER, +;128: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY7,//WP_DEMP2, +;129: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY8,//WP_FLECHETTE, +;130: TORSO_WEAPONREADY3,//TORSO_WEAPONREADY9,//WP_ROCKET_LAUNCHER, +;131: TORSO_WEAPONREADY10,//WP_THERMAL, +;132: TORSO_WEAPONREADY10,//TORSO_WEAPONREADY11,//WP_TRIP_MINE, +;133: TORSO_WEAPONREADY10,//TORSO_WEAPONREADY12,//WP_DET_PACK, +;134: +;135: //NOT VALID (e.g. should never really be used): +;136: BOTH_STAND1,//WP_EMPLACED_GUN, +;137: TORSO_WEAPONREADY1//WP_TURRET, +;138:}; +;139: +;140:int WeaponAttackAnim[WP_NUM_WEAPONS] = +;141:{ +;142: BOTH_ATTACK1,//WP_NONE, //(shouldn't happen) +;143: +;144: BOTH_ATTACK3,//WP_STUN_BATON, +;145: BOTH_STAND2,//WP_SABER, //(has its own handling) +;146: BOTH_ATTACK2,//WP_BRYAR_PISTOL, +;147: BOTH_ATTACK3,//WP_BLASTER, +;148: BOTH_ATTACK3,//BOTH_ATTACK4,//WP_DISRUPTOR, +;149: BOTH_ATTACK3,//BOTH_ATTACK5,//WP_BOWCASTER, +;150: BOTH_ATTACK3,//BOTH_ATTACK6,//WP_REPEATER, +;151: BOTH_ATTACK3,//BOTH_ATTACK7,//WP_DEMP2, +;152: BOTH_ATTACK3,//BOTH_ATTACK8,//WP_FLECHETTE, +;153: BOTH_ATTACK3,//BOTH_ATTACK9,//WP_ROCKET_LAUNCHER, +;154: BOTH_THERMAL_THROW,//WP_THERMAL, +;155: BOTH_ATTACK3,//BOTH_ATTACK11,//WP_TRIP_MINE, +;156: BOTH_ATTACK3,//BOTH_ATTACK12,//WP_DET_PACK, +;157: +;158: //NOT VALID (e.g. should never really be used): +;159: BOTH_STAND1,//WP_EMPLACED_GUN, +;160: BOTH_ATTACK1//WP_TURRET, +;161:}; +;162: +;163: +;164://The magical function to end all functions. +;165://This will take the force power string in powerOut and parse through it, then legalize +;166://it based on the supposed rank and spit it into powerOut, returning true if it was legal +;167://to begin with and false if not. +;168://fpDisabled is actually only expected (needed) from the server, because the ui disables +;169://force power selection anyway when force powers are disabled on the server. +;170:qboolean BG_LegalizedForcePowers(char *powerOut, int maxRank, qboolean freeSaber, int teamForce, int gametype, int fpDisabled) +;171:{ +line 174 +;172: char powerBuf[128]; +;173: char readBuf[128]; +;174: qboolean maintainsValidity = qtrue; +ADDRLP4 352 +CNSTI4 1 +ASGNI4 +line 175 +;175: int powerLen = strlen(powerOut); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 360 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 356 +ADDRLP4 360 +INDIRI4 +ASGNI4 +line 176 +;176: int i = 0; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +line 177 +;177: int c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 178 +;178: int allowedPoints = 0; +ADDRLP4 88 +CNSTI4 0 +ASGNI4 +line 179 +;179: int usedPoints = 0; +ADDRLP4 80 +CNSTI4 0 +ASGNI4 +line 180 +;180: int countDown = 0; +ADDRLP4 84 +CNSTI4 0 +ASGNI4 +line 185 +;181: +;182: int final_Side; +;183: int final_Powers[NUM_FORCE_POWERS]; +;184: +;185: if (powerLen >= 128) +ADDRLP4 356 +INDIRI4 +CNSTI4 128 +LTI4 $129 +line 186 +;186: { //This should not happen. If it does, this is obviously a bogus string. +line 188 +;187: //They can have this string. Because I said so. +;188: strcpy(powerBuf, "7-1-032330000000001333"); +ADDRLP4 92 +ARGP4 +ADDRGP4 $131 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 189 +;189: maintainsValidity = qfalse; +ADDRLP4 352 +CNSTI4 0 +ASGNI4 +line 190 +;190: } +ADDRGP4 $130 +JUMPV +LABELV $129 +line 192 +;191: else +;192: { +line 193 +;193: strcpy(powerBuf, powerOut); //copy it as the original +ADDRLP4 92 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 194 +;194: } +LABELV $130 +line 197 +;195: +;196: //first of all, print the max rank into the string as the rank +;197: strcpy(powerOut, va("%i-", maxRank)); +ADDRGP4 $132 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 364 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 364 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +ADDRGP4 $134 +JUMPV +LABELV $133 +line 200 +;198: +;199: while (i < 128 && powerBuf[i] && powerBuf[i] != '-') +;200: { +line 201 +;201: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 202 +;202: } +LABELV $134 +line 199 +ADDRLP4 76 +INDIRI4 +CNSTI4 128 +GEI4 $137 +ADDRLP4 372 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 372 +INDIRI4 +CNSTI4 0 +EQI4 $137 +ADDRLP4 372 +INDIRI4 +CNSTI4 45 +NEI4 $133 +LABELV $137 +line 203 +;203: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $139 +JUMPV +LABELV $138 +line 205 +;204: while (i < 128 && powerBuf[i] && powerBuf[i] != '-') +;205: { +line 206 +;206: readBuf[c] = powerBuf[i]; +ADDRLP4 0 +INDIRI4 +ADDRLP4 220 +ADDP4 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +ASGNI1 +line 207 +;207: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 208 +;208: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 209 +;209: } +LABELV $139 +line 204 +ADDRLP4 76 +INDIRI4 +CNSTI4 128 +GEI4 $142 +ADDRLP4 380 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 380 +INDIRI4 +CNSTI4 0 +EQI4 $142 +ADDRLP4 380 +INDIRI4 +CNSTI4 45 +NEI4 $138 +LABELV $142 +line 210 +;210: readBuf[c] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 220 +ADDP4 +CNSTI1 0 +ASGNI1 +line 211 +;211: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 213 +;212: //at this point, readBuf contains the intended side +;213: final_Side = atoi(readBuf); +ADDRLP4 220 +ARGP4 +ADDRLP4 384 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 348 +ADDRLP4 384 +INDIRI4 +ASGNI4 +line 215 +;214: +;215: if (final_Side != FORCE_LIGHTSIDE && +ADDRLP4 348 +INDIRI4 +CNSTI4 1 +EQI4 $143 +ADDRLP4 348 +INDIRI4 +CNSTI4 2 +EQI4 $143 +line 217 +;216: final_Side != FORCE_DARKSIDE) +;217: { //Not a valid side. You will be dark. Because I said so. (this is something that should never actually happen unless you purposely feed in an invalid config) +line 218 +;218: final_Side = FORCE_DARKSIDE; +ADDRLP4 348 +CNSTI4 2 +ASGNI4 +line 219 +;219: maintainsValidity = qfalse; +ADDRLP4 352 +CNSTI4 0 +ASGNI4 +line 220 +;220: } +LABELV $143 +line 222 +;221: +;222: if (teamForce) +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $145 +line 223 +;223: { //If we are under force-aligned teams, make sure we're on the right side. +line 224 +;224: if (final_Side != teamForce) +ADDRLP4 348 +INDIRI4 +ADDRFP4 12 +INDIRI4 +EQI4 $147 +line 225 +;225: { +line 226 +;226: final_Side = teamForce; +ADDRLP4 348 +ADDRFP4 12 +INDIRI4 +ASGNI4 +line 229 +;227: //maintainsValidity = qfalse; +;228: //Not doing this, for now. Let them join the team with their filtered powers. +;229: } +LABELV $147 +line 230 +;230: } +LABELV $145 +line 234 +;231: +;232: //Now we have established a valid rank, and a valid side. +;233: //Read the force powers in, and cut them down based on the various rules supplied. +;234: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $150 +JUMPV +LABELV $149 +line 236 +;235: while (i < 128 && powerBuf[i] && powerBuf[i] != '\n' && c < NUM_FORCE_POWERS) +;236: { +line 237 +;237: readBuf[0] = powerBuf[i]; +ADDRLP4 220 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +ASGNI1 +line 238 +;238: readBuf[1] = 0; +ADDRLP4 220+1 +CNSTI1 0 +ASGNI1 +line 239 +;239: final_Powers[c] = atoi(readBuf); +ADDRLP4 220 +ARGP4 +ADDRLP4 392 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +ADDRLP4 392 +INDIRI4 +ASGNI4 +line 240 +;240: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 241 +;241: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 242 +;242: } +LABELV $150 +line 235 +ADDRLP4 76 +INDIRI4 +CNSTI4 128 +GEI4 $155 +ADDRLP4 396 +ADDRLP4 76 +INDIRI4 +ADDRLP4 92 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 396 +INDIRI4 +CNSTI4 0 +EQI4 $155 +ADDRLP4 396 +INDIRI4 +CNSTI4 10 +EQI4 $155 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $149 +LABELV $155 +line 246 +;243: +;244: //final_Powers now contains all the stuff from the string +;245: //Set the maximum allowed points used based on the max rank level, and count the points actually used. +;246: allowedPoints = forceMasteryPoints[maxRank]; +ADDRLP4 88 +ADDRFP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forceMasteryPoints +ADDP4 +INDIRI4 +ASGNI4 +line 248 +;247: +;248: i = 0; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRGP4 $157 +JUMPV +LABELV $156 +line 250 +;249: while (i < NUM_FORCE_POWERS) +;250: { //if this power doesn't match the side we're on, then 0 it now. +line 251 +;251: if (final_Powers[i] && +ADDRLP4 400 +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 404 +CNSTI4 0 +ASGNI4 +ADDRLP4 400 +INDIRI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 404 +INDIRI4 +EQI4 $159 +ADDRLP4 408 +ADDRLP4 400 +INDIRI4 +ADDRGP4 forcePowerDarkLight +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 408 +INDIRI4 +ADDRLP4 404 +INDIRI4 +EQI4 $159 +ADDRLP4 408 +INDIRI4 +ADDRLP4 348 +INDIRI4 +EQI4 $159 +line 254 +;252: forcePowerDarkLight[i] && +;253: forcePowerDarkLight[i] != final_Side) +;254: { +line 255 +;255: final_Powers[i] = 0; +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 258 +;256: //This is only likely to happen with g_forceBasedTeams. Let it slide. +;257: //maintainsValidity = 0; +;258: } +LABELV $159 +line 260 +;259: +;260: if ( final_Powers[i] && +ADDRLP4 416 +CNSTI4 0 +ASGNI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 416 +INDIRI4 +EQI4 $161 +ADDRFP4 20 +INDIRI4 +CNSTI4 1 +ADDRLP4 76 +INDIRI4 +LSHI4 +BANDI4 +ADDRLP4 416 +INDIRI4 +EQI4 $161 +line 262 +;261: (fpDisabled & (1 << i)) ) +;262: { //if this power is disabled on the server via said server option, then we don't get it. +line 263 +;263: final_Powers[i] = 0; +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 264 +;264: } +LABELV $161 +line 266 +;265: +;266: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 267 +;267: } +LABELV $157 +line 249 +ADDRLP4 76 +INDIRI4 +CNSTI4 18 +LTI4 $156 +line 269 +;268: +;269: if (gametype < GT_TEAM) +ADDRFP4 16 +INDIRI4 +CNSTI4 5 +GEI4 $163 +line 270 +;270: { //don't bother with team powers then +line 271 +;271: final_Powers[FP_TEAM_HEAL] = 0; +ADDRLP4 4+44 +CNSTI4 0 +ASGNI4 +line 272 +;272: final_Powers[FP_TEAM_FORCE] = 0; +ADDRLP4 4+48 +CNSTI4 0 +ASGNI4 +line 273 +;273: } +LABELV $163 +line 275 +;274: +;275: usedPoints = 0; +ADDRLP4 80 +CNSTI4 0 +ASGNI4 +line 276 +;276: i = 0; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRGP4 $168 +JUMPV +LABELV $167 +line 278 +;277: while (i < NUM_FORCE_POWERS) +;278: { +line 279 +;279: countDown = 0; +ADDRLP4 84 +CNSTI4 0 +ASGNI4 +line 281 +;280: +;281: countDown = final_Powers[i]; +ADDRLP4 84 +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRGP4 $171 +JUMPV +LABELV $170 +line 284 +;282: +;283: while (countDown > 0) +;284: { +line 285 +;285: usedPoints += bgForcePowerCost[i][countDown]; //[fp index][fp level] +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 287 +;286: //if this is jump, or we have a free saber and it's offense or defense, take the level back down on level 1 +;287: if ( countDown == 1 && +ADDRLP4 400 +CNSTI4 1 +ASGNI4 +ADDRLP4 84 +INDIRI4 +ADDRLP4 400 +INDIRI4 +NEI4 $173 +ADDRLP4 76 +INDIRI4 +ADDRLP4 400 +INDIRI4 +EQI4 $176 +ADDRLP4 76 +INDIRI4 +CNSTI4 15 +NEI4 $177 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $176 +LABELV $177 +ADDRLP4 76 +INDIRI4 +CNSTI4 16 +NEI4 $173 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $173 +LABELV $176 +line 291 +;288: ((i == FP_LEVITATION) || +;289: (i == FP_SABERATTACK && freeSaber) || +;290: (i == FP_SABERDEFEND && freeSaber)) ) +;291: { +line 292 +;292: usedPoints -= bgForcePowerCost[i][countDown]; +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +ADDRLP4 84 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 76 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 293 +;293: } +LABELV $173 +line 294 +;294: countDown--; +ADDRLP4 84 +ADDRLP4 84 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 295 +;295: } +LABELV $171 +line 283 +ADDRLP4 84 +INDIRI4 +CNSTI4 0 +GTI4 $170 +line 297 +;296: +;297: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 298 +;298: } +LABELV $168 +line 277 +ADDRLP4 76 +INDIRI4 +CNSTI4 18 +LTI4 $167 +line 300 +;299: +;300: if (usedPoints > allowedPoints) +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +LEI4 $178 +line 301 +;301: { //Time to do the fancy stuff. (meaning, slowly cut parts off while taking a guess at what is most or least important in the config) +line 302 +;302: int attemptedCycles = 0; +ADDRLP4 408 +CNSTI4 0 +ASGNI4 +line 303 +;303: int powerCycle = 2; +ADDRLP4 400 +CNSTI4 2 +ASGNI4 +line 304 +;304: int minPow = 0; +ADDRLP4 404 +CNSTI4 0 +ASGNI4 +line 306 +;305: +;306: if (freeSaber) +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $180 +line 307 +;307: { +line 308 +;308: minPow = 1; +ADDRLP4 404 +CNSTI4 1 +ASGNI4 +line 309 +;309: } +LABELV $180 +line 311 +;310: +;311: maintainsValidity = qfalse; +ADDRLP4 352 +CNSTI4 0 +ASGNI4 +ADDRGP4 $183 +JUMPV +LABELV $182 +line 314 +;312: +;313: while (usedPoints > allowedPoints) +;314: { +line 315 +;315: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $186 +JUMPV +LABELV $185 +line 318 +;316: +;317: while (c < NUM_FORCE_POWERS && usedPoints > allowedPoints) +;318: { +line 319 +;319: if (final_Powers[c] && final_Powers[c] < powerCycle) +ADDRLP4 412 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 412 +INDIRI4 +CNSTI4 0 +EQI4 $188 +ADDRLP4 412 +INDIRI4 +ADDRLP4 400 +INDIRI4 +GEI4 $188 +line 320 +;320: { //kill in order of lowest powers, because the higher powers are probably more important +line 321 +;321: if (c == FP_SABERATTACK && +ADDRLP4 0 +INDIRI4 +CNSTI4 15 +NEI4 $207 +ADDRLP4 4+64 +INDIRI4 +ADDRLP4 404 +INDIRI4 +GTI4 $194 +ADDRLP4 4+68 +INDIRI4 +CNSTI4 0 +LEI4 $207 +LABELV $194 +line 323 +;322: (final_Powers[FP_SABERDEFEND] > minPow || final_Powers[FP_SABERTHROW] > 0)) +;323: { //if we're on saber attack, only suck it down if we have no def or throw either +line 324 +;324: int whichOne = FP_SABERTHROW; //first try throw +ADDRLP4 416 +CNSTI4 17 +ASGNI4 +line 326 +;325: +;326: if (!final_Powers[whichOne]) +ADDRLP4 416 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $198 +line 327 +;327: { +line 328 +;328: whichOne = FP_SABERDEFEND; //if no throw, drain defense +ADDRLP4 416 +CNSTI4 16 +ASGNI4 +line 329 +;329: } +ADDRGP4 $198 +JUMPV +LABELV $197 +line 332 +;330: +;331: while (final_Powers[whichOne] > 0 && usedPoints > allowedPoints) +;332: { +line 333 +;333: if ( final_Powers[whichOne] > 1 || +ADDRLP4 416 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +CNSTI4 1 +GTI4 $204 +ADDRLP4 416 +INDIRI4 +CNSTI4 15 +NEI4 $203 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $191 +LABELV $203 +ADDRLP4 416 +INDIRI4 +CNSTI4 16 +NEI4 $204 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $191 +LABELV $204 +line 336 +;334: ( (whichOne != FP_SABERATTACK || !freeSaber) && +;335: (whichOne != FP_SABERDEFEND || !freeSaber) ) ) +;336: { //don't take attack or defend down on level 1 still, if it's free +line 337 +;337: usedPoints -= bgForcePowerCost[whichOne][final_Powers[whichOne]]; +ADDRLP4 428 +CNSTI4 2 +ASGNI4 +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +ADDRLP4 416 +INDIRI4 +ADDRLP4 428 +INDIRI4 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 428 +INDIRI4 +LSHI4 +ADDRLP4 416 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 338 +;338: final_Powers[whichOne]--; +ADDRLP4 432 +ADDRLP4 416 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +ASGNP4 +ADDRLP4 432 +INDIRP4 +ADDRLP4 432 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 339 +;339: } +line 341 +;340: else +;341: { +line 342 +;342: break; +LABELV $201 +line 344 +;343: } +;344: } +LABELV $198 +line 331 +ADDRLP4 416 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $205 +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GTI4 $197 +LABELV $205 +line 345 +;345: } +ADDRGP4 $191 +JUMPV +line 347 +;346: else +;347: { +LABELV $206 +line 349 +;348: while (final_Powers[c] > 0 && usedPoints > allowedPoints) +;349: { +line 350 +;350: if ( final_Powers[c] > 1 || +ADDRLP4 420 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 420 +INDIRI4 +GTI4 $213 +ADDRLP4 0 +INDIRI4 +ADDRLP4 420 +INDIRI4 +EQI4 $208 +ADDRLP4 0 +INDIRI4 +CNSTI4 15 +NEI4 $212 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $208 +LABELV $212 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +NEI4 $213 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $208 +LABELV $213 +line 354 +;351: ((c != FP_LEVITATION) && +;352: (c != FP_SABERATTACK || !freeSaber) && +;353: (c != FP_SABERDEFEND || !freeSaber)) ) +;354: { +line 355 +;355: usedPoints -= bgForcePowerCost[c][final_Powers[c]]; +ADDRLP4 428 +CNSTI4 2 +ASGNI4 +ADDRLP4 80 +ADDRLP4 80 +INDIRI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 428 +INDIRI4 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ADDRLP4 428 +INDIRI4 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 356 +;356: final_Powers[c]--; +ADDRLP4 432 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +ASGNP4 +ADDRLP4 432 +INDIRP4 +ADDRLP4 432 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 357 +;357: } +line 359 +;358: else +;359: { +line 360 +;360: break; +LABELV $210 +line 362 +;361: } +;362: } +LABELV $207 +line 348 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $214 +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GTI4 $206 +LABELV $214 +LABELV $208 +line 363 +;363: } +LABELV $191 +line 364 +;364: } +LABELV $188 +line 366 +;365: +;366: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 367 +;367: } +LABELV $186 +line 317 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +GEI4 $215 +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GTI4 $185 +LABELV $215 +line 369 +;368: +;369: powerCycle++; +ADDRLP4 400 +ADDRLP4 400 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 370 +;370: attemptedCycles++; +ADDRLP4 408 +ADDRLP4 408 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 372 +;371: +;372: if (attemptedCycles > NUM_FORCE_POWERS) +ADDRLP4 408 +INDIRI4 +CNSTI4 18 +LEI4 $216 +line 373 +;373: { //I think this should be impossible. But just in case. +line 374 +;374: break; +ADDRGP4 $184 +JUMPV +LABELV $216 +line 376 +;375: } +;376: } +LABELV $183 +line 313 +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +GTI4 $182 +LABELV $184 +line 378 +;377: +;378: if (usedPoints > allowedPoints) +ADDRLP4 80 +INDIRI4 +ADDRLP4 88 +INDIRI4 +LEI4 $218 +line 379 +;379: { //Still? Fine then.. we will kill all of your powers, except the freebies. +line 380 +;380: i = 0; +ADDRLP4 76 +CNSTI4 0 +ASGNI4 +ADDRGP4 $221 +JUMPV +LABELV $220 +line 383 +;381: +;382: while (i < NUM_FORCE_POWERS) +;383: { +line 384 +;384: final_Powers[i] = 0; +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +CNSTI4 0 +ASGNI4 +line 385 +;385: if (i == FP_LEVITATION || +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +EQI4 $226 +ADDRLP4 76 +INDIRI4 +CNSTI4 15 +NEI4 $227 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $226 +LABELV $227 +ADDRLP4 76 +INDIRI4 +CNSTI4 16 +NEI4 $223 +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $223 +LABELV $226 +line 388 +;386: (i == FP_SABERATTACK && freeSaber) || +;387: (i == FP_SABERDEFEND && freeSaber)) +;388: { +line 389 +;389: final_Powers[i] = 1; +ADDRLP4 76 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +CNSTI4 1 +ASGNI4 +line 390 +;390: } +LABELV $223 +line 391 +;391: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 392 +;392: } +LABELV $221 +line 382 +ADDRLP4 76 +INDIRI4 +CNSTI4 18 +LTI4 $220 +line 393 +;393: usedPoints = 0; +ADDRLP4 80 +CNSTI4 0 +ASGNI4 +line 394 +;394: } +LABELV $218 +line 395 +;395: } +LABELV $178 +line 397 +;396: +;397: if (final_Powers[FP_SABERATTACK] < 1) +ADDRLP4 4+60 +INDIRI4 +CNSTI4 1 +GEI4 $228 +line 398 +;398: { +line 399 +;399: final_Powers[FP_SABERDEFEND] = 0; +ADDRLP4 4+64 +CNSTI4 0 +ASGNI4 +line 400 +;400: final_Powers[FP_SABERTHROW] = 0; +ADDRLP4 4+68 +CNSTI4 0 +ASGNI4 +line 401 +;401: } +LABELV $228 +line 403 +;402: +;403: if (freeSaber) +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $233 +line 404 +;404: { +line 405 +;405: if (final_Powers[FP_SABERATTACK] < 1) +ADDRLP4 4+60 +INDIRI4 +CNSTI4 1 +GEI4 $235 +line 406 +;406: { +line 407 +;407: final_Powers[FP_SABERATTACK] = 1; +ADDRLP4 4+60 +CNSTI4 1 +ASGNI4 +line 408 +;408: } +LABELV $235 +line 409 +;409: if (final_Powers[FP_SABERDEFEND] < 1) +ADDRLP4 4+64 +INDIRI4 +CNSTI4 1 +GEI4 $239 +line 410 +;410: { +line 411 +;411: final_Powers[FP_SABERDEFEND] = 1; +ADDRLP4 4+64 +CNSTI4 1 +ASGNI4 +line 412 +;412: } +LABELV $239 +line 413 +;413: } +LABELV $233 +line 414 +;414: if (final_Powers[FP_LEVITATION] < 1) +ADDRLP4 4+4 +INDIRI4 +CNSTI4 1 +GEI4 $243 +line 415 +;415: { +line 416 +;416: final_Powers[FP_LEVITATION] = 1; +ADDRLP4 4+4 +CNSTI4 1 +ASGNI4 +line 417 +;417: } +LABELV $243 +line 419 +;418: +;419: if (fpDisabled) +ADDRFP4 20 +INDIRI4 +CNSTI4 0 +EQI4 $247 +line 420 +;420: { +line 421 +;421: final_Powers[FP_LEVITATION] = 1; +ADDRLP4 4+4 +CNSTI4 1 +ASGNI4 +line 422 +;422: final_Powers[FP_SABERATTACK] = 3; +ADDRLP4 4+60 +CNSTI4 3 +ASGNI4 +line 423 +;423: final_Powers[FP_SABERDEFEND] = 3; +ADDRLP4 4+64 +CNSTI4 3 +ASGNI4 +line 424 +;424: final_Powers[FP_SABERTHROW] = 0; +ADDRLP4 4+68 +CNSTI4 0 +ASGNI4 +line 425 +;425: } +LABELV $247 +line 430 +;426: +;427: //We finally have all the force powers legalized and stored locally. +;428: //Put them all into the string and return the result. We already have +;429: //the rank there, so print the side and the powers now. +;430: Q_strcat(powerOut, 128, va("%i-", final_Side)); +ADDRGP4 $132 +ARGP4 +ADDRLP4 348 +INDIRI4 +ARGI4 +ADDRLP4 400 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 128 +ARGI4 +ADDRLP4 400 +INDIRP4 +ARGP4 +ADDRGP4 Q_strcat +CALLV +pop +line 432 +;431: +;432: i = strlen(powerOut); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 404 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 76 +ADDRLP4 404 +INDIRI4 +ASGNI4 +line 433 +;433: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $254 +JUMPV +LABELV $253 +line 435 +;434: while (c < NUM_FORCE_POWERS) +;435: { +line 436 +;436: strcpy(readBuf, va("%i", final_Powers[c])); +ADDRGP4 $256 +ARGP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 408 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 220 +ARGP4 +ADDRLP4 408 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 437 +;437: powerOut[i] = readBuf[0]; +ADDRLP4 76 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ADDRLP4 220 +INDIRI1 +ASGNI1 +line 438 +;438: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 439 +;439: i++; +ADDRLP4 76 +ADDRLP4 76 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 440 +;440: } +LABELV $254 +line 434 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $253 +line 441 +;441: powerOut[i] = 0; +ADDRLP4 76 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 443 +;442: +;443: return maintainsValidity; +ADDRLP4 352 +INDIRI4 +RETI4 +LABELV $128 +endproc BG_LegalizedForcePowers 436 12 +data +export bg_itemlist +align 4 +LABELV bg_itemlist +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $257 +address $257 +address $258 +address $259 +address $260 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $261 +byte 4 25 +byte 4 3 +byte 4 1 +address $257 +address $257 +address $262 +address $259 +address $263 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $264 +byte 4 100 +byte 4 3 +byte 4 2 +address $257 +address $257 +address $265 +address $266 +address $267 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $268 +byte 4 25 +byte 4 4 +byte 4 0 +address $257 +address $257 +address $269 +address $270 +address $271 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $272 +byte 4 120 +byte 4 6 +byte 4 1 +address $257 +address $257 +address $273 +address $270 +address $274 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $275 +byte 4 120 +byte 4 6 +byte 4 2 +address $257 +address $276 +address $277 +address $270 +address $278 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $279 +byte 4 25 +byte 4 6 +byte 4 3 +address $257 +address $257 +address $280 +address $270 +address $281 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1 +byte 4 6 +byte 4 4 +address $257 +address $257 +address $282 +address $270 +address $283 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $284 +byte 4 60 +byte 4 6 +byte 4 5 +address $257 +address $257 +address $285 +address $270 +address $286 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $287 +byte 4 120 +byte 4 6 +byte 4 6 +address $257 +address $257 +address $288 +address $289 +address $290 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $291 +byte 4 25 +byte 4 5 +byte 4 12 +address $257 +address $257 +address $292 +address $289 +address $293 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $294 +byte 4 25 +byte 4 5 +byte 4 13 +address $257 +address $257 +address $295 +address $296 +address $297 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $298 +byte 4 25 +byte 4 5 +byte 4 14 +address $257 +address $257 +address $299 +address $300 +address $301 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $302 +byte 4 25 +byte 4 5 +byte 4 15 +address $257 +address $257 +address $303 +address $270 +address $304 +byte 4 0 +byte 4 0 +byte 4 0 +address $305 +address $306 +byte 4 100 +byte 4 1 +byte 4 1 +address $257 +address $257 +address $307 +address $270 +address $308 +byte 4 0 +byte 4 0 +byte 4 0 +address $309 +address $310 +byte 4 100 +byte 4 1 +byte 4 2 +address $257 +address $257 +address $311 +address $270 +address $312 +byte 4 0 +byte 4 0 +byte 4 0 +address $313 +address $314 +byte 4 100 +byte 4 1 +byte 4 3 +address $257 +address $257 +address $315 +address $270 +address $316 +byte 4 0 +byte 4 0 +byte 4 0 +address $317 +address $318 +byte 4 100 +byte 4 1 +byte 4 4 +address $257 +address $257 +address $319 +address $270 +address $320 +byte 4 0 +byte 4 0 +byte 4 0 +address $321 +address $322 +byte 4 100 +byte 4 1 +byte 4 5 +address $257 +address $257 +address $323 +address $270 +address $324 +byte 4 0 +byte 4 0 +byte 4 0 +address $325 +address $326 +byte 4 100 +byte 4 1 +byte 4 6 +address $257 +address $257 +address $327 +address $270 +address $328 +byte 4 0 +byte 4 0 +byte 4 0 +address $329 +address $330 +byte 4 100 +byte 4 1 +byte 4 7 +address $257 +address $257 +address $331 +address $270 +address $332 +byte 4 0 +byte 4 0 +byte 4 0 +address $333 +address $334 +byte 4 100 +byte 4 1 +byte 4 8 +address $257 +address $257 +address $335 +address $270 +address $336 +byte 4 0 +byte 4 0 +byte 4 0 +address $337 +address $338 +byte 4 100 +byte 4 1 +byte 4 9 +address $257 +address $257 +address $339 +address $270 +address $340 +byte 4 0 +byte 4 0 +byte 4 0 +address $341 +address $342 +byte 4 3 +byte 4 1 +byte 4 10 +address $257 +address $257 +address $343 +address $270 +address $344 +address $345 +byte 4 0 +byte 4 0 +address $346 +address $347 +byte 4 4 +byte 4 2 +byte 4 7 +address $257 +address $257 +address $348 +address $270 +address $349 +address $350 +byte 4 0 +byte 4 0 +address $351 +address $352 +byte 4 3 +byte 4 2 +byte 4 8 +address $257 +address $257 +address $353 +address $270 +address $354 +address $355 +address $356 +byte 4 0 +address $357 +address $358 +byte 4 3 +byte 4 2 +byte 4 9 +address $257 +address $257 +address $359 +address $270 +address $345 +address $344 +byte 4 0 +byte 4 0 +address $346 +address $347 +byte 4 4 +byte 4 1 +byte 4 11 +address $257 +address $257 +address $360 +address $270 +address $350 +address $349 +byte 4 0 +byte 4 0 +address $351 +address $352 +byte 4 3 +byte 4 1 +byte 4 12 +address $257 +address $257 +address $361 +address $270 +address $355 +address $354 +address $356 +byte 4 0 +address $357 +address $358 +byte 4 3 +byte 4 1 +byte 4 13 +address $257 +address $257 +address $362 +address $270 +address $316 +byte 4 0 +byte 4 0 +byte 4 0 +address $317 +address $318 +byte 4 50 +byte 4 1 +byte 4 14 +address $257 +address $257 +address $363 +address $270 +address $316 +byte 4 0 +byte 4 0 +byte 4 0 +address $317 +address $318 +byte 4 50 +byte 4 1 +byte 4 15 +address $257 +address $257 +address $364 +address $365 +address $366 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $318 +byte 4 100 +byte 4 2 +byte 4 1 +address $257 +address $257 +address $367 +address $365 +address $366 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $368 +byte 4 100 +byte 4 2 +byte 4 2 +address $257 +address $257 +address $369 +address $365 +address $370 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $371 +byte 4 100 +byte 4 2 +byte 4 3 +address $257 +address $257 +address $372 +address $365 +address $373 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $374 +byte 4 100 +byte 4 2 +byte 4 4 +address $257 +address $257 +address $375 +address $365 +address $376 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $377 +byte 4 3 +byte 4 2 +byte 4 5 +address $257 +address $257 +address $378 +byte 4 0 +address $379 +address $380 +byte 4 0 +byte 4 0 +byte 4 0 +address $381 +byte 4 0 +byte 4 8 +byte 4 4 +address $257 +address $257 +address $382 +byte 4 0 +address $383 +address $384 +byte 4 0 +byte 4 0 +byte 4 0 +address $385 +byte 4 0 +byte 4 8 +byte 4 5 +address $257 +address $257 +address $386 +byte 4 0 +address $387 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $388 +byte 4 0 +byte 4 8 +byte 4 6 +address $257 +address $257 +address $389 +address $365 +address $390 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $391 +byte 4 0 +byte 4 8 +byte 4 0 +address $257 +address $257 +address $392 +address $365 +address $393 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +address $394 +byte 4 0 +byte 4 8 +byte 4 0 +address $257 +address $257 +byte 4 0 +skip 48 +export bg_numItems +align 4 +LABELV bg_numItems +byte 4 42 +export vectoyaw +code +proc vectoyaw 20 8 +line 1235 +;444:} +;445: +;446:/*QUAKED item_***** ( 0 0 0 ) (-16 -16 -16) (16 16 16) suspended +;447:DO NOT USE THIS CLASS, IT JUST HOLDS GENERAL INFORMATION. +;448:The suspended flag will allow items to hang in the air, otherwise they are dropped to the next surface. +;449: +;450:If an item is the target of another entity, it will not spawn in until fired. +;451: +;452:An item fires all of its targets when it is picked up. If the toucher can't carry it, the targets won't be fired. +;453: +;454:"notfree" if set to 1, don't spawn in free for all games +;455:"notteam" if set to 1, don't spawn in team games +;456:"notsingle" if set to 1, don't spawn in single player games +;457:"wait" override the default wait before respawning. -1 = never respawn automatically, which can be used with targeted spawning. +;458:"random" random number of plus or minus seconds varied from the respawn time +;459:"count" override quantity or duration on most items. +;460:*/ +;461: +;462:/*QUAKED misc_shield_floor_unit (1 0 0) (-16 -16 0) (16 16 40) +;463:#MODELNAME="/models/items/a_shield_converter.md3" +;464:Gives shield energy when used. +;465: +;466:"count" - max charge value (default 50) +;467:"chargerate" - rechage 1 point every this many milliseconds (default 3000) +;468:*/ +;469: +;470:gitem_t bg_itemlist[] = +;471:{ +;472: { +;473: NULL, // classname +;474: NULL, // pickup_sound +;475: { NULL, // world_model[0] +;476: NULL, // world_model[1] +;477: 0, 0} , // world_model[2],[3] +;478: NULL, // view_model +;479:/* icon */ NULL, // icon +;480:/* pickup */ //NULL, // pickup_name +;481: 0, // quantity +;482: 0, // giType (IT_*) +;483: 0, // giTag +;484:/* precache */ "", // precaches +;485:/* sounds */ "" // sounds +;486: }, // leave index 0 alone +;487: +;488: // +;489: // Pickups +;490: // +;491: +;492:/*QUAKED item_shield_sm_instant (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;493:Instant shield pickup, restores 25 +;494:*/ +;495: { +;496: "item_shield_sm_instant", +;497: "sound/player/pickupshield.wav", +;498: { "models/map_objects/mp/psd_sm.md3", +;499: 0, 0, 0}, +;500:/* view */ NULL, +;501:/* icon */ "gfx/mp/small_shield", +;502:/* pickup */// "Shield Small", +;503: 25, +;504: IT_ARMOR, +;505: 1, //special for shield - max on pickup is maxhealth*tag, thus small shield goes up to 100 shield +;506:/* precache */ "", +;507:/* sounds */ "" +;508: }, +;509: +;510:/*QUAKED item_shield_lrg_instant (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;511:Instant shield pickup, restores 100 +;512:*/ +;513: { +;514: "item_shield_lrg_instant", +;515: "sound/player/pickupshield.wav", +;516: { "models/map_objects/mp/psd.md3", +;517: 0, 0, 0}, +;518:/* view */ NULL, +;519:/* icon */ "gfx/mp/large_shield", +;520:/* pickup */// "Shield Large", +;521: 100, +;522: IT_ARMOR, +;523: 2, //special for shield - max on pickup is maxhealth*tag, thus large shield goes up to 200 shield +;524:/* precache */ "", +;525:/* sounds */ "" +;526: }, +;527: +;528:/*QUAKED item_medpak_instant (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;529:Instant medpack pickup, heals 25 +;530:*/ +;531: { +;532: "item_medpak_instant", +;533: "sound/player/pickuphealth.wav", +;534: { "models/map_objects/mp/medpac.md3", +;535: 0, 0, 0 }, +;536:/* view */ NULL, +;537:/* icon */ "gfx/hud/i_icon_medkit", +;538:/* pickup */// "Medpack", +;539: 25, +;540: IT_HEALTH, +;541: 0, +;542:/* precache */ "", +;543:/* sounds */ "" +;544: }, +;545: +;546: +;547: // +;548: // ITEMS +;549: // +;550: +;551:/*QUAKED item_seeker (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;552:30 seconds of seeker drone +;553:*/ +;554: { +;555: "item_seeker", +;556: "sound/weapons/w_pkup.wav", +;557: { "models/items/remote.md3", +;558: 0, 0, 0} , +;559:/* view */ NULL, +;560:/* icon */ "gfx/hud/i_icon_seeker", +;561:/* pickup */// "Seeker Drone", +;562: 120, +;563: IT_HOLDABLE, +;564: HI_SEEKER, +;565:/* precache */ "", +;566:/* sounds */ "" +;567: }, +;568: +;569:/*QUAKED item_shield (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;570:Portable shield +;571:*/ +;572: { +;573: "item_shield", +;574: "sound/weapons/w_pkup.wav", +;575: { "models/map_objects/mp/shield.md3", +;576: 0, 0, 0} , +;577:/* view */ NULL, +;578:/* icon */ "gfx/hud/i_icon_shieldwall", +;579:/* pickup */// "Forcefield", +;580: 120, +;581: IT_HOLDABLE, +;582: HI_SHIELD, +;583:/* precache */ "", +;584:/* sounds */ "sound/weapons/detpack/stick.wav sound/movers/doors/forcefield_on.wav sound/movers/doors/forcefield_off.wav sound/movers/doors/forcefield_lp.wav sound/effects/bumpfield.wav", +;585: }, +;586: +;587:/*QUAKED item_medpac (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;588:Bacta canister pickup, heals 25 on use +;589:*/ +;590: { +;591: "item_medpac", //should be item_bacta +;592: "sound/weapons/w_pkup.wav", +;593: { "models/map_objects/mp/bacta.md3", +;594: 0, 0, 0} , +;595:/* view */ NULL, +;596:/* icon */ "gfx/hud/i_icon_bacta", +;597:/* pickup */// "Bacta Canister", +;598: 25, +;599: IT_HOLDABLE, +;600: HI_MEDPAC, +;601:/* precache */ "", +;602:/* sounds */ "" +;603: }, +;604: +;605:/*QUAKED item_datapad (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;606:Do not place this. +;607:*/ +;608: { +;609: "item_datapad", +;610: "sound/weapons/w_pkup.wav", +;611: { "models/items/datapad.md3", +;612: 0, 0, 0} , +;613:/* view */ NULL, +;614:/* icon */ NULL, +;615:/* pickup */// "Datapad", +;616: 1, +;617: IT_HOLDABLE, +;618: HI_DATAPAD, +;619:/* precache */ "", +;620:/* sounds */ "" +;621: }, +;622: +;623:/*QUAKED item_binoculars (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;624:These will be standard equipment on the player - DO NOT PLACE +;625:*/ +;626: { +;627: "item_binoculars", +;628: "sound/weapons/w_pkup.wav", +;629: { "models/items/binoculars.md3", +;630: 0, 0, 0} , +;631:/* view */ NULL, +;632:/* icon */ "gfx/hud/i_icon_zoom", +;633:/* pickup */// "Binoculars", +;634: 60, +;635: IT_HOLDABLE, +;636: HI_BINOCULARS, +;637:/* precache */ "", +;638:/* sounds */ "" +;639: }, +;640: +;641:/*QUAKED item_sentry_gun (.3 .3 1) (-8 -8 -0) (8 8 16) suspended +;642:Sentry gun inventory pickup. +;643:*/ +;644: { +;645: "item_sentry_gun", +;646: "sound/weapons/w_pkup.wav", +;647: { "models/items/psgun.glm", +;648: 0, 0, 0} , +;649:/* view */ NULL, +;650:/* icon */ "gfx/hud/i_icon_sentrygun", +;651:/* pickup */// "Sentry Gun", +;652: 120, +;653: IT_HOLDABLE, +;654: HI_SENTRY_GUN, +;655:/* precache */ "", +;656:/* sounds */ "" +;657: }, +;658: +;659:/*QUAKED item_force_enlighten_light (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;660:Adds one rank to all Force powers temporarily. Only light jedi can use. +;661:*/ +;662: { +;663: "item_force_enlighten_light", +;664: "sound/player/enlightenment.wav", +;665: { "models/map_objects/mp/jedi_enlightenment.md3", +;666: 0, 0, 0} , +;667:/* view */ NULL, +;668:/* icon */ "gfx/hud/mpi_jlight", +;669:/* pickup */// "Light Force Enlightenment", +;670: 25, +;671: IT_POWERUP, +;672: PW_FORCE_ENLIGHTENED_LIGHT, +;673:/* precache */ "", +;674:/* sounds */ "" +;675: }, +;676: +;677:/*QUAKED item_force_enlighten_dark (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;678:Adds one rank to all Force powers temporarily. Only dark jedi can use. +;679:*/ +;680: { +;681: "item_force_enlighten_dark", +;682: "sound/player/enlightenment.wav", +;683: { "models/map_objects/mp/dk_enlightenment.md3", +;684: 0, 0, 0} , +;685:/* view */ NULL, +;686:/* icon */ "gfx/hud/mpi_dklight", +;687:/* pickup */// "Dark Force Enlightenment", +;688: 25, +;689: IT_POWERUP, +;690: PW_FORCE_ENLIGHTENED_DARK, +;691:/* precache */ "", +;692:/* sounds */ "" +;693: }, +;694: +;695:/*QUAKED item_force_boon (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;696:Unlimited Force Pool for a short time. +;697:*/ +;698: { +;699: "item_force_boon", +;700: "sound/player/boon.wav", +;701: { "models/map_objects/mp/force_boon.md3", +;702: 0, 0, 0} , +;703:/* view */ NULL, +;704:/* icon */ "gfx/hud/mpi_fboon", +;705:/* pickup */// "Force Boon", +;706: 25, +;707: IT_POWERUP, +;708: PW_FORCE_BOON, +;709:/* precache */ "", +;710:/* sounds */ "" +;711: }, +;712: +;713:/*QUAKED item_ysalimari (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;714:A small lizard carried on the player, which prevents the possessor from using any Force power. However, he is unaffected by any Force power. +;715:*/ +;716: { +;717: "item_ysalimari", +;718: "sound/player/ysalimari.wav", +;719: { "models/map_objects/mp/ysalimari.md3", +;720: 0, 0, 0} , +;721:/* view */ NULL, +;722:/* icon */ "gfx/hud/mpi_ysamari", +;723:/* pickup */// "Ysalamiri", +;724: 25, +;725: IT_POWERUP, +;726: PW_YSALAMIRI, +;727:/* precache */ "", +;728:/* sounds */ "" +;729: }, +;730: +;731: // +;732: // WEAPONS +;733: // +;734: +;735:/*QUAKED weapon_stun_baton (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;736:Don't place this +;737:*/ +;738: { +;739: "weapon_stun_baton", +;740: "sound/weapons/w_pkup.wav", +;741: { "models/weapons2/stun_baton/baton_w.glm", +;742: 0, 0, 0}, +;743:/* view */ "models/weapons2/stun_baton/baton.md3", +;744:/* icon */ "gfx/hud/w_icon_stunbaton", +;745:/* pickup */// "Stun Baton", +;746: 100, +;747: IT_WEAPON, +;748: WP_STUN_BATON, +;749:/* precache */ "", +;750:/* sounds */ "" +;751: }, +;752: +;753:/*QUAKED weapon_saber (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;754:Don't place this +;755:*/ +;756: { +;757: "weapon_saber", +;758: "sound/weapons/w_pkup.wav", +;759: { "models/weapons2/saber/saber_w.glm", +;760: 0, 0, 0}, +;761:/* view */ "models/weapons2/saber/saber_w.md3", +;762:/* icon */ "gfx/hud/w_icon_lightsaber", +;763:/* pickup */// "Lightsaber", +;764: 100, +;765: IT_WEAPON, +;766: WP_SABER, +;767:/* precache */ "", +;768:/* sounds */ "" +;769: }, +;770: +;771:/*QUAKED weapon_bryar_pistol (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;772:Don't place this +;773:*/ +;774: { +;775: "weapon_bryar_pistol", +;776: "sound/weapons/w_pkup.wav", +;777: { "models/weapons2/briar_pistol/briar_pistol_w.glm", +;778: 0, 0, 0}, +;779:/* view */ "models/weapons2/briar_pistol/briar_pistol.md3", +;780:/* icon */ "gfx/hud/w_icon_rifle", +;781:/* pickup */// "Bryar Pistol", +;782: 100, +;783: IT_WEAPON, +;784: WP_BRYAR_PISTOL, +;785:/* precache */ "", +;786:/* sounds */ "" +;787: }, +;788: +;789:/*QUAKED weapon_blaster (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;790:*/ +;791: { +;792: "weapon_blaster", +;793: "sound/weapons/w_pkup.wav", +;794: { "models/weapons2/blaster_r/blaster_w.glm", +;795: 0, 0, 0}, +;796:/* view */ "models/weapons2/blaster_r/blaster.md3", +;797:/* icon */ "gfx/hud/w_icon_blaster", +;798:/* pickup */// "E11 Blaster Rifle", +;799: 100, +;800: IT_WEAPON, +;801: WP_BLASTER, +;802:/* precache */ "", +;803:/* sounds */ "" +;804: }, +;805: +;806:/*QUAKED weapon_disruptor (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;807:*/ +;808: { +;809: "weapon_disruptor", +;810: "sound/weapons/w_pkup.wav", +;811: { "models/weapons2/disruptor/disruptor_w.glm", +;812: 0, 0, 0}, +;813:/* view */ "models/weapons2/disruptor/disruptor.md3", +;814:/* icon */ "gfx/hud/w_icon_disruptor", +;815:/* pickup */// "Tenloss Disruptor Rifle", +;816: 100, +;817: IT_WEAPON, +;818: WP_DISRUPTOR, +;819:/* precache */ "", +;820:/* sounds */ "" +;821: }, +;822: +;823:/*QUAKED weapon_bowcaster (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;824:*/ +;825: { +;826: "weapon_bowcaster", +;827: "sound/weapons/w_pkup.wav", +;828: { "models/weapons2/bowcaster/bowcaster_w.glm", +;829: 0, 0, 0}, +;830:/* view */ "models/weapons2/bowcaster/bowcaster.md3", +;831:/* icon */ "gfx/hud/w_icon_bowcaster", +;832:/* pickup */// "Wookiee Bowcaster", +;833: 100, +;834: IT_WEAPON, +;835: WP_BOWCASTER, +;836:/* precache */ "", +;837:/* sounds */ "" +;838: }, +;839: +;840:/*QUAKED weapon_repeater (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;841:*/ +;842: { +;843: "weapon_repeater", +;844: "sound/weapons/w_pkup.wav", +;845: { "models/weapons2/heavy_repeater/heavy_repeater_w.glm", +;846: 0, 0, 0}, +;847:/* view */ "models/weapons2/heavy_repeater/heavy_repeater.md3", +;848:/* icon */ "gfx/hud/w_icon_repeater", +;849:/* pickup */// "Imperial Heavy Repeater", +;850: 100, +;851: IT_WEAPON, +;852: WP_REPEATER, +;853:/* precache */ "", +;854:/* sounds */ "" +;855: }, +;856: +;857:/*QUAKED weapon_demp2 (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;858:NOTENOTE This weapon is not yet complete. Don't place it. +;859:*/ +;860: { +;861: "weapon_demp2", +;862: "sound/weapons/w_pkup.wav", +;863: { "models/weapons2/demp2/demp2_w.glm", +;864: 0, 0, 0}, +;865:/* view */ "models/weapons2/demp2/demp2.md3", +;866:/* icon */ "gfx/hud/w_icon_demp2", +;867:/* pickup */// "DEMP2", +;868: 100, +;869: IT_WEAPON, +;870: WP_DEMP2, +;871:/* precache */ "", +;872:/* sounds */ "" +;873: }, +;874: +;875:/*QUAKED weapon_flechette (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;876:*/ +;877: { +;878: "weapon_flechette", +;879: "sound/weapons/w_pkup.wav", +;880: { "models/weapons2/golan_arms/golan_arms_w.glm", +;881: 0, 0, 0}, +;882:/* view */ "models/weapons2/golan_arms/golan_arms.md3", +;883:/* icon */ "gfx/hud/w_icon_flechette", +;884:/* pickup */// "Golan Arms Flechette", +;885: 100, +;886: IT_WEAPON, +;887: WP_FLECHETTE, +;888:/* precache */ "", +;889:/* sounds */ "" +;890: }, +;891: +;892:/*QUAKED weapon_rocket_launcher (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;893:*/ +;894: { +;895: "weapon_rocket_launcher", +;896: "sound/weapons/w_pkup.wav", +;897: { "models/weapons2/merr_sonn/merr_sonn_w.glm", +;898: 0, 0, 0}, +;899:/* view */ "models/weapons2/merr_sonn/merr_sonn.md3", +;900:/* icon */ "gfx/hud/w_icon_merrsonn", +;901:/* pickup */// "Merr-Sonn Missile System", +;902: 3, +;903: IT_WEAPON, +;904: WP_ROCKET_LAUNCHER, +;905:/* precache */ "", +;906:/* sounds */ "" +;907: }, +;908: +;909:/*QUAKED ammo_thermal (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;910:*/ +;911: { +;912: "ammo_thermal", +;913: "sound/weapons/w_pkup.wav", +;914: { "models/weapons2/thermal/thermal_pu.md3", +;915: "models/weapons2/thermal/thermal_w.glm", 0, 0}, +;916:/* view */ "models/weapons2/thermal/thermal.md3", +;917:/* icon */ "gfx/hud/w_icon_thermal", +;918:/* pickup */// "Thermal Detonators", +;919: 4, +;920: IT_AMMO, +;921: AMMO_THERMAL, +;922:/* precache */ "", +;923:/* sounds */ "" +;924: }, +;925: +;926:/*QUAKED ammo_tripmine (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;927:*/ +;928: { +;929: "ammo_tripmine", +;930: "sound/weapons/w_pkup.wav", +;931: { "models/weapons2/laser_trap/laser_trap_pu.md3", +;932: "models/weapons2/laser_trap/laser_trap_w.glm", 0, 0}, +;933:/* view */ "models/weapons2/laser_trap/laser_trap.md3", +;934:/* icon */ "gfx/hud/w_icon_tripmine", +;935:/* pickup */// "Trip Mines", +;936: 3, +;937: IT_AMMO, +;938: AMMO_TRIPMINE, +;939:/* precache */ "", +;940:/* sounds */ "" +;941: }, +;942: +;943:/*QUAKED ammo_detpack (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;944:*/ +;945: { +;946: "ammo_detpack", +;947: "sound/weapons/w_pkup.wav", +;948: { "models/weapons2/detpack/det_pack_pu.md3", "models/weapons2/detpack/det_pack_proj.glm", "models/weapons2/detpack/det_pack_w.glm", 0}, +;949:/* view */ "models/weapons2/detpack/det_pack.md3", +;950:/* icon */ "gfx/hud/w_icon_detpack", +;951:/* pickup */// "Det Packs", +;952: 3, +;953: IT_AMMO, +;954: AMMO_DETPACK, +;955:/* precache */ "", +;956:/* sounds */ "" +;957: }, +;958: +;959:/*QUAKED weapon_thermal (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;960:*/ +;961: { +;962: "weapon_thermal", +;963: "sound/weapons/w_pkup.wav", +;964: { "models/weapons2/thermal/thermal_w.glm", "models/weapons2/thermal/thermal_pu.md3", +;965: 0, 0 }, +;966:/* view */ "models/weapons2/thermal/thermal.md3", +;967:/* icon */ "gfx/hud/w_icon_thermal", +;968:/* pickup */// "Thermal Detonator", +;969: 4, +;970: IT_WEAPON, +;971: WP_THERMAL, +;972:/* precache */ "", +;973:/* sounds */ "" +;974: }, +;975: +;976:/*QUAKED weapon_trip_mine (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;977:*/ +;978: { +;979: "weapon_trip_mine", +;980: "sound/weapons/w_pkup.wav", +;981: { "models/weapons2/laser_trap/laser_trap_w.glm", "models/weapons2/laser_trap/laser_trap_pu.md3", +;982: 0, 0}, +;983:/* view */ "models/weapons2/laser_trap/laser_trap.md3", +;984:/* icon */ "gfx/hud/w_icon_tripmine", +;985:/* pickup */// "Trip Mine", +;986: 3, +;987: IT_WEAPON, +;988: WP_TRIP_MINE, +;989:/* precache */ "", +;990:/* sounds */ "" +;991: }, +;992: +;993:/*QUAKED weapon_det_pack (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;994:*/ +;995: { +;996: "weapon_det_pack", +;997: "sound/weapons/w_pkup.wav", +;998: { "models/weapons2/detpack/det_pack_proj.glm", "models/weapons2/detpack/det_pack_pu.md3", "models/weapons2/detpack/det_pack_w.glm", 0}, +;999:/* view */ "models/weapons2/detpack/det_pack.md3", +;1000:/* icon */ "gfx/hud/w_icon_detpack", +;1001:/* pickup */// "Det Pack", +;1002: 3, +;1003: IT_WEAPON, +;1004: WP_DET_PACK, +;1005:/* precache */ "", +;1006:/* sounds */ "" +;1007: }, +;1008: +;1009:/*QUAKED weapon_emplaced (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1010:*/ +;1011: { +;1012: "weapon_emplaced", +;1013: "sound/weapons/w_pkup.wav", +;1014: { "models/weapons2/blaster_r/blaster_w.glm", +;1015: 0, 0, 0}, +;1016:/* view */ "models/weapons2/blaster_r/blaster.md3", +;1017:/* icon */ "gfx/hud/w_icon_blaster", +;1018:/* pickup */// "Emplaced Gun", +;1019: 50, +;1020: IT_WEAPON, +;1021: WP_EMPLACED_GUN, +;1022:/* precache */ "", +;1023:/* sounds */ "" +;1024: }, +;1025: +;1026: +;1027://NOTE: This is to keep things from messing up because the turret weapon type isn't real +;1028: { +;1029: "weapon_turretwp", +;1030: "sound/weapons/w_pkup.wav", +;1031: { "models/weapons2/blaster_r/blaster_w.glm", +;1032: 0, 0, 0}, +;1033:/* view */ "models/weapons2/blaster_r/blaster.md3", +;1034:/* icon */ "gfx/hud/w_icon_blaster", +;1035:/* pickup */// "Turret Gun", +;1036: 50, +;1037: IT_WEAPON, +;1038: WP_TURRET, +;1039:/* precache */ "", +;1040:/* sounds */ "" +;1041: }, +;1042: +;1043: // +;1044: // AMMO ITEMS +;1045: // +;1046: +;1047:/*QUAKED ammo_force (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1048:Don't place this +;1049:*/ +;1050: { +;1051: "ammo_force", +;1052: "sound/player/pickupenergy.wav", +;1053: { "models/items/energy_cell.md3", +;1054: 0, 0, 0}, +;1055:/* view */ NULL, +;1056:/* icon */ "gfx/hud/w_icon_blaster", +;1057:/* pickup */// "Force??", +;1058: 100, +;1059: IT_AMMO, +;1060: AMMO_FORCE, +;1061:/* precache */ "", +;1062:/* sounds */ "" +;1063: }, +;1064: +;1065:/*QUAKED ammo_blaster (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1066:Ammo for the Bryar and Blaster pistols. +;1067:*/ +;1068: { +;1069: "ammo_blaster", +;1070: "sound/player/pickupenergy.wav", +;1071: { "models/items/energy_cell.md3", +;1072: 0, 0, 0}, +;1073:/* view */ NULL, +;1074:/* icon */ "gfx/hud/i_icon_battery", +;1075:/* pickup */// "Blaster Pack", +;1076: 100, +;1077: IT_AMMO, +;1078: AMMO_BLASTER, +;1079:/* precache */ "", +;1080:/* sounds */ "" +;1081: }, +;1082: +;1083:/*QUAKED ammo_powercell (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1084:Ammo for Tenloss Disruptor, Wookie Bowcaster, and the Destructive Electro Magnetic Pulse (demp2 ) guns +;1085:*/ +;1086: { +;1087: "ammo_powercell", +;1088: "sound/player/pickupenergy.wav", +;1089: { "models/items/power_cell.md3", +;1090: 0, 0, 0}, +;1091:/* view */ NULL, +;1092:/* icon */ "gfx/mp/ammo_power_cell", +;1093:/* pickup */// "Power Cell", +;1094: 100, +;1095: IT_AMMO, +;1096: AMMO_POWERCELL, +;1097:/* precache */ "", +;1098:/* sounds */ "" +;1099: }, +;1100: +;1101:/*QUAKED ammo_metallic_bolts (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1102:Ammo for Imperial Heavy Repeater and the Golan Arms Flechette +;1103:*/ +;1104: { +;1105: "ammo_metallic_bolts", +;1106: "sound/player/pickupenergy.wav", +;1107: { "models/items/metallic_bolts.md3", +;1108: 0, 0, 0}, +;1109:/* view */ NULL, +;1110:/* icon */ "gfx/mp/ammo_metallic_bolts", +;1111:/* pickup */// "Metallic Bolts", +;1112: 100, +;1113: IT_AMMO, +;1114: AMMO_METAL_BOLTS, +;1115:/* precache */ "", +;1116:/* sounds */ "" +;1117: }, +;1118: +;1119:/*QUAKED ammo_rockets (.3 .3 1) (-16 -16 -16) (16 16 16) suspended +;1120:Ammo for Merr-Sonn portable missile launcher +;1121:*/ +;1122: { +;1123: "ammo_rockets", +;1124: "sound/player/pickupenergy.wav", +;1125: { "models/items/rockets.md3", +;1126: 0, 0, 0}, +;1127:/* view */ NULL, +;1128:/* icon */ "gfx/mp/ammo_rockets", +;1129:/* pickup */// "Rockets", +;1130: 3, +;1131: IT_AMMO, +;1132: AMMO_ROCKETS, +;1133:/* precache */ "", +;1134:/* sounds */ "" +;1135: }, +;1136: +;1137: +;1138: // +;1139: // POWERUP ITEMS +;1140: // +;1141:/*QUAKED team_CTF_redflag (1 0 0) (-16 -16 -16) (16 16 16) +;1142:Only in CTF games +;1143:*/ +;1144: { +;1145: "team_CTF_redflag", +;1146: NULL, +;1147: { "models/flags/r_flag.md3", +;1148: "models/flags/r_flag_ysal.md3", 0, 0 }, +;1149:/* view */ NULL, +;1150:/* icon */ "gfx/hud/mpi_rflag", +;1151:/* pickup */// "Red Flag", +;1152: 0, +;1153: IT_TEAM, +;1154: PW_REDFLAG, +;1155:/* precache */ "", +;1156:/* sounds */ "" +;1157: }, +;1158: +;1159:/*QUAKED team_CTF_blueflag (0 0 1) (-16 -16 -16) (16 16 16) +;1160:Only in CTF games +;1161:*/ +;1162: { +;1163: "team_CTF_blueflag", +;1164: NULL, +;1165: { "models/flags/b_flag.md3", +;1166: "models/flags/b_flag_ysal.md3", 0, 0 }, +;1167:/* view */ NULL, +;1168:/* icon */ "gfx/hud/mpi_bflag", +;1169:/* pickup */// "Blue Flag", +;1170: 0, +;1171: IT_TEAM, +;1172: PW_BLUEFLAG, +;1173:/* precache */ "", +;1174:/* sounds */ "" +;1175: }, +;1176: +;1177: // +;1178: // PERSISTANT POWERUP ITEMS +;1179: // +;1180: +;1181: /*QUAKED team_CTF_neutralflag (0 0 1) (-16 -16 -16) (16 16 16) +;1182:Only in One Flag CTF games +;1183:*/ +;1184: { +;1185: "team_CTF_neutralflag", +;1186: NULL, +;1187: { "models/flags/n_flag.md3", +;1188: 0, 0, 0 }, +;1189:/* view */ NULL, +;1190:/* icon */ "icons/iconf_neutral1", +;1191:/* pickup */// "Neutral Flag", +;1192: 0, +;1193: IT_TEAM, +;1194: PW_NEUTRALFLAG, +;1195:/* precache */ "", +;1196:/* sounds */ "" +;1197: }, +;1198: +;1199: { +;1200: "item_redcube", +;1201: "sound/player/pickupenergy.wav", +;1202: { "models/powerups/orb/r_orb.md3", +;1203: 0, 0, 0 }, +;1204:/* view */ NULL, +;1205:/* icon */ "icons/iconh_rorb", +;1206:/* pickup */// "Red Cube", +;1207: 0, +;1208: IT_TEAM, +;1209: 0, +;1210:/* precache */ "", +;1211:/* sounds */ "" +;1212: }, +;1213: +;1214: { +;1215: "item_bluecube", +;1216: "sound/player/pickupenergy.wav", +;1217: { "models/powerups/orb/b_orb.md3", +;1218: 0, 0, 0 }, +;1219:/* view */ NULL, +;1220:/* icon */ "icons/iconh_borb", +;1221:/* pickup */// "Blue Cube", +;1222: 0, +;1223: IT_TEAM, +;1224: 0, +;1225:/* precache */ "", +;1226:/* sounds */ "" +;1227: }, +;1228: +;1229: // end of list marker +;1230: {NULL} +;1231:}; +;1232: +;1233:int bg_numItems = sizeof(bg_itemlist) / sizeof(bg_itemlist[0]) - 1; +;1234: +;1235:float vectoyaw( const vec3_t vec ) { +line 1238 +;1236: float yaw; +;1237: +;1238: if (vec[YAW] == 0 && vec[PITCH] == 0) { +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +NEF4 $396 +ADDRLP4 4 +INDIRP4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +NEF4 $396 +line 1239 +;1239: yaw = 0; +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +line 1240 +;1240: } else { +ADDRGP4 $397 +JUMPV +LABELV $396 +line 1241 +;1241: if (vec[PITCH]) { +ADDRFP4 0 +INDIRP4 +INDIRF4 +CNSTF4 0 +EQF4 $398 +line 1242 +;1242: yaw = ( atan2( vec[YAW], vec[PITCH]) * 180 / M_PI ); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 16 +ADDRGP4 atan2 +CALLF4 +ASGNF4 +ADDRLP4 0 +CNSTF4 1127481344 +ADDRLP4 16 +INDIRF4 +MULF4 +CNSTF4 1078530011 +DIVF4 +ASGNF4 +line 1243 +;1243: } else if (vec[YAW] > 0) { +ADDRGP4 $399 +JUMPV +LABELV $398 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +CNSTF4 0 +LEF4 $400 +line 1244 +;1244: yaw = 90; +ADDRLP4 0 +CNSTF4 1119092736 +ASGNF4 +line 1245 +;1245: } else { +ADDRGP4 $401 +JUMPV +LABELV $400 +line 1246 +;1246: yaw = 270; +ADDRLP4 0 +CNSTF4 1132920832 +ASGNF4 +line 1247 +;1247: } +LABELV $401 +LABELV $399 +line 1248 +;1248: if (yaw < 0) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $402 +line 1249 +;1249: yaw += 360; +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +CNSTF4 1135869952 +ADDF4 +ASGNF4 +line 1250 +;1250: } +LABELV $402 +line 1251 +;1251: } +LABELV $397 +line 1253 +;1252: +;1253: return yaw; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $395 +endproc vectoyaw 20 8 +export BG_HasYsalamiri +proc BG_HasYsalamiri 8 0 +line 1257 +;1254:} +;1255: +;1256:qboolean BG_HasYsalamiri(int gametype, playerState_t *ps) +;1257:{ +line 1258 +;1258: if (gametype == GT_CTY && +ADDRFP4 0 +INDIRI4 +CNSTI4 8 +NEI4 $405 +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 360 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $407 +ADDRLP4 0 +INDIRP4 +CNSTI4 364 +ADDP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $405 +LABELV $407 +line 1260 +;1259: (ps->powerups[PW_REDFLAG] || ps->powerups[PW_BLUEFLAG])) +;1260: { +line 1261 +;1261: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $404 +JUMPV +LABELV $405 +line 1264 +;1262: } +;1263: +;1264: if (ps->powerups[PW_YSALAMIRI]) +ADDRFP4 4 +INDIRP4 +CNSTI4 404 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $408 +line 1265 +;1265: { +line 1266 +;1266: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $404 +JUMPV +LABELV $408 +line 1269 +;1267: } +;1268: +;1269: return qfalse; +CNSTI4 0 +RETI4 +LABELV $404 +endproc BG_HasYsalamiri 8 0 +export BG_CanUseFPNow +proc BG_CanUseFPNow 8 8 +line 1273 +;1270:} +;1271: +;1272:qboolean BG_CanUseFPNow(int gametype, playerState_t *ps, int time, forcePowers_t power) +;1273:{ +line 1274 +;1274: if (BG_HasYsalamiri(gametype, ps)) +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 0 +ADDRGP4 BG_HasYsalamiri +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $411 +line 1275 +;1275: { +line 1276 +;1276: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $410 +JUMPV +LABELV $411 +line 1279 +;1277: } +;1278: +;1279: if (ps->duelInProgress) +ADDRFP4 4 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $413 +line 1280 +;1280: { +line 1281 +;1281: if (power != FP_SABERATTACK && power != FP_SABERDEFEND && power != FP_SABERTHROW && +ADDRLP4 4 +ADDRFP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 15 +EQI4 $415 +ADDRLP4 4 +INDIRI4 +CNSTI4 16 +EQI4 $415 +ADDRLP4 4 +INDIRI4 +CNSTI4 17 +EQI4 $415 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +EQI4 $415 +line 1283 +;1282: power != FP_LEVITATION) +;1283: { +line 1284 +;1284: if (!ps->saberLockFrame || power != FP_PUSH) +ADDRFP4 4 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $419 +ADDRFP4 12 +INDIRI4 +CNSTI4 3 +EQI4 $417 +LABELV $419 +line 1285 +;1285: { +line 1286 +;1286: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $410 +JUMPV +LABELV $417 +line 1288 +;1287: } +;1288: } +LABELV $415 +line 1289 +;1289: } +LABELV $413 +line 1291 +;1290: +;1291: if (ps->saberLockFrame || ps->saberLockTime > time) +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $422 +ADDRLP4 4 +INDIRP4 +CNSTI4 524 +ADDP4 +INDIRI4 +ADDRFP4 8 +INDIRI4 +LEI4 $420 +LABELV $422 +line 1292 +;1292: { +line 1293 +;1293: if (power != FP_PUSH) +ADDRFP4 12 +INDIRI4 +CNSTI4 3 +EQI4 $423 +line 1294 +;1294: { +line 1295 +;1295: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $410 +JUMPV +LABELV $423 +line 1297 +;1296: } +;1297: } +LABELV $420 +line 1299 +;1298: +;1299: if (ps->fallingToDeath) +ADDRFP4 4 +INDIRP4 +CNSTI4 1340 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $425 +line 1300 +;1300: { +line 1301 +;1301: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $410 +JUMPV +LABELV $425 +line 1304 +;1302: } +;1303: +;1304: return qtrue; +CNSTI4 1 +RETI4 +LABELV $410 +endproc BG_CanUseFPNow 8 8 +export BG_FindItemForPowerup +proc BG_FindItemForPowerup 8 0 +line 1312 +;1305:} +;1306: +;1307:/* +;1308:============== +;1309:BG_FindItemForPowerup +;1310:============== +;1311:*/ +;1312:gitem_t *BG_FindItemForPowerup( powerup_t pw ) { +line 1315 +;1313: int i; +;1314: +;1315: for ( i = 0 ; i < bg_numItems ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $431 +JUMPV +LABELV $428 +line 1316 +;1316: if ( (bg_itemlist[i].giType == IT_POWERUP || +ADDRLP4 4 +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+36 +ADDP4 +INDIRI4 +CNSTI4 5 +EQI4 $437 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+36 +ADDP4 +INDIRI4 +CNSTI4 8 +NEI4 $432 +LABELV $437 +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist+40 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $432 +line 1318 +;1317: bg_itemlist[i].giType == IT_TEAM) && +;1318: bg_itemlist[i].giTag == pw ) { +line 1319 +;1319: return &bg_itemlist[i]; +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist +ADDP4 +RETP4 +ADDRGP4 $427 +JUMPV +LABELV $432 +line 1321 +;1320: } +;1321: } +LABELV $429 +line 1315 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $431 +ADDRLP4 0 +INDIRI4 +ADDRGP4 bg_numItems +INDIRI4 +LTI4 $428 +line 1323 +;1322: +;1323: return NULL; +CNSTP4 0 +RETP4 +LABELV $427 +endproc BG_FindItemForPowerup 8 0 +export BG_FindItemForHoldable +proc BG_FindItemForHoldable 8 8 +line 1332 +;1324:} +;1325: +;1326: +;1327:/* +;1328:============== +;1329:BG_FindItemForHoldable +;1330:============== +;1331:*/ +;1332:gitem_t *BG_FindItemForHoldable( holdable_t pw ) { +line 1335 +;1333: int i; +;1334: +;1335: for ( i = 0 ; i < bg_numItems ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $442 +JUMPV +LABELV $439 +line 1336 +;1336: if ( bg_itemlist[i].giType == IT_HOLDABLE && bg_itemlist[i].giTag == pw ) { +ADDRLP4 4 +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+36 +ADDP4 +INDIRI4 +CNSTI4 6 +NEI4 $443 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+40 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $443 +line 1337 +;1337: return &bg_itemlist[i]; +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist +ADDP4 +RETP4 +ADDRGP4 $438 +JUMPV +LABELV $443 +line 1339 +;1338: } +;1339: } +LABELV $440 +line 1335 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $442 +ADDRLP4 0 +INDIRI4 +ADDRGP4 bg_numItems +INDIRI4 +LTI4 $439 +line 1341 +;1340: +;1341: Com_Error( ERR_DROP, "HoldableItem not found" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $447 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1343 +;1342: +;1343: return NULL; +CNSTP4 0 +RETP4 +LABELV $438 +endproc BG_FindItemForHoldable 8 8 +export BG_FindItemForWeapon +proc BG_FindItemForWeapon 8 12 +line 1353 +;1344:} +;1345: +;1346: +;1347:/* +;1348:=============== +;1349:BG_FindItemForWeapon +;1350: +;1351:=============== +;1352:*/ +;1353:gitem_t *BG_FindItemForWeapon( weapon_t weapon ) { +line 1356 +;1354: gitem_t *it; +;1355: +;1356: for ( it = bg_itemlist + 1 ; it->classname ; it++) { +ADDRLP4 0 +ADDRGP4 bg_itemlist+52 +ASGNP4 +ADDRGP4 $452 +JUMPV +LABELV $449 +line 1357 +;1357: if ( it->giType == IT_WEAPON && it->giTag == weapon ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $454 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $454 +line 1358 +;1358: return it; +ADDRLP4 0 +INDIRP4 +RETP4 +ADDRGP4 $448 +JUMPV +LABELV $454 +line 1360 +;1359: } +;1360: } +LABELV $450 +line 1356 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 52 +ADDP4 +ASGNP4 +LABELV $452 +ADDRLP4 0 +INDIRP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $449 +line 1362 +;1361: +;1362: Com_Error( ERR_DROP, "Couldn't find item for weapon %i", weapon); +CNSTI4 1 +ARGI4 +ADDRGP4 $456 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 1363 +;1363: return NULL; +CNSTP4 0 +RETP4 +LABELV $448 +endproc BG_FindItemForWeapon 8 12 +export BG_FindItem +proc BG_FindItem 8 8 +line 1372 +;1364:} +;1365: +;1366:/* +;1367:=============== +;1368:BG_FindItem +;1369: +;1370:=============== +;1371:*/ +;1372:gitem_t *BG_FindItem( const char *classname ) { +line 1375 +;1373: gitem_t *it; +;1374: +;1375: for ( it = bg_itemlist + 1 ; it->classname ; it++ ) { +ADDRLP4 0 +ADDRGP4 bg_itemlist+52 +ASGNP4 +ADDRGP4 $461 +JUMPV +LABELV $458 +line 1376 +;1376: if ( !Q_stricmp( it->classname, classname) ) +ADDRLP4 0 +INDIRP4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $463 +line 1377 +;1377: return it; +ADDRLP4 0 +INDIRP4 +RETP4 +ADDRGP4 $457 +JUMPV +LABELV $463 +line 1378 +;1378: } +LABELV $459 +line 1375 +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 52 +ADDP4 +ASGNP4 +LABELV $461 +ADDRLP4 0 +INDIRP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $458 +line 1380 +;1379: +;1380: return NULL; +CNSTP4 0 +RETP4 +LABELV $457 +endproc BG_FindItem 8 8 +export BG_PlayerTouchesItem +proc BG_PlayerTouchesItem 36 12 +line 1391 +;1381:} +;1382: +;1383:/* +;1384:============ +;1385:BG_PlayerTouchesItem +;1386: +;1387:Items can be picked up without actually touching their physical bounds to make +;1388:grabbing them easier +;1389:============ +;1390:*/ +;1391:qboolean BG_PlayerTouchesItem( playerState_t *ps, entityState_t *item, int atTime ) { +line 1394 +;1392: vec3_t origin; +;1393: +;1394: BG_EvaluateTrajectory( &item->pos, atTime, origin ); +ADDRFP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +ADDRGP4 BG_EvaluateTrajectory +CALLV +pop +line 1397 +;1395: +;1396: // we are ignoring ducked differences here +;1397: if ( ps->origin[0] - origin[0] > 44 +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +ADDRLP4 12 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 16 +INDIRF4 +CNSTF4 1110441984 +GTF4 $476 +ADDRLP4 16 +INDIRF4 +CNSTF4 3259498496 +LTF4 $476 +ADDRLP4 20 +ADDRLP4 12 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 24 +CNSTF4 1108344832 +ASGNF4 +ADDRLP4 20 +INDIRF4 +ADDRLP4 0+4 +INDIRF4 +SUBF4 +ADDRLP4 24 +INDIRF4 +GTF4 $476 +ADDRLP4 28 +CNSTF4 3255828480 +ASGNF4 +ADDRLP4 20 +INDIRF4 +ADDRLP4 0+4 +INDIRF4 +SUBF4 +ADDRLP4 28 +INDIRF4 +LTF4 $476 +ADDRLP4 32 +ADDRLP4 12 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 32 +INDIRF4 +ADDRLP4 0+8 +INDIRF4 +SUBF4 +ADDRLP4 24 +INDIRF4 +GTF4 $476 +ADDRLP4 32 +INDIRF4 +ADDRLP4 0+8 +INDIRF4 +SUBF4 +ADDRLP4 28 +INDIRF4 +GEF4 $466 +LABELV $476 +line 1402 +;1398: || ps->origin[0] - origin[0] < -50 +;1399: || ps->origin[1] - origin[1] > 36 +;1400: || ps->origin[1] - origin[1] < -36 +;1401: || ps->origin[2] - origin[2] > 36 +;1402: || ps->origin[2] - origin[2] < -36 ) { +line 1403 +;1403: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $465 +JUMPV +LABELV $466 +line 1406 +;1404: } +;1405: +;1406: return qtrue; +CNSTI4 1 +RETI4 +LABELV $465 +endproc BG_PlayerTouchesItem 36 12 +export BG_ProperForceIndex +proc BG_ProperForceIndex 4 0 +line 1410 +;1407:} +;1408: +;1409:int BG_ProperForceIndex(int power) +;1410:{ +line 1411 +;1411: int i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $479 +JUMPV +LABELV $478 +line 1414 +;1412: +;1413: while (i < NUM_FORCE_POWERS) +;1414: { +line 1415 +;1415: if (forcePowerSorted[i] == power) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forcePowerSorted +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $481 +line 1416 +;1416: { +line 1417 +;1417: return i; +ADDRLP4 0 +INDIRI4 +RETI4 +ADDRGP4 $477 +JUMPV +LABELV $481 +line 1420 +;1418: } +;1419: +;1420: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1421 +;1421: } +LABELV $479 +line 1413 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $478 +line 1423 +;1422: +;1423: return -1; +CNSTI4 -1 +RETI4 +LABELV $477 +endproc BG_ProperForceIndex 4 0 +export BG_CycleForce +proc BG_CycleForce 40 4 +line 1427 +;1424:} +;1425: +;1426:void BG_CycleForce(playerState_t *ps, int direction) +;1427:{ +line 1428 +;1428: int i = ps->fd.forcePowerSelected; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 840 +ADDP4 +INDIRI4 +ASGNI4 +line 1429 +;1429: int x = i; +ADDRLP4 0 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 1430 +;1430: int presel = i; +ADDRLP4 8 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 1431 +;1431: int foundnext = -1; +ADDRLP4 12 +CNSTI4 -1 +ASGNI4 +line 1433 +;1432: +;1433: if (!ps->fd.forcePowersKnown & (1 << x) || +ADDRFP4 0 +INDIRP4 +CNSTI4 832 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $488 +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +ADDRGP4 $489 +JUMPV +LABELV $488 +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +LABELV $489 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +NEI4 $490 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +GEI4 $490 +ADDRLP4 0 +INDIRI4 +CNSTI4 -1 +NEI4 $484 +LABELV $490 +line 1436 +;1434: x >= NUM_FORCE_POWERS || +;1435: x == -1) +;1436: { //apparently we have no valid force powers +line 1437 +;1437: return; +ADDRGP4 $483 +JUMPV +LABELV $484 +line 1440 +;1438: } +;1439: +;1440: x = BG_ProperForceIndex(x); +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 24 +ADDRGP4 BG_ProperForceIndex +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 24 +INDIRI4 +ASGNI4 +line 1441 +;1441: presel = x; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1443 +;1442: +;1443: if (direction == 1) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $491 +line 1444 +;1444: { +line 1445 +;1445: x++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1446 +;1446: } +ADDRGP4 $492 +JUMPV +LABELV $491 +line 1448 +;1447: else +;1448: { +line 1449 +;1449: x--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1450 +;1450: } +LABELV $492 +line 1452 +;1451: +;1452: if (x >= NUM_FORCE_POWERS) +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $493 +line 1453 +;1453: { +line 1454 +;1454: x = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1455 +;1455: } +LABELV $493 +line 1456 +;1456: if (x < 0) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $495 +line 1457 +;1457: { +line 1458 +;1458: x = NUM_FORCE_POWERS-1; +ADDRLP4 0 +CNSTI4 17 +ASGNI4 +line 1459 +;1459: } +LABELV $495 +line 1461 +;1460: +;1461: i = forcePowerSorted[x]; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forcePowerSorted +ADDP4 +INDIRI4 +ASGNI4 +ADDRGP4 $498 +JUMPV +LABELV $497 +line 1464 +;1462: +;1463: while (x != presel) +;1464: { +line 1465 +;1465: if (ps->fd.forcePowersKnown & (1 << i) && i != ps->fd.forcePowerSelected) +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +CNSTI4 832 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 4 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $500 +ADDRLP4 4 +INDIRI4 +ADDRLP4 28 +INDIRP4 +CNSTI4 840 +ADDP4 +INDIRI4 +EQI4 $500 +line 1466 +;1466: { +line 1467 +;1467: if (i != FP_LEVITATION && +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +EQI4 $502 +ADDRLP4 4 +INDIRI4 +CNSTI4 15 +EQI4 $502 +ADDRLP4 4 +INDIRI4 +CNSTI4 16 +EQI4 $502 +ADDRLP4 4 +INDIRI4 +CNSTI4 17 +EQI4 $502 +line 1471 +;1468: i != FP_SABERATTACK && +;1469: i != FP_SABERDEFEND && +;1470: i != FP_SABERTHROW) +;1471: { +line 1472 +;1472: foundnext = i; +ADDRLP4 12 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 1473 +;1473: break; +ADDRGP4 $499 +JUMPV +LABELV $502 +line 1475 +;1474: } +;1475: } +LABELV $500 +line 1477 +;1476: +;1477: if (direction == 1) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $504 +line 1478 +;1478: { +line 1479 +;1479: x++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1480 +;1480: } +ADDRGP4 $505 +JUMPV +LABELV $504 +line 1482 +;1481: else +;1482: { +line 1483 +;1483: x--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1484 +;1484: } +LABELV $505 +line 1486 +;1485: +;1486: if (x >= NUM_FORCE_POWERS) +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $506 +line 1487 +;1487: { +line 1488 +;1488: x = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1489 +;1489: } +LABELV $506 +line 1490 +;1490: if (x < 0) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $508 +line 1491 +;1491: { +line 1492 +;1492: x = NUM_FORCE_POWERS-1; +ADDRLP4 0 +CNSTI4 17 +ASGNI4 +line 1493 +;1493: } +LABELV $508 +line 1495 +;1494: +;1495: i = forcePowerSorted[x]; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forcePowerSorted +ADDP4 +INDIRI4 +ASGNI4 +line 1496 +;1496: } +LABELV $498 +line 1463 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +NEI4 $497 +LABELV $499 +line 1498 +;1497: +;1498: if (foundnext != -1) +ADDRLP4 12 +INDIRI4 +CNSTI4 -1 +EQI4 $510 +line 1499 +;1499: { +line 1500 +;1500: ps->fd.forcePowerSelected = foundnext; +ADDRFP4 0 +INDIRP4 +CNSTI4 840 +ADDP4 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 1501 +;1501: } +LABELV $510 +line 1502 +;1502:} +LABELV $483 +endproc BG_CycleForce 40 4 +export BG_GetItemIndexByTag +proc BG_GetItemIndexByTag 8 0 +line 1505 +;1503: +;1504:int BG_GetItemIndexByTag(int tag, int type) +;1505:{ +line 1506 +;1506: int i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $514 +JUMPV +LABELV $513 +line 1509 +;1507: +;1508: while (i < bg_numItems) +;1509: { +line 1510 +;1510: if (bg_itemlist[i].giTag == tag && +ADDRLP4 4 +CNSTI4 52 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+40 +ADDP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +NEI4 $516 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_itemlist+36 +ADDP4 +INDIRI4 +ADDRFP4 4 +INDIRI4 +NEI4 $516 +line 1512 +;1511: bg_itemlist[i].giType == type) +;1512: { +line 1513 +;1513: return i; +ADDRLP4 0 +INDIRI4 +RETI4 +ADDRGP4 $512 +JUMPV +LABELV $516 +line 1516 +;1514: } +;1515: +;1516: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1517 +;1517: } +LABELV $514 +line 1508 +ADDRLP4 0 +INDIRI4 +ADDRGP4 bg_numItems +INDIRI4 +LTI4 $513 +line 1519 +;1518: +;1519: return 0; +CNSTI4 0 +RETI4 +LABELV $512 +endproc BG_GetItemIndexByTag 8 0 +export BG_CycleInven +proc BG_CycleInven 12 8 +line 1523 +;1520:} +;1521: +;1522:void BG_CycleInven(playerState_t *ps, int direction) +;1523:{ +line 1527 +;1524: int i; +;1525: int original; +;1526: +;1527: i = bg_itemlist[ps->stats[STAT_HOLDABLE_ITEM]].giTag; +ADDRLP4 0 +CNSTI4 52 +ADDRFP4 0 +INDIRP4 +CNSTI4 220 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist+40 +ADDP4 +INDIRI4 +ASGNI4 +line 1528 +;1528: original = i; +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1530 +;1529: +;1530: if (direction == 1) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $522 +line 1531 +;1531: { +line 1532 +;1532: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1533 +;1533: } +ADDRGP4 $525 +JUMPV +LABELV $522 +line 1535 +;1534: else +;1535: { +line 1536 +;1536: i--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1537 +;1537: } +ADDRGP4 $525 +JUMPV +LABELV $524 +line 1540 +;1538: +;1539: while (i != original) +;1540: { //go in a full loop until hitting something, if hit nothing then select nothing +line 1541 +;1541: if (ps->stats[STAT_HOLDABLE_ITEMS] & (1 << i)) +ADDRFP4 0 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $527 +line 1542 +;1542: { +line 1543 +;1543: ps->stats[STAT_HOLDABLE_ITEM] = BG_GetItemIndexByTag(i, IT_HOLDABLE); +ADDRLP4 0 +INDIRI4 +ARGI4 +CNSTI4 6 +ARGI4 +ADDRLP4 8 +ADDRGP4 BG_GetItemIndexByTag +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 220 +ADDP4 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 1544 +;1544: break; +ADDRGP4 $526 +JUMPV +LABELV $527 +line 1547 +;1545: } +;1546: +;1547: if (direction == 1) +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $529 +line 1548 +;1548: { +line 1549 +;1549: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1550 +;1550: } +ADDRGP4 $530 +JUMPV +LABELV $529 +line 1552 +;1551: else +;1552: { +line 1553 +;1553: i--; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 1554 +;1554: } +LABELV $530 +line 1556 +;1555: +;1556: if (i < 0) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +GEI4 $531 +line 1557 +;1557: { +line 1558 +;1558: i = HI_NUM_HOLDABLE; +ADDRLP4 0 +CNSTI4 7 +ASGNI4 +line 1559 +;1559: } +ADDRGP4 $532 +JUMPV +LABELV $531 +line 1560 +;1560: else if (i >= HI_NUM_HOLDABLE) +ADDRLP4 0 +INDIRI4 +CNSTI4 7 +LTI4 $533 +line 1561 +;1561: { +line 1562 +;1562: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1563 +;1563: } +LABELV $533 +LABELV $532 +line 1564 +;1564: } +LABELV $525 +line 1539 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +NEI4 $524 +LABELV $526 +line 1565 +;1565:} +LABELV $520 +endproc BG_CycleInven 12 8 +export BG_CanItemBeGrabbed +proc BG_CanItemBeGrabbed 76 8 +line 1575 +;1566: +;1567:/* +;1568:================ +;1569:BG_CanItemBeGrabbed +;1570: +;1571:Returns false if the item should not be picked up. +;1572:This needs to be the same for client side prediction and server use. +;1573:================ +;1574:*/ +;1575:qboolean BG_CanItemBeGrabbed( int gametype, const entityState_t *ent, const playerState_t *ps ) { +line 1578 +;1576: gitem_t *item; +;1577: +;1578: if ( ent->modelindex < 1 || ent->modelindex >= bg_numItems ) { +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +CNSTI4 212 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +LTI4 $538 +ADDRLP4 4 +INDIRI4 +ADDRGP4 bg_numItems +INDIRI4 +LTI4 $536 +LABELV $538 +line 1579 +;1579: Com_Error( ERR_DROP, "BG_CanItemBeGrabbed: index out of range" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $539 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1580 +;1580: } +LABELV $536 +line 1582 +;1581: +;1582: item = &bg_itemlist[ent->modelindex]; +ADDRLP4 0 +CNSTI4 52 +ADDRFP4 4 +INDIRP4 +CNSTI4 212 +ADDP4 +INDIRI4 +MULI4 +ADDRGP4 bg_itemlist +ADDP4 +ASGNP4 +line 1584 +;1583: +;1584: if (ps && ps->isJediMaster && item && (item->giType == IT_WEAPON || item->giType == IT_AMMO)) +ADDRLP4 8 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTU4 0 +ASGNU4 +ADDRLP4 8 +INDIRP4 +CVPU4 4 +ADDRLP4 12 +INDIRU4 +EQU4 $540 +ADDRLP4 8 +INDIRP4 +CNSTI4 604 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $540 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 12 +INDIRU4 +EQU4 $540 +ADDRLP4 20 +ADDRLP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 1 +EQI4 $542 +ADDRLP4 20 +INDIRI4 +CNSTI4 2 +NEI4 $540 +LABELV $542 +line 1585 +;1585: { +line 1586 +;1586: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $540 +line 1589 +;1587: } +;1588: +;1589: if (ps && ps->duelInProgress) +ADDRLP4 24 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $543 +ADDRLP4 24 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $543 +line 1590 +;1590: { //no picking stuff up while in a duel, no matter what the type is +line 1591 +;1591: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $543 +line 1594 +;1592: } +;1593: +;1594: switch( item->giType ) { +ADDRLP4 28 +ADDRLP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +LTI4 $546 +ADDRLP4 28 +INDIRI4 +CNSTI4 8 +GTI4 $546 +ADDRLP4 28 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $597 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $597 +address $595 +address $548 +address $553 +address $556 +address $559 +address $569 +address $592 +address $546 +address $574 +code +LABELV $548 +line 1596 +;1595: case IT_WEAPON: +;1596: if (ent->generic1 == ps->clientNum && ent->powerups) +ADDRLP4 36 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +CNSTI4 292 +ADDP4 +INDIRI4 +ADDRFP4 8 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +NEI4 $549 +ADDRLP4 36 +INDIRP4 +CNSTI4 272 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $549 +line 1597 +;1597: { +line 1598 +;1598: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $549 +line 1600 +;1599: } +;1600: if (!(ent->eFlags & EF_DROPPEDWEAPON) && (ps->stats[STAT_WEAPONS] & (1 << item->giTag)) && +ADDRLP4 40 +CNSTI4 0 +ASGNI4 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CNSTI4 16777216 +BANDI4 +ADDRLP4 40 +INDIRI4 +NEI4 $551 +ADDRLP4 44 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ASGNI4 +ADDRFP4 8 +INDIRP4 +CNSTI4 232 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 44 +INDIRI4 +LSHI4 +BANDI4 +ADDRLP4 40 +INDIRI4 +EQI4 $551 +ADDRLP4 44 +INDIRI4 +CNSTI4 11 +EQI4 $551 +ADDRLP4 44 +INDIRI4 +CNSTI4 12 +EQI4 $551 +ADDRLP4 44 +INDIRI4 +CNSTI4 13 +EQI4 $551 +line 1602 +;1601: item->giTag != WP_THERMAL && item->giTag != WP_TRIP_MINE && item->giTag != WP_DET_PACK) +;1602: { //weaponstay stuff.. if this isn't dropped, and you already have it, you don't get it. +line 1603 +;1603: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $551 +line 1605 +;1604: } +;1605: return qtrue; // weapons are always picked up +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $553 +line 1608 +;1606: +;1607: case IT_AMMO: +;1608: if ( ps->ammo[item->giTag] >= ammoData[item->giTag].max) { +ADDRLP4 48 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 48 +INDIRI4 +ADDRFP4 8 +INDIRP4 +CNSTI4 408 +ADDP4 +ADDP4 +INDIRI4 +ADDRLP4 48 +INDIRI4 +ADDRGP4 ammoData +ADDP4 +INDIRI4 +LTI4 $554 +line 1609 +;1609: return qfalse; // can't hold any more +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $554 +line 1611 +;1610: } +;1611: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $556 +line 1614 +;1612: +;1613: case IT_ARMOR: +;1614: if ( ps->stats[STAT_ARMOR] >= ps->stats[STAT_MAX_HEALTH] * item->giTag ) { +ADDRLP4 52 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 52 +INDIRP4 +CNSTI4 236 +ADDP4 +INDIRI4 +ADDRLP4 52 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +MULI4 +LTI4 $557 +line 1615 +;1615: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $557 +line 1617 +;1616: } +;1617: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $559 +line 1622 +;1618: +;1619: case IT_HEALTH: +;1620: // small and mega healths will go over the max, otherwise +;1621: // don't pick up if already at max +;1622: if ((ps->fd.forcePowersActive & (1 << FP_RAGE))) +ADDRFP4 8 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +CNSTI4 256 +BANDI4 +CNSTI4 0 +EQI4 $560 +line 1623 +;1623: { +line 1624 +;1624: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $560 +line 1627 +;1625: } +;1626: +;1627: if ( item->quantity == 5 || item->quantity == 100 ) { +ADDRLP4 56 +ADDRLP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 56 +INDIRI4 +CNSTI4 5 +EQI4 $564 +ADDRLP4 56 +INDIRI4 +CNSTI4 100 +NEI4 $562 +LABELV $564 +line 1628 +;1628: if ( ps->stats[STAT_HEALTH] >= ps->stats[STAT_MAX_HEALTH] * 2 ) { +ADDRLP4 60 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +CNSTI4 1 +LSHI4 +LTI4 $565 +line 1629 +;1629: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $565 +line 1631 +;1630: } +;1631: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $562 +line 1634 +;1632: } +;1633: +;1634: if ( ps->stats[STAT_HEALTH] >= ps->stats[STAT_MAX_HEALTH] ) { +ADDRLP4 60 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 248 +ADDP4 +INDIRI4 +LTI4 $567 +line 1635 +;1635: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $567 +line 1637 +;1636: } +;1637: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $569 +line 1640 +;1638: +;1639: case IT_POWERUP: +;1640: if (ps && (ps->powerups[PW_YSALAMIRI])) +ADDRLP4 64 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 64 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $570 +ADDRLP4 64 +INDIRP4 +CNSTI4 404 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $570 +line 1641 +;1641: { +line 1642 +;1642: if (item->giTag != PW_YSALAMIRI) +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 15 +EQI4 $572 +line 1643 +;1643: { +line 1644 +;1644: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $572 +line 1646 +;1645: } +;1646: } +LABELV $570 +line 1647 +;1647: return qtrue; // powerups are always picked up +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $574 +line 1650 +;1648: +;1649: case IT_TEAM: // team items, such as flags +;1650: if( gametype == GT_CTF || gametype == GT_CTY ) { +ADDRLP4 68 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 68 +INDIRI4 +CNSTI4 7 +EQI4 $577 +ADDRLP4 68 +INDIRI4 +CNSTI4 8 +NEI4 $575 +LABELV $577 +line 1654 +;1651: // ent->modelindex2 is non-zero on items if they are dropped +;1652: // we need to know this because we can pick up our dropped flag (and return it) +;1653: // but we can't pick up our flag at base +;1654: if (ps->persistant[PERS_TEAM] == TEAM_RED) { +ADDRFP4 8 +INDIRP4 +CNSTI4 292 +ADDP4 +INDIRI4 +CNSTI4 1 +NEI4 $578 +line 1655 +;1655: if (item->giTag == PW_BLUEFLAG || +ADDRLP4 72 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 5 +EQI4 $583 +ADDRLP4 72 +INDIRI4 +CNSTI4 4 +NEI4 $584 +ADDRFP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $583 +LABELV $584 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 4 +NEI4 $579 +ADDRFP4 8 +INDIRP4 +CNSTI4 364 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $579 +LABELV $583 +line 1658 +;1656: (item->giTag == PW_REDFLAG && ent->modelindex2) || +;1657: (item->giTag == PW_REDFLAG && ps->powerups[PW_BLUEFLAG]) ) +;1658: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +line 1659 +;1659: } else if (ps->persistant[PERS_TEAM] == TEAM_BLUE) { +LABELV $578 +ADDRFP4 8 +INDIRP4 +CNSTI4 292 +ADDP4 +INDIRI4 +CNSTI4 2 +NEI4 $585 +line 1660 +;1660: if (item->giTag == PW_REDFLAG || +ADDRLP4 72 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 72 +INDIRI4 +CNSTI4 4 +EQI4 $590 +ADDRLP4 72 +INDIRI4 +CNSTI4 5 +NEI4 $591 +ADDRFP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $590 +LABELV $591 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +CNSTI4 5 +NEI4 $587 +ADDRFP4 8 +INDIRP4 +CNSTI4 360 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $587 +LABELV $590 +line 1663 +;1661: (item->giTag == PW_BLUEFLAG && ent->modelindex2) || +;1662: (item->giTag == PW_BLUEFLAG && ps->powerups[PW_REDFLAG]) ) +;1663: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $587 +line 1664 +;1664: } +LABELV $585 +LABELV $579 +line 1665 +;1665: } +LABELV $575 +line 1667 +;1666: +;1667: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $592 +line 1670 +;1668: +;1669: case IT_HOLDABLE: +;1670: if ( ps->stats[STAT_HOLDABLE_ITEMS] & (1 << item->giTag)) +ADDRFP4 8 +INDIRP4 +CNSTI4 224 +ADDP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +LSHI4 +BANDI4 +CNSTI4 0 +EQI4 $593 +line 1671 +;1671: { +line 1672 +;1672: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $593 +line 1674 +;1673: } +;1674: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $535 +JUMPV +LABELV $595 +line 1677 +;1675: +;1676: case IT_BAD: +;1677: Com_Error( ERR_DROP, "BG_CanItemBeGrabbed: IT_BAD" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $596 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1684 +;1678: default: +;1679:#ifndef Q3_VM +;1680:#ifndef NDEBUG // bk0001204 +;1681: Com_Printf("BG_CanItemBeGrabbed: unknown enum %d\n", item->giType ); +;1682:#endif +;1683:#endif +;1684: break; +LABELV $546 +line 1687 +;1685: } +;1686: +;1687: return qfalse; +CNSTI4 0 +RETI4 +LABELV $535 +endproc BG_CanItemBeGrabbed 76 8 +export BG_EvaluateTrajectory +proc BG_EvaluateTrajectory 84 12 +line 1698 +;1688:} +;1689: +;1690://====================================================================== +;1691: +;1692:/* +;1693:================ +;1694:BG_EvaluateTrajectory +;1695: +;1696:================ +;1697:*/ +;1698:void BG_EvaluateTrajectory( const trajectory_t *tr, int atTime, vec3_t result ) { +line 1702 +;1699: float deltaTime; +;1700: float phase; +;1701: +;1702: switch( tr->trType ) { +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +LTI4 $599 +ADDRLP4 8 +INDIRI4 +CNSTI4 5 +GTI4 $599 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $612 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $612 +address $602 +address $602 +address $603 +address $605 +address $604 +address $610 +code +LABELV $602 +line 1705 +;1703: case TR_STATIONARY: +;1704: case TR_INTERPOLATE: +;1705: VectorCopy( tr->trBase, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRB +ASGNB 12 +line 1706 +;1706: break; +ADDRGP4 $600 +JUMPV +LABELV $603 +line 1708 +;1707: case TR_LINEAR: +;1708: deltaTime = ( atTime - tr->trTime ) * 0.001; // milliseconds to seconds +ADDRLP4 0 +CNSTF4 981668463 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1709 +;1709: VectorMA( tr->trBase, deltaTime, tr->trDelta, result ); +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 20 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1710 +;1710: break; +ADDRGP4 $600 +JUMPV +LABELV $604 +line 1712 +;1711: case TR_SINE: +;1712: deltaTime = ( atTime - tr->trTime ) / (float) tr->trDuration; +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRFP4 4 +INDIRI4 +ADDRLP4 28 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +ADDRLP4 28 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CVIF4 4 +DIVF4 +ASGNF4 +line 1713 +;1713: phase = sin( deltaTime * M_PI * 2 ); +CNSTF4 1073741824 +CNSTF4 1078530011 +ADDRLP4 0 +INDIRF4 +MULF4 +MULF4 +ARGF4 +ADDRLP4 32 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRLP4 4 +ADDRLP4 32 +INDIRF4 +ASGNF4 +line 1714 +;1714: VectorMA( tr->trBase, phase, tr->trDelta, result ); +ADDRLP4 36 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 36 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 40 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 40 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 44 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 44 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 44 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1715 +;1715: break; +ADDRGP4 $600 +JUMPV +LABELV $605 +line 1717 +;1716: case TR_LINEAR_STOP: +;1717: if ( atTime > tr->trTime + tr->trDuration ) { +ADDRLP4 48 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 48 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDRLP4 48 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +ADDI4 +LEI4 $606 +line 1718 +;1718: atTime = tr->trTime + tr->trDuration; +ADDRLP4 52 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 52 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDRLP4 52 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 1719 +;1719: } +LABELV $606 +line 1720 +;1720: deltaTime = ( atTime - tr->trTime ) * 0.001; // milliseconds to seconds +ADDRLP4 0 +CNSTF4 981668463 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1721 +;1721: if ( deltaTime < 0 ) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $608 +line 1722 +;1722: deltaTime = 0; +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +line 1723 +;1723: } +LABELV $608 +line 1724 +;1724: VectorMA( tr->trBase, deltaTime, tr->trDelta, result ); +ADDRLP4 52 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 52 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 52 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 56 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 56 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 56 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 60 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 60 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1725 +;1725: break; +ADDRGP4 $600 +JUMPV +LABELV $610 +line 1727 +;1726: case TR_GRAVITY: +;1727: deltaTime = ( atTime - tr->trTime ) * 0.001; // milliseconds to seconds +ADDRLP4 0 +CNSTF4 981668463 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1728 +;1728: VectorMA( tr->trBase, deltaTime, tr->trDelta, result ); +ADDRLP4 64 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 64 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 64 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 68 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 68 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 68 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 72 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 72 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 72 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1729 +;1729: result[2] -= 0.5 * DEFAULT_GRAVITY * deltaTime * deltaTime; // FIXME: local gravity... +ADDRLP4 76 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 80 +ADDRLP4 0 +INDIRF4 +ASGNF4 +ADDRLP4 76 +INDIRP4 +ADDRLP4 76 +INDIRP4 +INDIRF4 +CNSTF4 1137180672 +ADDRLP4 80 +INDIRF4 +MULF4 +ADDRLP4 80 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 1730 +;1730: break; +ADDRGP4 $600 +JUMPV +LABELV $599 +line 1735 +;1731: default: +;1732:#ifdef QAGAME +;1733: Com_Error( ERR_DROP, "BG_EvaluateTrajectory: [GAME SIDE] unknown trType: %i", tr->trType ); +;1734:#else +;1735: Com_Error( ERR_DROP, "BG_EvaluateTrajectory: [CLIENTGAME SIDE] unknown trType: %i", tr->trType ); +CNSTI4 1 +ARGI4 +ADDRGP4 $611 +ARGP4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 1737 +;1736:#endif +;1737: break; +LABELV $600 +line 1739 +;1738: } +;1739:} +LABELV $598 +endproc BG_EvaluateTrajectory 84 12 +export BG_EvaluateTrajectoryDelta +proc BG_EvaluateTrajectoryDelta 44 12 +line 1748 +;1740: +;1741:/* +;1742:================ +;1743:BG_EvaluateTrajectoryDelta +;1744: +;1745:For determining velocity at a given time +;1746:================ +;1747:*/ +;1748:void BG_EvaluateTrajectoryDelta( const trajectory_t *tr, int atTime, vec3_t result ) { +line 1752 +;1749: float deltaTime; +;1750: float phase; +;1751: +;1752: switch( tr->trType ) { +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +LTI4 $614 +ADDRLP4 8 +INDIRI4 +CNSTI4 5 +GTI4 $614 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $625 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $625 +address $617 +address $617 +address $618 +address $620 +address $619 +address $623 +code +LABELV $617 +line 1755 +;1753: case TR_STATIONARY: +;1754: case TR_INTERPOLATE: +;1755: VectorClear( result ); +ADDRLP4 16 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 20 +CNSTF4 0 +ASGNF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 20 +INDIRF4 +ASGNF4 +line 1756 +;1756: break; +ADDRGP4 $615 +JUMPV +LABELV $618 +line 1758 +;1757: case TR_LINEAR: +;1758: VectorCopy( tr->trDelta, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 1759 +;1759: break; +ADDRGP4 $615 +JUMPV +LABELV $619 +line 1761 +;1760: case TR_SINE: +;1761: deltaTime = ( atTime - tr->trTime ) / (float) tr->trDuration; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +ADDRLP4 24 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +CVIF4 4 +DIVF4 +ASGNF4 +line 1762 +;1762: phase = cos( deltaTime * M_PI * 2 ); // derivative of sin = cos +CNSTF4 1073741824 +CNSTF4 1078530011 +ADDRLP4 4 +INDIRF4 +MULF4 +MULF4 +ARGF4 +ADDRLP4 28 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 1763 +;1763: phase *= 0.5; +ADDRLP4 0 +CNSTF4 1056964608 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 1764 +;1764: VectorScale( tr->trDelta, phase, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 1765 +;1765: break; +ADDRGP4 $615 +JUMPV +LABELV $620 +line 1767 +;1766: case TR_LINEAR_STOP: +;1767: if ( atTime > tr->trTime + tr->trDuration ) { +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 32 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDRLP4 32 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +ADDI4 +LEI4 $621 +line 1768 +;1768: VectorClear( result ); +ADDRLP4 36 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 40 +CNSTF4 0 +ASGNF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 40 +INDIRF4 +ASGNF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 40 +INDIRF4 +ASGNF4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 40 +INDIRF4 +ASGNF4 +line 1769 +;1769: return; +ADDRGP4 $613 +JUMPV +LABELV $621 +line 1771 +;1770: } +;1771: VectorCopy( tr->trDelta, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 1772 +;1772: break; +ADDRGP4 $615 +JUMPV +LABELV $623 +line 1774 +;1773: case TR_GRAVITY: +;1774: deltaTime = ( atTime - tr->trTime ) * 0.001; // milliseconds to seconds +ADDRLP4 4 +CNSTF4 981668463 +ADDRFP4 4 +INDIRI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +SUBI4 +CVIF4 4 +MULF4 +ASGNF4 +line 1775 +;1775: VectorCopy( tr->trDelta, result ); +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRB +ASGNB 12 +line 1776 +;1776: result[2] -= DEFAULT_GRAVITY * deltaTime; // FIXME: local gravity... +ADDRLP4 36 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 36 +INDIRP4 +INDIRF4 +CNSTF4 1145569280 +ADDRLP4 4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 1777 +;1777: break; +ADDRGP4 $615 +JUMPV +LABELV $614 +line 1779 +;1778: default: +;1779: Com_Error( ERR_DROP, "BG_EvaluateTrajectoryDelta: unknown trType: %i", tr->trTime ); +CNSTI4 1 +ARGI4 +ADDRGP4 $624 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 1780 +;1780: break; +LABELV $615 +line 1782 +;1781: } +;1782:} +LABELV $613 +endproc BG_EvaluateTrajectoryDelta 44 12 +data +export eventnames +align 4 +LABELV eventnames +address $626 +address $627 +address $628 +address $629 +address $630 +address $631 +address $632 +address $633 +address $634 +address $635 +address $636 +address $637 +address $638 +address $639 +address $640 +address $641 +address $642 +address $643 +address $644 +address $645 +address $646 +address $647 +address $648 +address $649 +address $650 +address $651 +address $652 +address $653 +address $654 +address $655 +address $656 +address $657 +address $658 +address $659 +address $660 +address $661 +address $662 +address $663 +address $664 +address $665 +address $666 +address $667 +address $668 +address $669 +address $670 +address $671 +address $672 +address $673 +address $674 +address $675 +address $676 +address $677 +address $678 +address $679 +address $680 +address $681 +address $682 +address $683 +address $684 +address $685 +address $686 +address $687 +address $688 +address $689 +address $690 +address $691 +address $692 +address $693 +address $694 +address $695 +address $696 +address $697 +address $698 +address $699 +address $700 +address $701 +address $702 +address $703 +address $704 +address $705 +address $706 +address $707 +address $708 +address $709 +address $710 +address $711 +address $712 +address $713 +address $714 +address $715 +address $716 +address $717 +address $718 +address $719 +address $720 +address $721 +address $722 +address $723 +address $724 +address $725 +address $726 +address $727 +address $728 +address $729 +address $730 +address $731 +address $732 +address $733 +address $734 +address $735 +export BG_AddPredictableEventToPlayerstate +code +proc BG_AddPredictableEventToPlayerstate 12 0 +line 1945 +;1783: +;1784:char *eventnames[] = { +;1785: "EV_NONE", +;1786: +;1787: "EV_CLIENTJOIN", +;1788: +;1789: "EV_FOOTSTEP", +;1790: "EV_FOOTSTEP_METAL", +;1791: "EV_FOOTSPLASH", +;1792: "EV_FOOTWADE", +;1793: "EV_SWIM", +;1794: +;1795: "EV_STEP_4", +;1796: "EV_STEP_8", +;1797: "EV_STEP_12", +;1798: "EV_STEP_16", +;1799: +;1800: "EV_FALL", +;1801: +;1802: "EV_JUMP_PAD", // boing sound at origin", jump sound on player +;1803: +;1804: "EV_PRIVATE_DUEL", +;1805: +;1806: "EV_JUMP", +;1807: "EV_ROLL", +;1808: "EV_WATER_TOUCH", // foot touches +;1809: "EV_WATER_LEAVE", // foot leaves +;1810: "EV_WATER_UNDER", // head touches +;1811: "EV_WATER_CLEAR", // head leaves +;1812: +;1813: "EV_ITEM_PICKUP", // normal item pickups are predictable +;1814: "EV_GLOBAL_ITEM_PICKUP", // powerup / team sounds are broadcast to everyone +;1815: +;1816: "EV_NOAMMO", +;1817: "EV_CHANGE_WEAPON", +;1818: "EV_FIRE_WEAPON", +;1819: "EV_ALT_FIRE", +;1820: "EV_SABER_ATTACK", +;1821: "EV_SABER_HIT", +;1822: "EV_SABER_BLOCK", +;1823: "EV_SABER_UNHOLSTER", +;1824: "EV_BECOME_JEDIMASTER", +;1825: "EV_DISRUPTOR_MAIN_SHOT", +;1826: "EV_DISRUPTOR_SNIPER_SHOT", +;1827: "EV_DISRUPTOR_SNIPER_MISS", +;1828: "EV_DISRUPTOR_HIT", +;1829: "EV_DISRUPTOR_ZOOMSOUND", +;1830: +;1831: "EV_PREDEFSOUND", +;1832: +;1833: "EV_TEAM_POWER", +;1834: +;1835: "EV_SCREENSHAKE", +;1836: +;1837: "EV_USE", // +Use key +;1838: +;1839: "EV_USE_ITEM0", +;1840: "EV_USE_ITEM1", +;1841: "EV_USE_ITEM2", +;1842: "EV_USE_ITEM3", +;1843: "EV_USE_ITEM4", +;1844: "EV_USE_ITEM5", +;1845: "EV_USE_ITEM6", +;1846: "EV_USE_ITEM7", +;1847: "EV_USE_ITEM8", +;1848: "EV_USE_ITEM9", +;1849: "EV_USE_ITEM10", +;1850: "EV_USE_ITEM11", +;1851: "EV_USE_ITEM12", +;1852: "EV_USE_ITEM13", +;1853: "EV_USE_ITEM14", +;1854: "EV_USE_ITEM15", +;1855: +;1856: "EV_ITEMUSEFAIL", +;1857: +;1858: "EV_ITEM_RESPAWN", +;1859: "EV_ITEM_POP", +;1860: "EV_PLAYER_TELEPORT_IN", +;1861: "EV_PLAYER_TELEPORT_OUT", +;1862: +;1863: "EV_GRENADE_BOUNCE", // eventParm will be the soundindex +;1864: "EV_MISSILE_STICK", +;1865: +;1866: "EV_PLAY_EFFECT", +;1867: "EV_PLAY_EFFECT_ID", //finally gave in and added it.. +;1868: +;1869: "EV_MUTE_SOUND", +;1870: "EV_GENERAL_SOUND", +;1871: "EV_GLOBAL_SOUND", // no attenuation +;1872: "EV_GLOBAL_TEAM_SOUND", +;1873: "EV_ENTITY_SOUND", +;1874: +;1875: "EV_PLAY_ROFF", +;1876: +;1877: "EV_GLASS_SHATTER", +;1878: "EV_DEBRIS", +;1879: +;1880: "EV_MISSILE_HIT", +;1881: "EV_MISSILE_MISS", +;1882: "EV_MISSILE_MISS_METAL", +;1883: "EV_BULLET", // otherEntity is the shooter +;1884: +;1885: "EV_PAIN", +;1886: "EV_DEATH1", +;1887: "EV_DEATH2", +;1888: "EV_DEATH3", +;1889: "EV_OBITUARY", +;1890: +;1891: "EV_POWERUP_QUAD", +;1892: "EV_POWERUP_BATTLESUIT", +;1893: //"EV_POWERUP_REGEN", +;1894: +;1895: "EV_FORCE_DRAINED", +;1896: +;1897: "EV_GIB_PLAYER", // gib a previously living player +;1898: "EV_SCOREPLUM", // score plum +;1899: +;1900: "EV_CTFMESSAGE", +;1901: +;1902: "EV_SAGA_ROUNDOVER", +;1903: "EV_SAGA_OBJECTIVECOMPLETE", +;1904: +;1905: "EV_DESTROY_GHOUL2_INSTANCE", +;1906: +;1907: "EV_DESTROY_WEAPON_MODEL", +;1908: +;1909: "EV_GIVE_NEW_RANK", +;1910: "EV_SET_FREE_SABER", +;1911: "EV_SET_FORCE_DISABLE", +;1912: +;1913: "EV_WEAPON_CHARGE", +;1914: "EV_WEAPON_CHARGE_ALT", +;1915: +;1916: "EV_SHIELD_HIT", +;1917: +;1918: "EV_DEBUG_LINE", +;1919: "EV_TESTLINE", +;1920: "EV_STOPLOOPINGSOUND", +;1921: "EV_STARTLOOPINGSOUND", +;1922: "EV_TAUNT", +;1923: +;1924: "EV_TAUNT_YES", +;1925: "EV_TAUNT_NO", +;1926: "EV_TAUNT_FOLLOWME", +;1927: "EV_TAUNT_GETFLAG", +;1928: "EV_TAUNT_GUARDBASE", +;1929: "EV_TAUNT_PATROL", +;1930: +;1931: "EV_BODY_QUEUE_COPY" +;1932: +;1933:}; +;1934: +;1935:/* +;1936:=============== +;1937:BG_AddPredictableEventToPlayerstate +;1938: +;1939:Handles the sequence numbers +;1940:=============== +;1941:*/ +;1942: +;1943:void trap_Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize ); +;1944: +;1945:void BG_AddPredictableEventToPlayerstate( int newEvent, int eventParm, playerState_t *ps ) { +line 1960 +;1946: +;1947:#ifdef _DEBUG +;1948: { +;1949: char buf[256]; +;1950: trap_Cvar_VariableStringBuffer("showevents", buf, sizeof(buf)); +;1951: if ( atof(buf) != 0 ) { +;1952:#ifdef QAGAME +;1953: Com_Printf(" game event svt %5d -> %5d: num = %20s parm %d\n", ps->pmove_framecount/*ps->commandTime*/, ps->eventSequence, eventnames[newEvent], eventParm); +;1954:#else +;1955: Com_Printf("Cgame event svt %5d -> %5d: num = %20s parm %d\n", ps->pmove_framecount/*ps->commandTime*/, ps->eventSequence, eventnames[newEvent], eventParm); +;1956:#endif +;1957: } +;1958: } +;1959:#endif +;1960: ps->events[ps->eventSequence & (MAX_PS_EVENTS-1)] = newEvent; +ADDRLP4 0 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDP4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 1961 +;1961: ps->eventParms[ps->eventSequence & (MAX_PS_EVENTS-1)] = eventParm; +ADDRLP4 4 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +CNSTI4 2 +LSHI4 +ADDRLP4 4 +INDIRP4 +CNSTI4 124 +ADDP4 +ADDP4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +line 1962 +;1962: ps->eventSequence++; +ADDRLP4 8 +ADDRFP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1963 +;1963:} +LABELV $736 +endproc BG_AddPredictableEventToPlayerstate 12 0 +export BG_TouchJumpPad +proc BG_TouchJumpPad 32 8 +line 1970 +;1964: +;1965:/* +;1966:======================== +;1967:BG_TouchJumpPad +;1968:======================== +;1969:*/ +;1970:void BG_TouchJumpPad( playerState_t *ps, entityState_t *jumppad ) { +line 1976 +;1971: vec3_t angles; +;1972: float p; +;1973: int effectNum; +;1974: +;1975: // spectators don't use jump pads +;1976: if ( ps->pm_type != PM_NORMAL && ps->pm_type != PM_FLOAT ) { +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +EQI4 $738 +ADDRLP4 20 +INDIRI4 +CNSTI4 1 +EQI4 $738 +line 1977 +;1977: return; +ADDRGP4 $737 +JUMPV +LABELV $738 +line 1982 +;1978: } +;1979: +;1980: // if we didn't hit this same jumppad the previous frame +;1981: // then don't play the event sound again if we are in a fat trigger +;1982: if ( ps->jumppad_ent != jumppad->number ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 480 +ADDP4 +INDIRI4 +ADDRFP4 4 +INDIRP4 +INDIRI4 +EQI4 $740 +line 1984 +;1983: +;1984: vectoangles( jumppad->origin2, angles); +ADDRFP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 vectoangles +CALLV +pop +line 1985 +;1985: p = fabs( AngleNormalize180( angles[PITCH] ) ); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleNormalize180 +CALLF4 +ASGNF4 +ADDRLP4 24 +INDIRF4 +ARGF4 +ADDRLP4 28 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 1986 +;1986: if( p < 45 ) { +ADDRLP4 12 +INDIRF4 +CNSTF4 1110704128 +GEF4 $742 +line 1987 +;1987: effectNum = 0; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 1988 +;1988: } else { +ADDRGP4 $743 +JUMPV +LABELV $742 +line 1989 +;1989: effectNum = 1; +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +line 1990 +;1990: } +LABELV $743 +line 1992 +;1991: //BG_AddPredictableEventToPlayerstate( EV_JUMP_PAD, effectNum, ps ); +;1992: } +LABELV $740 +line 1994 +;1993: // remember hitting this jumppad this frame +;1994: ps->jumppad_ent = jumppad->number; +ADDRFP4 0 +INDIRP4 +CNSTI4 480 +ADDP4 +ADDRFP4 4 +INDIRP4 +INDIRI4 +ASGNI4 +line 1995 +;1995: ps->jumppad_frame = ps->pmove_framecount; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 492 +ADDP4 +ADDRLP4 24 +INDIRP4 +CNSTI4 488 +ADDP4 +INDIRI4 +ASGNI4 +line 1997 +;1996: // give the player the velocity from the jumppad +;1997: VectorCopy( jumppad->origin2, ps->velocity ); +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRB +ASGNB 12 +line 1998 +;1998:} +LABELV $737 +endproc BG_TouchJumpPad 32 8 +export BG_PlayerStateToEntityState +proc BG_PlayerStateToEntityState 28 0 +line 2008 +;1999: +;2000:/* +;2001:======================== +;2002:BG_PlayerStateToEntityState +;2003: +;2004:This is done after each set of usercmd_t on the server, +;2005:and after local prediction on the client +;2006:======================== +;2007:*/ +;2008:void BG_PlayerStateToEntityState( playerState_t *ps, entityState_t *s, qboolean snap ) { +line 2011 +;2009: int i; +;2010: +;2011: if ( ps->pm_type == PM_INTERMISSION || ps->pm_type == PM_SPECTATOR ) { +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 6 +EQI4 $747 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +NEI4 $745 +LABELV $747 +line 2012 +;2012: s->eType = ET_INVISIBLE; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 12 +ASGNI4 +line 2013 +;2013: } else if ( ps->stats[STAT_HEALTH] <= GIB_HEALTH ) { +ADDRGP4 $746 +JUMPV +LABELV $745 +ADDRFP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 -40 +GTI4 $748 +line 2014 +;2014: s->eType = ET_INVISIBLE; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 12 +ASGNI4 +line 2015 +;2015: } else { +ADDRGP4 $749 +JUMPV +LABELV $748 +line 2016 +;2016: s->eType = ET_PLAYER; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2017 +;2017: } +LABELV $749 +LABELV $746 +line 2019 +;2018: +;2019: s->number = ps->clientNum; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 2021 +;2020: +;2021: s->pos.trType = TR_INTERPOLATE; +ADDRFP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2022 +;2022: VectorCopy( ps->origin, s->pos.trBase ); +ADDRFP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 2023 +;2023: if ( snap ) { +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $750 +line 2024 +;2024: SnapVector( s->pos.trBase ); +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 32 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +line 2025 +;2025: } +LABELV $750 +line 2027 +;2026: // set the trDelta for flag direction +;2027: VectorCopy( ps->velocity, s->pos.trDelta ); +ADDRFP4 4 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 2029 +;2028: +;2029: s->apos.trType = TR_INTERPOLATE; +ADDRFP4 4 +INDIRP4 +CNSTI4 48 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2030 +;2030: VectorCopy( ps->viewangles, s->apos.trBase ); +ADDRFP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 2031 +;2031: if ( snap ) { +ADDRFP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $752 +line 2032 +;2032: SnapVector( s->apos.trBase ); +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 64 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 68 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +line 2033 +;2033: } +LABELV $752 +line 2035 +;2034: +;2035: s->trickedentindex = ps->fd.forceMindtrickTargetIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 148 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1144 +ADDP4 +INDIRI4 +ASGNI4 +line 2036 +;2036: s->trickedentindex2 = ps->fd.forceMindtrickTargetIndex2; +ADDRFP4 4 +INDIRP4 +CNSTI4 152 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1148 +ADDP4 +INDIRI4 +ASGNI4 +line 2037 +;2037: s->trickedentindex3 = ps->fd.forceMindtrickTargetIndex3; +ADDRFP4 4 +INDIRP4 +CNSTI4 156 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1152 +ADDP4 +INDIRI4 +ASGNI4 +line 2038 +;2038: s->trickedentindex4 = ps->fd.forceMindtrickTargetIndex4; +ADDRFP4 4 +INDIRP4 +CNSTI4 160 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1156 +ADDP4 +INDIRI4 +ASGNI4 +line 2040 +;2039: +;2040: s->forceFrame = ps->saberLockFrame; +ADDRFP4 4 +INDIRP4 +CNSTI4 288 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +ASGNI4 +line 2042 +;2041: +;2042: s->emplacedOwner = ps->electrifyTime; +ADDRFP4 4 +INDIRP4 +CNSTI4 180 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRI4 +ASGNI4 +line 2044 +;2043: +;2044: s->speed = ps->speed; +ADDRFP4 4 +INDIRP4 +CNSTI4 164 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 60 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 2046 +;2045: +;2046: s->genericenemyindex = ps->genericEnemyIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 172 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +INDIRI4 +ASGNI4 +line 2048 +;2047: +;2048: s->activeForcePass = ps->activeForcePass; +ADDRFP4 4 +INDIRP4 +CNSTI4 176 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 624 +ADDP4 +INDIRI4 +ASGNI4 +line 2050 +;2049: +;2050: s->angles2[YAW] = ps->movementDir; +ADDRFP4 4 +INDIRP4 +CNSTI4 132 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 2051 +;2051: s->legsAnim = ps->legsAnim; +ADDRFP4 4 +INDIRP4 +CNSTI4 280 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ASGNI4 +line 2052 +;2052: s->torsoAnim = ps->torsoAnim; +ADDRFP4 4 +INDIRP4 +CNSTI4 284 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +ASGNI4 +line 2053 +;2053: s->clientNum = ps->clientNum; // ET_PLAYER looks here instead of at number +ADDRFP4 4 +INDIRP4 +CNSTI4 220 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 2055 +;2054: // so corpses can also reference the proper config +;2055: s->eFlags = ps->eFlags; +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +ASGNI4 +line 2057 +;2056: +;2057: s->saberInFlight = ps->saberInFlight; +ADDRFP4 4 +INDIRP4 +CNSTI4 228 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 504 +ADDP4 +INDIRI4 +ASGNI4 +line 2058 +;2058: s->saberEntityNum = ps->saberEntityNum; +ADDRFP4 4 +INDIRP4 +CNSTI4 232 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 544 +ADDP4 +INDIRI4 +ASGNI4 +line 2059 +;2059: s->saberMove = ps->saberMove; +ADDRFP4 4 +INDIRP4 +CNSTI4 236 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ASGNI4 +line 2060 +;2060: s->forcePowersActive = ps->fd.forcePowersActive; +ADDRFP4 4 +INDIRP4 +CNSTI4 240 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +ASGNI4 +line 2062 +;2061: +;2062: if (ps->duelInProgress) +ADDRFP4 0 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $754 +line 2063 +;2063: { +line 2064 +;2064: s->bolt1 = 1; +ADDRFP4 4 +INDIRP4 +CNSTI4 140 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2065 +;2065: } +ADDRGP4 $755 +JUMPV +LABELV $754 +line 2067 +;2066: else +;2067: { +line 2068 +;2068: s->bolt1 = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 140 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2069 +;2069: } +LABELV $755 +line 2071 +;2070: +;2071: if (ps->dualBlade) +ADDRFP4 0 +INDIRP4 +CNSTI4 1352 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $756 +line 2072 +;2072: { +line 2073 +;2073: s->bolt2 = 1; +ADDRFP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2074 +;2074: } +ADDRGP4 $757 +JUMPV +LABELV $756 +line 2076 +;2075: else +;2076: { +line 2077 +;2077: s->bolt2 = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2078 +;2078: } +LABELV $757 +line 2080 +;2079: +;2080: s->otherEntityNum2 = ps->emplacedIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 188 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 596 +ADDP4 +INDIRI4 +ASGNI4 +line 2082 +;2081: +;2082: s->shouldtarget = ps->saberHolstered; //reuse bool in entitystate for players differently +ADDRFP4 4 +INDIRP4 +CNSTI4 268 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1300 +ADDP4 +INDIRI4 +ASGNI4 +line 2083 +;2083: s->teamowner = ps->usingATST; +ADDRFP4 4 +INDIRP4 +CNSTI4 264 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1304 +ADDP4 +INDIRI4 +ASGNI4 +line 2085 +;2084: +;2085: if (ps->genericEnemyIndex != -1) +ADDRFP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +INDIRI4 +CNSTI4 -1 +EQI4 $758 +line 2086 +;2086: { +line 2087 +;2087: s->eFlags |= EF_SEEKERDRONE; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1048576 +BORI4 +ASGNI4 +line 2088 +;2088: } +LABELV $758 +line 2090 +;2089: +;2090: if ( ps->stats[STAT_HEALTH] <= 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $760 +line 2091 +;2091: s->eFlags |= EF_DEAD; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +BORI4 +ASGNI4 +line 2092 +;2092: } else { +ADDRGP4 $761 +JUMPV +LABELV $760 +line 2093 +;2093: s->eFlags &= ~EF_DEAD; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 -2 +BANDI4 +ASGNI4 +line 2094 +;2094: } +LABELV $761 +line 2096 +;2095: +;2096: if ( ps->externalEvent ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $762 +line 2097 +;2097: s->event = ps->externalEvent; +ADDRFP4 4 +INDIRP4 +CNSTI4 252 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +ASGNI4 +line 2098 +;2098: s->eventParm = ps->externalEventParm; +ADDRFP4 4 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 136 +ADDP4 +INDIRI4 +ASGNI4 +line 2099 +;2099: } else if ( ps->entityEventSequence < ps->eventSequence ) { +ADDRGP4 $763 +JUMPV +LABELV $762 +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +GEI4 $764 +line 2102 +;2100: int seq; +;2101: +;2102: if ( ps->entityEventSequence < ps->eventSequence - MAX_PS_EVENTS) { +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +GEI4 $766 +line 2103 +;2103: ps->entityEventSequence = ps->eventSequence - MAX_PS_EVENTS; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +ASGNI4 +line 2104 +;2104: } +LABELV $766 +line 2105 +;2105: seq = ps->entityEventSequence & (MAX_PS_EVENTS-1); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +ASGNI4 +line 2106 +;2106: s->event = ps->events[ seq ] | ( ( ps->entityEventSequence & 3 ) << 8 ); +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 252 +ADDP4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 3 +BANDI4 +CNSTI4 8 +LSHI4 +BORI4 +ASGNI4 +line 2107 +;2107: s->eventParm = ps->eventParms[ seq ]; +ADDRFP4 4 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 124 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 2108 +;2108: ps->entityEventSequence++; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2109 +;2109: } +LABELV $764 +LABELV $763 +line 2112 +;2110: +;2111: +;2112: s->weapon = ps->weapon; +ADDRFP4 4 +INDIRP4 +CNSTI4 276 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +ASGNI4 +line 2113 +;2113: s->groundEntityNum = ps->groundEntityNum; +ADDRFP4 4 +INDIRP4 +CNSTI4 192 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 84 +ADDP4 +INDIRI4 +ASGNI4 +line 2115 +;2114: +;2115: s->powerups = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 272 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2116 +;2116: for ( i = 0 ; i < MAX_POWERUPS ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $768 +line 2117 +;2117: if ( ps->powerups[ i ] ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 344 +ADDP4 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $772 +line 2118 +;2118: s->powerups |= 1 << i; +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 272 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BORI4 +ASGNI4 +line 2119 +;2119: } +LABELV $772 +line 2120 +;2120: } +LABELV $769 +line 2116 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $768 +line 2122 +;2121: +;2122: s->loopSound = ps->loopSound; +ADDRFP4 4 +INDIRP4 +CNSTI4 200 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 476 +ADDP4 +INDIRI4 +ASGNI4 +line 2123 +;2123: s->generic1 = ps->generic1; +ADDRFP4 4 +INDIRP4 +CNSTI4 292 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +ASGNI4 +line 2126 +;2124: +;2125: //NOT INCLUDED IN ENTITYSTATETOPLAYERSTATE: +;2126: s->modelindex2 = ps->weaponstate; +ADDRFP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +ASGNI4 +line 2127 +;2127: s->constantLight = ps->weaponChargeTime; +ADDRFP4 4 +INDIRP4 +CNSTI4 196 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 48 +ADDP4 +INDIRI4 +ASGNI4 +line 2129 +;2128: +;2129: VectorCopy(ps->lastHitLoc, s->origin2); +ADDRFP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1356 +ADDP4 +INDIRB +ASGNB 12 +line 2131 +;2130: +;2131: s->isJediMaster = ps->isJediMaster; +ADDRFP4 4 +INDIRP4 +CNSTI4 244 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 604 +ADDP4 +INDIRI4 +ASGNI4 +line 2133 +;2132: +;2133: s->time2 = ps->holocronBits; +ADDRFP4 4 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 712 +ADDP4 +INDIRI4 +ASGNI4 +line 2134 +;2134:} +LABELV $744 +endproc BG_PlayerStateToEntityState 28 0 +export BG_PlayerStateToEntityStateExtraPolate +proc BG_PlayerStateToEntityStateExtraPolate 28 0 +line 2144 +;2135: +;2136:/* +;2137:======================== +;2138:BG_PlayerStateToEntityStateExtraPolate +;2139: +;2140:This is done after each set of usercmd_t on the server, +;2141:and after local prediction on the client +;2142:======================== +;2143:*/ +;2144:void BG_PlayerStateToEntityStateExtraPolate( playerState_t *ps, entityState_t *s, int time, qboolean snap ) { +line 2147 +;2145: int i; +;2146: +;2147: if ( ps->pm_type == PM_INTERMISSION || ps->pm_type == PM_SPECTATOR ) { +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 6 +EQI4 $777 +ADDRLP4 4 +INDIRI4 +CNSTI4 3 +NEI4 $775 +LABELV $777 +line 2148 +;2148: s->eType = ET_INVISIBLE; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 12 +ASGNI4 +line 2149 +;2149: } else if ( ps->stats[STAT_HEALTH] <= GIB_HEALTH ) { +ADDRGP4 $776 +JUMPV +LABELV $775 +ADDRFP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 -40 +GTI4 $778 +line 2150 +;2150: s->eType = ET_INVISIBLE; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 12 +ASGNI4 +line 2151 +;2151: } else { +ADDRGP4 $779 +JUMPV +LABELV $778 +line 2152 +;2152: s->eType = ET_PLAYER; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2153 +;2153: } +LABELV $779 +LABELV $776 +line 2155 +;2154: +;2155: s->number = ps->clientNum; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 2157 +;2156: +;2157: s->pos.trType = TR_LINEAR_STOP; +ADDRFP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTI4 3 +ASGNI4 +line 2158 +;2158: VectorCopy( ps->origin, s->pos.trBase ); +ADDRFP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRB +ASGNB 12 +line 2159 +;2159: if ( snap ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $780 +line 2160 +;2160: SnapVector( s->pos.trBase ); +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 28 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 32 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +line 2161 +;2161: } +LABELV $780 +line 2163 +;2162: // set the trDelta for flag direction and linear prediction +;2163: VectorCopy( ps->velocity, s->pos.trDelta ); +ADDRFP4 4 +INDIRP4 +CNSTI4 36 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRB +ASGNB 12 +line 2165 +;2164: // set the time for linear prediction +;2165: s->pos.trTime = time; +ADDRFP4 4 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRFP4 8 +INDIRI4 +ASGNI4 +line 2167 +;2166: // set maximum extra polation time +;2167: s->pos.trDuration = 50; // 1000 / sv_fps (default = 20) +ADDRFP4 4 +INDIRP4 +CNSTI4 20 +ADDP4 +CNSTI4 50 +ASGNI4 +line 2169 +;2168: +;2169: s->apos.trType = TR_INTERPOLATE; +ADDRFP4 4 +INDIRP4 +CNSTI4 48 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2170 +;2170: VectorCopy( ps->viewangles, s->apos.trBase ); +ADDRFP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 156 +ADDP4 +INDIRB +ASGNB 12 +line 2171 +;2171: if ( snap ) { +ADDRFP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $782 +line 2172 +;2172: SnapVector( s->apos.trBase ); +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 60 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 64 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +CNSTI4 68 +ADDP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +CVFI4 4 +CVIF4 4 +ASGNF4 +line 2173 +;2173: } +LABELV $782 +line 2175 +;2174: +;2175: s->trickedentindex = ps->fd.forceMindtrickTargetIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 148 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1144 +ADDP4 +INDIRI4 +ASGNI4 +line 2176 +;2176: s->trickedentindex2 = ps->fd.forceMindtrickTargetIndex2; +ADDRFP4 4 +INDIRP4 +CNSTI4 152 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1148 +ADDP4 +INDIRI4 +ASGNI4 +line 2177 +;2177: s->trickedentindex3 = ps->fd.forceMindtrickTargetIndex3; +ADDRFP4 4 +INDIRP4 +CNSTI4 156 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1152 +ADDP4 +INDIRI4 +ASGNI4 +line 2178 +;2178: s->trickedentindex4 = ps->fd.forceMindtrickTargetIndex4; +ADDRFP4 4 +INDIRP4 +CNSTI4 160 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1156 +ADDP4 +INDIRI4 +ASGNI4 +line 2180 +;2179: +;2180: s->forceFrame = ps->saberLockFrame; +ADDRFP4 4 +INDIRP4 +CNSTI4 288 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 532 +ADDP4 +INDIRI4 +ASGNI4 +line 2182 +;2181: +;2182: s->emplacedOwner = ps->electrifyTime; +ADDRFP4 4 +INDIRP4 +CNSTI4 180 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 728 +ADDP4 +INDIRI4 +ASGNI4 +line 2184 +;2183: +;2184: s->speed = ps->speed; +ADDRFP4 4 +INDIRP4 +CNSTI4 164 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 60 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 2186 +;2185: +;2186: s->genericenemyindex = ps->genericEnemyIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 172 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +INDIRI4 +ASGNI4 +line 2188 +;2187: +;2188: s->activeForcePass = ps->activeForcePass; +ADDRFP4 4 +INDIRP4 +CNSTI4 176 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 624 +ADDP4 +INDIRI4 +ASGNI4 +line 2190 +;2189: +;2190: s->angles2[YAW] = ps->movementDir; +ADDRFP4 4 +INDIRP4 +CNSTI4 132 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 104 +ADDP4 +INDIRI4 +CVIF4 4 +ASGNF4 +line 2191 +;2191: s->legsAnim = ps->legsAnim; +ADDRFP4 4 +INDIRP4 +CNSTI4 280 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 92 +ADDP4 +INDIRI4 +ASGNI4 +line 2192 +;2192: s->torsoAnim = ps->torsoAnim; +ADDRFP4 4 +INDIRP4 +CNSTI4 284 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 100 +ADDP4 +INDIRI4 +ASGNI4 +line 2193 +;2193: s->clientNum = ps->clientNum; // ET_PLAYER looks here instead of at number +ADDRFP4 4 +INDIRP4 +CNSTI4 220 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 144 +ADDP4 +INDIRI4 +ASGNI4 +line 2195 +;2194: // so corpses can also reference the proper config +;2195: s->eFlags = ps->eFlags; +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 108 +ADDP4 +INDIRI4 +ASGNI4 +line 2197 +;2196: +;2197: s->saberInFlight = ps->saberInFlight; +ADDRFP4 4 +INDIRP4 +CNSTI4 228 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 504 +ADDP4 +INDIRI4 +ASGNI4 +line 2198 +;2198: s->saberEntityNum = ps->saberEntityNum; +ADDRFP4 4 +INDIRP4 +CNSTI4 232 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 544 +ADDP4 +INDIRI4 +ASGNI4 +line 2199 +;2199: s->saberMove = ps->saberMove; +ADDRFP4 4 +INDIRP4 +CNSTI4 236 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 512 +ADDP4 +INDIRI4 +ASGNI4 +line 2200 +;2200: s->forcePowersActive = ps->fd.forcePowersActive; +ADDRFP4 4 +INDIRP4 +CNSTI4 240 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 836 +ADDP4 +INDIRI4 +ASGNI4 +line 2202 +;2201: +;2202: if (ps->duelInProgress) +ADDRFP4 0 +INDIRP4 +CNSTI4 1292 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $784 +line 2203 +;2203: { +line 2204 +;2204: s->bolt1 = 1; +ADDRFP4 4 +INDIRP4 +CNSTI4 140 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2205 +;2205: } +ADDRGP4 $785 +JUMPV +LABELV $784 +line 2207 +;2206: else +;2207: { +line 2208 +;2208: s->bolt1 = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 140 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2209 +;2209: } +LABELV $785 +line 2211 +;2210: +;2211: if (ps->dualBlade) +ADDRFP4 0 +INDIRP4 +CNSTI4 1352 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $786 +line 2212 +;2212: { +line 2213 +;2213: s->bolt2 = 1; +ADDRFP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +CNSTI4 1 +ASGNI4 +line 2214 +;2214: } +ADDRGP4 $787 +JUMPV +LABELV $786 +line 2216 +;2215: else +;2216: { +line 2217 +;2217: s->bolt2 = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 144 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2218 +;2218: } +LABELV $787 +line 2220 +;2219: +;2220: s->otherEntityNum2 = ps->emplacedIndex; +ADDRFP4 4 +INDIRP4 +CNSTI4 188 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 596 +ADDP4 +INDIRI4 +ASGNI4 +line 2222 +;2221: +;2222: s->shouldtarget = ps->saberHolstered; //reuse bool in entitystate for players differently +ADDRFP4 4 +INDIRP4 +CNSTI4 268 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1300 +ADDP4 +INDIRI4 +ASGNI4 +line 2223 +;2223: s->teamowner = ps->usingATST; +ADDRFP4 4 +INDIRP4 +CNSTI4 264 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1304 +ADDP4 +INDIRI4 +ASGNI4 +line 2225 +;2224: +;2225: if (ps->genericEnemyIndex != -1) +ADDRFP4 0 +INDIRP4 +CNSTI4 612 +ADDP4 +INDIRI4 +CNSTI4 -1 +EQI4 $788 +line 2226 +;2226: { +line 2227 +;2227: s->eFlags |= EF_SEEKERDRONE; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1048576 +BORI4 +ASGNI4 +line 2228 +;2228: } +LABELV $788 +line 2230 +;2229: +;2230: if ( ps->stats[STAT_HEALTH] <= 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 216 +ADDP4 +INDIRI4 +CNSTI4 0 +GTI4 $790 +line 2231 +;2231: s->eFlags |= EF_DEAD; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +BORI4 +ASGNI4 +line 2232 +;2232: } else { +ADDRGP4 $791 +JUMPV +LABELV $790 +line 2233 +;2233: s->eFlags &= ~EF_DEAD; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 -2 +BANDI4 +ASGNI4 +line 2234 +;2234: } +LABELV $791 +line 2236 +;2235: +;2236: if ( ps->externalEvent ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $792 +line 2237 +;2237: s->event = ps->externalEvent; +ADDRFP4 4 +INDIRP4 +CNSTI4 252 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 132 +ADDP4 +INDIRI4 +ASGNI4 +line 2238 +;2238: s->eventParm = ps->externalEventParm; +ADDRFP4 4 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 136 +ADDP4 +INDIRI4 +ASGNI4 +line 2239 +;2239: } else if ( ps->entityEventSequence < ps->eventSequence ) { +ADDRGP4 $793 +JUMPV +LABELV $792 +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 8 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +GEI4 $794 +line 2242 +;2240: int seq; +;2241: +;2242: if ( ps->entityEventSequence < ps->eventSequence - MAX_PS_EVENTS) { +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +ADDRLP4 16 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +GEI4 $796 +line 2243 +;2243: ps->entityEventSequence = ps->eventSequence - MAX_PS_EVENTS; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 112 +ADDP4 +INDIRI4 +CNSTI4 2 +SUBI4 +ASGNI4 +line 2244 +;2244: } +LABELV $796 +line 2245 +;2245: seq = ps->entityEventSequence & (MAX_PS_EVENTS-1); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 1 +BANDI4 +ASGNI4 +line 2246 +;2246: s->event = ps->events[ seq ] | ( ( ps->entityEventSequence & 3 ) << 8 ); +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 4 +INDIRP4 +CNSTI4 252 +ADDP4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 116 +ADDP4 +ADDP4 +INDIRI4 +ADDRLP4 20 +INDIRP4 +CNSTI4 496 +ADDP4 +INDIRI4 +CNSTI4 3 +BANDI4 +CNSTI4 8 +LSHI4 +BORI4 +ASGNI4 +line 2247 +;2247: s->eventParm = ps->eventParms[ seq ]; +ADDRFP4 4 +INDIRP4 +CNSTI4 256 +ADDP4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 124 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 2248 +;2248: ps->entityEventSequence++; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +CNSTI4 496 +ADDP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 2249 +;2249: } +LABELV $794 +LABELV $793 +line 2250 +;2250: s->weapon = ps->weapon; +ADDRFP4 4 +INDIRP4 +CNSTI4 276 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 148 +ADDP4 +INDIRI4 +ASGNI4 +line 2251 +;2251: s->groundEntityNum = ps->groundEntityNum; +ADDRFP4 4 +INDIRP4 +CNSTI4 192 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 84 +ADDP4 +INDIRI4 +ASGNI4 +line 2253 +;2252: +;2253: s->powerups = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 272 +ADDP4 +CNSTI4 0 +ASGNI4 +line 2254 +;2254: for ( i = 0 ; i < MAX_POWERUPS ; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $798 +line 2255 +;2255: if ( ps->powerups[ i ] ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +CNSTI4 344 +ADDP4 +ADDP4 +INDIRI4 +CNSTI4 0 +EQI4 $802 +line 2256 +;2256: s->powerups |= 1 << i; +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +CNSTI4 272 +ADDP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDRLP4 0 +INDIRI4 +LSHI4 +BORI4 +ASGNI4 +line 2257 +;2257: } +LABELV $802 +line 2258 +;2258: } +LABELV $799 +line 2254 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +LTI4 $798 +line 2260 +;2259: +;2260: s->loopSound = ps->loopSound; +ADDRFP4 4 +INDIRP4 +CNSTI4 200 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 476 +ADDP4 +INDIRI4 +ASGNI4 +line 2261 +;2261: s->generic1 = ps->generic1; +ADDRFP4 4 +INDIRP4 +CNSTI4 292 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 472 +ADDP4 +INDIRI4 +ASGNI4 +line 2264 +;2262: +;2263: //NOT INCLUDED IN ENTITYSTATETOPLAYERSTATE: +;2264: s->modelindex2 = ps->weaponstate; +ADDRFP4 4 +INDIRP4 +CNSTI4 216 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 152 +ADDP4 +INDIRI4 +ASGNI4 +line 2265 +;2265: s->constantLight = ps->weaponChargeTime; +ADDRFP4 4 +INDIRP4 +CNSTI4 196 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 48 +ADDP4 +INDIRI4 +ASGNI4 +line 2267 +;2266: +;2267: VectorCopy(ps->lastHitLoc, s->origin2); +ADDRFP4 4 +INDIRP4 +CNSTI4 104 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 1356 +ADDP4 +INDIRB +ASGNB 12 +line 2269 +;2268: +;2269: s->isJediMaster = ps->isJediMaster; +ADDRFP4 4 +INDIRP4 +CNSTI4 244 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 604 +ADDP4 +INDIRI4 +ASGNI4 +line 2271 +;2270: +;2271: s->time2 = ps->holocronBits; +ADDRFP4 4 +INDIRP4 +CNSTI4 88 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 712 +ADDP4 +INDIRI4 +ASGNI4 +line 2272 +;2272:} +LABELV $774 +endproc BG_PlayerStateToEntityStateExtraPolate 28 0 +proc BG_SwingAngles 28 8 +line 2288 +;2273: +;2274:/* +;2275:============================================================================= +;2276: +;2277:PLAYER ANGLES +;2278: +;2279:============================================================================= +;2280:*/ +;2281: +;2282:/* +;2283:================== +;2284:BG_SwingAngles +;2285:================== +;2286:*/ +;2287:static void BG_SwingAngles( float destination, float swingTolerance, float clampTolerance, +;2288: float speed, float *angle, qboolean *swinging, int frameTime ) { +line 2293 +;2289: float swing; +;2290: float move; +;2291: float scale; +;2292: +;2293: if ( !*swinging ) { +ADDRFP4 20 +INDIRP4 +INDIRI4 +CNSTI4 0 +NEI4 $805 +line 2295 +;2294: // see if a swing should be started +;2295: swing = AngleSubtract( *angle, destination ); +ADDRFP4 16 +INDIRP4 +INDIRF4 +ARGF4 +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRLP4 12 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 2296 +;2296: if ( swing > swingTolerance || swing < -swingTolerance ) { +ADDRLP4 20 +ADDRFP4 4 +INDIRF4 +ASGNF4 +ADDRLP4 0 +INDIRF4 +ADDRLP4 20 +INDIRF4 +GTF4 $809 +ADDRLP4 0 +INDIRF4 +ADDRLP4 20 +INDIRF4 +NEGF4 +GEF4 $807 +LABELV $809 +line 2297 +;2297: *swinging = qtrue; +ADDRFP4 20 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 2298 +;2298: } +LABELV $807 +line 2299 +;2299: } +LABELV $805 +line 2301 +;2300: +;2301: if ( !*swinging ) { +ADDRFP4 20 +INDIRP4 +INDIRI4 +CNSTI4 0 +NEI4 $810 +line 2302 +;2302: return; +ADDRGP4 $804 +JUMPV +LABELV $810 +line 2307 +;2303: } +;2304: +;2305: // modify the speed depending on the delta +;2306: // so it doesn't seem so linear +;2307: swing = AngleSubtract( destination, *angle ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 16 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 12 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 2308 +;2308: scale = fabs( swing ); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 16 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 4 +ADDRLP4 16 +INDIRF4 +ASGNF4 +line 2309 +;2309: if ( scale < swingTolerance * 0.5 ) { +ADDRLP4 4 +INDIRF4 +CNSTF4 1056964608 +ADDRFP4 4 +INDIRF4 +MULF4 +GEF4 $812 +line 2310 +;2310: scale = 0.5; +ADDRLP4 4 +CNSTF4 1056964608 +ASGNF4 +line 2311 +;2311: } else if ( scale < swingTolerance ) { +ADDRGP4 $813 +JUMPV +LABELV $812 +ADDRLP4 4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +GEF4 $814 +line 2312 +;2312: scale = 1.0; +ADDRLP4 4 +CNSTF4 1065353216 +ASGNF4 +line 2313 +;2313: } else { +ADDRGP4 $815 +JUMPV +LABELV $814 +line 2314 +;2314: scale = 2.0; +ADDRLP4 4 +CNSTF4 1073741824 +ASGNF4 +line 2315 +;2315: } +LABELV $815 +LABELV $813 +line 2318 +;2316: +;2317: // swing towards the destination angle +;2318: if ( swing >= 0 ) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +LTF4 $816 +line 2319 +;2319: move = frameTime * scale * speed; +ADDRLP4 8 +ADDRFP4 24 +INDIRI4 +CVIF4 4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDRFP4 12 +INDIRF4 +MULF4 +ASGNF4 +line 2320 +;2320: if ( move >= swing ) { +ADDRLP4 8 +INDIRF4 +ADDRLP4 0 +INDIRF4 +LTF4 $818 +line 2321 +;2321: move = swing; +ADDRLP4 8 +ADDRLP4 0 +INDIRF4 +ASGNF4 +line 2322 +;2322: *swinging = qfalse; +ADDRFP4 20 +INDIRP4 +CNSTI4 0 +ASGNI4 +line 2323 +;2323: } +LABELV $818 +line 2324 +;2324: *angle = AngleMod( *angle + move ); +ADDRLP4 20 +ADDRFP4 16 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +ADDF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 2325 +;2325: } else if ( swing < 0 ) { +ADDRGP4 $817 +JUMPV +LABELV $816 +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $820 +line 2326 +;2326: move = frameTime * scale * -speed; +ADDRLP4 8 +ADDRFP4 24 +INDIRI4 +CVIF4 4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDRFP4 12 +INDIRF4 +NEGF4 +MULF4 +ASGNF4 +line 2327 +;2327: if ( move <= swing ) { +ADDRLP4 8 +INDIRF4 +ADDRLP4 0 +INDIRF4 +GTF4 $822 +line 2328 +;2328: move = swing; +ADDRLP4 8 +ADDRLP4 0 +INDIRF4 +ASGNF4 +line 2329 +;2329: *swinging = qfalse; +ADDRFP4 20 +INDIRP4 +CNSTI4 0 +ASGNI4 +line 2330 +;2330: } +LABELV $822 +line 2331 +;2331: *angle = AngleMod( *angle + move ); +ADDRLP4 20 +ADDRFP4 16 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +ADDF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 2332 +;2332: } +LABELV $820 +LABELV $817 +line 2335 +;2333: +;2334: // clamp to no more than tolerance +;2335: swing = AngleSubtract( destination, *angle ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 16 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 20 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 20 +INDIRF4 +ASGNF4 +line 2336 +;2336: if ( swing > clampTolerance ) { +ADDRLP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +LEF4 $824 +line 2337 +;2337: *angle = AngleMod( destination - (clampTolerance - 1) ); +ADDRFP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +CNSTF4 1065353216 +SUBF4 +SUBF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRFP4 16 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 2338 +;2338: } else if ( swing < -clampTolerance ) { +ADDRGP4 $825 +JUMPV +LABELV $824 +ADDRLP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +NEGF4 +GEF4 $826 +line 2339 +;2339: *angle = AngleMod( destination + (clampTolerance - 1) ); +ADDRFP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +CNSTF4 1065353216 +SUBF4 +ADDF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRFP4 16 +INDIRP4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 2340 +;2340: } +LABELV $826 +LABELV $825 +line 2341 +;2341:} +LABELV $804 +endproc BG_SwingAngles 28 8 +proc BG_AddPainTwitch 12 0 +line 2349 +;2342: +;2343:/* +;2344:================= +;2345:CG_AddPainTwitch +;2346:================= +;2347:*/ +;2348:#define PAIN_TWITCH_TIME 200 +;2349:static void BG_AddPainTwitch( int painTime, int painDirection, int currentTime, vec3_t torsoAngles ) { +line 2353 +;2350: int t; +;2351: float f; +;2352: +;2353: t = currentTime - painTime; +ADDRLP4 0 +ADDRFP4 8 +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ASGNI4 +line 2354 +;2354: if ( t >= PAIN_TWITCH_TIME ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 200 +LTI4 $829 +line 2355 +;2355: return; +ADDRGP4 $828 +JUMPV +LABELV $829 +line 2358 +;2356: } +;2357: +;2358: f = 1.0 - (float)t / PAIN_TWITCH_TIME; +ADDRLP4 4 +CNSTF4 1065353216 +ADDRLP4 0 +INDIRI4 +CVIF4 4 +CNSTF4 1128792064 +DIVF4 +SUBF4 +ASGNF4 +line 2360 +;2359: +;2360: if ( painDirection ) { +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $831 +line 2361 +;2361: torsoAngles[ROLL] += 20 * f; +ADDRLP4 8 +ADDRFP4 12 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CNSTF4 1101004800 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 2362 +;2362: } else { +ADDRGP4 $832 +JUMPV +LABELV $831 +line 2363 +;2363: torsoAngles[ROLL] -= 20 * f; +ADDRLP4 8 +ADDRFP4 12 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +CNSTF4 1101004800 +ADDRLP4 4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 2364 +;2364: } +LABELV $832 +line 2365 +;2365:} +LABELV $828 +endproc BG_AddPainTwitch 12 0 +data +align 4 +LABELV $834 +byte 4 0 +byte 4 22 +byte 4 45 +byte 4 -22 +byte 4 0 +byte 4 22 +byte 4 -45 +byte 4 -22 +export BG_G2PlayerAngles +code +proc BG_G2PlayerAngles 120 28 +line 2369 +;2366: +;2367:void BG_G2PlayerAngles( vec3_t startAngles, vec3_t legs[3], vec3_t legsAngles, int painTime, int painDirection, int currentTime, +;2368: qboolean *torso_yawing, float *torso_yawAngle, qboolean *torso_pitching, float *torso_pitchAngle, qboolean *legs_yawing, float *legs_yawAngle, +;2369: int frameTime, vec3_t velocity, int legsAnim, int torsoAnim, qboolean dead, float movementDir, void *ghoul2, qhandle_t *modelList, int weapon){ +line 2376 +;2370: vec3_t torsoAngles, headAngles; +;2371: float dest; +;2372: static int movementOffsets[8] = { 0, 22, 45, -22, 0, 22, -45, -22 }; +;2373: float speed; +;2374: int dir; +;2375: +;2376: VectorCopy( startAngles, headAngles ); +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 2377 +;2377: headAngles[YAW] = AngleMod( headAngles[YAW] ); +ADDRLP4 12+4 +INDIRF4 +ARGF4 +ADDRLP4 36 +ADDRGP4 AngleMod +CALLF4 +ASGNF4 +ADDRLP4 12+4 +ADDRLP4 36 +INDIRF4 +ASGNF4 +line 2378 +;2378: VectorClear( legsAngles ); +ADDRLP4 40 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 44 +CNSTF4 0 +ASGNF4 +ADDRLP4 40 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 44 +INDIRF4 +ASGNF4 +ADDRLP4 40 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 44 +INDIRF4 +ASGNF4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 44 +INDIRF4 +ASGNF4 +line 2379 +;2379: VectorClear( torsoAngles ); +ADDRLP4 48 +CNSTF4 0 +ASGNF4 +ADDRLP4 0+8 +ADDRLP4 48 +INDIRF4 +ASGNF4 +ADDRLP4 0+4 +ADDRLP4 48 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 48 +INDIRF4 +ASGNF4 +line 2384 +;2380: +;2381: // --------- yaw ------------- +;2382: +;2383: // allow yaw to drift a bit +;2384: if ( ( legsAnim & ~ANIM_TOGGLEBIT ) != WeaponReadyAnim[weapon] +ADDRLP4 52 +CNSTI4 -2049 +ASGNI4 +ADDRLP4 56 +ADDRFP4 80 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 WeaponReadyAnim +ADDP4 +INDIRI4 +ASGNI4 +ADDRFP4 56 +INDIRI4 +ADDRLP4 52 +INDIRI4 +BANDI4 +ADDRLP4 56 +INDIRI4 +NEI4 $841 +ADDRFP4 60 +INDIRI4 +ADDRLP4 52 +INDIRI4 +BANDI4 +ADDRLP4 56 +INDIRI4 +EQI4 $839 +LABELV $841 +line 2385 +;2385: || ( torsoAnim & ~ANIM_TOGGLEBIT ) != WeaponReadyAnim[weapon] ) { +line 2387 +;2386: // if not standing still, always point all in the same direction +;2387: *torso_yawing = qtrue; // always center +ADDRFP4 24 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 2388 +;2388: *torso_pitching = qtrue; // always center +ADDRFP4 32 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 2389 +;2389: *legs_yawing = qtrue; // always center +ADDRFP4 40 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 2390 +;2390: } +LABELV $839 +line 2393 +;2391: +;2392: // adjust legs for movement dir +;2393: if (dead ) { +ADDRFP4 64 +INDIRI4 +CNSTI4 0 +EQI4 $842 +line 2395 +;2394: // don't let dead bodies twitch +;2395: dir = 0; +ADDRLP4 28 +CNSTI4 0 +ASGNI4 +line 2396 +;2396: } else { +ADDRGP4 $843 +JUMPV +LABELV $842 +line 2397 +;2397: dir = movementDir; +ADDRLP4 28 +ADDRFP4 68 +INDIRF4 +CVFI4 4 +ASGNI4 +line 2401 +;2398:// if ( dir < 0 || dir > 7 ) { +;2399:// CG_Error( "Bad player movement angle" ); +;2400:// } +;2401: } +LABELV $843 +line 2402 +;2402: legsAngles[YAW] = headAngles[YAW] + movementOffsets[ dir ]; +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 12+4 +INDIRF4 +ADDRLP4 28 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $834 +ADDP4 +INDIRI4 +CVIF4 4 +ADDF4 +ASGNF4 +line 2403 +;2403: torsoAngles[YAW] = headAngles[YAW] + 0.25 * movementOffsets[ dir ]; +ADDRLP4 0+4 +ADDRLP4 12+4 +INDIRF4 +CNSTF4 1048576000 +ADDRLP4 28 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $834 +ADDP4 +INDIRI4 +CVIF4 4 +MULF4 +ADDF4 +ASGNF4 +line 2406 +;2404: +;2405: // torso +;2406: BG_SwingAngles( torsoAngles[YAW], 25, 90, /*cg_swingSpeed.value*/ 0.3, torso_yawAngle, torso_yawing, frameTime ); +ADDRLP4 0+4 +INDIRF4 +ARGF4 +CNSTF4 1103626240 +ARGF4 +CNSTF4 1119092736 +ARGF4 +CNSTF4 1050253722 +ARGF4 +ADDRFP4 28 +INDIRP4 +ARGP4 +ADDRFP4 24 +INDIRP4 +ARGP4 +ADDRFP4 48 +INDIRI4 +ARGI4 +ADDRGP4 BG_SwingAngles +CALLV +pop +line 2407 +;2407: BG_SwingAngles( legsAngles[YAW], 40, 90, /*cg_swingSpeed.value*/ 0.3, legs_yawAngle, legs_yawing, frameTime ); +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ARGF4 +CNSTF4 1109393408 +ARGF4 +CNSTF4 1119092736 +ARGF4 +CNSTF4 1050253722 +ARGF4 +ADDRFP4 44 +INDIRP4 +ARGP4 +ADDRFP4 40 +INDIRP4 +ARGP4 +ADDRFP4 48 +INDIRI4 +ARGI4 +ADDRGP4 BG_SwingAngles +CALLV +pop +line 2409 +;2408: +;2409: torsoAngles[YAW] = *torso_yawAngle; +ADDRLP4 0+4 +ADDRFP4 28 +INDIRP4 +INDIRF4 +ASGNF4 +line 2410 +;2410: legsAngles[YAW] = *legs_yawAngle; +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRFP4 44 +INDIRP4 +INDIRF4 +ASGNF4 +line 2415 +;2411: +;2412: // --------- pitch ------------- +;2413: +;2414: // only show a fraction of the pitch angle in the torso +;2415: if ( headAngles[PITCH] > 180 ) { +ADDRLP4 12 +INDIRF4 +CNSTF4 1127481344 +LEF4 $849 +line 2416 +;2416: dest = (-360 + headAngles[PITCH]) * 0.75; +ADDRLP4 32 +CNSTF4 1061158912 +ADDRLP4 12 +INDIRF4 +CNSTF4 3283353600 +ADDF4 +MULF4 +ASGNF4 +line 2417 +;2417: } else { +ADDRGP4 $850 +JUMPV +LABELV $849 +line 2418 +;2418: dest = headAngles[PITCH] * 0.75; +ADDRLP4 32 +CNSTF4 1061158912 +ADDRLP4 12 +INDIRF4 +MULF4 +ASGNF4 +line 2419 +;2419: } +LABELV $850 +line 2420 +;2420: BG_SwingAngles( dest, 15, 30, 0.1, torso_pitchAngle, torso_pitching, frameTime ); +ADDRLP4 32 +INDIRF4 +ARGF4 +CNSTF4 1097859072 +ARGF4 +CNSTF4 1106247680 +ARGF4 +CNSTF4 1036831949 +ARGF4 +ADDRFP4 36 +INDIRP4 +ARGP4 +ADDRFP4 32 +INDIRP4 +ARGP4 +ADDRFP4 48 +INDIRI4 +ARGI4 +ADDRGP4 BG_SwingAngles +CALLV +pop +line 2421 +;2421: torsoAngles[PITCH] = *torso_pitchAngle; +ADDRLP4 0 +ADDRFP4 36 +INDIRP4 +INDIRF4 +ASGNF4 +line 2426 +;2422: +;2423: // --------- roll ------------- +;2424: +;2425: // lean towards the direction of travel +;2426: speed = VectorNormalize( velocity ); +ADDRFP4 52 +INDIRP4 +ARGP4 +ADDRLP4 60 +ADDRGP4 VectorNormalize +CALLF4 +ASGNF4 +ADDRLP4 24 +ADDRLP4 60 +INDIRF4 +ASGNF4 +line 2427 +;2427: if ( speed ) { +ADDRLP4 24 +INDIRF4 +CNSTF4 0 +EQF4 $851 +line 2431 +;2428: vec3_t axis[3]; +;2429: float side; +;2430: +;2431: speed *= 0.05; +ADDRLP4 24 +CNSTF4 1028443341 +ADDRLP4 24 +INDIRF4 +MULF4 +ASGNF4 +line 2433 +;2432: +;2433: AnglesToAxis( legsAngles, axis ); +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 64 +ARGP4 +ADDRGP4 AnglesToAxis +CALLV +pop +line 2434 +;2434: side = speed * DotProduct( velocity, axis[1] ); +ADDRLP4 104 +ADDRFP4 52 +INDIRP4 +ASGNP4 +ADDRLP4 100 +ADDRLP4 24 +INDIRF4 +ADDRLP4 104 +INDIRP4 +INDIRF4 +ADDRLP4 64+12 +INDIRF4 +MULF4 +ADDRLP4 104 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 64+12+4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 104 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 64+12+8 +INDIRF4 +MULF4 +ADDF4 +MULF4 +ASGNF4 +line 2435 +;2435: legsAngles[ROLL] -= side; +ADDRLP4 108 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 108 +INDIRP4 +ADDRLP4 108 +INDIRP4 +INDIRF4 +ADDRLP4 100 +INDIRF4 +SUBF4 +ASGNF4 +line 2437 +;2436: +;2437: side = speed * DotProduct( velocity, axis[0] ); +ADDRLP4 112 +ADDRFP4 52 +INDIRP4 +ASGNP4 +ADDRLP4 100 +ADDRLP4 24 +INDIRF4 +ADDRLP4 112 +INDIRP4 +INDIRF4 +ADDRLP4 64 +INDIRF4 +MULF4 +ADDRLP4 112 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 64+4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 112 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 64+8 +INDIRF4 +MULF4 +ADDF4 +MULF4 +ASGNF4 +line 2438 +;2438: legsAngles[PITCH] += side; +ADDRLP4 116 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 116 +INDIRP4 +ADDRLP4 116 +INDIRP4 +INDIRF4 +ADDRLP4 100 +INDIRF4 +ADDF4 +ASGNF4 +line 2439 +;2439: } +LABELV $851 +line 2442 +;2440: +;2441: // pain twitch +;2442: BG_AddPainTwitch( painTime, painDirection, currentTime, torsoAngles ); +ADDRFP4 12 +INDIRI4 +ARGI4 +ADDRFP4 16 +INDIRI4 +ARGI4 +ADDRFP4 20 +INDIRI4 +ARGI4 +ADDRLP4 0 +ARGP4 +ADDRGP4 BG_AddPainTwitch +CALLV +pop +line 2445 +;2443: +;2444: // pull the angles back out of the hierarchial chain +;2445: AnglesSubtract( headAngles, torsoAngles, headAngles ); +ADDRLP4 12 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRGP4 AnglesSubtract +CALLV +pop +line 2446 +;2446: AnglesSubtract( torsoAngles, legsAngles, torsoAngles ); +ADDRLP4 0 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 AnglesSubtract +CALLV +pop +line 2447 +;2447: AnglesToAxis( legsAngles, legs ); +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 AnglesToAxis +CALLV +pop +line 2452 +;2448: // we assume that model 0 is the player model. +;2449://g2r trap_G2API_SetBoneAngles(ghoul2, 0, "upper_lumbar", torsoAngles, BONE_ANGLES_POSTMULT, POSITIVE_X, NEGATIVE_Y, NEGATIVE_Z, modelList, 0, currentTime); +;2450://g2r trap_G2API_SetBoneAngles(ghoul2, 0, "cranium", headAngles, BONE_ANGLES_POSTMULT, POSITIVE_Z, NEGATIVE_Y, POSITIVE_X, modelList,0, currentTime); +;2451: +;2452:} +LABELV $833 +endproc BG_G2PlayerAngles 120 28 +data +align 4 +LABELV bg_poolSize +byte 4 0 +align 4 +LABELV bg_poolTail +byte 4 2048000 +export BG_Alloc +code +proc BG_Alloc 8 16 +line 2461 +;2453: +;2454:#define MAX_POOL_SIZE 2048000 //1024000 +;2455: +;2456:static char bg_pool[MAX_POOL_SIZE]; +;2457:static int bg_poolSize = 0; +;2458:static int bg_poolTail = MAX_POOL_SIZE; +;2459: +;2460:void *BG_Alloc ( int size ) +;2461:{ +line 2462 +;2462: bg_poolSize = ((bg_poolSize + 0x00000003) & 0xfffffffc); +ADDRLP4 0 +ADDRGP4 bg_poolSize +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +CNSTI4 3 +ADDI4 +CVIU4 4 +CNSTU4 4294967292 +BANDU4 +CVUI4 4 +ASGNI4 +line 2464 +;2463: +;2464: if (bg_poolSize + size > bg_poolTail) +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ADDRGP4 bg_poolTail +INDIRI4 +LEI4 $861 +line 2465 +;2465: { +line 2466 +;2466: Com_Error( ERR_DROP, "BG_Alloc: buffer exceeded tail (%d > %d)", bg_poolSize + size, bg_poolTail); +CNSTI4 1 +ARGI4 +ADDRGP4 $863 +ARGP4 +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ARGI4 +ADDRGP4 bg_poolTail +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 2467 +;2467: return 0; +CNSTP4 0 +RETP4 +ADDRGP4 $860 +JUMPV +LABELV $861 +line 2470 +;2468: } +;2469: +;2470: bg_poolSize += size; +ADDRLP4 4 +ADDRGP4 bg_poolSize +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 2472 +;2471: +;2472: return &bg_pool[bg_poolSize-size]; +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ADDRGP4 bg_pool +ADDP4 +RETP4 +LABELV $860 +endproc BG_Alloc 8 16 +export BG_AllocUnaligned +proc BG_AllocUnaligned 4 16 +line 2476 +;2473:} +;2474: +;2475:void *BG_AllocUnaligned ( int size ) +;2476:{ +line 2477 +;2477: if (bg_poolSize + size > bg_poolTail) +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ADDRGP4 bg_poolTail +INDIRI4 +LEI4 $865 +line 2478 +;2478: { +line 2479 +;2479: Com_Error( ERR_DROP, "BG_AllocUnaligned: buffer exceeded tail (%d > %d)", bg_poolSize + size, bg_poolTail); +CNSTI4 1 +ARGI4 +ADDRGP4 $867 +ARGP4 +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ARGI4 +ADDRGP4 bg_poolTail +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 2480 +;2480: return 0; +CNSTP4 0 +RETP4 +ADDRGP4 $864 +JUMPV +LABELV $865 +line 2483 +;2481: } +;2482: +;2483: bg_poolSize += size; +ADDRLP4 0 +ADDRGP4 bg_poolSize +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 2485 +;2484: +;2485: return &bg_pool[bg_poolSize-size]; +ADDRGP4 bg_poolSize +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ADDRGP4 bg_pool +ADDP4 +RETP4 +LABELV $864 +endproc BG_AllocUnaligned 4 16 +export BG_TempAlloc +proc BG_TempAlloc 4 16 +line 2489 +;2486:} +;2487: +;2488:void *BG_TempAlloc( int size ) +;2489:{ +line 2490 +;2490: size = ((size + 0x00000003) & 0xfffffffc); +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 3 +ADDI4 +CVIU4 4 +CNSTU4 4294967292 +BANDU4 +CVUI4 4 +ASGNI4 +line 2492 +;2491: +;2492: if (bg_poolTail - size < bg_poolSize) +ADDRGP4 bg_poolTail +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ADDRGP4 bg_poolSize +INDIRI4 +GEI4 $869 +line 2493 +;2493: { +line 2494 +;2494: Com_Error( ERR_DROP, "BG_TempAlloc: buffer exceeded head (%d > %d)", bg_poolTail - size, bg_poolSize); +CNSTI4 1 +ARGI4 +ADDRGP4 $871 +ARGP4 +ADDRGP4 bg_poolTail +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ARGI4 +ADDRGP4 bg_poolSize +INDIRI4 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 2495 +;2495: return 0; +CNSTP4 0 +RETP4 +ADDRGP4 $868 +JUMPV +LABELV $869 +line 2498 +;2496: } +;2497: +;2498: bg_poolTail -= size; +ADDRLP4 0 +ADDRGP4 bg_poolTail +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +SUBI4 +ASGNI4 +line 2500 +;2499: +;2500: return &bg_pool[bg_poolTail]; +ADDRGP4 bg_poolTail +INDIRI4 +ADDRGP4 bg_pool +ADDP4 +RETP4 +LABELV $868 +endproc BG_TempAlloc 4 16 +export BG_TempFree +proc BG_TempFree 4 16 +line 2504 +;2501:} +;2502: +;2503:void BG_TempFree( int size ) +;2504:{ +line 2505 +;2505: size = ((size + 0x00000003) & 0xfffffffc); +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 3 +ADDI4 +CVIU4 4 +CNSTU4 4294967292 +BANDU4 +CVUI4 4 +ASGNI4 +line 2507 +;2506: +;2507: if (bg_poolTail+size > MAX_POOL_SIZE) +ADDRGP4 bg_poolTail +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +CNSTI4 2048000 +LEI4 $873 +line 2508 +;2508: { +line 2509 +;2509: Com_Error( ERR_DROP, "BG_TempFree: tail greater than size (%d > %d)", bg_poolTail+size, MAX_POOL_SIZE ); +CNSTI4 1 +ARGI4 +ADDRGP4 $875 +ARGP4 +ADDRGP4 bg_poolTail +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ARGI4 +CNSTI4 2048000 +ARGI4 +ADDRGP4 Com_Error +CALLV +pop +line 2510 +;2510: } +LABELV $873 +line 2512 +;2511: +;2512: bg_poolTail += size; +ADDRLP4 0 +ADDRGP4 bg_poolTail +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 2513 +;2513:} +LABELV $872 +endproc BG_TempFree 4 16 +export BG_StringAlloc +proc BG_StringAlloc 12 8 +line 2516 +;2514: +;2515:char *BG_StringAlloc ( const char *source ) +;2516:{ +line 2519 +;2517: char *dest; +;2518: +;2519: dest = BG_Alloc ( strlen ( source ) + 1 ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRLP4 8 +ADDRGP4 BG_Alloc +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 2520 +;2520: strcpy ( dest, source ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 2521 +;2521: return dest; +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $876 +endproc BG_StringAlloc 12 8 +export BG_OutOfMemory +proc BG_OutOfMemory 4 0 +line 2525 +;2522:} +;2523: +;2524:qboolean BG_OutOfMemory ( void ) +;2525:{ +line 2526 +;2526: return bg_poolSize >= MAX_POOL_SIZE; +ADDRGP4 bg_poolSize +INDIRI4 +CNSTI4 2048000 +LTI4 $879 +ADDRLP4 0 +CNSTI4 1 +ASGNI4 +ADDRGP4 $880 +JUMPV +LABELV $879 +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $880 +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $877 +endproc BG_OutOfMemory 4 0 +bss +align 1 +LABELV bg_pool +skip 2048000 +import g2WeaponInstances +import CG_CheckPlayerG2Weapons +import CG_CopyG2WeaponInstance +import CG_ShutDownG2Weapons +import CG_InitG2Weapons +import CG_CreateBBRefEnts +import CG_SetGhoul2Info +import CG_Init_CGents +import CG_Init_CG +import trap_G2API_SetNewOrigin +import trap_G2API_SetSurfaceOnOff +import trap_G2API_SetRootSurface +import trap_G2API_SetBoneAnim +import trap_G2API_GetGLAName +import trap_G2API_SetBoneAngles +import trap_G2API_CleanGhoul2Models +import trap_G2API_SetBoltInfo +import trap_G2API_AddBolt +import trap_G2API_RemoveGhoul2Model +import trap_G2API_HasGhoul2ModelOnIndex +import trap_G2API_DuplicateGhoul2Instance +import trap_G2API_CopySpecificGhoul2Model +import trap_G2API_CopyGhoul2Instance +import trap_G2API_GiveMeVectorFromMatrix +import trap_G2API_InitGhoul2Model +import trap_G2API_GetBoltMatrix_NoReconstruct +import trap_G2API_GetBoltMatrix +import trap_G2_HaveWeGhoul2Models +import trap_G2_SetGhoul2ModelIndexes +import trap_G2_ListModelBones +import trap_G2_ListModelSurfaces +import FX_ForceDrained +import FX_BlasterWeaponHitPlayer +import FX_BlasterWeaponHitWall +import FX_BlasterAltFireThink +import FX_BlasterProjectileThink +import FX_BryarAltHitPlayer +import FX_BryarHitPlayer +import FX_BryarAltHitWall +import FX_BryarHitWall +import CG_Spark +import FX_TurretHitPlayer +import FX_TurretHitWall +import FX_TurretProjectileThink +import CG_NewParticleArea +import initparticles +import CG_GetStripEdString +import CG_ParticleExplosion +import CG_ParticleMisc +import CG_ParticleDust +import CG_ParticleSparks +import CG_ParticleBulletDebris +import CG_ParticleSnowFlurry +import CG_AddParticleShrapnel +import CG_ParticleSmoke +import CG_ParticleSnow +import CG_AddParticles +import CG_ClearParticles +import trap_ROFF_Purge_Ent +import trap_ROFF_Play +import trap_ROFF_Cache +import trap_ROFF_UpdateEntities +import trap_ROFF_Clean +import trap_CG_RegisterSharedMemory +import trap_SP_GetStringTextString +import trap_SP_Print +import trap_FX_AddSprite +import trap_FX_AddPrimitive +import trap_FX_AddBezier +import trap_FX_AddPoly +import trap_FX_AdjustTime +import trap_FX_FreeSystem +import trap_FX_InitSystem +import trap_FX_AddScheduledEffects +import trap_FX_PlayBoltedEffectID +import trap_FX_PlayEntityEffectID +import trap_FX_PlayEffectID +import trap_FX_PlaySimpleEffectID +import trap_FX_PlayEntityEffect +import trap_FX_PlayEffect +import trap_FX_PlaySimpleEffect +import trap_FX_RegisterEffect +import trap_R_inPVS +import trap_GetEntityToken +import trap_getCameraInfo +import trap_startCamera +import trap_loadCamera +import trap_SnapVector +import trap_CIN_SetExtents +import trap_CIN_DrawCinematic +import trap_CIN_RunCinematic +import trap_CIN_StopCinematic +import trap_CIN_PlayCinematic +import trap_Key_GetKey +import trap_Key_SetCatcher +import trap_Key_GetCatcher +import trap_Key_IsDown +import trap_MemoryRemaining +import testPrintFloat +import testPrintInt +import trap_OpenUIMenu +import trap_SetClientTurnExtent +import trap_SetClientForceAngle +import trap_SetUserCmdValue +import trap_GetUserCmd +import trap_GetCurrentCmdNumber +import trap_GetServerCommand +import trap_GetSnapshot +import trap_GetCurrentSnapshotNumber +import trap_GetGameState +import trap_GetGlconfig +import trap_FX_AddLine +import trap_R_GetBModelVerts +import trap_R_SetLightStyle +import trap_R_GetLightStyle +import trap_R_RemapShader +import trap_R_DrawRotatePic2 +import trap_R_DrawRotatePic +import trap_R_LerpTag +import trap_R_ModelBounds +import trap_R_DrawStretchPic +import trap_R_SetColor +import trap_R_RenderScene +import trap_R_LightForPoint +import trap_R_AddLightToScene +import trap_R_AddPolysToScene +import trap_R_AddPolyToScene +import trap_R_AddRefEntityToScene +import trap_R_ClearScene +import trap_AnyLanguage_ReadCharFromString +import trap_R_Font_DrawString +import trap_R_Font_HeightPixels +import trap_R_Font_StrLenChars +import trap_R_Font_StrLenPixels +import trap_R_RegisterFont +import trap_R_RegisterShaderNoMip +import trap_R_RegisterShader +import trap_R_RegisterSkin +import trap_R_RegisterModel +import trap_R_LoadWorldMap +import trap_S_StopBackgroundTrack +import trap_S_StartBackgroundTrack +import trap_S_RegisterSound +import trap_S_Respatialize +import trap_S_UpdateEntityPosition +import trap_S_AddRealLoopingSound +import trap_S_AddLoopingSound +import trap_S_ClearLoopingSounds +import trap_S_StartLocalSound +import trap_S_StopLoopingSound +import trap_S_StartSound +import trap_S_MuteSound +import trap_CM_MarkFragments +import trap_CM_TransformedBoxTrace +import trap_CM_BoxTrace +import trap_CM_TransformedPointContents +import trap_CM_PointContents +import trap_CM_TempBoxModel +import trap_CM_InlineModel +import trap_CM_NumInlineModels +import trap_CM_LoadMap +import trap_UpdateScreen +import trap_SendClientCommand +import trap_AddCommand +import trap_SendConsoleCommand +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Args +import trap_Argv +import trap_Argc +import trap_Cvar_VariableStringBuffer +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_Milliseconds +import trap_Error +import trap_Print +import CG_SagaObjectiveCompleted +import CG_SagaRoundOver +import CG_InitSagaMode +import CG_CheckChangedPredictableEvents +import CG_TransitionPlayerState +import CG_Respawn +import CG_IsMindTricked +import CG_PlayBufferedVoiceChats +import CG_VoiceChatLocal +import CG_ShaderStateChanged +import CG_LoadVoiceChats +import CG_SetConfigValues +import CG_ParseServerinfo +import CG_ExecuteNewServerCommands +import CG_InitConsoleCommands +import CG_ConsoleCommand +import CG_DrawOldTourneyScoreboard +import CG_DrawOldScoreboard +import CG_DrawInformation +import CG_LoadingClient +import CG_LoadingItem +import CG_LoadingString +import CG_ProcessSnapshots +import CG_InitGlass +import CG_TestLine +import CG_SurfaceExplosion +import CG_MakeExplosion +import CG_Bleed +import CG_BigExplode +import CG_GibPlayer +import CG_ScorePlum +import CG_CreateDebris +import CG_GlassShatter +import CG_BubbleTrail +import CG_SmokePuff +import CG_AddLocalEntities +import CG_AllocLocalEntity +import CG_InitLocalEntities +import CG_ImpactMark +import CG_AddMarks +import CG_InitMarkPolys +import CG_OutOfAmmoChange +import CG_DrawIconBackground +import CG_DrawWeaponSelect +import CG_AddPlayerWeapon +import CG_AddViewWeapon +import CG_MissileHitPlayer +import CG_MissileHitWall +import CG_FireWeapon +import CG_RegisterItemVisuals +import CG_RegisterWeapon +import CG_Weapon_f +import CG_PrevWeapon_f +import CG_NextWeapon_f +import CG_GetClientWeaponMuzzleBoltPoint +import TurretClientRun +import ScaleModelAxis +import CG_PositionRotatedEntityOnTag +import CG_PositionEntityOnTag +import CG_AdjustPositionForMover +import CG_Beam +import CG_ManualEntityRender +import CG_AddPacketEntities +import CG_SetEntitySoundPosition +import CG_ReattachLimb +import CG_PainEvent +import CG_EntityEvent +import CG_PlaceString +import CG_CheckEvents +import CG_LoadDeferredPlayers +import CG_PredictPlayerState +import CG_Trace +import CG_PointContents +import CG_BuildSolidList +import CG_PlayerShieldHit +import CG_CustomSound +import CG_NewClientInfo +import CG_AddRefEntityWithPowerups +import CG_ResetPlayerEntity +import CG_Player +import CG_StatusHandle +import CG_OtherTeamHasFlag +import CG_YourTeamHasFlag +import CG_GameTypeString +import CG_CheckOrderPending +import CG_Text_PaintChar +import CG_Draw3DModel +import CG_GetKillerText +import CG_GetGameStatusText +import CG_GetTeamColor +import CG_InitTeamChat +import CG_SetPrintString +import CG_ShowResponseHead +import CG_DeferMenuScript +import CG_RunMenuScript +import CG_OwnerDrawVisible +import CG_GetValue +import CG_SelectNextPlayer +import CG_SelectPrevPlayer +import CG_Text_Height +import CG_Text_Width +import CG_Text_Paint +import CG_OwnerDraw +import CG_DrawTeamBackground +import CG_DrawFlagModel +import CG_DrawActive +import CG_DrawHead +import CG_CenterPrint +import CG_AddLagometerSnapshotInfo +import CG_AddLagometerFrameInfo +import teamChat2 +import teamChat1 +import systemChat +import drawTeamOverlayModificationCount +import numSortedTeamPlayers +import sortedTeamPlayers +import CG_DrawTopBottom +import CG_DrawSides +import CG_DrawRect +import UI_DrawScaledProportionalString +import UI_DrawProportionalString +import CG_GetColorForHealth +import CG_ColorForHealth +import CG_TileClear +import CG_TeamColor +import CG_FadeColor +import CG_DrawStrlen +import CG_DrawSmallStringColor +import CG_DrawSmallString +import CG_DrawBigStringColor +import CG_DrawBigString +import CG_DrawStringExt +import CG_DrawNumField +import CG_DrawString +import CG_DrawRotatePic2 +import CG_DrawRotatePic +import CG_DrawPic +import CG_FillRect +import CG_TestModelAnimate_f +import CG_TestModelSetAnglespost_f +import CG_TestModelSetAnglespre_f +import CG_ListModelBones_f +import CG_ListModelSurfaces_f +import CG_TestModelSurfaceOnOff_f +import CG_TestG2Model_f +import CG_DrawActiveFrame +import CG_AddBufferedSound +import CG_ZoomUp_f +import CG_ZoomDown_f +import CG_TestModelPrevSkin_f +import CG_TestModelNextSkin_f +import CG_TestModelPrevFrame_f +import CG_TestModelNextFrame_f +import CG_TestGun_f +import CG_TestModel_f +import CG_PrevForcePower_f +import CG_NextForcePower_f +import CG_PrevInventory_f +import CG_NextInventory_f +import CG_BuildSpectatorString +import CG_SetScoreSelection +import CG_RankRunFrame +import CG_EventHandling +import CG_MouseEvent +import CG_KeyEvent +import CG_LoadMenus +import CG_LastAttacker +import CG_CrosshairPlayer +import CG_UpdateCvars +import CG_StartMusic +import CG_Error +import CG_Printf +import CG_Argv +import CG_ConfigString +import cg_debugBB +import ui_myteam +import cg_recordSPDemoName +import cg_recordSPDemo +import cg_singlePlayerActive +import cg_enableBreath +import cg_enableDust +import cg_singlePlayer +import cg_currentSelectedPlayerName +import cg_currentSelectedPlayer +import cg_blueTeamName +import cg_redTeamName +import cg_trueLightning +import cg_noProjectileTrail +import cg_noTaunt +import cg_bigFont +import cg_smallFont +import cg_cameraMode +import cg_timescale +import cg_timescaleFadeSpeed +import cg_timescaleFadeEnd +import cg_cameraOrbitDelay +import cg_cameraOrbit +import pmove_msec +import pmove_fixed +import cg_smoothClients +import cg_hudFiles +import cg_scorePlum +import cg_noVoiceText +import cg_noVoiceChats +import cg_teamChatsOnly +import cg_drawFriend +import cg_deferPlayers +import cg_predictItems +import cg_blood +import cg_paused +import cg_buildScript +import cg_forceModel +import cg_stats +import cg_teamChatHeight +import cg_teamChatTime +import cg_synchronousClients +import cg_drawEnemyInfo +import cg_lagometer +import cg_stereoSeparation +import cg_thirdPersonHorzOffset +import cg_thirdPersonAlpha +import cg_thirdPersonTargetDamp +import cg_thirdPersonCameraDamp +import cg_thirdPersonVertOffset +import cg_thirdPersonPitchOffset +import cg_thirdPersonAngle +import cg_thirdPersonRange +import cg_thirdPerson +import cg_dismember +import cg_animBlend +import cg_auraShell +import cg_speedTrail +import cg_saberTrail +import cg_saberContact +import cg_swingAngles +import cg_zoomFov +import cg_fov +import cg_simpleItems +import cg_ignore +import cg_autoswitch +import cg_tracerLength +import cg_tracerWidth +import cg_tracerChance +import cg_viewsize +import cg_drawGun +import cg_gun_z +import cg_gun_y +import cg_gun_x +import cg_gun_frame +import cg_addMarks +import cg_footsteps +import cg_showmiss +import cg_noPlayerAnims +import cg_nopredict +import cg_errorDecay +import cg_debugEvents +import cg_debugPosition +import cg_debugAnim +import cg_animSpeed +import cg_draw2D +import cg_drawStatus +import cg_crosshairHealth +import cg_crosshairSize +import cg_crosshairY +import cg_crosshairX +import cg_teamOverlayUserinfo +import cg_drawTeamOverlay +import cg_drawRewards +import cg_dynamicCrosshair +import cg_drawScores +import cg_drawCrosshairNames +import cg_drawCrosshair +import cg_drawAmmoWarning +import cg_drawIcons +import cg_draw3dIcons +import cg_drawSnapshot +import cg_drawFPS +import cg_drawTimer +import cg_gibs +import cg_shadows +import cg_bobroll +import cg_bobpitch +import cg_bobup +import cg_runroll +import cg_runpitch +import cg_centertime +import cg_markPolys +import cg_items +import cg_weapons +import cg_entities +import cg +import cgs +import CGCam_SetMusicMult +import CGCam_Shake +import cgScreenEffects +import ammoTicPos +import forceTicPos +import BG_ParseAnimationFile +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import saberMoveData +import Pmove +import PM_UpdateViewAngles +import pm +import bgGlobalAnimations +import BGPAFtextLoaded +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $875 +char 1 66 +char 1 71 +char 1 95 +char 1 84 +char 1 101 +char 1 109 +char 1 112 +char 1 70 +char 1 114 +char 1 101 +char 1 101 +char 1 58 +char 1 32 +char 1 116 +char 1 97 +char 1 105 +char 1 108 +char 1 32 +char 1 103 +char 1 114 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 32 +char 1 116 +char 1 104 +char 1 97 +char 1 110 +char 1 32 +char 1 115 +char 1 105 +char 1 122 +char 1 101 +char 1 32 +char 1 40 +char 1 37 +char 1 100 +char 1 32 +char 1 62 +char 1 32 +char 1 37 +char 1 100 +char 1 41 +char 1 0 +align 1 +LABELV $871 +char 1 66 +char 1 71 +char 1 95 +char 1 84 +char 1 101 +char 1 109 +char 1 112 +char 1 65 +char 1 108 +char 1 108 +char 1 111 +char 1 99 +char 1 58 +char 1 32 +char 1 98 +char 1 117 +char 1 102 +char 1 102 +char 1 101 +char 1 114 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 104 +char 1 101 +char 1 97 +char 1 100 +char 1 32 +char 1 40 +char 1 37 +char 1 100 +char 1 32 +char 1 62 +char 1 32 +char 1 37 +char 1 100 +char 1 41 +char 1 0 +align 1 +LABELV $867 +char 1 66 +char 1 71 +char 1 95 +char 1 65 +char 1 108 +char 1 108 +char 1 111 +char 1 99 +char 1 85 +char 1 110 +char 1 97 +char 1 108 +char 1 105 +char 1 103 +char 1 110 +char 1 101 +char 1 100 +char 1 58 +char 1 32 +char 1 98 +char 1 117 +char 1 102 +char 1 102 +char 1 101 +char 1 114 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 116 +char 1 97 +char 1 105 +char 1 108 +char 1 32 +char 1 40 +char 1 37 +char 1 100 +char 1 32 +char 1 62 +char 1 32 +char 1 37 +char 1 100 +char 1 41 +char 1 0 +align 1 +LABELV $863 +char 1 66 +char 1 71 +char 1 95 +char 1 65 +char 1 108 +char 1 108 +char 1 111 +char 1 99 +char 1 58 +char 1 32 +char 1 98 +char 1 117 +char 1 102 +char 1 102 +char 1 101 +char 1 114 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 32 +char 1 116 +char 1 97 +char 1 105 +char 1 108 +char 1 32 +char 1 40 +char 1 37 +char 1 100 +char 1 32 +char 1 62 +char 1 32 +char 1 37 +char 1 100 +char 1 41 +char 1 0 +align 1 +LABELV $735 +char 1 69 +char 1 86 +char 1 95 +char 1 66 +char 1 79 +char 1 68 +char 1 89 +char 1 95 +char 1 81 +char 1 85 +char 1 69 +char 1 85 +char 1 69 +char 1 95 +char 1 67 +char 1 79 +char 1 80 +char 1 89 +char 1 0 +align 1 +LABELV $734 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 80 +char 1 65 +char 1 84 +char 1 82 +char 1 79 +char 1 76 +char 1 0 +align 1 +LABELV $733 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 71 +char 1 85 +char 1 65 +char 1 82 +char 1 68 +char 1 66 +char 1 65 +char 1 83 +char 1 69 +char 1 0 +align 1 +LABELV $732 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 71 +char 1 69 +char 1 84 +char 1 70 +char 1 76 +char 1 65 +char 1 71 +char 1 0 +align 1 +LABELV $731 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 70 +char 1 79 +char 1 76 +char 1 76 +char 1 79 +char 1 87 +char 1 77 +char 1 69 +char 1 0 +align 1 +LABELV $730 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 78 +char 1 79 +char 1 0 +align 1 +LABELV $729 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 95 +char 1 89 +char 1 69 +char 1 83 +char 1 0 +align 1 +LABELV $728 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 65 +char 1 85 +char 1 78 +char 1 84 +char 1 0 +align 1 +LABELV $727 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 65 +char 1 82 +char 1 84 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 73 +char 1 78 +char 1 71 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $726 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 76 +char 1 79 +char 1 79 +char 1 80 +char 1 73 +char 1 78 +char 1 71 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $725 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 69 +char 1 83 +char 1 84 +char 1 76 +char 1 73 +char 1 78 +char 1 69 +char 1 0 +align 1 +LABELV $724 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 66 +char 1 85 +char 1 71 +char 1 95 +char 1 76 +char 1 73 +char 1 78 +char 1 69 +char 1 0 +align 1 +LABELV $723 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 72 +char 1 73 +char 1 69 +char 1 76 +char 1 68 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $722 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 95 +char 1 67 +char 1 72 +char 1 65 +char 1 82 +char 1 71 +char 1 69 +char 1 95 +char 1 65 +char 1 76 +char 1 84 +char 1 0 +align 1 +LABELV $721 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 95 +char 1 67 +char 1 72 +char 1 65 +char 1 82 +char 1 71 +char 1 69 +char 1 0 +align 1 +LABELV $720 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 69 +char 1 84 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 65 +char 1 66 +char 1 76 +char 1 69 +char 1 0 +align 1 +LABELV $719 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 69 +char 1 84 +char 1 95 +char 1 70 +char 1 82 +char 1 69 +char 1 69 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $718 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 73 +char 1 86 +char 1 69 +char 1 95 +char 1 78 +char 1 69 +char 1 87 +char 1 95 +char 1 82 +char 1 65 +char 1 78 +char 1 75 +char 1 0 +align 1 +LABELV $717 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 83 +char 1 84 +char 1 82 +char 1 79 +char 1 89 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 95 +char 1 77 +char 1 79 +char 1 68 +char 1 69 +char 1 76 +char 1 0 +align 1 +LABELV $716 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 83 +char 1 84 +char 1 82 +char 1 79 +char 1 89 +char 1 95 +char 1 71 +char 1 72 +char 1 79 +char 1 85 +char 1 76 +char 1 50 +char 1 95 +char 1 73 +char 1 78 +char 1 83 +char 1 84 +char 1 65 +char 1 78 +char 1 67 +char 1 69 +char 1 0 +align 1 +LABELV $715 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 71 +char 1 65 +char 1 95 +char 1 79 +char 1 66 +char 1 74 +char 1 69 +char 1 67 +char 1 84 +char 1 73 +char 1 86 +char 1 69 +char 1 67 +char 1 79 +char 1 77 +char 1 80 +char 1 76 +char 1 69 +char 1 84 +char 1 69 +char 1 0 +align 1 +LABELV $714 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 71 +char 1 65 +char 1 95 +char 1 82 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 79 +char 1 86 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $713 +char 1 69 +char 1 86 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 77 +char 1 69 +char 1 83 +char 1 83 +char 1 65 +char 1 71 +char 1 69 +char 1 0 +align 1 +LABELV $712 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 67 +char 1 79 +char 1 82 +char 1 69 +char 1 80 +char 1 76 +char 1 85 +char 1 77 +char 1 0 +align 1 +LABELV $711 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 73 +char 1 66 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $710 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 82 +char 1 67 +char 1 69 +char 1 95 +char 1 68 +char 1 82 +char 1 65 +char 1 73 +char 1 78 +char 1 69 +char 1 68 +char 1 0 +align 1 +LABELV $709 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 85 +char 1 80 +char 1 95 +char 1 66 +char 1 65 +char 1 84 +char 1 84 +char 1 76 +char 1 69 +char 1 83 +char 1 85 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $708 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 85 +char 1 80 +char 1 95 +char 1 81 +char 1 85 +char 1 65 +char 1 68 +char 1 0 +align 1 +LABELV $707 +char 1 69 +char 1 86 +char 1 95 +char 1 79 +char 1 66 +char 1 73 +char 1 84 +char 1 85 +char 1 65 +char 1 82 +char 1 89 +char 1 0 +align 1 +LABELV $706 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 51 +char 1 0 +align 1 +LABELV $705 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 50 +char 1 0 +align 1 +LABELV $704 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 65 +char 1 84 +char 1 72 +char 1 49 +char 1 0 +align 1 +LABELV $703 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 65 +char 1 73 +char 1 78 +char 1 0 +align 1 +LABELV $702 +char 1 69 +char 1 86 +char 1 95 +char 1 66 +char 1 85 +char 1 76 +char 1 76 +char 1 69 +char 1 84 +char 1 0 +align 1 +LABELV $701 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 95 +char 1 77 +char 1 69 +char 1 84 +char 1 65 +char 1 76 +char 1 0 +align 1 +LABELV $700 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 0 +align 1 +LABELV $699 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $698 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 69 +char 1 66 +char 1 82 +char 1 73 +char 1 83 +char 1 0 +align 1 +LABELV $697 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 76 +char 1 65 +char 1 83 +char 1 83 +char 1 95 +char 1 83 +char 1 72 +char 1 65 +char 1 84 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $696 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 95 +char 1 82 +char 1 79 +char 1 70 +char 1 70 +char 1 0 +align 1 +LABELV $695 +char 1 69 +char 1 86 +char 1 95 +char 1 69 +char 1 78 +char 1 84 +char 1 73 +char 1 84 +char 1 89 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $694 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 76 +char 1 79 +char 1 66 +char 1 65 +char 1 76 +char 1 95 +char 1 84 +char 1 69 +char 1 65 +char 1 77 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $693 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 76 +char 1 79 +char 1 66 +char 1 65 +char 1 76 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $692 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 69 +char 1 78 +char 1 69 +char 1 82 +char 1 65 +char 1 76 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $691 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 85 +char 1 84 +char 1 69 +char 1 95 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $690 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 95 +char 1 69 +char 1 70 +char 1 70 +char 1 69 +char 1 67 +char 1 84 +char 1 95 +char 1 73 +char 1 68 +char 1 0 +align 1 +LABELV $689 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 95 +char 1 69 +char 1 70 +char 1 70 +char 1 69 +char 1 67 +char 1 84 +char 1 0 +align 1 +LABELV $688 +char 1 69 +char 1 86 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 73 +char 1 76 +char 1 69 +char 1 95 +char 1 83 +char 1 84 +char 1 73 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $687 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 82 +char 1 69 +char 1 78 +char 1 65 +char 1 68 +char 1 69 +char 1 95 +char 1 66 +char 1 79 +char 1 85 +char 1 78 +char 1 67 +char 1 69 +char 1 0 +align 1 +LABELV $686 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 69 +char 1 76 +char 1 69 +char 1 80 +char 1 79 +char 1 82 +char 1 84 +char 1 95 +char 1 79 +char 1 85 +char 1 84 +char 1 0 +align 1 +LABELV $685 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 76 +char 1 65 +char 1 89 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 69 +char 1 76 +char 1 69 +char 1 80 +char 1 79 +char 1 82 +char 1 84 +char 1 95 +char 1 73 +char 1 78 +char 1 0 +align 1 +LABELV $684 +char 1 69 +char 1 86 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 95 +char 1 80 +char 1 79 +char 1 80 +char 1 0 +align 1 +LABELV $683 +char 1 69 +char 1 86 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 95 +char 1 82 +char 1 69 +char 1 83 +char 1 80 +char 1 65 +char 1 87 +char 1 78 +char 1 0 +align 1 +LABELV $682 +char 1 69 +char 1 86 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 85 +char 1 83 +char 1 69 +char 1 70 +char 1 65 +char 1 73 +char 1 76 +char 1 0 +align 1 +LABELV $681 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 53 +char 1 0 +align 1 +LABELV $680 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 52 +char 1 0 +align 1 +LABELV $679 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 51 +char 1 0 +align 1 +LABELV $678 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $677 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 49 +char 1 0 +align 1 +LABELV $676 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 48 +char 1 0 +align 1 +LABELV $675 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 57 +char 1 0 +align 1 +LABELV $674 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 56 +char 1 0 +align 1 +LABELV $673 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 55 +char 1 0 +align 1 +LABELV $672 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 54 +char 1 0 +align 1 +LABELV $671 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 53 +char 1 0 +align 1 +LABELV $670 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 52 +char 1 0 +align 1 +LABELV $669 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 51 +char 1 0 +align 1 +LABELV $668 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 50 +char 1 0 +align 1 +LABELV $667 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 49 +char 1 0 +align 1 +LABELV $666 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 48 +char 1 0 +align 1 +LABELV $665 +char 1 69 +char 1 86 +char 1 95 +char 1 85 +char 1 83 +char 1 69 +char 1 0 +align 1 +LABELV $664 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 67 +char 1 82 +char 1 69 +char 1 69 +char 1 78 +char 1 83 +char 1 72 +char 1 65 +char 1 75 +char 1 69 +char 1 0 +align 1 +LABELV $663 +char 1 69 +char 1 86 +char 1 95 +char 1 84 +char 1 69 +char 1 65 +char 1 77 +char 1 95 +char 1 80 +char 1 79 +char 1 87 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $662 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 82 +char 1 69 +char 1 68 +char 1 69 +char 1 70 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $661 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 90 +char 1 79 +char 1 79 +char 1 77 +char 1 83 +char 1 79 +char 1 85 +char 1 78 +char 1 68 +char 1 0 +align 1 +LABELV $660 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $659 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 83 +char 1 78 +char 1 73 +char 1 80 +char 1 69 +char 1 82 +char 1 95 +char 1 77 +char 1 73 +char 1 83 +char 1 83 +char 1 0 +align 1 +LABELV $658 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 83 +char 1 78 +char 1 73 +char 1 80 +char 1 69 +char 1 82 +char 1 95 +char 1 83 +char 1 72 +char 1 79 +char 1 84 +char 1 0 +align 1 +LABELV $657 +char 1 69 +char 1 86 +char 1 95 +char 1 68 +char 1 73 +char 1 83 +char 1 82 +char 1 85 +char 1 80 +char 1 84 +char 1 79 +char 1 82 +char 1 95 +char 1 77 +char 1 65 +char 1 73 +char 1 78 +char 1 95 +char 1 83 +char 1 72 +char 1 79 +char 1 84 +char 1 0 +align 1 +LABELV $656 +char 1 69 +char 1 86 +char 1 95 +char 1 66 +char 1 69 +char 1 67 +char 1 79 +char 1 77 +char 1 69 +char 1 95 +char 1 74 +char 1 69 +char 1 68 +char 1 73 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $655 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 85 +char 1 78 +char 1 72 +char 1 79 +char 1 76 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $654 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 66 +char 1 76 +char 1 79 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $653 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 72 +char 1 73 +char 1 84 +char 1 0 +align 1 +LABELV $652 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 65 +char 1 66 +char 1 69 +char 1 82 +char 1 95 +char 1 65 +char 1 84 +char 1 84 +char 1 65 +char 1 67 +char 1 75 +char 1 0 +align 1 +LABELV $651 +char 1 69 +char 1 86 +char 1 95 +char 1 65 +char 1 76 +char 1 84 +char 1 95 +char 1 70 +char 1 73 +char 1 82 +char 1 69 +char 1 0 +align 1 +LABELV $650 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 73 +char 1 82 +char 1 69 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 0 +align 1 +LABELV $649 +char 1 69 +char 1 86 +char 1 95 +char 1 67 +char 1 72 +char 1 65 +char 1 78 +char 1 71 +char 1 69 +char 1 95 +char 1 87 +char 1 69 +char 1 65 +char 1 80 +char 1 79 +char 1 78 +char 1 0 +align 1 +LABELV $648 +char 1 69 +char 1 86 +char 1 95 +char 1 78 +char 1 79 +char 1 65 +char 1 77 +char 1 77 +char 1 79 +char 1 0 +align 1 +LABELV $647 +char 1 69 +char 1 86 +char 1 95 +char 1 71 +char 1 76 +char 1 79 +char 1 66 +char 1 65 +char 1 76 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 95 +char 1 80 +char 1 73 +char 1 67 +char 1 75 +char 1 85 +char 1 80 +char 1 0 +align 1 +LABELV $646 +char 1 69 +char 1 86 +char 1 95 +char 1 73 +char 1 84 +char 1 69 +char 1 77 +char 1 95 +char 1 80 +char 1 73 +char 1 67 +char 1 75 +char 1 85 +char 1 80 +char 1 0 +align 1 +LABELV $645 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 95 +char 1 67 +char 1 76 +char 1 69 +char 1 65 +char 1 82 +char 1 0 +align 1 +LABELV $644 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 95 +char 1 85 +char 1 78 +char 1 68 +char 1 69 +char 1 82 +char 1 0 +align 1 +LABELV $643 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 95 +char 1 76 +char 1 69 +char 1 65 +char 1 86 +char 1 69 +char 1 0 +align 1 +LABELV $642 +char 1 69 +char 1 86 +char 1 95 +char 1 87 +char 1 65 +char 1 84 +char 1 69 +char 1 82 +char 1 95 +char 1 84 +char 1 79 +char 1 85 +char 1 67 +char 1 72 +char 1 0 +align 1 +LABELV $641 +char 1 69 +char 1 86 +char 1 95 +char 1 82 +char 1 79 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $640 +char 1 69 +char 1 86 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 0 +align 1 +LABELV $639 +char 1 69 +char 1 86 +char 1 95 +char 1 80 +char 1 82 +char 1 73 +char 1 86 +char 1 65 +char 1 84 +char 1 69 +char 1 95 +char 1 68 +char 1 85 +char 1 69 +char 1 76 +char 1 0 +align 1 +LABELV $638 +char 1 69 +char 1 86 +char 1 95 +char 1 74 +char 1 85 +char 1 77 +char 1 80 +char 1 95 +char 1 80 +char 1 65 +char 1 68 +char 1 0 +align 1 +LABELV $637 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 65 +char 1 76 +char 1 76 +char 1 0 +align 1 +LABELV $636 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 49 +char 1 54 +char 1 0 +align 1 +LABELV $635 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 49 +char 1 50 +char 1 0 +align 1 +LABELV $634 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 56 +char 1 0 +align 1 +LABELV $633 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 52 +char 1 0 +align 1 +LABELV $632 +char 1 69 +char 1 86 +char 1 95 +char 1 83 +char 1 87 +char 1 73 +char 1 77 +char 1 0 +align 1 +LABELV $631 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 79 +char 1 84 +char 1 87 +char 1 65 +char 1 68 +char 1 69 +char 1 0 +align 1 +LABELV $630 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 79 +char 1 84 +char 1 83 +char 1 80 +char 1 76 +char 1 65 +char 1 83 +char 1 72 +char 1 0 +align 1 +LABELV $629 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 79 +char 1 84 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 95 +char 1 77 +char 1 69 +char 1 84 +char 1 65 +char 1 76 +char 1 0 +align 1 +LABELV $628 +char 1 69 +char 1 86 +char 1 95 +char 1 70 +char 1 79 +char 1 79 +char 1 84 +char 1 83 +char 1 84 +char 1 69 +char 1 80 +char 1 0 +align 1 +LABELV $627 +char 1 69 +char 1 86 +char 1 95 +char 1 67 +char 1 76 +char 1 73 +char 1 69 +char 1 78 +char 1 84 +char 1 74 +char 1 79 +char 1 73 +char 1 78 +char 1 0 +align 1 +LABELV $626 +char 1 69 +char 1 86 +char 1 95 +char 1 78 +char 1 79 +char 1 78 +char 1 69 +char 1 0 +align 1 +LABELV $624 +char 1 66 +char 1 71 +char 1 95 +char 1 69 +char 1 118 +char 1 97 +char 1 108 +char 1 117 +char 1 97 +char 1 116 +char 1 101 +char 1 84 +char 1 114 +char 1 97 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 111 +char 1 114 +char 1 121 +char 1 68 +char 1 101 +char 1 108 +char 1 116 +char 1 97 +char 1 58 +char 1 32 +char 1 117 +char 1 110 +char 1 107 +char 1 110 +char 1 111 +char 1 119 +char 1 110 +char 1 32 +char 1 116 +char 1 114 +char 1 84 +char 1 121 +char 1 112 +char 1 101 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $611 +char 1 66 +char 1 71 +char 1 95 +char 1 69 +char 1 118 +char 1 97 +char 1 108 +char 1 117 +char 1 97 +char 1 116 +char 1 101 +char 1 84 +char 1 114 +char 1 97 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 111 +char 1 114 +char 1 121 +char 1 58 +char 1 32 +char 1 91 +char 1 67 +char 1 76 +char 1 73 +char 1 69 +char 1 78 +char 1 84 +char 1 71 +char 1 65 +char 1 77 +char 1 69 +char 1 32 +char 1 83 +char 1 73 +char 1 68 +char 1 69 +char 1 93 +char 1 32 +char 1 117 +char 1 110 +char 1 107 +char 1 110 +char 1 111 +char 1 119 +char 1 110 +char 1 32 +char 1 116 +char 1 114 +char 1 84 +char 1 121 +char 1 112 +char 1 101 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $596 +char 1 66 +char 1 71 +char 1 95 +char 1 67 +char 1 97 +char 1 110 +char 1 73 +char 1 116 +char 1 101 +char 1 109 +char 1 66 +char 1 101 +char 1 71 +char 1 114 +char 1 97 +char 1 98 +char 1 98 +char 1 101 +char 1 100 +char 1 58 +char 1 32 +char 1 73 +char 1 84 +char 1 95 +char 1 66 +char 1 65 +char 1 68 +char 1 0 +align 1 +LABELV $539 +char 1 66 +char 1 71 +char 1 95 +char 1 67 +char 1 97 +char 1 110 +char 1 73 +char 1 116 +char 1 101 +char 1 109 +char 1 66 +char 1 101 +char 1 71 +char 1 114 +char 1 97 +char 1 98 +char 1 98 +char 1 101 +char 1 100 +char 1 58 +char 1 32 +char 1 105 +char 1 110 +char 1 100 +char 1 101 +char 1 120 +char 1 32 +char 1 111 +char 1 117 +char 1 116 +char 1 32 +char 1 111 +char 1 102 +char 1 32 +char 1 114 +char 1 97 +char 1 110 +char 1 103 +char 1 101 +char 1 0 +align 1 +LABELV $456 +char 1 67 +char 1 111 +char 1 117 +char 1 108 +char 1 100 +char 1 110 +char 1 39 +char 1 116 +char 1 32 +char 1 102 +char 1 105 +char 1 110 +char 1 100 +char 1 32 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $447 +char 1 72 +char 1 111 +char 1 108 +char 1 100 +char 1 97 +char 1 98 +char 1 108 +char 1 101 +char 1 73 +char 1 116 +char 1 101 +char 1 109 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 102 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 0 +align 1 +LABELV $394 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 104 +char 1 95 +char 1 98 +char 1 111 +char 1 114 +char 1 98 +char 1 0 +align 1 +LABELV $393 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 117 +char 1 112 +char 1 115 +char 1 47 +char 1 111 +char 1 114 +char 1 98 +char 1 47 +char 1 98 +char 1 95 +char 1 111 +char 1 114 +char 1 98 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $392 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 99 +char 1 117 +char 1 98 +char 1 101 +char 1 0 +align 1 +LABELV $391 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 104 +char 1 95 +char 1 114 +char 1 111 +char 1 114 +char 1 98 +char 1 0 +align 1 +LABELV $390 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 117 +char 1 112 +char 1 115 +char 1 47 +char 1 111 +char 1 114 +char 1 98 +char 1 47 +char 1 114 +char 1 95 +char 1 111 +char 1 114 +char 1 98 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $389 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 114 +char 1 101 +char 1 100 +char 1 99 +char 1 117 +char 1 98 +char 1 101 +char 1 0 +align 1 +LABELV $388 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 102 +char 1 95 +char 1 110 +char 1 101 +char 1 117 +char 1 116 +char 1 114 +char 1 97 +char 1 108 +char 1 49 +char 1 0 +align 1 +LABELV $387 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 110 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $386 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 95 +char 1 110 +char 1 101 +char 1 117 +char 1 116 +char 1 114 +char 1 97 +char 1 108 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $385 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 98 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $384 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 98 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $383 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 98 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $382 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 95 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $381 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 114 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $380 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 114 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $379 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 115 +char 1 47 +char 1 114 +char 1 95 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $378 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 95 +char 1 67 +char 1 84 +char 1 70 +char 1 95 +char 1 114 +char 1 101 +char 1 100 +char 1 102 +char 1 108 +char 1 97 +char 1 103 +char 1 0 +align 1 +LABELV $377 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 114 +char 1 111 +char 1 99 +char 1 107 +char 1 101 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $376 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 114 +char 1 111 +char 1 99 +char 1 107 +char 1 101 +char 1 116 +char 1 115 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $375 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 114 +char 1 111 +char 1 99 +char 1 107 +char 1 101 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $374 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 109 +char 1 101 +char 1 116 +char 1 97 +char 1 108 +char 1 108 +char 1 105 +char 1 99 +char 1 95 +char 1 98 +char 1 111 +char 1 108 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $373 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 109 +char 1 101 +char 1 116 +char 1 97 +char 1 108 +char 1 108 +char 1 105 +char 1 99 +char 1 95 +char 1 98 +char 1 111 +char 1 108 +char 1 116 +char 1 115 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $372 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 109 +char 1 101 +char 1 116 +char 1 97 +char 1 108 +char 1 108 +char 1 105 +char 1 99 +char 1 95 +char 1 98 +char 1 111 +char 1 108 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $371 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 95 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $370 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 95 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $369 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $368 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 116 +char 1 116 +char 1 101 +char 1 114 +char 1 121 +char 1 0 +align 1 +LABELV $367 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $366 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 101 +char 1 110 +char 1 101 +char 1 114 +char 1 103 +char 1 121 +char 1 95 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $365 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 112 +char 1 105 +char 1 99 +char 1 107 +char 1 117 +char 1 112 +char 1 101 +char 1 110 +char 1 101 +char 1 114 +char 1 103 +char 1 121 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $364 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 0 +align 1 +LABELV $363 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 117 +char 1 114 +char 1 114 +char 1 101 +char 1 116 +char 1 119 +char 1 112 +char 1 0 +align 1 +LABELV $362 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 101 +char 1 109 +char 1 112 +char 1 108 +char 1 97 +char 1 99 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $361 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 0 +align 1 +LABELV $360 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 114 +char 1 105 +char 1 112 +char 1 95 +char 1 109 +char 1 105 +char 1 110 +char 1 101 +char 1 0 +align 1 +LABELV $359 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 0 +align 1 +LABELV $358 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 0 +align 1 +LABELV $357 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $356 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $355 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 95 +char 1 112 +char 1 114 +char 1 111 +char 1 106 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $354 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 95 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 95 +char 1 112 +char 1 117 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $353 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 0 +align 1 +LABELV $352 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 114 +char 1 105 +char 1 112 +char 1 109 +char 1 105 +char 1 110 +char 1 101 +char 1 0 +align 1 +LABELV $351 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $350 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $349 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 47 +char 1 108 +char 1 97 +char 1 115 +char 1 101 +char 1 114 +char 1 95 +char 1 116 +char 1 114 +char 1 97 +char 1 112 +char 1 95 +char 1 112 +char 1 117 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $348 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 116 +char 1 114 +char 1 105 +char 1 112 +char 1 109 +char 1 105 +char 1 110 +char 1 101 +char 1 0 +align 1 +LABELV $347 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 0 +align 1 +LABELV $346 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $345 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $344 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 47 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 95 +char 1 112 +char 1 117 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $343 +char 1 97 +char 1 109 +char 1 109 +char 1 111 +char 1 95 +char 1 116 +char 1 104 +char 1 101 +char 1 114 +char 1 109 +char 1 97 +char 1 108 +char 1 0 +align 1 +LABELV $342 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 0 +align 1 +LABELV $341 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 95 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 47 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 95 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $340 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 95 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 47 +char 1 109 +char 1 101 +char 1 114 +char 1 114 +char 1 95 +char 1 115 +char 1 111 +char 1 110 +char 1 110 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $339 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 114 +char 1 111 +char 1 99 +char 1 107 +char 1 101 +char 1 116 +char 1 95 +char 1 108 +char 1 97 +char 1 117 +char 1 110 +char 1 99 +char 1 104 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $338 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 104 +char 1 101 +char 1 116 +char 1 116 +char 1 101 +char 1 0 +align 1 +LABELV $337 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 103 +char 1 111 +char 1 108 +char 1 97 +char 1 110 +char 1 95 +char 1 97 +char 1 114 +char 1 109 +char 1 115 +char 1 47 +char 1 103 +char 1 111 +char 1 108 +char 1 97 +char 1 110 +char 1 95 +char 1 97 +char 1 114 +char 1 109 +char 1 115 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $336 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 103 +char 1 111 +char 1 108 +char 1 97 +char 1 110 +char 1 95 +char 1 97 +char 1 114 +char 1 109 +char 1 115 +char 1 47 +char 1 103 +char 1 111 +char 1 108 +char 1 97 +char 1 110 +char 1 95 +char 1 97 +char 1 114 +char 1 109 +char 1 115 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $335 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 102 +char 1 108 +char 1 101 +char 1 99 +char 1 104 +char 1 101 +char 1 116 +char 1 116 +char 1 101 +char 1 0 +align 1 +LABELV $334 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 0 +align 1 +LABELV $333 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $332 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 47 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $331 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 101 +char 1 109 +char 1 112 +char 1 50 +char 1 0 +align 1 +LABELV $330 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $329 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 104 +char 1 101 +char 1 97 +char 1 118 +char 1 121 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 47 +char 1 104 +char 1 101 +char 1 97 +char 1 118 +char 1 121 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $328 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 104 +char 1 101 +char 1 97 +char 1 118 +char 1 121 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 47 +char 1 104 +char 1 101 +char 1 97 +char 1 118 +char 1 121 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $327 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 101 +char 1 97 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $326 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $325 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 47 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $324 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 47 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $323 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 111 +char 1 119 +char 1 99 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $322 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 0 +align 1 +LABELV $321 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 47 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $320 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 47 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $319 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 100 +char 1 105 +char 1 115 +char 1 114 +char 1 117 +char 1 112 +char 1 116 +char 1 111 +char 1 114 +char 1 0 +align 1 +LABELV $318 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $317 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 114 +char 1 47 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $316 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 114 +char 1 47 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $315 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 108 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $314 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 114 +char 1 105 +char 1 102 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $313 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 114 +char 1 105 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 47 +char 1 98 +char 1 114 +char 1 105 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $312 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 98 +char 1 114 +char 1 105 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 47 +char 1 98 +char 1 114 +char 1 105 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $311 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 114 +char 1 121 +char 1 97 +char 1 114 +char 1 95 +char 1 112 +char 1 105 +char 1 115 +char 1 116 +char 1 111 +char 1 108 +char 1 0 +align 1 +LABELV $310 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $309 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $308 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $307 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $306 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 119 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 116 +char 1 117 +char 1 110 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $305 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 116 +char 1 117 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 47 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $304 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 50 +char 1 47 +char 1 115 +char 1 116 +char 1 117 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 47 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 95 +char 1 119 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $303 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 116 +char 1 117 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 116 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $302 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 0 +align 1 +LABELV $301 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 105 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $300 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 105 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $299 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 121 +char 1 115 +char 1 97 +char 1 108 +char 1 105 +char 1 109 +char 1 97 +char 1 114 +char 1 105 +char 1 0 +align 1 +LABELV $298 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 102 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $297 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $296 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $295 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 98 +char 1 111 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $294 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 100 +char 1 107 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 0 +align 1 +LABELV $293 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 100 +char 1 107 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 109 +char 1 101 +char 1 110 +char 1 116 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $292 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 95 +char 1 100 +char 1 97 +char 1 114 +char 1 107 +char 1 0 +align 1 +LABELV $291 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 109 +char 1 112 +char 1 105 +char 1 95 +char 1 106 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 0 +align 1 +LABELV $290 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 106 +char 1 101 +char 1 100 +char 1 105 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 109 +char 1 101 +char 1 110 +char 1 116 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $289 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 109 +char 1 101 +char 1 110 +char 1 116 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $288 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 95 +char 1 101 +char 1 110 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 101 +char 1 110 +char 1 95 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 0 +align 1 +LABELV $287 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 101 +char 1 110 +char 1 116 +char 1 114 +char 1 121 +char 1 103 +char 1 117 +char 1 110 +char 1 0 +align 1 +LABELV $286 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 112 +char 1 115 +char 1 103 +char 1 117 +char 1 110 +char 1 46 +char 1 103 +char 1 108 +char 1 109 +char 1 0 +align 1 +LABELV $285 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 101 +char 1 110 +char 1 116 +char 1 114 +char 1 121 +char 1 95 +char 1 103 +char 1 117 +char 1 110 +char 1 0 +align 1 +LABELV $284 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 122 +char 1 111 +char 1 111 +char 1 109 +char 1 0 +align 1 +LABELV $283 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 98 +char 1 105 +char 1 110 +char 1 111 +char 1 99 +char 1 117 +char 1 108 +char 1 97 +char 1 114 +char 1 115 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $282 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 98 +char 1 105 +char 1 110 +char 1 111 +char 1 99 +char 1 117 +char 1 108 +char 1 97 +char 1 114 +char 1 115 +char 1 0 +align 1 +LABELV $281 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 100 +char 1 97 +char 1 116 +char 1 97 +char 1 112 +char 1 97 +char 1 100 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $280 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 100 +char 1 97 +char 1 116 +char 1 97 +char 1 112 +char 1 97 +char 1 100 +char 1 0 +align 1 +LABELV $279 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 98 +char 1 97 +char 1 99 +char 1 116 +char 1 97 +char 1 0 +align 1 +LABELV $278 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 98 +char 1 97 +char 1 99 +char 1 116 +char 1 97 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $277 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 109 +char 1 101 +char 1 100 +char 1 112 +char 1 97 +char 1 99 +char 1 0 +align 1 +LABELV $276 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 100 +char 1 101 +char 1 116 +char 1 112 +char 1 97 +char 1 99 +char 1 107 +char 1 47 +char 1 115 +char 1 116 +char 1 105 +char 1 99 +char 1 107 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 47 +char 1 100 +char 1 111 +char 1 111 +char 1 114 +char 1 115 +char 1 47 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 111 +char 1 110 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 47 +char 1 100 +char 1 111 +char 1 111 +char 1 114 +char 1 115 +char 1 47 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 111 +char 1 102 +char 1 102 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 47 +char 1 100 +char 1 111 +char 1 111 +char 1 114 +char 1 115 +char 1 47 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 108 +char 1 112 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 32 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 101 +char 1 102 +char 1 102 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 98 +char 1 117 +char 1 109 +char 1 112 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $275 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 119 +char 1 97 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $274 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $273 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 0 +align 1 +LABELV $272 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 115 +char 1 101 +char 1 101 +char 1 107 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $271 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 115 +char 1 47 +char 1 114 +char 1 101 +char 1 109 +char 1 111 +char 1 116 +char 1 101 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $270 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 119 +char 1 101 +char 1 97 +char 1 112 +char 1 111 +char 1 110 +char 1 115 +char 1 47 +char 1 119 +char 1 95 +char 1 112 +char 1 107 +char 1 117 +char 1 112 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $269 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 101 +char 1 101 +char 1 107 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $268 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 104 +char 1 117 +char 1 100 +char 1 47 +char 1 105 +char 1 95 +char 1 105 +char 1 99 +char 1 111 +char 1 110 +char 1 95 +char 1 109 +char 1 101 +char 1 100 +char 1 107 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $267 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 109 +char 1 101 +char 1 100 +char 1 112 +char 1 97 +char 1 99 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $266 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 112 +char 1 105 +char 1 99 +char 1 107 +char 1 117 +char 1 112 +char 1 104 +char 1 101 +char 1 97 +char 1 108 +char 1 116 +char 1 104 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $265 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 109 +char 1 101 +char 1 100 +char 1 112 +char 1 97 +char 1 107 +char 1 95 +char 1 105 +char 1 110 +char 1 115 +char 1 116 +char 1 97 +char 1 110 +char 1 116 +char 1 0 +align 1 +LABELV $264 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 108 +char 1 97 +char 1 114 +char 1 103 +char 1 101 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 0 +align 1 +LABELV $263 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 112 +char 1 115 +char 1 100 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $262 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 108 +char 1 114 +char 1 103 +char 1 95 +char 1 105 +char 1 110 +char 1 115 +char 1 116 +char 1 97 +char 1 110 +char 1 116 +char 1 0 +align 1 +LABELV $261 +char 1 103 +char 1 102 +char 1 120 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 115 +char 1 109 +char 1 97 +char 1 108 +char 1 108 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 0 +align 1 +LABELV $260 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 115 +char 1 47 +char 1 109 +char 1 97 +char 1 112 +char 1 95 +char 1 111 +char 1 98 +char 1 106 +char 1 101 +char 1 99 +char 1 116 +char 1 115 +char 1 47 +char 1 109 +char 1 112 +char 1 47 +char 1 112 +char 1 115 +char 1 100 +char 1 95 +char 1 115 +char 1 109 +char 1 46 +char 1 109 +char 1 100 +char 1 51 +char 1 0 +align 1 +LABELV $259 +char 1 115 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 47 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 47 +char 1 112 +char 1 105 +char 1 99 +char 1 107 +char 1 117 +char 1 112 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 46 +char 1 119 +char 1 97 +char 1 118 +char 1 0 +align 1 +LABELV $258 +char 1 105 +char 1 116 +char 1 101 +char 1 109 +char 1 95 +char 1 115 +char 1 104 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 95 +char 1 115 +char 1 109 +char 1 95 +char 1 105 +char 1 110 +char 1 115 +char 1 116 +char 1 97 +char 1 110 +char 1 116 +char 1 0 +align 1 +LABELV $257 +char 1 0 +align 1 +LABELV $256 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $132 +char 1 37 +char 1 105 +char 1 45 +char 1 0 +align 1 +LABELV $131 +char 1 55 +char 1 45 +char 1 49 +char 1 45 +char 1 48 +char 1 51 +char 1 50 +char 1 51 +char 1 51 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 48 +char 1 49 +char 1 51 +char 1 51 +char 1 51 +char 1 0 +align 1 +LABELV $127 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 55 +char 1 0 +align 1 +LABELV $126 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 54 +char 1 0 +align 1 +LABELV $125 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 53 +char 1 0 +align 1 +LABELV $124 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 52 +char 1 0 +align 1 +LABELV $123 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 51 +char 1 0 +align 1 +LABELV $122 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 50 +char 1 0 +align 1 +LABELV $121 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 49 +char 1 0 +align 1 +LABELV $120 +char 1 77 +char 1 65 +char 1 83 +char 1 84 +char 1 69 +char 1 82 +char 1 89 +char 1 48 +char 1 0 diff --git a/CODE-mp/ui/vm/bg_weapons.asm b/CODE-mp/ui/vm/bg_weapons.asm new file mode 100644 index 0000000..878dc25 --- /dev/null +++ b/CODE-mp/ui/vm/bg_weapons.asm @@ -0,0 +1,538 @@ +data +export WP_MuzzlePoint +align 4 +LABELV WP_MuzzlePoint +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1090519040 +byte 4 0 +byte 4 1090519040 +byte 4 1098907648 +byte 4 0 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1073741824 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1083179008 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1086324736 +byte 4 3233808384 +byte 4 1094713344 +byte 4 1090519040 +byte 4 0 +byte 4 1094713344 +byte 4 0 +byte 4 3229614080 +byte 4 1094713344 +byte 4 0 +byte 4 3240099840 +byte 4 1094713344 +byte 4 0 +byte 4 3229614080 +skip 24 +export weaponData +align 4 +LABELV weaponData +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 5 +byte 4 0 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 5 +byte 4 0 +byte 4 100 +byte 4 8192 +byte 4 0 +byte 4 100 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 2 +byte 4 15 +byte 4 2 +byte 4 400 +byte 4 8192 +byte 4 2 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 200 +byte 4 0 +byte 4 1 +byte 4 0 +byte 4 1500 +byte 4 2 +byte 4 5 +byte 4 2 +byte 4 350 +byte 4 8192 +byte 4 3 +byte 4 150 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 3 +byte 4 5 +byte 4 5 +byte 4 600 +byte 4 8192 +byte 4 6 +byte 4 1300 +byte 4 8192 +byte 4 0 +byte 4 200 +byte 4 0 +byte 4 3 +byte 4 0 +byte 4 1700 +byte 4 3 +byte 4 5 +byte 4 5 +byte 4 1000 +byte 4 8192 +byte 4 5 +byte 4 750 +byte 4 8192 +byte 4 400 +byte 4 0 +byte 4 5 +byte 4 0 +byte 4 1700 +byte 4 0 +byte 4 4 +byte 4 5 +byte 4 1 +byte 4 100 +byte 4 8192 +byte 4 8 +byte 4 800 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 3 +byte 4 5 +byte 4 8 +byte 4 500 +byte 4 8192 +byte 4 6 +byte 4 900 +byte 4 8192 +byte 4 0 +byte 4 250 +byte 4 0 +byte 4 3 +byte 4 0 +byte 4 2100 +byte 4 4 +byte 4 5 +byte 4 10 +byte 4 700 +byte 4 8192 +byte 4 15 +byte 4 800 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 5 +byte 4 5 +byte 4 1 +byte 4 900 +byte 4 8192 +byte 4 2 +byte 4 1200 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 7 +byte 4 0 +byte 4 1 +byte 4 800 +byte 4 8192 +byte 4 1 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 8 +byte 4 0 +byte 4 1 +byte 4 800 +byte 4 8192 +byte 4 1 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 9 +byte 4 0 +byte 4 1 +byte 4 800 +byte 4 8192 +byte 4 0 +byte 4 400 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 100 +byte 4 8192 +byte 4 0 +byte 4 100 +byte 4 8192 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +skip 56 +export ammoData +align 4 +LABELV ammoData +byte 4 0 +byte 4 100 +byte 4 300 +byte 4 300 +byte 4 300 +byte 4 25 +byte 4 800 +byte 4 10 +byte 4 10 +byte 4 10 +import PM_SetSaberMove +import PM_WeaponLightsaber +import PM_SetAnim +import PM_FinishWeaponChange +import PM_BeginWeaponChange +import PM_ForceLegsAnim +import PM_ContinueLegsAnim +import PM_StartTorsoAnim +import BG_CycleInven +import PM_StepSlideMove +import PM_SlideMove +import PM_AddEvent +import PM_AddTouchEnt +import PM_ClipVelocity +import PM_SaberJumpAttackMove +import PM_SaberFlipOverAttackMove +import PM_SomeoneInFront +import PM_GroundDistance +import PM_GetSaberStance +import PM_AnimLength +import PM_InRollComplete +import PM_InOnGroundAnim +import PM_SpinningAnim +import PM_LandingAnim +import PM_JumpingAnim +import PM_PainAnim +import PM_InKnockDown +import PM_InSaberAnim +import PM_SaberInStart +import PM_SaberInReflect +import PM_SaberInParry +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import forcePowerNeeded +import c_pmove +import pm_flightfriction +import pm_waterfriction +import pm_friction +import pm_flyaccelerate +import pm_wateraccelerate +import pm_airaccelerate +import pm_accelerate +import pm_wadeScale +import pm_swimScale +import pm_duckScale +import pm_stopspeed +import pml +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort diff --git a/CODE-mp/ui/vm/q_math.asm b/CODE-mp/ui/vm/q_math.asm new file mode 100644 index 0000000..2559ae8 --- /dev/null +++ b/CODE-mp/ui/vm/q_math.asm @@ -0,0 +1,8572 @@ +data +export vec3_origin +align 4 +LABELV vec3_origin +byte 4 0 +byte 4 0 +byte 4 0 +export axisDefault +align 4 +LABELV axisDefault +byte 4 1065353216 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1065353216 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1065353216 +export colorBlack +align 4 +LABELV colorBlack +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1065353216 +export colorRed +align 4 +LABELV colorRed +byte 4 1065353216 +byte 4 0 +byte 4 0 +byte 4 1065353216 +export colorGreen +align 4 +LABELV colorGreen +byte 4 0 +byte 4 1065353216 +byte 4 0 +byte 4 1065353216 +export colorBlue +align 4 +LABELV colorBlue +byte 4 0 +byte 4 0 +byte 4 1065353216 +byte 4 1065353216 +export colorYellow +align 4 +LABELV colorYellow +byte 4 1065353216 +byte 4 1065353216 +byte 4 0 +byte 4 1065353216 +export colorMagenta +align 4 +LABELV colorMagenta +byte 4 1065353216 +byte 4 0 +byte 4 1065353216 +byte 4 1065353216 +export colorCyan +align 4 +LABELV colorCyan +byte 4 0 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +export colorWhite +align 4 +LABELV colorWhite +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +export colorLtGrey +align 4 +LABELV colorLtGrey +byte 4 1061158912 +byte 4 1061158912 +byte 4 1061158912 +byte 4 1065353216 +export colorMdGrey +align 4 +LABELV colorMdGrey +byte 4 1056964608 +byte 4 1056964608 +byte 4 1056964608 +byte 4 1065353216 +export colorDkGrey +align 4 +LABELV colorDkGrey +byte 4 1048576000 +byte 4 1048576000 +byte 4 1048576000 +byte 4 1065353216 +export colorLtBlue +align 4 +LABELV colorLtBlue +byte 4 1052501869 +byte 4 1048945099 +byte 4 1060689150 +byte 4 1065353216 +export colorDkBlue +align 4 +LABELV colorDkBlue +byte 4 1045153448 +byte 4 0 +byte 4 1053542056 +byte 4 1065353216 +export g_color_table +align 4 +LABELV g_color_table +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1065353216 +byte 4 1065353216 +byte 4 0 +byte 4 0 +byte 4 1065353216 +byte 4 0 +byte 4 1065353216 +byte 4 0 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +byte 4 0 +byte 4 1065353216 +byte 4 0 +byte 4 0 +byte 4 1065353216 +byte 4 1065353216 +byte 4 0 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +byte 4 0 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +byte 4 1065353216 +export bytedirs +align 4 +LABELV bytedirs +byte 4 3204879951 +byte 4 0 +byte 4 1062847556 +byte 4 3202531056 +byte 4 1047828139 +byte 4 1063074669 +byte 4 3197577718 +byte 4 0 +byte 4 1064605338 +byte 4 3198039930 +byte 4 1056964608 +byte 4 1062149053 +byte 4 3190184938 +byte 4 1049007711 +byte 4 1064532072 +byte 4 0 +byte 4 0 +byte 4 1065353216 +byte 4 0 +byte 4 1062847556 +byte 4 1057396303 +byte 4 3189189110 +byte 4 1060597999 +byte 4 1060013330 +byte 4 1041705462 +byte 4 1060597999 +byte 4 1060013330 +byte 4 0 +byte 4 1057396303 +byte 4 1062847556 +byte 4 1050556282 +byte 4 1056964608 +byte 4 1062149053 +byte 4 1057396303 +byte 4 0 +byte 4 1062847556 +byte 4 1050094070 +byte 4 0 +byte 4 1064605338 +byte 4 1055047408 +byte 4 1047828139 +byte 4 1063074669 +byte 4 1042701290 +byte 4 1049007711 +byte 4 1064532072 +byte 4 3207496978 +byte 4 1041705462 +byte 4 1060597999 +byte 4 3209632701 +byte 4 1050556282 +byte 4 1056964608 +byte 4 3205921044 +byte 4 1054458931 +byte 4 1060121929 +byte 4 3210331204 +byte 4 1057396303 +byte 4 0 +byte 4 3210558317 +byte 4 1055047408 +byte 4 1047828139 +byte 4 3208081647 +byte 4 1060013330 +byte 4 1041705462 +byte 4 3207605577 +byte 4 1058437396 +byte 4 1054458931 +byte 4 3204448256 +byte 4 1062149053 +byte 4 1050556282 +byte 4 3195311787 +byte 4 1063074669 +byte 4 1055047408 +byte 4 3201942579 +byte 4 1060121929 +byte 4 1058437396 +byte 4 3208081647 +byte 4 1060013330 +byte 4 3189189110 +byte 4 3204448256 +byte 4 1062149053 +byte 4 3198039930 +byte 4 3204879951 +byte 4 1062847556 +byte 4 0 +byte 4 0 +byte 4 1062847556 +byte 4 3204879951 +byte 4 3195311787 +byte 4 1063074669 +byte 4 3202531056 +byte 4 0 +byte 4 1064605338 +byte 4 3197577718 +byte 4 3196491359 +byte 4 1064532072 +byte 4 3190184938 +byte 4 0 +byte 4 1065353216 +byte 4 0 +byte 4 0 +byte 4 1064605338 +byte 4 1050094070 +byte 4 3196491359 +byte 4 1064532072 +byte 4 1042701290 +byte 4 1047828139 +byte 4 1063074669 +byte 4 1055047408 +byte 4 1049007711 +byte 4 1064532072 +byte 4 1042701290 +byte 4 1056964608 +byte 4 1062149053 +byte 4 1050556282 +byte 4 1047828139 +byte 4 1063074669 +byte 4 3202531056 +byte 4 1049007711 +byte 4 1064532072 +byte 4 3190184938 +byte 4 1056964608 +byte 4 1062149053 +byte 4 3198039930 +byte 4 1062847556 +byte 4 1057396303 +byte 4 0 +byte 4 1060597999 +byte 4 1060013330 +byte 4 1041705462 +byte 4 1060597999 +byte 4 1060013330 +byte 4 3189189110 +byte 4 1057396303 +byte 4 1062847556 +byte 4 0 +byte 4 1054458931 +byte 4 1060121929 +byte 4 1058437396 +byte 4 1063074669 +byte 4 1055047408 +byte 4 1047828139 +byte 4 1060121929 +byte 4 1058437396 +byte 4 1054458931 +byte 4 1062149053 +byte 4 1050556282 +byte 4 1056964608 +byte 4 1060013330 +byte 4 1041705462 +byte 4 1060597999 +byte 4 1058437396 +byte 4 1054458931 +byte 4 1060121929 +byte 4 1064605338 +byte 4 1050094070 +byte 4 0 +byte 4 1065353216 +byte 4 0 +byte 4 0 +byte 4 1064532072 +byte 4 1042701290 +byte 4 1049007711 +byte 4 1062847556 +byte 4 3204879951 +byte 4 0 +byte 4 1064605338 +byte 4 3197577718 +byte 4 0 +byte 4 1063074669 +byte 4 3202531056 +byte 4 1047828139 +byte 4 1064532072 +byte 4 3190184938 +byte 4 1049007711 +byte 4 1062149053 +byte 4 3198039930 +byte 4 1056964608 +byte 4 1060013330 +byte 4 3189189110 +byte 4 1060597999 +byte 4 1062847556 +byte 4 0 +byte 4 1057396303 +byte 4 1063074669 +byte 4 1055047408 +byte 4 3195311787 +byte 4 1062149053 +byte 4 1050556282 +byte 4 3204448256 +byte 4 1064532072 +byte 4 1042701290 +byte 4 3196491359 +byte 4 1057396303 +byte 4 0 +byte 4 3210331204 +byte 4 1060013330 +byte 4 1041705462 +byte 4 3208081647 +byte 4 1060013330 +byte 4 3189189110 +byte 4 3208081647 +byte 4 1062847556 +byte 4 0 +byte 4 3204879951 +byte 4 1062149053 +byte 4 3198039930 +byte 4 3204448256 +byte 4 1063074669 +byte 4 3202531056 +byte 4 3195311787 +byte 4 1064532072 +byte 4 3190184938 +byte 4 3196491359 +byte 4 1041705462 +byte 4 1060597999 +byte 4 3207496978 +byte 4 1050556282 +byte 4 1056964608 +byte 4 3209632701 +byte 4 1054458931 +byte 4 1060121929 +byte 4 3205921044 +byte 4 1055047408 +byte 4 1047828139 +byte 4 3210558317 +byte 4 1058437396 +byte 4 1054458931 +byte 4 3207605577 +byte 4 1060121929 +byte 4 1058437396 +byte 4 3201942579 +byte 4 3189189110 +byte 4 1060597999 +byte 4 3207496978 +byte 4 3198039930 +byte 4 1056964608 +byte 4 3209632701 +byte 4 0 +byte 4 1057396303 +byte 4 3210331204 +byte 4 3204879951 +byte 4 0 +byte 4 3210331204 +byte 4 3202531056 +byte 4 1047828139 +byte 4 3210558317 +byte 4 3197577718 +byte 4 0 +byte 4 3212088986 +byte 4 3190184938 +byte 4 1049007711 +byte 4 3212015720 +byte 4 0 +byte 4 0 +byte 4 3212836864 +byte 4 1050094070 +byte 4 0 +byte 4 3212088986 +byte 4 1042701290 +byte 4 1049007711 +byte 4 3212015720 +byte 4 3202531056 +byte 4 3195311787 +byte 4 3210558317 +byte 4 3198039930 +byte 4 3204448256 +byte 4 3209632701 +byte 4 3190184938 +byte 4 3196491359 +byte 4 3212015720 +byte 4 0 +byte 4 3210331204 +byte 4 3204879951 +byte 4 3189189110 +byte 4 3208081647 +byte 4 3207496978 +byte 4 1041705462 +byte 4 3208081647 +byte 4 3207496978 +byte 4 0 +byte 4 3204879951 +byte 4 3210331204 +byte 4 1050556282 +byte 4 3204448256 +byte 4 3209632701 +byte 4 1055047408 +byte 4 3195311787 +byte 4 3210558317 +byte 4 1042701290 +byte 4 3196491359 +byte 4 3212015720 +byte 4 1047828139 +byte 4 3210558317 +byte 4 3202531056 +byte 4 1056964608 +byte 4 3209632701 +byte 4 3198039930 +byte 4 1054458931 +byte 4 3207605577 +byte 4 3205921044 +byte 4 1060597999 +byte 4 3207496978 +byte 4 3189189110 +byte 4 1060121929 +byte 4 3205921044 +byte 4 3201942579 +byte 4 1058437396 +byte 4 3201942579 +byte 4 3207605577 +byte 4 0 +byte 4 3212088986 +byte 4 3197577718 +byte 4 0 +byte 4 3212836864 +byte 4 0 +byte 4 1049007711 +byte 4 3212015720 +byte 4 3190184938 +byte 4 0 +byte 4 3210331204 +byte 4 1057396303 +byte 4 0 +byte 4 3212088986 +byte 4 1050094070 +byte 4 1047828139 +byte 4 3210558317 +byte 4 1055047408 +byte 4 1049007711 +byte 4 3212015720 +byte 4 1042701290 +byte 4 1056964608 +byte 4 3209632701 +byte 4 1050556282 +byte 4 1060597999 +byte 4 3207496978 +byte 4 1041705462 +byte 4 1057396303 +byte 4 3210331204 +byte 4 0 +byte 4 3195311787 +byte 4 3210558317 +byte 4 3202531056 +byte 4 3204448256 +byte 4 3209632701 +byte 4 3198039930 +byte 4 3196491359 +byte 4 3212015720 +byte 4 3190184938 +byte 4 3210331204 +byte 4 3204879951 +byte 4 0 +byte 4 3208081647 +byte 4 3207496978 +byte 4 3189189110 +byte 4 3208081647 +byte 4 3207496978 +byte 4 1041705462 +byte 4 3204879951 +byte 4 3210331204 +byte 4 0 +byte 4 3204448256 +byte 4 3209632701 +byte 4 1050556282 +byte 4 3195311787 +byte 4 3210558317 +byte 4 1055047408 +byte 4 3196491359 +byte 4 3212015720 +byte 4 1042701290 +byte 4 3210558317 +byte 4 3202531056 +byte 4 1047828139 +byte 4 3209632701 +byte 4 3198039930 +byte 4 1056964608 +byte 4 3207605577 +byte 4 3205921044 +byte 4 1054458931 +byte 4 3207496978 +byte 4 3189189110 +byte 4 1060597999 +byte 4 3202531056 +byte 4 3195311787 +byte 4 1063074669 +byte 4 3205921044 +byte 4 3201942579 +byte 4 1060121929 +byte 4 3198039930 +byte 4 3204448256 +byte 4 1062149053 +byte 4 3189189110 +byte 4 3208081647 +byte 4 1060013330 +byte 4 3201942579 +byte 4 3207605577 +byte 4 1058437396 +byte 4 3190184938 +byte 4 3196491359 +byte 4 1064532072 +byte 4 1055047408 +byte 4 3195311787 +byte 4 1063074669 +byte 4 1042701290 +byte 4 3196491359 +byte 4 1064532072 +byte 4 1050556282 +byte 4 3204448256 +byte 4 1062149053 +byte 4 1041705462 +byte 4 3208081647 +byte 4 1060013330 +byte 4 0 +byte 4 3204879951 +byte 4 1062847556 +byte 4 1054458931 +byte 4 3207605577 +byte 4 1058437396 +byte 4 1058437396 +byte 4 3201942579 +byte 4 1060121929 +byte 4 1060121929 +byte 4 3205921044 +byte 4 1054458931 +byte 4 3212088986 +byte 4 1050094070 +byte 4 0 +byte 4 3212015720 +byte 4 1042701290 +byte 4 1049007711 +byte 4 3212836864 +byte 4 0 +byte 4 0 +byte 4 3210331204 +byte 4 0 +byte 4 1057396303 +byte 4 3212088986 +byte 4 3197577718 +byte 4 0 +byte 4 3212015720 +byte 4 3190184938 +byte 4 1049007711 +byte 4 3210558317 +byte 4 1055047408 +byte 4 3195311787 +byte 4 3212015720 +byte 4 1042701290 +byte 4 3196491359 +byte 4 3209632701 +byte 4 1050556282 +byte 4 3204448256 +byte 4 3210558317 +byte 4 3202531056 +byte 4 3195311787 +byte 4 3212015720 +byte 4 3190184938 +byte 4 3196491359 +byte 4 3209632701 +byte 4 3198039930 +byte 4 3204448256 +byte 4 3207496978 +byte 4 1041705462 +byte 4 3208081647 +byte 4 3207496978 +byte 4 3189189110 +byte 4 3208081647 +byte 4 3210331204 +byte 4 0 +byte 4 3204879951 +byte 4 3207605577 +byte 4 1058437396 +byte 4 3201942579 +byte 4 3205921044 +byte 4 1054458931 +byte 4 3207605577 +byte 4 3201942579 +byte 4 1060121929 +byte 4 3205921044 +byte 4 3201942579 +byte 4 3207605577 +byte 4 3205921044 +byte 4 3205921044 +byte 4 3201942579 +byte 4 3207605577 +byte 4 3207605577 +byte 4 3205921044 +byte 4 3201942579 +export Q_rand +code +proc Q_rand 4 0 +file "../../game/q_math.c" +line 126 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// q_math.c -- stateless support routines that are included in each code module +;4:#include "q_shared.h" +;5: +;6: +;7:vec3_t vec3_origin = {0,0,0}; +;8:vec3_t axisDefault[3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }; +;9: +;10: +;11:vec4_t colorBlack = {0, 0, 0, 1}; +;12:vec4_t colorRed = {1, 0, 0, 1}; +;13:vec4_t colorGreen = {0, 1, 0, 1}; +;14:vec4_t colorBlue = {0, 0, 1, 1}; +;15:vec4_t colorYellow = {1, 1, 0, 1}; +;16:vec4_t colorMagenta= {1, 0, 1, 1}; +;17:vec4_t colorCyan = {0, 1, 1, 1}; +;18:vec4_t colorWhite = {1, 1, 1, 1}; +;19:vec4_t colorLtGrey = {0.75, 0.75, 0.75, 1}; +;20:vec4_t colorMdGrey = {0.5, 0.5, 0.5, 1}; +;21:vec4_t colorDkGrey = {0.25, 0.25, 0.25, 1}; +;22: +;23:vec4_t colorLtBlue = {0.367f, 0.261f, 0.722f, 1}; +;24:vec4_t colorDkBlue = {0.199f, 0.0f, 0.398f, 1}; +;25: +;26:vec4_t g_color_table[8] = +;27: { +;28: {0.0, 0.0, 0.0, 1.0}, +;29: {1.0, 0.0, 0.0, 1.0}, +;30: {0.0, 1.0, 0.0, 1.0}, +;31: {1.0, 1.0, 0.0, 1.0}, +;32: {0.0, 0.0, 1.0, 1.0}, +;33: {0.0, 1.0, 1.0, 1.0}, +;34: {1.0, 0.0, 1.0, 1.0}, +;35: {1.0, 1.0, 1.0, 1.0}, +;36: }; +;37: +;38: +;39:vec3_t bytedirs[NUMVERTEXNORMALS] = +;40:{ +;41:{-0.525731f, 0.000000f, 0.850651f}, {-0.442863f, 0.238856f, 0.864188f}, +;42:{-0.295242f, 0.000000f, 0.955423f}, {-0.309017f, 0.500000f, 0.809017f}, +;43:{-0.162460f, 0.262866f, 0.951056f}, {0.000000f, 0.000000f, 1.000000f}, +;44:{0.000000f, 0.850651f, 0.525731f}, {-0.147621f, 0.716567f, 0.681718f}, +;45:{0.147621f, 0.716567f, 0.681718f}, {0.000000f, 0.525731f, 0.850651f}, +;46:{0.309017f, 0.500000f, 0.809017f}, {0.525731f, 0.000000f, 0.850651f}, +;47:{0.295242f, 0.000000f, 0.955423f}, {0.442863f, 0.238856f, 0.864188f}, +;48:{0.162460f, 0.262866f, 0.951056f}, {-0.681718f, 0.147621f, 0.716567f}, +;49:{-0.809017f, 0.309017f, 0.500000f},{-0.587785f, 0.425325f, 0.688191f}, +;50:{-0.850651f, 0.525731f, 0.000000f},{-0.864188f, 0.442863f, 0.238856f}, +;51:{-0.716567f, 0.681718f, 0.147621f},{-0.688191f, 0.587785f, 0.425325f}, +;52:{-0.500000f, 0.809017f, 0.309017f}, {-0.238856f, 0.864188f, 0.442863f}, +;53:{-0.425325f, 0.688191f, 0.587785f}, {-0.716567f, 0.681718f, -0.147621f}, +;54:{-0.500000f, 0.809017f, -0.309017f}, {-0.525731f, 0.850651f, 0.000000f}, +;55:{0.000000f, 0.850651f, -0.525731f}, {-0.238856f, 0.864188f, -0.442863f}, +;56:{0.000000f, 0.955423f, -0.295242f}, {-0.262866f, 0.951056f, -0.162460f}, +;57:{0.000000f, 1.000000f, 0.000000f}, {0.000000f, 0.955423f, 0.295242f}, +;58:{-0.262866f, 0.951056f, 0.162460f}, {0.238856f, 0.864188f, 0.442863f}, +;59:{0.262866f, 0.951056f, 0.162460f}, {0.500000f, 0.809017f, 0.309017f}, +;60:{0.238856f, 0.864188f, -0.442863f},{0.262866f, 0.951056f, -0.162460f}, +;61:{0.500000f, 0.809017f, -0.309017f},{0.850651f, 0.525731f, 0.000000f}, +;62:{0.716567f, 0.681718f, 0.147621f}, {0.716567f, 0.681718f, -0.147621f}, +;63:{0.525731f, 0.850651f, 0.000000f}, {0.425325f, 0.688191f, 0.587785f}, +;64:{0.864188f, 0.442863f, 0.238856f}, {0.688191f, 0.587785f, 0.425325f}, +;65:{0.809017f, 0.309017f, 0.500000f}, {0.681718f, 0.147621f, 0.716567f}, +;66:{0.587785f, 0.425325f, 0.688191f}, {0.955423f, 0.295242f, 0.000000f}, +;67:{1.000000f, 0.000000f, 0.000000f}, {0.951056f, 0.162460f, 0.262866f}, +;68:{0.850651f, -0.525731f, 0.000000f},{0.955423f, -0.295242f, 0.000000f}, +;69:{0.864188f, -0.442863f, 0.238856f}, {0.951056f, -0.162460f, 0.262866f}, +;70:{0.809017f, -0.309017f, 0.500000f}, {0.681718f, -0.147621f, 0.716567f}, +;71:{0.850651f, 0.000000f, 0.525731f}, {0.864188f, 0.442863f, -0.238856f}, +;72:{0.809017f, 0.309017f, -0.500000f}, {0.951056f, 0.162460f, -0.262866f}, +;73:{0.525731f, 0.000000f, -0.850651f}, {0.681718f, 0.147621f, -0.716567f}, +;74:{0.681718f, -0.147621f, -0.716567f},{0.850651f, 0.000000f, -0.525731f}, +;75:{0.809017f, -0.309017f, -0.500000f}, {0.864188f, -0.442863f, -0.238856f}, +;76:{0.951056f, -0.162460f, -0.262866f}, {0.147621f, 0.716567f, -0.681718f}, +;77:{0.309017f, 0.500000f, -0.809017f}, {0.425325f, 0.688191f, -0.587785f}, +;78:{0.442863f, 0.238856f, -0.864188f}, {0.587785f, 0.425325f, -0.688191f}, +;79:{0.688191f, 0.587785f, -0.425325f}, {-0.147621f, 0.716567f, -0.681718f}, +;80:{-0.309017f, 0.500000f, -0.809017f}, {0.000000f, 0.525731f, -0.850651f}, +;81:{-0.525731f, 0.000000f, -0.850651f}, {-0.442863f, 0.238856f, -0.864188f}, +;82:{-0.295242f, 0.000000f, -0.955423f}, {-0.162460f, 0.262866f, -0.951056f}, +;83:{0.000000f, 0.000000f, -1.000000f}, {0.295242f, 0.000000f, -0.955423f}, +;84:{0.162460f, 0.262866f, -0.951056f}, {-0.442863f, -0.238856f, -0.864188f}, +;85:{-0.309017f, -0.500000f, -0.809017f}, {-0.162460f, -0.262866f, -0.951056f}, +;86:{0.000000f, -0.850651f, -0.525731f}, {-0.147621f, -0.716567f, -0.681718f}, +;87:{0.147621f, -0.716567f, -0.681718f}, {0.000000f, -0.525731f, -0.850651f}, +;88:{0.309017f, -0.500000f, -0.809017f}, {0.442863f, -0.238856f, -0.864188f}, +;89:{0.162460f, -0.262866f, -0.951056f}, {0.238856f, -0.864188f, -0.442863f}, +;90:{0.500000f, -0.809017f, -0.309017f}, {0.425325f, -0.688191f, -0.587785f}, +;91:{0.716567f, -0.681718f, -0.147621f}, {0.688191f, -0.587785f, -0.425325f}, +;92:{0.587785f, -0.425325f, -0.688191f}, {0.000000f, -0.955423f, -0.295242f}, +;93:{0.000000f, -1.000000f, 0.000000f}, {0.262866f, -0.951056f, -0.162460f}, +;94:{0.000000f, -0.850651f, 0.525731f}, {0.000000f, -0.955423f, 0.295242f}, +;95:{0.238856f, -0.864188f, 0.442863f}, {0.262866f, -0.951056f, 0.162460f}, +;96:{0.500000f, -0.809017f, 0.309017f}, {0.716567f, -0.681718f, 0.147621f}, +;97:{0.525731f, -0.850651f, 0.000000f}, {-0.238856f, -0.864188f, -0.442863f}, +;98:{-0.500000f, -0.809017f, -0.309017f}, {-0.262866f, -0.951056f, -0.162460f}, +;99:{-0.850651f, -0.525731f, 0.000000f}, {-0.716567f, -0.681718f, -0.147621f}, +;100:{-0.716567f, -0.681718f, 0.147621f}, {-0.525731f, -0.850651f, 0.000000f}, +;101:{-0.500000f, -0.809017f, 0.309017f}, {-0.238856f, -0.864188f, 0.442863f}, +;102:{-0.262866f, -0.951056f, 0.162460f}, {-0.864188f, -0.442863f, 0.238856f}, +;103:{-0.809017f, -0.309017f, 0.500000f}, {-0.688191f, -0.587785f, 0.425325f}, +;104:{-0.681718f, -0.147621f, 0.716567f}, {-0.442863f, -0.238856f, 0.864188f}, +;105:{-0.587785f, -0.425325f, 0.688191f}, {-0.309017f, -0.500000f, 0.809017f}, +;106:{-0.147621f, -0.716567f, 0.681718f}, {-0.425325f, -0.688191f, 0.587785f}, +;107:{-0.162460f, -0.262866f, 0.951056f}, {0.442863f, -0.238856f, 0.864188f}, +;108:{0.162460f, -0.262866f, 0.951056f}, {0.309017f, -0.500000f, 0.809017f}, +;109:{0.147621f, -0.716567f, 0.681718f}, {0.000000f, -0.525731f, 0.850651f}, +;110:{0.425325f, -0.688191f, 0.587785f}, {0.587785f, -0.425325f, 0.688191f}, +;111:{0.688191f, -0.587785f, 0.425325f}, {-0.955423f, 0.295242f, 0.000000f}, +;112:{-0.951056f, 0.162460f, 0.262866f}, {-1.000000f, 0.000000f, 0.000000f}, +;113:{-0.850651f, 0.000000f, 0.525731f}, {-0.955423f, -0.295242f, 0.000000f}, +;114:{-0.951056f, -0.162460f, 0.262866f}, {-0.864188f, 0.442863f, -0.238856f}, +;115:{-0.951056f, 0.162460f, -0.262866f}, {-0.809017f, 0.309017f, -0.500000f}, +;116:{-0.864188f, -0.442863f, -0.238856f}, {-0.951056f, -0.162460f, -0.262866f}, +;117:{-0.809017f, -0.309017f, -0.500000f}, {-0.681718f, 0.147621f, -0.716567f}, +;118:{-0.681718f, -0.147621f, -0.716567f}, {-0.850651f, 0.000000f, -0.525731f}, +;119:{-0.688191f, 0.587785f, -0.425325f}, {-0.587785f, 0.425325f, -0.688191f}, +;120:{-0.425325f, 0.688191f, -0.587785f}, {-0.425325f, -0.688191f, -0.587785f}, +;121:{-0.587785f, -0.425325f, -0.688191f}, {-0.688191f, -0.587785f, -0.425325f} +;122:}; +;123: +;124://============================================================== +;125: +;126:int Q_rand( int *seed ) { +line 127 +;127: *seed = (69069 * *seed + 1); +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 69069 +ADDRLP4 0 +INDIRP4 +INDIRI4 +MULI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 128 +;128: return *seed; +ADDRFP4 0 +INDIRP4 +INDIRI4 +RETI4 +LABELV $36 +endproc Q_rand 4 0 +export Q_random +proc Q_random 4 4 +line 131 +;129:} +;130: +;131:float Q_random( int *seed ) { +line 132 +;132: return ( Q_rand( seed ) & 0xffff ) / (float)0x10000; +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +ADDRGP4 Q_rand +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 65535 +BANDI4 +CVIF4 4 +CNSTF4 1199570944 +DIVF4 +RETF4 +LABELV $37 +endproc Q_random 4 4 +export Q_crandom +proc Q_crandom 4 4 +line 135 +;133:} +;134: +;135:float Q_crandom( int *seed ) { +line 136 +;136: return 2.0 * ( Q_random( seed ) - 0.5 ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +ADDRGP4 Q_random +CALLF4 +ASGNF4 +CNSTF4 1073741824 +ADDRLP4 0 +INDIRF4 +CNSTF4 1056964608 +SUBF4 +MULF4 +RETF4 +LABELV $38 +endproc Q_crandom 4 4 +export VectorCompare +proc VectorCompare 16 0 +line 141 +;137:} +;138: +;139:#ifdef __LCC__ +;140: +;141:int VectorCompare( const vec3_t v1, const vec3_t v2 ) { +line 142 +;142: if (v1[0] != v2[0] || v1[1] != v2[1] || v1[2] != v2[2]) { +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +INDIRF4 +NEF4 $43 +ADDRLP4 8 +CNSTI4 4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +NEF4 $43 +ADDRLP4 12 +CNSTI4 8 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +EQF4 $40 +LABELV $43 +line 143 +;143: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $39 +JUMPV +LABELV $40 +line 145 +;144: } +;145: return 1; +CNSTI4 1 +RETI4 +LABELV $39 +endproc VectorCompare 16 0 +export VectorLength +proc VectorLength 20 4 +line 148 +;146:} +;147: +;148:vec_t VectorLength( const vec3_t v ) { +line 149 +;149: return (vec_t)sqrt (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +INDIRF4 +ASGNF4 +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDRLP4 8 +INDIRF4 +ADDRLP4 8 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 12 +INDIRF4 +ADDRLP4 12 +INDIRF4 +MULF4 +ADDF4 +ARGF4 +ADDRLP4 16 +ADDRGP4 sqrt +CALLF4 +ASGNF4 +ADDRLP4 16 +INDIRF4 +RETF4 +LABELV $44 +endproc VectorLength 20 4 +export VectorLengthSquared +proc VectorLengthSquared 16 0 +line 152 +;150:} +;151: +;152:vec_t VectorLengthSquared( const vec3_t v ) { +line 153 +;153: return (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +INDIRF4 +ASGNF4 +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ADDRLP4 8 +INDIRF4 +ADDRLP4 8 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 12 +INDIRF4 +ADDRLP4 12 +INDIRF4 +MULF4 +ADDF4 +RETF4 +LABELV $45 +endproc VectorLengthSquared 16 0 +export Distance +proc Distance 32 4 +line 156 +;154:} +;155: +;156:vec_t Distance( const vec3_t p1, const vec3_t p2 ) { +line 159 +;157: vec3_t v; +;158: +;159: VectorSubtract (p2, p1, v); +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 12 +INDIRP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 20 +CNSTI4 4 +ASGNI4 +ADDRLP4 0+4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 24 +CNSTI4 8 +ASGNI4 +ADDRLP4 0+8 +ADDRFP4 4 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 160 +;160: return VectorLength( v ); +ADDRLP4 0 +ARGP4 +ADDRLP4 28 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 28 +INDIRF4 +RETF4 +LABELV $46 +endproc Distance 32 4 +export DistanceSquared +proc DistanceSquared 32 0 +line 163 +;161:} +;162: +;163:vec_t DistanceSquared( const vec3_t p1, const vec3_t p2 ) { +line 166 +;164: vec3_t v; +;165: +;166: VectorSubtract (p2, p1, v); +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 12 +INDIRP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 20 +CNSTI4 4 +ASGNI4 +ADDRLP4 0+4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 24 +CNSTI4 8 +ASGNI4 +ADDRLP4 0+8 +ADDRFP4 4 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 167 +;167: return v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; +ADDRLP4 28 +ADDRLP4 0 +INDIRF4 +ASGNF4 +ADDRLP4 28 +INDIRF4 +ADDRLP4 28 +INDIRF4 +MULF4 +ADDRLP4 0+4 +INDIRF4 +ADDRLP4 0+4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 0+8 +INDIRF4 +ADDRLP4 0+8 +INDIRF4 +MULF4 +ADDF4 +RETF4 +LABELV $49 +endproc DistanceSquared 32 0 +export VectorNormalizeFast +proc VectorNormalizeFast 36 4 +line 173 +;168:} +;169: +;170:// fast vector normalize routine that does not check to make sure +;171:// that length != 0, nor does it return length, uses rsqrt approximation +;172:void VectorNormalizeFast( vec3_t v ) +;173:{ +line 176 +;174: float ilength; +;175: +;176: ilength = Q_rsqrt( DotProduct( v, v ) ); +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 4 +INDIRP4 +INDIRF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 8 +INDIRF4 +ADDRLP4 8 +INDIRF4 +MULF4 +ADDRLP4 12 +INDIRF4 +ADDRLP4 12 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 16 +INDIRF4 +ADDRLP4 16 +INDIRF4 +MULF4 +ADDF4 +ARGF4 +ADDRLP4 20 +ADDRGP4 Q_rsqrt +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 20 +INDIRF4 +ASGNF4 +line 178 +;177: +;178: v[0] *= ilength; +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 179 +;179: v[1] *= ilength; +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 180 +;180: v[2] *= ilength; +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 32 +INDIRP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 181 +;181:} +LABELV $56 +endproc VectorNormalizeFast 36 4 +export VectorInverse +proc VectorInverse 12 0 +line 183 +;182: +;183:void VectorInverse( vec3_t v ){ +line 184 +;184: v[0] = -v[0]; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRF4 +NEGF4 +ASGNF4 +line 185 +;185: v[1] = -v[1]; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRF4 +NEGF4 +ASGNF4 +line 186 +;186: v[2] = -v[2]; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +NEGF4 +ASGNF4 +line 187 +;187:} +LABELV $57 +endproc VectorInverse 12 0 +export CrossProduct +proc CrossProduct 40 0 +line 189 +;188: +;189:void CrossProduct( const vec3_t v1, const vec3_t v2, vec3_t cross ) { +line 190 +;190: cross[0] = v1[1]*v2[2] - v1[2]*v2[1]; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +CNSTI4 4 +ASGNI4 +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTI4 8 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 191 +;191: cross[1] = v1[2]*v2[0] - v1[0]*v2[2]; +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +CNSTI4 8 +ASGNI4 +ADDRLP4 24 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 16 +INDIRP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 192 +;192: cross[2] = v1[0]*v2[1] - v1[1]*v2[0]; +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 32 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 36 +CNSTI4 4 +ASGNI4 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 28 +INDIRP4 +INDIRF4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 32 +INDIRP4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 193 +;193:} +LABELV $58 +endproc CrossProduct 40 0 +export ClampChar +proc ClampChar 0 0 +line 198 +;194:#endif +;195: +;196://======================================================= +;197: +;198:signed char ClampChar( int i ) { +line 199 +;199: if ( i < -128 ) { +ADDRFP4 0 +INDIRI4 +CNSTI4 -128 +GEI4 $60 +line 200 +;200: return -128; +CNSTI4 -128 +RETI4 +ADDRGP4 $59 +JUMPV +LABELV $60 +line 202 +;201: } +;202: if ( i > 127 ) { +ADDRFP4 0 +INDIRI4 +CNSTI4 127 +LEI4 $62 +line 203 +;203: return 127; +CNSTI4 127 +RETI4 +ADDRGP4 $59 +JUMPV +LABELV $62 +line 205 +;204: } +;205: return i; +ADDRFP4 0 +INDIRI4 +CVII1 4 +CVII4 1 +RETI4 +LABELV $59 +endproc ClampChar 0 0 +export ClampShort +proc ClampShort 0 0 +line 208 +;206:} +;207: +;208:signed short ClampShort( int i ) { +line 209 +;209: if ( i < -32768 ) { +ADDRFP4 0 +INDIRI4 +CNSTI4 -32768 +GEI4 $65 +line 210 +;210: return -32768; +CNSTI4 -32768 +RETI4 +ADDRGP4 $64 +JUMPV +LABELV $65 +line 212 +;211: } +;212: if ( i > 0x7fff ) { +ADDRFP4 0 +INDIRI4 +CNSTI4 32767 +LEI4 $67 +line 213 +;213: return 0x7fff; +CNSTI4 32767 +RETI4 +ADDRGP4 $64 +JUMPV +LABELV $67 +line 215 +;214: } +;215: return i; +ADDRFP4 0 +INDIRI4 +CVII2 4 +CVII4 2 +RETI4 +LABELV $64 +endproc ClampShort 0 0 +export DirToByte +proc DirToByte 24 0 +line 220 +;216:} +;217: +;218: +;219:// this isn't a real cheap function to call! +;220:int DirToByte( vec3_t dir ) { +line 224 +;221: int i, best; +;222: float d, bestd; +;223: +;224: if ( !dir ) { +ADDRFP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $70 +line 225 +;225: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $69 +JUMPV +LABELV $70 +line 228 +;226: } +;227: +;228: bestd = 0; +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +line 229 +;229: best = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 230 +;230: for (i=0 ; i bestd) +ADDRLP4 4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +LEF4 $78 +line 234 +;234: { +line 235 +;235: bestd = d; +ADDRLP4 8 +ADDRLP4 4 +INDIRF4 +ASGNF4 +line 236 +;236: best = i; +ADDRLP4 12 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 237 +;237: } +LABELV $78 +line 238 +;238: } +LABELV $73 +line 230 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 162 +LTI4 $72 +line 240 +;239: +;240: return best; +ADDRLP4 12 +INDIRI4 +RETI4 +LABELV $69 +endproc DirToByte 24 0 +export ByteToDir +proc ByteToDir 4 0 +line 243 +;241:} +;242: +;243:void ByteToDir( int b, vec3_t dir ) { +line 244 +;244: if ( b < 0 || b >= NUMVERTEXNORMALS ) { +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +LTI4 $83 +ADDRLP4 0 +INDIRI4 +CNSTI4 162 +LTI4 $81 +LABELV $83 +line 245 +;245: VectorCopy( vec3_origin, dir ); +ADDRFP4 4 +INDIRP4 +ADDRGP4 vec3_origin +INDIRB +ASGNB 12 +line 246 +;246: return; +ADDRGP4 $80 +JUMPV +LABELV $81 +line 248 +;247: } +;248: VectorCopy (bytedirs[b], dir); +ADDRFP4 4 +INDIRP4 +CNSTI4 12 +ADDRFP4 0 +INDIRI4 +MULI4 +ADDRGP4 bytedirs +ADDP4 +INDIRB +ASGNB 12 +line 249 +;249:} +LABELV $80 +endproc ByteToDir 4 0 +export ColorBytes3 +proc ColorBytes3 40 0 +line 252 +;250: +;251: +;252:unsigned ColorBytes3 (float r, float g, float b) { +line 255 +;253: unsigned i; +;254: +;255: ( (byte *)&i )[0] = r * 255; +ADDRLP4 8 +CNSTF4 1132396544 +ADDRFP4 0 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 12 +CNSTF4 1325400064 +ASGNF4 +ADDRLP4 8 +INDIRF4 +ADDRLP4 12 +INDIRF4 +LTF4 $86 +ADDRLP4 4 +ADDRLP4 8 +INDIRF4 +ADDRLP4 12 +INDIRF4 +SUBF4 +CVFI4 4 +CVIU4 4 +CNSTU4 2147483648 +ADDU4 +ASGNU4 +ADDRGP4 $87 +JUMPV +LABELV $86 +ADDRLP4 4 +ADDRLP4 8 +INDIRF4 +CVFI4 4 +CVIU4 4 +ASGNU4 +LABELV $87 +ADDRLP4 0 +ADDRLP4 4 +INDIRU4 +CVUU1 4 +ASGNU1 +line 256 +;256: ( (byte *)&i )[1] = g * 255; +ADDRLP4 20 +CNSTF4 1132396544 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 24 +CNSTF4 1325400064 +ASGNF4 +ADDRLP4 20 +INDIRF4 +ADDRLP4 24 +INDIRF4 +LTF4 $90 +ADDRLP4 16 +ADDRLP4 20 +INDIRF4 +ADDRLP4 24 +INDIRF4 +SUBF4 +CVFI4 4 +CVIU4 4 +CNSTU4 2147483648 +ADDU4 +ASGNU4 +ADDRGP4 $91 +JUMPV +LABELV $90 +ADDRLP4 16 +ADDRLP4 20 +INDIRF4 +CVFI4 4 +CVIU4 4 +ASGNU4 +LABELV $91 +ADDRLP4 0+1 +ADDRLP4 16 +INDIRU4 +CVUU1 4 +ASGNU1 +line 257 +;257: ( (byte *)&i )[2] = b * 255; +ADDRLP4 32 +CNSTF4 1132396544 +ADDRFP4 8 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 36 +CNSTF4 1325400064 +ASGNF4 +ADDRLP4 32 +INDIRF4 +ADDRLP4 36 +INDIRF4 +LTF4 $94 +ADDRLP4 28 +ADDRLP4 32 +INDIRF4 +ADDRLP4 36 +INDIRF4 +SUBF4 +CVFI4 4 +CVIU4 4 +CNSTU4 2147483648 +ADDU4 +ASGNU4 +ADDRGP4 $95 +JUMPV +LABELV $94 +ADDRLP4 28 +ADDRLP4 32 +INDIRF4 +CVFI4 4 +CVIU4 4 +ASGNU4 +LABELV $95 +ADDRLP4 0+2 +ADDRLP4 28 +INDIRU4 +CVUU1 4 +ASGNU1 +line 259 +;258: +;259: return i; +ADDRLP4 0 +INDIRU4 +RETU4 +LABELV $84 +endproc ColorBytes3 40 0 +export ColorBytes4 +proc ColorBytes4 52 0 +line 262 +;260:} +;261: +;262:unsigned ColorBytes4 (float r, float g, float b, float a) { +line 265 +;263: unsigned i; +;264: +;265: ( (byte *)&i )[0] = r * 255; +ADDRLP4 8 +CNSTF4 1132396544 +ADDRFP4 0 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 12 +CNSTF4 1325400064 +ASGNF4 +ADDRLP4 8 +INDIRF4 +ADDRLP4 12 +INDIRF4 +LTF4 $98 +ADDRLP4 4 +ADDRLP4 8 +INDIRF4 +ADDRLP4 12 +INDIRF4 +SUBF4 +CVFI4 4 +CVIU4 4 +CNSTU4 2147483648 +ADDU4 +ASGNU4 +ADDRGP4 $99 +JUMPV +LABELV $98 +ADDRLP4 4 +ADDRLP4 8 +INDIRF4 +CVFI4 4 +CVIU4 4 +ASGNU4 +LABELV $99 +ADDRLP4 0 +ADDRLP4 4 +INDIRU4 +CVUU1 4 +ASGNU1 +line 266 +;266: ( (byte *)&i )[1] = g * 255; +ADDRLP4 20 +CNSTF4 1132396544 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 24 +CNSTF4 1325400064 +ASGNF4 +ADDRLP4 20 +INDIRF4 +ADDRLP4 24 +INDIRF4 +LTF4 $102 +ADDRLP4 16 +ADDRLP4 20 +INDIRF4 +ADDRLP4 24 +INDIRF4 +SUBF4 +CVFI4 4 +CVIU4 4 +CNSTU4 2147483648 +ADDU4 +ASGNU4 +ADDRGP4 $103 +JUMPV +LABELV $102 +ADDRLP4 16 +ADDRLP4 20 +INDIRF4 +CVFI4 4 +CVIU4 4 +ASGNU4 +LABELV $103 +ADDRLP4 0+1 +ADDRLP4 16 +INDIRU4 +CVUU1 4 +ASGNU1 +line 267 +;267: ( (byte *)&i )[2] = b * 255; +ADDRLP4 32 +CNSTF4 1132396544 +ADDRFP4 8 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 36 +CNSTF4 1325400064 +ASGNF4 +ADDRLP4 32 +INDIRF4 +ADDRLP4 36 +INDIRF4 +LTF4 $106 +ADDRLP4 28 +ADDRLP4 32 +INDIRF4 +ADDRLP4 36 +INDIRF4 +SUBF4 +CVFI4 4 +CVIU4 4 +CNSTU4 2147483648 +ADDU4 +ASGNU4 +ADDRGP4 $107 +JUMPV +LABELV $106 +ADDRLP4 28 +ADDRLP4 32 +INDIRF4 +CVFI4 4 +CVIU4 4 +ASGNU4 +LABELV $107 +ADDRLP4 0+2 +ADDRLP4 28 +INDIRU4 +CVUU1 4 +ASGNU1 +line 268 +;268: ( (byte *)&i )[3] = a * 255; +ADDRLP4 44 +CNSTF4 1132396544 +ADDRFP4 12 +INDIRF4 +MULF4 +ASGNF4 +ADDRLP4 48 +CNSTF4 1325400064 +ASGNF4 +ADDRLP4 44 +INDIRF4 +ADDRLP4 48 +INDIRF4 +LTF4 $110 +ADDRLP4 40 +ADDRLP4 44 +INDIRF4 +ADDRLP4 48 +INDIRF4 +SUBF4 +CVFI4 4 +CVIU4 4 +CNSTU4 2147483648 +ADDU4 +ASGNU4 +ADDRGP4 $111 +JUMPV +LABELV $110 +ADDRLP4 40 +ADDRLP4 44 +INDIRF4 +CVFI4 4 +CVIU4 4 +ASGNU4 +LABELV $111 +ADDRLP4 0+3 +ADDRLP4 40 +INDIRU4 +CVUU1 4 +ASGNU1 +line 270 +;269: +;270: return i; +ADDRLP4 0 +INDIRU4 +RETU4 +LABELV $96 +endproc ColorBytes4 52 0 +export NormalizeColor +proc NormalizeColor 12 0 +line 273 +;271:} +;272: +;273:float NormalizeColor( const vec3_t in, vec3_t out ) { +line 276 +;274: float max; +;275: +;276: max = in[0]; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ASGNF4 +line 277 +;277: if ( in[1] > max ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +LEF4 $113 +line 278 +;278: max = in[1]; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +line 279 +;279: } +LABELV $113 +line 280 +;280: if ( in[2] > max ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +LEF4 $115 +line 281 +;281: max = in[2]; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +line 282 +;282: } +LABELV $115 +line 284 +;283: +;284: if ( !max ) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +NEF4 $117 +line 285 +;285: VectorClear( out ); +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +ADDRLP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 8 +INDIRF4 +ASGNF4 +ADDRLP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 8 +INDIRF4 +ASGNF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRF4 +ASGNF4 +line 286 +;286: } else { +ADDRGP4 $118 +JUMPV +LABELV $117 +line 287 +;287: out[0] = in[0] / max; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +DIVF4 +ASGNF4 +line 288 +;288: out[1] = in[1] / max; +ADDRLP4 4 +CNSTI4 4 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +DIVF4 +ASGNF4 +line 289 +;289: out[2] = in[2] / max; +ADDRLP4 8 +CNSTI4 8 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +DIVF4 +ASGNF4 +line 290 +;290: } +LABELV $118 +line 291 +;291: return max; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $112 +endproc NormalizeColor 12 0 +export PlaneFromPoints +proc PlaneFromPoints 76 12 +line 303 +;292:} +;293: +;294: +;295:/* +;296:===================== +;297:PlaneFromPoints +;298: +;299:Returns false if the triangle is degenrate. +;300:The normal will point out of the clock for clockwise ordered points +;301:===================== +;302:*/ +;303:qboolean PlaneFromPoints( vec4_t plane, const vec3_t a, const vec3_t b, const vec3_t c ) { +line 306 +;304: vec3_t d1, d2; +;305: +;306: VectorSubtract( b, a, d1 ); +ADDRLP4 24 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 28 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 24 +INDIRP4 +INDIRF4 +ADDRLP4 28 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 32 +CNSTI4 4 +ASGNI4 +ADDRLP4 0+4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 36 +CNSTI4 8 +ASGNI4 +ADDRLP4 0+8 +ADDRFP4 8 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 36 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 307 +;307: VectorSubtract( c, a, d2 ); +ADDRLP4 40 +ADDRFP4 12 +INDIRP4 +ASGNP4 +ADDRLP4 44 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 40 +INDIRP4 +INDIRF4 +ADDRLP4 44 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 48 +CNSTI4 4 +ASGNI4 +ADDRLP4 12+4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 44 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRLP4 52 +CNSTI4 8 +ASGNI4 +ADDRLP4 12+8 +ADDRFP4 12 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 308 +;308: CrossProduct( d2, d1, plane ); +ADDRLP4 12 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 CrossProduct +CALLV +pop +line 309 +;309: if ( VectorNormalize( plane ) == 0 ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 56 +ADDRGP4 VectorNormalize +CALLF4 +ASGNF4 +ADDRLP4 56 +INDIRF4 +CNSTF4 0 +NEF4 $124 +line 310 +;310: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $119 +JUMPV +LABELV $124 +line 313 +;311: } +;312: +;313: plane[3] = DotProduct( a, plane ); +ADDRLP4 60 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 64 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 68 +CNSTI4 4 +ASGNI4 +ADDRLP4 72 +CNSTI4 8 +ASGNI4 +ADDRLP4 60 +INDIRP4 +CNSTI4 12 +ADDP4 +ADDRLP4 64 +INDIRP4 +INDIRF4 +ADDRLP4 60 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 64 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 60 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 64 +INDIRP4 +ADDRLP4 72 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 60 +INDIRP4 +ADDRLP4 72 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 314 +;314: return qtrue; +CNSTI4 1 +RETI4 +LABELV $119 +endproc PlaneFromPoints 76 12 +export RotatePointAroundVector +proc RotatePointAroundVector 256 12 +line 325 +;315:} +;316: +;317:/* +;318:=============== +;319:RotatePointAroundVector +;320: +;321:This is not implemented very well... +;322:=============== +;323:*/ +;324:void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, +;325: float degrees ) { +line 335 +;326: float m[3][3]; +;327: float im[3][3]; +;328: float zrot[3][3]; +;329: float tmpmat[3][3]; +;330: float rot[3][3]; +;331: int i; +;332: vec3_t vr, vup, vf; +;333: float rad; +;334: +;335: vf[0] = dir[0]; +ADDRLP4 148 +ADDRFP4 4 +INDIRP4 +INDIRF4 +ASGNF4 +line 336 +;336: vf[1] = dir[1]; +ADDRLP4 148+4 +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +line 337 +;337: vf[2] = dir[2]; +ADDRLP4 148+8 +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +line 339 +;338: +;339: PerpendicularVector( vr, dir ); +ADDRLP4 160 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 PerpendicularVector +CALLV +pop +line 340 +;340: CrossProduct( vr, vf, vup ); +ADDRLP4 160 +ARGP4 +ADDRLP4 148 +ARGP4 +ADDRLP4 176 +ARGP4 +ADDRGP4 CrossProduct +CALLV +pop +line 342 +;341: +;342: m[0][0] = vr[0]; +ADDRLP4 40 +ADDRLP4 160 +INDIRF4 +ASGNF4 +line 343 +;343: m[1][0] = vr[1]; +ADDRLP4 40+12 +ADDRLP4 160+4 +INDIRF4 +ASGNF4 +line 344 +;344: m[2][0] = vr[2]; +ADDRLP4 40+24 +ADDRLP4 160+8 +INDIRF4 +ASGNF4 +line 346 +;345: +;346: m[0][1] = vup[0]; +ADDRLP4 40+4 +ADDRLP4 176 +INDIRF4 +ASGNF4 +line 347 +;347: m[1][1] = vup[1]; +ADDRLP4 40+12+4 +ADDRLP4 176+4 +INDIRF4 +ASGNF4 +line 348 +;348: m[2][1] = vup[2]; +ADDRLP4 40+24+4 +ADDRLP4 176+8 +INDIRF4 +ASGNF4 +line 350 +;349: +;350: m[0][2] = vf[0]; +ADDRLP4 40+8 +ADDRLP4 148 +INDIRF4 +ASGNF4 +line 351 +;351: m[1][2] = vf[1]; +ADDRLP4 40+12+8 +ADDRLP4 148+4 +INDIRF4 +ASGNF4 +line 352 +;352: m[2][2] = vf[2]; +ADDRLP4 40+24+8 +ADDRLP4 148+8 +INDIRF4 +ASGNF4 +line 354 +;353: +;354: memcpy( im, m, sizeof( im ) ); +ADDRLP4 112 +ARGP4 +ADDRLP4 40 +ARGP4 +CNSTI4 36 +ARGI4 +ADDRGP4 memcpy +CALLP4 +pop +line 356 +;355: +;356: im[0][1] = m[1][0]; +ADDRLP4 112+4 +ADDRLP4 40+12 +INDIRF4 +ASGNF4 +line 357 +;357: im[0][2] = m[2][0]; +ADDRLP4 112+8 +ADDRLP4 40+24 +INDIRF4 +ASGNF4 +line 358 +;358: im[1][0] = m[0][1]; +ADDRLP4 112+12 +ADDRLP4 40+4 +INDIRF4 +ASGNF4 +line 359 +;359: im[1][2] = m[2][1]; +ADDRLP4 112+12+8 +ADDRLP4 40+24+4 +INDIRF4 +ASGNF4 +line 360 +;360: im[2][0] = m[0][2]; +ADDRLP4 112+24 +ADDRLP4 40+8 +INDIRF4 +ASGNF4 +line 361 +;361: im[2][1] = m[1][2]; +ADDRLP4 112+24+4 +ADDRLP4 40+12+8 +INDIRF4 +ASGNF4 +line 363 +;362: +;363: memset( zrot, 0, sizeof( zrot ) ); +ADDRLP4 76 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 36 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 364 +;364: zrot[0][0] = zrot[1][1] = zrot[2][2] = 1.0F; +ADDRLP4 224 +CNSTF4 1065353216 +ASGNF4 +ADDRLP4 76+24+8 +ADDRLP4 224 +INDIRF4 +ASGNF4 +ADDRLP4 76+12+4 +ADDRLP4 224 +INDIRF4 +ASGNF4 +ADDRLP4 76 +ADDRLP4 224 +INDIRF4 +ASGNF4 +line 366 +;365: +;366: rad = DEG2RAD( degrees ); +ADDRLP4 172 +CNSTF4 1078530011 +ADDRFP4 12 +INDIRF4 +MULF4 +CNSTF4 1127481344 +DIVF4 +ASGNF4 +line 367 +;367: zrot[0][0] = cos( rad ); +ADDRLP4 172 +INDIRF4 +ARGF4 +ADDRLP4 228 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRLP4 76 +ADDRLP4 228 +INDIRF4 +ASGNF4 +line 368 +;368: zrot[0][1] = sin( rad ); +ADDRLP4 172 +INDIRF4 +ARGF4 +ADDRLP4 232 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRLP4 76+4 +ADDRLP4 232 +INDIRF4 +ASGNF4 +line 369 +;369: zrot[1][0] = -sin( rad ); +ADDRLP4 172 +INDIRF4 +ARGF4 +ADDRLP4 236 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRLP4 76+12 +ADDRLP4 236 +INDIRF4 +NEGF4 +ASGNF4 +line 370 +;370: zrot[1][1] = cos( rad ); +ADDRLP4 172 +INDIRF4 +ARGF4 +ADDRLP4 240 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRLP4 76+12+4 +ADDRLP4 240 +INDIRF4 +ASGNF4 +line 372 +;371: +;372: MatrixMultiply( m, zrot, tmpmat ); +ADDRLP4 40 +ARGP4 +ADDRLP4 76 +ARGP4 +ADDRLP4 188 +ARGP4 +ADDRGP4 MatrixMultiply +CALLV +pop +line 373 +;373: MatrixMultiply( tmpmat, im, rot ); +ADDRLP4 188 +ARGP4 +ADDRLP4 112 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRGP4 MatrixMultiply +CALLV +pop +line 375 +;374: +;375: for ( i = 0; i < 3; i++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $171 +line 376 +;376: dst[i] = rot[i][0] * point[0] + rot[i][1] * point[1] + rot[i][2] * point[2]; +ADDRLP4 248 +CNSTI4 12 +ADDRLP4 0 +INDIRI4 +MULI4 +ASGNI4 +ADDRLP4 252 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ADDRLP4 248 +INDIRI4 +ADDRLP4 4 +ADDP4 +INDIRF4 +ADDRLP4 252 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 248 +INDIRI4 +ADDRLP4 4+4 +ADDP4 +INDIRF4 +ADDRLP4 252 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 248 +INDIRI4 +ADDRLP4 4+8 +ADDP4 +INDIRF4 +ADDRLP4 252 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 377 +;377: } +LABELV $172 +line 375 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LTI4 $171 +line 378 +;378:} +LABELV $126 +endproc RotatePointAroundVector 256 12 +export RotateAroundDirection +proc RotateAroundDirection 20 16 +line 385 +;379: +;380:/* +;381:=============== +;382:RotateAroundDirection +;383:=============== +;384:*/ +;385:void RotateAroundDirection( vec3_t axis[3], float yaw ) { +line 388 +;386: +;387: // create an arbitrary axis[1] +;388: PerpendicularVector( axis[1], axis[0] ); +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 PerpendicularVector +CALLV +pop +line 391 +;389: +;390: // rotate it around axis[0] by yaw +;391: if ( yaw ) { +ADDRFP4 4 +INDIRF4 +CNSTF4 0 +EQF4 $178 +line 394 +;392: vec3_t temp; +;393: +;394: VectorCopy( axis[1], temp ); +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRB +ASGNB 12 +line 395 +;395: RotatePointAroundVector( axis[1], axis[0], temp, yaw ); +ADDRLP4 16 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +ARGP4 +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRGP4 RotatePointAroundVector +CALLV +pop +line 396 +;396: } +LABELV $178 +line 399 +;397: +;398: // cross to get axis[2] +;399: CrossProduct( axis[0], axis[1], axis[2] ); +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +ARGP4 +ADDRGP4 CrossProduct +CALLV +pop +line 400 +;400:} +LABELV $177 +endproc RotateAroundDirection 20 16 +export vectoangles +proc vectoangles 40 8 +line 404 +;401: +;402: +;403: +;404:void vectoangles( const vec3_t value1, vec3_t angles ) { +line 408 +;405: float forward; +;406: float yaw, pitch; +;407: +;408: if ( value1[1] == 0 && value1[0] == 0 ) { +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +CNSTF4 0 +ASGNF4 +ADDRLP4 12 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRF4 +NEF4 $181 +ADDRLP4 12 +INDIRP4 +INDIRF4 +ADDRLP4 16 +INDIRF4 +NEF4 $181 +line 409 +;409: yaw = 0; +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +line 410 +;410: if ( value1[2] > 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +CNSTF4 0 +LEF4 $183 +line 411 +;411: pitch = 90; +ADDRLP4 4 +CNSTF4 1119092736 +ASGNF4 +line 412 +;412: } +ADDRGP4 $182 +JUMPV +LABELV $183 +line 413 +;413: else { +line 414 +;414: pitch = 270; +ADDRLP4 4 +CNSTF4 1132920832 +ASGNF4 +line 415 +;415: } +line 416 +;416: } +ADDRGP4 $182 +JUMPV +LABELV $181 +line 417 +;417: else { +line 418 +;418: if ( value1[0] ) { +ADDRFP4 0 +INDIRP4 +INDIRF4 +CNSTF4 0 +EQF4 $185 +line 419 +;419: yaw = ( atan2 ( value1[1], value1[0] ) * 180 / M_PI ); +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 atan2 +CALLF4 +ASGNF4 +ADDRLP4 0 +CNSTF4 1127481344 +ADDRLP4 24 +INDIRF4 +MULF4 +CNSTF4 1078530011 +DIVF4 +ASGNF4 +line 420 +;420: } +ADDRGP4 $186 +JUMPV +LABELV $185 +line 421 +;421: else if ( value1[1] > 0 ) { +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +CNSTF4 0 +LEF4 $187 +line 422 +;422: yaw = 90; +ADDRLP4 0 +CNSTF4 1119092736 +ASGNF4 +line 423 +;423: } +ADDRGP4 $188 +JUMPV +LABELV $187 +line 424 +;424: else { +line 425 +;425: yaw = 270; +ADDRLP4 0 +CNSTF4 1132920832 +ASGNF4 +line 426 +;426: } +LABELV $188 +LABELV $186 +line 427 +;427: if ( yaw < 0 ) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +GEF4 $189 +line 428 +;428: yaw += 360; +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +CNSTF4 1135869952 +ADDF4 +ASGNF4 +line 429 +;429: } +LABELV $189 +line 431 +;430: +;431: forward = sqrt ( value1[0]*value1[0] + value1[1]*value1[1] ); +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 24 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ASGNF4 +ADDRLP4 28 +ADDRLP4 20 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 24 +INDIRF4 +ADDRLP4 24 +INDIRF4 +MULF4 +ADDRLP4 28 +INDIRF4 +ADDRLP4 28 +INDIRF4 +MULF4 +ADDF4 +ARGF4 +ADDRLP4 32 +ADDRGP4 sqrt +CALLF4 +ASGNF4 +ADDRLP4 8 +ADDRLP4 32 +INDIRF4 +ASGNF4 +line 432 +;432: pitch = ( atan2(value1[2], forward) * 180 / M_PI ); +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 36 +ADDRGP4 atan2 +CALLF4 +ASGNF4 +ADDRLP4 4 +CNSTF4 1127481344 +ADDRLP4 36 +INDIRF4 +MULF4 +CNSTF4 1078530011 +DIVF4 +ASGNF4 +line 433 +;433: if ( pitch < 0 ) { +ADDRLP4 4 +INDIRF4 +CNSTF4 0 +GEF4 $191 +line 434 +;434: pitch += 360; +ADDRLP4 4 +ADDRLP4 4 +INDIRF4 +CNSTF4 1135869952 +ADDF4 +ASGNF4 +line 435 +;435: } +LABELV $191 +line 436 +;436: } +LABELV $182 +line 438 +;437: +;438: angles[PITCH] = -pitch; +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRF4 +NEGF4 +ASGNF4 +line 439 +;439: angles[YAW] = yaw; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 0 +INDIRF4 +ASGNF4 +line 440 +;440: angles[ROLL] = 0; +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +CNSTF4 0 +ASGNF4 +line 441 +;441:} +LABELV $180 +endproc vectoangles 40 8 +export AnglesToAxis +proc AnglesToAxis 16 16 +line 449 +;442: +;443: +;444:/* +;445:================= +;446:AnglesToAxis +;447:================= +;448:*/ +;449:void AnglesToAxis( const vec3_t angles, vec3_t axis[3] ) { +line 453 +;450: vec3_t right; +;451: +;452: // angle vectors returns "right" instead of "y axis" +;453: AngleVectors( angles, axis[0], right, axis[2] ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 24 +ADDP4 +ARGP4 +ADDRGP4 AngleVectors +CALLV +pop +line 454 +;454: VectorSubtract( vec3_origin, right, axis[1] ); +ADDRFP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +ADDRGP4 vec3_origin +INDIRF4 +ADDRLP4 0 +INDIRF4 +SUBF4 +ASGNF4 +ADDRFP4 4 +INDIRP4 +CNSTI4 16 +ADDP4 +ADDRGP4 vec3_origin+4 +INDIRF4 +ADDRLP4 0+4 +INDIRF4 +SUBF4 +ASGNF4 +ADDRFP4 4 +INDIRP4 +CNSTI4 20 +ADDP4 +ADDRGP4 vec3_origin+8 +INDIRF4 +ADDRLP4 0+8 +INDIRF4 +SUBF4 +ASGNF4 +line 455 +;455:} +LABELV $193 +endproc AnglesToAxis 16 16 +export AxisClear +proc AxisClear 0 0 +line 457 +;456: +;457:void AxisClear( vec3_t axis[3] ) { +line 458 +;458: axis[0][0] = 1; +ADDRFP4 0 +INDIRP4 +CNSTF4 1065353216 +ASGNF4 +line 459 +;459: axis[0][1] = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +CNSTF4 0 +ASGNF4 +line 460 +;460: axis[0][2] = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +CNSTF4 0 +ASGNF4 +line 461 +;461: axis[1][0] = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +CNSTF4 0 +ASGNF4 +line 462 +;462: axis[1][1] = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 16 +ADDP4 +CNSTF4 1065353216 +ASGNF4 +line 463 +;463: axis[1][2] = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +CNSTF4 0 +ASGNF4 +line 464 +;464: axis[2][0] = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +CNSTF4 0 +ASGNF4 +line 465 +;465: axis[2][1] = 0; +ADDRFP4 0 +INDIRP4 +CNSTI4 28 +ADDP4 +CNSTF4 0 +ASGNF4 +line 466 +;466: axis[2][2] = 1; +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +CNSTF4 1065353216 +ASGNF4 +line 467 +;467:} +LABELV $198 +endproc AxisClear 0 0 +export AxisCopy +proc AxisCopy 8 0 +line 469 +;468: +;469:void AxisCopy( vec3_t in[3], vec3_t out[3] ) { +line 470 +;470: VectorCopy( in[0], out[0] ); +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRB +ASGNB 12 +line 471 +;471: VectorCopy( in[1], out[1] ); +ADDRLP4 0 +CNSTI4 12 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 472 +;472: VectorCopy( in[2], out[2] ); +ADDRLP4 4 +CNSTI4 24 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRB +ASGNB 12 +line 473 +;473:} +LABELV $199 +endproc AxisCopy 8 0 +export ProjectPointOnPlane +proc ProjectPointOnPlane 60 0 +line 476 +;474: +;475:void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal ) +;476:{ +line 481 +;477: float d; +;478: vec3_t n; +;479: float inv_denom; +;480: +;481: inv_denom = DotProduct( normal, normal ); +ADDRLP4 20 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 24 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ASGNF4 +ADDRLP4 28 +ADDRLP4 20 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 32 +ADDRLP4 20 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 24 +INDIRF4 +ADDRLP4 24 +INDIRF4 +MULF4 +ADDRLP4 28 +INDIRF4 +ADDRLP4 28 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 32 +INDIRF4 +ADDRLP4 32 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 485 +;482:#ifndef Q3_VM +;483: assert( Q_fabs(inv_denom) != 0.0f ); // bk010122 - zero vectors get here +;484:#endif +;485: inv_denom = 1.0f / inv_denom; +ADDRLP4 0 +CNSTF4 1065353216 +ADDRLP4 0 +INDIRF4 +DIVF4 +ASGNF4 +line 487 +;486: +;487: d = DotProduct( normal, p ) * inv_denom; +ADDRLP4 36 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 44 +CNSTI4 4 +ASGNI4 +ADDRLP4 48 +CNSTI4 8 +ASGNI4 +ADDRLP4 16 +ADDRLP4 36 +INDIRP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 489 +;488: +;489: n[0] = normal[0] * inv_denom; +ADDRLP4 4 +ADDRFP4 8 +INDIRP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 490 +;490: n[1] = normal[1] * inv_denom; +ADDRLP4 4+4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 491 +;491: n[2] = normal[2] * inv_denom; +ADDRLP4 4+8 +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 493 +;492: +;493: dst[0] = p[0] - d * n[0]; +ADDRFP4 0 +INDIRP4 +ADDRFP4 4 +INDIRP4 +INDIRF4 +ADDRLP4 16 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 494 +;494: dst[1] = p[1] - d * n[1]; +ADDRLP4 52 +CNSTI4 4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 52 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRF4 +ADDRLP4 4+4 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 495 +;495: dst[2] = p[2] - d * n[2]; +ADDRLP4 56 +CNSTI4 8 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRF4 +ADDRLP4 4+8 +INDIRF4 +MULF4 +SUBF4 +ASGNF4 +line 496 +;496:} +LABELV $200 +endproc ProjectPointOnPlane 60 0 +export MakeNormalVectors +proc MakeNormalVectors 40 12 +line 506 +;497: +;498:/* +;499:================ +;500:MakeNormalVectors +;501: +;502:Given a normalized forward vector, create two +;503:other perpendicular vectors +;504:================ +;505:*/ +;506:void MakeNormalVectors( const vec3_t forward, vec3_t right, vec3_t up) { +line 511 +;507: float d; +;508: +;509: // this rotate and negate guarantees a vector +;510: // not colinear with the original +;511: right[1] = -forward[0]; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +NEGF4 +ASGNF4 +line 512 +;512: right[2] = forward[1]; +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +line 513 +;513: right[0] = forward[2]; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +line 515 +;514: +;515: d = DotProduct (right, forward); +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTI4 4 +ASGNI4 +ADDRLP4 16 +CNSTI4 8 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +INDIRF4 +ADDRLP4 8 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 516 +;516: VectorMA (right, -d, forward, right); +ADDRLP4 20 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +NEGF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 24 +CNSTI4 4 +ASGNI4 +ADDRLP4 28 +ADDRFP4 4 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 24 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +NEGF4 +MULF4 +ADDF4 +ASGNF4 +ADDRLP4 32 +CNSTI4 8 +ASGNI4 +ADDRLP4 36 +ADDRFP4 4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 36 +INDIRP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 0 +INDIRF4 +NEGF4 +MULF4 +ADDF4 +ASGNF4 +line 517 +;517: VectorNormalize (right); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 518 +;518: CrossProduct (right, forward, up); +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRGP4 CrossProduct +CALLV +pop +line 519 +;519:} +LABELV $205 +endproc MakeNormalVectors 40 12 +export VectorRotate +proc VectorRotate 40 0 +line 523 +;520: +;521: +;522:void VectorRotate( vec3_t in, vec3_t matrix[3], vec3_t out ) +;523:{ +line 524 +;524: out[0] = DotProduct( in, matrix[0] ); +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTI4 4 +ASGNI4 +ADDRLP4 12 +CNSTI4 8 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 525 +;525: out[1] = DotProduct( in, matrix[1] ); +ADDRLP4 16 +CNSTI4 4 +ASGNI4 +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 24 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 20 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 526 +;526: out[2] = DotProduct( in, matrix[2] ); +ADDRLP4 28 +CNSTI4 8 +ASGNI4 +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 36 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +ADDRLP4 32 +INDIRP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 32 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 527 +;527:} +LABELV $206 +endproc VectorRotate 40 0 +export Q_rsqrt +proc Q_rsqrt 20 0 +line 536 +;528: +;529://============================================================================ +;530: +;531:#if !idppc +;532:/* +;533:** float q_rsqrt( float number ) +;534:*/ +;535:float Q_rsqrt( float number ) +;536:{ +line 539 +;537: long i; +;538: float x2, y; +;539: const float threehalfs = 1.5F; +ADDRLP4 12 +CNSTF4 1069547520 +ASGNF4 +line 541 +;540: +;541: x2 = number * 0.5F; +ADDRLP4 8 +CNSTF4 1056964608 +ADDRFP4 0 +INDIRF4 +MULF4 +ASGNF4 +line 542 +;542: y = number; +ADDRLP4 0 +ADDRFP4 0 +INDIRF4 +ASGNF4 +line 543 +;543: i = * ( long * ) &y; // evil floating point bit level hacking +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 544 +;544: i = 0x5f3759df - ( i >> 1 ); // what the fuck? +ADDRLP4 4 +CNSTI4 1597463007 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +RSHI4 +SUBI4 +ASGNI4 +line 545 +;545: y = * ( float * ) &i; +ADDRLP4 0 +ADDRLP4 4 +INDIRF4 +ASGNF4 +line 546 +;546: y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration +ADDRLP4 16 +ADDRLP4 0 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 16 +INDIRF4 +ADDRLP4 12 +INDIRF4 +ADDRLP4 8 +INDIRF4 +ADDRLP4 16 +INDIRF4 +MULF4 +ADDRLP4 16 +INDIRF4 +MULF4 +SUBF4 +MULF4 +ASGNF4 +line 554 +;547:// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed +;548: +;549:#ifndef Q3_VM +;550:#ifdef __linux__ +;551: assert( !isnan(y) ); // bk010122 - FPE? +;552:#endif +;553:#endif +;554: return y; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $207 +endproc Q_rsqrt 20 0 +export Q_fabs +proc Q_fabs 4 0 +line 557 +;555:} +;556: +;557:float Q_fabs( float f ) { +line 558 +;558: int tmp = * ( int * ) &f; +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 559 +;559: tmp &= 0x7FFFFFFF; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 2147483647 +BANDI4 +ASGNI4 +line 560 +;560: return * ( float * ) &tmp; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $208 +endproc Q_fabs 4 0 +export LerpAngle +proc LerpAngle 8 0 +line 572 +;561:} +;562:#endif +;563: +;564://============================================================ +;565: +;566:/* +;567:=============== +;568:LerpAngle +;569: +;570:=============== +;571:*/ +;572:float LerpAngle (float from, float to, float frac) { +line 575 +;573: float a; +;574: +;575: if ( to - from > 180 ) { +ADDRFP4 4 +INDIRF4 +ADDRFP4 0 +INDIRF4 +SUBF4 +CNSTF4 1127481344 +LEF4 $210 +line 576 +;576: to -= 360; +ADDRFP4 4 +ADDRFP4 4 +INDIRF4 +CNSTF4 1135869952 +SUBF4 +ASGNF4 +line 577 +;577: } +LABELV $210 +line 578 +;578: if ( to - from < -180 ) { +ADDRFP4 4 +INDIRF4 +ADDRFP4 0 +INDIRF4 +SUBF4 +CNSTF4 3274964992 +GEF4 $212 +line 579 +;579: to += 360; +ADDRFP4 4 +ADDRFP4 4 +INDIRF4 +CNSTF4 1135869952 +ADDF4 +ASGNF4 +line 580 +;580: } +LABELV $212 +line 581 +;581: a = from + frac * (to - from); +ADDRLP4 4 +ADDRFP4 0 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 4 +INDIRF4 +ADDRFP4 8 +INDIRF4 +ADDRFP4 4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +SUBF4 +MULF4 +ADDF4 +ASGNF4 +line 583 +;582: +;583: return a; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $209 +endproc LerpAngle 8 0 +export AngleSubtract +proc AngleSubtract 4 0 +line 594 +;584:} +;585: +;586: +;587:/* +;588:================= +;589:AngleSubtract +;590: +;591:Always returns a value from -180 to 180 +;592:================= +;593:*/ +;594:float AngleSubtract( float a1, float a2 ) { +line 597 +;595: float a; +;596: +;597: a = a1 - a2; +ADDRLP4 0 +ADDRFP4 0 +INDIRF4 +ADDRFP4 4 +INDIRF4 +SUBF4 +ASGNF4 +line 598 +;598: assert(fabs(a) < 3600); +ADDRGP4 $216 +JUMPV +LABELV $215 +line 599 +;599: while ( a > 180 ) { +line 600 +;600: a -= 360; +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +CNSTF4 1135869952 +SUBF4 +ASGNF4 +line 601 +;601: } +LABELV $216 +line 599 +ADDRLP4 0 +INDIRF4 +CNSTF4 1127481344 +GTF4 $215 +ADDRGP4 $219 +JUMPV +LABELV $218 +line 602 +;602: while ( a < -180 ) { +line 603 +;603: a += 360; +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +CNSTF4 1135869952 +ADDF4 +ASGNF4 +line 604 +;604: } +LABELV $219 +line 602 +ADDRLP4 0 +INDIRF4 +CNSTF4 3274964992 +LTF4 $218 +line 605 +;605: return a; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $214 +endproc AngleSubtract 4 0 +export AnglesSubtract +proc AnglesSubtract 20 8 +line 609 +;606:} +;607: +;608: +;609:void AnglesSubtract( vec3_t v1, vec3_t v2, vec3_t v3 ) { +line 610 +;610: v3[0] = AngleSubtract( v1[0], v2[0] ); +ADDRFP4 0 +INDIRP4 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRP4 +INDIRF4 +ARGF4 +ADDRLP4 0 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRF4 +ASGNF4 +line 611 +;611: v3[1] = AngleSubtract( v1[1], v2[1] ); +ADDRLP4 4 +CNSTI4 4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 8 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRLP4 8 +INDIRF4 +ASGNF4 +line 612 +;612: v3[2] = AngleSubtract( v1[2], v2[2] ); +ADDRLP4 12 +CNSTI4 8 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 16 +ADDRGP4 AngleSubtract +CALLF4 +ASGNF4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ADDRLP4 16 +INDIRF4 +ASGNF4 +line 613 +;613:} +LABELV $221 +endproc AnglesSubtract 20 8 +export AngleMod +proc AngleMod 0 0 +line 616 +;614: +;615: +;616:float AngleMod(float a) { +line 617 +;617: a = (360.0/65536) * ((int)(a*(65536/360.0)) & 65535); +ADDRFP4 0 +CNSTF4 1001652224 +CNSTF4 1127615329 +ADDRFP4 0 +INDIRF4 +MULF4 +CVFI4 4 +CNSTI4 65535 +BANDI4 +CVIF4 4 +MULF4 +ASGNF4 +line 618 +;618: return a; +ADDRFP4 0 +INDIRF4 +RETF4 +LABELV $222 +endproc AngleMod 0 0 +export AngleNormalize360 +proc AngleNormalize360 0 0 +line 629 +;619:} +;620: +;621: +;622:/* +;623:================= +;624:AngleNormalize360 +;625: +;626:returns angle normalized to the range [0 <= angle < 360] +;627:================= +;628:*/ +;629:float AngleNormalize360 ( float angle ) { +line 630 +;630: return (360.0 / 65536) * ((int)(angle * (65536 / 360.0)) & 65535); +CNSTF4 1001652224 +CNSTF4 1127615329 +ADDRFP4 0 +INDIRF4 +MULF4 +CVFI4 4 +CNSTI4 65535 +BANDI4 +CVIF4 4 +MULF4 +RETF4 +LABELV $223 +endproc AngleNormalize360 0 0 +export AngleNormalize180 +proc AngleNormalize180 4 4 +line 641 +;631:} +;632: +;633: +;634:/* +;635:================= +;636:AngleNormalize180 +;637: +;638:returns angle normalized to the range [-180 < angle <= 180] +;639:================= +;640:*/ +;641:float AngleNormalize180 ( float angle ) { +line 642 +;642: angle = AngleNormalize360( angle ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +ADDRGP4 AngleNormalize360 +CALLF4 +ASGNF4 +ADDRFP4 0 +ADDRLP4 0 +INDIRF4 +ASGNF4 +line 643 +;643: if ( angle > 180.0 ) { +ADDRFP4 0 +INDIRF4 +CNSTF4 1127481344 +LEF4 $225 +line 644 +;644: angle -= 360.0; +ADDRFP4 0 +ADDRFP4 0 +INDIRF4 +CNSTF4 1135869952 +SUBF4 +ASGNF4 +line 645 +;645: } +LABELV $225 +line 646 +;646: return angle; +ADDRFP4 0 +INDIRF4 +RETF4 +LABELV $224 +endproc AngleNormalize180 4 4 +export AngleDelta +proc AngleDelta 4 4 +line 657 +;647:} +;648: +;649: +;650:/* +;651:================= +;652:AngleDelta +;653: +;654:returns the normalized delta from angle1 to angle2 +;655:================= +;656:*/ +;657:float AngleDelta ( float angle1, float angle2 ) { +line 658 +;658: return AngleNormalize180( angle1 - angle2 ); +ADDRFP4 0 +INDIRF4 +ADDRFP4 4 +INDIRF4 +SUBF4 +ARGF4 +ADDRLP4 0 +ADDRGP4 AngleNormalize180 +CALLF4 +ASGNF4 +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $227 +endproc AngleDelta 4 4 +export SetPlaneSignbits +proc SetPlaneSignbits 8 0 +line 670 +;659:} +;660: +;661: +;662://============================================================ +;663: +;664: +;665:/* +;666:================= +;667:SetPlaneSignbits +;668:================= +;669:*/ +;670:void SetPlaneSignbits (cplane_t *out) { +line 674 +;671: int bits, j; +;672: +;673: // for fast box on planeside test +;674: bits = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 675 +;675: for (j=0 ; j<3 ; j++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $229 +line 676 +;676: if (out->normal[j] < 0) { +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRF4 +CNSTF4 0 +GEF4 $233 +line 677 +;677: bits |= 1<signbits = bits; +ADDRFP4 0 +INDIRP4 +CNSTI4 17 +ADDP4 +ADDRLP4 4 +INDIRI4 +CVIU4 4 +CVUU1 4 +ASGNU1 +line 681 +;681:} +LABELV $228 +endproc SetPlaneSignbits 8 0 +export BoxOnPlaneSide +proc BoxOnPlaneSide 280 0 +line 729 +;682: +;683: +;684:/* +;685:================== +;686:BoxOnPlaneSide +;687: +;688:Returns 1, 2, or 1 + 2 +;689: +;690:// this is the slow, general version +;691:int BoxOnPlaneSide2 (vec3_t emins, vec3_t emaxs, struct cplane_s *p) +;692:{ +;693: int i; +;694: float dist1, dist2; +;695: int sides; +;696: vec3_t corners[2]; +;697: +;698: for (i=0 ; i<3 ; i++) +;699: { +;700: if (p->normal[i] < 0) +;701: { +;702: corners[0][i] = emins[i]; +;703: corners[1][i] = emaxs[i]; +;704: } +;705: else +;706: { +;707: corners[1][i] = emins[i]; +;708: corners[0][i] = emaxs[i]; +;709: } +;710: } +;711: dist1 = DotProduct (p->normal, corners[0]) - p->dist; +;712: dist2 = DotProduct (p->normal, corners[1]) - p->dist; +;713: sides = 0; +;714: if (dist1 >= 0) +;715: sides = 1; +;716: if (dist2 < 0) +;717: sides |= 2; +;718: +;719: return sides; +;720:} +;721: +;722:================== +;723:*/ +;724:#if !( (defined __linux__ || __FreeBSD__) && (defined __i386__) && (!defined C_ONLY)) // rb010123 +;725: +;726:#if defined __LCC__ || defined C_ONLY || !id386 +;727: +;728:int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p) +;729:{ +line 734 +;730: float dist1, dist2; +;731: int sides; +;732: +;733:// fast axial cases +;734: if (p->type < 3) +ADDRFP4 8 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRU1 +CVUI4 1 +CNSTI4 3 +GEI4 $236 +line 735 +;735: { +line 736 +;736: if (p->dist <= emins[p->type]) +ADDRLP4 12 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 12 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 12 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRU1 +CVUI4 1 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRF4 +GTF4 $238 +line 737 +;737: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $235 +JUMPV +LABELV $238 +line 738 +;738: if (p->dist >= emaxs[p->type]) +ADDRLP4 16 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 16 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRU1 +CVUI4 1 +CNSTI4 2 +LSHI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRF4 +LTF4 $240 +line 739 +;739: return 2; +CNSTI4 2 +RETI4 +ADDRGP4 $235 +JUMPV +LABELV $240 +line 740 +;740: return 3; +CNSTI4 3 +RETI4 +ADDRGP4 $235 +JUMPV +LABELV $236 +line 744 +;741: } +;742: +;743:// general case +;744: switch (p->signbits) +ADDRLP4 12 +ADDRFP4 8 +INDIRP4 +CNSTI4 17 +ADDP4 +INDIRU1 +CVUI4 1 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +LTI4 $242 +ADDRLP4 12 +INDIRI4 +CNSTI4 7 +GTI4 $242 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 $253 +ADDP4 +INDIRP4 +JUMPV +lit +align 4 +LABELV $253 +address $245 +address $246 +address $247 +address $248 +address $249 +address $250 +address $251 +address $252 +code +line 745 +;745: { +LABELV $245 +line 747 +;746: case 0: +;747: dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; +ADDRLP4 20 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 24 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 28 +CNSTI4 4 +ASGNI4 +ADDRLP4 32 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 20 +INDIRP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 748 +;748: dist2 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; +ADDRLP4 36 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 44 +CNSTI4 4 +ASGNI4 +ADDRLP4 48 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 36 +INDIRP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 48 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 749 +;749: break; +ADDRGP4 $243 +JUMPV +LABELV $246 +line 751 +;750: case 1: +;751: dist1 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; +ADDRLP4 52 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 56 +CNSTI4 4 +ASGNI4 +ADDRLP4 60 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 64 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 52 +INDIRP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 52 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 60 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 52 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 60 +INDIRP4 +ADDRLP4 64 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 752 +;752: dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; +ADDRLP4 68 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 72 +CNSTI4 4 +ASGNI4 +ADDRLP4 76 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 80 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 68 +INDIRP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 68 +INDIRP4 +ADDRLP4 72 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +ADDRLP4 72 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 68 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 753 +;753: break; +ADDRGP4 $243 +JUMPV +LABELV $247 +line 755 +;754: case 2: +;755: dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; +ADDRLP4 84 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 88 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 92 +CNSTI4 4 +ASGNI4 +ADDRLP4 96 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 84 +INDIRP4 +INDIRF4 +ADDRLP4 88 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 84 +INDIRP4 +ADDRLP4 92 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 92 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 84 +INDIRP4 +ADDRLP4 96 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 88 +INDIRP4 +ADDRLP4 96 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 756 +;756: dist2 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; +ADDRLP4 100 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 104 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 108 +CNSTI4 4 +ASGNI4 +ADDRLP4 112 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 100 +INDIRP4 +INDIRF4 +ADDRLP4 104 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 100 +INDIRP4 +ADDRLP4 108 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 108 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 100 +INDIRP4 +ADDRLP4 112 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 104 +INDIRP4 +ADDRLP4 112 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 757 +;757: break; +ADDRGP4 $243 +JUMPV +LABELV $248 +line 759 +;758: case 3: +;759: dist1 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; +ADDRLP4 116 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 120 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 124 +CNSTI4 4 +ASGNI4 +ADDRLP4 128 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 116 +INDIRP4 +INDIRF4 +ADDRLP4 120 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 116 +INDIRP4 +ADDRLP4 124 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 120 +INDIRP4 +ADDRLP4 124 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 116 +INDIRP4 +ADDRLP4 128 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 128 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 760 +;760: dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; +ADDRLP4 132 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 136 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 140 +CNSTI4 4 +ASGNI4 +ADDRLP4 144 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 132 +INDIRP4 +INDIRF4 +ADDRLP4 136 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 132 +INDIRP4 +ADDRLP4 140 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 136 +INDIRP4 +ADDRLP4 140 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 132 +INDIRP4 +ADDRLP4 144 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 144 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 761 +;761: break; +ADDRGP4 $243 +JUMPV +LABELV $249 +line 763 +;762: case 4: +;763: dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; +ADDRLP4 148 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 152 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 156 +CNSTI4 4 +ASGNI4 +ADDRLP4 160 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 148 +INDIRP4 +INDIRF4 +ADDRLP4 152 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 148 +INDIRP4 +ADDRLP4 156 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 152 +INDIRP4 +ADDRLP4 156 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 148 +INDIRP4 +ADDRLP4 160 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 160 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 764 +;764: dist2 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; +ADDRLP4 164 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 168 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 172 +CNSTI4 4 +ASGNI4 +ADDRLP4 176 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 164 +INDIRP4 +INDIRF4 +ADDRLP4 168 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 164 +INDIRP4 +ADDRLP4 172 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 168 +INDIRP4 +ADDRLP4 172 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 164 +INDIRP4 +ADDRLP4 176 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 176 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 765 +;765: break; +ADDRGP4 $243 +JUMPV +LABELV $250 +line 767 +;766: case 5: +;767: dist1 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; +ADDRLP4 180 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 184 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 188 +CNSTI4 4 +ASGNI4 +ADDRLP4 192 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 180 +INDIRP4 +INDIRF4 +ADDRLP4 184 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 180 +INDIRP4 +ADDRLP4 188 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 188 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 180 +INDIRP4 +ADDRLP4 192 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 184 +INDIRP4 +ADDRLP4 192 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 768 +;768: dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; +ADDRLP4 196 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 200 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 204 +CNSTI4 4 +ASGNI4 +ADDRLP4 208 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 196 +INDIRP4 +INDIRF4 +ADDRLP4 200 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 196 +INDIRP4 +ADDRLP4 204 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 204 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 196 +INDIRP4 +ADDRLP4 208 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 200 +INDIRP4 +ADDRLP4 208 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 769 +;769: break; +ADDRGP4 $243 +JUMPV +LABELV $251 +line 771 +;770: case 6: +;771: dist1 = p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; +ADDRLP4 212 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 216 +CNSTI4 4 +ASGNI4 +ADDRLP4 220 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 224 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 212 +INDIRP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 212 +INDIRP4 +ADDRLP4 216 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 220 +INDIRP4 +ADDRLP4 216 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 212 +INDIRP4 +ADDRLP4 224 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 220 +INDIRP4 +ADDRLP4 224 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 772 +;772: dist2 = p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; +ADDRLP4 228 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 232 +CNSTI4 4 +ASGNI4 +ADDRLP4 236 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 240 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 228 +INDIRP4 +INDIRF4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 228 +INDIRP4 +ADDRLP4 232 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 236 +INDIRP4 +ADDRLP4 232 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 228 +INDIRP4 +ADDRLP4 240 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 236 +INDIRP4 +ADDRLP4 240 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 773 +;773: break; +ADDRGP4 $243 +JUMPV +LABELV $252 +line 775 +;774: case 7: +;775: dist1 = p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; +ADDRLP4 244 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 248 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 252 +CNSTI4 4 +ASGNI4 +ADDRLP4 256 +CNSTI4 8 +ASGNI4 +ADDRLP4 4 +ADDRLP4 244 +INDIRP4 +INDIRF4 +ADDRLP4 248 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 244 +INDIRP4 +ADDRLP4 252 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 248 +INDIRP4 +ADDRLP4 252 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 244 +INDIRP4 +ADDRLP4 256 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 248 +INDIRP4 +ADDRLP4 256 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 776 +;776: dist2 = p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; +ADDRLP4 260 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 264 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 268 +CNSTI4 4 +ASGNI4 +ADDRLP4 272 +CNSTI4 8 +ASGNI4 +ADDRLP4 8 +ADDRLP4 260 +INDIRP4 +INDIRF4 +ADDRLP4 264 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 260 +INDIRP4 +ADDRLP4 268 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 264 +INDIRP4 +ADDRLP4 268 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 260 +INDIRP4 +ADDRLP4 272 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 264 +INDIRP4 +ADDRLP4 272 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 777 +;777: break; +ADDRGP4 $243 +JUMPV +LABELV $242 +line 779 +;778: default: +;779: dist1 = dist2 = 0; // shut up compiler +ADDRLP4 276 +CNSTF4 0 +ASGNF4 +ADDRLP4 8 +ADDRLP4 276 +INDIRF4 +ASGNF4 +ADDRLP4 4 +ADDRLP4 276 +INDIRF4 +ASGNF4 +line 780 +;780: break; +LABELV $243 +line 783 +;781: } +;782: +;783: sides = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 784 +;784: if (dist1 >= p->dist) +ADDRLP4 4 +INDIRF4 +ADDRFP4 8 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +LTF4 $254 +line 785 +;785: sides = 1; +ADDRLP4 0 +CNSTI4 1 +ASGNI4 +LABELV $254 +line 786 +;786: if (dist2 < p->dist) +ADDRLP4 8 +INDIRF4 +ADDRFP4 8 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +GEF4 $256 +line 787 +;787: sides |= 2; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +BORI4 +ASGNI4 +LABELV $256 +line 789 +;788: +;789: return sides; +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $235 +endproc BoxOnPlaneSide 280 0 +export RadiusFromBounds +proc RadiusFromBounds 36 4 +line 1033 +;790:} +;791:#else +;792:#pragma warning( disable: 4035 ) +;793: +;794:__declspec( naked ) int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p) +;795:{ +;796: static int bops_initialized; +;797: static int Ljmptab[8]; +;798: +;799: __asm { +;800: +;801: push ebx +;802: +;803: cmp bops_initialized, 1 +;804: je initialized +;805: mov bops_initialized, 1 +;806: +;807: mov Ljmptab[0*4], offset Lcase0 +;808: mov Ljmptab[1*4], offset Lcase1 +;809: mov Ljmptab[2*4], offset Lcase2 +;810: mov Ljmptab[3*4], offset Lcase3 +;811: mov Ljmptab[4*4], offset Lcase4 +;812: mov Ljmptab[5*4], offset Lcase5 +;813: mov Ljmptab[6*4], offset Lcase6 +;814: mov Ljmptab[7*4], offset Lcase7 +;815: +;816:initialized: +;817: +;818: mov edx,dword ptr[4+12+esp] +;819: mov ecx,dword ptr[4+4+esp] +;820: xor eax,eax +;821: mov ebx,dword ptr[4+8+esp] +;822: mov al,byte ptr[17+edx] +;823: cmp al,8 +;824: jge Lerror +;825: fld dword ptr[0+edx] +;826: fld st(0) +;827: jmp dword ptr[Ljmptab+eax*4] +;828:Lcase0: +;829: fmul dword ptr[ebx] +;830: fld dword ptr[0+4+edx] +;831: fxch st(2) +;832: fmul dword ptr[ecx] +;833: fxch st(2) +;834: fld st(0) +;835: fmul dword ptr[4+ebx] +;836: fld dword ptr[0+8+edx] +;837: fxch st(2) +;838: fmul dword ptr[4+ecx] +;839: fxch st(2) +;840: fld st(0) +;841: fmul dword ptr[8+ebx] +;842: fxch st(5) +;843: faddp st(3),st(0) +;844: fmul dword ptr[8+ecx] +;845: fxch st(1) +;846: faddp st(3),st(0) +;847: fxch st(3) +;848: faddp st(2),st(0) +;849: jmp LSetSides +;850:Lcase1: +;851: fmul dword ptr[ecx] +;852: fld dword ptr[0+4+edx] +;853: fxch st(2) +;854: fmul dword ptr[ebx] +;855: fxch st(2) +;856: fld st(0) +;857: fmul dword ptr[4+ebx] +;858: fld dword ptr[0+8+edx] +;859: fxch st(2) +;860: fmul dword ptr[4+ecx] +;861: fxch st(2) +;862: fld st(0) +;863: fmul dword ptr[8+ebx] +;864: fxch st(5) +;865: faddp st(3),st(0) +;866: fmul dword ptr[8+ecx] +;867: fxch st(1) +;868: faddp st(3),st(0) +;869: fxch st(3) +;870: faddp st(2),st(0) +;871: jmp LSetSides +;872:Lcase2: +;873: fmul dword ptr[ebx] +;874: fld dword ptr[0+4+edx] +;875: fxch st(2) +;876: fmul dword ptr[ecx] +;877: fxch st(2) +;878: fld st(0) +;879: fmul dword ptr[4+ecx] +;880: fld dword ptr[0+8+edx] +;881: fxch st(2) +;882: fmul dword ptr[4+ebx] +;883: fxch st(2) +;884: fld st(0) +;885: fmul dword ptr[8+ebx] +;886: fxch st(5) +;887: faddp st(3),st(0) +;888: fmul dword ptr[8+ecx] +;889: fxch st(1) +;890: faddp st(3),st(0) +;891: fxch st(3) +;892: faddp st(2),st(0) +;893: jmp LSetSides +;894:Lcase3: +;895: fmul dword ptr[ecx] +;896: fld dword ptr[0+4+edx] +;897: fxch st(2) +;898: fmul dword ptr[ebx] +;899: fxch st(2) +;900: fld st(0) +;901: fmul dword ptr[4+ecx] +;902: fld dword ptr[0+8+edx] +;903: fxch st(2) +;904: fmul dword ptr[4+ebx] +;905: fxch st(2) +;906: fld st(0) +;907: fmul dword ptr[8+ebx] +;908: fxch st(5) +;909: faddp st(3),st(0) +;910: fmul dword ptr[8+ecx] +;911: fxch st(1) +;912: faddp st(3),st(0) +;913: fxch st(3) +;914: faddp st(2),st(0) +;915: jmp LSetSides +;916:Lcase4: +;917: fmul dword ptr[ebx] +;918: fld dword ptr[0+4+edx] +;919: fxch st(2) +;920: fmul dword ptr[ecx] +;921: fxch st(2) +;922: fld st(0) +;923: fmul dword ptr[4+ebx] +;924: fld dword ptr[0+8+edx] +;925: fxch st(2) +;926: fmul dword ptr[4+ecx] +;927: fxch st(2) +;928: fld st(0) +;929: fmul dword ptr[8+ecx] +;930: fxch st(5) +;931: faddp st(3),st(0) +;932: fmul dword ptr[8+ebx] +;933: fxch st(1) +;934: faddp st(3),st(0) +;935: fxch st(3) +;936: faddp st(2),st(0) +;937: jmp LSetSides +;938:Lcase5: +;939: fmul dword ptr[ecx] +;940: fld dword ptr[0+4+edx] +;941: fxch st(2) +;942: fmul dword ptr[ebx] +;943: fxch st(2) +;944: fld st(0) +;945: fmul dword ptr[4+ebx] +;946: fld dword ptr[0+8+edx] +;947: fxch st(2) +;948: fmul dword ptr[4+ecx] +;949: fxch st(2) +;950: fld st(0) +;951: fmul dword ptr[8+ecx] +;952: fxch st(5) +;953: faddp st(3),st(0) +;954: fmul dword ptr[8+ebx] +;955: fxch st(1) +;956: faddp st(3),st(0) +;957: fxch st(3) +;958: faddp st(2),st(0) +;959: jmp LSetSides +;960:Lcase6: +;961: fmul dword ptr[ebx] +;962: fld dword ptr[0+4+edx] +;963: fxch st(2) +;964: fmul dword ptr[ecx] +;965: fxch st(2) +;966: fld st(0) +;967: fmul dword ptr[4+ecx] +;968: fld dword ptr[0+8+edx] +;969: fxch st(2) +;970: fmul dword ptr[4+ebx] +;971: fxch st(2) +;972: fld st(0) +;973: fmul dword ptr[8+ecx] +;974: fxch st(5) +;975: faddp st(3),st(0) +;976: fmul dword ptr[8+ebx] +;977: fxch st(1) +;978: faddp st(3),st(0) +;979: fxch st(3) +;980: faddp st(2),st(0) +;981: jmp LSetSides +;982:Lcase7: +;983: fmul dword ptr[ecx] +;984: fld dword ptr[0+4+edx] +;985: fxch st(2) +;986: fmul dword ptr[ebx] +;987: fxch st(2) +;988: fld st(0) +;989: fmul dword ptr[4+ecx] +;990: fld dword ptr[0+8+edx] +;991: fxch st(2) +;992: fmul dword ptr[4+ebx] +;993: fxch st(2) +;994: fld st(0) +;995: fmul dword ptr[8+ecx] +;996: fxch st(5) +;997: faddp st(3),st(0) +;998: fmul dword ptr[8+ebx] +;999: fxch st(1) +;1000: faddp st(3),st(0) +;1001: fxch st(3) +;1002: faddp st(2),st(0) +;1003:LSetSides: +;1004: faddp st(2),st(0) +;1005: fcomp dword ptr[12+edx] +;1006: xor ecx,ecx +;1007: fnstsw ax +;1008: fcomp dword ptr[12+edx] +;1009: and ah,1 +;1010: xor ah,1 +;1011: add cl,ah +;1012: fnstsw ax +;1013: and ah,1 +;1014: add ah,ah +;1015: add cl,ah +;1016: pop ebx +;1017: mov eax,ecx +;1018: ret +;1019:Lerror: +;1020: int 3 +;1021: } +;1022:} +;1023:#pragma warning( default: 4035 ) +;1024: +;1025:#endif +;1026:#endif +;1027: +;1028:/* +;1029:================= +;1030:RadiusFromBounds +;1031:================= +;1032:*/ +;1033:float RadiusFromBounds( const vec3_t mins, const vec3_t maxs ) { +line 1038 +;1034: int i; +;1035: vec3_t corner; +;1036: float a, b; +;1037: +;1038: for (i=0 ; i<3 ; i++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +LABELV $259 +line 1039 +;1039: a = fabs( mins[i] ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 4 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 1040 +;1040: b = fabs( maxs[i] ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 28 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 8 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 1041 +;1041: corner[i] = a > b ? a : b; +ADDRLP4 4 +INDIRF4 +ADDRLP4 8 +INDIRF4 +LEF4 $264 +ADDRLP4 32 +ADDRLP4 4 +INDIRF4 +ASGNF4 +ADDRGP4 $265 +JUMPV +LABELV $264 +ADDRLP4 32 +ADDRLP4 8 +INDIRF4 +ASGNF4 +LABELV $265 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 12 +ADDP4 +ADDRLP4 32 +INDIRF4 +ASGNF4 +line 1042 +;1042: } +LABELV $260 +line 1038 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LTI4 $259 +line 1044 +;1043: +;1044: return VectorLength (corner); +ADDRLP4 12 +ARGP4 +ADDRLP4 24 +ADDRGP4 VectorLength +CALLF4 +ASGNF4 +ADDRLP4 24 +INDIRF4 +RETF4 +LABELV $258 +endproc RadiusFromBounds 36 4 +export ClearBounds +proc ClearBounds 16 0 +line 1048 +;1045:} +;1046: +;1047: +;1048:void ClearBounds( vec3_t mins, vec3_t maxs ) { +line 1049 +;1049: mins[0] = mins[1] = mins[2] = 99999; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +CNSTF4 1203982208 +ASGNF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 4 +INDIRF4 +ASGNF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 4 +INDIRF4 +ASGNF4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 4 +INDIRF4 +ASGNF4 +line 1050 +;1050: maxs[0] = maxs[1] = maxs[2] = -99999; +ADDRLP4 8 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 12 +CNSTF4 3351465856 +ASGNF4 +ADDRLP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 12 +INDIRF4 +ASGNF4 +ADDRLP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 12 +INDIRF4 +ASGNF4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 1051 +;1051:} +LABELV $266 +endproc ClearBounds 16 0 +export AddPointToBounds +proc AddPointToBounds 20 0 +line 1053 +;1052: +;1053:void AddPointToBounds( const vec3_t v, vec3_t mins, vec3_t maxs ) { +line 1054 +;1054: if ( v[0] < mins[0] ) { +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +INDIRF4 +GEF4 $268 +line 1055 +;1055: mins[0] = v[0]; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ASGNF4 +line 1056 +;1056: } +LABELV $268 +line 1057 +;1057: if ( v[0] > maxs[0]) { +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRFP4 8 +INDIRP4 +INDIRF4 +LEF4 $270 +line 1058 +;1058: maxs[0] = v[0]; +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ASGNF4 +line 1059 +;1059: } +LABELV $270 +line 1061 +;1060: +;1061: if ( v[1] < mins[1] ) { +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +GEF4 $272 +line 1062 +;1062: mins[1] = v[1]; +ADDRLP4 4 +CNSTI4 4 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 1063 +;1063: } +LABELV $272 +line 1064 +;1064: if ( v[1] > maxs[1]) { +ADDRLP4 4 +CNSTI4 4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +LEF4 $274 +line 1065 +;1065: maxs[1] = v[1]; +ADDRLP4 8 +CNSTI4 4 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 1066 +;1066: } +LABELV $274 +line 1068 +;1067: +;1068: if ( v[2] < mins[2] ) { +ADDRLP4 8 +CNSTI4 8 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +GEF4 $276 +line 1069 +;1069: mins[2] = v[2]; +ADDRLP4 12 +CNSTI4 8 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 1070 +;1070: } +LABELV $276 +line 1071 +;1071: if ( v[2] > maxs[2]) { +ADDRLP4 12 +CNSTI4 8 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +LEF4 $278 +line 1072 +;1072: maxs[2] = v[2]; +ADDRLP4 16 +CNSTI4 8 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 1073 +;1073: } +LABELV $278 +line 1074 +;1074:} +LABELV $267 +endproc AddPointToBounds 20 0 +export VectorNormalize +proc VectorNormalize 40 4 +line 1077 +;1075: +;1076: +;1077:vec_t VectorNormalize( vec3_t v ) { +line 1080 +;1078: float length, ilength; +;1079: +;1080: length = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 8 +INDIRP4 +INDIRF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 20 +ADDRLP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 12 +INDIRF4 +ADDRLP4 12 +INDIRF4 +MULF4 +ADDRLP4 16 +INDIRF4 +ADDRLP4 16 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 20 +INDIRF4 +ADDRLP4 20 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1081 +;1081: length = sqrt (length); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 sqrt +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 1083 +;1082: +;1083: if ( length ) { +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +EQF4 $281 +line 1084 +;1084: ilength = 1/length; +ADDRLP4 4 +CNSTF4 1065353216 +ADDRLP4 0 +INDIRF4 +DIVF4 +ASGNF4 +line 1085 +;1085: v[0] *= ilength; +ADDRLP4 28 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1086 +;1086: v[1] *= ilength; +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 32 +INDIRP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1087 +;1087: v[2] *= ilength; +ADDRLP4 36 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 36 +INDIRP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1088 +;1088: } +LABELV $281 +line 1090 +;1089: +;1090: return length; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $280 +endproc VectorNormalize 40 4 +export VectorNormalize2 +proc VectorNormalize2 36 4 +line 1093 +;1091:} +;1092: +;1093:vec_t VectorNormalize2( const vec3_t v, vec3_t out) { +line 1096 +;1094: float length, ilength; +;1095: +;1096: length = v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 8 +INDIRP4 +INDIRF4 +ASGNF4 +ADDRLP4 16 +ADDRLP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 20 +ADDRLP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 12 +INDIRF4 +ADDRLP4 12 +INDIRF4 +MULF4 +ADDRLP4 16 +INDIRF4 +ADDRLP4 16 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 20 +INDIRF4 +ADDRLP4 20 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1097 +;1097: length = sqrt (length); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 sqrt +CALLF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 1099 +;1098: +;1099: if (length) +ADDRLP4 0 +INDIRF4 +CNSTF4 0 +EQF4 $284 +line 1100 +;1100: { +line 1104 +;1101:#ifndef Q3_VM // bk0101022 - FPE related +;1102:// assert( ((Q_fabs(v[0])!=0.0f) || (Q_fabs(v[1])!=0.0f) || (Q_fabs(v[2])!=0.0f)) ); +;1103:#endif +;1104: ilength = 1/length; +ADDRLP4 4 +CNSTF4 1065353216 +ADDRLP4 0 +INDIRF4 +DIVF4 +ASGNF4 +line 1105 +;1105: out[0] = v[0]*ilength; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1106 +;1106: out[1] = v[1]*ilength; +ADDRLP4 28 +CNSTI4 4 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 28 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1107 +;1107: out[2] = v[2]*ilength; +ADDRLP4 32 +CNSTI4 8 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1108 +;1108: } else { +ADDRGP4 $285 +JUMPV +LABELV $284 +line 1112 +;1109:#ifndef Q3_VM // bk0101022 - FPE related +;1110:// assert( ((Q_fabs(v[0])==0.0f) && (Q_fabs(v[1])==0.0f) && (Q_fabs(v[2])==0.0f)) ); +;1111:#endif +;1112: VectorClear( out ); +ADDRLP4 28 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 32 +CNSTF4 0 +ASGNF4 +ADDRLP4 28 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRLP4 32 +INDIRF4 +ASGNF4 +ADDRLP4 28 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 32 +INDIRF4 +ASGNF4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 32 +INDIRF4 +ASGNF4 +line 1113 +;1113: } +LABELV $285 +line 1115 +;1114: +;1115: return length; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $283 +endproc VectorNormalize2 36 4 +export _VectorMA +proc _VectorMA 8 0 +line 1119 +;1116: +;1117:} +;1118: +;1119:void _VectorMA( const vec3_t veca, float scale, const vec3_t vecb, vec3_t vecc) { +line 1120 +;1120: vecc[0] = veca[0] + scale*vecb[0]; +ADDRFP4 12 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +ADDRFP4 8 +INDIRP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1121 +;1121: vecc[1] = veca[1] + scale*vecb[1]; +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRFP4 12 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1122 +;1122: vecc[2] = veca[2] + scale*vecb[2]; +ADDRLP4 4 +CNSTI4 8 +ASGNI4 +ADDRFP4 12 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1123 +;1123:} +LABELV $286 +endproc _VectorMA 8 0 +export _DotProduct +proc _DotProduct 16 0 +line 1126 +;1124: +;1125: +;1126:vec_t _DotProduct( const vec3_t v1, const vec3_t v2 ) { +line 1127 +;1127: return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTI4 4 +ASGNI4 +ADDRLP4 12 +CNSTI4 8 +ASGNI4 +ADDRLP4 0 +INDIRP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 12 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +RETF4 +LABELV $287 +endproc _DotProduct 16 0 +export _VectorSubtract +proc _VectorSubtract 8 0 +line 1130 +;1128:} +;1129: +;1130:void _VectorSubtract( const vec3_t veca, const vec3_t vecb, vec3_t out ) { +line 1131 +;1131: out[0] = veca[0]-vecb[0]; +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1132 +;1132: out[1] = veca[1]-vecb[1]; +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1133 +;1133: out[2] = veca[2]-vecb[2]; +ADDRLP4 4 +CNSTI4 8 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +SUBF4 +ASGNF4 +line 1134 +;1134:} +LABELV $288 +endproc _VectorSubtract 8 0 +export _VectorAdd +proc _VectorAdd 8 0 +line 1136 +;1135: +;1136:void _VectorAdd( const vec3_t veca, const vec3_t vecb, vec3_t out ) { +line 1137 +;1137: out[0] = veca[0]+vecb[0]; +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +INDIRF4 +ADDF4 +ASGNF4 +line 1138 +;1138: out[1] = veca[1]+vecb[1]; +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +line 1139 +;1139: out[2] = veca[2]+vecb[2]; +ADDRLP4 4 +CNSTI4 8 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDF4 +ASGNF4 +line 1140 +;1140:} +LABELV $289 +endproc _VectorAdd 8 0 +export _VectorCopy +proc _VectorCopy 8 0 +line 1142 +;1141: +;1142:void _VectorCopy( const vec3_t in, vec3_t out ) { +line 1143 +;1143: out[0] = in[0]; +ADDRFP4 4 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ASGNF4 +line 1144 +;1144: out[1] = in[1]; +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 1145 +;1145: out[2] = in[2]; +ADDRLP4 4 +CNSTI4 8 +ASGNI4 +ADDRFP4 4 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ASGNF4 +line 1146 +;1146:} +LABELV $290 +endproc _VectorCopy 8 0 +export _VectorScale +proc _VectorScale 8 0 +line 1148 +;1147: +;1148:void _VectorScale( const vec3_t in, vec_t scale, vec3_t out ) { +line 1149 +;1149: out[0] = in[0]*scale; +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1150 +;1150: out[1] = in[1]*scale; +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1151 +;1151: out[2] = in[2]*scale; +ADDRLP4 4 +CNSTI4 8 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1152 +;1152:} +LABELV $291 +endproc _VectorScale 8 0 +export Vector4Scale +proc Vector4Scale 12 0 +line 1154 +;1153: +;1154:void Vector4Scale( const vec4_t in, vec_t scale, vec4_t out ) { +line 1155 +;1155: out[0] = in[0]*scale; +ADDRFP4 8 +INDIRP4 +ADDRFP4 0 +INDIRP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1156 +;1156: out[1] = in[1]*scale; +ADDRLP4 0 +CNSTI4 4 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1157 +;1157: out[2] = in[2]*scale; +ADDRLP4 4 +CNSTI4 8 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1158 +;1158: out[3] = in[3]*scale; +ADDRLP4 8 +CNSTI4 12 +ASGNI4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ADDRFP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ADDRFP4 4 +INDIRF4 +MULF4 +ASGNF4 +line 1159 +;1159:} +LABELV $292 +endproc Vector4Scale 12 0 +export Q_log2 +proc Q_log2 8 0 +line 1162 +;1160: +;1161: +;1162:int Q_log2( int val ) { +line 1165 +;1163: int answer; +;1164: +;1165: answer = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $295 +JUMPV +LABELV $294 +line 1166 +;1166: while ( ( val>>=1 ) != 0 ) { +line 1167 +;1167: answer++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1168 +;1168: } +LABELV $295 +line 1166 +ADDRLP4 4 +ADDRFP4 0 +INDIRI4 +CNSTI4 1 +RSHI4 +ASGNI4 +ADDRFP4 0 +ADDRLP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $294 +line 1169 +;1169: return answer; +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $293 +endproc Q_log2 8 0 +export MatrixMultiply +proc MatrixMultiply 104 0 +line 1198 +;1170:} +;1171: +;1172: +;1173: +;1174:/* +;1175:================= +;1176:PlaneTypeForNormal +;1177:================= +;1178:*/ +;1179:/* +;1180:int PlaneTypeForNormal (vec3_t normal) { +;1181: if ( normal[0] == 1.0 ) +;1182: return PLANE_X; +;1183: if ( normal[1] == 1.0 ) +;1184: return PLANE_Y; +;1185: if ( normal[2] == 1.0 ) +;1186: return PLANE_Z; +;1187: +;1188: return PLANE_NON_AXIAL; +;1189:} +;1190:*/ +;1191: +;1192: +;1193:/* +;1194:================ +;1195:MatrixMultiply +;1196:================ +;1197:*/ +;1198:void MatrixMultiply(float in1[3][3], float in2[3][3], float out[3][3]) { +line 1199 +;1199: out[0][0] = in1[0][0] * in2[0][0] + in1[0][1] * in2[1][0] + +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 0 +INDIRP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 4 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1201 +;1200: in1[0][2] * in2[2][0]; +;1201: out[0][1] = in1[0][0] * in2[0][1] + in1[0][1] * in2[1][1] + +ADDRLP4 8 +CNSTI4 4 +ASGNI4 +ADDRLP4 12 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ADDRLP4 12 +INDIRP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 12 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 12 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +ADDRLP4 16 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1203 +;1202: in1[0][2] * in2[2][1]; +;1203: out[0][2] = in1[0][0] * in2[0][2] + in1[0][1] * in2[1][2] + +ADDRLP4 20 +CNSTI4 8 +ASGNI4 +ADDRLP4 24 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 28 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +ADDRLP4 24 +INDIRP4 +INDIRF4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 24 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +ADDRLP4 28 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 20 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 28 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1205 +;1204: in1[0][2] * in2[2][2]; +;1205: out[1][0] = in1[1][0] * in2[0][0] + in1[1][1] * in2[1][0] + +ADDRLP4 32 +CNSTI4 12 +ASGNI4 +ADDRLP4 36 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 40 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 32 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 36 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 40 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1207 +;1206: in1[1][2] * in2[2][0]; +;1207: out[1][1] = in1[1][0] * in2[0][1] + in1[1][1] * in2[1][1] + +ADDRLP4 44 +CNSTI4 16 +ASGNI4 +ADDRLP4 48 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 52 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +ADDRLP4 48 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 52 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 48 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 52 +INDIRP4 +ADDRLP4 44 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 48 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +ADDRLP4 52 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1209 +;1208: in1[1][2] * in2[2][1]; +;1209: out[1][2] = in1[1][0] * in2[0][2] + in1[1][1] * in2[1][2] + +ADDRLP4 56 +CNSTI4 20 +ASGNI4 +ADDRLP4 60 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 64 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +ADDRLP4 60 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +ADDRLP4 64 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 60 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +ADDRLP4 64 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 60 +INDIRP4 +ADDRLP4 56 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 64 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1211 +;1210: in1[1][2] * in2[2][2]; +;1211: out[2][0] = in1[2][0] * in2[0][0] + in1[2][1] * in2[1][0] + +ADDRLP4 68 +CNSTI4 24 +ASGNI4 +ADDRLP4 72 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 76 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ADDP4 +ADDRLP4 72 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +INDIRF4 +MULF4 +ADDRLP4 72 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 72 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 76 +INDIRP4 +ADDRLP4 68 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1213 +;1212: in1[2][2] * in2[2][0]; +;1213: out[2][1] = in1[2][0] * in2[0][1] + in1[2][1] * in2[1][1] + +ADDRLP4 80 +CNSTI4 28 +ASGNI4 +ADDRLP4 84 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 88 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +ADDRLP4 84 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 88 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 84 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 88 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 84 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRF4 +ADDRLP4 88 +INDIRP4 +ADDRLP4 80 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1215 +;1214: in1[2][2] * in2[2][1]; +;1215: out[2][2] = in1[2][0] * in2[0][2] + in1[2][1] * in2[1][2] + +ADDRLP4 92 +CNSTI4 32 +ASGNI4 +ADDRLP4 96 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 100 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 92 +INDIRI4 +ADDP4 +ADDRLP4 96 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRF4 +ADDRLP4 100 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +MULF4 +ADDRLP4 96 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRF4 +ADDRLP4 100 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ADDRLP4 96 +INDIRP4 +ADDRLP4 92 +INDIRI4 +ADDP4 +INDIRF4 +ADDRLP4 100 +INDIRP4 +ADDRLP4 92 +INDIRI4 +ADDP4 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1217 +;1216: in1[2][2] * in2[2][2]; +;1217:} +LABELV $297 +endproc MatrixMultiply 104 0 +bss +align 4 +LABELV $299 +skip 4 +align 4 +LABELV $300 +skip 4 +align 4 +LABELV $301 +skip 4 +align 4 +LABELV $302 +skip 4 +align 4 +LABELV $303 +skip 4 +align 4 +LABELV $304 +skip 4 +export AngleVectors +code +proc AngleVectors 36 4 +line 1220 +;1218: +;1219: +;1220:void AngleVectors( const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up) { +line 1225 +;1221: float angle; +;1222: static float sr, sp, sy, cr, cp, cy; +;1223: // static to help MS compiler fp bugs +;1224: +;1225: angle = angles[YAW] * (M_PI*2 / 360); +ADDRLP4 0 +CNSTF4 1016003125 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +MULF4 +ASGNF4 +line 1226 +;1226: sy = sin(angle); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 4 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRGP4 $301 +ADDRLP4 4 +INDIRF4 +ASGNF4 +line 1227 +;1227: cy = cos(angle); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 8 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRGP4 $304 +ADDRLP4 8 +INDIRF4 +ASGNF4 +line 1228 +;1228: angle = angles[PITCH] * (M_PI*2 / 360); +ADDRLP4 0 +CNSTF4 1016003125 +ADDRFP4 0 +INDIRP4 +INDIRF4 +MULF4 +ASGNF4 +line 1229 +;1229: sp = sin(angle); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 12 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRGP4 $300 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 1230 +;1230: cp = cos(angle); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 16 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRGP4 $303 +ADDRLP4 16 +INDIRF4 +ASGNF4 +line 1231 +;1231: angle = angles[ROLL] * (M_PI*2 / 360); +ADDRLP4 0 +CNSTF4 1016003125 +ADDRFP4 0 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRF4 +MULF4 +ASGNF4 +line 1232 +;1232: sr = sin(angle); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 20 +ADDRGP4 sin +CALLF4 +ASGNF4 +ADDRGP4 $299 +ADDRLP4 20 +INDIRF4 +ASGNF4 +line 1233 +;1233: cr = cos(angle); +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 24 +ADDRGP4 cos +CALLF4 +ASGNF4 +ADDRGP4 $302 +ADDRLP4 24 +INDIRF4 +ASGNF4 +line 1235 +;1234: +;1235: if (forward) +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $305 +line 1236 +;1236: { +line 1237 +;1237: forward[0] = cp*cy; +ADDRFP4 4 +INDIRP4 +ADDRGP4 $303 +INDIRF4 +ADDRGP4 $304 +INDIRF4 +MULF4 +ASGNF4 +line 1238 +;1238: forward[1] = cp*sy; +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRGP4 $303 +INDIRF4 +ADDRGP4 $301 +INDIRF4 +MULF4 +ASGNF4 +line 1239 +;1239: forward[2] = -sp; +ADDRFP4 4 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRGP4 $300 +INDIRF4 +NEGF4 +ASGNF4 +line 1240 +;1240: } +LABELV $305 +line 1241 +;1241: if (right) +ADDRFP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $307 +line 1242 +;1242: { +line 1243 +;1243: right[0] = (-1*sr*sp*cy+-1*cr*-sy); +ADDRLP4 28 +CNSTF4 3212836864 +ASGNF4 +ADDRFP4 8 +INDIRP4 +ADDRLP4 28 +INDIRF4 +ADDRGP4 $299 +INDIRF4 +MULF4 +ADDRGP4 $300 +INDIRF4 +MULF4 +ADDRGP4 $304 +INDIRF4 +MULF4 +ADDRLP4 28 +INDIRF4 +ADDRGP4 $302 +INDIRF4 +MULF4 +ADDRGP4 $301 +INDIRF4 +NEGF4 +MULF4 +ADDF4 +ASGNF4 +line 1244 +;1244: right[1] = (-1*sr*sp*sy+-1*cr*cy); +ADDRLP4 32 +CNSTF4 3212836864 +ASGNF4 +ADDRFP4 8 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRLP4 32 +INDIRF4 +ADDRGP4 $299 +INDIRF4 +MULF4 +ADDRGP4 $300 +INDIRF4 +MULF4 +ADDRGP4 $301 +INDIRF4 +MULF4 +ADDRLP4 32 +INDIRF4 +ADDRGP4 $302 +INDIRF4 +MULF4 +ADDRGP4 $304 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1245 +;1245: right[2] = -1*sr*cp; +ADDRFP4 8 +INDIRP4 +CNSTI4 8 +ADDP4 +CNSTF4 3212836864 +ADDRGP4 $299 +INDIRF4 +MULF4 +ADDRGP4 $303 +INDIRF4 +MULF4 +ASGNF4 +line 1246 +;1246: } +LABELV $307 +line 1247 +;1247: if (up) +ADDRFP4 12 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $309 +line 1248 +;1248: { +line 1249 +;1249: up[0] = (cr*sp*cy+-sr*-sy); +ADDRFP4 12 +INDIRP4 +ADDRGP4 $302 +INDIRF4 +ADDRGP4 $300 +INDIRF4 +MULF4 +ADDRGP4 $304 +INDIRF4 +MULF4 +ADDRGP4 $299 +INDIRF4 +NEGF4 +ADDRGP4 $301 +INDIRF4 +NEGF4 +MULF4 +ADDF4 +ASGNF4 +line 1250 +;1250: up[1] = (cr*sp*sy+-sr*cy); +ADDRFP4 12 +INDIRP4 +CNSTI4 4 +ADDP4 +ADDRGP4 $302 +INDIRF4 +ADDRGP4 $300 +INDIRF4 +MULF4 +ADDRGP4 $301 +INDIRF4 +MULF4 +ADDRGP4 $299 +INDIRF4 +NEGF4 +ADDRGP4 $304 +INDIRF4 +MULF4 +ADDF4 +ASGNF4 +line 1251 +;1251: up[2] = cr*cp; +ADDRFP4 12 +INDIRP4 +CNSTI4 8 +ADDP4 +ADDRGP4 $302 +INDIRF4 +ADDRGP4 $303 +INDIRF4 +MULF4 +ASGNF4 +line 1252 +;1252: } +LABELV $309 +line 1253 +;1253:} +LABELV $298 +endproc AngleVectors 36 4 +export PerpendicularVector +proc PerpendicularVector 36 12 +line 1259 +;1254: +;1255:/* +;1256:** assumes "src" is normalized +;1257:*/ +;1258:void PerpendicularVector( vec3_t dst, const vec3_t src ) +;1259:{ +line 1262 +;1260: int pos; +;1261: int i; +;1262: float minelem = 1.0F; +ADDRLP4 4 +CNSTF4 1065353216 +ASGNF4 +line 1268 +;1263: vec3_t tempvec; +;1264: +;1265: /* +;1266: ** find the smallest magnitude axially aligned vector +;1267: */ +;1268: for ( pos = 0, i = 0; i < 3; i++ ) +ADDRLP4 24 +CNSTI4 0 +ASGNI4 +ADDRLP4 8 +ADDRLP4 24 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 24 +INDIRI4 +ASGNI4 +ADDRGP4 $315 +JUMPV +LABELV $312 +line 1269 +;1269: { +line 1270 +;1270: if ( fabs( src[i] ) < minelem ) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 28 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 28 +INDIRF4 +ADDRLP4 4 +INDIRF4 +GEF4 $316 +line 1271 +;1271: { +line 1272 +;1272: pos = i; +ADDRLP4 8 +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 1273 +;1273: minelem = fabs( src[i] ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 4 +INDIRP4 +ADDP4 +INDIRF4 +ARGF4 +ADDRLP4 32 +ADDRGP4 fabs +CALLF4 +ASGNF4 +ADDRLP4 4 +ADDRLP4 32 +INDIRF4 +ASGNF4 +line 1274 +;1274: } +LABELV $316 +line 1275 +;1275: } +LABELV $313 +line 1268 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $315 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LTI4 $312 +line 1276 +;1276: tempvec[0] = tempvec[1] = tempvec[2] = 0.0F; +ADDRLP4 28 +CNSTF4 0 +ASGNF4 +ADDRLP4 12+8 +ADDRLP4 28 +INDIRF4 +ASGNF4 +ADDRLP4 12+4 +ADDRLP4 28 +INDIRF4 +ASGNF4 +ADDRLP4 12 +ADDRLP4 28 +INDIRF4 +ASGNF4 +line 1277 +;1277: tempvec[pos] = 1.0F; +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 12 +ADDP4 +CNSTF4 1065353216 +ASGNF4 +line 1282 +;1278: +;1279: /* +;1280: ** project the point onto the plane defined by src +;1281: */ +;1282: ProjectPointOnPlane( dst, tempvec, src ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 ProjectPointOnPlane +CALLV +pop +line 1287 +;1283: +;1284: /* +;1285: ** normalize the result +;1286: */ +;1287: VectorNormalize( dst ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 VectorNormalize +CALLF4 +pop +line 1288 +;1288:} +LABELV $311 +endproc PerpendicularVector 36 12 +data +align 4 +LABELV holdrand +byte 4 2309737967 +export Rand_Init +code +proc Rand_Init 0 0 +line 1300 +;1289: +;1290:// This is the VC libc version of rand() without multiple seeds per thread or 12 levels +;1291:// of subroutine calls. +;1292:// Both calls have been designed to minimise the inherent number of float <--> int +;1293:// conversions and the additional math required to get the desired value. +;1294:// eg the typical tint = (rand() * 255) / 32768 +;1295:// becomes tint = irand(0, 255) +;1296: +;1297:static unsigned long holdrand = 0x89abcdef; +;1298: +;1299:void Rand_Init(int seed) +;1300:{ +line 1301 +;1301: holdrand = seed; +ADDRGP4 holdrand +ADDRFP4 0 +INDIRI4 +CVIU4 4 +ASGNU4 +line 1302 +;1302:} +LABELV $320 +endproc Rand_Init 0 0 +export flrand +proc flrand 16 0 +line 1307 +;1303: +;1304:// Returns a float min <= x < max (exclusive; will get max - 0.00001; but never max) +;1305: +;1306:float flrand(float min, float max) +;1307:{ +line 1310 +;1308: float result; +;1309: +;1310: assert((max - min) < 32768); +line 1312 +;1311: +;1312: holdrand = (holdrand * 214013L) + 2531011L; +ADDRLP4 4 +ADDRGP4 holdrand +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTU4 214013 +ADDRLP4 4 +INDIRP4 +INDIRU4 +MULU4 +CNSTU4 2531011 +ADDU4 +ASGNU4 +line 1313 +;1313: result = (float)(holdrand >> 17); // 0 - 32767 range +ADDRLP4 8 +ADDRGP4 holdrand +INDIRU4 +CNSTI4 17 +RSHU4 +ASGNU4 +ADDRLP4 0 +CNSTF4 1073741824 +ADDRLP4 8 +INDIRU4 +CNSTI4 1 +RSHU4 +CVUI4 4 +CVIF4 4 +MULF4 +ADDRLP4 8 +INDIRU4 +CNSTU4 1 +BANDU4 +CVUI4 4 +CVIF4 4 +ADDF4 +ASGNF4 +line 1314 +;1314: result = ((result * (max - min)) / 32768.0F) + min; +ADDRLP4 12 +ADDRFP4 0 +INDIRF4 +ASGNF4 +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +ADDRFP4 4 +INDIRF4 +ADDRLP4 12 +INDIRF4 +SUBF4 +MULF4 +CNSTF4 1191182336 +DIVF4 +ADDRLP4 12 +INDIRF4 +ADDF4 +ASGNF4 +line 1316 +;1315: +;1316: return(result); +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $321 +endproc flrand 16 0 +export irand +proc irand 12 0 +line 1322 +;1317:} +;1318: +;1319:// Returns an integer min <= x <= max (ie inclusive) +;1320: +;1321:int irand(int min, int max) +;1322:{ +line 1325 +;1323: int result; +;1324: +;1325: assert((max - min) < 32768); +line 1327 +;1326: +;1327: max++; +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1328 +;1328: holdrand = (holdrand * 214013L) + 2531011L; +ADDRLP4 4 +ADDRGP4 holdrand +ASGNP4 +ADDRLP4 4 +INDIRP4 +CNSTU4 214013 +ADDRLP4 4 +INDIRP4 +INDIRU4 +MULU4 +CNSTU4 2531011 +ADDU4 +ASGNU4 +line 1329 +;1329: result = holdrand >> 17; +ADDRLP4 0 +ADDRGP4 holdrand +INDIRU4 +CNSTI4 17 +RSHU4 +CVUI4 4 +ASGNI4 +line 1330 +;1330: result = ((result * (max - min)) >> 15) + min; +ADDRLP4 8 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +SUBI4 +MULI4 +CNSTI4 15 +RSHI4 +ADDRLP4 8 +INDIRI4 +ADDI4 +ASGNI4 +line 1331 +;1331: return(result); +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $322 +endproc irand 12 0 +export powf +proc powf 8 0 +line 1335 +;1332:} +;1333: +;1334:float powf ( float x, int y ) +;1335:{ +line 1336 +;1336: float r = x; +ADDRLP4 0 +ADDRFP4 0 +INDIRF4 +ASGNF4 +line 1337 +;1337: for ( y--; y>0; y-- ) +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRGP4 $327 +JUMPV +LABELV $324 +line 1338 +;1338: r = r * r; +ADDRLP4 0 +ADDRLP4 0 +INDIRF4 +ADDRLP4 0 +INDIRF4 +MULF4 +ASGNF4 +LABELV $325 +line 1337 +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +LABELV $327 +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +GTI4 $324 +line 1339 +;1339: return r; +ADDRLP4 0 +INDIRF4 +RETF4 +LABELV $323 +endproc powf 8 0 +import GetStringForID +import GetIDForString +import Q_irand +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import Q_acos +import colorTable +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort diff --git a/CODE-mp/ui/vm/q_shared.asm b/CODE-mp/ui/vm/q_shared.asm new file mode 100644 index 0000000..c4f550c --- /dev/null +++ b/CODE-mp/ui/vm/q_shared.asm @@ -0,0 +1,6916 @@ +export GetIDForString +code +proc GetIDForString 8 8 +file "../../game/q_shared.c" +line 14 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// q_shared.c -- stateless support routines that are included in each code dll +;4:#include "q_shared.h" +;5: +;6:/* +;7:------------------------- +;8:GetIDForString +;9:------------------------- +;10:*/ +;11: +;12: +;13:int GetIDForString ( stringID_table_t *table, const char *string ) +;14:{ +line 15 +;15: int index = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $38 +JUMPV +LABELV $37 +line 19 +;16: +;17: while ( ( table[index].name != NULL ) && +;18: ( table[index].name[0] != 0 ) ) +;19: { +line 20 +;20: if ( !Q_stricmp( table[index].name, string ) ) +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $40 +line 21 +;21: return table[index].id; +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CNSTI4 4 +ADDP4 +INDIRI4 +RETI4 +ADDRGP4 $36 +JUMPV +LABELV $40 +line 23 +;22: +;23: index++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 24 +;24: } +LABELV $38 +line 17 +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $42 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $37 +LABELV $42 +line 26 +;25: +;26: return -1; +CNSTI4 -1 +RETI4 +LABELV $36 +endproc GetIDForString 8 8 +export GetStringForID +proc GetStringForID 8 0 +line 36 +;27:} +;28: +;29:/* +;30:------------------------- +;31:GetStringForID +;32:------------------------- +;33:*/ +;34: +;35:const char *GetStringForID( stringID_table_t *table, int id ) +;36:{ +line 37 +;37: int index = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $45 +JUMPV +LABELV $44 +line 41 +;38: +;39: while ( ( table[index].name != NULL ) && +;40: ( table[index].name[0] != 0 ) ) +;41: { +line 42 +;42: if ( table[index].id == id ) +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ADDRFP4 4 +INDIRI4 +NEI4 $47 +line 43 +;43: return table[index].name; +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRP4 +RETP4 +ADDRGP4 $43 +JUMPV +LABELV $47 +line 45 +;44: +;45: index++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 46 +;46: } +LABELV $45 +line 39 +ADDRLP4 4 +ADDRLP4 0 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $49 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $44 +LABELV $49 +line 48 +;47: +;48: return NULL; +CNSTP4 0 +RETP4 +LABELV $43 +endproc GetStringForID 8 0 +export Com_Clamp +proc Com_Clamp 0 0 +line 52 +;49:} +;50: +;51: +;52:float Com_Clamp( float min, float max, float value ) { +line 53 +;53: if ( value < min ) { +ADDRFP4 8 +INDIRF4 +ADDRFP4 0 +INDIRF4 +GEF4 $51 +line 54 +;54: return min; +ADDRFP4 0 +INDIRF4 +RETF4 +ADDRGP4 $50 +JUMPV +LABELV $51 +line 56 +;55: } +;56: if ( value > max ) { +ADDRFP4 8 +INDIRF4 +ADDRFP4 4 +INDIRF4 +LEF4 $53 +line 57 +;57: return max; +ADDRFP4 4 +INDIRF4 +RETF4 +ADDRGP4 $50 +JUMPV +LABELV $53 +line 59 +;58: } +;59: return value; +ADDRFP4 8 +INDIRF4 +RETF4 +LABELV $50 +endproc Com_Clamp 0 0 +export COM_SkipPath +proc COM_SkipPath 4 0 +line 69 +;60:} +;61: +;62: +;63:/* +;64:============ +;65:COM_SkipPath +;66:============ +;67:*/ +;68:char *COM_SkipPath (char *pathname) +;69:{ +line 72 +;70: char *last; +;71: +;72: last = pathname; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $57 +JUMPV +LABELV $56 +line 74 +;73: while (*pathname) +;74: { +line 75 +;75: if (*pathname=='/') +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 47 +NEI4 $59 +line 76 +;76: last = pathname+1; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +LABELV $59 +line 77 +;77: pathname++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 78 +;78: } +LABELV $57 +line 73 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $56 +line 79 +;79: return last; +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $55 +endproc COM_SkipPath 4 0 +export COM_StripExtension +proc COM_StripExtension 12 0 +line 87 +;80:} +;81: +;82:/* +;83:============ +;84:COM_StripExtension +;85:============ +;86:*/ +;87:void COM_StripExtension( const char *in, char *out ) { +ADDRGP4 $63 +JUMPV +LABELV $62 +line 88 +;88: while ( *in && *in != '.' ) { +line 89 +;89: *out++ = *in++; +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 8 +CNSTI4 1 +ASGNI4 +ADDRFP4 4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 4 +INDIRP4 +ADDRLP4 8 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI1 +ASGNI1 +line 90 +;90: } +LABELV $63 +line 88 +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $65 +ADDRLP4 0 +INDIRI4 +CNSTI4 46 +NEI4 $62 +LABELV $65 +line 91 +;91: *out = 0; +ADDRFP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 92 +;92:} +LABELV $61 +endproc COM_StripExtension 12 0 +export COM_DefaultExtension +proc COM_DefaultExtension 76 20 +line 100 +;93: +;94: +;95:/* +;96:================== +;97:COM_DefaultExtension +;98:================== +;99:*/ +;100:void COM_DefaultExtension (char *path, int maxSize, const char *extension ) { +line 108 +;101: char oldPath[MAX_QPATH]; +;102: char *src; +;103: +;104:// +;105:// if path doesn't have a .EXT, append extension +;106:// (extension should include the .) +;107:// +;108: src = path + strlen(path) - 1; +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 68 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 68 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CNSTI4 -1 +ADDP4 +ASGNP4 +ADDRGP4 $68 +JUMPV +LABELV $67 +line 110 +;109: +;110: while (*src != '/' && src != path) { +line 111 +;111: if ( *src == '.' ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 46 +NEI4 $70 +line 112 +;112: return; // it has an extension +ADDRGP4 $66 +JUMPV +LABELV $70 +line 114 +;113: } +;114: src--; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 -1 +ADDP4 +ASGNP4 +line 115 +;115: } +LABELV $68 +line 110 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 47 +EQI4 $72 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +NEU4 $67 +LABELV $72 +line 117 +;116: +;117: Q_strncpyz( oldPath, path, sizeof( oldPath ) ); +ADDRLP4 4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 118 +;118: Com_sprintf( path, maxSize, "%s%s", oldPath, extension ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 $73 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 119 +;119:} +LABELV $66 +endproc COM_DefaultExtension 76 20 +export ShortSwap +proc ShortSwap 2 0 +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CVII2 4 +ASGNI2 +line 151 +;120: +;121:/* +;122:============================================================================ +;123: +;124: BYTE ORDER FUNCTIONS +;125: +;126:============================================================================ +;127:*/ +;128:/* +;129:// can't just use function pointers, or dll linkage can +;130:// mess up when qcommon is included in multiple places +;131:static short (*_BigShort) (short l); +;132:static short (*_LittleShort) (short l); +;133:static int (*_BigLong) (int l); +;134:static int (*_LittleLong) (int l); +;135:static qint64 (*_BigLong64) (qint64 l); +;136:static qint64 (*_LittleLong64) (qint64 l); +;137:static float (*_BigFloat) (const float *l); +;138:static float (*_LittleFloat) (const float *l); +;139: +;140:short BigShort(short l){return _BigShort(l);} +;141:short LittleShort(short l) {return _LittleShort(l);} +;142:int BigLong (int l) {return _BigLong(l);} +;143:int LittleLong (int l) {return _LittleLong(l);} +;144:qint64 BigLong64 (qint64 l) {return _BigLong64(l);} +;145:qint64 LittleLong64 (qint64 l) {return _LittleLong64(l);} +;146:float BigFloat (const float *l) {return _BigFloat(l);} +;147:float LittleFloat (const float *l) {return _LittleFloat(l);} +;148:*/ +;149: +;150:short ShortSwap (short l) +;151:{ +line 154 +;152: byte b1,b2; +;153: +;154: b1 = l&255; +ADDRLP4 0 +ADDRFP4 0 +INDIRI2 +CVII4 2 +CNSTI4 255 +BANDI4 +CVIU4 4 +CVUU1 4 +ASGNU1 +line 155 +;155: b2 = (l>>8)&255; +ADDRLP4 1 +ADDRFP4 0 +INDIRI2 +CVII4 2 +CNSTI4 8 +RSHI4 +CNSTI4 255 +BANDI4 +CVIU4 4 +CVUU1 4 +ASGNU1 +line 157 +;156: +;157: return (b1<<8) + b2; +ADDRLP4 0 +INDIRU1 +CVUI4 1 +CNSTI4 8 +LSHI4 +ADDRLP4 1 +INDIRU1 +CVUI4 1 +ADDI4 +CVII2 4 +CVII4 2 +RETI4 +LABELV $74 +endproc ShortSwap 2 0 +export ShortNoSwap +proc ShortNoSwap 0 0 +ADDRFP4 0 +ADDRFP4 0 +INDIRI4 +CVII2 4 +ASGNI2 +line 161 +;158:} +;159: +;160:short ShortNoSwap (short l) +;161:{ +line 162 +;162: return l; +ADDRFP4 0 +INDIRI2 +CVII4 2 +RETI4 +LABELV $75 +endproc ShortNoSwap 0 0 +export LongSwap +proc LongSwap 4 0 +line 166 +;163:} +;164: +;165:int LongSwap (int l) +;166:{ +line 169 +;167: byte b1,b2,b3,b4; +;168: +;169: b1 = l&255; +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +CNSTI4 255 +BANDI4 +CVIU4 4 +CVUU1 4 +ASGNU1 +line 170 +;170: b2 = (l>>8)&255; +ADDRLP4 1 +ADDRFP4 0 +INDIRI4 +CNSTI4 8 +RSHI4 +CNSTI4 255 +BANDI4 +CVIU4 4 +CVUU1 4 +ASGNU1 +line 171 +;171: b3 = (l>>16)&255; +ADDRLP4 2 +ADDRFP4 0 +INDIRI4 +CNSTI4 16 +RSHI4 +CNSTI4 255 +BANDI4 +CVIU4 4 +CVUU1 4 +ASGNU1 +line 172 +;172: b4 = (l>>24)&255; +ADDRLP4 3 +ADDRFP4 0 +INDIRI4 +CNSTI4 24 +RSHI4 +CNSTI4 255 +BANDI4 +CVIU4 4 +CVUU1 4 +ASGNU1 +line 174 +;173: +;174: return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; +ADDRLP4 0 +INDIRU1 +CVUI4 1 +CNSTI4 24 +LSHI4 +ADDRLP4 1 +INDIRU1 +CVUI4 1 +CNSTI4 16 +LSHI4 +ADDI4 +ADDRLP4 2 +INDIRU1 +CVUI4 1 +CNSTI4 8 +LSHI4 +ADDI4 +ADDRLP4 3 +INDIRU1 +CVUI4 1 +ADDI4 +RETI4 +LABELV $76 +endproc LongSwap 4 0 +export LongNoSwap +proc LongNoSwap 0 0 +line 178 +;175:} +;176: +;177:int LongNoSwap (int l) +;178:{ +line 179 +;179: return l; +ADDRFP4 0 +INDIRI4 +RETI4 +LABELV $77 +endproc LongNoSwap 0 0 +export Long64Swap +proc Long64Swap 8 0 +line 183 +;180:} +;181: +;182:qint64 Long64Swap (qint64 ll) +;183:{ +line 186 +;184: qint64 result; +;185: +;186: result.b0 = ll.b7; +ADDRLP4 0 +ADDRFP4 4 +INDIRP4 +CNSTI4 7 +ADDP4 +INDIRU1 +ASGNU1 +line 187 +;187: result.b1 = ll.b6; +ADDRLP4 0+1 +ADDRFP4 4 +INDIRP4 +CNSTI4 6 +ADDP4 +INDIRU1 +ASGNU1 +line 188 +;188: result.b2 = ll.b5; +ADDRLP4 0+2 +ADDRFP4 4 +INDIRP4 +CNSTI4 5 +ADDP4 +INDIRU1 +ASGNU1 +line 189 +;189: result.b3 = ll.b4; +ADDRLP4 0+3 +ADDRFP4 4 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRU1 +ASGNU1 +line 190 +;190: result.b4 = ll.b3; +ADDRLP4 0+4 +ADDRFP4 4 +INDIRP4 +CNSTI4 3 +ADDP4 +INDIRU1 +ASGNU1 +line 191 +;191: result.b5 = ll.b2; +ADDRLP4 0+5 +ADDRFP4 4 +INDIRP4 +CNSTI4 2 +ADDP4 +INDIRU1 +ASGNU1 +line 192 +;192: result.b6 = ll.b1; +ADDRLP4 0+6 +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRU1 +ASGNU1 +line 193 +;193: result.b7 = ll.b0; +ADDRLP4 0+7 +ADDRFP4 4 +INDIRP4 +INDIRU1 +ASGNU1 +line 195 +;194: +;195: return result; +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRB +ASGNB 8 +LABELV $78 +endproc Long64Swap 8 0 +export Long64NoSwap +proc Long64NoSwap 0 0 +line 199 +;196:} +;197: +;198:qint64 Long64NoSwap (qint64 ll) +;199:{ +line 200 +;200: return ll; +ADDRFP4 0 +INDIRP4 +ADDRFP4 4 +INDIRP4 +INDIRB +ASGNB 8 +LABELV $87 +endproc Long64NoSwap 0 0 +export FloatSwap +proc FloatSwap 12 4 +line 208 +;201:} +;202: +;203:typedef union { +;204: float f; +;205: unsigned int i; +;206:} _FloatByteUnion; +;207: +;208:float FloatSwap (const float *f) { +line 212 +;209: const _FloatByteUnion *in; +;210: _FloatByteUnion out; +;211: +;212: in = (_FloatByteUnion *)f; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 213 +;213: out.i = LongSwap(in->i); +ADDRLP4 0 +INDIRP4 +INDIRU4 +CVUI4 4 +ARGI4 +ADDRLP4 8 +ADDRGP4 LongSwap +CALLI4 +ASGNI4 +ADDRLP4 4 +ADDRLP4 8 +INDIRI4 +CVIU4 4 +ASGNU4 +line 215 +;214: +;215: return out.f; +ADDRLP4 4 +INDIRF4 +RETF4 +LABELV $90 +endproc FloatSwap 12 4 +export FloatNoSwap +proc FloatNoSwap 0 0 +line 219 +;216:} +;217: +;218:float FloatNoSwap (const float *f) +;219:{ +line 220 +;220: return *f; +ADDRFP4 0 +INDIRP4 +INDIRF4 +RETF4 +LABELV $91 +endproc FloatNoSwap 0 0 +export COM_BeginParseSession +proc COM_BeginParseSession 0 16 +line 273 +;221:} +;222: +;223:/* +;224:================ +;225:Swap_Init +;226:================ +;227:*/ +;228:/* +;229:void Swap_Init (void) +;230:{ +;231: byte swaptest[2] = {1,0}; +;232: +;233:// set the byte swapping variables in a portable manner +;234: if ( *(short *)swaptest == 1) +;235: { +;236: _BigShort = ShortSwap; +;237: _LittleShort = ShortNoSwap; +;238: _BigLong = LongSwap; +;239: _LittleLong = LongNoSwap; +;240: _BigLong64 = Long64Swap; +;241: _LittleLong64 = Long64NoSwap; +;242: _BigFloat = FloatSwap; +;243: _LittleFloat = FloatNoSwap; +;244: } +;245: else +;246: { +;247: _BigShort = ShortNoSwap; +;248: _LittleShort = ShortSwap; +;249: _BigLong = LongNoSwap; +;250: _LittleLong = LongSwap; +;251: _BigLong64 = Long64NoSwap; +;252: _LittleLong64 = Long64Swap; +;253: _BigFloat = FloatNoSwap; +;254: _LittleFloat = FloatSwap; +;255: } +;256: +;257:} +;258:*/ +;259: +;260:/* +;261:============================================================================ +;262: +;263:PARSING +;264: +;265:============================================================================ +;266:*/ +;267: +;268:static char com_token[MAX_TOKEN_CHARS]; +;269:static char com_parsename[MAX_TOKEN_CHARS]; +;270:static int com_lines; +;271: +;272:void COM_BeginParseSession( const char *name ) +;273:{ +line 274 +;274: com_lines = 0; +ADDRGP4 com_lines +CNSTI4 0 +ASGNI4 +line 275 +;275: Com_sprintf(com_parsename, sizeof(com_parsename), "%s", name); +ADDRGP4 com_parsename +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 $93 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 276 +;276:} +LABELV $92 +endproc COM_BeginParseSession 0 16 +export COM_GetCurrentParseLine +proc COM_GetCurrentParseLine 0 0 +line 279 +;277: +;278:int COM_GetCurrentParseLine( void ) +;279:{ +line 280 +;280: return com_lines; +ADDRGP4 com_lines +INDIRI4 +RETI4 +LABELV $94 +endproc COM_GetCurrentParseLine 0 0 +export COM_Parse +proc COM_Parse 4 8 +line 284 +;281:} +;282: +;283:char *COM_Parse( const char **data_p ) +;284:{ +line 285 +;285: return COM_ParseExt( data_p, qtrue ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRLP4 0 +ADDRGP4 COM_ParseExt +CALLP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +RETP4 +LABELV $95 +endproc COM_Parse 4 8 +bss +align 1 +LABELV $97 +skip 4096 +export COM_ParseError +code +proc COM_ParseError 4 16 +line 289 +;286:} +;287: +;288:void COM_ParseError( char *format, ... ) +;289:{ +line 293 +;290: va_list argptr; +;291: static char string[4096]; +;292: +;293: va_start (argptr, format); +ADDRLP4 0 +ADDRFP4 0+4 +ASGNP4 +line 294 +;294: vsprintf (string, format, argptr); +ADDRGP4 $97 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 vsprintf +CALLI4 +pop +line 295 +;295: va_end (argptr); +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 297 +;296: +;297: Com_Printf("ERROR: %s, line %d: %s\n", com_parsename, com_lines, string); +ADDRGP4 $99 +ARGP4 +ADDRGP4 com_parsename +ARGP4 +ADDRGP4 com_lines +INDIRI4 +ARGI4 +ADDRGP4 $97 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 298 +;298:} +LABELV $96 +endproc COM_ParseError 4 16 +bss +align 1 +LABELV $101 +skip 4096 +export COM_ParseWarning +code +proc COM_ParseWarning 4 16 +line 301 +;299: +;300:void COM_ParseWarning( char *format, ... ) +;301:{ +line 305 +;302: va_list argptr; +;303: static char string[4096]; +;304: +;305: va_start (argptr, format); +ADDRLP4 0 +ADDRFP4 0+4 +ASGNP4 +line 306 +;306: vsprintf (string, format, argptr); +ADDRGP4 $101 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 vsprintf +CALLI4 +pop +line 307 +;307: va_end (argptr); +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 309 +;308: +;309: Com_Printf("WARNING: %s, line %d: %s\n", com_parsename, com_lines, string); +ADDRGP4 $103 +ARGP4 +ADDRGP4 com_parsename +ARGP4 +ADDRGP4 com_lines +INDIRI4 +ARGI4 +ADDRGP4 $101 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 310 +;310:} +LABELV $100 +endproc COM_ParseWarning 4 16 +export SkipWhitespace +proc SkipWhitespace 8 0 +line 324 +;311: +;312:/* +;313:============== +;314:COM_Parse +;315: +;316:Parse a token out of a string +;317:Will never return NULL, just empty strings +;318: +;319:If "allowLineBreaks" is qtrue then an empty +;320:string will be returned if the next token is +;321:a newline. +;322:============== +;323:*/ +;324:const char *SkipWhitespace( const char *data, qboolean *hasNewLines ) { +ADDRGP4 $106 +JUMPV +LABELV $105 +line 327 +;325: int c; +;326: +;327: while( (c = *data) <= ' ') { +line 328 +;328: if( !c ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $108 +line 329 +;329: return NULL; +CNSTP4 0 +RETP4 +ADDRGP4 $104 +JUMPV +LABELV $108 +line 331 +;330: } +;331: if( c == '\n' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 10 +NEI4 $110 +line 332 +;332: com_lines++; +ADDRLP4 4 +ADDRGP4 com_lines +ASGNP4 +ADDRLP4 4 +INDIRP4 +ADDRLP4 4 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 333 +;333: *hasNewLines = qtrue; +ADDRFP4 4 +INDIRP4 +CNSTI4 1 +ASGNI4 +line 334 +;334: } +LABELV $110 +line 335 +;335: data++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 336 +;336: } +LABELV $106 +line 327 +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 32 +LEI4 $105 +line 338 +;337: +;338: return data; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $104 +endproc SkipWhitespace 8 0 +export COM_Compress +proc COM_Compress 48 0 +line 341 +;339:} +;340: +;341:int COM_Compress( char *data_p ) { +line 344 +;342: char *in, *out; +;343: int c; +;344: qboolean newline = qfalse, whitespace = qfalse; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 346 +;345: +;346: in = out = data_p; +ADDRLP4 20 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 20 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 20 +INDIRP4 +ASGNP4 +line 347 +;347: if (in) { +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $113 +ADDRGP4 $116 +JUMPV +LABELV $115 +line 348 +;348: while ((c = *in) != 0) { +line 350 +;349: // skip double slash comments +;350: if ( c == '/' && in[1] == '/' ) { +ADDRLP4 24 +CNSTI4 47 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 24 +INDIRI4 +NEI4 $118 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 24 +INDIRI4 +NEI4 $118 +ADDRGP4 $121 +JUMPV +LABELV $120 +line 351 +;351: while (*in && *in != '\n') { +line 352 +;352: in++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 353 +;353: } +LABELV $121 +line 351 +ADDRLP4 28 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +EQI4 $123 +ADDRLP4 28 +INDIRI4 +CNSTI4 10 +NEI4 $120 +LABELV $123 +line 355 +;354: // skip /* */ comments +;355: } else if ( c == '/' && in[1] == '*' ) { +ADDRGP4 $119 +JUMPV +LABELV $118 +ADDRLP4 4 +INDIRI4 +CNSTI4 47 +NEI4 $124 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 42 +NEI4 $124 +ADDRGP4 $127 +JUMPV +LABELV $126 +line 357 +;356: while ( *in && ( *in != '*' || in[1] != '/' ) ) +;357: in++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +LABELV $127 +line 356 +ADDRLP4 32 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +EQI4 $129 +ADDRLP4 32 +INDIRI4 +CNSTI4 42 +NEI4 $126 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 47 +NEI4 $126 +LABELV $129 +line 358 +;358: if ( *in ) +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $125 +line 359 +;359: in += 2; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 2 +ADDP4 +ASGNP4 +line 361 +;360: // record when we hit a newline +;361: } else if ( c == '\n' || c == '\r' ) { +ADDRGP4 $125 +JUMPV +LABELV $124 +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +EQI4 $134 +ADDRLP4 4 +INDIRI4 +CNSTI4 13 +NEI4 $132 +LABELV $134 +line 362 +;362: newline = qtrue; +ADDRLP4 12 +CNSTI4 1 +ASGNI4 +line 363 +;363: in++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 365 +;364: // record when we hit whitespace +;365: } else if ( c == ' ' || c == '\t') { +ADDRGP4 $133 +JUMPV +LABELV $132 +ADDRLP4 4 +INDIRI4 +CNSTI4 32 +EQI4 $137 +ADDRLP4 4 +INDIRI4 +CNSTI4 9 +NEI4 $135 +LABELV $137 +line 366 +;366: whitespace = qtrue; +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +line 367 +;367: in++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 369 +;368: // an actual token +;369: } else { +ADDRGP4 $136 +JUMPV +LABELV $135 +line 371 +;370: // if we have a pending newline, emit it (and it counts as whitespace) +;371: if (newline) { +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +EQI4 $138 +line 372 +;372: *out++ = '\n'; +ADDRLP4 36 +ADDRLP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 36 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +CNSTI1 10 +ASGNI1 +line 373 +;373: newline = qfalse; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 374 +;374: whitespace = qfalse; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 375 +;375: } if (whitespace) { +LABELV $138 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +EQI4 $140 +line 376 +;376: *out++ = ' '; +ADDRLP4 36 +ADDRLP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 36 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +CNSTI1 32 +ASGNI1 +line 377 +;377: whitespace = qfalse; +ADDRLP4 16 +CNSTI4 0 +ASGNI4 +line 378 +;378: } +LABELV $140 +line 381 +;379: +;380: // copy quoted strings unmolested +;381: if (c == '"') { +ADDRLP4 4 +INDIRI4 +CNSTI4 34 +NEI4 $142 +line 382 +;382: *out++ = c; +ADDRLP4 36 +ADDRLP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 36 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 36 +INDIRP4 +ADDRLP4 4 +INDIRI4 +CVII1 4 +ASGNI1 +line 383 +;383: in++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRGP4 $145 +JUMPV +LABELV $144 +line 384 +;384: while (1) { +line 385 +;385: c = *in; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 386 +;386: if (c && c != '"') { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $146 +ADDRLP4 4 +INDIRI4 +CNSTI4 34 +EQI4 $146 +line 387 +;387: *out++ = c; +ADDRLP4 44 +ADDRLP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 44 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 44 +INDIRP4 +ADDRLP4 4 +INDIRI4 +CVII1 4 +ASGNI1 +line 388 +;388: in++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 389 +;389: } else { +line 390 +;390: break; +LABELV $148 +line 392 +;391: } +;392: } +LABELV $145 +line 384 +ADDRGP4 $144 +JUMPV +LABELV $146 +line 393 +;393: if (c == '"') { +ADDRLP4 4 +INDIRI4 +CNSTI4 34 +NEI4 $143 +line 394 +;394: *out++ = c; +ADDRLP4 40 +ADDRLP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 40 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 40 +INDIRP4 +ADDRLP4 4 +INDIRI4 +CVII1 4 +ASGNI1 +line 395 +;395: in++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 396 +;396: } +line 397 +;397: } else { +ADDRGP4 $143 +JUMPV +LABELV $142 +line 398 +;398: *out = c; +ADDRLP4 8 +INDIRP4 +ADDRLP4 4 +INDIRI4 +CVII1 4 +ASGNI1 +line 399 +;399: out++; +ADDRLP4 8 +ADDRLP4 8 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 400 +;400: in++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 401 +;401: } +LABELV $143 +line 402 +;402: } +LABELV $136 +LABELV $133 +LABELV $125 +LABELV $119 +line 403 +;403: } +LABELV $116 +line 348 +ADDRLP4 24 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 4 +ADDRLP4 24 +INDIRI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +NEI4 $115 +line 404 +;404: } +LABELV $113 +line 405 +;405: *out = 0; +ADDRLP4 8 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 406 +;406: return out - data_p; +ADDRLP4 8 +INDIRP4 +CVPU4 4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +SUBU4 +CVUI4 4 +RETI4 +LABELV $112 +endproc COM_Compress 48 0 +export COM_ParseExt +proc COM_ParseExt 36 8 +line 410 +;407:} +;408: +;409:char *COM_ParseExt( const char **data_p, qboolean allowLineBreaks ) +;410:{ +line 411 +;411: int c = 0, len; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 412 +;412: qboolean hasNewLines = qfalse; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 415 +;413: const char *data; +;414: +;415: data = *data_p; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +line 416 +;416: len = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 417 +;417: com_token[0] = 0; +ADDRGP4 com_token +CNSTI1 0 +ASGNI1 +line 420 +;418: +;419: // make sure incoming data is valid +;420: if ( !data ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $155 +line 421 +;421: { +line 422 +;422: *data_p = NULL; +ADDRFP4 0 +INDIRP4 +CNSTP4 0 +ASGNP4 +line 423 +;423: return com_token; +ADDRGP4 com_token +RETP4 +ADDRGP4 $151 +JUMPV +LABELV $154 +line 427 +;424: } +;425: +;426: while ( 1 ) +;427: { +line 429 +;428: // skip whitespace +;429: data = SkipWhitespace( data, &hasNewLines ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ARGP4 +ADDRLP4 16 +ADDRGP4 SkipWhitespace +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 16 +INDIRP4 +ASGNP4 +line 430 +;430: if ( !data ) +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $157 +line 431 +;431: { +line 432 +;432: *data_p = NULL; +ADDRFP4 0 +INDIRP4 +CNSTP4 0 +ASGNP4 +line 433 +;433: return com_token; +ADDRGP4 com_token +RETP4 +ADDRGP4 $151 +JUMPV +LABELV $157 +line 435 +;434: } +;435: if ( hasNewLines && !allowLineBreaks ) +ADDRLP4 20 +CNSTI4 0 +ASGNI4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 20 +INDIRI4 +EQI4 $159 +ADDRFP4 4 +INDIRI4 +ADDRLP4 20 +INDIRI4 +NEI4 $159 +line 436 +;436: { +line 437 +;437: *data_p = data; +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 438 +;438: return com_token; +ADDRGP4 com_token +RETP4 +ADDRGP4 $151 +JUMPV +LABELV $159 +line 441 +;439: } +;440: +;441: c = *data; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 444 +;442: +;443: // skip double slash comments +;444: if ( c == '/' && data[1] == '/' ) +ADDRLP4 24 +CNSTI4 47 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 24 +INDIRI4 +NEI4 $161 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +ADDRLP4 24 +INDIRI4 +NEI4 $161 +line 445 +;445: { +line 446 +;446: data += 2; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 2 +ADDP4 +ASGNP4 +ADDRGP4 $164 +JUMPV +LABELV $163 +line 447 +;447: while (*data && *data != '\n') { +line 448 +;448: data++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 449 +;449: } +LABELV $164 +line 447 +ADDRLP4 28 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +EQI4 $166 +ADDRLP4 28 +INDIRI4 +CNSTI4 10 +NEI4 $163 +LABELV $166 +line 450 +;450: } +ADDRGP4 $162 +JUMPV +LABELV $161 +line 452 +;451: // skip /* */ comments +;452: else if ( c=='/' && data[1] == '*' ) +ADDRLP4 4 +INDIRI4 +CNSTI4 47 +NEI4 $156 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 42 +NEI4 $156 +line 453 +;453: { +line 454 +;454: data += 2; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 2 +ADDP4 +ASGNP4 +ADDRGP4 $170 +JUMPV +LABELV $169 +line 456 +;455: while ( *data && ( *data != '*' || data[1] != '/' ) ) +;456: { +line 457 +;457: data++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 458 +;458: } +LABELV $170 +line 455 +ADDRLP4 32 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +EQI4 $172 +ADDRLP4 32 +INDIRI4 +CNSTI4 42 +NEI4 $169 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 47 +NEI4 $169 +LABELV $172 +line 459 +;459: if ( *data ) +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $168 +line 460 +;460: { +line 461 +;461: data += 2; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 2 +ADDP4 +ASGNP4 +line 462 +;462: } +line 463 +;463: } +line 465 +;464: else +;465: { +line 466 +;466: break; +LABELV $168 +LABELV $162 +line 468 +;467: } +;468: } +LABELV $155 +line 426 +ADDRGP4 $154 +JUMPV +LABELV $156 +line 471 +;469: +;470: // handle quoted strings +;471: if (c == '\"') +ADDRLP4 4 +INDIRI4 +CNSTI4 34 +NEI4 $175 +line 472 +;472: { +line 473 +;473: data++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRGP4 $178 +JUMPV +LABELV $177 +line 475 +;474: while (1) +;475: { +line 476 +;476: c = *data++; +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 16 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 16 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 477 +;477: if (c=='\"' || !c) +ADDRLP4 4 +INDIRI4 +CNSTI4 34 +EQI4 $182 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $180 +LABELV $182 +line 478 +;478: { +line 479 +;479: com_token[len] = 0; +ADDRLP4 8 +INDIRI4 +ADDRGP4 com_token +ADDP4 +CNSTI1 0 +ASGNI1 +line 480 +;480: *data_p = ( char * ) data; +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 481 +;481: return com_token; +ADDRGP4 com_token +RETP4 +ADDRGP4 $151 +JUMPV +LABELV $180 +line 483 +;482: } +;483: if (len < MAX_TOKEN_CHARS) +ADDRLP4 8 +INDIRI4 +CNSTI4 1024 +GEI4 $183 +line 484 +;484: { +line 485 +;485: com_token[len] = c; +ADDRLP4 8 +INDIRI4 +ADDRGP4 com_token +ADDP4 +ADDRLP4 4 +INDIRI4 +CVII1 4 +ASGNI1 +line 486 +;486: len++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 487 +;487: } +LABELV $183 +line 488 +;488: } +LABELV $178 +line 474 +ADDRGP4 $177 +JUMPV +line 489 +;489: } +LABELV $175 +LABELV $185 +line 493 +;490: +;491: // parse a regular word +;492: do +;493: { +line 494 +;494: if (len < MAX_TOKEN_CHARS) +ADDRLP4 8 +INDIRI4 +CNSTI4 1024 +GEI4 $188 +line 495 +;495: { +line 496 +;496: com_token[len] = c; +ADDRLP4 8 +INDIRI4 +ADDRGP4 com_token +ADDP4 +ADDRLP4 4 +INDIRI4 +CVII1 4 +ASGNI1 +line 497 +;497: len++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 498 +;498: } +LABELV $188 +line 499 +;499: data++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 500 +;500: c = *data; +ADDRLP4 4 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 501 +;501: if ( c == '\n' ) +ADDRLP4 4 +INDIRI4 +CNSTI4 10 +NEI4 $190 +line 502 +;502: com_lines++; +ADDRLP4 16 +ADDRGP4 com_lines +ASGNP4 +ADDRLP4 16 +INDIRP4 +ADDRLP4 16 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $190 +line 503 +;503: } while (c>32); +LABELV $186 +ADDRLP4 4 +INDIRI4 +CNSTI4 32 +GTI4 $185 +line 505 +;504: +;505: if (len == MAX_TOKEN_CHARS) +ADDRLP4 8 +INDIRI4 +CNSTI4 1024 +NEI4 $192 +line 506 +;506: { +line 508 +;507:// Com_Printf ("Token exceeded %i chars, discarded.\n", MAX_TOKEN_CHARS); +;508: len = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 509 +;509: } +LABELV $192 +line 510 +;510: com_token[len] = 0; +ADDRLP4 8 +INDIRI4 +ADDRGP4 com_token +ADDP4 +CNSTI1 0 +ASGNI1 +line 512 +;511: +;512: *data_p = ( char * ) data; +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 513 +;513: return com_token; +ADDRGP4 com_token +RETP4 +LABELV $151 +endproc COM_ParseExt 36 8 +export COM_MatchToken +proc COM_MatchToken 12 16 +line 577 +;514:} +;515: +;516: +;517:#if 0 +;518:// no longer used +;519:/* +;520:=============== +;521:COM_ParseInfos +;522:=============== +;523:*/ +;524:int COM_ParseInfos( char *buf, int max, char infos[][MAX_INFO_STRING] ) { +;525: char *token; +;526: int count; +;527: char key[MAX_TOKEN_CHARS]; +;528: +;529: count = 0; +;530: +;531: while ( 1 ) { +;532: token = COM_Parse( &buf ); +;533: if ( !token[0] ) { +;534: break; +;535: } +;536: if ( strcmp( token, "{" ) ) { +;537: Com_Printf( "Missing { in info file\n" ); +;538: break; +;539: } +;540: +;541: if ( count == max ) { +;542: Com_Printf( "Max infos exceeded\n" ); +;543: break; +;544: } +;545: +;546: infos[count][0] = 0; +;547: while ( 1 ) { +;548: token = COM_ParseExt( &buf, qtrue ); +;549: if ( !token[0] ) { +;550: Com_Printf( "Unexpected end of info file\n" ); +;551: break; +;552: } +;553: if ( !strcmp( token, "}" ) ) { +;554: break; +;555: } +;556: Q_strncpyz( key, token, sizeof( key ) ); +;557: +;558: token = COM_ParseExt( &buf, qfalse ); +;559: if ( !token[0] ) { +;560: strcpy( token, "" ); +;561: } +;562: Info_SetValueForKey( infos[count], key, token ); +;563: } +;564: count++; +;565: } +;566: +;567: return count; +;568:} +;569:#endif +;570: +;571: +;572:/* +;573:================== +;574:COM_MatchToken +;575:================== +;576:*/ +;577:void COM_MatchToken( const char **buf_p, char *match ) { +line 580 +;578: char *token; +;579: +;580: token = COM_Parse( buf_p ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 581 +;581: if ( strcmp( token, match ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +EQI4 $195 +line 582 +;582: Com_Error( ERR_DROP, "MatchToken: %s != %s", token, match ); +CNSTI4 1 +ARGI4 +ADDRGP4 $197 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 583 +;583: } +LABELV $195 +line 584 +;584:} +LABELV $194 +endproc COM_MatchToken 12 16 +export SkipBracedSection +proc SkipBracedSection 12 8 +line 596 +;585: +;586: +;587:/* +;588:================= +;589:SkipBracedSection +;590: +;591:The next token should be an open brace. +;592:Skips until a matching close brace is found. +;593:Internal brace depths are properly skipped. +;594:================= +;595:*/ +;596:void SkipBracedSection (const char **program) { +line 600 +;597: char *token; +;598: int depth; +;599: +;600: depth = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +LABELV $199 +line 601 +;601: do { +line 602 +;602: token = COM_ParseExt( program, qtrue ); +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRLP4 8 +ADDRGP4 COM_ParseExt +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 603 +;603: if( token[1] == 0 ) { +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $202 +line 604 +;604: if( token[0] == '{' ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 123 +NEI4 $204 +line 605 +;605: depth++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 606 +;606: } +ADDRGP4 $205 +JUMPV +LABELV $204 +line 607 +;607: else if( token[0] == '}' ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 125 +NEI4 $206 +line 608 +;608: depth--; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 609 +;609: } +LABELV $206 +LABELV $205 +line 610 +;610: } +LABELV $202 +line 611 +;611: } while( depth && *program ); +LABELV $200 +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $208 +ADDRFP4 0 +INDIRP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $199 +LABELV $208 +line 612 +;612:} +LABELV $198 +endproc SkipBracedSection 12 8 +export SkipRestOfLine +proc SkipRestOfLine 16 0 +line 619 +;613: +;614:/* +;615:================= +;616:SkipRestOfLine +;617:================= +;618:*/ +;619:void SkipRestOfLine ( const char **data ) { +line 623 +;620: const char *p; +;621: int c; +;622: +;623: p = *data; +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +ADDRGP4 $211 +JUMPV +LABELV $210 +line 624 +;624: while ( (c = *p++) != 0 ) { +line 625 +;625: if ( c == '\n' ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 10 +NEI4 $213 +line 626 +;626: com_lines++; +ADDRLP4 8 +ADDRGP4 com_lines +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 627 +;627: break; +ADDRGP4 $212 +JUMPV +LABELV $213 +line 629 +;628: } +;629: } +LABELV $211 +line 624 +ADDRLP4 8 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $210 +LABELV $212 +line 631 +;630: +;631: *data = p; +ADDRFP4 0 +INDIRP4 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 632 +;632:} +LABELV $209 +endproc SkipRestOfLine 16 0 +export Parse1DMatrix +proc Parse1DMatrix 16 8 +line 635 +;633: +;634: +;635:void Parse1DMatrix (const char **buf_p, int x, float *m) { +line 639 +;636: char *token; +;637: int i; +;638: +;639: COM_MatchToken( buf_p, "(" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $216 +ARGP4 +ADDRGP4 COM_MatchToken +CALLV +pop +line 641 +;640: +;641: for (i = 0 ; i < x ; i++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $220 +JUMPV +LABELV $217 +line 642 +;642: token = COM_Parse(buf_p); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 643 +;643: m[i] = atof(token); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 12 +ADDRGP4 atof +CALLF4 +ASGNF4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +ADDRLP4 12 +INDIRF4 +ASGNF4 +line 644 +;644: } +LABELV $218 +line 641 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $220 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRI4 +LTI4 $217 +line 646 +;645: +;646: COM_MatchToken( buf_p, ")" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $221 +ARGP4 +ADDRGP4 COM_MatchToken +CALLV +pop +line 647 +;647:} +LABELV $215 +endproc Parse1DMatrix 16 8 +export Parse2DMatrix +proc Parse2DMatrix 8 12 +line 649 +;648: +;649:void Parse2DMatrix (const char **buf_p, int y, int x, float *m) { +line 652 +;650: int i; +;651: +;652: COM_MatchToken( buf_p, "(" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $216 +ARGP4 +ADDRGP4 COM_MatchToken +CALLV +pop +line 654 +;653: +;654: for (i = 0 ; i < y ; i++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $226 +JUMPV +LABELV $223 +line 655 +;655: Parse1DMatrix (buf_p, x, m + i * x); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +MULI4 +CNSTI4 2 +LSHI4 +ADDRFP4 12 +INDIRP4 +ADDP4 +ARGP4 +ADDRGP4 Parse1DMatrix +CALLV +pop +line 656 +;656: } +LABELV $224 +line 654 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $226 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRI4 +LTI4 $223 +line 658 +;657: +;658: COM_MatchToken( buf_p, ")" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $221 +ARGP4 +ADDRGP4 COM_MatchToken +CALLV +pop +line 659 +;659:} +LABELV $222 +endproc Parse2DMatrix 8 12 +export Parse3DMatrix +proc Parse3DMatrix 12 16 +line 661 +;660: +;661:void Parse3DMatrix (const char **buf_p, int z, int y, int x, float *m) { +line 664 +;662: int i; +;663: +;664: COM_MatchToken( buf_p, "(" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $216 +ARGP4 +ADDRGP4 COM_MatchToken +CALLV +pop +line 666 +;665: +;666: for (i = 0 ; i < z ; i++) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $231 +JUMPV +LABELV $228 +line 667 +;667: Parse2DMatrix (buf_p, y, x, m + i * x*y); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRLP4 8 +ADDRFP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +ARGI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRI4 +MULI4 +ADDRLP4 4 +INDIRI4 +MULI4 +CNSTI4 2 +LSHI4 +ADDRFP4 16 +INDIRP4 +ADDP4 +ARGP4 +ADDRGP4 Parse2DMatrix +CALLV +pop +line 668 +;668: } +LABELV $229 +line 666 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $231 +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRI4 +LTI4 $228 +line 670 +;669: +;670: COM_MatchToken( buf_p, ")" ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $221 +ARGP4 +ADDRGP4 COM_MatchToken +CALLV +pop +line 671 +;671:} +LABELV $227 +endproc Parse3DMatrix 12 16 +export Q_isprint +proc Q_isprint 4 0 +line 683 +;672: +;673: +;674:/* +;675:============================================================================ +;676: +;677: LIBRARY REPLACEMENT FUNCTIONS +;678: +;679:============================================================================ +;680:*/ +;681: +;682:int Q_isprint( int c ) +;683:{ +line 684 +;684: if ( c >= 0x20 && c <= 0x7E ) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 32 +LTI4 $233 +ADDRLP4 0 +INDIRI4 +CNSTI4 126 +GTI4 $233 +line 685 +;685: return ( 1 ); +CNSTI4 1 +RETI4 +ADDRGP4 $232 +JUMPV +LABELV $233 +line 686 +;686: return ( 0 ); +CNSTI4 0 +RETI4 +LABELV $232 +endproc Q_isprint 4 0 +export Q_islower +proc Q_islower 4 0 +line 690 +;687:} +;688: +;689:int Q_islower( int c ) +;690:{ +line 691 +;691: if (c >= 'a' && c <= 'z') +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 97 +LTI4 $236 +ADDRLP4 0 +INDIRI4 +CNSTI4 122 +GTI4 $236 +line 692 +;692: return ( 1 ); +CNSTI4 1 +RETI4 +ADDRGP4 $235 +JUMPV +LABELV $236 +line 693 +;693: return ( 0 ); +CNSTI4 0 +RETI4 +LABELV $235 +endproc Q_islower 4 0 +export Q_isupper +proc Q_isupper 4 0 +line 697 +;694:} +;695: +;696:int Q_isupper( int c ) +;697:{ +line 698 +;698: if (c >= 'A' && c <= 'Z') +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 65 +LTI4 $239 +ADDRLP4 0 +INDIRI4 +CNSTI4 90 +GTI4 $239 +line 699 +;699: return ( 1 ); +CNSTI4 1 +RETI4 +ADDRGP4 $238 +JUMPV +LABELV $239 +line 700 +;700: return ( 0 ); +CNSTI4 0 +RETI4 +LABELV $238 +endproc Q_isupper 4 0 +export Q_isalpha +proc Q_isalpha 8 0 +line 704 +;701:} +;702: +;703:int Q_isalpha( int c ) +;704:{ +line 705 +;705: if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 97 +LTI4 $245 +ADDRLP4 0 +INDIRI4 +CNSTI4 122 +LEI4 $244 +LABELV $245 +ADDRLP4 4 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 65 +LTI4 $242 +ADDRLP4 4 +INDIRI4 +CNSTI4 90 +GTI4 $242 +LABELV $244 +line 706 +;706: return ( 1 ); +CNSTI4 1 +RETI4 +ADDRGP4 $241 +JUMPV +LABELV $242 +line 707 +;707: return ( 0 ); +CNSTI4 0 +RETI4 +LABELV $241 +endproc Q_isalpha 8 0 +export Q_strrchr +proc Q_strrchr 12 0 +line 711 +;708:} +;709: +;710:char* Q_strrchr( const char* string, int c ) +;711:{ +line 712 +;712: char cc = c; +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +CVII1 4 +ASGNI1 +line 714 +;713: char *s; +;714: char *sp=(char *)0; +ADDRLP4 8 +CNSTP4 0 +ASGNP4 +line 716 +;715: +;716: s = (char*)string; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $248 +JUMPV +LABELV $247 +line 719 +;717: +;718: while (*s) +;719: { +line 720 +;720: if (*s == cc) +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ADDRLP4 4 +INDIRI1 +CVII4 1 +NEI4 $250 +line 721 +;721: sp = s; +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +ASGNP4 +LABELV $250 +line 722 +;722: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 723 +;723: } +LABELV $248 +line 718 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $247 +line 724 +;724: if (cc == 0) +ADDRLP4 4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $252 +line 725 +;725: sp = s; +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +ASGNP4 +LABELV $252 +line 727 +;726: +;727: return sp; +ADDRLP4 8 +INDIRP4 +RETP4 +LABELV $246 +endproc Q_strrchr 12 0 +export Q_strncpyz +proc Q_strncpyz 0 12 +line 737 +;728:} +;729: +;730:/* +;731:============= +;732:Q_strncpyz +;733: +;734:Safe strncpy that ensures a trailing zero +;735:============= +;736:*/ +;737:void Q_strncpyz( char *dest, const char *src, int destsize ) { +line 739 +;738: // bk001129 - also NULL dest +;739: if ( !dest ) { +ADDRFP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $255 +line 740 +;740: Com_Error( ERR_FATAL, "Q_strncpyz: NULL dest" ); +CNSTI4 0 +ARGI4 +ADDRGP4 $257 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 741 +;741: } +LABELV $255 +line 742 +;742: if ( !src ) { +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $258 +line 743 +;743: Com_Error( ERR_FATAL, "Q_strncpyz: NULL src" ); +CNSTI4 0 +ARGI4 +ADDRGP4 $260 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 744 +;744: } +LABELV $258 +line 745 +;745: if ( destsize < 1 ) { +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +GEI4 $261 +line 746 +;746: Com_Error(ERR_FATAL,"Q_strncpyz: destsize < 1" ); +CNSTI4 0 +ARGI4 +ADDRGP4 $263 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 747 +;747: } +LABELV $261 +line 749 +;748: +;749: strncpy( dest, src, destsize-1 ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ARGI4 +ADDRGP4 strncpy +CALLP4 +pop +line 750 +;750: dest[destsize-1] = 0; +ADDRFP4 8 +INDIRI4 +CNSTI4 1 +SUBI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +CNSTI1 0 +ASGNI1 +line 751 +;751:} +LABELV $254 +endproc Q_strncpyz 0 12 +export Q_stricmpn +proc Q_stricmpn 32 0 +line 753 +;752: +;753:int Q_stricmpn (const char *s1, const char *s2, int n) { +line 757 +;754: int c1, c2; +;755: +;756: // bk001129 - moved in 1.17 fix not in id codebase +;757: if ( s1 == NULL ) { +ADDRFP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $265 +line 758 +;758: if ( s2 == NULL ) +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $267 +line 759 +;759: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $264 +JUMPV +LABELV $267 +line 761 +;760: else +;761: return -1; +CNSTI4 -1 +RETI4 +ADDRGP4 $264 +JUMPV +LABELV $265 +line 763 +;762: } +;763: else if ( s2==NULL ) +ADDRFP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $269 +line 764 +;764: return 1; +CNSTI4 1 +RETI4 +ADDRGP4 $264 +JUMPV +LABELV $269 +LABELV $271 +line 768 +;765: +;766: +;767: +;768: do { +line 769 +;769: c1 = *s1++; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 8 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 770 +;770: c2 = *s2++; +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 12 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 772 +;771: +;772: if (!n--) { +ADDRLP4 16 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRFP4 8 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $274 +line 773 +;773: return 0; // strings are equal until end point +CNSTI4 0 +RETI4 +ADDRGP4 $264 +JUMPV +LABELV $274 +line 776 +;774: } +;775: +;776: if (c1 != c2) { +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $276 +line 777 +;777: if (c1 >= 'a' && c1 <= 'z') { +ADDRLP4 0 +INDIRI4 +CNSTI4 97 +LTI4 $278 +ADDRLP4 0 +INDIRI4 +CNSTI4 122 +GTI4 $278 +line 778 +;778: c1 -= ('a' - 'A'); +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 32 +SUBI4 +ASGNI4 +line 779 +;779: } +LABELV $278 +line 780 +;780: if (c2 >= 'a' && c2 <= 'z') { +ADDRLP4 4 +INDIRI4 +CNSTI4 97 +LTI4 $280 +ADDRLP4 4 +INDIRI4 +CNSTI4 122 +GTI4 $280 +line 781 +;781: c2 -= ('a' - 'A'); +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 32 +SUBI4 +ASGNI4 +line 782 +;782: } +LABELV $280 +line 783 +;783: if (c1 != c2) { +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $282 +line 784 +;784: return c1 < c2 ? -1 : 1; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +GEI4 $285 +ADDRLP4 28 +CNSTI4 -1 +ASGNI4 +ADDRGP4 $286 +JUMPV +LABELV $285 +ADDRLP4 28 +CNSTI4 1 +ASGNI4 +LABELV $286 +ADDRLP4 28 +INDIRI4 +RETI4 +ADDRGP4 $264 +JUMPV +LABELV $282 +line 786 +;785: } +;786: } +LABELV $276 +line 787 +;787: } while (c1); +LABELV $272 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $271 +line 789 +;788: +;789: return 0; // strings are equal +CNSTI4 0 +RETI4 +LABELV $264 +endproc Q_stricmpn 32 0 +export Q_strncmp +proc Q_strncmp 24 0 +line 792 +;790:} +;791: +;792:int Q_strncmp (const char *s1, const char *s2, int n) { +LABELV $288 +line 795 +;793: int c1, c2; +;794: +;795: do { +line 796 +;796: c1 = *s1++; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 8 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 797 +;797: c2 = *s2++; +ADDRLP4 12 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRFP4 4 +ADDRLP4 12 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 12 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +line 799 +;798: +;799: if (!n--) { +ADDRLP4 16 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRFP4 8 +ADDRLP4 16 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $291 +line 800 +;800: return 0; // strings are equal until end point +CNSTI4 0 +RETI4 +ADDRGP4 $287 +JUMPV +LABELV $291 +line 803 +;801: } +;802: +;803: if (c1 != c2) { +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +EQI4 $293 +line 804 +;804: return c1 < c2 ? -1 : 1; +ADDRLP4 0 +INDIRI4 +ADDRLP4 4 +INDIRI4 +GEI4 $296 +ADDRLP4 20 +CNSTI4 -1 +ASGNI4 +ADDRGP4 $297 +JUMPV +LABELV $296 +ADDRLP4 20 +CNSTI4 1 +ASGNI4 +LABELV $297 +ADDRLP4 20 +INDIRI4 +RETI4 +ADDRGP4 $287 +JUMPV +LABELV $293 +line 806 +;805: } +;806: } while (c1); +LABELV $289 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $288 +line 808 +;807: +;808: return 0; // strings are equal +CNSTI4 0 +RETI4 +LABELV $287 +endproc Q_strncmp 24 0 +export Q_stricmp +proc Q_stricmp 12 12 +line 811 +;809:} +;810: +;811:int Q_stricmp (const char *s1, const char *s2) { +line 812 +;812: return (s1 && s2) ? Q_stricmpn (s1, s2, 99999) : -1; +ADDRLP4 4 +CNSTU4 0 +ASGNU4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 4 +INDIRU4 +EQU4 $300 +ADDRFP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 4 +INDIRU4 +EQU4 $300 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 99999 +ARGI4 +ADDRLP4 8 +ADDRGP4 Q_stricmpn +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8 +INDIRI4 +ASGNI4 +ADDRGP4 $301 +JUMPV +LABELV $300 +ADDRLP4 0 +CNSTI4 -1 +ASGNI4 +LABELV $301 +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $298 +endproc Q_stricmp 12 12 +export Q_strlwr +proc Q_strlwr 12 4 +line 816 +;813:} +;814: +;815: +;816:char *Q_strlwr( char *s1 ) { +line 819 +;817: char *s; +;818: +;819: s = s1; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $304 +JUMPV +LABELV $303 +line 820 +;820: while ( *s ) { +line 821 +;821: *s = tolower(*s); +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ARGI4 +ADDRLP4 8 +ADDRGP4 tolower +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +CVII1 4 +ASGNI1 +line 822 +;822: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 823 +;823: } +LABELV $304 +line 820 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $303 +line 824 +;824: return s1; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $302 +endproc Q_strlwr 12 4 +export Q_strupr +proc Q_strupr 12 4 +line 827 +;825:} +;826: +;827:char *Q_strupr( char *s1 ) { +line 830 +;828: char *s; +;829: +;830: s = s1; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $308 +JUMPV +LABELV $307 +line 831 +;831: while ( *s ) { +line 832 +;832: *s = toupper(*s); +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ARGI4 +ADDRLP4 8 +ADDRGP4 toupper +CALLI4 +ASGNI4 +ADDRLP4 0 +INDIRP4 +ADDRLP4 8 +INDIRI4 +CVII1 4 +ASGNI1 +line 833 +;833: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 834 +;834: } +LABELV $308 +line 831 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $307 +line 835 +;835: return s1; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $306 +endproc Q_strupr 12 4 +export Q_strcat +proc Q_strcat 12 12 +line 840 +;836:} +;837: +;838: +;839:// never goes past bounds or leaves without a terminating 0 +;840:void Q_strcat( char *dest, int size, const char *src ) { +line 843 +;841: int l1; +;842: +;843: l1 = strlen( dest ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 844 +;844: if ( l1 >= size ) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRI4 +LTI4 $311 +line 845 +;845: Com_Error( ERR_FATAL, "Q_strcat: already overflowed" ); +CNSTI4 0 +ARGI4 +ADDRGP4 $313 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 846 +;846: } +LABELV $311 +line 847 +;847: Q_strncpyz( dest + l1, src, size - l1 ); +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRP4 +ADDP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +SUBI4 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 848 +;848:} +LABELV $310 +endproc Q_strcat 12 12 +export Q_PrintStrlen +proc Q_PrintStrlen 20 0 +line 851 +;849: +;850: +;851:int Q_PrintStrlen( const char *string ) { +line 855 +;852: int len; +;853: const char *p; +;854: +;855: if( !string ) { +ADDRFP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $315 +line 856 +;856: return 0; +CNSTI4 0 +RETI4 +ADDRGP4 $314 +JUMPV +LABELV $315 +line 859 +;857: } +;858: +;859: len = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 860 +;860: p = string; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $318 +JUMPV +LABELV $317 +line 861 +;861: while( *p ) { +line 862 +;862: if( Q_IsColorString( p ) ) { +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $320 +ADDRLP4 12 +CNSTI4 94 +ASGNI4 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ADDRLP4 12 +INDIRI4 +NEI4 $320 +ADDRLP4 16 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +EQI4 $320 +ADDRLP4 16 +INDIRI4 +ADDRLP4 12 +INDIRI4 +EQI4 $320 +line 863 +;863: p += 2; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 2 +ADDP4 +ASGNP4 +line 864 +;864: continue; +ADDRGP4 $318 +JUMPV +LABELV $320 +line 866 +;865: } +;866: p++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 867 +;867: len++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 868 +;868: } +LABELV $318 +line 861 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $317 +line 870 +;869: +;870: return len; +ADDRLP4 4 +INDIRI4 +RETI4 +LABELV $314 +endproc Q_PrintStrlen 20 0 +export Q_CleanStr +proc Q_CleanStr 32 0 +line 874 +;871:} +;872: +;873: +;874:char *Q_CleanStr( char *string ) { +line 879 +;875: char* d; +;876: char* s; +;877: int c; +;878: +;879: s = string; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 880 +;880: d = string; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRGP4 $324 +JUMPV +LABELV $323 +line 881 +;881: while ((c = *s) != 0 ) { +line 882 +;882: if ( Q_IsColorString( s ) ) { +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $326 +ADDRLP4 16 +CNSTI4 94 +ASGNI4 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ADDRLP4 16 +INDIRI4 +NEI4 $326 +ADDRLP4 20 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +EQI4 $326 +ADDRLP4 20 +INDIRI4 +ADDRLP4 16 +INDIRI4 +EQI4 $326 +line 883 +;883: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 884 +;884: } +ADDRGP4 $327 +JUMPV +LABELV $326 +line 885 +;885: else if ( c >= 0x20 && c <= 0x7E ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 32 +LTI4 $328 +ADDRLP4 4 +INDIRI4 +CNSTI4 126 +GTI4 $328 +line 886 +;886: *d++ = c; +ADDRLP4 28 +ADDRLP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 28 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 4 +INDIRI4 +CVII1 4 +ASGNI1 +line 887 +;887: } +LABELV $328 +LABELV $327 +line 888 +;888: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 889 +;889: } +LABELV $324 +line 881 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 4 +ADDRLP4 12 +INDIRI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $323 +line 890 +;890: *d = '\0'; +ADDRLP4 8 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 892 +;891: +;892: return string; +ADDRFP4 0 +INDIRP4 +RETP4 +LABELV $322 +endproc Q_CleanStr 32 0 +export Com_sprintf +proc Com_sprintf 32012 12 +line 896 +;893:} +;894: +;895: +;896:void QDECL Com_sprintf( char *dest, int size, const char *fmt, ...) { +line 901 +;897: int len; +;898: va_list argptr; +;899: char bigbuffer[32000]; // big, but small enough to fit in PPC stack +;900: +;901: va_start (argptr,fmt); +ADDRLP4 4 +ADDRFP4 8+4 +ASGNP4 +line 902 +;902: len = vsprintf (bigbuffer,fmt,argptr); +ADDRLP4 8 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRLP4 32008 +ADDRGP4 vsprintf +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 32008 +INDIRI4 +ASGNI4 +line 903 +;903: va_end (argptr); +ADDRLP4 4 +CNSTP4 0 +ASGNP4 +line 904 +;904: if ( len >= sizeof( bigbuffer ) ) { +ADDRLP4 0 +INDIRI4 +CVIU4 4 +CNSTU4 32000 +LTU4 $332 +line 905 +;905: Com_Error( ERR_FATAL, "Com_sprintf: overflowed bigbuffer" ); +CNSTI4 0 +ARGI4 +ADDRGP4 $334 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 906 +;906: } +LABELV $332 +line 907 +;907: if (len >= size) { +ADDRLP4 0 +INDIRI4 +ADDRFP4 4 +INDIRI4 +LTI4 $335 +line 908 +;908: Com_Printf ("Com_sprintf: overflow of %i in %i\n", len, size); +ADDRGP4 $337 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 Com_Printf +CALLV +pop +line 914 +;909:#ifdef _DEBUG +;910: __asm { +;911: int 3; +;912: } +;913:#endif +;914: } +LABELV $335 +line 915 +;915: Q_strncpyz (dest, bigbuffer, size ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 916 +;916:} +LABELV $330 +endproc Com_sprintf 32012 12 +bss +align 1 +LABELV $339 +skip 64000 +data +align 4 +LABELV $340 +byte 4 0 +export va +code +proc va 12 12 +line 928 +;917: +;918: +;919:/* +;920:============ +;921:va +;922: +;923:does a varargs printf into a temp buffer, so I don't need to have +;924:varargs versions of all text functions. +;925:FIXME: make this buffer size safe someday +;926:============ +;927:*/ +;928:char * QDECL va( const char *format, ... ) { +line 934 +;929: va_list argptr; +;930: static char string[2][32000]; // in case va is called by nested functions +;931: static int index = 0; +;932: char *buf; +;933: +;934: buf = string[index & 1]; +ADDRLP4 4 +CNSTI4 32000 +ADDRGP4 $340 +INDIRI4 +CNSTI4 1 +BANDI4 +MULI4 +ADDRGP4 $339 +ADDP4 +ASGNP4 +line 935 +;935: index++; +ADDRLP4 8 +ADDRGP4 $340 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 8 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 937 +;936: +;937: va_start (argptr, format); +ADDRLP4 0 +ADDRFP4 0+4 +ASGNP4 +line 938 +;938: vsprintf (buf, format,argptr); +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 vsprintf +CALLI4 +pop +line 939 +;939: va_end (argptr); +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 941 +;940: +;941: return buf; +ADDRLP4 4 +INDIRP4 +RETP4 +LABELV $338 +endproc va 12 12 +bss +align 1 +LABELV $343 +skip 16384 +data +align 4 +LABELV $344 +byte 4 0 +export Info_ValueForKey +code +proc Info_ValueForKey 8220 8 +line 962 +;942:} +;943: +;944: +;945:/* +;946:===================================================================== +;947: +;948: INFO STRINGS +;949: +;950:===================================================================== +;951:*/ +;952: +;953:/* +;954:=============== +;955:Info_ValueForKey +;956: +;957:Searches the string for the given +;958:key and returns the associated value, or an empty string. +;959:FIXME: overflow check? +;960:=============== +;961:*/ +;962:char *Info_ValueForKey( const char *s, const char *key ) { +line 969 +;963: char pkey[BIG_INFO_KEY]; +;964: static char value[2][BIG_INFO_VALUE]; // use two buffers so compares +;965: // work without stomping on each other +;966: static int valueindex = 0; +;967: char *o; +;968: +;969: if ( !s || !key ) { +ADDRLP4 8196 +CNSTU4 0 +ASGNU4 +ADDRFP4 0 +INDIRP4 +CVPU4 4 +ADDRLP4 8196 +INDIRU4 +EQU4 $347 +ADDRFP4 4 +INDIRP4 +CVPU4 4 +ADDRLP4 8196 +INDIRU4 +NEU4 $345 +LABELV $347 +line 970 +;970: return ""; +ADDRGP4 $348 +RETP4 +ADDRGP4 $342 +JUMPV +LABELV $345 +line 973 +;971: } +;972: +;973: if ( strlen( s ) >= BIG_INFO_STRING ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8200 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 8200 +INDIRI4 +CNSTI4 8192 +LTI4 $349 +line 974 +;974: Com_Error( ERR_DROP, "Info_ValueForKey: oversize infostring" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $351 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 975 +;975: } +LABELV $349 +line 977 +;976: +;977: valueindex ^= 1; +ADDRLP4 8204 +ADDRGP4 $344 +ASGNP4 +ADDRLP4 8204 +INDIRP4 +ADDRLP4 8204 +INDIRP4 +INDIRI4 +CNSTI4 1 +BXORI4 +ASGNI4 +line 978 +;978: if (*s == '\\') +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 92 +NEI4 $355 +line 979 +;979: s++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +ADDRGP4 $355 +JUMPV +LABELV $354 +line 981 +;980: while (1) +;981: { +line 982 +;982: o = pkey; +ADDRLP4 0 +ADDRLP4 4 +ASGNP4 +ADDRGP4 $358 +JUMPV +LABELV $357 +line 984 +;983: while (*s != '\\') +;984: { +line 985 +;985: if (!*s) +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $360 +line 986 +;986: return ""; +ADDRGP4 $348 +RETP4 +ADDRGP4 $342 +JUMPV +LABELV $360 +line 987 +;987: *o++ = *s++; +ADDRLP4 8208 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8216 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8208 +INDIRP4 +ADDRLP4 8216 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8212 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 8212 +INDIRP4 +ADDRLP4 8216 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8208 +INDIRP4 +ADDRLP4 8212 +INDIRP4 +INDIRI1 +ASGNI1 +line 988 +;988: } +LABELV $358 +line 983 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 92 +NEI4 $357 +line 989 +;989: *o = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 990 +;990: s++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 992 +;991: +;992: o = value[valueindex]; +ADDRLP4 0 +ADDRGP4 $344 +INDIRI4 +CNSTI4 13 +LSHI4 +ADDRGP4 $343 +ADDP4 +ASGNP4 +ADDRGP4 $363 +JUMPV +LABELV $362 +line 995 +;993: +;994: while (*s != '\\' && *s) +;995: { +line 996 +;996: *o++ = *s++; +ADDRLP4 8208 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 8216 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8208 +INDIRP4 +ADDRLP4 8216 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8212 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 8212 +INDIRP4 +ADDRLP4 8216 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8208 +INDIRP4 +ADDRLP4 8212 +INDIRP4 +INDIRI1 +ASGNI1 +line 997 +;997: } +LABELV $363 +line 994 +ADDRLP4 8208 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 8208 +INDIRI4 +CNSTI4 92 +EQI4 $365 +ADDRLP4 8208 +INDIRI4 +CNSTI4 0 +NEI4 $362 +LABELV $365 +line 998 +;998: *o = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1000 +;999: +;1000: if (!Q_stricmp (key, pkey) ) +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 8212 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 8212 +INDIRI4 +CNSTI4 0 +NEI4 $366 +line 1001 +;1001: return value[valueindex]; +ADDRGP4 $344 +INDIRI4 +CNSTI4 13 +LSHI4 +ADDRGP4 $343 +ADDP4 +RETP4 +ADDRGP4 $342 +JUMPV +LABELV $366 +line 1003 +;1002: +;1003: if (!*s) +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $368 +line 1004 +;1004: break; +ADDRGP4 $356 +JUMPV +LABELV $368 +line 1005 +;1005: s++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1006 +;1006: } +LABELV $355 +line 980 +ADDRGP4 $354 +JUMPV +LABELV $356 +line 1008 +;1007: +;1008: return ""; +ADDRGP4 $348 +RETP4 +LABELV $342 +endproc Info_ValueForKey 8220 8 +export Info_NextPair +proc Info_NextPair 20 0 +line 1019 +;1009:} +;1010: +;1011: +;1012:/* +;1013:=================== +;1014:Info_NextPair +;1015: +;1016:Used to itterate through all the key/value pairs in an info string +;1017:=================== +;1018:*/ +;1019:void Info_NextPair( const char **head, char *key, char *value ) { +line 1023 +;1020: char *o; +;1021: const char *s; +;1022: +;1023: s = *head; +ADDRLP4 0 +ADDRFP4 0 +INDIRP4 +INDIRP4 +ASGNP4 +line 1025 +;1024: +;1025: if ( *s == '\\' ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 92 +NEI4 $371 +line 1026 +;1026: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1027 +;1027: } +LABELV $371 +line 1028 +;1028: key[0] = 0; +ADDRFP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1029 +;1029: value[0] = 0; +ADDRFP4 8 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1031 +;1030: +;1031: o = key; +ADDRLP4 4 +ADDRFP4 4 +INDIRP4 +ASGNP4 +ADDRGP4 $374 +JUMPV +LABELV $373 +line 1032 +;1032: while ( *s != '\\' ) { +line 1033 +;1033: if ( !*s ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $376 +line 1034 +;1034: *o = 0; +ADDRLP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1035 +;1035: *head = s; +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 1036 +;1036: return; +ADDRGP4 $370 +JUMPV +LABELV $376 +line 1038 +;1037: } +;1038: *o++ = *s++; +ADDRLP4 8 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 12 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI1 +ASGNI1 +line 1039 +;1039: } +LABELV $374 +line 1032 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 92 +NEI4 $373 +line 1040 +;1040: *o = 0; +ADDRLP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1041 +;1041: s++; +ADDRLP4 0 +ADDRLP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1043 +;1042: +;1043: o = value; +ADDRLP4 4 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRGP4 $379 +JUMPV +LABELV $378 +line 1044 +;1044: while ( *s != '\\' && *s ) { +line 1045 +;1045: *o++ = *s++; +ADDRLP4 8 +ADDRLP4 4 +INDIRP4 +ASGNP4 +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 12 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 12 +INDIRP4 +ADDRLP4 16 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ADDRLP4 12 +INDIRP4 +INDIRI1 +ASGNI1 +line 1046 +;1046: } +LABELV $379 +line 1044 +ADDRLP4 8 +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 92 +EQI4 $381 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $378 +LABELV $381 +line 1047 +;1047: *o = 0; +ADDRLP4 4 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1049 +;1048: +;1049: *head = s; +ADDRFP4 0 +INDIRP4 +ADDRLP4 0 +INDIRP4 +ASGNP4 +line 1050 +;1050:} +LABELV $370 +endproc Info_NextPair 20 0 +export Info_RemoveKey +proc Info_RemoveKey 2076 8 +line 1058 +;1051: +;1052: +;1053:/* +;1054:=================== +;1055:Info_RemoveKey +;1056:=================== +;1057:*/ +;1058:void Info_RemoveKey( char *s, const char *key ) { +line 1064 +;1059: char *start; +;1060: char pkey[MAX_INFO_KEY]; +;1061: char value[MAX_INFO_VALUE]; +;1062: char *o; +;1063: +;1064: if ( strlen( s ) >= MAX_INFO_STRING ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 2056 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 2056 +INDIRI4 +CNSTI4 1024 +LTI4 $383 +line 1065 +;1065: Com_Error( ERR_DROP, "Info_RemoveKey: oversize infostring" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $385 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1066 +;1066: } +LABELV $383 +line 1068 +;1067: +;1068: if (strchr (key, '\\')) { +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 92 +ARGI4 +ADDRLP4 2060 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 2060 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $389 +line 1069 +;1069: return; +ADDRGP4 $382 +JUMPV +LABELV $388 +line 1073 +;1070: } +;1071: +;1072: while (1) +;1073: { +line 1074 +;1074: start = s; +ADDRLP4 1028 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 1075 +;1075: if (*s == '\\') +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 92 +NEI4 $391 +line 1076 +;1076: s++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +LABELV $391 +line 1077 +;1077: o = pkey; +ADDRLP4 0 +ADDRLP4 4 +ASGNP4 +ADDRGP4 $394 +JUMPV +LABELV $393 +line 1079 +;1078: while (*s != '\\') +;1079: { +line 1080 +;1080: if (!*s) +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $396 +line 1081 +;1081: return; +ADDRGP4 $382 +JUMPV +LABELV $396 +line 1082 +;1082: *o++ = *s++; +ADDRLP4 2064 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 2072 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 2064 +INDIRP4 +ADDRLP4 2072 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 2068 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 2068 +INDIRP4 +ADDRLP4 2072 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 2064 +INDIRP4 +ADDRLP4 2068 +INDIRP4 +INDIRI1 +ASGNI1 +line 1083 +;1083: } +LABELV $394 +line 1078 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 92 +NEI4 $393 +line 1084 +;1084: *o = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1085 +;1085: s++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1087 +;1086: +;1087: o = value; +ADDRLP4 0 +ADDRLP4 1032 +ASGNP4 +ADDRGP4 $399 +JUMPV +LABELV $398 +line 1089 +;1088: while (*s != '\\' && *s) +;1089: { +line 1090 +;1090: if (!*s) +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $401 +line 1091 +;1091: return; +ADDRGP4 $382 +JUMPV +LABELV $401 +line 1092 +;1092: *o++ = *s++; +ADDRLP4 2064 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 2072 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 2064 +INDIRP4 +ADDRLP4 2072 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 2068 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 2068 +INDIRP4 +ADDRLP4 2072 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 2064 +INDIRP4 +ADDRLP4 2068 +INDIRP4 +INDIRI1 +ASGNI1 +line 1093 +;1093: } +LABELV $399 +line 1088 +ADDRLP4 2064 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 2064 +INDIRI4 +CNSTI4 92 +EQI4 $403 +ADDRLP4 2064 +INDIRI4 +CNSTI4 0 +NEI4 $398 +LABELV $403 +line 1094 +;1094: *o = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1096 +;1095: +;1096: if (!strcmp (key, pkey) ) +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 2068 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 2068 +INDIRI4 +CNSTI4 0 +NEI4 $404 +line 1097 +;1097: { +line 1098 +;1098: strcpy (start, s); // remove this part +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1099 +;1099: return; +ADDRGP4 $382 +JUMPV +LABELV $404 +line 1102 +;1100: } +;1101: +;1102: if (!*s) +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $406 +line 1103 +;1103: return; +ADDRGP4 $382 +JUMPV +LABELV $406 +line 1104 +;1104: } +LABELV $389 +line 1072 +ADDRGP4 $388 +JUMPV +line 1106 +;1105: +;1106:} +LABELV $382 +endproc Info_RemoveKey 2076 8 +export Info_RemoveKey_Big +proc Info_RemoveKey_Big 16412 8 +line 1113 +;1107: +;1108:/* +;1109:=================== +;1110:Info_RemoveKey_Big +;1111:=================== +;1112:*/ +;1113:void Info_RemoveKey_Big( char *s, const char *key ) { +line 1119 +;1114: char *start; +;1115: char pkey[BIG_INFO_KEY]; +;1116: char value[BIG_INFO_VALUE]; +;1117: char *o; +;1118: +;1119: if ( strlen( s ) >= BIG_INFO_STRING ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 16392 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 16392 +INDIRI4 +CNSTI4 8192 +LTI4 $409 +line 1120 +;1120: Com_Error( ERR_DROP, "Info_RemoveKey_Big: oversize infostring" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $411 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1121 +;1121: } +LABELV $409 +line 1123 +;1122: +;1123: if (strchr (key, '\\')) { +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 92 +ARGI4 +ADDRLP4 16396 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 16396 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $415 +line 1124 +;1124: return; +ADDRGP4 $408 +JUMPV +LABELV $414 +line 1128 +;1125: } +;1126: +;1127: while (1) +;1128: { +line 1129 +;1129: start = s; +ADDRLP4 8196 +ADDRFP4 0 +INDIRP4 +ASGNP4 +line 1130 +;1130: if (*s == '\\') +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 92 +NEI4 $417 +line 1131 +;1131: s++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +LABELV $417 +line 1132 +;1132: o = pkey; +ADDRLP4 0 +ADDRLP4 4 +ASGNP4 +ADDRGP4 $420 +JUMPV +LABELV $419 +line 1134 +;1133: while (*s != '\\') +;1134: { +line 1135 +;1135: if (!*s) +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $422 +line 1136 +;1136: return; +ADDRGP4 $408 +JUMPV +LABELV $422 +line 1137 +;1137: *o++ = *s++; +ADDRLP4 16400 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16408 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 16400 +INDIRP4 +ADDRLP4 16408 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 16404 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 16404 +INDIRP4 +ADDRLP4 16408 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 16400 +INDIRP4 +ADDRLP4 16404 +INDIRP4 +INDIRI1 +ASGNI1 +line 1138 +;1138: } +LABELV $420 +line 1133 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 92 +NEI4 $419 +line 1139 +;1139: *o = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1140 +;1140: s++; +ADDRFP4 0 +ADDRFP4 0 +INDIRP4 +CNSTI4 1 +ADDP4 +ASGNP4 +line 1142 +;1141: +;1142: o = value; +ADDRLP4 0 +ADDRLP4 8200 +ASGNP4 +ADDRGP4 $425 +JUMPV +LABELV $424 +line 1144 +;1143: while (*s != '\\' && *s) +;1144: { +line 1145 +;1145: if (!*s) +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $427 +line 1146 +;1146: return; +ADDRGP4 $408 +JUMPV +LABELV $427 +line 1147 +;1147: *o++ = *s++; +ADDRLP4 16400 +ADDRLP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 16408 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 16400 +INDIRP4 +ADDRLP4 16408 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 16404 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRFP4 0 +ADDRLP4 16404 +INDIRP4 +ADDRLP4 16408 +INDIRI4 +ADDP4 +ASGNP4 +ADDRLP4 16400 +INDIRP4 +ADDRLP4 16404 +INDIRP4 +INDIRI1 +ASGNI1 +line 1148 +;1148: } +LABELV $425 +line 1143 +ADDRLP4 16400 +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 16400 +INDIRI4 +CNSTI4 92 +EQI4 $429 +ADDRLP4 16400 +INDIRI4 +CNSTI4 0 +NEI4 $424 +LABELV $429 +line 1149 +;1149: *o = 0; +ADDRLP4 0 +INDIRP4 +CNSTI1 0 +ASGNI1 +line 1151 +;1150: +;1151: if (!strcmp (key, pkey) ) +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 16404 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 16404 +INDIRI4 +CNSTI4 0 +NEI4 $430 +line 1152 +;1152: { +line 1153 +;1153: strcpy (start, s); // remove this part +ADDRLP4 8196 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1154 +;1154: return; +ADDRGP4 $408 +JUMPV +LABELV $430 +line 1157 +;1155: } +;1156: +;1157: if (!*s) +ADDRFP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $432 +line 1158 +;1158: return; +ADDRGP4 $408 +JUMPV +LABELV $432 +line 1159 +;1159: } +LABELV $415 +line 1127 +ADDRGP4 $414 +JUMPV +line 1161 +;1160: +;1161:} +LABELV $408 +endproc Info_RemoveKey_Big 16412 8 +export Info_Validate +proc Info_Validate 8 8 +line 1174 +;1162: +;1163: +;1164: +;1165: +;1166:/* +;1167:================== +;1168:Info_Validate +;1169: +;1170:Some characters are illegal in info strings because they +;1171:can mess up the server's parsing +;1172:================== +;1173:*/ +;1174:qboolean Info_Validate( const char *s ) { +line 1175 +;1175: if ( strchr( s, '\"' ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 34 +ARGI4 +ADDRLP4 0 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $435 +line 1176 +;1176: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $434 +JUMPV +LABELV $435 +line 1178 +;1177: } +;1178: if ( strchr( s, ';' ) ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 4 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $437 +line 1179 +;1179: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $434 +JUMPV +LABELV $437 +line 1181 +;1180: } +;1181: return qtrue; +CNSTI4 1 +RETI4 +LABELV $434 +endproc Info_Validate 8 8 +export Info_SetValueForKey +proc Info_SetValueForKey 1068 20 +line 1191 +;1182:} +;1183: +;1184:/* +;1185:================== +;1186:Info_SetValueForKey +;1187: +;1188:Changes or adds a key/value pair +;1189:================== +;1190:*/ +;1191:void Info_SetValueForKey( char *s, const char *key, const char *value ) { +line 1194 +;1192: char newi[MAX_INFO_STRING]; +;1193: +;1194: if ( strlen( s ) >= MAX_INFO_STRING ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 1024 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 1024 +INDIRI4 +CNSTI4 1024 +LTI4 $440 +line 1195 +;1195: Com_Error( ERR_DROP, "Info_SetValueForKey: oversize infostring" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $442 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1196 +;1196: } +LABELV $440 +line 1198 +;1197: +;1198: if (strchr (key, '\\') || strchr (value, '\\')) +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 92 +ARGI4 +ADDRLP4 1028 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 1028 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $445 +ADDRFP4 8 +INDIRP4 +ARGP4 +CNSTI4 92 +ARGI4 +ADDRLP4 1032 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 1032 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $443 +LABELV $445 +line 1199 +;1199: { +line 1200 +;1200: Com_Printf ("Can't use keys or values with a \\\n"); +ADDRGP4 $446 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1201 +;1201: return; +ADDRGP4 $439 +JUMPV +LABELV $443 +line 1204 +;1202: } +;1203: +;1204: if (strchr (key, ';') || strchr (value, ';')) +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 1036 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 1036 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $449 +ADDRFP4 8 +INDIRP4 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 1040 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 1040 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $447 +LABELV $449 +line 1205 +;1205: { +line 1206 +;1206: Com_Printf ("Can't use keys or values with a semicolon\n"); +ADDRGP4 $450 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1207 +;1207: return; +ADDRGP4 $439 +JUMPV +LABELV $447 +line 1210 +;1208: } +;1209: +;1210: if (strchr (key, '\"') || strchr (value, '\"')) +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 34 +ARGI4 +ADDRLP4 1044 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 1044 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $453 +ADDRFP4 8 +INDIRP4 +ARGP4 +CNSTI4 34 +ARGI4 +ADDRLP4 1048 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 1048 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $451 +LABELV $453 +line 1211 +;1211: { +line 1212 +;1212: Com_Printf ("Can't use keys or values with a \"\n"); +ADDRGP4 $454 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1213 +;1213: return; +ADDRGP4 $439 +JUMPV +LABELV $451 +line 1216 +;1214: } +;1215: +;1216: Info_RemoveKey (s, key); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 Info_RemoveKey +CALLV +pop +line 1217 +;1217: if (!value || !strlen(value)) +ADDRLP4 1052 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 1052 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $457 +ADDRLP4 1052 +INDIRP4 +ARGP4 +ADDRLP4 1056 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 1056 +INDIRI4 +CNSTI4 0 +NEI4 $455 +LABELV $457 +line 1218 +;1218: return; +ADDRGP4 $439 +JUMPV +LABELV $455 +line 1220 +;1219: +;1220: Com_sprintf (newi, sizeof(newi), "\\%s\\%s", key, value); +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 $458 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 1222 +;1221: +;1222: if (strlen(newi) + strlen(s) > MAX_INFO_STRING) +ADDRLP4 0 +ARGP4 +ADDRLP4 1060 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 1064 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 1060 +INDIRI4 +ADDRLP4 1064 +INDIRI4 +ADDI4 +CNSTI4 1024 +LEI4 $459 +line 1223 +;1223: { +line 1224 +;1224: Com_Printf ("Info string length exceeded\n"); +ADDRGP4 $461 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1225 +;1225: return; +ADDRGP4 $439 +JUMPV +LABELV $459 +line 1228 +;1226: } +;1227: +;1228: strcat (newi, s); +ADDRLP4 0 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcat +CALLP4 +pop +line 1229 +;1229: strcpy (s, newi); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 1230 +;1230:} +LABELV $439 +endproc Info_SetValueForKey 1068 20 +export Info_SetValueForKey_Big +proc Info_SetValueForKey_Big 8236 20 +line 1239 +;1231: +;1232:/* +;1233:================== +;1234:Info_SetValueForKey_Big +;1235: +;1236:Changes or adds a key/value pair +;1237:================== +;1238:*/ +;1239:void Info_SetValueForKey_Big( char *s, const char *key, const char *value ) { +line 1242 +;1240: char newi[BIG_INFO_STRING]; +;1241: +;1242: if ( strlen( s ) >= BIG_INFO_STRING ) { +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8192 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 8192 +INDIRI4 +CNSTI4 8192 +LTI4 $463 +line 1243 +;1243: Com_Error( ERR_DROP, "Info_SetValueForKey: oversize infostring" ); +CNSTI4 1 +ARGI4 +ADDRGP4 $442 +ARGP4 +ADDRGP4 Com_Error +CALLV +pop +line 1244 +;1244: } +LABELV $463 +line 1246 +;1245: +;1246: if (strchr (key, '\\') || strchr (value, '\\')) +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 92 +ARGI4 +ADDRLP4 8196 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 8196 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $467 +ADDRFP4 8 +INDIRP4 +ARGP4 +CNSTI4 92 +ARGI4 +ADDRLP4 8200 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 8200 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $465 +LABELV $467 +line 1247 +;1247: { +line 1248 +;1248: Com_Printf ("Can't use keys or values with a \\\n"); +ADDRGP4 $446 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1249 +;1249: return; +ADDRGP4 $462 +JUMPV +LABELV $465 +line 1252 +;1250: } +;1251: +;1252: if (strchr (key, ';') || strchr (value, ';')) +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 8204 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 8204 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $470 +ADDRFP4 8 +INDIRP4 +ARGP4 +CNSTI4 59 +ARGI4 +ADDRLP4 8208 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 8208 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $468 +LABELV $470 +line 1253 +;1253: { +line 1254 +;1254: Com_Printf ("Can't use keys or values with a semicolon\n"); +ADDRGP4 $450 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1255 +;1255: return; +ADDRGP4 $462 +JUMPV +LABELV $468 +line 1258 +;1256: } +;1257: +;1258: if (strchr (key, '\"') || strchr (value, '\"')) +ADDRFP4 4 +INDIRP4 +ARGP4 +CNSTI4 34 +ARGI4 +ADDRLP4 8212 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 8212 +INDIRP4 +CVPU4 4 +CNSTU4 0 +NEU4 $473 +ADDRFP4 8 +INDIRP4 +ARGP4 +CNSTI4 34 +ARGI4 +ADDRLP4 8216 +ADDRGP4 strchr +CALLP4 +ASGNP4 +ADDRLP4 8216 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $471 +LABELV $473 +line 1259 +;1259: { +line 1260 +;1260: Com_Printf ("Can't use keys or values with a \"\n"); +ADDRGP4 $454 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1261 +;1261: return; +ADDRGP4 $462 +JUMPV +LABELV $471 +line 1264 +;1262: } +;1263: +;1264: Info_RemoveKey_Big (s, key); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRGP4 Info_RemoveKey_Big +CALLV +pop +line 1265 +;1265: if (!value || !strlen(value)) +ADDRLP4 8220 +ADDRFP4 8 +INDIRP4 +ASGNP4 +ADDRLP4 8220 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $476 +ADDRLP4 8220 +INDIRP4 +ARGP4 +ADDRLP4 8224 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 8224 +INDIRI4 +CNSTI4 0 +NEI4 $474 +LABELV $476 +line 1266 +;1266: return; +ADDRGP4 $462 +JUMPV +LABELV $474 +line 1268 +;1267: +;1268: Com_sprintf (newi, sizeof(newi), "\\%s\\%s", key, value); +ADDRLP4 0 +ARGP4 +CNSTI4 8192 +ARGI4 +ADDRGP4 $458 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRFP4 8 +INDIRP4 +ARGP4 +ADDRGP4 Com_sprintf +CALLV +pop +line 1270 +;1269: +;1270: if (strlen(newi) + strlen(s) > BIG_INFO_STRING) +ADDRLP4 0 +ARGP4 +ADDRLP4 8228 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8232 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 8228 +INDIRI4 +ADDRLP4 8232 +INDIRI4 +ADDI4 +CNSTI4 8192 +LEI4 $477 +line 1271 +;1271: { +line 1272 +;1272: Com_Printf ("BIG Info string length exceeded\n"); +ADDRGP4 $479 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 1273 +;1273: return; +ADDRGP4 $462 +JUMPV +LABELV $477 +line 1276 +;1274: } +;1275: +;1276: strcat (s, newi); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +ARGP4 +ADDRGP4 strcat +CALLP4 +pop +line 1277 +;1277:} +LABELV $462 +endproc Info_SetValueForKey_Big 8236 20 +export Q_irand +proc Q_irand 8 0 +line 1282 +;1278: +;1279: +;1280://rww - convience function.. +;1281:int Q_irand(int value1, int value2) +;1282:{ +line 1285 +;1283: int r; +;1284: +;1285: r = rand()%value2; +ADDRLP4 4 +ADDRGP4 rand +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRI4 +ADDRFP4 4 +INDIRI4 +MODI4 +ASGNI4 +line 1286 +;1286: r += value1; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRFP4 0 +INDIRI4 +ADDI4 +ASGNI4 +line 1288 +;1287: +;1288: return r; +ADDRLP4 0 +INDIRI4 +RETI4 +LABELV $480 +endproc Q_irand 8 0 +bss +align 4 +LABELV com_lines +skip 4 +align 1 +LABELV com_parsename +skip 1024 +align 1 +LABELV com_token +skip 1024 +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_RemoveKey_big +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $479 +char 1 66 +char 1 73 +char 1 71 +char 1 32 +char 1 73 +char 1 110 +char 1 102 +char 1 111 +char 1 32 +char 1 115 +char 1 116 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 108 +char 1 101 +char 1 110 +char 1 103 +char 1 116 +char 1 104 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $461 +char 1 73 +char 1 110 +char 1 102 +char 1 111 +char 1 32 +char 1 115 +char 1 116 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 108 +char 1 101 +char 1 110 +char 1 103 +char 1 116 +char 1 104 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $458 +char 1 92 +char 1 37 +char 1 115 +char 1 92 +char 1 37 +char 1 115 +char 1 0 +align 1 +LABELV $454 +char 1 67 +char 1 97 +char 1 110 +char 1 39 +char 1 116 +char 1 32 +char 1 117 +char 1 115 +char 1 101 +char 1 32 +char 1 107 +char 1 101 +char 1 121 +char 1 115 +char 1 32 +char 1 111 +char 1 114 +char 1 32 +char 1 118 +char 1 97 +char 1 108 +char 1 117 +char 1 101 +char 1 115 +char 1 32 +char 1 119 +char 1 105 +char 1 116 +char 1 104 +char 1 32 +char 1 97 +char 1 32 +char 1 34 +char 1 10 +char 1 0 +align 1 +LABELV $450 +char 1 67 +char 1 97 +char 1 110 +char 1 39 +char 1 116 +char 1 32 +char 1 117 +char 1 115 +char 1 101 +char 1 32 +char 1 107 +char 1 101 +char 1 121 +char 1 115 +char 1 32 +char 1 111 +char 1 114 +char 1 32 +char 1 118 +char 1 97 +char 1 108 +char 1 117 +char 1 101 +char 1 115 +char 1 32 +char 1 119 +char 1 105 +char 1 116 +char 1 104 +char 1 32 +char 1 97 +char 1 32 +char 1 115 +char 1 101 +char 1 109 +char 1 105 +char 1 99 +char 1 111 +char 1 108 +char 1 111 +char 1 110 +char 1 10 +char 1 0 +align 1 +LABELV $446 +char 1 67 +char 1 97 +char 1 110 +char 1 39 +char 1 116 +char 1 32 +char 1 117 +char 1 115 +char 1 101 +char 1 32 +char 1 107 +char 1 101 +char 1 121 +char 1 115 +char 1 32 +char 1 111 +char 1 114 +char 1 32 +char 1 118 +char 1 97 +char 1 108 +char 1 117 +char 1 101 +char 1 115 +char 1 32 +char 1 119 +char 1 105 +char 1 116 +char 1 104 +char 1 32 +char 1 97 +char 1 32 +char 1 92 +char 1 10 +char 1 0 +align 1 +LABELV $442 +char 1 73 +char 1 110 +char 1 102 +char 1 111 +char 1 95 +char 1 83 +char 1 101 +char 1 116 +char 1 86 +char 1 97 +char 1 108 +char 1 117 +char 1 101 +char 1 70 +char 1 111 +char 1 114 +char 1 75 +char 1 101 +char 1 121 +char 1 58 +char 1 32 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 105 +char 1 122 +char 1 101 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 115 +char 1 116 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 0 +align 1 +LABELV $411 +char 1 73 +char 1 110 +char 1 102 +char 1 111 +char 1 95 +char 1 82 +char 1 101 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 75 +char 1 101 +char 1 121 +char 1 95 +char 1 66 +char 1 105 +char 1 103 +char 1 58 +char 1 32 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 105 +char 1 122 +char 1 101 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 115 +char 1 116 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 0 +align 1 +LABELV $385 +char 1 73 +char 1 110 +char 1 102 +char 1 111 +char 1 95 +char 1 82 +char 1 101 +char 1 109 +char 1 111 +char 1 118 +char 1 101 +char 1 75 +char 1 101 +char 1 121 +char 1 58 +char 1 32 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 105 +char 1 122 +char 1 101 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 115 +char 1 116 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 0 +align 1 +LABELV $351 +char 1 73 +char 1 110 +char 1 102 +char 1 111 +char 1 95 +char 1 86 +char 1 97 +char 1 108 +char 1 117 +char 1 101 +char 1 70 +char 1 111 +char 1 114 +char 1 75 +char 1 101 +char 1 121 +char 1 58 +char 1 32 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 115 +char 1 105 +char 1 122 +char 1 101 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 115 +char 1 116 +char 1 114 +char 1 105 +char 1 110 +char 1 103 +char 1 0 +align 1 +LABELV $348 +char 1 0 +align 1 +LABELV $337 +char 1 67 +char 1 111 +char 1 109 +char 1 95 +char 1 115 +char 1 112 +char 1 114 +char 1 105 +char 1 110 +char 1 116 +char 1 102 +char 1 58 +char 1 32 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 102 +char 1 108 +char 1 111 +char 1 119 +char 1 32 +char 1 111 +char 1 102 +char 1 32 +char 1 37 +char 1 105 +char 1 32 +char 1 105 +char 1 110 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 0 +align 1 +LABELV $334 +char 1 67 +char 1 111 +char 1 109 +char 1 95 +char 1 115 +char 1 112 +char 1 114 +char 1 105 +char 1 110 +char 1 116 +char 1 102 +char 1 58 +char 1 32 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 102 +char 1 108 +char 1 111 +char 1 119 +char 1 101 +char 1 100 +char 1 32 +char 1 98 +char 1 105 +char 1 103 +char 1 98 +char 1 117 +char 1 102 +char 1 102 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $313 +char 1 81 +char 1 95 +char 1 115 +char 1 116 +char 1 114 +char 1 99 +char 1 97 +char 1 116 +char 1 58 +char 1 32 +char 1 97 +char 1 108 +char 1 114 +char 1 101 +char 1 97 +char 1 100 +char 1 121 +char 1 32 +char 1 111 +char 1 118 +char 1 101 +char 1 114 +char 1 102 +char 1 108 +char 1 111 +char 1 119 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $263 +char 1 81 +char 1 95 +char 1 115 +char 1 116 +char 1 114 +char 1 110 +char 1 99 +char 1 112 +char 1 121 +char 1 122 +char 1 58 +char 1 32 +char 1 100 +char 1 101 +char 1 115 +char 1 116 +char 1 115 +char 1 105 +char 1 122 +char 1 101 +char 1 32 +char 1 60 +char 1 32 +char 1 49 +char 1 0 +align 1 +LABELV $260 +char 1 81 +char 1 95 +char 1 115 +char 1 116 +char 1 114 +char 1 110 +char 1 99 +char 1 112 +char 1 121 +char 1 122 +char 1 58 +char 1 32 +char 1 78 +char 1 85 +char 1 76 +char 1 76 +char 1 32 +char 1 115 +char 1 114 +char 1 99 +char 1 0 +align 1 +LABELV $257 +char 1 81 +char 1 95 +char 1 115 +char 1 116 +char 1 114 +char 1 110 +char 1 99 +char 1 112 +char 1 121 +char 1 122 +char 1 58 +char 1 32 +char 1 78 +char 1 85 +char 1 76 +char 1 76 +char 1 32 +char 1 100 +char 1 101 +char 1 115 +char 1 116 +char 1 0 +align 1 +LABELV $221 +char 1 41 +char 1 0 +align 1 +LABELV $216 +char 1 40 +char 1 0 +align 1 +LABELV $197 +char 1 77 +char 1 97 +char 1 116 +char 1 99 +char 1 104 +char 1 84 +char 1 111 +char 1 107 +char 1 101 +char 1 110 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 32 +char 1 33 +char 1 61 +char 1 32 +char 1 37 +char 1 115 +char 1 0 +align 1 +LABELV $103 +char 1 87 +char 1 65 +char 1 82 +char 1 78 +char 1 73 +char 1 78 +char 1 71 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 44 +char 1 32 +char 1 108 +char 1 105 +char 1 110 +char 1 101 +char 1 32 +char 1 37 +char 1 100 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $99 +char 1 69 +char 1 82 +char 1 82 +char 1 79 +char 1 82 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 44 +char 1 32 +char 1 108 +char 1 105 +char 1 110 +char 1 101 +char 1 32 +char 1 37 +char 1 100 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $93 +char 1 37 +char 1 115 +char 1 0 +align 1 +LABELV $73 +char 1 37 +char 1 115 +char 1 37 +char 1 115 +char 1 0 diff --git a/CODE-mp/ui/vm/ui.map b/CODE-mp/ui/vm/ui.map new file mode 100644 index 0000000..08c7fa5 --- /dev/null +++ b/CODE-mp/ui/vm/ui.map @@ -0,0 +1,1011 @@ +0 ffffff35 trap_G2API_SetBoneAngles +0 ffffff36 trap_SP_GetStringTextString +0 ffffff37 trap_SP_Register +0 ffffff8c matrixmultiply +0 ffffff8d asin +0 ffffff8e acos +0 ffffff91 ceil +0 ffffff92 perpendicularvector +0 ffffff93 anglevectors +0 ffffff94 floor +0 ffffff95 sqrt +0 ffffff96 atan2 +0 ffffff97 cos +0 ffffff98 sin +0 ffffff99 strncpy +0 ffffff9a memcpy +0 ffffff9b memset +0 ffffffa3 trap_LAN_CompareServers +0 ffffffa4 trap_LAN_ServerIsVisible +0 ffffffa5 trap_LAN_GetServerPing +0 ffffffa6 trap_LAN_ServerStatus +0 ffffffa7 trap_R_RemapShader +0 ffffffa8 trap_CIN_SetExtents +0 ffffffa9 trap_CIN_DrawCinematic +0 ffffffaa trap_CIN_RunCinematic +0 ffffffab trap_CIN_StopCinematic +0 ffffffac trap_CIN_PlayCinematic +0 ffffffad trap_LAN_RemoveServer +0 ffffffae trap_LAN_AddServer +0 ffffffaf trap_LAN_SaveCachedServers +0 ffffffb0 trap_LAN_LoadCachedServers +0 ffffffb1 trap_LAN_ResetPings +0 ffffffb2 trap_LAN_UpdateVisiblePings +0 ffffffb3 trap_LAN_MarkServerVisible +0 ffffffb4 trap_LAN_GetServerInfo +0 ffffffb5 trap_LAN_GetServerAddressString +0 ffffffb6 trap_LAN_GetServerCount +0 ffffffb7 trap_RealTime +0 ffffffb8 trap_S_StartBackgroundTrack +0 ffffffb9 trap_S_StopBackgroundTrack +0 ffffffba trap_PC_RemoveAllGlobalDefines +0 ffffffbb trap_PC_LoadGlobalDefines +0 ffffffbc trap_PC_SourceFileAndLine +0 ffffffbd trap_PC_ReadToken +0 ffffffbe trap_PC_FreeSource +0 ffffffbf trap_PC_LoadSource +0 ffffffc0 trap_PC_AddGlobalDefine +0 ffffffc1 trap_R_ModelBounds +0 ffffffc2 trap_AnyLanguage_ReadCharFromString +0 ffffffc3 trap_R_Font_DrawString +0 ffffffc4 trap_R_Font_HeightPixels +0 ffffffc5 trap_R_Font_StrLenChars +0 ffffffc6 trap_R_Font_StrLenPixels +0 ffffffc7 trap_R_RegisterFont +0 ffffffc8 trap_VerifyCDKey +0 ffffffc9 trap_SetCDKey +0 ffffffca trap_GetCDKey +0 ffffffcb trap_MemoryRemaining +0 ffffffcc trap_Cvar_Update +0 ffffffcd trap_Cvar_Register +0 ffffffce trap_LAN_GetPingInfo +0 ffffffcf trap_LAN_GetPing +0 ffffffd0 trap_LAN_ClearPing +0 ffffffd1 trap_LAN_GetPingQueueCount +0 ffffffd2 trap_GetConfigString +0 ffffffd3 trap_GetClientState +0 ffffffd4 trap_GetGlconfig +0 ffffffd5 trap_GetClipboardData +0 ffffffd6 trap_Key_SetCatcher +0 ffffffd7 trap_Key_GetCatcher +0 ffffffd8 trap_Key_ClearStates +0 ffffffd9 trap_Key_SetOverstrikeMode +0 ffffffda trap_Key_GetOverstrikeMode +0 ffffffdb trap_Key_IsDown +0 ffffffdc trap_Key_SetBinding +0 ffffffdd trap_Key_GetBindingBuf +0 ffffffde trap_Key_KeynumToStringBuf +0 ffffffdf trap_S_StartLocalSound +0 ffffffe0 trap_S_RegisterSound +0 ffffffe2 trap_CM_LerpTag +0 ffffffe3 trap_UpdateScreen +0 ffffffe4 trap_R_DrawStretchPic +0 ffffffe5 trap_R_SetColor +0 ffffffe6 trap_R_RenderScene +0 ffffffe7 trap_R_AddLightToScene +0 ffffffe8 trap_R_AddPolyToScene +0 ffffffe9 trap_R_AddRefEntityToScene +0 ffffffea trap_R_ClearScene +0 ffffffeb trap_R_RegisterShaderNoMip +0 ffffffec trap_R_RegisterSkin +0 ffffffed trap_R_RegisterModel +0 ffffffee trap_FS_GetFileList +0 ffffffef trap_FS_FCloseFile +0 fffffff0 trap_FS_Write +0 fffffff1 trap_FS_Read +0 fffffff2 trap_FS_FOpenFile +0 fffffff3 trap_Cmd_ExecuteText +0 fffffff4 trap_Argv +0 fffffff5 trap_Argc +0 fffffff6 trap_Cvar_InfoStringBuffer +0 fffffff7 trap_Cvar_Create +0 fffffff8 trap_Cvar_Reset +0 fffffff9 trap_Cvar_SetValue +0 fffffffa trap_Cvar_VariableStringBuffer +0 fffffffb trap_Cvar_VariableValue +0 fffffffc trap_Cvar_Set +0 fffffffd trap_Milliseconds +0 fffffffe trap_Print +0 ffffffff trap_Error +0 0 vmMain +0 7f AssetCache +0 512 UI_GetStripEdString +0 52d _UI_Refresh +0 671 _UI_Shutdown +0 677 GetMenuBuffer +0 6dd Asset_Parse +0 9c1 UI_Report +0 9c7 UI_ParseMenu +0 a35 Load_Menu +0 a7e UI_LoadMenus +0 b1e UI_Load +0 b84 UI_DrawHandicap +0 bce UI_DrawClanName +0 bfb UI_SetCapFragLimits +0 c4e UI_DrawGameType +0 c7a UI_DrawNetGameType +0 cbd UI_DrawAutoSwitch +0 d25 UI_DrawJoinGameType +0 d61 UI_TeamIndexFromName +0 d9c UI_DrawClanLogo +0 e49 UI_DrawClanCinematic +0 f5d UI_DrawPreviewCinematic +0 fc7 UI_DrawSkill +0 1013 UI_DrawGenericNum +0 1057 UI_DrawForceMastery +0 10a2 UI_DrawSkinColor +0 1107 UI_DrawForceSide +0 128b UI_DrawTeamName +0 12f6 UI_DrawTeamMember +0 13c0 UI_DrawEffects +0 13e8 UI_DrawMapPreview +0 157 _UI_DrawSides +0 1ad _UI_DrawTopBottom +0 203 _UI_DrawRect +0 235 MenuFontToHandle +0 25c Text_Width +0 27a Text_Height +0 295 Text_Paint +0 305 Text_PaintWithCursor +0 3dc Text_Paint_Limit +0 4c8 UI_ShowPostGame +0 4e9 UI_DrawCenteredPic +0 1499 UI_DrawMapTimeToBeat +0 14fe UI_DrawMapCinematic +0 15df UpdateForceStatus +0 1786 UI_DrawNetSource +0 17d2 UI_DrawNetMapPreview +0 1821 UI_DrawNetMapCinematic +0 1879 UI_DrawNetFilter +0 18c5 UI_DrawTier +0 1911 UI_DrawTierMap +0 198f UI_EnglishMapName +0 19c1 UI_DrawTierMapName +0 1a26 UI_DrawTierGameType +0 1a89 UI_AIFromName +0 1abb UI_NextOpponent +0 1b0e UI_PriorOpponent +0 1b65 UI_DrawPlayerLogo +0 1c09 UI_DrawPlayerLogoMetal +0 1cad UI_DrawPlayerLogoName +0 1d51 UI_DrawOpponentLogo +0 1df5 UI_DrawOpponentLogoMetal +0 1e99 UI_DrawOpponentLogoName +0 1f3d UI_DrawAllMapsSelection +0 1f84 UI_DrawOpponentName +0 1fb1 UI_OwnerDrawWidth +0 228b UI_DrawBotName +0 22d0 UI_DrawBotSkill +0 230e UI_DrawRedBlue +0 2341 UI_DrawCrosshair +0 237f UI_BuildPlayerList +0 24fd UI_DrawSelectedPlayer +0 2538 UI_DrawServerRefreshDate +0 260b UI_DrawServerMOTD +0 2758 UI_DrawKeyBindStatus +0 278f UI_DrawGLInfo +0 2944 UI_Version +0 2984 UI_OwnerDraw +0 2dda UI_OwnerDrawVisible +0 2f65 UI_Handicap_HandleKey +0 2fcb UI_Effects_HandleKey +0 3038 UI_ClanName_HandleKey +0 30c2 UI_GameType_HandleKey +0 3191 UI_NetGameType_HandleKey +0 321c UI_AutoSwitch_HandleKey +0 3277 UI_JoinGameType_HandleKey +0 32da UI_Skill_HandleKey +0 3337 UI_TeamName_HandleKey +0 33b2 UI_TeamMember_HandleKey +0 3468 UI_NetSource_HandleKey +0 34d4 UI_NetFilter_HandleKey +0 3526 UI_OpponentName_HandleKey +0 354f UI_BotName_HandleKey +0 35a2 UI_BotSkill_HandleKey +0 35ef UI_RedBlue_HandleKey +0 3617 UI_Crosshair_HandleKey +0 3671 UI_SelectedPlayer_HandleKey +0 36ef UI_OwnerDrawHandleKey +0 3906 UI_GetValue +0 390b UI_ServersQsortCompare +0 3926 UI_ServersSort +0 3944 UI_LoadMods +0 39c5 UI_LoadMovies +0 3a3b UI_LoadDemos +0 3ae5 UI_SetNextMap +0 3b1d UI_StartSkirmish +0 3f8c UI_Update +0 4237 UI_DeferMenuScript +0 42bf UI_UpdateVideoSetup +0 43a2 UI_GetVideoSetup +0 4539 UI_RunMenuScript +0 5174 UI_GetTeamColor +0 5177 UI_MapCountByGameType +0 51fd UI_hasSkinForBase +0 524e UI_HeadCountByTeam +0 53ae UI_HeadCountByColor +0 5404 UI_InsertServerIntoDisplayList +0 544b UI_RemoveServerFromDisplayList +0 5496 UI_BinaryServerInsertion +0 5512 UI_BuildServerDisplayList +0 56de UI_SortServerStatusInfo +0 57df UI_GetServerStatusInfo +0 5b5e stristr +0 5bc0 UI_BuildFindPlayerList +0 5e3f UI_BuildServerStatus +0 5ea0 UI_FeederCount +0 5f32 UI_SelectedMap +0 5f71 UI_SelectedHead +0 5fb0 UI_SelectedTeamHead +0 6018 UI_GetIndexFromSelection +0 6049 UI_UpdatePendingPings +0 605b UI_FeederItemText +0 635c UI_FeederItemImage +0 6504 UI_FeederSelection +0 6804 GameType_Parse +0 68ff MapList_Parse +0 6a42 UI_ParseGameInfo +0 6ad8 UI_Pause +0 6b03 UI_PlayCinematic +0 6b22 UI_StopCinematic +0 6baf UI_DrawCinematic +0 6bce UI_RunCinematicFrame +0 6bd7 UI_LoadForceConfig_List +0 6ca7 UI_BuildQ3Model_List +0 6e6f _UI_Init +0 7050 _UI_KeyEvent +0 70a0 _UI_MouseEvent +0 70ee UI_LoadNonIngame +0 7113 _UI_SetActiveMenu +0 7223 _UI_IsFullscreen +0 722d UI_ReadableSize +0 72e2 UI_PrintTime +0 7343 Text_PaintCenter +0 7378 UI_DisplayDownloadInfo +0 7597 UI_DrawConnectScreen +0 7744 UI_RegisterCvars +0 7779 UI_UpdateCvars +0 779c UI_StopServerRefresh +0 77da UI_DoServerRefresh +0 783b UI_StartServerRefresh +0 790c Com_Error +0 792e Com_Printf +0 7950 UI_ClampCvar +0 796a UI_StartDemoLoop +0 7974 UI_Argv +0 7983 UI_Cvar_VariableString +0 7992 UI_SetBestScores +0 7c21 UI_LoadBestScores +0 7ca5 UI_ClearScores +0 7d2a UI_Cache_f +0 7d5b UI_CalcPostGameStats +0 7fda UI_ConsoleCommand +0 80e8 UI_Shutdown +0 80eb UI_DrawNamedPic +0 811d UI_DrawHandlePic +0 816c UI_FillRect +0 819b UI_DrawSides +0 81e8 UI_DrawTopBottom +0 8235 UI_DrawRect +0 8261 UI_SetColor +0 826a UI_UpdateScreen +0 8270 UI_DrawTextBox +0 82d3 UI_CursorInRect +0 82fe UI_InitForceShaders +0 83f1 UI_DrawForceStars +0 8485 UI_UpdateClientForcePowers +0 8501 UI_TranslateFCFIndex +0 8516 UI_SaveForceTemplate +0 864b UpdateForceUsed +0 87fb UI_ReadLegalForce +0 8a7a UI_UpdateForcePowers +0 8c64 UI_SkinColor_HandleKey +0 8cbb UI_ForceSide_HandleKey +0 8d80 UI_ForceMaxRank_HandleKey +0 8de6 UI_ForcePowerRank_HandleKey +0 8f23 UI_ForceConfigHandle +0 926f UI_Alloc +0 92a9 UI_InitMemory +0 92b2 UI_OutOfMemory +0 92b8 hashForString +0 92f8 String_Alloc +0 93d1 String_Report +0 941a String_Init +0 945e PC_SourceWarning +0 948e PC_SourceError +0 94be LerpColor +0 9519 Float_Parse +0 9545 PC_Float_Parse +0 959a Color_Parse +0 95c7 PC_Color_Parse +0 95f4 Int_Parse +0 9620 PC_Int_Parse +0 9678 Rect_Parse +0 96bf PC_Rect_Parse +0 9706 String_Parse +0 9732 PC_String_Parse +0 97a7 PC_Script_Parse +0 9829 Init_Display +0 9830 GradientBar_Paint +0 9876 Window_Init +0 98b2 Fade +0 9923 Window_Paint +0 9c6d Item_SetScreenCoords +0 9d01 Item_UpdatePosition +0 9d54 Menu_UpdatePosition +0 9dab Menu_PostParse +0 9dd7 Menu_ClearFocus +0 9e5a IsVisible +0 9e7d Rect_ContainsPoint +0 9ec2 Menu_ItemsMatchingGroup +0 9f1e Menu_GetMatchingItemByNumber +0 9f8b Script_SetColor +0 a025 Script_SetAsset +0 a03e Script_SetBackground +0 a060 Menu_FindItemByName +0 a0af Script_SetTeamColor +0 a0e4 Script_SetItemColor +0 a1bd Script_SetItemRect +0 a23b Menu_ShowItemByName +0 a2ad Menu_FadeItemByName +0 a326 Menus_FindByName +0 a357 Menus_ShowByName +0 a36f Menus_OpenByName +0 a378 Menu_RunCloseScript +0 a3a7 Menus_CloseByName +0 a407 Menus_CloseAll +0 a43d Script_Show +0 a45d Script_Hide +0 a47d Script_FadeIn +0 a49d Script_FadeOut +0 a4bd Script_Open +0 a4d5 Script_Close +0 a4ff Menu_TransitionItemByName +0 a5ea Script_Defer +0 a611 Script_RunDeferred +0 a62b Script_Transition +0 a68d Menu_OrbitItemByName +0 a6fa Script_Orbit +0 a768 Script_SetFocus +0 a7f3 Script_SetPlayerModel +0 a811 Script_SetPlayerHead +0 a82f Script_SetCvar +0 a85b Script_SetCvarToCvar +0 a894 Script_Exec +0 a8bb Script_Play +0 a8e4 Script_playLooped +0 a910 Item_RunScript +0 a9ad Item_EnableShowViaCvar +0 aa86 Item_SetFocus +0 abf2 Item_TextScroll_MaxScroll +0 ac21 Item_TextScroll_ThumbPosition +0 ac6b Item_TextScroll_ThumbDrawPosition +0 acd4 Item_TextScroll_OverLB +0 adbc Item_TextScroll_MouseEnter +0 aded Item_TextScroll_HandleKey +0 af83 Item_ListBox_MaxScroll +0 afdd Item_ListBox_ThumbPosition +0 b064 Item_ListBox_ThumbDrawPosition +0 b129 Item_Slider_ThumbPosition +0 b1c1 Item_Slider_OverSlider +0 b1f6 Item_ListBox_OverLB +0 b3c1 Item_ListBox_MouseEnter +0 b4f6 Item_MouseEnter +0 b618 Item_MouseLeave +0 b664 Menu_HitTest +0 b6a2 Item_SetMouseOver +0 b6cb Item_OwnerDraw_HandleKey +0 b705 Item_ListBox_HandleKey +0 bc22 Item_YesNo_HandleKey +0 bca8 Item_Multi_CountSettings +0 bcc0 Item_Multi_FindCvarByValue +0 bd45 Item_Multi_Setting +0 bdd6 Item_Multi_HandleKey +0 bec9 Item_TextField_HandleKey +0 c24d Scroll_TextScroll_AutoFunc +0 c2aa Scroll_TextScroll_ThumbFunc +0 c399 Scroll_ListBox_AutoFunc +0 c3f6 Scroll_ListBox_ThumbFunc +0 c57d Scroll_Slider_ThumbFunc +0 c617 Item_StartCapture +0 c78c Item_StopCapture +0 c78f Item_Slider_HandleKey +0 c88b Item_HandleKey +0 c99b Item_Action +0 c9b2 Menu_SetPrevCursorItem +0 ca88 Menu_SetNextCursorItem +0 cb55 Window_CloseCinematic +0 cb7d Menu_CloseCinematics +0 cbd1 Display_CloseCinematics +0 cbee Menus_Activate +0 cc45 Display_VisibleMenuCount +0 cc6f Menus_HandleOOBClick +0 cd32 Item_CorrectedTextRect +0 cd5a Menu_HandleKey +0 d07b ToWindowCoords +0 d0c3 Rect_ToWindowCoords +0 d0d8 Item_SetTextExtents +0 d27c Item_TextColor +0 d3c2 Item_Text_AutoWrapped_Paint +0 d572 Item_Text_Wrapped_Paint +0 d67f Item_Text_Paint +0 d770 Item_TextField_Paint +0 d8e6 Item_YesNo_Paint +0 da1a Item_Multi_Paint +0 db08 Controls_GetKeyAssignment +0 db66 Controls_GetConfig +0 db98 Controls_SetConfig +0 dbef Controls_SetDefaults +0 dc22 BindingIDFromName +0 dc4f BindingFromName +0 dce0 Item_Slider_Paint +0 dde3 Item_Bind_Paint +0 dfbc Display_KeyBindPending +0 dfc2 Item_Bind_HandleKey +0 e1cd Item_Model_Paint +0 e2fd Item_Image_Paint +0 e344 Item_TextScroll_Paint +0 e4d6 Item_ListBox_Paint +0 ea8d Item_OwnerDraw_Paint +0 ed53 Item_Paint +0 f33d Menu_Init +0 f374 Menu_GetFocusedItem +0 f3b3 Menu_GetFocused +0 f3ee Menu_ScrollFeeder +0 f441 Menu_SetFeederSelection +0 f4d6 Menus_AnyFullScreenVisible +0 f50a Menus_ActivateByName +0 f599 Item_Init +0 f5b2 Menu_HandleMouseMove +0 f70a Menu_Paint +0 f865 Item_ValidateTypeData +0 f929 KeywordHash_Key +0 f98d KeywordHash_Add +0 f9b3 KeywordHash_Find +0 f9ee ItemParse_name +0 fa07 ItemParse_focusSound +0 fa2f ItemParse_text +0 fa48 ItemParse_descText +0 fa61 ItemParse_text2 +0 fa7a ItemParse_text2alignx +0 fa93 ItemParse_text2aligny +0 faac ItemParse_group +0 fac5 ItemParse_asset_model +0 fb05 ItemParse_asset_shader +0 fb2b ItemParse_model_origin +0 fb71 ItemParse_model_fovx +0 fb97 ItemParse_model_fovy +0 fbbd ItemParse_model_rotation +0 fbe3 ItemParse_model_angle +0 fc07 ItemParse_rect +0 fc20 ItemParse_flag +0 fc8b ItemParse_style +0 fca9 ItemParse_decoration +0 fcbc ItemParse_notselectable +0 fcdf ItemParse_wrapped +0 fcf2 ItemParse_autowrapped +0 fd05 ItemParse_horizontalscroll +0 fd18 ItemParse_type +0 fd37 ItemParse_elementwidth +0 fd5d ItemParse_elementheight +0 fd83 ItemParse_feeder +0 fd9c ItemParse_elementtype +0 fdcd ItemParse_columns +0 fe70 ItemParse_border +0 fe89 ItemParse_bordersize +0 fea2 ItemParse_visible +0 feca ItemParse_ownerdraw +0 fee9 ItemParse_align +0 ff02 ItemParse_textalign +0 ff20 ItemParse_textalignx +0 ff39 ItemParse_textaligny +0 ff52 ItemParse_textscale +0 ff6b ItemParse_textstyle +0 ff84 ItemParse_backcolor +0 ffb3 ItemParse_forecolor +0 fff0 ItemParse_bordercolor +0 1001f ItemParse_outlinecolor +0 10038 ItemParse_background +0 1005e ItemParse_cinematic +0 10077 ItemParse_doubleClick +0 100a8 ItemParse_onFocus +0 100c1 ItemParse_leaveFocus +0 100da ItemParse_mouseEnter +0 100f3 ItemParse_mouseExit +0 1010c ItemParse_mouseEnterText +0 10125 ItemParse_mouseExitText +0 1013e ItemParse_action +0 10157 ItemParse_special +0 10170 ItemParse_cvarTest +0 10189 ItemParse_cvar +0 101ea ItemParse_font +0 10209 ItemParse_maxChars +0 1023e ItemParse_maxPaintChars +0 10273 ItemParse_maxLineChars +0 102a8 ItemParse_lineHeight +0 102de ItemParse_cvarFloat +0 1033d ItemParse_cvarStrList +0 103ff ItemParse_cvarFloatList +0 104bd ItemParse_addColorRange +0 1051f ItemParse_ownerdrawFlag +0 10544 ItemParse_enableCvar +0 10563 ItemParse_disableCvar +0 10582 ItemParse_showCvar +0 105a1 ItemParse_hideCvar +0 105c0 ItemParse_Appearance_slot +0 105d9 Item_SetupKeywordHash +0 10605 Item_Parse +0 10684 Item_TextScroll_BuildLines +0 107c3 Item_InitControls +0 10800 MenuParse_font +0 10843 MenuParse_name +0 10870 MenuParse_fullscreen +0 1088d MenuParse_rect +0 108a8 MenuParse_style +0 108ca MenuParse_visible +0 108f6 MenuParse_onOpen +0 10913 MenuParse_onClose +0 10930 MenuParse_onESC +0 1094d MenuParse_border +0 1096a MenuParse_borderSize +0 10987 MenuParse_backcolor +0 109ba MenuParse_descAlignment +0 109dc MenuParse_descX +0 109f9 MenuParse_descY +0 10a16 MenuParse_descScale +0 10a33 MenuParse_descColor +0 10a66 MenuParse_forecolor +0 10aa7 MenuParse_bordercolor +0 10ada MenuParse_focuscolor +0 10b0d MenuParse_disablecolor +0 10b40 MenuParse_outlinecolor +0 10b5d MenuParse_background +0 10b87 MenuParse_cinematic +0 10ba4 MenuParse_ownerdrawFlag +0 10bcd MenuParse_ownerdraw +0 10bea MenuParse_popup +0 10c01 MenuParse_outOfBounds +0 10c18 MenuParse_soundLoop +0 10c35 MenuParse_fadeClamp +0 10c52 MenuParse_fadeAmount +0 10c6f MenuParse_fadeCycle +0 10c8c MenuParse_itemDef +0 10d11 MenuParse_appearanceIncrement +0 10d2e Menu_SetupKeywordHash +0 10d5a Menu_Parse +0 10dd9 Menu_New +0 10e0d Menu_Count +0 10e13 Menu_PaintAll +0 10eaa Menu_Reset +0 10eb0 Display_GetContext +0 10eb6 Display_CaptureItem +0 10eeb Display_MouseMove +0 10f63 Display_CursorType +0 10faf Display_HandleKey +0 10fdc Window_CacheContents +0 11015 Item_CacheContents +0 11022 Menu_CacheContents +0 1106e Display_CacheAll +0 1108b Menu_OverActiveItem +0 1113e UI_ParseInfos +0 1122c UI_LoadArenasFromFile +0 112ac UI_LoadArenas +0 114ca UI_LoadBotsFromFile +0 1157b UI_LoadBots +0 115fc UI_GetBotInfoByNumber +0 11627 UI_GetBotInfoByName +0 11666 UI_GetNumBots +0 1166c UI_GetBotNameByNumber +0 1168e BG_LegalizedForcePowers +0 11a5b vectoyaw +0 11ab5 BG_HasYsalamiri +0 11ae4 BG_CanUseFPNow +0 11b4b BG_FindItemForPowerup +0 11b87 BG_FindItemForHoldable +0 11bc1 BG_FindItemForWeapon +0 11bf4 BG_FindItem +0 11c1d BG_PlayerTouchesItem +0 11c7d BG_ProperForceIndex +0 11ca0 BG_CycleForce +0 11d78 BG_GetItemIndexByTag +0 11da8 BG_CycleInven +0 11e14 BG_CanItemBeGrabbed +0 12011 BG_EvaluateTrajectory +0 121df BG_EvaluateTrajectoryDelta +0 122d9 BG_AddPredictableEventToPlayerstate +0 12314 BG_TouchJumpPad +0 12378 BG_PlayerStateToEntityState +0 12683 BG_PlayerStateToEntityStateExtraPolate +0 1299b BG_SwingAngles +0 12aa0 BG_AddPainTwitch +0 12ae1 BG_G2PlayerAngles +0 12c7e BG_Alloc +0 12cbe BG_AllocUnaligned +0 12cf1 BG_TempAlloc +0 12d29 BG_TempFree +0 12d56 BG_StringAlloc +0 12d79 BG_OutOfMemory +0 12d8b swapfunc +0 12e12 med3 +0 12e95 qsort +0 1324e strlen +0 13269 strcat +0 132ac strcpy +0 132e1 strcmp +0 1331a strchr +0 13339 strstr +0 1337f tolower +0 13397 toupper +0 133af memmove +0 133f6 tan +0 1340d srand +0 13414 rand +0 13429 atof +0 134ee _atof +0 135b9 atoi +0 13631 _atoi +0 136b3 abs +0 136c8 fabs +0 136dd AddInt +0 137b8 AddFloat +0 138c6 AddString +0 1395d vsprintf +0 13af5 sscanf +0 13b60 Q_rand +0 13b75 Q_random +0 13b87 Q_crandom +0 13b98 VectorCompare +0 13bd0 VectorLength +0 13c03 VectorLengthSquared +0 13c2f Distance +0 13c70 DistanceSquared +0 13cbe VectorNormalizeFast +0 13d1d VectorInverse +0 13d45 CrossProduct +0 13dbe ClampChar +0 13dd5 ClampShort +0 13dec DirToByte +0 13e47 ByteToDir +0 13e65 ColorBytes3 +0 13ed4 ColorBytes4 +0 13f66 NormalizeColor +0 13fdc PlaneFromPoints +0 1409a RotatePointAroundVector +0 141a5 RotateAroundDirection +0 141e9 vectoangles +0 142a5 AnglesToAxis +0 142da AxisClear +0 14311 AxisCopy +0 14335 ProjectPointOnPlane +0 143f0 MakeNormalVectors +0 1449b VectorRotate +0 14538 Q_rsqrt +0 1456f Q_fabs +0 1457f LerpAngle +0 145b0 AngleSubtract +0 145d5 AnglesSubtract +0 14623 AngleMod +0 14635 AngleNormalize360 +0 14643 AngleNormalize180 +0 1465e AngleDelta +0 1466e SetPlaneSignbits +0 1469b BoxOnPlaneSide +0 14a5c RadiusFromBounds +0 14aaf ClearBounds +0 14ae6 AddPointToBounds +0 14b7f VectorNormalize +0 14bef VectorNormalize2 +0 14c7d _VectorMA +0 14cbf _DotProduct +0 14cf4 _VectorSubtract +0 14d2d _VectorAdd +0 14d66 _VectorCopy +0 14d8d _VectorScale +0 14dbd Vector4Scale +0 14dff Q_log2 +0 14e1e MatrixMultiply +0 14ff3 AngleVectors +0 150eb PerpendicularVector +0 15157 Rand_Init +0 1515e flrand +0 15199 irand +0 151cb powf +0 151ee GetIDForString +0 15233 GetStringForID +0 1526f Com_Clamp +0 15289 COM_SkipPath +0 152ad COM_StripExtension +0 152e3 COM_DefaultExtension +0 1532b ShortSwap +0 1534b ShortNoSwap +0 15356 LongSwap +0 15389 LongNoSwap +0 1538f Long64Swap +0 153cc Long64NoSwap +0 153d4 FloatSwap +0 153ea FloatNoSwap +0 153f1 COM_BeginParseSession +0 15403 COM_GetCurrentParseLine +0 15409 COM_Parse +0 15418 COM_ParseError +0 15438 COM_ParseWarning +0 15458 SkipWhitespace +0 1548f COM_Compress +0 155e2 COM_ParseExt +0 1572e COM_MatchToken +0 15757 SkipBracedSection +0 15795 SkipRestOfLine +0 157cd Parse1DMatrix +0 1580c Parse2DMatrix +0 15847 Parse3DMatrix +0 1588c Q_isprint +0 158a1 Q_islower +0 158b6 Q_isupper +0 158cb Q_isalpha +0 158ec Q_strrchr +0 15920 Q_strncpyz +0 1595b Q_stricmpn +0 159e6 Q_strncmp +0 15a38 Q_stricmp +0 15a60 Q_strlwr +0 15a86 Q_strupr +0 15aac Q_strcat +0 15ad8 Q_PrintStrlen +0 15b28 Q_CleanStr +0 15b8e Com_sprintf +0 15bcd va +0 15bfa Info_ValueForKey +0 15cda Info_NextPair +0 15d78 Info_RemoveKey +0 15e48 Info_RemoveKey_Big +0 15f18 Info_Validate +0 15f3f Info_SetValueForKey +0 1600f Info_SetValueForKey_Big +0 160d7 Q_irand +1 4 MonthAbbrev +1 34 skillLevels +1 48 numSkillLevels +1 4c netSources +1 58 numNetSources +1 5c serverFilters +1 6c teamArenaGameTypes +1 94 numTeamArenaGameTypes +1 98 numServerFilters +1 9c netnames +1 ac gamecodetoui +1 c8 uitogamecode +1 e4 uiSkinColor +1 130 frameCount +1 134 defaultMenu +1 138 handicapValues +1 18c updateModel +1 190 q3Model +1 5c8 gUISelectedMap +1 5d0 serverStatusCvars +1 6ac cvarTable +1 e0c cvarTableSize +1 e10 newUI +1 e14 uiForceSide +1 e18 uiForceRank +1 e1c uiMaxRank +1 e20 uiMaxPoints +1 e24 uiForceUsed +1 e28 uiForceAvailable +1 e2c gTouchedForce +1 e30 uiForcePowersRank +1 e78 uiForcePowerDarkLight +1 ec0 gCustRank +1 ec4 gCustSide +1 ec8 gCustPowersRank +1 f10 captureFunc +1 f14 captureData +1 f18 itemCapture +1 f1c DC +1 f20 g_waitingForKey +1 f24 g_editingField +1 f28 g_bindItem +1 f2c g_editItem +1 f30 menuCount +1 f34 openMenuCount +1 f38 debugMode +1 f3c lastListBoxClickTime +1 f40 itemFlags +1 f50 styles +1 f6c alignment +1 f7c types +1 fbc strPoolIndex +1 fc0 strHandleCount +1 fcc FPMessageTime +1 fd0 ui_deferredScriptItem +1 fd4 commandList +1 1094 scriptCommandCount +1 115c g_bindings +1 1a2c itemParseKeywords +1 1d8c menuParseKeywords +1 1f40 forceMasteryLevels +1 1f60 forceMasteryPoints +1 1f80 bgForcePowerCost +1 20a0 forcePowerSorted +1 20e8 forcePowerDarkLight +1 2130 WeaponReadyAnim +1 2170 WeaponAttackAnim +1 21b0 bg_itemlist +1 2a6c bg_numItems +1 2ac4 eventnames +1 2c9c bg_poolSize +1 2ca0 bg_poolTail +1 2ca4 WP_MuzzlePoint +1 2d64 weaponData +1 30e4 ammoData +1 310c randSeed +1 3180 vec3_origin +1 318c axisDefault +1 31b0 colorBlack +1 31c0 colorRed +1 31d0 colorGreen +1 31e0 colorBlue +1 31f0 colorYellow +1 3200 colorMagenta +1 3210 colorCyan +1 3220 colorWhite +1 3230 colorLtGrey +1 3240 colorMdGrey +1 3250 colorDkGrey +1 3260 colorLtBlue +1 3270 colorDkBlue +1 3280 g_color_table +1 3300 bytedirs +1 3ab8 holdrand +1 19b4 g_bindCount +2 0 holdSPString +2 4af664 _stackStart +2 4bf664 _stackEnd +3 8c40 k_language +3 8d50 s_language +3 8e60 ui_realWarmUp +3 8f70 ui_realCaptureLimit +3 9080 ui_recordSPDemo +3 9190 ui_hudFiles +3 92a0 ui_Q3Model +3 93b0 ui_findPlayer +3 94c0 ui_scoreCaptures +3 95d0 ui_teamName +3 96e0 ui_blueteam8 +3 97f0 ui_blueteam7 +3 9900 ui_blueteam6 +3 9a10 ui_blueteam5 +3 9b20 ui_blueteam4 +3 9c30 ui_blueteam3 +3 9d40 ui_blueteam2 +3 9e50 ui_blueteam1 +3 9f60 ui_blueteam +3 a070 ui_redteam8 +3 a180 ui_redteam7 +3 a290 ui_redteam6 +3 a3a0 ui_redteam5 +3 a4b0 ui_redteam4 +3 a5c0 ui_redteam3 +3 a6d0 ui_redteam2 +3 a7e0 ui_redteam1 +3 a8f0 ui_redteam +3 aa00 lastLoadingText +3 ae00 lastConnState +3 ae04 parsedFPMessage +3 b204 ui_rankChange +3 b314 startTime +3 b318 ui_initialized +3 b428 ui_debug +3 b538 uiInfo +3 22894 ui_serverStatusTimeOut +3 229a4 ui_bigFont +3 22ab4 ui_smallFont +3 22bc4 ui_scoreTime +3 22cd4 ui_scoreShutoutBonus +3 22de4 ui_scoreSkillBonus +3 22ef4 ui_scoreTimeBonus +3 23004 ui_scoreBase +3 23114 ui_scoreTeam +3 23224 ui_scorePerfect +3 23334 ui_scoreScore +3 23444 ui_scoreGauntlets +3 23554 ui_scoreAssists +3 23664 ui_scoreDefends +3 23774 ui_scoreExcellents +3 23884 ui_scoreImpressives +3 23994 ui_scoreAccuracy +3 23aa4 ui_singlePlayerActive +3 23bb4 ui_lastServerRefresh_3 +3 23cc4 ui_lastServerRefresh_2 +3 23dd4 ui_lastServerRefresh_1 +3 23ee4 ui_lastServerRefresh_0 +3 23ff4 ui_selectedPlayerName +3 24104 ui_selectedPlayer +3 24214 ui_currentOpponent +3 24324 ui_mapIndex +3 24434 ui_currentNetMap +3 24544 ui_currentMap +3 24654 ui_currentTier +3 24764 ui_menuFiles +3 24874 ui_opponentName +3 24984 ui_dedicated +3 24a94 ui_serverFilterType +3 24ba4 ui_netSource +3 24cb4 ui_joinGameType +3 24dc4 ui_actualNetGameType +3 24ed4 ui_netGameType +3 24fe4 ui_gameType +3 250f4 ui_fragLimit +3 25204 ui_captureLimit +3 25314 ui_cdkeychecked +3 25424 ui_server16 +3 25534 ui_server15 +3 25644 ui_server14 +3 25754 ui_server13 +3 25864 ui_server12 +3 25974 ui_server11 +3 25a84 ui_server10 +3 25b94 ui_server9 +3 25ca4 ui_server8 +3 25db4 ui_server7 +3 25ec4 ui_server6 +3 25fd4 ui_server5 +3 260e4 ui_server4 +3 261f4 ui_server3 +3 26304 ui_server2 +3 26414 ui_server1 +3 26524 ui_marks +3 26634 ui_drawCrosshairNames +3 26744 ui_drawCrosshair +3 26854 ui_browserShowEmpty +3 26964 ui_browserShowFull +3 26a74 ui_browserSortKey +3 26b84 ui_browserGameType +3 26c94 ui_browserMaster +3 26da4 ui_spSelection +3 26eb4 ui_spSkill +3 26fc4 ui_spVideos +3 270d4 ui_spAwards +3 271e4 ui_spScores5 +3 272f4 ui_spScores4 +3 27404 ui_spScores3 +3 27514 ui_spScores2 +3 27624 ui_spScores1 +3 27734 ui_botsFile +3 27844 ui_arenasFile +3 27954 ui_ctf_friendly +3 27a64 ui_ctf_timelimit +3 27b74 ui_ctf_capturelimit +3 27c84 ui_team_friendly +3 27d94 ui_team_timelimit +3 27ea4 ui_team_fraglimit +3 27fb4 ui_selectedModelIndex +3 280c4 ui_tourney_timelimit +3 281d4 ui_tourney_fraglimit +3 282e4 ui_ffa_timelimit +3 283f4 ui_ffa_fraglimit +3 28d04 m_entersound +3 28d08 uiForceStarShaders +3 28d50 ui_forcePowerDisable +3 28e60 ui_freeSaber +3 28f70 uiSaberColorShaders +3 2af98 menuParseKeywordHash +3 2b798 itemParseKeywordHash +3 2bf98 g_nameBind2 +3 2bfb8 g_nameBind1 +3 2bfd8 ui_deferredScript +3 2c7d8 strHandle +3 2e7d8 strPool +3 8e7d8 outOfMemory +3 8e7dc allocPoint +3 8e7e0 memoryPool +3 28e7e0 menuStack +3 28e820 Menus +3 2a3420 scrollInfo +3 2a3440 ui_arenaInfos +3 2a4440 ui_numArenas +3 2a4444 ui_botInfos +3 2a5444 ui_numBots +3 2a5448 bg_pool +3 4aee60 com_lines +3 4aee64 com_parsename +3 4af264 com_token diff --git a/CODE-mp/ui/vm/ui.qvm b/CODE-mp/ui/vm/ui.qvm new file mode 100644 index 0000000000000000000000000000000000000000..9cc3c1d629cf33cffba5f50d97ff868d65717d12 GIT binary patch literal 313480 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�~#RTK58Q-4Z=^&qx7d1eyt*j1PKkt*#* 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 literal 0 HcmV?d00001 diff --git a/CODE-mp/ui/vm/ui_atoms.asm b/CODE-mp/ui/vm/ui_atoms.asm new file mode 100644 index 0000000..ece3378 --- /dev/null +++ b/CODE-mp/ui/vm/ui_atoms.asm @@ -0,0 +1,5137 @@ +export Com_Error +code +proc Com_Error 1032 12 +file "../ui_atoms.c" +line 15 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:/********************************************************************** +;4: UI_ATOMS.C +;5: +;6: User interface building blocks and support functions. +;7:**********************************************************************/ +;8:#include "ui_local.h" +;9: +;10:qboolean m_entersound; // after a frame, so caching won't disrupt the sound +;11: +;12:// these are here so the functions in q_shared.c can link +;13:#ifndef UI_HARD_LINKED +;14: +;15:void QDECL Com_Error( int level, const char *error, ... ) { +line 19 +;16: va_list argptr; +;17: char text[1024]; +;18: +;19: va_start (argptr, error); +ADDRLP4 0 +ADDRFP4 4+4 +ASGNP4 +line 20 +;20: vsprintf (text, error, argptr); +ADDRLP4 4 +ARGP4 +ADDRFP4 4 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 vsprintf +CALLI4 +pop +line 21 +;21: va_end (argptr); +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 23 +;22: +;23: trap_Error( va("%s", text) ); +ADDRGP4 $119 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 1028 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 trap_Error +CALLV +pop +line 24 +;24:} +LABELV $117 +endproc Com_Error 1032 12 +export Com_Printf +proc Com_Printf 1032 12 +line 26 +;25: +;26:void QDECL Com_Printf( const char *msg, ... ) { +line 30 +;27: va_list argptr; +;28: char text[1024]; +;29: +;30: va_start (argptr, msg); +ADDRLP4 0 +ADDRFP4 0+4 +ASGNP4 +line 31 +;31: vsprintf (text, msg, argptr); +ADDRLP4 4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 vsprintf +CALLI4 +pop +line 32 +;32: va_end (argptr); +ADDRLP4 0 +CNSTP4 0 +ASGNP4 +line 34 +;33: +;34: trap_Print( va("%s", text) ); +ADDRGP4 $119 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 1028 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1028 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 35 +;35:} +LABELV $120 +endproc Com_Printf 1032 12 +data +export newUI +align 4 +LABELV newUI +byte 4 0 +export UI_ClampCvar +code +proc UI_ClampCvar 0 0 +line 48 +;36: +;37:#endif +;38: +;39:qboolean newUI = qfalse; +;40: +;41: +;42:/* +;43:================= +;44:UI_ClampCvar +;45:================= +;46:*/ +;47:float UI_ClampCvar( float min, float max, float value ) +;48:{ +line 49 +;49: if ( value < min ) return min; +ADDRFP4 8 +INDIRF4 +ADDRFP4 0 +INDIRF4 +GEF4 $123 +ADDRFP4 0 +INDIRF4 +RETF4 +ADDRGP4 $122 +JUMPV +LABELV $123 +line 50 +;50: if ( value > max ) return max; +ADDRFP4 8 +INDIRF4 +ADDRFP4 4 +INDIRF4 +LEF4 $125 +ADDRFP4 4 +INDIRF4 +RETF4 +ADDRGP4 $122 +JUMPV +LABELV $125 +line 51 +;51: return value; +ADDRFP4 8 +INDIRF4 +RETF4 +LABELV $122 +endproc UI_ClampCvar 0 0 +export UI_StartDemoLoop +proc UI_StartDemoLoop 0 8 +line 59 +;52:} +;53: +;54:/* +;55:================= +;56:UI_StartDemoLoop +;57:================= +;58:*/ +;59:void UI_StartDemoLoop( void ) { +line 60 +;60: trap_Cmd_ExecuteText( EXEC_APPEND, "d1\n" ); +CNSTI4 2 +ARGI4 +ADDRGP4 $128 +ARGP4 +ADDRGP4 trap_Cmd_ExecuteText +CALLV +pop +line 61 +;61:} +LABELV $127 +endproc UI_StartDemoLoop 0 8 +bss +align 1 +LABELV $130 +skip 1024 +export UI_Argv +code +proc UI_Argv 0 12 +line 64 +;62: +;63: +;64:char *UI_Argv( int arg ) { +line 67 +;65: static char buffer[MAX_STRING_CHARS]; +;66: +;67: trap_Argv( arg, buffer, sizeof( buffer ) ); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRGP4 $130 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Argv +CALLV +pop +line 69 +;68: +;69: return buffer; +ADDRGP4 $130 +RETP4 +LABELV $129 +endproc UI_Argv 0 12 +bss +align 1 +LABELV $132 +skip 1024 +export UI_Cvar_VariableString +code +proc UI_Cvar_VariableString 0 12 +line 73 +;70:} +;71: +;72: +;73:char *UI_Cvar_VariableString( const char *var_name ) { +line 76 +;74: static char buffer[MAX_STRING_CHARS]; +;75: +;76: trap_Cvar_VariableStringBuffer( var_name, buffer, sizeof( buffer ) ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $132 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_Cvar_VariableStringBuffer +CALLV +pop +line 78 +;77: +;78: return buffer; +ADDRGP4 $132 +RETP4 +LABELV $131 +endproc UI_Cvar_VariableString 0 12 +export UI_SetBestScores +proc UI_SetBestScores 144 12 +line 83 +;79:} +;80: +;81: +;82: +;83:void UI_SetBestScores(postGameInfo_t *newInfo, qboolean postGame) { +line 84 +;84: trap_Cvar_Set("ui_scoreAccuracy", va("%i%%", newInfo->accuracy)); +ADDRGP4 $135 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 0 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $134 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 85 +;85: trap_Cvar_Set("ui_scoreImpressives", va("%i", newInfo->impressives)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $136 +ARGP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 86 +;86: trap_Cvar_Set("ui_scoreExcellents", va("%i", newInfo->excellents)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 8 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $138 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 87 +;87: trap_Cvar_Set("ui_scoreDefends", va("%i", newInfo->defends)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 12 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $139 +ARGP4 +ADDRLP4 12 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 88 +;88: trap_Cvar_Set("ui_scoreAssists", va("%i", newInfo->assists)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 16 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $140 +ARGP4 +ADDRLP4 16 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 89 +;89: trap_Cvar_Set("ui_scoreGauntlets", va("%i", newInfo->gauntlets)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 20 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $141 +ARGP4 +ADDRLP4 20 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 90 +;90: trap_Cvar_Set("ui_scoreScore", va("%i", newInfo->score)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 24 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $142 +ARGP4 +ADDRLP4 24 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 91 +;91: trap_Cvar_Set("ui_scorePerfect", va("%i", newInfo->perfects)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 28 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $143 +ARGP4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 92 +;92: trap_Cvar_Set("ui_scoreTeam", va("%i to %i", newInfo->redScore, newInfo->blueScore)); +ADDRGP4 $145 +ARGP4 +ADDRLP4 32 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 32 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 36 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $144 +ARGP4 +ADDRLP4 36 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 93 +;93: trap_Cvar_Set("ui_scoreBase", va("%i", newInfo->baseScore)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 60 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 40 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $146 +ARGP4 +ADDRLP4 40 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 94 +;94: trap_Cvar_Set("ui_scoreTimeBonus", va("%i", newInfo->timeBonus)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 48 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 44 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $147 +ARGP4 +ADDRLP4 44 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 95 +;95: trap_Cvar_Set("ui_scoreSkillBonus", va("%i", newInfo->skillBonus)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 56 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 48 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $148 +ARGP4 +ADDRLP4 48 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 96 +;96: trap_Cvar_Set("ui_scoreShutoutBonus", va("%i", newInfo->shutoutBonus)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 52 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $149 +ARGP4 +ADDRLP4 52 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 97 +;97: trap_Cvar_Set("ui_scoreTime", va("%02i:%02i", newInfo->time / 60, newInfo->time % 60)); +ADDRGP4 $151 +ARGP4 +ADDRLP4 56 +ADDRFP4 0 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 60 +CNSTI4 60 +ASGNI4 +ADDRLP4 56 +INDIRI4 +ADDRLP4 60 +INDIRI4 +DIVI4 +ARGI4 +ADDRLP4 56 +INDIRI4 +ADDRLP4 60 +INDIRI4 +MODI4 +ARGI4 +ADDRLP4 64 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $150 +ARGP4 +ADDRLP4 64 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 98 +;98: trap_Cvar_Set("ui_scoreCaptures", va("%i", newInfo->captures)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 68 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $152 +ARGP4 +ADDRLP4 68 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 99 +;99: if (postGame) { +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +EQI4 $153 +line 100 +;100: trap_Cvar_Set("ui_scoreAccuracy2", va("%i%%", newInfo->accuracy)); +ADDRGP4 $135 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 16 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 72 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $155 +ARGP4 +ADDRLP4 72 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 101 +;101: trap_Cvar_Set("ui_scoreImpressives2", va("%i", newInfo->impressives)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 20 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 76 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $156 +ARGP4 +ADDRLP4 76 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 102 +;102: trap_Cvar_Set("ui_scoreExcellents2", va("%i", newInfo->excellents)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 24 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 80 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $157 +ARGP4 +ADDRLP4 80 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 103 +;103: trap_Cvar_Set("ui_scoreDefends2", va("%i", newInfo->defends)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 28 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 84 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $158 +ARGP4 +ADDRLP4 84 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 104 +;104: trap_Cvar_Set("ui_scoreAssists2", va("%i", newInfo->assists)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 32 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 88 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $159 +ARGP4 +ADDRLP4 88 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 105 +;105: trap_Cvar_Set("ui_scoreGauntlets2", va("%i", newInfo->gauntlets)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 36 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 92 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $160 +ARGP4 +ADDRLP4 92 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 106 +;106: trap_Cvar_Set("ui_scoreScore2", va("%i", newInfo->score)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +INDIRI4 +ARGI4 +ADDRLP4 96 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $161 +ARGP4 +ADDRLP4 96 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 107 +;107: trap_Cvar_Set("ui_scorePerfect2", va("%i", newInfo->perfects)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 12 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 100 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $162 +ARGP4 +ADDRLP4 100 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 108 +;108: trap_Cvar_Set("ui_scoreTeam2", va("%i to %i", newInfo->redScore, newInfo->blueScore)); +ADDRGP4 $145 +ARGP4 +ADDRLP4 104 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 104 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 104 +INDIRP4 +CNSTI4 8 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 108 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $163 +ARGP4 +ADDRLP4 108 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 109 +;109: trap_Cvar_Set("ui_scoreBase2", va("%i", newInfo->baseScore)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 60 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 112 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $164 +ARGP4 +ADDRLP4 112 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 110 +;110: trap_Cvar_Set("ui_scoreTimeBonus2", va("%i", newInfo->timeBonus)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 48 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 116 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $165 +ARGP4 +ADDRLP4 116 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 111 +;111: trap_Cvar_Set("ui_scoreSkillBonus2", va("%i", newInfo->skillBonus)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 56 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 120 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $166 +ARGP4 +ADDRLP4 120 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 112 +;112: trap_Cvar_Set("ui_scoreShutoutBonus2", va("%i", newInfo->shutoutBonus)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 52 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 124 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $167 +ARGP4 +ADDRLP4 124 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 113 +;113: trap_Cvar_Set("ui_scoreTime2", va("%02i:%02i", newInfo->time / 60, newInfo->time % 60)); +ADDRGP4 $151 +ARGP4 +ADDRLP4 128 +ADDRFP4 0 +INDIRP4 +CNSTI4 44 +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 132 +CNSTI4 60 +ASGNI4 +ADDRLP4 128 +INDIRI4 +ADDRLP4 132 +INDIRI4 +DIVI4 +ARGI4 +ADDRLP4 128 +INDIRI4 +ADDRLP4 132 +INDIRI4 +MODI4 +ARGI4 +ADDRLP4 136 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $168 +ARGP4 +ADDRLP4 136 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 114 +;114: trap_Cvar_Set("ui_scoreCaptures2", va("%i", newInfo->captures)); +ADDRGP4 $137 +ARGP4 +ADDRFP4 0 +INDIRP4 +CNSTI4 40 +ADDP4 +INDIRI4 +ARGI4 +ADDRLP4 140 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $169 +ARGP4 +ADDRLP4 140 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 115 +;115: } +LABELV $153 +line 116 +;116:} +LABELV $133 +endproc UI_SetBestScores 144 12 +export UI_LoadBestScores +proc UI_LoadBestScores 144 24 +line 118 +;117: +;118:void UI_LoadBestScores(const char *map, int game) { +line 122 +;119: char fileName[MAX_QPATH]; +;120: fileHandle_t f; +;121: postGameInfo_t newInfo; +;122: memset(&newInfo, 0, sizeof(postGameInfo_t)); +ADDRLP4 68 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 64 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 123 +;123: Com_sprintf(fileName, MAX_QPATH, "games/%s_%i.game", map, game); +ADDRLP4 0 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $171 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 124 +;124: if (trap_FS_FOpenFile(fileName, &f, FS_READ) >= 0) { +ADDRLP4 0 +ARGP4 +ADDRLP4 64 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 132 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 132 +INDIRI4 +CNSTI4 0 +LTI4 $172 +line 125 +;125: int size = 0; +ADDRLP4 136 +CNSTI4 0 +ASGNI4 +line 126 +;126: trap_FS_Read(&size, sizeof(int), f); +ADDRLP4 136 +ARGP4 +CNSTI4 4 +ARGI4 +ADDRLP4 64 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 127 +;127: if (size == sizeof(postGameInfo_t)) { +ADDRLP4 136 +INDIRI4 +CVIU4 4 +CNSTU4 64 +NEU4 $174 +line 128 +;128: trap_FS_Read(&newInfo, sizeof(postGameInfo_t), f); +ADDRLP4 68 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRLP4 64 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 129 +;129: } +LABELV $174 +line 130 +;130: trap_FS_FCloseFile(f); +ADDRLP4 64 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 131 +;131: } +LABELV $172 +line 132 +;132: UI_SetBestScores(&newInfo, qfalse); +ADDRLP4 68 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 UI_SetBestScores +CALLV +pop +line 134 +;133: +;134: Com_sprintf(fileName, MAX_QPATH, "demos/%s_%d.dm_%d", map, game, (int)trap_Cvar_VariableValue("protocol")); +ADDRGP4 $177 +ARGP4 +ADDRLP4 136 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 0 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $176 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRFP4 4 +INDIRI4 +ARGI4 +ADDRLP4 136 +INDIRF4 +CVFI4 4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 135 +;135: uiInfo.demoAvailable = qfalse; +ADDRGP4 uiInfo+11824 +CNSTI4 0 +ASGNI4 +line 136 +;136: if (trap_FS_FOpenFile(fileName, &f, FS_READ) >= 0) { +ADDRLP4 0 +ARGP4 +ADDRLP4 64 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 140 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 140 +INDIRI4 +CNSTI4 0 +LTI4 $179 +line 137 +;137: uiInfo.demoAvailable = qtrue; +ADDRGP4 uiInfo+11824 +CNSTI4 1 +ASGNI4 +line 138 +;138: trap_FS_FCloseFile(f); +ADDRLP4 64 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 139 +;139: } +LABELV $179 +line 140 +;140:} +LABELV $170 +endproc UI_LoadBestScores 144 24 +export UI_ClearScores +proc UI_ClearScores 4200 16 +line 147 +;141: +;142:/* +;143:=============== +;144:UI_ClearScores +;145:=============== +;146:*/ +;147:void UI_ClearScores() { +line 154 +;148: char gameList[4096]; +;149: char *gameFile; +;150: int i, len, count, size; +;151: fileHandle_t f; +;152: postGameInfo_t newInfo; +;153: +;154: count = trap_FS_GetFileList( "games", "game", gameList, sizeof(gameList) ); +ADDRGP4 $183 +ARGP4 +ADDRGP4 $184 +ARGP4 +ADDRLP4 88 +ARGP4 +CNSTI4 4096 +ARGI4 +ADDRLP4 4184 +ADDRGP4 trap_FS_GetFileList +CALLI4 +ASGNI4 +ADDRLP4 16 +ADDRLP4 4184 +INDIRI4 +ASGNI4 +line 156 +;155: +;156: size = sizeof(postGameInfo_t); +ADDRLP4 20 +CNSTI4 64 +ASGNI4 +line 157 +;157: memset(&newInfo, 0, size); +ADDRLP4 24 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 20 +INDIRI4 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 159 +;158: +;159: if (count > 0) { +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +LEI4 $185 +line 160 +;160: gameFile = gameList; +ADDRLP4 0 +ADDRLP4 88 +ASGNP4 +line 161 +;161: for ( i = 0; i < count; i++ ) { +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $190 +JUMPV +LABELV $187 +line 162 +;162: len = strlen(gameFile); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4188 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 4188 +INDIRI4 +ASGNI4 +line 163 +;163: if (trap_FS_FOpenFile(va("games/%s",gameFile), &f, FS_WRITE) >= 0) { +ADDRGP4 $193 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4192 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 4192 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRLP4 4196 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 4196 +INDIRI4 +CNSTI4 0 +LTI4 $191 +line 164 +;164: trap_FS_Write(&size, sizeof(int), f); +ADDRLP4 20 +ARGP4 +CNSTI4 4 +ARGI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Write +CALLV +pop +line 165 +;165: trap_FS_Write(&newInfo, size, f); +ADDRLP4 24 +ARGP4 +ADDRLP4 20 +INDIRI4 +ARGI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Write +CALLV +pop +line 166 +;166: trap_FS_FCloseFile(f); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 167 +;167: } +LABELV $191 +line 168 +;168: gameFile += len + 1; +ADDRLP4 0 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ASGNP4 +line 169 +;169: } +LABELV $188 +line 161 +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $190 +ADDRLP4 8 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LTI4 $187 +line 170 +;170: } +LABELV $185 +line 172 +;171: +;172: UI_SetBestScores(&newInfo, qfalse); +ADDRLP4 24 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 UI_SetBestScores +CALLV +pop +line 174 +;173: +;174:} +LABELV $182 +endproc UI_ClearScores 4200 16 +proc UI_Cache_f 12 8 +line 178 +;175: +;176: +;177: +;178:static void UI_Cache_f() { +line 180 +;179: int i; +;180: Display_CacheAll(); +ADDRGP4 Display_CacheAll +CALLV +pop +line 181 +;181: if (trap_Argc() == 2) { +ADDRLP4 4 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +NEI4 $195 +line 182 +;182: for (i = 0; i < uiInfo.q3HeadCount; i++) +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $200 +JUMPV +LABELV $197 +line 183 +;183: { +line 184 +;184: trap_Print( va("model %s\n", uiInfo.q3HeadNames[i]) ); +ADDRGP4 $202 +ARGP4 +ADDRLP4 0 +INDIRI4 +CNSTI4 6 +LSHI4 +ADDRGP4 uiInfo+60736 +ADDP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 185 +;185: } +LABELV $198 +line 182 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $200 +ADDRLP4 0 +INDIRI4 +ADDRGP4 uiInfo+60732 +INDIRI4 +LTI4 $197 +line 186 +;186: } +LABELV $195 +line 187 +;187:} +LABELV $194 +endproc UI_Cache_f 12 8 +proc UI_CalcPostGameStats 1460 20 +line 194 +;188: +;189:/* +;190:======================= +;191:UI_CalcPostGameStats +;192:======================= +;193:*/ +;194:static void UI_CalcPostGameStats() { +line 202 +;195: char map[MAX_QPATH]; +;196: char fileName[MAX_QPATH]; +;197: char info[MAX_INFO_STRING]; +;198: fileHandle_t f; +;199: int size, game, time, adjustedTime; +;200: postGameInfo_t oldInfo; +;201: postGameInfo_t newInfo; +;202: qboolean newHigh = qfalse; +ADDRLP4 1088 +CNSTI4 0 +ASGNI4 +line 204 +;203: +;204: trap_GetConfigString( CS_SERVERINFO, info, sizeof(info) ); +CNSTI4 0 +ARGI4 +ADDRLP4 64 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetConfigString +CALLI4 +pop +line 205 +;205: Q_strncpyz( map, Info_ValueForKey( info, "mapname" ), sizeof(map) ); +ADDRLP4 64 +ARGP4 +ADDRGP4 $205 +ARGP4 +ADDRLP4 1304 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1160 +ARGP4 +ADDRLP4 1304 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 206 +;206: game = atoi(Info_ValueForKey(info, "g_gametype")); +ADDRLP4 64 +ARGP4 +ADDRGP4 $206 +ARGP4 +ADDRLP4 1308 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1308 +INDIRP4 +ARGP4 +ADDRLP4 1312 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 1224 +ADDRLP4 1312 +INDIRI4 +ASGNI4 +line 209 +;207: +;208: // compose file name +;209: Com_sprintf(fileName, MAX_QPATH, "games/%s_%i.game", map, game); +ADDRLP4 1228 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 $171 +ARGP4 +ADDRLP4 1160 +ARGP4 +ADDRLP4 1224 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 211 +;210: // see if we have one already +;211: memset(&oldInfo, 0, sizeof(postGameInfo_t)); +ADDRLP4 1096 +ARGP4 +CNSTI4 0 +ARGI4 +CNSTI4 64 +ARGI4 +ADDRGP4 memset +CALLP4 +pop +line 212 +;212: if (trap_FS_FOpenFile(fileName, &f, FS_READ) >= 0) { +ADDRLP4 1228 +ARGP4 +ADDRLP4 1092 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 1316 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 1316 +INDIRI4 +CNSTI4 0 +LTI4 $207 +line 214 +;213: // if so load it +;214: size = 0; +ADDRLP4 1296 +CNSTI4 0 +ASGNI4 +line 215 +;215: trap_FS_Read(&size, sizeof(int), f); +ADDRLP4 1296 +ARGP4 +CNSTI4 4 +ARGI4 +ADDRLP4 1092 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 216 +;216: if (size == sizeof(postGameInfo_t)) { +ADDRLP4 1296 +INDIRI4 +CVIU4 4 +CNSTU4 64 +NEU4 $209 +line 217 +;217: trap_FS_Read(&oldInfo, sizeof(postGameInfo_t), f); +ADDRLP4 1096 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRLP4 1092 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 218 +;218: } +LABELV $209 +line 219 +;219: trap_FS_FCloseFile(f); +ADDRLP4 1092 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 220 +;220: } +LABELV $207 +line 222 +;221: +;222: newInfo.accuracy = atoi(UI_Argv(3)); +CNSTI4 3 +ARGI4 +ADDRLP4 1320 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1320 +INDIRP4 +ARGP4 +ADDRLP4 1324 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+16 +ADDRLP4 1324 +INDIRI4 +ASGNI4 +line 223 +;223: newInfo.impressives = atoi(UI_Argv(4)); +CNSTI4 4 +ARGI4 +ADDRLP4 1328 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1328 +INDIRP4 +ARGP4 +ADDRLP4 1332 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+20 +ADDRLP4 1332 +INDIRI4 +ASGNI4 +line 224 +;224: newInfo.excellents = atoi(UI_Argv(5)); +CNSTI4 5 +ARGI4 +ADDRLP4 1336 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1336 +INDIRP4 +ARGP4 +ADDRLP4 1340 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+24 +ADDRLP4 1340 +INDIRI4 +ASGNI4 +line 225 +;225: newInfo.defends = atoi(UI_Argv(6)); +CNSTI4 6 +ARGI4 +ADDRLP4 1344 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1344 +INDIRP4 +ARGP4 +ADDRLP4 1348 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+28 +ADDRLP4 1348 +INDIRI4 +ASGNI4 +line 226 +;226: newInfo.assists = atoi(UI_Argv(7)); +CNSTI4 7 +ARGI4 +ADDRLP4 1352 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1352 +INDIRP4 +ARGP4 +ADDRLP4 1356 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+32 +ADDRLP4 1356 +INDIRI4 +ASGNI4 +line 227 +;227: newInfo.gauntlets = atoi(UI_Argv(8)); +CNSTI4 8 +ARGI4 +ADDRLP4 1360 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1360 +INDIRP4 +ARGP4 +ADDRLP4 1364 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+36 +ADDRLP4 1364 +INDIRI4 +ASGNI4 +line 228 +;228: newInfo.baseScore = atoi(UI_Argv(9)); +CNSTI4 9 +ARGI4 +ADDRLP4 1368 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1368 +INDIRP4 +ARGP4 +ADDRLP4 1372 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+60 +ADDRLP4 1372 +INDIRI4 +ASGNI4 +line 229 +;229: newInfo.perfects = atoi(UI_Argv(10)); +CNSTI4 10 +ARGI4 +ADDRLP4 1376 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1376 +INDIRP4 +ARGP4 +ADDRLP4 1380 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+12 +ADDRLP4 1380 +INDIRI4 +ASGNI4 +line 230 +;230: newInfo.redScore = atoi(UI_Argv(11)); +CNSTI4 11 +ARGI4 +ADDRLP4 1384 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1384 +INDIRP4 +ARGP4 +ADDRLP4 1388 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+4 +ADDRLP4 1388 +INDIRI4 +ASGNI4 +line 231 +;231: newInfo.blueScore = atoi(UI_Argv(12)); +CNSTI4 12 +ARGI4 +ADDRLP4 1392 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1392 +INDIRP4 +ARGP4 +ADDRLP4 1396 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+8 +ADDRLP4 1396 +INDIRI4 +ASGNI4 +line 232 +;232: time = atoi(UI_Argv(13)); +CNSTI4 13 +ARGI4 +ADDRLP4 1400 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1400 +INDIRP4 +ARGP4 +ADDRLP4 1404 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 1300 +ADDRLP4 1404 +INDIRI4 +ASGNI4 +line 233 +;233: newInfo.captures = atoi(UI_Argv(14)); +CNSTI4 14 +ARGI4 +ADDRLP4 1408 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 1408 +INDIRP4 +ARGP4 +ADDRLP4 1412 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 0+40 +ADDRLP4 1412 +INDIRI4 +ASGNI4 +line 235 +;234: +;235: newInfo.time = (time - trap_Cvar_VariableValue("ui_matchStartTime")) / 1000; +ADDRGP4 $223 +ARGP4 +ADDRLP4 1416 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 0+44 +ADDRLP4 1300 +INDIRI4 +CVIF4 4 +ADDRLP4 1416 +INDIRF4 +SUBF4 +CNSTF4 1148846080 +DIVF4 +CVFI4 4 +ASGNI4 +line 236 +;236: adjustedTime = uiInfo.mapList[ui_currentMap.integer].timeToBeat[game]; +ADDRLP4 1292 +ADDRLP4 1224 +INDIRI4 +CNSTI4 2 +LSHI4 +CNSTI4 100 +ADDRGP4 ui_currentMap+12 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+28 +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 237 +;237: if (newInfo.time < adjustedTime) { +ADDRLP4 0+44 +INDIRI4 +ADDRLP4 1292 +INDIRI4 +GEI4 $227 +line 238 +;238: newInfo.timeBonus = (adjustedTime - newInfo.time) * 10; +ADDRLP4 0+48 +CNSTI4 10 +ADDRLP4 1292 +INDIRI4 +ADDRLP4 0+44 +INDIRI4 +SUBI4 +MULI4 +ASGNI4 +line 239 +;239: } else { +ADDRGP4 $228 +JUMPV +LABELV $227 +line 240 +;240: newInfo.timeBonus = 0; +ADDRLP4 0+48 +CNSTI4 0 +ASGNI4 +line 241 +;241: } +LABELV $228 +line 243 +;242: +;243: if (newInfo.redScore > newInfo.blueScore && newInfo.blueScore <= 0) { +ADDRLP4 0+4 +INDIRI4 +ADDRLP4 0+8 +INDIRI4 +LEI4 $233 +ADDRLP4 0+8 +INDIRI4 +CNSTI4 0 +GTI4 $233 +line 244 +;244: newInfo.shutoutBonus = 100; +ADDRLP4 0+52 +CNSTI4 100 +ASGNI4 +line 245 +;245: } else { +ADDRGP4 $234 +JUMPV +LABELV $233 +line 246 +;246: newInfo.shutoutBonus = 0; +ADDRLP4 0+52 +CNSTI4 0 +ASGNI4 +line 247 +;247: } +LABELV $234 +line 249 +;248: +;249: newInfo.skillBonus = trap_Cvar_VariableValue("g_spSkill"); +ADDRGP4 $241 +ARGP4 +ADDRLP4 1420 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 0+56 +ADDRLP4 1420 +INDIRF4 +CVFI4 4 +ASGNI4 +line 250 +;250: if (newInfo.skillBonus <= 0) { +ADDRLP4 0+56 +INDIRI4 +CNSTI4 0 +GTI4 $242 +line 251 +;251: newInfo.skillBonus = 1; +ADDRLP4 0+56 +CNSTI4 1 +ASGNI4 +line 252 +;252: } +LABELV $242 +line 253 +;253: newInfo.score = newInfo.baseScore + newInfo.shutoutBonus + newInfo.timeBonus; +ADDRLP4 0 +ADDRLP4 0+60 +INDIRI4 +ADDRLP4 0+52 +INDIRI4 +ADDI4 +ADDRLP4 0+48 +INDIRI4 +ADDI4 +ASGNI4 +line 254 +;254: newInfo.score *= newInfo.skillBonus; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRLP4 0+56 +INDIRI4 +MULI4 +ASGNI4 +line 257 +;255: +;256: // see if the score is higher for this one +;257: newHigh = (newInfo.redScore > newInfo.blueScore && newInfo.score > oldInfo.score); +ADDRLP4 0+4 +INDIRI4 +ADDRLP4 0+8 +INDIRI4 +LEI4 $253 +ADDRLP4 0 +INDIRI4 +ADDRLP4 1096 +INDIRI4 +LEI4 $253 +ADDRLP4 1424 +CNSTI4 1 +ASGNI4 +ADDRGP4 $254 +JUMPV +LABELV $253 +ADDRLP4 1424 +CNSTI4 0 +ASGNI4 +LABELV $254 +ADDRLP4 1088 +ADDRLP4 1424 +INDIRI4 +ASGNI4 +line 259 +;258: +;259: if (newHigh) { +ADDRLP4 1088 +INDIRI4 +CNSTI4 0 +EQI4 $255 +line 261 +;260: // if so write out the new one +;261: uiInfo.newHighScoreTime = uiInfo.uiDC.realTime + 20000; +ADDRGP4 uiInfo+11808 +ADDRGP4 uiInfo+232 +INDIRI4 +CNSTI4 20000 +ADDI4 +ASGNI4 +line 262 +;262: if (trap_FS_FOpenFile(fileName, &f, FS_WRITE) >= 0) { +ADDRLP4 1228 +ARGP4 +ADDRLP4 1092 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRLP4 1428 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 1428 +INDIRI4 +CNSTI4 0 +LTI4 $259 +line 263 +;263: size = sizeof(postGameInfo_t); +ADDRLP4 1296 +CNSTI4 64 +ASGNI4 +line 264 +;264: trap_FS_Write(&size, sizeof(int), f); +ADDRLP4 1296 +ARGP4 +CNSTI4 4 +ARGI4 +ADDRLP4 1092 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Write +CALLV +pop +line 265 +;265: trap_FS_Write(&newInfo, sizeof(postGameInfo_t), f); +ADDRLP4 0 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRLP4 1092 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Write +CALLV +pop +line 266 +;266: trap_FS_FCloseFile(f); +ADDRLP4 1092 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 267 +;267: } +LABELV $259 +line 268 +;268: } +LABELV $255 +line 270 +;269: +;270: if (newInfo.time < oldInfo.time) { +ADDRLP4 0+44 +INDIRI4 +ADDRLP4 1096+44 +INDIRI4 +GEI4 $261 +line 271 +;271: uiInfo.newBestTime = uiInfo.uiDC.realTime + 20000; +ADDRGP4 uiInfo+11812 +ADDRGP4 uiInfo+232 +INDIRI4 +CNSTI4 20000 +ADDI4 +ASGNI4 +line 272 +;272: } +LABELV $261 +line 275 +;273: +;274: // put back all the ui overrides +;275: trap_Cvar_Set("capturelimit", UI_Cvar_VariableString("ui_saveCaptureLimit")); +ADDRGP4 $268 +ARGP4 +ADDRLP4 1428 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRGP4 $267 +ARGP4 +ADDRLP4 1428 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 276 +;276: trap_Cvar_Set("fraglimit", UI_Cvar_VariableString("ui_saveFragLimit")); +ADDRGP4 $270 +ARGP4 +ADDRLP4 1432 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRGP4 $269 +ARGP4 +ADDRLP4 1432 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 277 +;277: trap_Cvar_Set("duel_fraglimit", UI_Cvar_VariableString("ui_saveDuelLimit")); +ADDRGP4 $272 +ARGP4 +ADDRLP4 1436 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRGP4 $271 +ARGP4 +ADDRLP4 1436 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 278 +;278: trap_Cvar_Set("cg_drawTimer", UI_Cvar_VariableString("ui_drawTimer")); +ADDRGP4 $274 +ARGP4 +ADDRLP4 1440 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRGP4 $273 +ARGP4 +ADDRLP4 1440 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 279 +;279: trap_Cvar_Set("g_doWarmup", UI_Cvar_VariableString("ui_doWarmup")); +ADDRGP4 $276 +ARGP4 +ADDRLP4 1444 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRGP4 $275 +ARGP4 +ADDRLP4 1444 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 280 +;280: trap_Cvar_Set("g_Warmup", UI_Cvar_VariableString("ui_Warmup")); +ADDRGP4 $278 +ARGP4 +ADDRLP4 1448 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRGP4 $277 +ARGP4 +ADDRLP4 1448 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 281 +;281: trap_Cvar_Set("sv_pure", UI_Cvar_VariableString("ui_pure")); +ADDRGP4 $280 +ARGP4 +ADDRLP4 1452 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRGP4 $279 +ARGP4 +ADDRLP4 1452 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 282 +;282: trap_Cvar_Set("g_friendlyFire", UI_Cvar_VariableString("ui_friendlyFire")); +ADDRGP4 $282 +ARGP4 +ADDRLP4 1456 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRGP4 $281 +ARGP4 +ADDRLP4 1456 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 284 +;283: +;284: UI_SetBestScores(&newInfo, qtrue); +ADDRLP4 0 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 UI_SetBestScores +CALLV +pop +line 285 +;285: UI_ShowPostGame(newHigh); +ADDRLP4 1088 +INDIRI4 +ARGI4 +ADDRGP4 UI_ShowPostGame +CALLV +pop +line 288 +;286: +;287: +;288:} +LABELV $204 +endproc UI_CalcPostGameStats 1460 20 +export UI_ConsoleCommand +proc UI_ConsoleCommand 172 12 +line 296 +;289: +;290: +;291:/* +;292:================= +;293:UI_ConsoleCommand +;294:================= +;295:*/ +;296:qboolean UI_ConsoleCommand( int realTime ) { +line 299 +;297: char *cmd; +;298: +;299: uiInfo.uiDC.frameTime = realTime - uiInfo.uiDC.realTime; +ADDRGP4 uiInfo+236 +ADDRFP4 0 +INDIRI4 +ADDRGP4 uiInfo+232 +INDIRI4 +SUBI4 +ASGNI4 +line 300 +;300: uiInfo.uiDC.realTime = realTime; +ADDRGP4 uiInfo+232 +ADDRFP4 0 +INDIRI4 +ASGNI4 +line 302 +;301: +;302: cmd = UI_Argv( 0 ); +CNSTI4 0 +ARGI4 +ADDRLP4 4 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 307 +;303: +;304: // ensure minimum menu data is available +;305: //Menu_Cache(); +;306: +;307: if ( Q_stricmp (cmd, "ui_test") == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $289 +ARGP4 +ADDRLP4 8 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +NEI4 $287 +line 308 +;308: UI_ShowPostGame(qtrue); +CNSTI4 1 +ARGI4 +ADDRGP4 UI_ShowPostGame +CALLV +pop +line 309 +;309: } +LABELV $287 +line 311 +;310: +;311: if ( Q_stricmp (cmd, "ui_report") == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $292 +ARGP4 +ADDRLP4 12 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $290 +line 312 +;312: UI_Report(); +ADDRGP4 UI_Report +CALLV +pop +line 313 +;313: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $283 +JUMPV +LABELV $290 +line 316 +;314: } +;315: +;316: if ( Q_stricmp (cmd, "ui_load") == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $295 +ARGP4 +ADDRLP4 16 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +NEI4 $293 +line 317 +;317: UI_Load(); +ADDRGP4 UI_Load +CALLV +pop +line 318 +;318: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $283 +JUMPV +LABELV $293 +line 321 +;319: } +;320: +;321: if ( Q_stricmp (cmd, "ui_openmenu" ) == 0 ) +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $298 +ARGP4 +ADDRLP4 20 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +CNSTI4 0 +NEI4 $296 +line 322 +;322: { +line 323 +;323: if ( trap_Cvar_VariableValue ( "developer" ) ) +ADDRGP4 $301 +ARGP4 +ADDRLP4 24 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 24 +INDIRF4 +CNSTF4 0 +EQF4 $299 +line 324 +;324: { +line 325 +;325: Menus_OpenByName ( UI_Argv(1) ); +CNSTI4 1 +ARGI4 +ADDRLP4 28 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 28 +INDIRP4 +ARGP4 +ADDRGP4 Menus_OpenByName +CALLV +pop +line 326 +;326: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $283 +JUMPV +LABELV $299 +line 328 +;327: } +;328: } +LABELV $296 +line 330 +;329: +;330: if ( Q_stricmp (cmd, "remapShader") == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $304 +ARGP4 +ADDRLP4 24 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 24 +INDIRI4 +CNSTI4 0 +NEI4 $302 +line 331 +;331: if (trap_Argc() == 4) { +ADDRLP4 28 +ADDRGP4 trap_Argc +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 4 +NEI4 $305 +line 334 +;332: char shader1[MAX_QPATH]; +;333: char shader2[MAX_QPATH]; +;334: Q_strncpyz(shader1, UI_Argv(1), sizeof(shader1)); +CNSTI4 1 +ARGI4 +ADDRLP4 160 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 32 +ARGP4 +ADDRLP4 160 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 335 +;335: Q_strncpyz(shader2, UI_Argv(2), sizeof(shader2)); +CNSTI4 2 +ARGI4 +ADDRLP4 164 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 96 +ARGP4 +ADDRLP4 164 +INDIRP4 +ARGP4 +CNSTI4 64 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 336 +;336: trap_R_RemapShader(shader1, shader2, UI_Argv(3)); +CNSTI4 3 +ARGI4 +ADDRLP4 168 +ADDRGP4 UI_Argv +CALLP4 +ASGNP4 +ADDRLP4 32 +ARGP4 +ADDRLP4 96 +ARGP4 +ADDRLP4 168 +INDIRP4 +ARGP4 +ADDRGP4 trap_R_RemapShader +CALLV +pop +line 337 +;337: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $283 +JUMPV +LABELV $305 +line 339 +;338: } +;339: } +LABELV $302 +line 341 +;340: +;341: if ( Q_stricmp (cmd, "postgame") == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $309 +ARGP4 +ADDRLP4 28 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 28 +INDIRI4 +CNSTI4 0 +NEI4 $307 +line 342 +;342: UI_CalcPostGameStats(); +ADDRGP4 UI_CalcPostGameStats +CALLV +pop +line 343 +;343: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $283 +JUMPV +LABELV $307 +line 346 +;344: } +;345: +;346: if ( Q_stricmp (cmd, "ui_cache") == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $312 +ARGP4 +ADDRLP4 32 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 32 +INDIRI4 +CNSTI4 0 +NEI4 $310 +line 347 +;347: UI_Cache_f(); +ADDRGP4 UI_Cache_f +CALLV +pop +line 348 +;348: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $283 +JUMPV +LABELV $310 +line 351 +;349: } +;350: +;351: if ( Q_stricmp (cmd, "ui_teamOrders") == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $315 +ARGP4 +ADDRLP4 36 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 36 +INDIRI4 +CNSTI4 0 +NEI4 $313 +line 353 +;352: //UI_TeamOrdersMenu_f(); +;353: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $283 +JUMPV +LABELV $313 +line 357 +;354: } +;355: +;356: +;357: if ( Q_stricmp (cmd, "ui_cdkey") == 0 ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $318 +ARGP4 +ADDRLP4 40 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 40 +INDIRI4 +CNSTI4 0 +NEI4 $316 +line 359 +;358: //UI_CDKeyMenu_f(); +;359: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $283 +JUMPV +LABELV $316 +line 362 +;360: } +;361: +;362: return qfalse; +CNSTI4 0 +RETI4 +LABELV $283 +endproc UI_ConsoleCommand 172 12 +export UI_Shutdown +proc UI_Shutdown 0 0 +line 370 +;363:} +;364: +;365:/* +;366:================= +;367:UI_Shutdown +;368:================= +;369:*/ +;370:void UI_Shutdown( void ) { +line 371 +;371:} +LABELV $319 +endproc UI_Shutdown 0 0 +export UI_DrawNamedPic +proc UI_DrawNamedPic 16 36 +line 374 +;372: +;373: +;374:void UI_DrawNamedPic( float x, float y, float width, float height, const char *picname ) { +line 377 +;375: qhandle_t hShader; +;376: +;377: hShader = trap_R_RegisterShaderNoMip( picname ); +ADDRFP4 16 +INDIRP4 +ARGP4 +ADDRLP4 4 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 378 +;378: trap_R_DrawStretchPic( x, y, width, height, 0, 0, 1, 1, hShader ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRFP4 8 +INDIRF4 +ARGF4 +ADDRFP4 12 +INDIRF4 +ARGF4 +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 12 +CNSTF4 1065353216 +ASGNF4 +ADDRLP4 12 +INDIRF4 +ARGF4 +ADDRLP4 12 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRGP4 trap_R_DrawStretchPic +CALLV +pop +line 379 +;379:} +LABELV $320 +endproc UI_DrawNamedPic 16 36 +export UI_DrawHandlePic +proc UI_DrawHandlePic 16 36 +line 381 +;380: +;381:void UI_DrawHandlePic( float x, float y, float w, float h, qhandle_t hShader ) { +line 387 +;382: float s0; +;383: float s1; +;384: float t0; +;385: float t1; +;386: +;387: if( w < 0 ) { // flip about vertical +ADDRFP4 8 +INDIRF4 +CNSTF4 0 +GEF4 $322 +line 388 +;388: w = -w; +ADDRFP4 8 +ADDRFP4 8 +INDIRF4 +NEGF4 +ASGNF4 +line 389 +;389: s0 = 1; +ADDRLP4 0 +CNSTF4 1065353216 +ASGNF4 +line 390 +;390: s1 = 0; +ADDRLP4 4 +CNSTF4 0 +ASGNF4 +line 391 +;391: } +ADDRGP4 $323 +JUMPV +LABELV $322 +line 392 +;392: else { +line 393 +;393: s0 = 0; +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +line 394 +;394: s1 = 1; +ADDRLP4 4 +CNSTF4 1065353216 +ASGNF4 +line 395 +;395: } +LABELV $323 +line 397 +;396: +;397: if( h < 0 ) { // flip about horizontal +ADDRFP4 12 +INDIRF4 +CNSTF4 0 +GEF4 $324 +line 398 +;398: h = -h; +ADDRFP4 12 +ADDRFP4 12 +INDIRF4 +NEGF4 +ASGNF4 +line 399 +;399: t0 = 1; +ADDRLP4 8 +CNSTF4 1065353216 +ASGNF4 +line 400 +;400: t1 = 0; +ADDRLP4 12 +CNSTF4 0 +ASGNF4 +line 401 +;401: } +ADDRGP4 $325 +JUMPV +LABELV $324 +line 402 +;402: else { +line 403 +;403: t0 = 0; +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +line 404 +;404: t1 = 1; +ADDRLP4 12 +CNSTF4 1065353216 +ASGNF4 +line 405 +;405: } +LABELV $325 +line 407 +;406: +;407: trap_R_DrawStretchPic( x, y, w, h, s0, t0, s1, t1, hShader ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRFP4 8 +INDIRF4 +ARGF4 +ADDRFP4 12 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 4 +INDIRF4 +ARGF4 +ADDRLP4 12 +INDIRF4 +ARGF4 +ADDRFP4 16 +INDIRI4 +ARGI4 +ADDRGP4 trap_R_DrawStretchPic +CALLV +pop +line 408 +;408:} +LABELV $321 +endproc UI_DrawHandlePic 16 36 +export UI_FillRect +proc UI_FillRect 4 36 +line 417 +;409: +;410:/* +;411:================ +;412:UI_FillRect +;413: +;414:Coordinates are 640*480 virtual values +;415:================= +;416:*/ +;417:void UI_FillRect( float x, float y, float width, float height, const float *color ) { +line 418 +;418: trap_R_SetColor( color ); +ADDRFP4 16 +INDIRP4 +ARGP4 +ADDRGP4 trap_R_SetColor +CALLV +pop +line 420 +;419: +;420: trap_R_DrawStretchPic( x, y, width, height, 0, 0, 0, 0, uiInfo.uiDC.whiteShader ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRFP4 8 +INDIRF4 +ARGF4 +ADDRFP4 12 +INDIRF4 +ARGF4 +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRGP4 uiInfo+11792 +INDIRI4 +ARGI4 +ADDRGP4 trap_R_DrawStretchPic +CALLV +pop +line 422 +;421: +;422: trap_R_SetColor( NULL ); +CNSTP4 0 +ARGP4 +ADDRGP4 trap_R_SetColor +CALLV +pop +line 423 +;423:} +LABELV $326 +endproc UI_FillRect 4 36 +export UI_DrawSides +proc UI_DrawSides 12 36 +line 425 +;424: +;425:void UI_DrawSides(float x, float y, float w, float h) { +line 426 +;426: trap_R_DrawStretchPic( x, y, 1, h, 0, 0, 0, 0, uiInfo.uiDC.whiteShader ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRF4 +ARGF4 +CNSTF4 1065353216 +ARGF4 +ADDRFP4 12 +INDIRF4 +ARGF4 +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRGP4 uiInfo+11792 +INDIRI4 +ARGI4 +ADDRGP4 trap_R_DrawStretchPic +CALLV +pop +line 427 +;427: trap_R_DrawStretchPic( x + w - 1, y, 1, h, 0, 0, 0, 0, uiInfo.uiDC.whiteShader ); +ADDRLP4 4 +CNSTF4 1065353216 +ASGNF4 +ADDRFP4 0 +INDIRF4 +ADDRFP4 8 +INDIRF4 +ADDF4 +ADDRLP4 4 +INDIRF4 +SUBF4 +ARGF4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRLP4 4 +INDIRF4 +ARGF4 +ADDRFP4 12 +INDIRF4 +ARGF4 +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRGP4 uiInfo+11792 +INDIRI4 +ARGI4 +ADDRGP4 trap_R_DrawStretchPic +CALLV +pop +line 428 +;428:} +LABELV $328 +endproc UI_DrawSides 12 36 +export UI_DrawTopBottom +proc UI_DrawTopBottom 12 36 +line 430 +;429: +;430:void UI_DrawTopBottom(float x, float y, float w, float h) { +line 431 +;431: trap_R_DrawStretchPic( x, y, w, 1, 0, 0, 0, 0, uiInfo.uiDC.whiteShader ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRFP4 8 +INDIRF4 +ARGF4 +CNSTF4 1065353216 +ARGF4 +ADDRLP4 0 +CNSTF4 0 +ASGNF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRLP4 0 +INDIRF4 +ARGF4 +ADDRGP4 uiInfo+11792 +INDIRI4 +ARGI4 +ADDRGP4 trap_R_DrawStretchPic +CALLV +pop +line 432 +;432: trap_R_DrawStretchPic( x, y + h - 1, w, 1, 0, 0, 0, 0, uiInfo.uiDC.whiteShader ); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRLP4 4 +CNSTF4 1065353216 +ASGNF4 +ADDRFP4 4 +INDIRF4 +ADDRFP4 12 +INDIRF4 +ADDF4 +ADDRLP4 4 +INDIRF4 +SUBF4 +ARGF4 +ADDRFP4 8 +INDIRF4 +ARGF4 +ADDRLP4 4 +INDIRF4 +ARGF4 +ADDRLP4 8 +CNSTF4 0 +ASGNF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRLP4 8 +INDIRF4 +ARGF4 +ADDRGP4 uiInfo+11792 +INDIRI4 +ARGI4 +ADDRGP4 trap_R_DrawStretchPic +CALLV +pop +line 433 +;433:} +LABELV $331 +endproc UI_DrawTopBottom 12 36 +export UI_DrawRect +proc UI_DrawRect 0 16 +line 441 +;434:/* +;435:================ +;436:UI_DrawRect +;437: +;438:Coordinates are 640*480 virtual values +;439:================= +;440:*/ +;441:void UI_DrawRect( float x, float y, float width, float height, const float *color ) { +line 442 +;442: trap_R_SetColor( color ); +ADDRFP4 16 +INDIRP4 +ARGP4 +ADDRGP4 trap_R_SetColor +CALLV +pop +line 444 +;443: +;444: UI_DrawTopBottom(x, y, width, height); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRFP4 8 +INDIRF4 +ARGF4 +ADDRFP4 12 +INDIRF4 +ARGF4 +ADDRGP4 UI_DrawTopBottom +CALLV +pop +line 445 +;445: UI_DrawSides(x, y, width, height); +ADDRFP4 0 +INDIRF4 +ARGF4 +ADDRFP4 4 +INDIRF4 +ARGF4 +ADDRFP4 8 +INDIRF4 +ARGF4 +ADDRFP4 12 +INDIRF4 +ARGF4 +ADDRGP4 UI_DrawSides +CALLV +pop +line 447 +;446: +;447: trap_R_SetColor( NULL ); +CNSTP4 0 +ARGP4 +ADDRGP4 trap_R_SetColor +CALLV +pop +line 448 +;448:} +LABELV $334 +endproc UI_DrawRect 0 16 +export UI_SetColor +proc UI_SetColor 0 4 +line 450 +;449: +;450:void UI_SetColor( const float *rgba ) { +line 451 +;451: trap_R_SetColor( rgba ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_R_SetColor +CALLV +pop +line 452 +;452:} +LABELV $335 +endproc UI_SetColor 0 4 +export UI_UpdateScreen +proc UI_UpdateScreen 0 0 +line 454 +;453: +;454:void UI_UpdateScreen( void ) { +line 455 +;455: trap_UpdateScreen(); +ADDRGP4 trap_UpdateScreen +CALLV +pop +line 456 +;456:} +LABELV $336 +endproc UI_UpdateScreen 0 0 +export UI_DrawTextBox +proc UI_DrawTextBox 24 20 +line 460 +;457: +;458: +;459:void UI_DrawTextBox (int x, int y, int width, int lines) +;460:{ +line 461 +;461: UI_FillRect( x + BIGCHAR_WIDTH/2, y + BIGCHAR_HEIGHT/2, ( width + 1 ) * BIGCHAR_WIDTH, ( lines + 1 ) * BIGCHAR_HEIGHT, colorBlack ); +ADDRLP4 0 +CNSTI4 8 +ASGNI4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 0 +INDIRI4 +ADDI4 +CVIF4 4 +ARGF4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +ADDI4 +CVIF4 4 +ARGF4 +ADDRLP4 4 +CNSTI4 4 +ASGNI4 +ADDRLP4 8 +CNSTI4 16 +ASGNI4 +ADDRFP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +LSHI4 +ADDRLP4 8 +INDIRI4 +ADDI4 +CVIF4 4 +ARGF4 +ADDRFP4 12 +INDIRI4 +ADDRLP4 4 +INDIRI4 +LSHI4 +ADDRLP4 8 +INDIRI4 +ADDI4 +CVIF4 4 +ARGF4 +ADDRGP4 colorBlack +ARGP4 +ADDRGP4 UI_FillRect +CALLV +pop +line 462 +;462: UI_DrawRect( x + BIGCHAR_WIDTH/2, y + BIGCHAR_HEIGHT/2, ( width + 1 ) * BIGCHAR_WIDTH, ( lines + 1 ) * BIGCHAR_HEIGHT, colorWhite ); +ADDRLP4 12 +CNSTI4 8 +ASGNI4 +ADDRFP4 0 +INDIRI4 +ADDRLP4 12 +INDIRI4 +ADDI4 +CVIF4 4 +ARGF4 +ADDRFP4 4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +ADDI4 +CVIF4 4 +ARGF4 +ADDRLP4 16 +CNSTI4 4 +ASGNI4 +ADDRLP4 20 +CNSTI4 16 +ASGNI4 +ADDRFP4 8 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LSHI4 +ADDRLP4 20 +INDIRI4 +ADDI4 +CVIF4 4 +ARGF4 +ADDRFP4 12 +INDIRI4 +ADDRLP4 16 +INDIRI4 +LSHI4 +ADDRLP4 20 +INDIRI4 +ADDI4 +CVIF4 4 +ARGF4 +ADDRGP4 colorWhite +ARGP4 +ADDRGP4 UI_DrawRect +CALLV +pop +line 463 +;463:} +LABELV $337 +endproc UI_DrawTextBox 24 20 +export UI_CursorInRect +proc UI_CursorInRect 8 0 +line 466 +;464: +;465:qboolean UI_CursorInRect (int x, int y, int width, int height) +;466:{ +line 467 +;467: if (uiInfo.uiDC.cursorx < x || +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRGP4 uiInfo+240 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LTI4 $347 +ADDRLP4 4 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRGP4 uiInfo+244 +INDIRI4 +ADDRLP4 4 +INDIRI4 +LTI4 $347 +ADDRGP4 uiInfo+240 +INDIRI4 +ADDRLP4 0 +INDIRI4 +ADDRFP4 8 +INDIRI4 +ADDI4 +GTI4 $347 +ADDRGP4 uiInfo+244 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDRFP4 12 +INDIRI4 +ADDI4 +LEI4 $339 +LABELV $347 +line 471 +;468: uiInfo.uiDC.cursory < y || +;469: uiInfo.uiDC.cursorx > x+width || +;470: uiInfo.uiDC.cursory > y+height) +;471: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $338 +JUMPV +LABELV $339 +line 473 +;472: +;473: return qtrue; +CNSTI4 1 +RETI4 +LABELV $338 +endproc UI_CursorInRect 8 0 +import UI_RankStatusMenu +import RankStatus_Cache +import UI_SignupMenu +import Signup_Cache +import UI_LoginMenu +import Login_Cache +import UI_InitGameinfo +import UI_SPUnlockMedals_f +import UI_SPUnlock_f +import UI_GetAwardLevel +import UI_LogAwardData +import UI_NewGame +import UI_GetCurrentGame +import UI_CanShowTierVideo +import UI_ShowTierVideo +import UI_TierCompleted +import UI_SetBestScore +import UI_GetBestScore +import UI_GetBotNameByNumber +import UI_LoadBots +import UI_GetNumBots +import UI_GetBotInfoByName +import UI_GetBotInfoByNumber +import UI_GetNumSPTiers +import UI_GetNumSPArenas +import UI_GetNumArenas +import UI_GetSpecialArenaInfo +import UI_GetArenaInfoByMap +import UI_GetArenaInfoByNumber +import UI_NetworkOptionsMenu +import UI_NetworkOptionsMenu_Cache +import UI_SoundOptionsMenu +import UI_SoundOptionsMenu_Cache +import UI_DisplayOptionsMenu +import UI_DisplayOptionsMenu_Cache +import UI_SaveConfigMenu +import UI_SaveConfigMenu_Cache +import UI_LoadConfigMenu +import UI_LoadConfig_Cache +import UI_TeamOrdersMenu_Cache +import UI_TeamOrdersMenu_f +import UI_TeamOrdersMenu +import UI_RemoveBotsMenu +import UI_RemoveBots_Cache +import UI_AddBotsMenu +import UI_AddBots_Cache +import trap_G2API_SetBoneAngles +import trap_R_RemapShader +import trap_RealTime +import trap_CIN_SetExtents +import trap_CIN_DrawCinematic +import trap_CIN_RunCinematic +import trap_CIN_StopCinematic +import trap_CIN_PlayCinematic +import trap_S_StartBackgroundTrack +import trap_S_StopBackgroundTrack +import trap_AnyLanguage_ReadCharFromString +import trap_R_Font_DrawString +import trap_R_Font_HeightPixels +import trap_R_Font_StrLenChars +import trap_R_Font_StrLenPixels +import trap_R_RegisterFont +import trap_MemoryRemaining +import trap_LAN_CompareServers +import trap_LAN_ServerStatus +import trap_LAN_ResetPings +import trap_LAN_RemoveServer +import trap_LAN_AddServer +import trap_LAN_UpdateVisiblePings +import trap_LAN_ServerIsVisible +import trap_LAN_MarkServerVisible +import trap_LAN_SaveCachedServers +import trap_LAN_LoadCachedServers +import trap_LAN_GetPingInfo +import trap_LAN_GetPing +import trap_LAN_ClearPing +import trap_LAN_GetPingQueueCount +import trap_LAN_GetServerPing +import trap_LAN_GetServerInfo +import trap_LAN_GetServerAddressString +import trap_LAN_GetServerCount +import trap_GetConfigString +import trap_GetGlconfig +import trap_GetClientState +import trap_GetClipboardData +import trap_Key_SetCatcher +import trap_Key_GetCatcher +import trap_Key_ClearStates +import trap_Key_SetOverstrikeMode +import trap_Key_GetOverstrikeMode +import trap_Key_IsDown +import trap_Key_SetBinding +import trap_Key_GetBindingBuf +import trap_Key_KeynumToStringBuf +import trap_S_RegisterSound +import trap_S_StartLocalSound +import trap_CM_LerpTag +import trap_UpdateScreen +import trap_R_ModelBounds +import trap_R_DrawStretchPic +import trap_R_SetColor +import trap_R_RenderScene +import trap_R_AddLightToScene +import trap_R_AddPolyToScene +import trap_R_AddRefEntityToScene +import trap_R_ClearScene +import trap_R_RegisterShaderNoMip +import trap_R_RegisterSkin +import trap_R_RegisterModel +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Cmd_ExecuteText +import trap_Argv +import trap_Argc +import trap_Cvar_InfoStringBuffer +import trap_Cvar_Create +import trap_Cvar_Reset +import trap_Cvar_SetValue +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_Milliseconds +import trap_Error +import trap_Print +import UI_SPSkillMenu_Cache +import UI_SPSkillMenu +import UI_SPPostgameMenu_f +import UI_SPPostgameMenu_Cache +import UI_SPArena_Start +import UI_SPLevelMenu_ReInit +import UI_SPLevelMenu_f +import UI_SPLevelMenu +import UI_SPLevelMenu_Cache +import uis +bss +export m_entersound +align 4 +LABELV m_entersound +skip 4 +import UI_ForceMenuOff +import UI_PopMenu +import UI_PushMenu +import UI_SetActiveMenu +import UI_IsFullscreen +import UI_DrawChar +import UI_DrawString +import UI_ProportionalStringWidth +import UI_DrawProportionalString +import UI_ProportionalSizeScale +import UI_DrawBannerString +import UI_LerpColor +import UI_Refresh +import UI_MouseEvent +import UI_KeyEvent +import UI_Init +import uiInfo +import DriverInfo_Cache +import GraphicsOptions_Cache +import UI_GraphicsOptionsMenu +import ServerInfo_Cache +import UI_ServerInfoMenu +import UI_BotSelectMenu_Cache +import UI_BotSelectMenu +import ServerOptions_Cache +import StartServer_Cache +import UI_StartServerMenu +import ArenaServers_Cache +import UI_ArenaServersMenu +import SpecifyServer_Cache +import UI_SpecifyServerMenu +import SpecifyLeague_Cache +import UI_SpecifyLeagueMenu +import Preferences_Cache +import UI_PreferencesMenu +import PlayerSettings_Cache +import UI_PlayerSettingsMenu +import PlayerModel_Cache +import UI_PlayerModelMenu +import UI_CDKeyMenu_f +import UI_CDKeyMenu_Cache +import UI_CDKeyMenu +import UI_ModsMenu_Cache +import UI_ModsMenu +import UI_CinematicsMenu_Cache +import UI_CinematicsMenu_f +import UI_CinematicsMenu +import Demos_Cache +import UI_DemosMenu +import Controls_Cache +import UI_ControlsMenu +import UI_DrawConnectScreen +import TeamMain_Cache +import UI_TeamMainMenu +import UI_SetupMenu +import UI_SetupMenu_Cache +import UI_ConfirmMenu +import ConfirmMenu_Cache +import UI_InGameMenu +import InGame_Cache +import UI_CreditMenu +import UI_UpdateCvars +import UI_RegisterCvars +import UI_MainMenu +import MainMenu_Cache +import UI_LoadForceConfig_List +import UI_LoadArenas +import UI_ShowPostGame +import UI_AdjustTimeByGame +import _UI_SetActiveMenu +import UI_LoadMenus +import UI_Load +import UI_Report +import UI_FeederSelection +import MenuField_Key +import MenuField_Draw +import MenuField_Init +import MField_Draw +import MField_CharEvent +import MField_KeyDownEvent +import MField_Clear +import ui_medalSounds +import ui_medalPicNames +import ui_medalNames +import text_color_highlight +import text_color_normal +import text_color_disabled +import listbar_color +import list_color +import name_color +import color_dim +import color_red +import color_orange +import color_blue +import color_yellow +import color_white +import color_black +import menu_dim_color +import menu_black_color +import menu_red_color +import menu_highlight_color +import menu_dark_color +import menu_grayed_color +import menu_text_color +import weaponChangeSound +import menu_null_sound +import menu_buzz_sound +import menu_out_sound +import menu_move_sound +import menu_in_sound +import ScrollList_Key +import ScrollList_Draw +import Bitmap_Draw +import Bitmap_Init +import Menu_DefaultKey +import Menu_SetCursorToItem +import Menu_SetCursor +import Menu_ActivateItem +import Menu_ItemAtCursor +import Menu_Draw +import Menu_AdjustCursor +import Menu_AddItem +import Menu_Focus +import Menu_Cache +import ui_serverStatusTimeOut +import ui_bigFont +import ui_smallFont +import ui_scoreTime +import ui_scoreShutoutBonus +import ui_scoreSkillBonus +import ui_scoreTimeBonus +import ui_scoreBase +import ui_scoreTeam +import ui_scorePerfect +import ui_scoreScore +import ui_scoreGauntlets +import ui_scoreAssists +import ui_scoreDefends +import ui_scoreExcellents +import ui_scoreImpressives +import ui_scoreAccuracy +import ui_singlePlayerActive +import ui_lastServerRefresh_3 +import ui_lastServerRefresh_2 +import ui_lastServerRefresh_1 +import ui_lastServerRefresh_0 +import ui_selectedPlayerName +import ui_selectedPlayer +import ui_currentOpponent +import ui_mapIndex +import ui_currentNetMap +import ui_currentMap +import ui_currentTier +import ui_menuFiles +import ui_opponentName +import ui_dedicated +import ui_serverFilterType +import ui_netSource +import ui_joinGameType +import ui_actualNetGameType +import ui_netGameType +import ui_gameType +import ui_fragLimit +import ui_captureLimit +import ui_cdkeychecked +import ui_cdkey +import ui_server16 +import ui_server15 +import ui_server14 +import ui_server13 +import ui_server12 +import ui_server11 +import ui_server10 +import ui_server9 +import ui_server8 +import ui_server7 +import ui_server6 +import ui_server5 +import ui_server4 +import ui_server3 +import ui_server2 +import ui_server1 +import ui_marks +import ui_drawCrosshairNames +import ui_drawCrosshair +import ui_browserShowEmpty +import ui_browserShowFull +import ui_browserSortKey +import ui_browserGameType +import ui_browserMaster +import ui_spSelection +import ui_spSkill +import ui_spVideos +import ui_spAwards +import ui_spScores5 +import ui_spScores4 +import ui_spScores3 +import ui_spScores2 +import ui_spScores1 +import ui_botsFile +import ui_arenasFile +import ui_ctf_friendly +import ui_ctf_timelimit +import ui_ctf_capturelimit +import ui_team_friendly +import ui_team_timelimit +import ui_team_fraglimit +import ui_selectedModelIndex +import ui_tourney_timelimit +import ui_tourney_fraglimit +import ui_ffa_timelimit +import ui_ffa_fraglimit +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_PC_RemoveAllGlobalDefines +import trap_PC_LoadGlobalDefines +import trap_PC_SourceFileAndLine +import trap_PC_ReadToken +import trap_PC_FreeSource +import trap_PC_LoadSource +import trap_PC_AddGlobalDefine +import Controls_SetDefaults +import Controls_SetConfig +import Controls_GetConfig +import UI_OutOfMemory +import UI_InitMemory +import UI_Alloc +import Display_CacheAll +import Menu_SetFeederSelection +import Menu_Paint +import Menus_CloseAll +import LerpColor +import Display_HandleKey +import Menus_CloseByName +import Menus_ShowByName +import Menus_FindByName +import Menus_OpenByName +import Display_KeyBindPending +import Display_CursorType +import Display_MouseMove +import Display_CaptureItem +import Display_GetContext +import Menus_Activate +import Menus_AnyFullScreenVisible +import Menu_Reset +import Menus_ActivateByName +import Menu_PaintAll +import Menu_New +import Menu_Count +import PC_Script_Parse +import PC_String_Parse +import PC_Rect_Parse +import PC_Int_Parse +import PC_Color_Parse +import PC_Float_Parse +import Script_Parse +import String_Parse +import Rect_Parse +import Int_Parse +import Color_Parse +import Float_Parse +import Menu_ScrollFeeder +import Menu_HandleMouseMove +import Menu_HandleKey +import Menu_GetFocused +import Menu_PostParse +import Item_Init +import Menu_Init +import Display_ExpandMacros +import Init_Display +import String_Report +import String_Init +import String_Alloc +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $318 +char 1 117 +char 1 105 +char 1 95 +char 1 99 +char 1 100 +char 1 107 +char 1 101 +char 1 121 +char 1 0 +align 1 +LABELV $315 +char 1 117 +char 1 105 +char 1 95 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 79 +char 1 114 +char 1 100 +char 1 101 +char 1 114 +char 1 115 +char 1 0 +align 1 +LABELV $312 +char 1 117 +char 1 105 +char 1 95 +char 1 99 +char 1 97 +char 1 99 +char 1 104 +char 1 101 +char 1 0 +align 1 +LABELV $309 +char 1 112 +char 1 111 +char 1 115 +char 1 116 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $304 +char 1 114 +char 1 101 +char 1 109 +char 1 97 +char 1 112 +char 1 83 +char 1 104 +char 1 97 +char 1 100 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $301 +char 1 100 +char 1 101 +char 1 118 +char 1 101 +char 1 108 +char 1 111 +char 1 112 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $298 +char 1 117 +char 1 105 +char 1 95 +char 1 111 +char 1 112 +char 1 101 +char 1 110 +char 1 109 +char 1 101 +char 1 110 +char 1 117 +char 1 0 +align 1 +LABELV $295 +char 1 117 +char 1 105 +char 1 95 +char 1 108 +char 1 111 +char 1 97 +char 1 100 +char 1 0 +align 1 +LABELV $292 +char 1 117 +char 1 105 +char 1 95 +char 1 114 +char 1 101 +char 1 112 +char 1 111 +char 1 114 +char 1 116 +char 1 0 +align 1 +LABELV $289 +char 1 117 +char 1 105 +char 1 95 +char 1 116 +char 1 101 +char 1 115 +char 1 116 +char 1 0 +align 1 +LABELV $282 +char 1 117 +char 1 105 +char 1 95 +char 1 102 +char 1 114 +char 1 105 +char 1 101 +char 1 110 +char 1 100 +char 1 108 +char 1 121 +char 1 70 +char 1 105 +char 1 114 +char 1 101 +char 1 0 +align 1 +LABELV $281 +char 1 103 +char 1 95 +char 1 102 +char 1 114 +char 1 105 +char 1 101 +char 1 110 +char 1 100 +char 1 108 +char 1 121 +char 1 70 +char 1 105 +char 1 114 +char 1 101 +char 1 0 +align 1 +LABELV $280 +char 1 117 +char 1 105 +char 1 95 +char 1 112 +char 1 117 +char 1 114 +char 1 101 +char 1 0 +align 1 +LABELV $279 +char 1 115 +char 1 118 +char 1 95 +char 1 112 +char 1 117 +char 1 114 +char 1 101 +char 1 0 +align 1 +LABELV $278 +char 1 117 +char 1 105 +char 1 95 +char 1 87 +char 1 97 +char 1 114 +char 1 109 +char 1 117 +char 1 112 +char 1 0 +align 1 +LABELV $277 +char 1 103 +char 1 95 +char 1 87 +char 1 97 +char 1 114 +char 1 109 +char 1 117 +char 1 112 +char 1 0 +align 1 +LABELV $276 +char 1 117 +char 1 105 +char 1 95 +char 1 100 +char 1 111 +char 1 87 +char 1 97 +char 1 114 +char 1 109 +char 1 117 +char 1 112 +char 1 0 +align 1 +LABELV $275 +char 1 103 +char 1 95 +char 1 100 +char 1 111 +char 1 87 +char 1 97 +char 1 114 +char 1 109 +char 1 117 +char 1 112 +char 1 0 +align 1 +LABELV $274 +char 1 117 +char 1 105 +char 1 95 +char 1 100 +char 1 114 +char 1 97 +char 1 119 +char 1 84 +char 1 105 +char 1 109 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $273 +char 1 99 +char 1 103 +char 1 95 +char 1 100 +char 1 114 +char 1 97 +char 1 119 +char 1 84 +char 1 105 +char 1 109 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $272 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 97 +char 1 118 +char 1 101 +char 1 68 +char 1 117 +char 1 101 +char 1 108 +char 1 76 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $271 +char 1 100 +char 1 117 +char 1 101 +char 1 108 +char 1 95 +char 1 102 +char 1 114 +char 1 97 +char 1 103 +char 1 108 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $270 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 97 +char 1 118 +char 1 101 +char 1 70 +char 1 114 +char 1 97 +char 1 103 +char 1 76 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $269 +char 1 102 +char 1 114 +char 1 97 +char 1 103 +char 1 108 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $268 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 97 +char 1 118 +char 1 101 +char 1 67 +char 1 97 +char 1 112 +char 1 116 +char 1 117 +char 1 114 +char 1 101 +char 1 76 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $267 +char 1 99 +char 1 97 +char 1 112 +char 1 116 +char 1 117 +char 1 114 +char 1 101 +char 1 108 +char 1 105 +char 1 109 +char 1 105 +char 1 116 +char 1 0 +align 1 +LABELV $241 +char 1 103 +char 1 95 +char 1 115 +char 1 112 +char 1 83 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 0 +align 1 +LABELV $223 +char 1 117 +char 1 105 +char 1 95 +char 1 109 +char 1 97 +char 1 116 +char 1 99 +char 1 104 +char 1 83 +char 1 116 +char 1 97 +char 1 114 +char 1 116 +char 1 84 +char 1 105 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $206 +char 1 103 +char 1 95 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 116 +char 1 121 +char 1 112 +char 1 101 +char 1 0 +align 1 +LABELV $205 +char 1 109 +char 1 97 +char 1 112 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $202 +char 1 109 +char 1 111 +char 1 100 +char 1 101 +char 1 108 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $193 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 115 +char 1 47 +char 1 37 +char 1 115 +char 1 0 +align 1 +LABELV $184 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $183 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 115 +char 1 0 +align 1 +LABELV $177 +char 1 112 +char 1 114 +char 1 111 +char 1 116 +char 1 111 +char 1 99 +char 1 111 +char 1 108 +char 1 0 +align 1 +LABELV $176 +char 1 100 +char 1 101 +char 1 109 +char 1 111 +char 1 115 +char 1 47 +char 1 37 +char 1 115 +char 1 95 +char 1 37 +char 1 100 +char 1 46 +char 1 100 +char 1 109 +char 1 95 +char 1 37 +char 1 100 +char 1 0 +align 1 +LABELV $171 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 115 +char 1 47 +char 1 37 +char 1 115 +char 1 95 +char 1 37 +char 1 105 +char 1 46 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $169 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 67 +char 1 97 +char 1 112 +char 1 116 +char 1 117 +char 1 114 +char 1 101 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $168 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 84 +char 1 105 +char 1 109 +char 1 101 +char 1 50 +char 1 0 +align 1 +LABELV $167 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 83 +char 1 104 +char 1 117 +char 1 116 +char 1 111 +char 1 117 +char 1 116 +char 1 66 +char 1 111 +char 1 110 +char 1 117 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $166 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 83 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 66 +char 1 111 +char 1 110 +char 1 117 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $165 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 84 +char 1 105 +char 1 109 +char 1 101 +char 1 66 +char 1 111 +char 1 110 +char 1 117 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $164 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 66 +char 1 97 +char 1 115 +char 1 101 +char 1 50 +char 1 0 +align 1 +LABELV $163 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 84 +char 1 101 +char 1 97 +char 1 109 +char 1 50 +char 1 0 +align 1 +LABELV $162 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 80 +char 1 101 +char 1 114 +char 1 102 +char 1 101 +char 1 99 +char 1 116 +char 1 50 +char 1 0 +align 1 +LABELV $161 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 83 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 50 +char 1 0 +align 1 +LABELV $160 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 71 +char 1 97 +char 1 117 +char 1 110 +char 1 116 +char 1 108 +char 1 101 +char 1 116 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $159 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 65 +char 1 115 +char 1 115 +char 1 105 +char 1 115 +char 1 116 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $158 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 68 +char 1 101 +char 1 102 +char 1 101 +char 1 110 +char 1 100 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $157 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 69 +char 1 120 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 101 +char 1 110 +char 1 116 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $156 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 73 +char 1 109 +char 1 112 +char 1 114 +char 1 101 +char 1 115 +char 1 115 +char 1 105 +char 1 118 +char 1 101 +char 1 115 +char 1 50 +char 1 0 +align 1 +LABELV $155 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 65 +char 1 99 +char 1 99 +char 1 117 +char 1 114 +char 1 97 +char 1 99 +char 1 121 +char 1 50 +char 1 0 +align 1 +LABELV $152 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 67 +char 1 97 +char 1 112 +char 1 116 +char 1 117 +char 1 114 +char 1 101 +char 1 115 +char 1 0 +align 1 +LABELV $151 +char 1 37 +char 1 48 +char 1 50 +char 1 105 +char 1 58 +char 1 37 +char 1 48 +char 1 50 +char 1 105 +char 1 0 +align 1 +LABELV $150 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 84 +char 1 105 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $149 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 83 +char 1 104 +char 1 117 +char 1 116 +char 1 111 +char 1 117 +char 1 116 +char 1 66 +char 1 111 +char 1 110 +char 1 117 +char 1 115 +char 1 0 +align 1 +LABELV $148 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 83 +char 1 107 +char 1 105 +char 1 108 +char 1 108 +char 1 66 +char 1 111 +char 1 110 +char 1 117 +char 1 115 +char 1 0 +align 1 +LABELV $147 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 84 +char 1 105 +char 1 109 +char 1 101 +char 1 66 +char 1 111 +char 1 110 +char 1 117 +char 1 115 +char 1 0 +align 1 +LABELV $146 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 66 +char 1 97 +char 1 115 +char 1 101 +char 1 0 +align 1 +LABELV $145 +char 1 37 +char 1 105 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $144 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 84 +char 1 101 +char 1 97 +char 1 109 +char 1 0 +align 1 +LABELV $143 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 80 +char 1 101 +char 1 114 +char 1 102 +char 1 101 +char 1 99 +char 1 116 +char 1 0 +align 1 +LABELV $142 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 83 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 0 +align 1 +LABELV $141 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 71 +char 1 97 +char 1 117 +char 1 110 +char 1 116 +char 1 108 +char 1 101 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $140 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 65 +char 1 115 +char 1 115 +char 1 105 +char 1 115 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $139 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 68 +char 1 101 +char 1 102 +char 1 101 +char 1 110 +char 1 100 +char 1 115 +char 1 0 +align 1 +LABELV $138 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 69 +char 1 120 +char 1 99 +char 1 101 +char 1 108 +char 1 108 +char 1 101 +char 1 110 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $137 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $136 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 73 +char 1 109 +char 1 112 +char 1 114 +char 1 101 +char 1 115 +char 1 115 +char 1 105 +char 1 118 +char 1 101 +char 1 115 +char 1 0 +align 1 +LABELV $135 +char 1 37 +char 1 105 +char 1 37 +char 1 37 +char 1 0 +align 1 +LABELV $134 +char 1 117 +char 1 105 +char 1 95 +char 1 115 +char 1 99 +char 1 111 +char 1 114 +char 1 101 +char 1 65 +char 1 99 +char 1 99 +char 1 117 +char 1 114 +char 1 97 +char 1 99 +char 1 121 +char 1 0 +align 1 +LABELV $128 +char 1 100 +char 1 49 +char 1 10 +char 1 0 +align 1 +LABELV $119 +char 1 37 +char 1 115 +char 1 0 diff --git a/CODE-mp/ui/vm/ui_force.asm b/CODE-mp/ui/vm/ui_force.asm new file mode 100644 index 0000000..8ef6248 --- /dev/null +++ b/CODE-mp/ui/vm/ui_force.asm @@ -0,0 +1,7692 @@ +data +export uiForceSide +align 4 +LABELV uiForceSide +byte 4 1 +export uiForceRank +align 4 +LABELV uiForceRank +byte 4 6 +export uiMaxRank +align 4 +LABELV uiMaxRank +byte 4 7 +export uiMaxPoints +align 4 +LABELV uiMaxPoints +byte 4 20 +export uiForceUsed +align 4 +LABELV uiForceUsed +byte 4 0 +export uiForceAvailable +align 4 +LABELV uiForceAvailable +byte 4 0 +export gTouchedForce +align 4 +LABELV gTouchedForce +byte 4 0 +export uiForcePowersRank +align 4 +LABELV uiForcePowersRank +byte 4 0 +byte 4 1 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1 +byte 4 1 +byte 4 0 +export uiForcePowerDarkLight +align 4 +LABELV uiForcePowerDarkLight +byte 4 1 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 1 +byte 4 2 +byte 4 2 +byte 4 2 +byte 4 1 +byte 4 1 +byte 4 1 +byte 4 2 +byte 4 2 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +export UI_InitForceShaders +code +proc UI_InitForceShaders 96 4 +file "../ui_force.c" +line 73 +;1:// +;2:/* +;3:======================================================================= +;4: +;5:FORCE INTERFACE +;6: +;7:======================================================================= +;8:*/ +;9: +;10:// use this to get a demo build without an explicit demo build, i.e. to get the demo ui files to build +;11:#include "ui_local.h" +;12:#include "../qcommon/qfiles.h" +;13:#include "ui_force.h" +;14: +;15:int uiForceSide = FORCE_LIGHTSIDE; +;16:int uiForceRank = FORCE_MASTERY_JEDI_KNIGHT; +;17:int uiMaxRank = MAX_FORCE_RANK; +;18:int uiMaxPoints = 20; +;19:int uiForceUsed = 0; +;20:int uiForceAvailable=0; +;21: +;22:qboolean gTouchedForce = qfalse; +;23:vmCvar_t ui_freeSaber, ui_forcePowerDisable; +;24:void Menu_ShowItemByName(menuDef_t *menu, const char *p, qboolean bShow); +;25: +;26:int uiForcePowersRank[NUM_FORCE_POWERS] = { +;27: 0,//FP_HEAL = 0,//instant +;28: 1,//FP_LEVITATION,//hold/duration, this one defaults to 1 (gives a free point) +;29: 0,//FP_SPEED,//duration +;30: 0,//FP_PUSH,//hold/duration +;31: 0,//FP_PULL,//hold/duration +;32: 0,//FP_TELEPATHY,//instant +;33: 0,//FP_GRIP,//hold/duration +;34: 0,//FP_LIGHTNING,//hold/duration +;35: 0,//FP_RAGE,//duration +;36: 0,//FP_PROTECT, +;37: 0,//FP_ABSORB, +;38: 0,//FP_TEAM_HEAL, +;39: 0,//FP_TEAM_FORCE, +;40: 0,//FP_DRAIN, +;41: 0,//FP_SEE, +;42: 1,//FP_SABERATTACK, //default to 1 point in attack +;43: 1,//FP_SABERDEFEND, //defualt to 1 point in defense +;44: 0//FP_SABERTHROW, +;45:}; +;46: +;47:int uiForcePowerDarkLight[NUM_FORCE_POWERS] = //0 == neutral +;48:{ //nothing should be usable at rank 0.. +;49: FORCE_LIGHTSIDE,//FP_HEAL,//instant +;50: 0,//FP_LEVITATION,//hold/duration +;51: 0,//FP_SPEED,//duration +;52: 0,//FP_PUSH,//hold/duration +;53: 0,//FP_PULL,//hold/duration +;54: FORCE_LIGHTSIDE,//FP_TELEPATHY,//instant +;55: FORCE_DARKSIDE,//FP_GRIP,//hold/duration +;56: FORCE_DARKSIDE,//FP_LIGHTNING,//hold/duration +;57: FORCE_DARKSIDE,//FP_RAGE,//duration +;58: FORCE_LIGHTSIDE,//FP_PROTECT,//duration +;59: FORCE_LIGHTSIDE,//FP_ABSORB,//duration +;60: FORCE_LIGHTSIDE,//FP_TEAM_HEAL,//instant +;61: FORCE_DARKSIDE,//FP_TEAM_FORCE,//instant +;62: FORCE_DARKSIDE,//FP_DRAIN,//hold/duration +;63: 0,//FP_SEE,//duration +;64: 0,//FP_SABERATTACK, +;65: 0,//FP_SABERDEFEND, +;66: 0//FP_SABERTHROW, +;67: //NUM_FORCE_POWERS +;68:}; +;69: +;70:int uiForceStarShaders[NUM_FORCE_STAR_IMAGES][2]; +;71:int uiSaberColorShaders[NUM_SABER_COLORS]; +;72:void UI_InitForceShaders(void) +;73:{ +line 74 +;74: uiForceStarShaders[0][0] = trap_R_RegisterShaderNoMip("forcestar0"); +ADDRGP4 $150 +ARGP4 +ADDRLP4 0 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders +ADDRLP4 0 +INDIRI4 +ASGNI4 +line 75 +;75: uiForceStarShaders[0][1] = trap_R_RegisterShaderNoMip("forcestar0"); +ADDRGP4 $150 +ARGP4 +ADDRLP4 4 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+4 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 76 +;76: uiForceStarShaders[1][0] = trap_R_RegisterShaderNoMip("forcecircle1"); +ADDRGP4 $153 +ARGP4 +ADDRLP4 8 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+8 +ADDRLP4 8 +INDIRI4 +ASGNI4 +line 77 +;77: uiForceStarShaders[1][1] = trap_R_RegisterShaderNoMip("forcestar1"); +ADDRGP4 $156 +ARGP4 +ADDRLP4 12 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+8+4 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 78 +;78: uiForceStarShaders[2][0] = trap_R_RegisterShaderNoMip("forcecircle2"); +ADDRGP4 $158 +ARGP4 +ADDRLP4 16 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+16 +ADDRLP4 16 +INDIRI4 +ASGNI4 +line 79 +;79: uiForceStarShaders[2][1] = trap_R_RegisterShaderNoMip("forcestar2"); +ADDRGP4 $161 +ARGP4 +ADDRLP4 20 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+16+4 +ADDRLP4 20 +INDIRI4 +ASGNI4 +line 80 +;80: uiForceStarShaders[3][0] = trap_R_RegisterShaderNoMip("forcecircle3"); +ADDRGP4 $163 +ARGP4 +ADDRLP4 24 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+24 +ADDRLP4 24 +INDIRI4 +ASGNI4 +line 81 +;81: uiForceStarShaders[3][1] = trap_R_RegisterShaderNoMip("forcestar3"); +ADDRGP4 $166 +ARGP4 +ADDRLP4 28 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+24+4 +ADDRLP4 28 +INDIRI4 +ASGNI4 +line 82 +;82: uiForceStarShaders[4][0] = trap_R_RegisterShaderNoMip("forcecircle4"); +ADDRGP4 $168 +ARGP4 +ADDRLP4 32 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+32 +ADDRLP4 32 +INDIRI4 +ASGNI4 +line 83 +;83: uiForceStarShaders[4][1] = trap_R_RegisterShaderNoMip("forcestar4"); +ADDRGP4 $171 +ARGP4 +ADDRLP4 36 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+32+4 +ADDRLP4 36 +INDIRI4 +ASGNI4 +line 84 +;84: uiForceStarShaders[5][0] = trap_R_RegisterShaderNoMip("forcecircle5"); +ADDRGP4 $173 +ARGP4 +ADDRLP4 40 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+40 +ADDRLP4 40 +INDIRI4 +ASGNI4 +line 85 +;85: uiForceStarShaders[5][1] = trap_R_RegisterShaderNoMip("forcestar5"); +ADDRGP4 $176 +ARGP4 +ADDRLP4 44 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+40+4 +ADDRLP4 44 +INDIRI4 +ASGNI4 +line 86 +;86: uiForceStarShaders[6][0] = trap_R_RegisterShaderNoMip("forcecircle6"); +ADDRGP4 $178 +ARGP4 +ADDRLP4 48 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+48 +ADDRLP4 48 +INDIRI4 +ASGNI4 +line 87 +;87: uiForceStarShaders[6][1] = trap_R_RegisterShaderNoMip("forcestar6"); +ADDRGP4 $181 +ARGP4 +ADDRLP4 52 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+48+4 +ADDRLP4 52 +INDIRI4 +ASGNI4 +line 88 +;88: uiForceStarShaders[7][0] = trap_R_RegisterShaderNoMip("forcecircle7"); +ADDRGP4 $183 +ARGP4 +ADDRLP4 56 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+56 +ADDRLP4 56 +INDIRI4 +ASGNI4 +line 89 +;89: uiForceStarShaders[7][1] = trap_R_RegisterShaderNoMip("forcestar7"); +ADDRGP4 $186 +ARGP4 +ADDRLP4 60 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+56+4 +ADDRLP4 60 +INDIRI4 +ASGNI4 +line 90 +;90: uiForceStarShaders[8][0] = trap_R_RegisterShaderNoMip("forcecircle8"); +ADDRGP4 $188 +ARGP4 +ADDRLP4 64 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+64 +ADDRLP4 64 +INDIRI4 +ASGNI4 +line 91 +;91: uiForceStarShaders[8][1] = trap_R_RegisterShaderNoMip("forcestar8"); +ADDRGP4 $191 +ARGP4 +ADDRLP4 68 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiForceStarShaders+64+4 +ADDRLP4 68 +INDIRI4 +ASGNI4 +line 93 +;92: +;93: uiSaberColorShaders[SABER_RED] = trap_R_RegisterShaderNoMip("menu/art/saber_red"); +ADDRGP4 $192 +ARGP4 +ADDRLP4 72 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiSaberColorShaders +ADDRLP4 72 +INDIRI4 +ASGNI4 +line 94 +;94: uiSaberColorShaders[SABER_ORANGE] = trap_R_RegisterShaderNoMip("menu/art/saber_orange"); +ADDRGP4 $194 +ARGP4 +ADDRLP4 76 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiSaberColorShaders+4 +ADDRLP4 76 +INDIRI4 +ASGNI4 +line 95 +;95: uiSaberColorShaders[SABER_YELLOW] = trap_R_RegisterShaderNoMip("menu/art/saber_yellow"); +ADDRGP4 $196 +ARGP4 +ADDRLP4 80 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiSaberColorShaders+8 +ADDRLP4 80 +INDIRI4 +ASGNI4 +line 96 +;96: uiSaberColorShaders[SABER_GREEN] = trap_R_RegisterShaderNoMip("menu/art/saber_green"); +ADDRGP4 $198 +ARGP4 +ADDRLP4 84 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiSaberColorShaders+12 +ADDRLP4 84 +INDIRI4 +ASGNI4 +line 97 +;97: uiSaberColorShaders[SABER_BLUE] = trap_R_RegisterShaderNoMip("menu/art/saber_blue"); +ADDRGP4 $200 +ARGP4 +ADDRLP4 88 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiSaberColorShaders+16 +ADDRLP4 88 +INDIRI4 +ASGNI4 +line 98 +;98: uiSaberColorShaders[SABER_PURPLE] = trap_R_RegisterShaderNoMip("menu/art/saber_purple"); +ADDRGP4 $202 +ARGP4 +ADDRLP4 92 +ADDRGP4 trap_R_RegisterShaderNoMip +CALLI4 +ASGNI4 +ADDRGP4 uiSaberColorShaders+20 +ADDRLP4 92 +INDIRI4 +ASGNI4 +line 99 +;99:} +LABELV $149 +endproc UI_InitForceShaders 96 4 +export UI_DrawForceStars +proc UI_DrawForceStars 28 20 +line 103 +;100: +;101:// Draw the stars spent on the current force power +;102:void UI_DrawForceStars(rectDef_t *rect, float scale, vec4_t color, int textStyle, int forceindex, int val, int min, int max) +;103:{ +line 104 +;104: int i,pad = 4; +ADDRLP4 16 +CNSTI4 4 +ASGNI4 +line 105 +;105: int xPos,width = 16; +ADDRLP4 4 +CNSTI4 16 +ASGNI4 +line 108 +;106: int starcolor; +;107: +;108: if (val < min || val > max) +ADDRLP4 20 +ADDRFP4 20 +INDIRI4 +ASGNI4 +ADDRLP4 20 +INDIRI4 +ADDRFP4 24 +INDIRI4 +LTI4 $206 +ADDRLP4 20 +INDIRI4 +ADDRFP4 28 +INDIRI4 +LEI4 $204 +LABELV $206 +line 109 +;109: { +line 110 +;110: val = min; +ADDRFP4 20 +ADDRFP4 24 +INDIRI4 +ASGNI4 +line 111 +;111: } +LABELV $204 +line 113 +;112: +;113: if (1) // if (val) +line 114 +;114: { +line 115 +;115: xPos = rect->x; +ADDRLP4 8 +ADDRFP4 0 +INDIRP4 +INDIRF4 +CVFI4 4 +ASGNI4 +line 117 +;116: +;117: for (i=FORCE_LEVEL_1;i<=max;i++) +ADDRLP4 0 +CNSTI4 1 +ASGNI4 +ADDRGP4 $212 +JUMPV +LABELV $209 +line 118 +;118: { +line 119 +;119: starcolor = bgForcePowerCost[forceindex][i]; +ADDRLP4 12 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 16 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ASGNI4 +line 121 +;120: +;121: if (val >= i) +ADDRFP4 20 +INDIRI4 +ADDRLP4 0 +INDIRI4 +LTI4 $213 +line 122 +;122: { // Draw a star. +line 123 +;123: UI_DrawHandlePic( xPos, rect->y+6, width, width, uiForceStarShaders[starcolor][1] ); +ADDRLP4 8 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +CNSTF4 1086324736 +ADDF4 +ARGF4 +ADDRLP4 24 +ADDRLP4 4 +INDIRI4 +CVIF4 4 +ASGNF4 +ADDRLP4 24 +INDIRF4 +ARGF4 +ADDRLP4 24 +INDIRF4 +ARGF4 +ADDRLP4 12 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 uiForceStarShaders+4 +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 UI_DrawHandlePic +CALLV +pop +line 124 +;124: } +ADDRGP4 $214 +JUMPV +LABELV $213 +line 126 +;125: else +;126: { // Draw a circle. +line 127 +;127: UI_DrawHandlePic( xPos, rect->y+6, width, width, uiForceStarShaders[starcolor][0] ); +ADDRLP4 8 +INDIRI4 +CVIF4 4 +ARGF4 +ADDRFP4 0 +INDIRP4 +CNSTI4 4 +ADDP4 +INDIRF4 +CNSTF4 1086324736 +ADDF4 +ARGF4 +ADDRLP4 24 +ADDRLP4 4 +INDIRI4 +CVIF4 4 +ASGNF4 +ADDRLP4 24 +INDIRF4 +ARGF4 +ADDRLP4 24 +INDIRF4 +ARGF4 +ADDRLP4 12 +INDIRI4 +CNSTI4 3 +LSHI4 +ADDRGP4 uiForceStarShaders +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 UI_DrawHandlePic +CALLV +pop +line 128 +;128: } +LABELV $214 +line 129 +;129: xPos += width + pad; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 16 +INDIRI4 +ADDI4 +ADDI4 +ASGNI4 +line 130 +;130: } +LABELV $210 +line 117 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $212 +ADDRLP4 0 +INDIRI4 +ADDRFP4 28 +INDIRI4 +LEI4 $209 +line 131 +;131: } +LABELV $207 +line 132 +;132:} +LABELV $203 +endproc UI_DrawForceStars 28 20 +export UI_UpdateClientForcePowers +proc UI_UpdateClientForcePowers 12 84 +line 136 +;133: +;134:// Set the client's force power layout. +;135:void UI_UpdateClientForcePowers(const char *teamArg) +;136:{ +line 137 +;137: trap_Cvar_Set( "forcepowers", va("%i-%i-%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i", +ADDRGP4 $218 +ARGP4 +ADDRGP4 uiForceRank +INDIRI4 +ARGI4 +ADDRGP4 uiForceSide +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+4 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+8 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+12 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+16 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+20 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+24 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+28 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+32 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+36 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+40 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+44 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+48 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+52 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+56 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+60 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+64 +INDIRI4 +ARGI4 +ADDRGP4 uiForcePowersRank+68 +INDIRI4 +ARGI4 +ADDRLP4 0 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $217 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 146 +;138: uiForceRank, uiForceSide, uiForcePowersRank[0], uiForcePowersRank[1], +;139: uiForcePowersRank[2], uiForcePowersRank[3], uiForcePowersRank[4], +;140: uiForcePowersRank[5], uiForcePowersRank[6], uiForcePowersRank[7], +;141: uiForcePowersRank[8], uiForcePowersRank[9], uiForcePowersRank[10], +;142: uiForcePowersRank[11], uiForcePowersRank[12], uiForcePowersRank[13], +;143: uiForcePowersRank[14], uiForcePowersRank[15], uiForcePowersRank[16], +;144: uiForcePowersRank[17]) ); +;145: +;146: if (gTouchedForce) +ADDRGP4 gTouchedForce +INDIRI4 +CNSTI4 0 +EQI4 $236 +line 147 +;147: { +line 148 +;148: if (teamArg && teamArg[0]) +ADDRLP4 4 +ADDRFP4 0 +INDIRP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $238 +ADDRLP4 4 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $238 +line 149 +;149: { +line 150 +;150: trap_Cmd_ExecuteText( EXEC_APPEND, va("forcechanged \"%s\"\n", teamArg) ); +ADDRGP4 $240 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8 +ADDRGP4 va +CALLP4 +ASGNP4 +CNSTI4 2 +ARGI4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cmd_ExecuteText +CALLV +pop +line 151 +;151: } +ADDRGP4 $239 +JUMPV +LABELV $238 +line 153 +;152: else +;153: { +line 154 +;154: trap_Cmd_ExecuteText( EXEC_APPEND, "forcechanged\n" ); +CNSTI4 2 +ARGI4 +ADDRGP4 $241 +ARGP4 +ADDRGP4 trap_Cmd_ExecuteText +CALLV +pop +line 155 +;155: } +LABELV $239 +line 156 +;156: } +LABELV $236 +line 158 +;157: +;158: gTouchedForce = qfalse; +ADDRGP4 gTouchedForce +CNSTI4 0 +ASGNI4 +line 159 +;159:} +LABELV $216 +endproc UI_UpdateClientForcePowers 12 84 +export UI_TranslateFCFIndex +proc UI_TranslateFCFIndex 0 0 +line 162 +;160: +;161:int UI_TranslateFCFIndex(int index) +;162:{ +line 163 +;163: if (uiForceSide == FORCE_LIGHTSIDE) +ADDRGP4 uiForceSide +INDIRI4 +CNSTI4 1 +NEI4 $243 +line 164 +;164: { +line 165 +;165: return index-uiInfo.forceConfigLightIndexBegin; +ADDRFP4 0 +INDIRI4 +ADDRGP4 uiInfo+95056 +INDIRI4 +SUBI4 +RETI4 +ADDRGP4 $242 +JUMPV +LABELV $243 +line 168 +;166: } +;167: +;168: return index-uiInfo.forceConfigDarkIndexBegin; +ADDRFP4 0 +INDIRI4 +ADDRGP4 uiInfo+95052 +INDIRI4 +SUBI4 +RETI4 +LABELV $242 +endproc UI_TranslateFCFIndex 0 0 +export UI_SaveForceTemplate +proc UI_SaveForceTemplate 568 20 +line 172 +;169:} +;170: +;171:void UI_SaveForceTemplate() +;172:{ +line 173 +;173: char *selectedName = UI_Cvar_VariableString("ui_SaveFCF"); +ADDRGP4 $248 +ARGP4 +ADDRLP4 540 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRLP4 528 +ADDRLP4 540 +INDIRP4 +ASGNP4 +line 177 +;174: char fcfString[512]; +;175: char forceStringValue[4]; +;176: fileHandle_t f; +;177: int strPlace = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 178 +;178: int forcePlace = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 179 +;179: int i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 180 +;180: qboolean foundFeederItem = qfalse; +ADDRLP4 532 +CNSTI4 0 +ASGNI4 +line 182 +;181: +;182: if (!selectedName || !selectedName[0]) +ADDRLP4 528 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $251 +ADDRLP4 528 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $249 +LABELV $251 +line 183 +;183: { +line 184 +;184: Com_Printf("You did not provide a name for the template.\n"); +ADDRGP4 $252 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 185 +;185: return; +ADDRGP4 $247 +JUMPV +LABELV $249 +line 188 +;186: } +;187: +;188: if (uiForceSide == FORCE_LIGHTSIDE) +ADDRGP4 uiForceSide +INDIRI4 +CNSTI4 1 +NEI4 $253 +line 189 +;189: { //write it into the light side folder +line 190 +;190: trap_FS_FOpenFile(va("forcecfg/light/%s.fcf", selectedName), &f, FS_WRITE); +ADDRGP4 $255 +ARGP4 +ADDRLP4 528 +INDIRP4 +ARGP4 +ADDRLP4 548 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 548 +INDIRP4 +ARGP4 +ADDRLP4 536 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +pop +line 191 +;191: } +ADDRGP4 $254 +JUMPV +LABELV $253 +line 193 +;192: else +;193: { //if it isn't light it must be dark +line 194 +;194: trap_FS_FOpenFile(va("forcecfg/dark/%s.fcf", selectedName), &f, FS_WRITE); +ADDRGP4 $256 +ARGP4 +ADDRLP4 528 +INDIRP4 +ARGP4 +ADDRLP4 548 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 548 +INDIRP4 +ARGP4 +ADDRLP4 536 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +pop +line 195 +;195: } +LABELV $254 +line 197 +;196: +;197: if (!f) +ADDRLP4 536 +INDIRI4 +CNSTI4 0 +NEI4 $257 +line 198 +;198: { +line 199 +;199: Com_Printf("There was an error writing the template file (read-only?).\n"); +ADDRGP4 $259 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 200 +;200: return; +ADDRGP4 $247 +JUMPV +LABELV $257 +line 203 +;201: } +;202: +;203: Com_sprintf(fcfString, sizeof(fcfString), "%i-%i-", uiForceRank, uiForceSide); +ADDRLP4 16 +ARGP4 +CNSTI4 512 +ARGI4 +ADDRGP4 $260 +ARGP4 +ADDRGP4 uiForceRank +INDIRI4 +ARGI4 +ADDRGP4 uiForceSide +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 204 +;204: strPlace = strlen(fcfString); +ADDRLP4 16 +ARGP4 +ADDRLP4 548 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 548 +INDIRI4 +ASGNI4 +ADDRGP4 $262 +JUMPV +LABELV $261 +line 207 +;205: +;206: while (forcePlace < NUM_FORCE_POWERS) +;207: { +line 208 +;208: Com_sprintf(forceStringValue, sizeof(forceStringValue), "%i", uiForcePowersRank[forcePlace]); +ADDRLP4 8 +ARGP4 +CNSTI4 4 +ARGI4 +ADDRGP4 $264 +ARGP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 210 +;209: //Just use the force digit even if multiple digits. Shouldn't be longer than 1. +;210: fcfString[strPlace] = forceStringValue[0]; +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +ADDRLP4 8 +INDIRI1 +ASGNI1 +line 211 +;211: strPlace++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 212 +;212: forcePlace++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 213 +;213: } +LABELV $262 +line 206 +ADDRLP4 4 +INDIRI4 +CNSTI4 18 +LTI4 $261 +line 214 +;214: fcfString[strPlace] = '\n'; +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +CNSTI1 10 +ASGNI1 +line 215 +;215: fcfString[strPlace+1] = 0; +ADDRLP4 12 +INDIRI4 +ADDRLP4 16+1 +ADDP4 +CNSTI1 0 +ASGNI1 +line 217 +;216: +;217: trap_FS_Write(fcfString, strlen(fcfString), f); +ADDRLP4 16 +ARGP4 +ADDRLP4 552 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 16 +ARGP4 +ADDRLP4 552 +INDIRI4 +ARGI4 +ADDRLP4 536 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Write +CALLV +pop +line 218 +;218: trap_FS_FCloseFile(f); +ADDRLP4 536 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 220 +;219: +;220: Com_Printf("Template saved as \"%s\".\n", selectedName); +ADDRGP4 $266 +ARGP4 +ADDRLP4 528 +INDIRP4 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 223 +;221: +;222: //Now, update the FCF list +;223: UI_LoadForceConfig_List(); +ADDRGP4 UI_LoadForceConfig_List +CALLV +pop +ADDRGP4 $268 +JUMPV +LABELV $267 +line 227 +;224: +;225: //Then, scroll through and select the template for the file we just saved +;226: while (i < uiInfo.forceConfigCount) +;227: { +line 228 +;228: if (!Q_stricmp(uiInfo.forceConfigNames[i], selectedName)) +ADDRLP4 0 +INDIRI4 +CNSTI4 7 +LSHI4 +ADDRGP4 uiInfo+78156 +ADDP4 +ARGP4 +ADDRLP4 528 +INDIRP4 +ARGP4 +ADDRLP4 556 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 556 +INDIRI4 +CNSTI4 0 +NEI4 $271 +line 229 +;229: { +line 230 +;230: if ((uiForceSide == FORCE_LIGHTSIDE && uiInfo.forceConfigSide[i]) || +ADDRGP4 uiForceSide +INDIRI4 +CNSTI4 1 +NEI4 $279 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiInfo+94540 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $278 +LABELV $279 +ADDRLP4 560 +CNSTI4 2 +ASGNI4 +ADDRGP4 uiForceSide +INDIRI4 +ADDRLP4 560 +INDIRI4 +NEI4 $274 +ADDRLP4 0 +INDIRI4 +ADDRLP4 560 +INDIRI4 +LSHI4 +ADDRGP4 uiInfo+94540 +ADDP4 +INDIRI4 +CNSTI4 0 +NEI4 $274 +LABELV $278 +line 232 +;231: (uiForceSide == FORCE_DARKSIDE && !uiInfo.forceConfigSide[i])) +;232: { +line 233 +;233: Menu_SetFeederSelection(NULL, FEEDER_FORCECFG, UI_TranslateFCFIndex(i), NULL); +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 564 +ADDRGP4 UI_TranslateFCFIndex +CALLI4 +ASGNI4 +CNSTP4 0 +ARGP4 +CNSTI4 16 +ARGI4 +ADDRLP4 564 +INDIRI4 +ARGI4 +CNSTP4 0 +ARGP4 +ADDRGP4 Menu_SetFeederSelection +CALLV +pop +line 234 +;234: foundFeederItem = qtrue; +ADDRLP4 532 +CNSTI4 1 +ASGNI4 +line 235 +;235: } +LABELV $274 +line 236 +;236: } +LABELV $271 +line 238 +;237: +;238: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 239 +;239: } +LABELV $268 +line 226 +ADDRLP4 0 +INDIRI4 +ADDRGP4 uiInfo+78148 +INDIRI4 +LTI4 $267 +line 242 +;240: +;241: //Else, go back to 0 +;242: if (!foundFeederItem) +ADDRLP4 532 +INDIRI4 +CNSTI4 0 +NEI4 $280 +line 243 +;243: { +line 244 +;244: Menu_SetFeederSelection(NULL, FEEDER_FORCECFG, 0, NULL); +CNSTP4 0 +ARGP4 +CNSTI4 16 +ARGI4 +CNSTI4 0 +ARGI4 +CNSTP4 0 +ARGP4 +ADDRGP4 Menu_SetFeederSelection +CALLV +pop +line 245 +;245: } +LABELV $280 +line 246 +;246:} +LABELV $247 +endproc UI_SaveForceTemplate 568 20 +export UpdateForceUsed +proc UpdateForceUsed 28 12 +line 251 +;247: +;248:// +;249: +;250:void UpdateForceUsed() +;251:{ +line 256 +;252: int curpower, currank; +;253: menuDef_t *menu; +;254: +;255: // Currently we don't make a distinction between those that wish to play Jedi of lower than maximum skill. +;256: uiForceRank = uiMaxRank; +ADDRGP4 uiForceRank +ADDRGP4 uiMaxRank +INDIRI4 +ASGNI4 +line 258 +;257: +;258: uiForceUsed = 0; +ADDRGP4 uiForceUsed +CNSTI4 0 +ASGNI4 +line 259 +;259: uiForceAvailable = forceMasteryPoints[uiForceRank]; +ADDRGP4 uiForceAvailable +ADDRGP4 uiForceRank +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forceMasteryPoints +ADDP4 +INDIRI4 +ASGNI4 +line 262 +;260: +;261: // Make sure that we have one freebie in jump. +;262: if (uiForcePowersRank[FP_LEVITATION]<1) +ADDRGP4 uiForcePowersRank+4 +INDIRI4 +CNSTI4 1 +GEI4 $283 +line 263 +;263: { +line 264 +;264: uiForcePowersRank[FP_LEVITATION]=1; +ADDRGP4 uiForcePowersRank+4 +CNSTI4 1 +ASGNI4 +line 265 +;265: } +LABELV $283 +line 267 +;266: +;267: menu = Menus_FindByName("ingame_playerforce"); +ADDRGP4 $287 +ARGP4 +ADDRLP4 12 +ADDRGP4 Menus_FindByName +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 12 +INDIRP4 +ASGNP4 +line 269 +;268: // Set the cost of the saberattack according to whether its free. +;269: if (ui_freeSaber.integer) +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $288 +line 270 +;270: { // Make saber free +line 271 +;271: bgForcePowerCost[FP_SABERATTACK][FORCE_LEVEL_1] = 0; +ADDRGP4 bgForcePowerCost+240+4 +CNSTI4 0 +ASGNI4 +line 272 +;272: bgForcePowerCost[FP_SABERDEFEND][FORCE_LEVEL_1] = 0; +ADDRGP4 bgForcePowerCost+256+4 +CNSTI4 0 +ASGNI4 +line 274 +;273: // Make sure that we have one freebie in saber if applicable. +;274: if (uiForcePowersRank[FP_SABERATTACK]<1) +ADDRGP4 uiForcePowersRank+60 +INDIRI4 +CNSTI4 1 +GEI4 $295 +line 275 +;275: { +line 276 +;276: uiForcePowersRank[FP_SABERATTACK]=1; +ADDRGP4 uiForcePowersRank+60 +CNSTI4 1 +ASGNI4 +line 277 +;277: } +LABELV $295 +line 278 +;278: if (uiForcePowersRank[FP_SABERDEFEND]<1) +ADDRGP4 uiForcePowersRank+64 +INDIRI4 +CNSTI4 1 +GEI4 $299 +line 279 +;279: { +line 280 +;280: uiForcePowersRank[FP_SABERDEFEND]=1; +ADDRGP4 uiForcePowersRank+64 +CNSTI4 1 +ASGNI4 +line 281 +;281: } +LABELV $299 +line 282 +;282: if (menu) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $289 +line 283 +;283: { +line 284 +;284: Menu_ShowItemByName(menu, "setfp_saberdefend", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $305 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 285 +;285: Menu_ShowItemByName(menu, "setfp_saberthrow", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $306 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 286 +;286: Menu_ShowItemByName(menu, "effectentry", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $307 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 287 +;287: Menu_ShowItemByName(menu, "effectfield", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $308 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 288 +;288: Menu_ShowItemByName(menu, "nosaber", qfalse); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $309 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 289 +;289: } +line 290 +;290: } +ADDRGP4 $289 +JUMPV +LABELV $288 +line 292 +;291: else +;292: { // Make saber normal cost +line 293 +;293: bgForcePowerCost[FP_SABERATTACK][FORCE_LEVEL_1] = 1; +ADDRGP4 bgForcePowerCost+240+4 +CNSTI4 1 +ASGNI4 +line 294 +;294: bgForcePowerCost[FP_SABERDEFEND][FORCE_LEVEL_1] = 1; +ADDRGP4 bgForcePowerCost+256+4 +CNSTI4 1 +ASGNI4 +line 296 +;295: // Also, check if there is no saberattack. If there isn't, there had better not be any defense or throw! +;296: if (uiForcePowersRank[FP_SABERATTACK]<1) +ADDRGP4 uiForcePowersRank+60 +INDIRI4 +CNSTI4 1 +GEI4 $314 +line 297 +;297: { +line 298 +;298: uiForcePowersRank[FP_SABERDEFEND]=0; +ADDRGP4 uiForcePowersRank+64 +CNSTI4 0 +ASGNI4 +line 299 +;299: uiForcePowersRank[FP_SABERTHROW]=0; +ADDRGP4 uiForcePowersRank+68 +CNSTI4 0 +ASGNI4 +line 300 +;300: if (menu) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $315 +line 301 +;301: { +line 302 +;302: Menu_ShowItemByName(menu, "setfp_saberdefend", qfalse); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $305 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 303 +;303: Menu_ShowItemByName(menu, "setfp_saberthrow", qfalse); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $306 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 304 +;304: Menu_ShowItemByName(menu, "effectentry", qfalse); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $307 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 305 +;305: Menu_ShowItemByName(menu, "effectfield", qfalse); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $308 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 306 +;306: Menu_ShowItemByName(menu, "nosaber", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $309 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 307 +;307: } +line 308 +;308: } +ADDRGP4 $315 +JUMPV +LABELV $314 +line 310 +;309: else +;310: { +line 311 +;311: if (menu) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $321 +line 312 +;312: { +line 313 +;313: Menu_ShowItemByName(menu, "setfp_saberdefend", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $305 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 314 +;314: Menu_ShowItemByName(menu, "setfp_saberthrow", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $306 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 315 +;315: Menu_ShowItemByName(menu, "effectentry", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $307 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 316 +;316: Menu_ShowItemByName(menu, "effectfield", qtrue); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $308 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 317 +;317: Menu_ShowItemByName(menu, "nosaber", qfalse); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 $309 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRGP4 Menu_ShowItemByName +CALLV +pop +line 318 +;318: } +LABELV $321 +line 319 +;319: } +LABELV $315 +line 320 +;320: } +LABELV $289 +line 323 +;321: +;322: // Make sure that we're still legal. +;323: for (curpower=0;curpower=NUM_FORCE_POWER_LEVELS) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +CNSTI4 4 +LTI4 $329 +line 328 +;328: uiForcePowersRank[curpower]=(NUM_FORCE_POWER_LEVELS-1); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 3 +ASGNI4 +LABELV $329 +LABELV $328 +line 330 +;329: +;330: for (currank=FORCE_LEVEL_1;currank<=uiForcePowersRank[curpower];currank++) +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +ADDRGP4 $334 +JUMPV +LABELV $331 +line 331 +;331: { // Check on this force power +line 332 +;332: if (uiForcePowersRank[curpower]>0) +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +CNSTI4 0 +LEI4 $335 +line 333 +;333: { // Do not charge the player for the one freebie in jump, or if there is one in saber. +line 334 +;334: if ( (curpower == FP_LEVITATION && currank == FORCE_LEVEL_1) || +ADDRLP4 16 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 16 +INDIRI4 +NEI4 $342 +ADDRLP4 4 +INDIRI4 +ADDRLP4 16 +INDIRI4 +EQI4 $343 +LABELV $342 +ADDRLP4 0 +INDIRI4 +CNSTI4 15 +NEI4 $345 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $345 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +NEI4 $343 +LABELV $345 +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +NEI4 $337 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +NEI4 $337 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $337 +LABELV $343 +line 337 +;335: (curpower == FP_SABERATTACK && currank == FORCE_LEVEL_1 && ui_freeSaber.integer) || +;336: (curpower == FP_SABERDEFEND && currank == FORCE_LEVEL_1 && ui_freeSaber.integer) ) +;337: { +line 339 +;338: // Do nothing (written this way for clarity) +;339: } +ADDRGP4 $338 +JUMPV +LABELV $337 +line 341 +;340: else +;341: { // Check if we can accrue the cost of this power. +line 342 +;342: if (bgForcePowerCost[curpower][currank] > uiForceAvailable) +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDRGP4 uiForceAvailable +INDIRI4 +LEI4 $346 +line 343 +;343: { // We can't afford this power. Break to the next one. +line 345 +;344: // Remove this power from the player's roster. +;345: uiForcePowersRank[curpower] = currank-1; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 346 +;346: break; +ADDRGP4 $333 +JUMPV +LABELV $346 +line 349 +;347: } +;348: else +;349: { // Sure we can afford it. +line 350 +;350: uiForceUsed += bgForcePowerCost[curpower][currank]; +ADDRLP4 20 +ADDRGP4 uiForceUsed +ASGNP4 +ADDRLP4 20 +INDIRP4 +ADDRLP4 20 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 351 +;351: uiForceAvailable -= bgForcePowerCost[curpower][currank]; +ADDRLP4 24 +ADDRGP4 uiForceAvailable +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 352 +;352: } +line 353 +;353: } +LABELV $338 +line 354 +;354: } +LABELV $335 +line 355 +;355: } +LABELV $332 +line 330 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $334 +ADDRLP4 4 +INDIRI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +LEI4 $331 +LABELV $333 +line 356 +;356: } +LABELV $324 +line 323 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $323 +line 358 +;357: +;358:} +LABELV $282 +endproc UpdateForceUsed 28 12 +export UI_ReadLegalForce +proc UI_ReadLegalForce 1712 24 +line 364 +;359: +;360: +;361://Mostly parts of other functions merged into one another. +;362://Puts the current UI stuff into a string, legalizes it, and then reads it back out. +;363:void UI_ReadLegalForce(void) +;364:{ +line 367 +;365: char fcfString[512]; +;366: char forceStringValue[4]; +;367: int strPlace = 0; +ADDRLP4 604 +CNSTI4 0 +ASGNI4 +line 368 +;368: int forcePlace = 0; +ADDRLP4 596 +CNSTI4 0 +ASGNI4 +line 369 +;369: int i = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 372 +;370: char singleBuf[64]; +;371: char info[MAX_INFO_VALUE]; +;372: int c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 373 +;373: int iBuf = 0; +ADDRLP4 592 +CNSTI4 0 +ASGNI4 +line 374 +;374: int forcePowerRank = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 375 +;375: int currank = 0; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +line 376 +;376: int forceTeam = 0; +ADDRLP4 1636 +CNSTI4 0 +ASGNI4 +line 377 +;377: qboolean updateForceLater = qfalse; +ADDRLP4 1632 +CNSTI4 0 +ASGNI4 +line 380 +;378: +;379: //First, stick them into a string. +;380: Com_sprintf(fcfString, sizeof(fcfString), "%i-%i-", uiForceRank, uiForceSide); +ADDRLP4 16 +ARGP4 +CNSTI4 512 +ARGI4 +ADDRGP4 $260 +ARGP4 +ADDRGP4 uiForceRank +INDIRI4 +ARGI4 +ADDRGP4 uiForceSide +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 381 +;381: strPlace = strlen(fcfString); +ADDRLP4 16 +ARGP4 +ADDRLP4 1640 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 604 +ADDRLP4 1640 +INDIRI4 +ASGNI4 +ADDRGP4 $350 +JUMPV +LABELV $349 +line 384 +;382: +;383: while (forcePlace < NUM_FORCE_POWERS) +;384: { +line 385 +;385: Com_sprintf(forceStringValue, sizeof(forceStringValue), "%i", uiForcePowersRank[forcePlace]); +ADDRLP4 600 +ARGP4 +CNSTI4 4 +ARGI4 +ADDRGP4 $264 +ARGP4 +ADDRLP4 596 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +ARGI4 +ADDRGP4 Com_sprintf +CALLV +pop +line 387 +;386: //Just use the force digit even if multiple digits. Shouldn't be longer than 1. +;387: fcfString[strPlace] = forceStringValue[0]; +ADDRLP4 604 +INDIRI4 +ADDRLP4 16 +ADDP4 +ADDRLP4 600 +INDIRI1 +ASGNI1 +line 388 +;388: strPlace++; +ADDRLP4 604 +ADDRLP4 604 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 389 +;389: forcePlace++; +ADDRLP4 596 +ADDRLP4 596 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 390 +;390: } +LABELV $350 +line 383 +ADDRLP4 596 +INDIRI4 +CNSTI4 18 +LTI4 $349 +line 391 +;391: fcfString[strPlace] = '\n'; +ADDRLP4 604 +INDIRI4 +ADDRLP4 16 +ADDP4 +CNSTI1 10 +ASGNI1 +line 392 +;392: fcfString[strPlace+1] = 0; +ADDRLP4 604 +INDIRI4 +ADDRLP4 16+1 +ADDP4 +CNSTI1 0 +ASGNI1 +line 394 +;393: +;394: info[0] = '\0'; +ADDRLP4 608 +CNSTI1 0 +ASGNI1 +line 395 +;395: trap_GetConfigString(CS_SERVERINFO, info, sizeof(info)); +CNSTI4 0 +ARGI4 +ADDRLP4 608 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetConfigString +CALLI4 +pop +line 397 +;396: +;397: if (atoi( Info_ValueForKey( info, "g_forceBasedTeams" ) )) +ADDRLP4 608 +ARGP4 +ADDRGP4 $355 +ARGP4 +ADDRLP4 1644 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1644 +INDIRP4 +ARGP4 +ADDRLP4 1648 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 1648 +INDIRI4 +CNSTI4 0 +EQI4 $353 +line 398 +;398: { +line 399 +;399: switch((int)(trap_Cvar_VariableValue("ui_myteam"))) +ADDRGP4 $358 +ARGP4 +ADDRLP4 1656 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 1652 +ADDRLP4 1656 +INDIRF4 +CVFI4 4 +ASGNI4 +ADDRLP4 1652 +INDIRI4 +CNSTI4 1 +EQI4 $360 +ADDRLP4 1652 +INDIRI4 +CNSTI4 2 +EQI4 $361 +ADDRGP4 $357 +JUMPV +line 400 +;400: { +LABELV $360 +line 402 +;401: case TEAM_RED: +;402: forceTeam = FORCE_DARKSIDE; +ADDRLP4 1636 +CNSTI4 2 +ASGNI4 +line 403 +;403: break; +ADDRGP4 $357 +JUMPV +LABELV $361 +line 405 +;404: case TEAM_BLUE: +;405: forceTeam = FORCE_LIGHTSIDE; +ADDRLP4 1636 +CNSTI4 1 +ASGNI4 +line 406 +;406: break; +line 408 +;407: default: +;408: break; +LABELV $357 +line 410 +;409: } +;410: } +LABELV $353 +line 412 +;411: //Second, legalize them. +;412: if (!BG_LegalizedForcePowers(fcfString, uiMaxRank, ui_freeSaber.integer, forceTeam, atoi( Info_ValueForKey( info, "g_gametype" )), 0)) +ADDRLP4 608 +ARGP4 +ADDRGP4 $365 +ARGP4 +ADDRLP4 1652 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1652 +INDIRP4 +ARGP4 +ADDRLP4 1656 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16 +ARGP4 +ADDRGP4 uiMaxRank +INDIRI4 +ARGI4 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +ARGI4 +ADDRLP4 1636 +INDIRI4 +ARGI4 +ADDRLP4 1656 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRLP4 1660 +ADDRGP4 BG_LegalizedForcePowers +CALLI4 +ASGNI4 +ADDRLP4 1660 +INDIRI4 +CNSTI4 0 +NEI4 $362 +line 413 +;413: { //if they were illegal, we should refresh them. +line 414 +;414: updateForceLater = qtrue; +ADDRLP4 1632 +CNSTI4 1 +ASGNI4 +line 415 +;415: } +LABELV $362 +line 418 +;416: +;417: //Lastly, put them back into the UI storage from the legalized string +;418: i = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRGP4 $367 +JUMPV +LABELV $366 +line 421 +;419: +;420: while (fcfString[i] && fcfString[i] != '-') +;421: { +line 422 +;422: singleBuf[c] = fcfString[i]; +ADDRLP4 0 +INDIRI4 +ADDRLP4 528 +ADDP4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +ASGNI1 +line 423 +;423: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 424 +;424: i++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 425 +;425: } +LABELV $367 +line 420 +ADDRLP4 1664 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 1664 +INDIRI4 +CNSTI4 0 +EQI4 $369 +ADDRLP4 1664 +INDIRI4 +CNSTI4 45 +NEI4 $366 +LABELV $369 +line 426 +;426: singleBuf[c] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 528 +ADDP4 +CNSTI1 0 +ASGNI1 +line 427 +;427: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 428 +;428: i++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 430 +;429: +;430: iBuf = atoi(singleBuf); +ADDRLP4 528 +ARGP4 +ADDRLP4 1668 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 592 +ADDRLP4 1668 +INDIRI4 +ASGNI4 +line 432 +;431: +;432: if (iBuf > uiMaxRank || iBuf < 0) +ADDRLP4 592 +INDIRI4 +ADDRGP4 uiMaxRank +INDIRI4 +GTI4 $372 +ADDRLP4 592 +INDIRI4 +CNSTI4 0 +GEI4 $370 +LABELV $372 +line 433 +;433: { //this force config uses a rank level higher than our currently restricted level.. so we can't use it +line 436 +;434: //FIXME: Print a message indicating this to the user +;435: // return; +;436: } +LABELV $370 +line 438 +;437: +;438: uiForceRank = iBuf; +ADDRGP4 uiForceRank +ADDRLP4 592 +INDIRI4 +ASGNI4 +ADDRGP4 $374 +JUMPV +LABELV $373 +line 441 +;439: +;440: while (fcfString[i] && fcfString[i] != '-') +;441: { +line 442 +;442: singleBuf[c] = fcfString[i]; +ADDRLP4 0 +INDIRI4 +ADDRLP4 528 +ADDP4 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +ASGNI1 +line 443 +;443: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 444 +;444: i++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 445 +;445: } +LABELV $374 +line 440 +ADDRLP4 1676 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 1676 +INDIRI4 +CNSTI4 0 +EQI4 $376 +ADDRLP4 1676 +INDIRI4 +CNSTI4 45 +NEI4 $373 +LABELV $376 +line 446 +;446: singleBuf[c] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 528 +ADDP4 +CNSTI1 0 +ASGNI1 +line 447 +;447: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 448 +;448: i++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 450 +;449: +;450: uiForceSide = atoi(singleBuf); +ADDRLP4 528 +ARGP4 +ADDRLP4 1680 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRGP4 uiForceSide +ADDRLP4 1680 +INDIRI4 +ASGNI4 +line 452 +;451: +;452: if (uiForceSide != FORCE_LIGHTSIDE && +ADDRLP4 1684 +ADDRGP4 uiForceSide +INDIRI4 +ASGNI4 +ADDRLP4 1684 +INDIRI4 +CNSTI4 1 +EQI4 $380 +ADDRLP4 1684 +INDIRI4 +CNSTI4 2 +EQI4 $380 +line 454 +;453: uiForceSide != FORCE_DARKSIDE) +;454: { +line 455 +;455: uiForceSide = FORCE_LIGHTSIDE; +ADDRGP4 uiForceSide +CNSTI4 1 +ASGNI4 +line 456 +;456: return; +ADDRGP4 $348 +JUMPV +LABELV $379 +line 461 +;457: } +;458: +;459: //clear out the existing powers +;460: while (c < NUM_FORCE_POWERS) +;461: { +line 462 +;462: uiForcePowersRank[c] = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 0 +ASGNI4 +line 463 +;463: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 464 +;464: } +LABELV $380 +line 460 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $379 +line 465 +;465: uiForceUsed = 0; +ADDRGP4 uiForceUsed +CNSTI4 0 +ASGNI4 +line 466 +;466: uiForceAvailable = forceMasteryPoints[uiForceRank]; +ADDRGP4 uiForceAvailable +ADDRGP4 uiForceRank +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forceMasteryPoints +ADDP4 +INDIRI4 +ASGNI4 +line 467 +;467: gTouchedForce = qtrue; +ADDRGP4 gTouchedForce +CNSTI4 1 +ASGNI4 +line 469 +;468: +;469: for (c=0;fcfString[i]&&c FORCE_LEVEL_3 || forcePowerRank < 0) +ADDRLP4 8 +INDIRI4 +CNSTI4 3 +GTI4 $391 +ADDRLP4 8 +INDIRI4 +CNSTI4 0 +GEI4 $389 +LABELV $391 +line 483 +;483: { //err.. not correct +line 484 +;484: continue; // skip this power +ADDRGP4 $383 +JUMPV +LABELV $389 +line 487 +;485: } +;486: +;487: if (uiForcePowerDarkLight[c] && uiForcePowerDarkLight[c] != uiForceSide) +ADDRLP4 1696 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowerDarkLight +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 1696 +INDIRI4 +CNSTI4 0 +EQI4 $392 +ADDRLP4 1696 +INDIRI4 +ADDRGP4 uiForceSide +INDIRI4 +EQI4 $392 +line 488 +;488: { //Apparently the user has crafted a force config that has powers that don't fit with the config's side. +line 489 +;489: continue; // skip this power +ADDRGP4 $383 +JUMPV +LABELV $392 +line 493 +;490: } +;491: +;492: // Accrue cost for each assigned rank for this power. +;493: for (currank=FORCE_LEVEL_1;currank<=forcePowerRank;currank++) +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +ADDRGP4 $397 +JUMPV +LABELV $394 +line 494 +;494: { +line 495 +;495: if (bgForcePowerCost[c][currank] > uiForceAvailable) +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDRGP4 uiForceAvailable +INDIRI4 +LEI4 $398 +line 496 +;496: { // Break out, we can't afford any more power. +line 497 +;497: break; +ADDRGP4 $396 +JUMPV +LABELV $398 +line 500 +;498: } +;499: // Pay for this rank of this power. +;500: uiForceUsed += bgForcePowerCost[c][currank]; +ADDRLP4 1700 +ADDRGP4 uiForceUsed +ASGNP4 +ADDRLP4 1700 +INDIRP4 +ADDRLP4 1700 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 501 +;501: uiForceAvailable -= bgForcePowerCost[c][currank]; +ADDRLP4 1704 +ADDRGP4 uiForceAvailable +ASGNP4 +ADDRLP4 1704 +INDIRP4 +ADDRLP4 1704 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 503 +;502: +;503: uiForcePowersRank[c]++; +ADDRLP4 1708 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +ASGNP4 +ADDRLP4 1708 +INDIRP4 +ADDRLP4 1708 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 504 +;504: } +LABELV $395 +line 493 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $397 +ADDRLP4 4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +LEI4 $394 +LABELV $396 +line 505 +;505: } +LABELV $383 +line 469 +ADDRLP4 1688 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRLP4 1688 +INDIRI4 +ADDI4 +ASGNI4 +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +ADDRLP4 1688 +INDIRI4 +ADDI4 +ASGNI4 +LABELV $385 +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $400 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $382 +LABELV $400 +line 507 +;506: +;507: if (uiForcePowersRank[FP_LEVITATION] < 1) +ADDRGP4 uiForcePowersRank+4 +INDIRI4 +CNSTI4 1 +GEI4 $401 +line 508 +;508: { +line 509 +;509: uiForcePowersRank[FP_LEVITATION]=1; +ADDRGP4 uiForcePowersRank+4 +CNSTI4 1 +ASGNI4 +line 510 +;510: } +LABELV $401 +line 511 +;511: if (uiForcePowersRank[FP_SABERATTACK] < 1 && ui_freeSaber.integer) +ADDRGP4 uiForcePowersRank+60 +INDIRI4 +CNSTI4 1 +GEI4 $405 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $405 +line 512 +;512: { +line 513 +;513: uiForcePowersRank[FP_SABERATTACK]=1; +ADDRGP4 uiForcePowersRank+60 +CNSTI4 1 +ASGNI4 +line 514 +;514: } +LABELV $405 +line 515 +;515: if (uiForcePowersRank[FP_SABERDEFEND] < 1 && ui_freeSaber.integer) +ADDRGP4 uiForcePowersRank+64 +INDIRI4 +CNSTI4 1 +GEI4 $410 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $410 +line 516 +;516: { +line 517 +;517: uiForcePowersRank[FP_SABERDEFEND]=1; +ADDRGP4 uiForcePowersRank+64 +CNSTI4 1 +ASGNI4 +line 518 +;518: } +LABELV $410 +line 520 +;519: +;520: UpdateForceUsed(); +ADDRGP4 UpdateForceUsed +CALLV +pop +line 522 +;521: +;522: if (updateForceLater) +ADDRLP4 1632 +INDIRI4 +CNSTI4 0 +EQI4 $415 +line 523 +;523: { +line 524 +;524: gTouchedForce = qtrue; +ADDRGP4 gTouchedForce +CNSTI4 1 +ASGNI4 +line 525 +;525: UI_UpdateClientForcePowers(NULL); +CNSTP4 0 +ARGP4 +ADDRGP4 UI_UpdateClientForcePowers +CALLV +pop +line 526 +;526: } +LABELV $415 +line 527 +;527:} +LABELV $348 +endproc UI_ReadLegalForce 1712 24 +export UI_UpdateForcePowers +proc UI_UpdateForcePowers 324 4 +line 530 +;528: +;529:void UI_UpdateForcePowers() +;530:{ +line 531 +;531: char *forcePowers = UI_Cvar_VariableString("forcepowers"); +ADDRGP4 $217 +ARGP4 +ADDRLP4 272 +ADDRGP4 UI_Cvar_VariableString +CALLP4 +ASGNP4 +ADDRLP4 8 +ADDRLP4 272 +INDIRP4 +ASGNP4 +line 533 +;532: char readBuf[256]; +;533: int i = 0, i_f = 0, i_r = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 535 +;534: +;535: uiForceSide = 0; +ADDRGP4 uiForceSide +CNSTI4 0 +ASGNI4 +line 537 +;536: +;537: if (forcePowers && forcePowers[0]) +ADDRLP4 8 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $418 +ADDRLP4 8 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $418 +line 538 +;538: { +ADDRGP4 $421 +JUMPV +LABELV $420 +line 540 +;539: while (forcePowers[i]) +;540: { +line 541 +;541: i_r = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +ADDRGP4 $424 +JUMPV +LABELV $423 +line 544 +;542: +;543: while (forcePowers[i] && forcePowers[i] != '-' && i_r < 255) +;544: { +line 545 +;545: readBuf[i_r] = forcePowers[i]; +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 546 +;546: i_r++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 547 +;547: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 548 +;548: } +LABELV $424 +line 543 +ADDRLP4 280 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 280 +INDIRI4 +CNSTI4 0 +EQI4 $427 +ADDRLP4 280 +INDIRI4 +CNSTI4 45 +EQI4 $427 +ADDRLP4 12 +INDIRI4 +CNSTI4 255 +LTI4 $423 +LABELV $427 +line 549 +;549: readBuf[i_r] = '\0'; +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +CNSTI1 0 +ASGNI1 +line 550 +;550: if (i_r >= 255 || !forcePowers[i] || forcePowers[i] != '-') +ADDRLP4 12 +INDIRI4 +CNSTI4 255 +GEI4 $431 +ADDRLP4 284 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 284 +INDIRI4 +CNSTI4 0 +EQI4 $431 +ADDRLP4 284 +INDIRI4 +CNSTI4 45 +EQI4 $428 +LABELV $431 +line 551 +;551: { +line 552 +;552: uiForceSide = 0; +ADDRGP4 uiForceSide +CNSTI4 0 +ASGNI4 +line 553 +;553: goto validitycheck; +ADDRGP4 $432 +JUMPV +LABELV $428 +line 555 +;554: } +;555: uiForceRank = atoi(readBuf); +ADDRLP4 16 +ARGP4 +ADDRLP4 288 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRGP4 uiForceRank +ADDRLP4 288 +INDIRI4 +ASGNI4 +line 556 +;556: i_r = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 558 +;557: +;558: if (uiForceRank > uiMaxRank) +ADDRGP4 uiForceRank +INDIRI4 +ADDRGP4 uiMaxRank +INDIRI4 +LEI4 $433 +line 559 +;559: { +line 560 +;560: uiForceRank = uiMaxRank; +ADDRGP4 uiForceRank +ADDRGP4 uiMaxRank +INDIRI4 +ASGNI4 +line 561 +;561: } +LABELV $433 +line 563 +;562: +;563: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +ADDRGP4 $436 +JUMPV +LABELV $435 +line 566 +;564: +;565: while (forcePowers[i] && forcePowers[i] != '-' && i_r < 255) +;566: { +line 567 +;567: readBuf[i_r] = forcePowers[i]; +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 568 +;568: i_r++; +ADDRLP4 12 +ADDRLP4 12 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 569 +;569: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 570 +;570: } +LABELV $436 +line 565 +ADDRLP4 292 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 292 +INDIRI4 +CNSTI4 0 +EQI4 $439 +ADDRLP4 292 +INDIRI4 +CNSTI4 45 +EQI4 $439 +ADDRLP4 12 +INDIRI4 +CNSTI4 255 +LTI4 $435 +LABELV $439 +line 571 +;571: readBuf[i_r] = '\0'; +ADDRLP4 12 +INDIRI4 +ADDRLP4 16 +ADDP4 +CNSTI1 0 +ASGNI1 +line 572 +;572: if (i_r >= 255 || !forcePowers[i] || forcePowers[i] != '-') +ADDRLP4 12 +INDIRI4 +CNSTI4 255 +GEI4 $443 +ADDRLP4 296 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 296 +INDIRI4 +CNSTI4 0 +EQI4 $443 +ADDRLP4 296 +INDIRI4 +CNSTI4 45 +EQI4 $440 +LABELV $443 +line 573 +;573: { +line 574 +;574: uiForceSide = 0; +ADDRGP4 uiForceSide +CNSTI4 0 +ASGNI4 +line 575 +;575: goto validitycheck; +ADDRGP4 $432 +JUMPV +LABELV $440 +line 577 +;576: } +;577: uiForceSide = atoi(readBuf); +ADDRLP4 16 +ARGP4 +ADDRLP4 300 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRGP4 uiForceSide +ADDRLP4 300 +INDIRI4 +ASGNI4 +line 578 +;578: i_r = 0; +ADDRLP4 12 +CNSTI4 0 +ASGNI4 +line 580 +;579: +;580: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 582 +;581: +;582: i_f = FP_HEAL; +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $445 +JUMPV +LABELV $444 +line 585 +;583: +;584: while (forcePowers[i] && i_f < NUM_FORCE_POWERS) +;585: { +line 586 +;586: readBuf[0] = forcePowers[i]; +ADDRLP4 16 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +ASGNI1 +line 587 +;587: readBuf[1] = '\0'; +ADDRLP4 16+1 +CNSTI1 0 +ASGNI1 +line 588 +;588: uiForcePowersRank[i_f] = atoi(readBuf); +ADDRLP4 16 +ARGP4 +ADDRLP4 304 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +ADDRLP4 304 +INDIRI4 +ASGNI4 +line 590 +;589: +;590: if (i_f == FP_LEVITATION && +ADDRLP4 312 +CNSTI4 1 +ASGNI4 +ADDRLP4 4 +INDIRI4 +ADDRLP4 312 +INDIRI4 +NEI4 $448 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +ADDRLP4 312 +INDIRI4 +GEI4 $448 +line 592 +;591: uiForcePowersRank[i_f] < 1) +;592: { +line 593 +;593: uiForcePowersRank[i_f] = 1; +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 1 +ASGNI4 +line 594 +;594: } +LABELV $448 +line 596 +;595: +;596: if (i_f == FP_SABERATTACK && +ADDRLP4 4 +INDIRI4 +CNSTI4 15 +NEI4 $450 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +CNSTI4 1 +GEI4 $450 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $450 +line 599 +;597: uiForcePowersRank[i_f] < 1 && +;598: ui_freeSaber.integer) +;599: { +line 600 +;600: uiForcePowersRank[i_f] = 1; +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 1 +ASGNI4 +line 601 +;601: } +LABELV $450 +line 603 +;602: +;603: if (i_f == FP_SABERDEFEND && +ADDRLP4 4 +INDIRI4 +CNSTI4 16 +NEI4 $453 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +CNSTI4 1 +GEI4 $453 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $453 +line 606 +;604: uiForcePowersRank[i_f] < 1 && +;605: ui_freeSaber.integer) +;606: { +line 607 +;607: uiForcePowersRank[i_f] = 1; +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 1 +ASGNI4 +line 608 +;608: } +LABELV $453 +line 610 +;609: +;610: i_f++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 611 +;611: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 612 +;612: } +LABELV $445 +line 584 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $456 +ADDRLP4 4 +INDIRI4 +CNSTI4 18 +LTI4 $444 +LABELV $456 +line 614 +;613: +;614: if (i_f < NUM_FORCE_POWERS) +ADDRLP4 4 +INDIRI4 +CNSTI4 18 +GEI4 $457 +line 615 +;615: { //info for all the powers wasn't there.. +line 616 +;616: uiForceSide = 0; +ADDRGP4 uiForceSide +CNSTI4 0 +ASGNI4 +line 617 +;617: goto validitycheck; +ADDRGP4 $432 +JUMPV +LABELV $457 +line 619 +;618: } +;619: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 620 +;620: } +LABELV $421 +line 539 +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $420 +line 621 +;621: } +LABELV $418 +LABELV $432 +line 625 +;622: +;623:validitycheck: +;624: +;625: if (!uiForceSide) +ADDRGP4 uiForceSide +INDIRI4 +CNSTI4 0 +NEI4 $459 +line 626 +;626: { +line 627 +;627: uiForceSide = 1; +ADDRGP4 uiForceSide +CNSTI4 1 +ASGNI4 +line 628 +;628: uiForceRank = 1; +ADDRGP4 uiForceRank +CNSTI4 1 +ASGNI4 +line 629 +;629: i = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $462 +JUMPV +LABELV $461 +line 631 +;630: while (i < NUM_FORCE_POWERS) +;631: { +line 632 +;632: if (i == FP_LEVITATION) +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +NEI4 $464 +line 633 +;633: { +line 634 +;634: uiForcePowersRank[i] = 1; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 1 +ASGNI4 +line 635 +;635: } +ADDRGP4 $465 +JUMPV +LABELV $464 +line 636 +;636: else if (i == FP_SABERATTACK && ui_freeSaber.integer) +ADDRLP4 0 +INDIRI4 +CNSTI4 15 +NEI4 $466 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $466 +line 637 +;637: { +line 638 +;638: uiForcePowersRank[i] = 1; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 1 +ASGNI4 +line 639 +;639: } +ADDRGP4 $467 +JUMPV +LABELV $466 +line 640 +;640: else if (i == FP_SABERDEFEND && ui_freeSaber.integer) +ADDRLP4 0 +INDIRI4 +CNSTI4 16 +NEI4 $469 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $469 +line 641 +;641: { +line 642 +;642: uiForcePowersRank[i] = 1; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 1 +ASGNI4 +line 643 +;643: } +ADDRGP4 $470 +JUMPV +LABELV $469 +line 645 +;644: else +;645: { +line 646 +;646: uiForcePowersRank[i] = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 0 +ASGNI4 +line 647 +;647: } +LABELV $470 +LABELV $467 +LABELV $465 +line 649 +;648: +;649: i++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 650 +;650: } +LABELV $462 +line 630 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $461 +line 652 +;651: +;652: UI_UpdateClientForcePowers(NULL); +CNSTP4 0 +ARGP4 +ADDRGP4 UI_UpdateClientForcePowers +CALLV +pop +line 653 +;653: } +LABELV $459 +line 655 +;654: +;655: UpdateForceUsed(); +ADDRGP4 UpdateForceUsed +CALLV +pop +line 656 +;656:} +LABELV $417 +endproc UI_UpdateForcePowers 324 4 +export UI_SkinColor_HandleKey +proc UI_SkinColor_HandleKey 8 8 +line 660 +;657:extern int uiSkinColor; +;658: +;659:qboolean UI_SkinColor_HandleKey(int flags, float *special, int key, int num, int min, int max, int type) +;660:{ +line 661 +;661: if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) +ADDRLP4 0 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 178 +EQI4 $477 +ADDRLP4 0 +INDIRI4 +CNSTI4 179 +EQI4 $477 +ADDRLP4 0 +INDIRI4 +CNSTI4 13 +EQI4 $477 +ADDRLP4 0 +INDIRI4 +CNSTI4 169 +NEI4 $473 +LABELV $477 +line 662 +;662: { +line 663 +;663: int i = num; +ADDRLP4 4 +ADDRFP4 12 +INDIRI4 +ASGNI4 +line 665 +;664: +;665: if (key == K_MOUSE2) +ADDRFP4 8 +INDIRI4 +CNSTI4 179 +NEI4 $478 +line 666 +;666: { +line 667 +;667: i--; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 668 +;668: } +ADDRGP4 $479 +JUMPV +LABELV $478 +line 670 +;669: else +;670: { +line 671 +;671: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 672 +;672: } +LABELV $479 +line 674 +;673: +;674: if (i < min) +ADDRLP4 4 +INDIRI4 +ADDRFP4 16 +INDIRI4 +GEI4 $480 +line 675 +;675: { +line 676 +;676: i = max; +ADDRLP4 4 +ADDRFP4 20 +INDIRI4 +ASGNI4 +line 677 +;677: } +ADDRGP4 $481 +JUMPV +LABELV $480 +line 678 +;678: else if (i > max) +ADDRLP4 4 +INDIRI4 +ADDRFP4 20 +INDIRI4 +LEI4 $482 +line 679 +;679: { +line 680 +;680: i = min; +ADDRLP4 4 +ADDRFP4 16 +INDIRI4 +ASGNI4 +line 681 +;681: } +LABELV $482 +LABELV $481 +line 683 +;682: +;683: num = i; +ADDRFP4 12 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 685 +;684: +;685: uiSkinColor = num; +ADDRGP4 uiSkinColor +ADDRFP4 12 +INDIRI4 +ASGNI4 +line 687 +;686: +;687: UI_FeederSelection(FEEDER_Q3HEADS, uiInfo.q3SelectedHead); +CNSTF4 1094713344 +ARGF4 +ADDRGP4 uiInfo+78144 +INDIRI4 +ARGI4 +ADDRGP4 UI_FeederSelection +CALLI4 +pop +line 689 +;688: +;689: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $472 +JUMPV +LABELV $473 +line 691 +;690: } +;691: return qfalse; +CNSTI4 0 +RETI4 +LABELV $472 +endproc UI_SkinColor_HandleKey 8 8 +export UI_ForceSide_HandleKey +proc UI_ForceSide_HandleKey 1048 16 +line 698 +;692:} +;693: +;694: +;695: +;696: +;697:qboolean UI_ForceSide_HandleKey(int flags, float *special, int key, int num, int min, int max, int type) +;698:{ +line 701 +;699: char info[MAX_INFO_VALUE]; +;700: +;701: info[0] = '\0'; +ADDRLP4 0 +CNSTI1 0 +ASGNI1 +line 702 +;702: trap_GetConfigString(CS_SERVERINFO, info, sizeof(info)); +CNSTI4 0 +ARGI4 +ADDRLP4 0 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetConfigString +CALLI4 +pop +line 704 +;703: +;704: if (atoi( Info_ValueForKey( info, "g_forceBasedTeams" ) )) +ADDRLP4 0 +ARGP4 +ADDRGP4 $355 +ARGP4 +ADDRLP4 1024 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1024 +INDIRP4 +ARGP4 +ADDRLP4 1028 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 1028 +INDIRI4 +CNSTI4 0 +EQI4 $486 +line 705 +;705: { +line 706 +;706: switch((int)(trap_Cvar_VariableValue("ui_myteam"))) +ADDRGP4 $358 +ARGP4 +ADDRLP4 1036 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 1032 +ADDRLP4 1036 +INDIRF4 +CVFI4 4 +ASGNI4 +ADDRLP4 1032 +INDIRI4 +CNSTI4 1 +EQI4 $491 +ADDRLP4 1032 +INDIRI4 +CNSTI4 2 +EQI4 $492 +ADDRGP4 $489 +JUMPV +line 707 +;707: { +LABELV $491 +line 709 +;708: case TEAM_RED: +;709: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $485 +JUMPV +LABELV $492 +line 711 +;710: case TEAM_BLUE: +;711: return qfalse; +CNSTI4 0 +RETI4 +ADDRGP4 $485 +JUMPV +line 713 +;712: default: +;713: break; +LABELV $489 +line 715 +;714: } +;715: } +LABELV $486 +line 717 +;716: +;717: if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) +ADDRLP4 1032 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 1032 +INDIRI4 +CNSTI4 178 +EQI4 $497 +ADDRLP4 1032 +INDIRI4 +CNSTI4 179 +EQI4 $497 +ADDRLP4 1032 +INDIRI4 +CNSTI4 13 +EQI4 $497 +ADDRLP4 1032 +INDIRI4 +CNSTI4 169 +NEI4 $493 +LABELV $497 +line 718 +;718: { +line 719 +;719: int i = num; +ADDRLP4 1040 +ADDRFP4 12 +INDIRI4 +ASGNI4 +line 720 +;720: int x = 0; +ADDRLP4 1036 +CNSTI4 0 +ASGNI4 +line 723 +;721: +;722: //update the feeder item selection, it might be different depending on side +;723: Menu_SetFeederSelection(NULL, FEEDER_FORCECFG, 0, NULL); +CNSTP4 0 +ARGP4 +CNSTI4 16 +ARGI4 +CNSTI4 0 +ARGI4 +CNSTP4 0 +ARGP4 +ADDRGP4 Menu_SetFeederSelection +CALLV +pop +line 725 +;724: +;725: if (key == K_MOUSE2) +ADDRFP4 8 +INDIRI4 +CNSTI4 179 +NEI4 $498 +line 726 +;726: { +line 727 +;727: i--; +ADDRLP4 1040 +ADDRLP4 1040 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 728 +;728: } +ADDRGP4 $499 +JUMPV +LABELV $498 +line 730 +;729: else +;730: { +line 731 +;731: i++; +ADDRLP4 1040 +ADDRLP4 1040 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 732 +;732: } +LABELV $499 +line 734 +;733: +;734: if (i < min) +ADDRLP4 1040 +INDIRI4 +ADDRFP4 16 +INDIRI4 +GEI4 $500 +line 735 +;735: { +line 736 +;736: i = max; +ADDRLP4 1040 +ADDRFP4 20 +INDIRI4 +ASGNI4 +line 737 +;737: } +ADDRGP4 $501 +JUMPV +LABELV $500 +line 738 +;738: else if (i > max) +ADDRLP4 1040 +INDIRI4 +ADDRFP4 20 +INDIRI4 +LEI4 $502 +line 739 +;739: { +line 740 +;740: i = min; +ADDRLP4 1040 +ADDRFP4 16 +INDIRI4 +ASGNI4 +line 741 +;741: } +LABELV $502 +LABELV $501 +line 743 +;742: +;743: num = i; +ADDRFP4 12 +ADDRLP4 1040 +INDIRI4 +ASGNI4 +line 745 +;744: +;745: uiForceSide = num; +ADDRGP4 uiForceSide +ADDRFP4 12 +INDIRI4 +ASGNI4 +ADDRGP4 $505 +JUMPV +LABELV $504 +line 749 +;746: +;747: // Resetting power ranks based on if light or dark side is chosen +;748: while (x < NUM_FORCE_POWERS) +;749: { +line 750 +;750: if (uiForcePowerDarkLight[x] && uiForceSide != uiForcePowerDarkLight[x]) +ADDRLP4 1044 +ADDRLP4 1036 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowerDarkLight +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 1044 +INDIRI4 +CNSTI4 0 +EQI4 $507 +ADDRGP4 uiForceSide +INDIRI4 +ADDRLP4 1044 +INDIRI4 +EQI4 $507 +line 751 +;751: { +line 752 +;752: uiForcePowersRank[x] = 0; +ADDRLP4 1036 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 0 +ASGNI4 +line 753 +;753: } +LABELV $507 +line 754 +;754: x++; +ADDRLP4 1036 +ADDRLP4 1036 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 755 +;755: } +LABELV $505 +line 748 +ADDRLP4 1036 +INDIRI4 +CNSTI4 18 +LTI4 $504 +line 757 +;756: +;757: UpdateForceUsed(); +ADDRGP4 UpdateForceUsed +CALLV +pop +line 759 +;758: +;759: gTouchedForce = qtrue; +ADDRGP4 gTouchedForce +CNSTI4 1 +ASGNI4 +line 760 +;760: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $485 +JUMPV +LABELV $493 +line 762 +;761: } +;762: return qfalse; +CNSTI4 0 +RETI4 +LABELV $485 +endproc UI_ForceSide_HandleKey 1048 16 +export UI_ForceMaxRank_HandleKey +proc UI_ForceMaxRank_HandleKey 12 8 +line 767 +;763:} +;764: +;765: +;766:qboolean UI_ForceMaxRank_HandleKey(int flags, float *special, int key, int num, int min, int max, int type) +;767:{ +line 768 +;768: if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) +ADDRLP4 0 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 178 +EQI4 $514 +ADDRLP4 0 +INDIRI4 +CNSTI4 179 +EQI4 $514 +ADDRLP4 0 +INDIRI4 +CNSTI4 13 +EQI4 $514 +ADDRLP4 0 +INDIRI4 +CNSTI4 169 +NEI4 $510 +LABELV $514 +line 769 +;769: { +line 770 +;770: int i = num; +ADDRLP4 4 +ADDRFP4 12 +INDIRI4 +ASGNI4 +line 772 +;771: +;772: if (key == K_MOUSE2) +ADDRFP4 8 +INDIRI4 +CNSTI4 179 +NEI4 $515 +line 773 +;773: { +line 774 +;774: i--; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 775 +;775: } +ADDRGP4 $516 +JUMPV +LABELV $515 +line 777 +;776: else +;777: { +line 778 +;778: i++; +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 779 +;779: } +LABELV $516 +line 781 +;780: +;781: if (i < min) +ADDRLP4 4 +INDIRI4 +ADDRFP4 16 +INDIRI4 +GEI4 $517 +line 782 +;782: { +line 783 +;783: i = max; +ADDRLP4 4 +ADDRFP4 20 +INDIRI4 +ASGNI4 +line 784 +;784: } +ADDRGP4 $518 +JUMPV +LABELV $517 +line 785 +;785: else if (i > max) +ADDRLP4 4 +INDIRI4 +ADDRFP4 20 +INDIRI4 +LEI4 $519 +line 786 +;786: { +line 787 +;787: i = min; +ADDRLP4 4 +ADDRFP4 16 +INDIRI4 +ASGNI4 +line 788 +;788: } +LABELV $519 +LABELV $518 +line 790 +;789: +;790: num = i; +ADDRFP4 12 +ADDRLP4 4 +INDIRI4 +ASGNI4 +line 792 +;791: +;792: uiMaxRank = num; +ADDRGP4 uiMaxRank +ADDRFP4 12 +INDIRI4 +ASGNI4 +line 794 +;793: +;794: trap_Cvar_Set( "g_maxForceRank", va("%i", num)); +ADDRGP4 $264 +ARGP4 +ADDRFP4 12 +INDIRI4 +ARGI4 +ADDRLP4 8 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRGP4 $521 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 trap_Cvar_Set +CALLV +pop +line 797 +;795: +;796: // The update force used will remove overallocated powers automatically. +;797: UpdateForceUsed(); +ADDRGP4 UpdateForceUsed +CALLV +pop +line 799 +;798: +;799: gTouchedForce = qtrue; +ADDRGP4 gTouchedForce +CNSTI4 1 +ASGNI4 +line 801 +;800: +;801: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $509 +JUMPV +LABELV $510 +line 803 +;802: } +;803: return qfalse; +CNSTI4 0 +RETI4 +LABELV $509 +endproc UI_ForceMaxRank_HandleKey 12 8 +export UI_ForcePowerRank_HandleKey +proc UI_ForcePowerRank_HandleKey 36 0 +line 809 +;804:} +;805: +;806: +;807:// This function will either raise or lower a power by one rank. +;808:qboolean UI_ForcePowerRank_HandleKey(int flags, float *special, int key, int num, int min, int max, int type) +;809:{ +line 812 +;810: qboolean raising; +;811: +;812: if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) +ADDRLP4 4 +ADDRFP4 8 +INDIRI4 +ASGNI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 178 +EQI4 $527 +ADDRLP4 4 +INDIRI4 +CNSTI4 179 +EQI4 $527 +ADDRLP4 4 +INDIRI4 +CNSTI4 13 +EQI4 $527 +ADDRLP4 4 +INDIRI4 +CNSTI4 169 +NEI4 $523 +LABELV $527 +line 813 +;813: { +line 817 +;814: int forcepower, rank; +;815: +;816: //this will give us the index as long as UI_FORCE_RANK is always one below the first force rank index +;817: forcepower = (type-UI_FORCE_RANK)-1; +ADDRLP4 8 +ADDRFP4 24 +INDIRI4 +CNSTI4 258 +SUBI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 820 +;818: +;819: // If we are not on the same side as a power, or if we are not of any rank at all. +;820: if (uiForcePowerDarkLight[forcepower] && uiForceSide != uiForcePowerDarkLight[forcepower]) +ADDRLP4 16 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowerDarkLight +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 16 +INDIRI4 +CNSTI4 0 +EQI4 $528 +ADDRGP4 uiForceSide +INDIRI4 +ADDRLP4 16 +INDIRI4 +EQI4 $528 +line 821 +;821: { +line 822 +;822: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $522 +JUMPV +LABELV $528 +line 824 +;823: } +;824: else if (forcepower == FP_SABERDEFEND || forcepower == FP_SABERTHROW) +ADDRLP4 8 +INDIRI4 +CNSTI4 16 +EQI4 $532 +ADDRLP4 8 +INDIRI4 +CNSTI4 17 +NEI4 $530 +LABELV $532 +line 825 +;825: { // Saberdefend and saberthrow can't be bought if there is no saberattack +line 826 +;826: if (uiForcePowersRank[FP_SABERATTACK] < 1) +ADDRGP4 uiForcePowersRank+60 +INDIRI4 +CNSTI4 1 +GEI4 $533 +line 827 +;827: { +line 828 +;828: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $522 +JUMPV +LABELV $533 +line 830 +;829: } +;830: } +LABELV $530 +line 832 +;831: +;832: if (type == UI_FORCE_RANK_LEVITATION) +ADDRFP4 24 +INDIRI4 +CNSTI4 260 +NEI4 $536 +line 833 +;833: { +line 834 +;834: min += 1; +ADDRFP4 16 +ADDRFP4 16 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 835 +;835: } +LABELV $536 +line 836 +;836: if (type == UI_FORCE_RANK_SABERATTACK && ui_freeSaber.integer) +ADDRFP4 24 +INDIRI4 +CNSTI4 274 +NEI4 $538 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $538 +line 837 +;837: { +line 838 +;838: min += 1; +ADDRFP4 16 +ADDRFP4 16 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 839 +;839: } +LABELV $538 +line 840 +;840: if (type == UI_FORCE_RANK_SABERDEFEND && ui_freeSaber.integer) +ADDRFP4 24 +INDIRI4 +CNSTI4 275 +NEI4 $541 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $541 +line 841 +;841: { +line 842 +;842: min += 1; +ADDRFP4 16 +ADDRFP4 16 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 843 +;843: } +LABELV $541 +line 845 +;844: +;845: if (key == K_MOUSE2) +ADDRFP4 8 +INDIRI4 +CNSTI4 179 +NEI4 $544 +line 846 +;846: { // Lower a point. +line 847 +;847: if (uiForcePowersRank[forcepower]<=min) +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +ADDRFP4 16 +INDIRI4 +GTI4 $546 +line 848 +;848: { +line 849 +;849: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $522 +JUMPV +LABELV $546 +line 851 +;850: } +;851: raising = qfalse; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 852 +;852: } +ADDRGP4 $545 +JUMPV +LABELV $544 +line 854 +;853: else +;854: { // Raise a point. +line 855 +;855: if (uiForcePowersRank[forcepower]>=max) +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +ADDRFP4 20 +INDIRI4 +LTI4 $548 +line 856 +;856: { +line 857 +;857: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $522 +JUMPV +LABELV $548 +line 859 +;858: } +;859: raising = qtrue; +ADDRLP4 0 +CNSTI4 1 +ASGNI4 +line 860 +;860: } +LABELV $545 +line 862 +;861: +;862: if (raising) +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +EQI4 $550 +line 863 +;863: { // Check if we can accrue the cost of this power. +line 864 +;864: rank = uiForcePowersRank[forcepower]+1; +ADDRLP4 12 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 865 +;865: if (bgForcePowerCost[forcepower][rank] > uiForceAvailable) +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDRGP4 uiForceAvailable +INDIRI4 +LEI4 $552 +line 866 +;866: { // We can't afford this power. Abandon ship. +line 867 +;867: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $522 +JUMPV +LABELV $552 +line 870 +;868: } +;869: else +;870: { // Sure we can afford it. +line 871 +;871: uiForceUsed += bgForcePowerCost[forcepower][rank]; +ADDRLP4 24 +ADDRGP4 uiForceUsed +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 872 +;872: uiForceAvailable -= bgForcePowerCost[forcepower][rank]; +ADDRLP4 28 +ADDRGP4 uiForceAvailable +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 873 +;873: uiForcePowersRank[forcepower]=rank; +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +ADDRLP4 12 +INDIRI4 +ASGNI4 +line 874 +;874: } +line 875 +;875: } +ADDRGP4 $551 +JUMPV +LABELV $550 +line 877 +;876: else +;877: { // Lower the point. +line 878 +;878: rank = uiForcePowersRank[forcepower]; +ADDRLP4 12 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +ASGNI4 +line 879 +;879: uiForceUsed -= bgForcePowerCost[forcepower][rank]; +ADDRLP4 24 +ADDRGP4 uiForceUsed +ASGNP4 +ADDRLP4 24 +INDIRP4 +ADDRLP4 24 +INDIRP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 880 +;880: uiForceAvailable += bgForcePowerCost[forcepower][rank]; +ADDRLP4 28 +ADDRGP4 uiForceAvailable +ASGNP4 +ADDRLP4 28 +INDIRP4 +ADDRLP4 28 +INDIRP4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 881 +;881: uiForcePowersRank[forcepower]--; +ADDRLP4 32 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +ASGNP4 +ADDRLP4 32 +INDIRP4 +ADDRLP4 32 +INDIRP4 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 882 +;882: } +LABELV $551 +line 884 +;883: +;884: UpdateForceUsed(); +ADDRGP4 UpdateForceUsed +CALLV +pop +line 886 +;885: +;886: gTouchedForce = qtrue; +ADDRGP4 gTouchedForce +CNSTI4 1 +ASGNI4 +line 888 +;887: +;888: return qtrue; +CNSTI4 1 +RETI4 +ADDRGP4 $522 +JUMPV +LABELV $523 +line 890 +;889: } +;890: return qfalse; +CNSTI4 0 +RETI4 +LABELV $522 +endproc UI_ForcePowerRank_HandleKey 36 0 +data +export gCustRank +align 4 +LABELV gCustRank +byte 4 0 +export gCustSide +align 4 +LABELV gCustSide +byte 4 0 +export gCustPowersRank +align 4 +LABELV gCustPowersRank +byte 4 0 +byte 4 1 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +byte 4 0 +export UI_ForceConfigHandle +code +proc UI_ForceConfigHandle 9376 24 +line 924 +;891:} +;892: +;893: +;894:int gCustRank = 0; +;895:int gCustSide = 0; +;896: +;897:int gCustPowersRank[NUM_FORCE_POWERS] = { +;898: 0,//FP_HEAL = 0,//instant +;899: 1,//FP_LEVITATION,//hold/duration, this one defaults to 1 (gives a free point) +;900: 0,//FP_SPEED,//duration +;901: 0,//FP_PUSH,//hold/duration +;902: 0,//FP_PULL,//hold/duration +;903: 0,//FP_TELEPATHY,//instant +;904: 0,//FP_GRIP,//hold/duration +;905: 0,//FP_LIGHTNING,//hold/duration +;906: 0,//FP_RAGE,//duration +;907: 0,//FP_PROTECT, +;908: 0,//FP_ABSORB, +;909: 0,//FP_TEAM_HEAL, +;910: 0,//FP_TEAM_FORCE, +;911: 0,//FP_DRAIN, +;912: 0,//FP_SEE, +;913: 0,//FP_SABERATTACK, +;914: 0,//FP_SABERDEFEND, +;915: 0//FP_SABERTHROW, +;916:}; +;917: +;918:/* +;919:================= +;920:UI_ForceConfigHandle +;921:================= +;922:*/ +;923:void UI_ForceConfigHandle( int oldindex, int newindex ) +;924:{ +line 926 +;925: fileHandle_t f; +;926: int len = 0; +ADDRLP4 8276 +CNSTI4 0 +ASGNI4 +line 927 +;927: int i = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 928 +;928: int c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 929 +;929: int iBuf = 0, forcePowerRank, currank; +ADDRLP4 8272 +CNSTI4 0 +ASGNI4 +line 933 +;930: char fcfBuffer[8192]; +;931: char singleBuf[64]; +;932: char info[MAX_INFO_VALUE]; +;933: int forceTeam = 0; +ADDRLP4 9308 +CNSTI4 0 +ASGNI4 +line 935 +;934: +;935: if (oldindex == 0) +ADDRFP4 0 +INDIRI4 +CNSTI4 0 +NEI4 $555 +line 936 +;936: { //switching out from custom config, so first shove the current values into the custom storage +line 937 +;937: i = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +ADDRGP4 $558 +JUMPV +LABELV $557 +line 940 +;938: +;939: while (i < NUM_FORCE_POWERS) +;940: { +line 941 +;941: gCustPowersRank[i] = uiForcePowersRank[i]; +ADDRLP4 9312 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 9312 +INDIRI4 +ADDRGP4 gCustPowersRank +ADDP4 +ADDRLP4 9312 +INDIRI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +ASGNI4 +line 942 +;942: i++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 943 +;943: } +LABELV $558 +line 939 +ADDRLP4 8 +INDIRI4 +CNSTI4 18 +LTI4 $557 +line 944 +;944: gCustRank = uiForceRank; +ADDRGP4 gCustRank +ADDRGP4 uiForceRank +INDIRI4 +ASGNI4 +line 945 +;945: gCustSide = uiForceSide; +ADDRGP4 gCustSide +ADDRGP4 uiForceSide +INDIRI4 +ASGNI4 +line 946 +;946: } +LABELV $555 +line 948 +;947: +;948: if (newindex == 0) +ADDRFP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $560 +line 949 +;949: { //switching back to custom, shove the values back in from the custom storage +line 950 +;950: i = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 951 +;951: uiForceUsed = 0; +ADDRGP4 uiForceUsed +CNSTI4 0 +ASGNI4 +line 952 +;952: gTouchedForce = qtrue; +ADDRGP4 gTouchedForce +CNSTI4 1 +ASGNI4 +ADDRGP4 $563 +JUMPV +LABELV $562 +line 955 +;953: +;954: while (i < NUM_FORCE_POWERS) +;955: { +line 956 +;956: uiForcePowersRank[i] = gCustPowersRank[i]; +ADDRLP4 9312 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ASGNI4 +ADDRLP4 9312 +INDIRI4 +ADDRGP4 uiForcePowersRank +ADDP4 +ADDRLP4 9312 +INDIRI4 +ADDRGP4 gCustPowersRank +ADDP4 +INDIRI4 +ASGNI4 +line 957 +;957: uiForceUsed += uiForcePowersRank[i]; +ADDRLP4 9316 +ADDRGP4 uiForceUsed +ASGNP4 +ADDRLP4 9316 +INDIRP4 +ADDRLP4 9316 +INDIRP4 +INDIRI4 +ADDRLP4 8 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 958 +;958: i++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 959 +;959: } +LABELV $563 +line 954 +ADDRLP4 8 +INDIRI4 +CNSTI4 18 +LTI4 $562 +line 960 +;960: uiForceRank = gCustRank; +ADDRGP4 uiForceRank +ADDRGP4 gCustRank +INDIRI4 +ASGNI4 +line 961 +;961: uiForceSide = gCustSide; +ADDRGP4 uiForceSide +ADDRGP4 gCustSide +INDIRI4 +ASGNI4 +line 963 +;962: +;963: UpdateForceUsed(); +ADDRGP4 UpdateForceUsed +CALLV +pop +line 964 +;964: return; +ADDRGP4 $554 +JUMPV +LABELV $560 +line 968 +;965: } +;966: +;967: //If we made it here, we want to load in a new config +;968: if (uiForceSide == FORCE_LIGHTSIDE) +ADDRGP4 uiForceSide +INDIRI4 +CNSTI4 1 +NEI4 $565 +line 969 +;969: { //we should only be displaying lightside configs, so.. look in the light folder +line 970 +;970: newindex += uiInfo.forceConfigLightIndexBegin; +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +ADDRGP4 uiInfo+95056 +INDIRI4 +ADDI4 +ASGNI4 +line 971 +;971: if (newindex >= uiInfo.forceConfigCount) +ADDRFP4 4 +INDIRI4 +ADDRGP4 uiInfo+78148 +INDIRI4 +LTI4 $568 +line 972 +;972: { +line 973 +;973: return; +ADDRGP4 $554 +JUMPV +LABELV $568 +line 975 +;974: } +;975: len = trap_FS_FOpenFile(va("forcecfg/light/%s.fcf", uiInfo.forceConfigNames[newindex]), &f, FS_READ); +ADDRGP4 $255 +ARGP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 7 +LSHI4 +ADDRGP4 uiInfo+78156 +ADDP4 +ARGP4 +ADDRLP4 9312 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 9312 +INDIRP4 +ARGP4 +ADDRLP4 9304 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 9316 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 8276 +ADDRLP4 9316 +INDIRI4 +ASGNI4 +line 976 +;976: } +ADDRGP4 $566 +JUMPV +LABELV $565 +line 978 +;977: else +;978: { //else dark +line 979 +;979: newindex += uiInfo.forceConfigDarkIndexBegin; +ADDRFP4 4 +ADDRFP4 4 +INDIRI4 +ADDRGP4 uiInfo+95052 +INDIRI4 +ADDI4 +ASGNI4 +line 980 +;980: if (newindex >= uiInfo.forceConfigCount || newindex > uiInfo.forceConfigLightIndexBegin) +ADDRLP4 9312 +ADDRFP4 4 +INDIRI4 +ASGNI4 +ADDRLP4 9312 +INDIRI4 +ADDRGP4 uiInfo+78148 +INDIRI4 +GEI4 $577 +ADDRLP4 9312 +INDIRI4 +ADDRGP4 uiInfo+95056 +INDIRI4 +LEI4 $573 +LABELV $577 +line 981 +;981: { //dark gets read in before light +line 982 +;982: return; +ADDRGP4 $554 +JUMPV +LABELV $573 +line 984 +;983: } +;984: len = trap_FS_FOpenFile(va("forcecfg/dark/%s.fcf", uiInfo.forceConfigNames[newindex]), &f, FS_READ); +ADDRGP4 $256 +ARGP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 7 +LSHI4 +ADDRGP4 uiInfo+78156 +ADDP4 +ARGP4 +ADDRLP4 9316 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 9316 +INDIRP4 +ARGP4 +ADDRLP4 9304 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 9320 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 8276 +ADDRLP4 9320 +INDIRI4 +ASGNI4 +line 985 +;985: } +LABELV $566 +line 987 +;986: +;987: if (len <= 0) +ADDRLP4 8276 +INDIRI4 +CNSTI4 0 +GTI4 $579 +line 988 +;988: { //This should not have happened. But, before we quit out, attempt searching the other light/dark folder for the file. +line 989 +;989: if (uiForceSide == FORCE_LIGHTSIDE) +ADDRGP4 uiForceSide +INDIRI4 +CNSTI4 1 +NEI4 $581 +line 990 +;990: { +line 991 +;991: len = trap_FS_FOpenFile(va("forcecfg/dark/%s.fcf", uiInfo.forceConfigNames[newindex]), &f, FS_READ); +ADDRGP4 $256 +ARGP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 7 +LSHI4 +ADDRGP4 uiInfo+78156 +ADDP4 +ARGP4 +ADDRLP4 9312 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 9312 +INDIRP4 +ARGP4 +ADDRLP4 9304 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 9316 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 8276 +ADDRLP4 9316 +INDIRI4 +ASGNI4 +line 992 +;992: } +ADDRGP4 $582 +JUMPV +LABELV $581 +line 994 +;993: else +;994: { +line 995 +;995: len = trap_FS_FOpenFile(va("forcecfg/light/%s.fcf", uiInfo.forceConfigNames[newindex]), &f, FS_READ); +ADDRGP4 $255 +ARGP4 +ADDRFP4 4 +INDIRI4 +CNSTI4 7 +LSHI4 +ADDRGP4 uiInfo+78156 +ADDP4 +ARGP4 +ADDRLP4 9312 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 9312 +INDIRP4 +ARGP4 +ADDRLP4 9304 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 9316 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 8276 +ADDRLP4 9316 +INDIRI4 +ASGNI4 +line 996 +;996: } +LABELV $582 +line 998 +;997: +;998: if (len <= 0) +ADDRLP4 8276 +INDIRI4 +CNSTI4 0 +GTI4 $585 +line 999 +;999: { //still failure? Oh well. +line 1000 +;1000: return; +ADDRGP4 $554 +JUMPV +LABELV $585 +line 1002 +;1001: } +;1002: } +LABELV $579 +line 1004 +;1003: +;1004: if (len >= 8192) +ADDRLP4 8276 +INDIRI4 +CNSTI4 8192 +LTI4 $587 +line 1005 +;1005: { +line 1006 +;1006: return; +ADDRGP4 $554 +JUMPV +LABELV $587 +line 1009 +;1007: } +;1008: +;1009: trap_FS_Read(fcfBuffer, len, f); +ADDRLP4 16 +ARGP4 +ADDRLP4 8276 +INDIRI4 +ARGI4 +ADDRLP4 9304 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 1010 +;1010: fcfBuffer[len] = 0; +ADDRLP4 8276 +INDIRI4 +ADDRLP4 16 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1011 +;1011: trap_FS_FCloseFile(f); +ADDRLP4 9304 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 1013 +;1012: +;1013: i = 0; +ADDRLP4 8 +CNSTI4 0 +ASGNI4 +line 1015 +;1014: +;1015: info[0] = '\0'; +ADDRLP4 8280 +CNSTI1 0 +ASGNI1 +line 1016 +;1016: trap_GetConfigString(CS_SERVERINFO, info, sizeof(info)); +CNSTI4 0 +ARGI4 +ADDRLP4 8280 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 trap_GetConfigString +CALLI4 +pop +line 1018 +;1017: +;1018: if (atoi( Info_ValueForKey( info, "g_forceBasedTeams" ) )) +ADDRLP4 8280 +ARGP4 +ADDRGP4 $355 +ARGP4 +ADDRLP4 9312 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 9312 +INDIRP4 +ARGP4 +ADDRLP4 9316 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 9316 +INDIRI4 +CNSTI4 0 +EQI4 $589 +line 1019 +;1019: { +line 1020 +;1020: switch((int)(trap_Cvar_VariableValue("ui_myteam"))) +ADDRGP4 $358 +ARGP4 +ADDRLP4 9324 +ADDRGP4 trap_Cvar_VariableValue +CALLF4 +ASGNF4 +ADDRLP4 9320 +ADDRLP4 9324 +INDIRF4 +CVFI4 4 +ASGNI4 +ADDRLP4 9320 +INDIRI4 +CNSTI4 1 +EQI4 $594 +ADDRLP4 9320 +INDIRI4 +CNSTI4 2 +EQI4 $595 +ADDRGP4 $592 +JUMPV +line 1021 +;1021: { +LABELV $594 +line 1023 +;1022: case TEAM_RED: +;1023: forceTeam = FORCE_DARKSIDE; +ADDRLP4 9308 +CNSTI4 2 +ASGNI4 +line 1024 +;1024: break; +ADDRGP4 $592 +JUMPV +LABELV $595 +line 1026 +;1025: case TEAM_BLUE: +;1026: forceTeam = FORCE_LIGHTSIDE; +ADDRLP4 9308 +CNSTI4 1 +ASGNI4 +line 1027 +;1027: break; +line 1029 +;1028: default: +;1029: break; +LABELV $592 +line 1031 +;1030: } +;1031: } +LABELV $589 +line 1033 +;1032: +;1033: BG_LegalizedForcePowers(fcfBuffer, uiMaxRank, ui_freeSaber.integer, forceTeam, atoi( Info_ValueForKey( info, "g_gametype" )), 0); +ADDRLP4 8280 +ARGP4 +ADDRGP4 $365 +ARGP4 +ADDRLP4 9320 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 9320 +INDIRP4 +ARGP4 +ADDRLP4 9324 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 16 +ARGP4 +ADDRGP4 uiMaxRank +INDIRI4 +ARGI4 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +ARGI4 +ADDRLP4 9308 +INDIRI4 +ARGI4 +ADDRLP4 9324 +INDIRI4 +ARGI4 +CNSTI4 0 +ARGI4 +ADDRGP4 BG_LegalizedForcePowers +CALLI4 +pop +ADDRGP4 $598 +JUMPV +LABELV $597 +line 1039 +;1034: //legalize the config based on the max rank +;1035: +;1036: //now that we're done with the handle, it's time to parse our force data out of the string +;1037: //we store strings in rank-side-xxxxxxxxx format (where the x's are individual force power levels) +;1038: while (fcfBuffer[i] && fcfBuffer[i] != '-') +;1039: { +line 1040 +;1040: singleBuf[c] = fcfBuffer[i]; +ADDRLP4 0 +INDIRI4 +ADDRLP4 8208 +ADDP4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +ASGNI1 +line 1041 +;1041: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1042 +;1042: i++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1043 +;1043: } +LABELV $598 +line 1038 +ADDRLP4 9328 +ADDRLP4 8 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 9328 +INDIRI4 +CNSTI4 0 +EQI4 $600 +ADDRLP4 9328 +INDIRI4 +CNSTI4 45 +NEI4 $597 +LABELV $600 +line 1044 +;1044: singleBuf[c] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 8208 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1045 +;1045: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1046 +;1046: i++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1048 +;1047: +;1048: iBuf = atoi(singleBuf); +ADDRLP4 8208 +ARGP4 +ADDRLP4 9332 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRLP4 8272 +ADDRLP4 9332 +INDIRI4 +ASGNI4 +line 1050 +;1049: +;1050: if (iBuf > uiMaxRank || iBuf < 0) +ADDRLP4 8272 +INDIRI4 +ADDRGP4 uiMaxRank +INDIRI4 +GTI4 $603 +ADDRLP4 8272 +INDIRI4 +CNSTI4 0 +GEI4 $601 +LABELV $603 +line 1051 +;1051: { //this force config uses a rank level higher than our currently restricted level.. so we can't use it +line 1053 +;1052: //FIXME: Print a message indicating this to the user +;1053: return; +ADDRGP4 $554 +JUMPV +LABELV $601 +line 1056 +;1054: } +;1055: +;1056: uiForceRank = iBuf; +ADDRGP4 uiForceRank +ADDRLP4 8272 +INDIRI4 +ASGNI4 +ADDRGP4 $605 +JUMPV +LABELV $604 +line 1059 +;1057: +;1058: while (fcfBuffer[i] && fcfBuffer[i] != '-') +;1059: { +line 1060 +;1060: singleBuf[c] = fcfBuffer[i]; +ADDRLP4 0 +INDIRI4 +ADDRLP4 8208 +ADDP4 +ADDRLP4 8 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +ASGNI1 +line 1061 +;1061: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1062 +;1062: i++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1063 +;1063: } +LABELV $605 +line 1058 +ADDRLP4 9340 +ADDRLP4 8 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +CVII4 1 +ASGNI4 +ADDRLP4 9340 +INDIRI4 +CNSTI4 0 +EQI4 $607 +ADDRLP4 9340 +INDIRI4 +CNSTI4 45 +NEI4 $604 +LABELV $607 +line 1064 +;1064: singleBuf[c] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 8208 +ADDP4 +CNSTI1 0 +ASGNI1 +line 1065 +;1065: c = 0; +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +line 1066 +;1066: i++; +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1068 +;1067: +;1068: uiForceSide = atoi(singleBuf); +ADDRLP4 8208 +ARGP4 +ADDRLP4 9344 +ADDRGP4 atoi +CALLI4 +ASGNI4 +ADDRGP4 uiForceSide +ADDRLP4 9344 +INDIRI4 +ASGNI4 +line 1070 +;1069: +;1070: if (uiForceSide != FORCE_LIGHTSIDE && +ADDRLP4 9348 +ADDRGP4 uiForceSide +INDIRI4 +ASGNI4 +ADDRLP4 9348 +INDIRI4 +CNSTI4 1 +EQI4 $611 +ADDRLP4 9348 +INDIRI4 +CNSTI4 2 +EQI4 $611 +line 1072 +;1071: uiForceSide != FORCE_DARKSIDE) +;1072: { +line 1073 +;1073: uiForceSide = FORCE_LIGHTSIDE; +ADDRGP4 uiForceSide +CNSTI4 1 +ASGNI4 +line 1074 +;1074: return; +ADDRGP4 $554 +JUMPV +LABELV $610 +line 1079 +;1075: } +;1076: +;1077: //clear out the existing powers +;1078: while (c < NUM_FORCE_POWERS) +;1079: { +line 1099 +;1080: /* +;1081: if (c==FP_LEVITATION) +;1082: { +;1083: uiForcePowersRank[c]=1; +;1084: } +;1085: else if (c==FP_SABERATTACK && ui_freeSaber.integer) +;1086: { +;1087: uiForcePowersRank[c]=1; +;1088: } +;1089: else if (c==FP_SABERDEFEND && ui_freeSaber.integer) +;1090: { +;1091: uiForcePowersRank[c]=1; +;1092: } +;1093: else +;1094: { +;1095: uiForcePowersRank[c] = 0; +;1096: } +;1097: */ +;1098: //rww - don't need to do these checks. Just trust whatever the saber config says. +;1099: uiForcePowersRank[c] = 0; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +CNSTI4 0 +ASGNI4 +line 1100 +;1100: c++; +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1101 +;1101: } +LABELV $611 +line 1078 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $610 +line 1102 +;1102: uiForceUsed = 0; +ADDRGP4 uiForceUsed +CNSTI4 0 +ASGNI4 +line 1103 +;1103: uiForceAvailable = forceMasteryPoints[uiForceRank]; +ADDRGP4 uiForceAvailable +ADDRGP4 uiForceRank +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 forceMasteryPoints +ADDP4 +INDIRI4 +ASGNI4 +line 1104 +;1104: gTouchedForce = qtrue; +ADDRGP4 gTouchedForce +CNSTI4 1 +ASGNI4 +line 1106 +;1105: +;1106: for (c=0;fcfBuffer[i]&&c FORCE_LEVEL_3 || forcePowerRank < 0) +ADDRLP4 12 +INDIRI4 +CNSTI4 3 +GTI4 $622 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +GEI4 $620 +LABELV $622 +line 1120 +;1120: { //err.. not correct +line 1121 +;1121: continue; // skip this power +ADDRGP4 $614 +JUMPV +LABELV $620 +line 1124 +;1122: } +;1123: +;1124: if (uiForcePowerDarkLight[c] && uiForcePowerDarkLight[c] != uiForceSide) +ADDRLP4 9360 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowerDarkLight +ADDP4 +INDIRI4 +ASGNI4 +ADDRLP4 9360 +INDIRI4 +CNSTI4 0 +EQI4 $623 +ADDRLP4 9360 +INDIRI4 +ADDRGP4 uiForceSide +INDIRI4 +EQI4 $623 +line 1125 +;1125: { //Apparently the user has crafted a force config that has powers that don't fit with the config's side. +line 1126 +;1126: continue; // skip this power +ADDRGP4 $614 +JUMPV +LABELV $623 +line 1130 +;1127: } +;1128: +;1129: // Accrue cost for each assigned rank for this power. +;1130: for (currank=FORCE_LEVEL_1;currank<=forcePowerRank;currank++) +ADDRLP4 4 +CNSTI4 1 +ASGNI4 +ADDRGP4 $628 +JUMPV +LABELV $625 +line 1131 +;1131: { +line 1132 +;1132: if (bgForcePowerCost[c][currank] > uiForceAvailable) +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDRGP4 uiForceAvailable +INDIRI4 +LEI4 $629 +line 1133 +;1133: { // Break out, we can't afford any more power. +line 1134 +;1134: break; +ADDRGP4 $627 +JUMPV +LABELV $629 +line 1137 +;1135: } +;1136: // Pay for this rank of this power. +;1137: uiForceUsed += bgForcePowerCost[c][currank]; +ADDRLP4 9364 +ADDRGP4 uiForceUsed +ASGNP4 +ADDRLP4 9364 +INDIRP4 +ADDRLP4 9364 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +ADDI4 +ASGNI4 +line 1138 +;1138: uiForceAvailable -= bgForcePowerCost[c][currank]; +ADDRLP4 9368 +ADDRGP4 uiForceAvailable +ASGNP4 +ADDRLP4 9368 +INDIRP4 +ADDRLP4 9368 +INDIRP4 +INDIRI4 +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 4 +LSHI4 +ADDRGP4 bgForcePowerCost +ADDP4 +ADDP4 +INDIRI4 +SUBI4 +ASGNI4 +line 1140 +;1139: +;1140: uiForcePowersRank[c]++; +ADDRLP4 9372 +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 uiForcePowersRank +ADDP4 +ASGNP4 +ADDRLP4 9372 +INDIRP4 +ADDRLP4 9372 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 1141 +;1141: } +LABELV $626 +line 1130 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $628 +ADDRLP4 4 +INDIRI4 +ADDRLP4 12 +INDIRI4 +LEI4 $625 +LABELV $627 +line 1142 +;1142: } +LABELV $614 +line 1106 +ADDRLP4 9352 +CNSTI4 1 +ASGNI4 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +ADDRLP4 9352 +INDIRI4 +ADDI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 8 +INDIRI4 +ADDRLP4 9352 +INDIRI4 +ADDI4 +ASGNI4 +LABELV $616 +ADDRLP4 8 +INDIRI4 +ADDRLP4 16 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $631 +ADDRLP4 0 +INDIRI4 +CNSTI4 18 +LTI4 $613 +LABELV $631 +line 1144 +;1143: +;1144: if (uiForcePowersRank[FP_LEVITATION] < 1) +ADDRGP4 uiForcePowersRank+4 +INDIRI4 +CNSTI4 1 +GEI4 $632 +line 1145 +;1145: { +line 1146 +;1146: uiForcePowersRank[FP_LEVITATION]=1; +ADDRGP4 uiForcePowersRank+4 +CNSTI4 1 +ASGNI4 +line 1147 +;1147: } +LABELV $632 +line 1148 +;1148: if (uiForcePowersRank[FP_SABERATTACK] < 1 && ui_freeSaber.integer) +ADDRGP4 uiForcePowersRank+60 +INDIRI4 +CNSTI4 1 +GEI4 $636 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $636 +line 1149 +;1149: { +line 1150 +;1150: uiForcePowersRank[FP_SABERATTACK]=1; +ADDRGP4 uiForcePowersRank+60 +CNSTI4 1 +ASGNI4 +line 1151 +;1151: } +LABELV $636 +line 1152 +;1152: if (uiForcePowersRank[FP_SABERDEFEND] < 1 && ui_freeSaber.integer) +ADDRGP4 uiForcePowersRank+64 +INDIRI4 +CNSTI4 1 +GEI4 $641 +ADDRGP4 ui_freeSaber+12 +INDIRI4 +CNSTI4 0 +EQI4 $641 +line 1153 +;1153: { +line 1154 +;1154: uiForcePowersRank[FP_SABERDEFEND]=1; +ADDRGP4 uiForcePowersRank+64 +CNSTI4 1 +ASGNI4 +line 1155 +;1155: } +LABELV $641 +line 1157 +;1156: +;1157: UpdateForceUsed(); +ADDRGP4 UpdateForceUsed +CALLV +pop +line 1158 +;1158:} +LABELV $554 +endproc UI_ForceConfigHandle 9376 24 +import uiSkinColor +bss +export uiForceStarShaders +align 4 +LABELV uiForceStarShaders +skip 72 +import Menu_ShowItemByName +import UI_DrawTotalForceStars +export ui_forcePowerDisable +align 4 +LABELV ui_forcePowerDisable +skip 272 +export ui_freeSaber +align 4 +LABELV ui_freeSaber +skip 272 +export uiSaberColorShaders +align 4 +LABELV uiSaberColorShaders +skip 24 +import UI_RankStatusMenu +import RankStatus_Cache +import UI_SignupMenu +import Signup_Cache +import UI_LoginMenu +import Login_Cache +import UI_InitGameinfo +import UI_SPUnlockMedals_f +import UI_SPUnlock_f +import UI_GetAwardLevel +import UI_LogAwardData +import UI_NewGame +import UI_GetCurrentGame +import UI_CanShowTierVideo +import UI_ShowTierVideo +import UI_TierCompleted +import UI_SetBestScore +import UI_GetBestScore +import UI_GetBotNameByNumber +import UI_LoadBots +import UI_GetNumBots +import UI_GetBotInfoByName +import UI_GetBotInfoByNumber +import UI_GetNumSPTiers +import UI_GetNumSPArenas +import UI_GetNumArenas +import UI_GetSpecialArenaInfo +import UI_GetArenaInfoByMap +import UI_GetArenaInfoByNumber +import UI_NetworkOptionsMenu +import UI_NetworkOptionsMenu_Cache +import UI_SoundOptionsMenu +import UI_SoundOptionsMenu_Cache +import UI_DisplayOptionsMenu +import UI_DisplayOptionsMenu_Cache +import UI_SaveConfigMenu +import UI_SaveConfigMenu_Cache +import UI_LoadConfigMenu +import UI_LoadConfig_Cache +import UI_TeamOrdersMenu_Cache +import UI_TeamOrdersMenu_f +import UI_TeamOrdersMenu +import UI_RemoveBotsMenu +import UI_RemoveBots_Cache +import UI_AddBotsMenu +import UI_AddBots_Cache +import trap_G2API_SetBoneAngles +import trap_R_RemapShader +import trap_RealTime +import trap_CIN_SetExtents +import trap_CIN_DrawCinematic +import trap_CIN_RunCinematic +import trap_CIN_StopCinematic +import trap_CIN_PlayCinematic +import trap_S_StartBackgroundTrack +import trap_S_StopBackgroundTrack +import trap_AnyLanguage_ReadCharFromString +import trap_R_Font_DrawString +import trap_R_Font_HeightPixels +import trap_R_Font_StrLenChars +import trap_R_Font_StrLenPixels +import trap_R_RegisterFont +import trap_MemoryRemaining +import trap_LAN_CompareServers +import trap_LAN_ServerStatus +import trap_LAN_ResetPings +import trap_LAN_RemoveServer +import trap_LAN_AddServer +import trap_LAN_UpdateVisiblePings +import trap_LAN_ServerIsVisible +import trap_LAN_MarkServerVisible +import trap_LAN_SaveCachedServers +import trap_LAN_LoadCachedServers +import trap_LAN_GetPingInfo +import trap_LAN_GetPing +import trap_LAN_ClearPing +import trap_LAN_GetPingQueueCount +import trap_LAN_GetServerPing +import trap_LAN_GetServerInfo +import trap_LAN_GetServerAddressString +import trap_LAN_GetServerCount +import trap_GetConfigString +import trap_GetGlconfig +import trap_GetClientState +import trap_GetClipboardData +import trap_Key_SetCatcher +import trap_Key_GetCatcher +import trap_Key_ClearStates +import trap_Key_SetOverstrikeMode +import trap_Key_GetOverstrikeMode +import trap_Key_IsDown +import trap_Key_SetBinding +import trap_Key_GetBindingBuf +import trap_Key_KeynumToStringBuf +import trap_S_RegisterSound +import trap_S_StartLocalSound +import trap_CM_LerpTag +import trap_UpdateScreen +import trap_R_ModelBounds +import trap_R_DrawStretchPic +import trap_R_SetColor +import trap_R_RenderScene +import trap_R_AddLightToScene +import trap_R_AddPolyToScene +import trap_R_AddRefEntityToScene +import trap_R_ClearScene +import trap_R_RegisterShaderNoMip +import trap_R_RegisterSkin +import trap_R_RegisterModel +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Cmd_ExecuteText +import trap_Argv +import trap_Argc +import trap_Cvar_InfoStringBuffer +import trap_Cvar_Create +import trap_Cvar_Reset +import trap_Cvar_SetValue +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_Milliseconds +import trap_Error +import trap_Print +import UI_SPSkillMenu_Cache +import UI_SPSkillMenu +import UI_SPPostgameMenu_f +import UI_SPPostgameMenu_Cache +import UI_SPArena_Start +import UI_SPLevelMenu_ReInit +import UI_SPLevelMenu_f +import UI_SPLevelMenu +import UI_SPLevelMenu_Cache +import uis +import UI_LoadBestScores +import m_entersound +import UI_StartDemoLoop +import UI_Cvar_VariableString +import UI_Argv +import UI_ForceMenuOff +import UI_PopMenu +import UI_PushMenu +import UI_SetActiveMenu +import UI_IsFullscreen +import UI_DrawTextBox +import UI_CursorInRect +import UI_DrawChar +import UI_DrawString +import UI_ProportionalStringWidth +import UI_DrawProportionalString +import UI_ProportionalSizeScale +import UI_DrawBannerString +import UI_LerpColor +import UI_SetColor +import UI_UpdateScreen +import UI_DrawSides +import UI_DrawTopBottom +import UI_DrawRect +import UI_FillRect +import UI_DrawHandlePic +import UI_DrawNamedPic +import UI_ClampCvar +import UI_ConsoleCommand +import UI_Refresh +import UI_MouseEvent +import UI_KeyEvent +import UI_Shutdown +import UI_Init +import uiInfo +import DriverInfo_Cache +import GraphicsOptions_Cache +import UI_GraphicsOptionsMenu +import ServerInfo_Cache +import UI_ServerInfoMenu +import UI_BotSelectMenu_Cache +import UI_BotSelectMenu +import ServerOptions_Cache +import StartServer_Cache +import UI_StartServerMenu +import ArenaServers_Cache +import UI_ArenaServersMenu +import SpecifyServer_Cache +import UI_SpecifyServerMenu +import SpecifyLeague_Cache +import UI_SpecifyLeagueMenu +import Preferences_Cache +import UI_PreferencesMenu +import PlayerSettings_Cache +import UI_PlayerSettingsMenu +import PlayerModel_Cache +import UI_PlayerModelMenu +import UI_CDKeyMenu_f +import UI_CDKeyMenu_Cache +import UI_CDKeyMenu +import UI_ModsMenu_Cache +import UI_ModsMenu +import UI_CinematicsMenu_Cache +import UI_CinematicsMenu_f +import UI_CinematicsMenu +import Demos_Cache +import UI_DemosMenu +import Controls_Cache +import UI_ControlsMenu +import UI_DrawConnectScreen +import TeamMain_Cache +import UI_TeamMainMenu +import UI_SetupMenu +import UI_SetupMenu_Cache +import UI_ConfirmMenu +import ConfirmMenu_Cache +import UI_InGameMenu +import InGame_Cache +import UI_CreditMenu +import UI_UpdateCvars +import UI_RegisterCvars +import UI_MainMenu +import MainMenu_Cache +import UI_LoadForceConfig_List +import UI_LoadArenas +import UI_ClearScores +import UI_ShowPostGame +import UI_AdjustTimeByGame +import _UI_SetActiveMenu +import UI_LoadMenus +import UI_Load +import UI_Report +import UI_FeederSelection +import MenuField_Key +import MenuField_Draw +import MenuField_Init +import MField_Draw +import MField_CharEvent +import MField_KeyDownEvent +import MField_Clear +import ui_medalSounds +import ui_medalPicNames +import ui_medalNames +import text_color_highlight +import text_color_normal +import text_color_disabled +import listbar_color +import list_color +import name_color +import color_dim +import color_red +import color_orange +import color_blue +import color_yellow +import color_white +import color_black +import menu_dim_color +import menu_black_color +import menu_red_color +import menu_highlight_color +import menu_dark_color +import menu_grayed_color +import menu_text_color +import weaponChangeSound +import menu_null_sound +import menu_buzz_sound +import menu_out_sound +import menu_move_sound +import menu_in_sound +import ScrollList_Key +import ScrollList_Draw +import Bitmap_Draw +import Bitmap_Init +import Menu_DefaultKey +import Menu_SetCursorToItem +import Menu_SetCursor +import Menu_ActivateItem +import Menu_ItemAtCursor +import Menu_Draw +import Menu_AdjustCursor +import Menu_AddItem +import Menu_Focus +import Menu_Cache +import ui_serverStatusTimeOut +import ui_bigFont +import ui_smallFont +import ui_scoreTime +import ui_scoreShutoutBonus +import ui_scoreSkillBonus +import ui_scoreTimeBonus +import ui_scoreBase +import ui_scoreTeam +import ui_scorePerfect +import ui_scoreScore +import ui_scoreGauntlets +import ui_scoreAssists +import ui_scoreDefends +import ui_scoreExcellents +import ui_scoreImpressives +import ui_scoreAccuracy +import ui_singlePlayerActive +import ui_lastServerRefresh_3 +import ui_lastServerRefresh_2 +import ui_lastServerRefresh_1 +import ui_lastServerRefresh_0 +import ui_selectedPlayerName +import ui_selectedPlayer +import ui_currentOpponent +import ui_mapIndex +import ui_currentNetMap +import ui_currentMap +import ui_currentTier +import ui_menuFiles +import ui_opponentName +import ui_dedicated +import ui_serverFilterType +import ui_netSource +import ui_joinGameType +import ui_actualNetGameType +import ui_netGameType +import ui_gameType +import ui_fragLimit +import ui_captureLimit +import ui_cdkeychecked +import ui_cdkey +import ui_server16 +import ui_server15 +import ui_server14 +import ui_server13 +import ui_server12 +import ui_server11 +import ui_server10 +import ui_server9 +import ui_server8 +import ui_server7 +import ui_server6 +import ui_server5 +import ui_server4 +import ui_server3 +import ui_server2 +import ui_server1 +import ui_marks +import ui_drawCrosshairNames +import ui_drawCrosshair +import ui_browserShowEmpty +import ui_browserShowFull +import ui_browserSortKey +import ui_browserGameType +import ui_browserMaster +import ui_spSelection +import ui_spSkill +import ui_spVideos +import ui_spAwards +import ui_spScores5 +import ui_spScores4 +import ui_spScores3 +import ui_spScores2 +import ui_spScores1 +import ui_botsFile +import ui_arenasFile +import ui_ctf_friendly +import ui_ctf_timelimit +import ui_ctf_capturelimit +import ui_team_friendly +import ui_team_timelimit +import ui_team_fraglimit +import ui_selectedModelIndex +import ui_tourney_timelimit +import ui_tourney_fraglimit +import ui_ffa_timelimit +import ui_ffa_fraglimit +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_PC_RemoveAllGlobalDefines +import trap_PC_LoadGlobalDefines +import trap_PC_SourceFileAndLine +import trap_PC_ReadToken +import trap_PC_FreeSource +import trap_PC_LoadSource +import trap_PC_AddGlobalDefine +import Controls_SetDefaults +import Controls_SetConfig +import Controls_GetConfig +import UI_OutOfMemory +import UI_InitMemory +import UI_Alloc +import Display_CacheAll +import Menu_SetFeederSelection +import Menu_Paint +import Menus_CloseAll +import LerpColor +import Display_HandleKey +import Menus_CloseByName +import Menus_ShowByName +import Menus_FindByName +import Menus_OpenByName +import Display_KeyBindPending +import Display_CursorType +import Display_MouseMove +import Display_CaptureItem +import Display_GetContext +import Menus_Activate +import Menus_AnyFullScreenVisible +import Menu_Reset +import Menus_ActivateByName +import Menu_PaintAll +import Menu_New +import Menu_Count +import PC_Script_Parse +import PC_String_Parse +import PC_Rect_Parse +import PC_Int_Parse +import PC_Color_Parse +import PC_Float_Parse +import Script_Parse +import String_Parse +import Rect_Parse +import Int_Parse +import Color_Parse +import Float_Parse +import Menu_ScrollFeeder +import Menu_HandleMouseMove +import Menu_HandleKey +import Menu_GetFocused +import Menu_PostParse +import Item_Init +import Menu_Init +import Display_ExpandMacros +import Init_Display +import String_Report +import String_Init +import String_Alloc +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $521 +char 1 103 +char 1 95 +char 1 109 +char 1 97 +char 1 120 +char 1 70 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 82 +char 1 97 +char 1 110 +char 1 107 +char 1 0 +align 1 +LABELV $365 +char 1 103 +char 1 95 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 116 +char 1 121 +char 1 112 +char 1 101 +char 1 0 +align 1 +LABELV $358 +char 1 117 +char 1 105 +char 1 95 +char 1 109 +char 1 121 +char 1 116 +char 1 101 +char 1 97 +char 1 109 +char 1 0 +align 1 +LABELV $355 +char 1 103 +char 1 95 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 66 +char 1 97 +char 1 115 +char 1 101 +char 1 100 +char 1 84 +char 1 101 +char 1 97 +char 1 109 +char 1 115 +char 1 0 +align 1 +LABELV $309 +char 1 110 +char 1 111 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $308 +char 1 101 +char 1 102 +char 1 102 +char 1 101 +char 1 99 +char 1 116 +char 1 102 +char 1 105 +char 1 101 +char 1 108 +char 1 100 +char 1 0 +align 1 +LABELV $307 +char 1 101 +char 1 102 +char 1 102 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 110 +char 1 116 +char 1 114 +char 1 121 +char 1 0 +align 1 +LABELV $306 +char 1 115 +char 1 101 +char 1 116 +char 1 102 +char 1 112 +char 1 95 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 116 +char 1 104 +char 1 114 +char 1 111 +char 1 119 +char 1 0 +align 1 +LABELV $305 +char 1 115 +char 1 101 +char 1 116 +char 1 102 +char 1 112 +char 1 95 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 100 +char 1 101 +char 1 102 +char 1 101 +char 1 110 +char 1 100 +char 1 0 +align 1 +LABELV $287 +char 1 105 +char 1 110 +char 1 103 +char 1 97 +char 1 109 +char 1 101 +char 1 95 +char 1 112 +char 1 108 +char 1 97 +char 1 121 +char 1 101 +char 1 114 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 0 +align 1 +LABELV $266 +char 1 84 +char 1 101 +char 1 109 +char 1 112 +char 1 108 +char 1 97 +char 1 116 +char 1 101 +char 1 32 +char 1 115 +char 1 97 +char 1 118 +char 1 101 +char 1 100 +char 1 32 +char 1 97 +char 1 115 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 34 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $264 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $260 +char 1 37 +char 1 105 +char 1 45 +char 1 37 +char 1 105 +char 1 45 +char 1 0 +align 1 +LABELV $259 +char 1 84 +char 1 104 +char 1 101 +char 1 114 +char 1 101 +char 1 32 +char 1 119 +char 1 97 +char 1 115 +char 1 32 +char 1 97 +char 1 110 +char 1 32 +char 1 101 +char 1 114 +char 1 114 +char 1 111 +char 1 114 +char 1 32 +char 1 119 +char 1 114 +char 1 105 +char 1 116 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 32 +char 1 116 +char 1 101 +char 1 109 +char 1 112 +char 1 108 +char 1 97 +char 1 116 +char 1 101 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 40 +char 1 114 +char 1 101 +char 1 97 +char 1 100 +char 1 45 +char 1 111 +char 1 110 +char 1 108 +char 1 121 +char 1 63 +char 1 41 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $256 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 102 +char 1 103 +char 1 47 +char 1 100 +char 1 97 +char 1 114 +char 1 107 +char 1 47 +char 1 37 +char 1 115 +char 1 46 +char 1 102 +char 1 99 +char 1 102 +char 1 0 +align 1 +LABELV $255 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 102 +char 1 103 +char 1 47 +char 1 108 +char 1 105 +char 1 103 +char 1 104 +char 1 116 +char 1 47 +char 1 37 +char 1 115 +char 1 46 +char 1 102 +char 1 99 +char 1 102 +char 1 0 +align 1 +LABELV $252 +char 1 89 +char 1 111 +char 1 117 +char 1 32 +char 1 100 +char 1 105 +char 1 100 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 112 +char 1 114 +char 1 111 +char 1 118 +char 1 105 +char 1 100 +char 1 101 +char 1 32 +char 1 97 +char 1 32 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 32 +char 1 102 +char 1 111 +char 1 114 +char 1 32 +char 1 116 +char 1 104 +char 1 101 +char 1 32 +char 1 116 +char 1 101 +char 1 109 +char 1 112 +char 1 108 +char 1 97 +char 1 116 +char 1 101 +char 1 46 +char 1 10 +char 1 0 +align 1 +LABELV $248 +char 1 117 +char 1 105 +char 1 95 +char 1 83 +char 1 97 +char 1 118 +char 1 101 +char 1 70 +char 1 67 +char 1 70 +char 1 0 +align 1 +LABELV $241 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 104 +char 1 97 +char 1 110 +char 1 103 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $240 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 104 +char 1 97 +char 1 110 +char 1 103 +char 1 101 +char 1 100 +char 1 32 +char 1 34 +char 1 37 +char 1 115 +char 1 34 +char 1 10 +char 1 0 +align 1 +LABELV $218 +char 1 37 +char 1 105 +char 1 45 +char 1 37 +char 1 105 +char 1 45 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $217 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 112 +char 1 111 +char 1 119 +char 1 101 +char 1 114 +char 1 115 +char 1 0 +align 1 +LABELV $202 +char 1 109 +char 1 101 +char 1 110 +char 1 117 +char 1 47 +char 1 97 +char 1 114 +char 1 116 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 112 +char 1 117 +char 1 114 +char 1 112 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $200 +char 1 109 +char 1 101 +char 1 110 +char 1 117 +char 1 47 +char 1 97 +char 1 114 +char 1 116 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 98 +char 1 108 +char 1 117 +char 1 101 +char 1 0 +align 1 +LABELV $198 +char 1 109 +char 1 101 +char 1 110 +char 1 117 +char 1 47 +char 1 97 +char 1 114 +char 1 116 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 103 +char 1 114 +char 1 101 +char 1 101 +char 1 110 +char 1 0 +align 1 +LABELV $196 +char 1 109 +char 1 101 +char 1 110 +char 1 117 +char 1 47 +char 1 97 +char 1 114 +char 1 116 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 121 +char 1 101 +char 1 108 +char 1 108 +char 1 111 +char 1 119 +char 1 0 +align 1 +LABELV $194 +char 1 109 +char 1 101 +char 1 110 +char 1 117 +char 1 47 +char 1 97 +char 1 114 +char 1 116 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 111 +char 1 114 +char 1 97 +char 1 110 +char 1 103 +char 1 101 +char 1 0 +align 1 +LABELV $192 +char 1 109 +char 1 101 +char 1 110 +char 1 117 +char 1 47 +char 1 97 +char 1 114 +char 1 116 +char 1 47 +char 1 115 +char 1 97 +char 1 98 +char 1 101 +char 1 114 +char 1 95 +char 1 114 +char 1 101 +char 1 100 +char 1 0 +align 1 +LABELV $191 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 56 +char 1 0 +align 1 +LABELV $188 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 105 +char 1 114 +char 1 99 +char 1 108 +char 1 101 +char 1 56 +char 1 0 +align 1 +LABELV $186 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 55 +char 1 0 +align 1 +LABELV $183 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 105 +char 1 114 +char 1 99 +char 1 108 +char 1 101 +char 1 55 +char 1 0 +align 1 +LABELV $181 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 54 +char 1 0 +align 1 +LABELV $178 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 105 +char 1 114 +char 1 99 +char 1 108 +char 1 101 +char 1 54 +char 1 0 +align 1 +LABELV $176 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 53 +char 1 0 +align 1 +LABELV $173 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 105 +char 1 114 +char 1 99 +char 1 108 +char 1 101 +char 1 53 +char 1 0 +align 1 +LABELV $171 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 52 +char 1 0 +align 1 +LABELV $168 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 105 +char 1 114 +char 1 99 +char 1 108 +char 1 101 +char 1 52 +char 1 0 +align 1 +LABELV $166 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 51 +char 1 0 +align 1 +LABELV $163 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 105 +char 1 114 +char 1 99 +char 1 108 +char 1 101 +char 1 51 +char 1 0 +align 1 +LABELV $161 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 50 +char 1 0 +align 1 +LABELV $158 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 105 +char 1 114 +char 1 99 +char 1 108 +char 1 101 +char 1 50 +char 1 0 +align 1 +LABELV $156 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 49 +char 1 0 +align 1 +LABELV $153 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 99 +char 1 105 +char 1 114 +char 1 99 +char 1 108 +char 1 101 +char 1 49 +char 1 0 +align 1 +LABELV $150 +char 1 102 +char 1 111 +char 1 114 +char 1 99 +char 1 101 +char 1 115 +char 1 116 +char 1 97 +char 1 114 +char 1 48 +char 1 0 diff --git a/CODE-mp/ui/vm/ui_gameinfo.asm b/CODE-mp/ui/vm/ui_gameinfo.asm new file mode 100644 index 0000000..69da403 --- /dev/null +++ b/CODE-mp/ui/vm/ui_gameinfo.asm @@ -0,0 +1,3127 @@ +export UI_ParseInfos +code +proc UI_ParseInfos 2084 12 +file "../ui_gameinfo.c" +line 26 +;1:// Copyright (C) 1999-2000 Id Software, Inc. +;2:// +;3:// +;4:// gameinfo.c +;5:// +;6: +;7:#include "ui_local.h" +;8: +;9: +;10:// +;11:// arena and bot info +;12:// +;13: +;14: +;15:int ui_numBots; +;16:static char *ui_botInfos[MAX_BOTS]; +;17: +;18:static int ui_numArenas; +;19:static char *ui_arenaInfos[MAX_ARENAS]; +;20: +;21:/* +;22:=============== +;23:UI_ParseInfos +;24:=============== +;25:*/ +;26:int UI_ParseInfos( char *buf, int max, char *infos[] ) { +line 32 +;27: char *token; +;28: int count; +;29: char key[MAX_TOKEN_CHARS]; +;30: char info[MAX_INFO_STRING]; +;31: +;32: count = 0; +ADDRLP4 2052 +CNSTI4 0 +ASGNI4 +ADDRGP4 $119 +JUMPV +LABELV $118 +line 34 +;33: +;34: while ( 1 ) { +line 35 +;35: token = COM_Parse( (const char **)&buf ); +ADDRFP4 0 +ARGP4 +ADDRLP4 2056 +ADDRGP4 COM_Parse +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 2056 +INDIRP4 +ASGNP4 +line 36 +;36: if ( !token[0] ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $121 +line 37 +;37: break; +ADDRGP4 $120 +JUMPV +LABELV $121 +line 39 +;38: } +;39: if ( strcmp( token, "{" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $125 +ARGP4 +ADDRLP4 2060 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 2060 +INDIRI4 +CNSTI4 0 +EQI4 $123 +line 40 +;40: Com_Printf( "Missing { in info file\n" ); +ADDRGP4 $126 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 41 +;41: break; +ADDRGP4 $120 +JUMPV +LABELV $123 +line 44 +;42: } +;43: +;44: if ( count == max ) { +ADDRLP4 2052 +INDIRI4 +ADDRFP4 4 +INDIRI4 +NEI4 $127 +line 45 +;45: Com_Printf( "Max infos exceeded\n" ); +ADDRGP4 $129 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 46 +;46: break; +ADDRGP4 $120 +JUMPV +LABELV $127 +line 49 +;47: } +;48: +;49: info[0] = '\0'; +ADDRLP4 1028 +CNSTI1 0 +ASGNI1 +ADDRGP4 $131 +JUMPV +LABELV $130 +line 50 +;50: while ( 1 ) { +line 51 +;51: token = COM_ParseExt( (const char **)&buf, qtrue ); +ADDRFP4 0 +ARGP4 +CNSTI4 1 +ARGI4 +ADDRLP4 2064 +ADDRGP4 COM_ParseExt +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 2064 +INDIRP4 +ASGNP4 +line 52 +;52: if ( !token[0] ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $133 +line 53 +;53: Com_Printf( "Unexpected end of info file\n" ); +ADDRGP4 $135 +ARGP4 +ADDRGP4 Com_Printf +CALLV +pop +line 54 +;54: break; +ADDRGP4 $132 +JUMPV +LABELV $133 +line 56 +;55: } +;56: if ( !strcmp( token, "}" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $138 +ARGP4 +ADDRLP4 2068 +ADDRGP4 strcmp +CALLI4 +ASGNI4 +ADDRLP4 2068 +INDIRI4 +CNSTI4 0 +NEI4 $136 +line 57 +;57: break; +ADDRGP4 $132 +JUMPV +LABELV $136 +line 59 +;58: } +;59: Q_strncpyz( key, token, sizeof( key ) ); +ADDRLP4 4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRGP4 Q_strncpyz +CALLV +pop +line 61 +;60: +;61: token = COM_ParseExt( (const char **)&buf, qfalse ); +ADDRFP4 0 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 2072 +ADDRGP4 COM_ParseExt +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 2072 +INDIRP4 +ASGNP4 +line 62 +;62: if ( !token[0] ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +NEI4 $139 +line 63 +;63: strcpy( token, "" ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $141 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 64 +;64: } +LABELV $139 +line 65 +;65: Info_SetValueForKey( info, key, token ); +ADDRLP4 1028 +ARGP4 +ADDRLP4 4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 Info_SetValueForKey +CALLV +pop +line 66 +;66: } +LABELV $131 +line 50 +ADDRGP4 $130 +JUMPV +LABELV $132 +line 68 +;67: //NOTE: extra space for arena number +;68: infos[count] = UI_Alloc(strlen(info) + strlen("\\num\\") + strlen(va("%d", MAX_ARENAS)) + 1); +ADDRLP4 1028 +ARGP4 +ADDRLP4 2064 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRGP4 $142 +ARGP4 +ADDRLP4 2068 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRGP4 $143 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 2072 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 2072 +INDIRP4 +ARGP4 +ADDRLP4 2076 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 2064 +INDIRI4 +ADDRLP4 2068 +INDIRI4 +ADDI4 +ADDRLP4 2076 +INDIRI4 +ADDI4 +CNSTI4 1 +ADDI4 +ARGI4 +ADDRLP4 2080 +ADDRGP4 UI_Alloc +CALLP4 +ASGNP4 +ADDRLP4 2052 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +ADDRLP4 2080 +INDIRP4 +ASGNP4 +line 69 +;69: if (infos[count]) { +ADDRLP4 2052 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $144 +line 70 +;70: strcpy(infos[count], info); +ADDRLP4 2052 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRFP4 8 +INDIRP4 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 1028 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 71 +;71: count++; +ADDRLP4 2052 +ADDRLP4 2052 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 72 +;72: } +LABELV $144 +line 73 +;73: } +LABELV $119 +line 34 +ADDRGP4 $118 +JUMPV +LABELV $120 +line 74 +;74: return count; +ADDRLP4 2052 +INDIRI4 +RETI4 +LABELV $117 +endproc UI_ParseInfos 2084 12 +proc UI_LoadArenasFromFile 8216 16 +line 82 +;75:} +;76: +;77:/* +;78:=============== +;79:UI_LoadArenasFromFile +;80:=============== +;81:*/ +;82:static void UI_LoadArenasFromFile( char *filename ) { +line 87 +;83: int len; +;84: fileHandle_t f; +;85: char buf[MAX_ARENAS_TEXT]; +;86: +;87: len = trap_FS_FOpenFile( filename, &f, FS_READ ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 4 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 8200 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 8200 +INDIRI4 +ASGNI4 +line 88 +;88: if ( !f ) { +ADDRLP4 4 +INDIRI4 +CNSTI4 0 +NEI4 $147 +line 89 +;89: trap_Print( va( S_COLOR_RED "file not found: %s\n", filename ) ); +ADDRGP4 $149 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8204 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8204 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 90 +;90: return; +ADDRGP4 $146 +JUMPV +LABELV $147 +line 92 +;91: } +;92: if ( len >= MAX_ARENAS_TEXT ) { +ADDRLP4 0 +INDIRI4 +CNSTI4 8192 +LTI4 $150 +line 93 +;93: trap_Print( va( S_COLOR_RED "file too large: %s is %i, max allowed is %i", filename, len, MAX_ARENAS_TEXT ) ); +ADDRGP4 $152 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +CNSTI4 8192 +ARGI4 +ADDRLP4 8204 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8204 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 94 +;94: trap_FS_FCloseFile( f ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 95 +;95: return; +ADDRGP4 $146 +JUMPV +LABELV $150 +line 98 +;96: } +;97: +;98: trap_FS_Read( buf, len, f ); +ADDRLP4 8 +ARGP4 +ADDRLP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 99 +;99: buf[len] = 0; +ADDRLP4 0 +INDIRI4 +ADDRLP4 8 +ADDP4 +CNSTI1 0 +ASGNI1 +line 100 +;100: trap_FS_FCloseFile( f ); +ADDRLP4 4 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 102 +;101: +;102: ui_numArenas += UI_ParseInfos( buf, MAX_ARENAS - ui_numArenas, &ui_arenaInfos[ui_numArenas] ); +ADDRLP4 8 +ARGP4 +ADDRLP4 8204 +ADDRGP4 ui_numArenas +ASGNP4 +ADDRLP4 8208 +ADDRLP4 8204 +INDIRP4 +INDIRI4 +ASGNI4 +CNSTI4 1024 +ADDRLP4 8208 +INDIRI4 +SUBI4 +ARGI4 +ADDRLP4 8208 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 ui_arenaInfos +ADDP4 +ARGP4 +ADDRLP4 8212 +ADDRGP4 UI_ParseInfos +CALLI4 +ASGNI4 +ADDRLP4 8204 +INDIRP4 +ADDRLP4 8208 +INDIRI4 +ADDRLP4 8212 +INDIRI4 +ADDI4 +ASGNI4 +line 103 +;103:} +LABELV $146 +endproc UI_LoadArenasFromFile 8216 16 +export UI_LoadArenas +proc UI_LoadArenas 1528 16 +line 110 +;104: +;105:/* +;106:=============== +;107:UI_LoadArenas +;108:=============== +;109:*/ +;110:void UI_LoadArenas( void ) { +line 120 +;111: int numdirs; +;112: vmCvar_t arenasFile; +;113: char filename[128]; +;114: char dirlist[1024]; +;115: char* dirptr; +;116: int i, n; +;117: int dirlen; +;118: char *type; +;119: +;120: ui_numArenas = 0; +ADDRGP4 ui_numArenas +CNSTI4 0 +ASGNI4 +line 121 +;121: uiInfo.mapCount = 0; +ADDRGP4 uiInfo+20208 +CNSTI4 0 +ASGNI4 +line 123 +;122: +;123: trap_Cvar_Register( &arenasFile, "g_arenasFile", "", CVAR_INIT|CVAR_ROM ); +ADDRLP4 152 +ARGP4 +ADDRGP4 $155 +ARGP4 +ADDRGP4 $156 +ARGP4 +CNSTI4 80 +ARGI4 +ADDRGP4 trap_Cvar_Register +CALLV +pop +line 124 +;124: if( *arenasFile.string ) { +ADDRLP4 152+16 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $157 +line 125 +;125: UI_LoadArenasFromFile(arenasFile.string); +ADDRLP4 152+16 +ARGP4 +ADDRGP4 UI_LoadArenasFromFile +CALLV +pop +line 126 +;126: } +ADDRGP4 $158 +JUMPV +LABELV $157 +line 127 +;127: else { +line 128 +;128: UI_LoadArenasFromFile("scripts/arenas.txt"); +ADDRGP4 $161 +ARGP4 +ADDRGP4 UI_LoadArenasFromFile +CALLV +pop +line 129 +;129: } +LABELV $158 +line 132 +;130: +;131: // get all arenas from .arena files +;132: numdirs = trap_FS_GetFileList("scripts", ".arena", dirlist, 1024 ); +ADDRGP4 $162 +ARGP4 +ADDRGP4 $163 +ARGP4 +ADDRLP4 424 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 1448 +ADDRGP4 trap_FS_GetFileList +CALLI4 +ASGNI4 +ADDRLP4 148 +ADDRLP4 1448 +INDIRI4 +ASGNI4 +line 133 +;133: dirptr = dirlist; +ADDRLP4 8 +ADDRLP4 424 +ASGNP4 +line 134 +;134: for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { +ADDRLP4 140 +CNSTI4 0 +ASGNI4 +ADDRGP4 $167 +JUMPV +LABELV $164 +line 135 +;135: dirlen = strlen(dirptr); +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRLP4 1452 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 144 +ADDRLP4 1452 +INDIRI4 +ASGNI4 +line 136 +;136: strcpy(filename, "scripts/"); +ADDRLP4 12 +ARGP4 +ADDRGP4 $168 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 137 +;137: strcat(filename, dirptr); +ADDRLP4 12 +ARGP4 +ADDRLP4 8 +INDIRP4 +ARGP4 +ADDRGP4 strcat +CALLP4 +pop +line 138 +;138: UI_LoadArenasFromFile(filename); +ADDRLP4 12 +ARGP4 +ADDRGP4 UI_LoadArenasFromFile +CALLV +pop +line 139 +;139: } +LABELV $165 +line 134 +ADDRLP4 1452 +CNSTI4 1 +ASGNI4 +ADDRLP4 140 +ADDRLP4 140 +INDIRI4 +ADDRLP4 1452 +INDIRI4 +ADDI4 +ASGNI4 +ADDRLP4 8 +ADDRLP4 144 +INDIRI4 +ADDRLP4 1452 +INDIRI4 +ADDI4 +ADDRLP4 8 +INDIRP4 +ADDP4 +ASGNP4 +LABELV $167 +ADDRLP4 140 +INDIRI4 +ADDRLP4 148 +INDIRI4 +LTI4 $164 +line 140 +;140: trap_Print( va( "%i arenas parsed\n", ui_numArenas ) ); +ADDRGP4 $169 +ARGP4 +ADDRGP4 ui_numArenas +INDIRI4 +ARGI4 +ADDRLP4 1456 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1456 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 141 +;141: if (UI_OutOfMemory()) { +ADDRLP4 1460 +ADDRGP4 UI_OutOfMemory +CALLI4 +ASGNI4 +ADDRLP4 1460 +INDIRI4 +CNSTI4 0 +EQI4 $170 +line 142 +;142: trap_Print(S_COLOR_YELLOW"WARNING: not anough memory in pool to load all arenas\n"); +ADDRGP4 $172 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 143 +;143: } +LABELV $170 +line 145 +;144: +;145: for( n = 0; n < ui_numArenas; n++ ) { +ADDRLP4 4 +CNSTI4 0 +ASGNI4 +ADDRGP4 $176 +JUMPV +LABELV $173 +line 148 +;146: // determine type +;147: +;148: uiInfo.mapList[uiInfo.mapCount].cinematic = -1; +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+24 +ADDP4 +CNSTI4 -1 +ASGNI4 +line 149 +;149: uiInfo.mapList[uiInfo.mapCount].mapLoadName = String_Alloc(Info_ValueForKey(ui_arenaInfos[n], "map")); +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 ui_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $183 +ARGP4 +ADDRLP4 1464 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1464 +INDIRP4 +ARGP4 +ADDRLP4 1468 +ADDRGP4 String_Alloc +CALLP4 +ASGNP4 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+4 +ADDP4 +ADDRLP4 1468 +INDIRP4 +ASGNP4 +line 150 +;150: uiInfo.mapList[uiInfo.mapCount].mapName = String_Alloc(Info_ValueForKey(ui_arenaInfos[n], "longname")); +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 ui_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $186 +ARGP4 +ADDRLP4 1472 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 1472 +INDIRP4 +ARGP4 +ADDRLP4 1476 +ADDRGP4 String_Alloc +CALLP4 +ASGNP4 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212 +ADDP4 +ADDRLP4 1476 +INDIRP4 +ASGNP4 +line 151 +;151: uiInfo.mapList[uiInfo.mapCount].levelShot = -1; +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+92 +ADDP4 +CNSTI4 -1 +ASGNI4 +line 152 +;152: uiInfo.mapList[uiInfo.mapCount].imageName = String_Alloc(va("levelshots/%s", uiInfo.mapList[uiInfo.mapCount].mapLoadName)); +ADDRGP4 $193 +ARGP4 +ADDRLP4 1480 +CNSTI4 100 +ASGNI4 +ADDRLP4 1480 +INDIRI4 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+4 +ADDP4 +INDIRP4 +ARGP4 +ADDRLP4 1484 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1484 +INDIRP4 +ARGP4 +ADDRLP4 1488 +ADDRGP4 String_Alloc +CALLP4 +ASGNP4 +ADDRLP4 1480 +INDIRI4 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+8 +ADDP4 +ADDRLP4 1488 +INDIRP4 +ASGNP4 +line 153 +;153: uiInfo.mapList[uiInfo.mapCount].typeBits = 0; +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +CNSTI4 0 +ASGNI4 +line 155 +;154: +;155: type = Info_ValueForKey( ui_arenaInfos[n], "type" ); +ADDRLP4 4 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 ui_arenaInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $200 +ARGP4 +ADDRLP4 1492 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 1492 +INDIRP4 +ASGNP4 +line 157 +;156: // if no type specified, it will be treated as "ffa" +;157: if( *type ) { +ADDRLP4 0 +INDIRP4 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $201 +line 158 +;158: if( strstr( type, "ffa" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $205 +ARGP4 +ADDRLP4 1496 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 1496 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $203 +line 159 +;159: uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_FFA); +ADDRLP4 1500 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +ASGNP4 +ADDRLP4 1500 +INDIRP4 +ADDRLP4 1500 +INDIRP4 +INDIRI4 +CNSTI4 1 +BORI4 +ASGNI4 +line 160 +;160: } +LABELV $203 +line 161 +;161: if( strstr( type, "holocron" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $211 +ARGP4 +ADDRLP4 1500 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 1500 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $209 +line 162 +;162: uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_HOLOCRON); +ADDRLP4 1504 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +ASGNP4 +ADDRLP4 1504 +INDIRP4 +ADDRLP4 1504 +INDIRP4 +INDIRI4 +CNSTI4 2 +BORI4 +ASGNI4 +line 163 +;163: } +LABELV $209 +line 164 +;164: if( strstr( type, "jedimaster" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $217 +ARGP4 +ADDRLP4 1504 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 1504 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $215 +line 165 +;165: uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_JEDIMASTER); +ADDRLP4 1508 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +ASGNP4 +ADDRLP4 1508 +INDIRP4 +ADDRLP4 1508 +INDIRP4 +INDIRI4 +CNSTI4 4 +BORI4 +ASGNI4 +line 166 +;166: } +LABELV $215 +line 167 +;167: if( strstr( type, "duel" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $223 +ARGP4 +ADDRLP4 1508 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 1508 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $221 +line 168 +;168: uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_TOURNAMENT); +ADDRLP4 1512 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +ASGNP4 +ADDRLP4 1512 +INDIRP4 +ADDRLP4 1512 +INDIRP4 +INDIRI4 +CNSTI4 8 +BORI4 +ASGNI4 +line 169 +;169: } +LABELV $221 +line 170 +;170: if( strstr( type, "saga" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $229 +ARGP4 +ADDRLP4 1512 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 1512 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $227 +line 171 +;171: uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_SAGA); +ADDRLP4 1516 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +ASGNP4 +ADDRLP4 1516 +INDIRP4 +ADDRLP4 1516 +INDIRP4 +INDIRI4 +CNSTI4 64 +BORI4 +ASGNI4 +line 172 +;172: } +LABELV $227 +line 173 +;173: if( strstr( type, "ctf" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $235 +ARGP4 +ADDRLP4 1516 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 1516 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $233 +line 174 +;174: uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_CTF); +ADDRLP4 1520 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +ASGNP4 +ADDRLP4 1520 +INDIRP4 +ADDRLP4 1520 +INDIRP4 +INDIRI4 +CNSTI4 128 +BORI4 +ASGNI4 +line 175 +;175: } +LABELV $233 +line 176 +;176: if( strstr( type, "cty" ) ) { +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $241 +ARGP4 +ADDRLP4 1520 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 1520 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $202 +line 177 +;177: uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_CTY); +ADDRLP4 1524 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +ASGNP4 +ADDRLP4 1524 +INDIRP4 +ADDRLP4 1524 +INDIRP4 +INDIRI4 +CNSTI4 256 +BORI4 +ASGNI4 +line 178 +;178: } +line 179 +;179: } else { +ADDRGP4 $202 +JUMPV +LABELV $201 +line 180 +;180: uiInfo.mapList[uiInfo.mapCount].typeBits |= (1 << GT_FFA); +ADDRLP4 1496 +CNSTI4 100 +ADDRGP4 uiInfo+20208 +INDIRI4 +MULI4 +ADDRGP4 uiInfo+20212+20 +ADDP4 +ASGNP4 +ADDRLP4 1496 +INDIRP4 +ADDRLP4 1496 +INDIRP4 +INDIRI4 +CNSTI4 1 +BORI4 +ASGNI4 +line 181 +;181: } +LABELV $202 +line 183 +;182: +;183: uiInfo.mapCount++; +ADDRLP4 1496 +ADDRGP4 uiInfo+20208 +ASGNP4 +ADDRLP4 1496 +INDIRP4 +ADDRLP4 1496 +INDIRP4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +line 184 +;184: if (uiInfo.mapCount >= MAX_MAPS) { +ADDRGP4 uiInfo+20208 +INDIRI4 +CNSTI4 128 +LTI4 $249 +line 185 +;185: break; +ADDRGP4 $175 +JUMPV +LABELV $249 +line 187 +;186: } +;187: } +LABELV $174 +line 145 +ADDRLP4 4 +ADDRLP4 4 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $176 +ADDRLP4 4 +INDIRI4 +ADDRGP4 ui_numArenas +INDIRI4 +LTI4 $173 +LABELV $175 +line 188 +;188:} +LABELV $153 +endproc UI_LoadArenas 1528 16 +proc UI_LoadBotsFromFile 8224 16 +line 196 +;189: +;190: +;191:/* +;192:=============== +;193:UI_LoadBotsFromFile +;194:=============== +;195:*/ +;196:static void UI_LoadBotsFromFile( char *filename ) { +line 202 +;197: int len; +;198: fileHandle_t f; +;199: char buf[MAX_BOTS_TEXT]; +;200: char *stopMark; +;201: +;202: len = trap_FS_FOpenFile( filename, &f, FS_READ ); +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8196 +ARGP4 +CNSTI4 0 +ARGI4 +ADDRLP4 8204 +ADDRGP4 trap_FS_FOpenFile +CALLI4 +ASGNI4 +ADDRLP4 8192 +ADDRLP4 8204 +INDIRI4 +ASGNI4 +line 203 +;203: if ( !f ) { +ADDRLP4 8196 +INDIRI4 +CNSTI4 0 +NEI4 $253 +line 204 +;204: trap_Print( va( S_COLOR_RED "file not found: %s\n", filename ) ); +ADDRGP4 $149 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8208 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8208 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 205 +;205: return; +ADDRGP4 $252 +JUMPV +LABELV $253 +line 207 +;206: } +;207: if ( len >= MAX_BOTS_TEXT ) { +ADDRLP4 8192 +INDIRI4 +CNSTI4 8192 +LTI4 $255 +line 208 +;208: trap_Print( va( S_COLOR_RED "file too large: %s is %i, max allowed is %i", filename, len, MAX_BOTS_TEXT ) ); +ADDRGP4 $152 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 8192 +INDIRI4 +ARGI4 +CNSTI4 8192 +ARGI4 +ADDRLP4 8208 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 8208 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 209 +;209: trap_FS_FCloseFile( f ); +ADDRLP4 8196 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 210 +;210: return; +ADDRGP4 $252 +JUMPV +LABELV $255 +line 213 +;211: } +;212: +;213: trap_FS_Read( buf, len, f ); +ADDRLP4 0 +ARGP4 +ADDRLP4 8192 +INDIRI4 +ARGI4 +ADDRLP4 8196 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_Read +CALLV +pop +line 214 +;214: buf[len] = 0; +ADDRLP4 8192 +INDIRI4 +ADDRLP4 0 +ADDP4 +CNSTI1 0 +ASGNI1 +line 216 +;215: +;216: stopMark = strstr(buf, "@STOPHERE"); +ADDRLP4 0 +ARGP4 +ADDRGP4 $257 +ARGP4 +ADDRLP4 8208 +ADDRGP4 strstr +CALLP4 +ASGNP4 +ADDRLP4 8200 +ADDRLP4 8208 +INDIRP4 +ASGNP4 +line 222 +;217: +;218: //This bot is in place as a mark for modview's bot viewer. +;219: //If we hit it just stop and trace back to the beginning of the bot define and cut the string off. +;220: //This is only done in the UI and not the game so that "test" bots can be added manually and still +;221: //not show up in the menu. +;222: if (stopMark) +ADDRLP4 8200 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $258 +line 223 +;223: { +line 224 +;224: int startPoint = stopMark - buf; +ADDRLP4 8212 +ADDRLP4 8200 +INDIRP4 +CVPU4 4 +ADDRLP4 0 +CVPU4 4 +SUBU4 +CVUI4 4 +ASGNI4 +ADDRGP4 $261 +JUMPV +LABELV $260 +line 227 +;225: +;226: while (buf[startPoint] != '{') +;227: { +line 228 +;228: startPoint--; +ADDRLP4 8212 +ADDRLP4 8212 +INDIRI4 +CNSTI4 1 +SUBI4 +ASGNI4 +line 229 +;229: } +LABELV $261 +line 226 +ADDRLP4 8212 +INDIRI4 +ADDRLP4 0 +ADDP4 +INDIRI1 +CVII4 1 +CNSTI4 123 +NEI4 $260 +line 231 +;230: +;231: buf[startPoint] = 0; +ADDRLP4 8212 +INDIRI4 +ADDRLP4 0 +ADDP4 +CNSTI1 0 +ASGNI1 +line 232 +;232: } +LABELV $258 +line 234 +;233: +;234: trap_FS_FCloseFile( f ); +ADDRLP4 8196 +INDIRI4 +ARGI4 +ADDRGP4 trap_FS_FCloseFile +CALLV +pop +line 236 +;235: +;236: COM_Compress(buf); +ADDRLP4 0 +ARGP4 +ADDRGP4 COM_Compress +CALLI4 +pop +line 238 +;237: +;238: ui_numBots += UI_ParseInfos( buf, MAX_BOTS - ui_numBots, &ui_botInfos[ui_numBots] ); +ADDRLP4 0 +ARGP4 +ADDRLP4 8212 +ADDRGP4 ui_numBots +ASGNP4 +ADDRLP4 8216 +ADDRLP4 8212 +INDIRP4 +INDIRI4 +ASGNI4 +CNSTI4 1024 +ADDRLP4 8216 +INDIRI4 +SUBI4 +ARGI4 +ADDRLP4 8216 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 ui_botInfos +ADDP4 +ARGP4 +ADDRLP4 8220 +ADDRGP4 UI_ParseInfos +CALLI4 +ASGNI4 +ADDRLP4 8212 +INDIRP4 +ADDRLP4 8216 +INDIRI4 +ADDRLP4 8220 +INDIRI4 +ADDI4 +ASGNI4 +line 239 +;239:} +LABELV $252 +endproc UI_LoadBotsFromFile 8224 16 +export UI_LoadBots +proc UI_LoadBots 1452 16 +line 246 +;240: +;241:/* +;242:=============== +;243:UI_LoadBots +;244:=============== +;245:*/ +;246:void UI_LoadBots( void ) { +line 255 +;247: vmCvar_t botsFile; +;248: int numdirs; +;249: char filename[128]; +;250: char dirlist[1024]; +;251: char* dirptr; +;252: int i; +;253: int dirlen; +;254: +;255: ui_numBots = 0; +ADDRGP4 ui_numBots +CNSTI4 0 +ASGNI4 +line 257 +;256: +;257: trap_Cvar_Register( &botsFile, "g_botsFile", "", CVAR_INIT|CVAR_ROM ); +ADDRLP4 144 +ARGP4 +ADDRGP4 $264 +ARGP4 +ADDRGP4 $156 +ARGP4 +CNSTI4 80 +ARGI4 +ADDRGP4 trap_Cvar_Register +CALLV +pop +line 258 +;258: if( *botsFile.string ) { +ADDRLP4 144+16 +INDIRI1 +CVII4 1 +CNSTI4 0 +EQI4 $265 +line 259 +;259: UI_LoadBotsFromFile(botsFile.string); +ADDRLP4 144+16 +ARGP4 +ADDRGP4 UI_LoadBotsFromFile +CALLV +pop +line 260 +;260: } +ADDRGP4 $266 +JUMPV +LABELV $265 +line 261 +;261: else { +line 262 +;262: UI_LoadBotsFromFile("botfiles/bots.txt"); +ADDRGP4 $269 +ARGP4 +ADDRGP4 UI_LoadBotsFromFile +CALLV +pop +line 263 +;263: } +LABELV $266 +line 266 +;264: +;265: // get all bots from .bot files +;266: numdirs = trap_FS_GetFileList("scripts", ".bot", dirlist, 1024 ); +ADDRGP4 $162 +ARGP4 +ADDRGP4 $270 +ARGP4 +ADDRLP4 416 +ARGP4 +CNSTI4 1024 +ARGI4 +ADDRLP4 1440 +ADDRGP4 trap_FS_GetFileList +CALLI4 +ASGNI4 +ADDRLP4 140 +ADDRLP4 1440 +INDIRI4 +ASGNI4 +line 267 +;267: dirptr = dirlist; +ADDRLP4 0 +ADDRLP4 416 +ASGNP4 +line 268 +;268: for (i = 0; i < numdirs; i++, dirptr += dirlen+1) { +ADDRLP4 132 +CNSTI4 0 +ASGNI4 +ADDRGP4 $274 +JUMPV +LABELV $271 +line 269 +;269: dirlen = strlen(dirptr); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRLP4 1444 +ADDRGP4 strlen +CALLI4 +ASGNI4 +ADDRLP4 136 +ADDRLP4 1444 +INDIRI4 +ASGNI4 +line 270 +;270: strcpy(filename, "scripts/"); +ADDRLP4 4 +ARGP4 +ADDRGP4 $168 +ARGP4 +ADDRGP4 strcpy +CALLP4 +pop +line 271 +;271: strcat(filename, dirptr); +ADDRLP4 4 +ARGP4 +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 strcat +CALLP4 +pop +line 272 +;272: UI_LoadBotsFromFile(filename); +ADDRLP4 4 +ARGP4 +ADDRGP4 UI_LoadBotsFromFile +CALLV +pop +line 273 +;273: } +LABELV $272 +line 268 +ADDRLP4 1444 +CNSTI4 1 +ASGNI4 +ADDRLP4 132 +ADDRLP4 132 +INDIRI4 +ADDRLP4 1444 +INDIRI4 +ADDI4 +ASGNI4 +ADDRLP4 0 +ADDRLP4 136 +INDIRI4 +ADDRLP4 1444 +INDIRI4 +ADDI4 +ADDRLP4 0 +INDIRP4 +ADDP4 +ASGNP4 +LABELV $274 +ADDRLP4 132 +INDIRI4 +ADDRLP4 140 +INDIRI4 +LTI4 $271 +line 274 +;274: trap_Print( va( "%i bots parsed\n", ui_numBots ) ); +ADDRGP4 $275 +ARGP4 +ADDRGP4 ui_numBots +INDIRI4 +ARGI4 +ADDRLP4 1448 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 1448 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 275 +;275:} +LABELV $263 +endproc UI_LoadBots 1452 16 +export UI_GetBotInfoByNumber +proc UI_GetBotInfoByNumber 8 8 +line 283 +;276: +;277: +;278:/* +;279:=============== +;280:UI_GetBotInfoByNumber +;281:=============== +;282:*/ +;283:char *UI_GetBotInfoByNumber( int num ) { +line 284 +;284: if( num < 0 || num >= ui_numBots ) { +ADDRLP4 0 +ADDRFP4 0 +INDIRI4 +ASGNI4 +ADDRLP4 0 +INDIRI4 +CNSTI4 0 +LTI4 $279 +ADDRLP4 0 +INDIRI4 +ADDRGP4 ui_numBots +INDIRI4 +LTI4 $277 +LABELV $279 +line 285 +;285: trap_Print( va( S_COLOR_RED "Invalid bot number: %i\n", num ) ); +ADDRGP4 $280 +ARGP4 +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +ADDRGP4 va +CALLP4 +ASGNP4 +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRGP4 trap_Print +CALLV +pop +line 286 +;286: return NULL; +CNSTP4 0 +RETP4 +ADDRGP4 $276 +JUMPV +LABELV $277 +line 288 +;287: } +;288: return ui_botInfos[num]; +ADDRFP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 ui_botInfos +ADDP4 +INDIRP4 +RETP4 +LABELV $276 +endproc UI_GetBotInfoByNumber 8 8 +export UI_GetBotInfoByName +proc UI_GetBotInfoByName 16 8 +line 297 +;289:} +;290: +;291: +;292:/* +;293:=============== +;294:UI_GetBotInfoByName +;295:=============== +;296:*/ +;297:char *UI_GetBotInfoByName( const char *name ) { +line 301 +;298: int n; +;299: char *value; +;300: +;301: for ( n = 0; n < ui_numBots ; n++ ) { +ADDRLP4 0 +CNSTI4 0 +ASGNI4 +ADDRGP4 $285 +JUMPV +LABELV $282 +line 302 +;302: value = Info_ValueForKey( ui_botInfos[n], "name" ); +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 ui_botInfos +ADDP4 +INDIRP4 +ARGP4 +ADDRGP4 $286 +ARGP4 +ADDRLP4 8 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 4 +ADDRLP4 8 +INDIRP4 +ASGNP4 +line 303 +;303: if ( !Q_stricmp( value, name ) ) { +ADDRLP4 4 +INDIRP4 +ARGP4 +ADDRFP4 0 +INDIRP4 +ARGP4 +ADDRLP4 12 +ADDRGP4 Q_stricmp +CALLI4 +ASGNI4 +ADDRLP4 12 +INDIRI4 +CNSTI4 0 +NEI4 $287 +line 304 +;304: return ui_botInfos[n]; +ADDRLP4 0 +INDIRI4 +CNSTI4 2 +LSHI4 +ADDRGP4 ui_botInfos +ADDP4 +INDIRP4 +RETP4 +ADDRGP4 $281 +JUMPV +LABELV $287 +line 306 +;305: } +;306: } +LABELV $283 +line 301 +ADDRLP4 0 +ADDRLP4 0 +INDIRI4 +CNSTI4 1 +ADDI4 +ASGNI4 +LABELV $285 +ADDRLP4 0 +INDIRI4 +ADDRGP4 ui_numBots +INDIRI4 +LTI4 $282 +line 308 +;307: +;308: return NULL; +CNSTP4 0 +RETP4 +LABELV $281 +endproc UI_GetBotInfoByName 16 8 +export UI_GetNumBots +proc UI_GetNumBots 0 0 +line 311 +;309:} +;310: +;311:int UI_GetNumBots() { +line 312 +;312: return ui_numBots; +ADDRGP4 ui_numBots +INDIRI4 +RETI4 +LABELV $289 +endproc UI_GetNumBots 0 0 +export UI_GetBotNameByNumber +proc UI_GetBotNameByNumber 12 8 +line 316 +;313:} +;314: +;315: +;316:char *UI_GetBotNameByNumber( int num ) { +line 317 +;317: char *info = UI_GetBotInfoByNumber(num); +ADDRFP4 0 +INDIRI4 +ARGI4 +ADDRLP4 4 +ADDRGP4 UI_GetBotInfoByNumber +CALLP4 +ASGNP4 +ADDRLP4 0 +ADDRLP4 4 +INDIRP4 +ASGNP4 +line 318 +;318: if (info) { +ADDRLP4 0 +INDIRP4 +CVPU4 4 +CNSTU4 0 +EQU4 $291 +line 319 +;319: return Info_ValueForKey( info, "name" ); +ADDRLP4 0 +INDIRP4 +ARGP4 +ADDRGP4 $286 +ARGP4 +ADDRLP4 8 +ADDRGP4 Info_ValueForKey +CALLP4 +ASGNP4 +ADDRLP4 8 +INDIRP4 +RETP4 +ADDRGP4 $290 +JUMPV +LABELV $291 +line 321 +;320: } +;321: return "Kyle"; +ADDRGP4 $293 +RETP4 +LABELV $290 +endproc UI_GetBotNameByNumber 12 8 +bss +align 4 +LABELV ui_arenaInfos +skip 4096 +align 4 +LABELV ui_numArenas +skip 4 +align 4 +LABELV ui_botInfos +skip 4096 +export ui_numBots +align 4 +LABELV ui_numBots +skip 4 +import UI_RankStatusMenu +import RankStatus_Cache +import UI_SignupMenu +import Signup_Cache +import UI_LoginMenu +import Login_Cache +import UI_InitGameinfo +import UI_SPUnlockMedals_f +import UI_SPUnlock_f +import UI_GetAwardLevel +import UI_LogAwardData +import UI_NewGame +import UI_GetCurrentGame +import UI_CanShowTierVideo +import UI_ShowTierVideo +import UI_TierCompleted +import UI_SetBestScore +import UI_GetBestScore +import UI_GetNumSPTiers +import UI_GetNumSPArenas +import UI_GetNumArenas +import UI_GetSpecialArenaInfo +import UI_GetArenaInfoByMap +import UI_GetArenaInfoByNumber +import UI_NetworkOptionsMenu +import UI_NetworkOptionsMenu_Cache +import UI_SoundOptionsMenu +import UI_SoundOptionsMenu_Cache +import UI_DisplayOptionsMenu +import UI_DisplayOptionsMenu_Cache +import UI_SaveConfigMenu +import UI_SaveConfigMenu_Cache +import UI_LoadConfigMenu +import UI_LoadConfig_Cache +import UI_TeamOrdersMenu_Cache +import UI_TeamOrdersMenu_f +import UI_TeamOrdersMenu +import UI_RemoveBotsMenu +import UI_RemoveBots_Cache +import UI_AddBotsMenu +import UI_AddBots_Cache +import trap_G2API_SetBoneAngles +import trap_R_RemapShader +import trap_RealTime +import trap_CIN_SetExtents +import trap_CIN_DrawCinematic +import trap_CIN_RunCinematic +import trap_CIN_StopCinematic +import trap_CIN_PlayCinematic +import trap_S_StartBackgroundTrack +import trap_S_StopBackgroundTrack +import trap_AnyLanguage_ReadCharFromString +import trap_R_Font_DrawString +import trap_R_Font_HeightPixels +import trap_R_Font_StrLenChars +import trap_R_Font_StrLenPixels +import trap_R_RegisterFont +import trap_MemoryRemaining +import trap_LAN_CompareServers +import trap_LAN_ServerStatus +import trap_LAN_ResetPings +import trap_LAN_RemoveServer +import trap_LAN_AddServer +import trap_LAN_UpdateVisiblePings +import trap_LAN_ServerIsVisible +import trap_LAN_MarkServerVisible +import trap_LAN_SaveCachedServers +import trap_LAN_LoadCachedServers +import trap_LAN_GetPingInfo +import trap_LAN_GetPing +import trap_LAN_ClearPing +import trap_LAN_GetPingQueueCount +import trap_LAN_GetServerPing +import trap_LAN_GetServerInfo +import trap_LAN_GetServerAddressString +import trap_LAN_GetServerCount +import trap_GetConfigString +import trap_GetGlconfig +import trap_GetClientState +import trap_GetClipboardData +import trap_Key_SetCatcher +import trap_Key_GetCatcher +import trap_Key_ClearStates +import trap_Key_SetOverstrikeMode +import trap_Key_GetOverstrikeMode +import trap_Key_IsDown +import trap_Key_SetBinding +import trap_Key_GetBindingBuf +import trap_Key_KeynumToStringBuf +import trap_S_RegisterSound +import trap_S_StartLocalSound +import trap_CM_LerpTag +import trap_UpdateScreen +import trap_R_ModelBounds +import trap_R_DrawStretchPic +import trap_R_SetColor +import trap_R_RenderScene +import trap_R_AddLightToScene +import trap_R_AddPolyToScene +import trap_R_AddRefEntityToScene +import trap_R_ClearScene +import trap_R_RegisterShaderNoMip +import trap_R_RegisterSkin +import trap_R_RegisterModel +import trap_FS_GetFileList +import trap_FS_FCloseFile +import trap_FS_Write +import trap_FS_Read +import trap_FS_FOpenFile +import trap_Cmd_ExecuteText +import trap_Argv +import trap_Argc +import trap_Cvar_InfoStringBuffer +import trap_Cvar_Create +import trap_Cvar_Reset +import trap_Cvar_SetValue +import trap_Cvar_VariableStringBuffer +import trap_Cvar_VariableValue +import trap_Cvar_Set +import trap_Cvar_Update +import trap_Cvar_Register +import trap_Milliseconds +import trap_Error +import trap_Print +import UI_SPSkillMenu_Cache +import UI_SPSkillMenu +import UI_SPPostgameMenu_f +import UI_SPPostgameMenu_Cache +import UI_SPArena_Start +import UI_SPLevelMenu_ReInit +import UI_SPLevelMenu_f +import UI_SPLevelMenu +import UI_SPLevelMenu_Cache +import uis +import UI_LoadBestScores +import m_entersound +import UI_StartDemoLoop +import UI_Cvar_VariableString +import UI_Argv +import UI_ForceMenuOff +import UI_PopMenu +import UI_PushMenu +import UI_SetActiveMenu +import UI_IsFullscreen +import UI_DrawTextBox +import UI_CursorInRect +import UI_DrawChar +import UI_DrawString +import UI_ProportionalStringWidth +import UI_DrawProportionalString +import UI_ProportionalSizeScale +import UI_DrawBannerString +import UI_LerpColor +import UI_SetColor +import UI_UpdateScreen +import UI_DrawSides +import UI_DrawTopBottom +import UI_DrawRect +import UI_FillRect +import UI_DrawHandlePic +import UI_DrawNamedPic +import UI_ClampCvar +import UI_ConsoleCommand +import UI_Refresh +import UI_MouseEvent +import UI_KeyEvent +import UI_Shutdown +import UI_Init +import uiInfo +import DriverInfo_Cache +import GraphicsOptions_Cache +import UI_GraphicsOptionsMenu +import ServerInfo_Cache +import UI_ServerInfoMenu +import UI_BotSelectMenu_Cache +import UI_BotSelectMenu +import ServerOptions_Cache +import StartServer_Cache +import UI_StartServerMenu +import ArenaServers_Cache +import UI_ArenaServersMenu +import SpecifyServer_Cache +import UI_SpecifyServerMenu +import SpecifyLeague_Cache +import UI_SpecifyLeagueMenu +import Preferences_Cache +import UI_PreferencesMenu +import PlayerSettings_Cache +import UI_PlayerSettingsMenu +import PlayerModel_Cache +import UI_PlayerModelMenu +import UI_CDKeyMenu_f +import UI_CDKeyMenu_Cache +import UI_CDKeyMenu +import UI_ModsMenu_Cache +import UI_ModsMenu +import UI_CinematicsMenu_Cache +import UI_CinematicsMenu_f +import UI_CinematicsMenu +import Demos_Cache +import UI_DemosMenu +import Controls_Cache +import UI_ControlsMenu +import UI_DrawConnectScreen +import TeamMain_Cache +import UI_TeamMainMenu +import UI_SetupMenu +import UI_SetupMenu_Cache +import UI_ConfirmMenu +import ConfirmMenu_Cache +import UI_InGameMenu +import InGame_Cache +import UI_CreditMenu +import UI_UpdateCvars +import UI_RegisterCvars +import UI_MainMenu +import MainMenu_Cache +import UI_LoadForceConfig_List +import UI_ClearScores +import UI_ShowPostGame +import UI_AdjustTimeByGame +import _UI_SetActiveMenu +import UI_LoadMenus +import UI_Load +import UI_Report +import UI_FeederSelection +import MenuField_Key +import MenuField_Draw +import MenuField_Init +import MField_Draw +import MField_CharEvent +import MField_KeyDownEvent +import MField_Clear +import ui_medalSounds +import ui_medalPicNames +import ui_medalNames +import text_color_highlight +import text_color_normal +import text_color_disabled +import listbar_color +import list_color +import name_color +import color_dim +import color_red +import color_orange +import color_blue +import color_yellow +import color_white +import color_black +import menu_dim_color +import menu_black_color +import menu_red_color +import menu_highlight_color +import menu_dark_color +import menu_grayed_color +import menu_text_color +import weaponChangeSound +import menu_null_sound +import menu_buzz_sound +import menu_out_sound +import menu_move_sound +import menu_in_sound +import ScrollList_Key +import ScrollList_Draw +import Bitmap_Draw +import Bitmap_Init +import Menu_DefaultKey +import Menu_SetCursorToItem +import Menu_SetCursor +import Menu_ActivateItem +import Menu_ItemAtCursor +import Menu_Draw +import Menu_AdjustCursor +import Menu_AddItem +import Menu_Focus +import Menu_Cache +import ui_serverStatusTimeOut +import ui_bigFont +import ui_smallFont +import ui_scoreTime +import ui_scoreShutoutBonus +import ui_scoreSkillBonus +import ui_scoreTimeBonus +import ui_scoreBase +import ui_scoreTeam +import ui_scorePerfect +import ui_scoreScore +import ui_scoreGauntlets +import ui_scoreAssists +import ui_scoreDefends +import ui_scoreExcellents +import ui_scoreImpressives +import ui_scoreAccuracy +import ui_singlePlayerActive +import ui_lastServerRefresh_3 +import ui_lastServerRefresh_2 +import ui_lastServerRefresh_1 +import ui_lastServerRefresh_0 +import ui_selectedPlayerName +import ui_selectedPlayer +import ui_currentOpponent +import ui_mapIndex +import ui_currentNetMap +import ui_currentMap +import ui_currentTier +import ui_menuFiles +import ui_opponentName +import ui_dedicated +import ui_serverFilterType +import ui_netSource +import ui_joinGameType +import ui_actualNetGameType +import ui_netGameType +import ui_gameType +import ui_fragLimit +import ui_captureLimit +import ui_cdkeychecked +import ui_cdkey +import ui_server16 +import ui_server15 +import ui_server14 +import ui_server13 +import ui_server12 +import ui_server11 +import ui_server10 +import ui_server9 +import ui_server8 +import ui_server7 +import ui_server6 +import ui_server5 +import ui_server4 +import ui_server3 +import ui_server2 +import ui_server1 +import ui_marks +import ui_drawCrosshairNames +import ui_drawCrosshair +import ui_browserShowEmpty +import ui_browserShowFull +import ui_browserSortKey +import ui_browserGameType +import ui_browserMaster +import ui_spSelection +import ui_spSkill +import ui_spVideos +import ui_spAwards +import ui_spScores5 +import ui_spScores4 +import ui_spScores3 +import ui_spScores2 +import ui_spScores1 +import ui_botsFile +import ui_arenasFile +import ui_ctf_friendly +import ui_ctf_timelimit +import ui_ctf_capturelimit +import ui_team_friendly +import ui_team_timelimit +import ui_team_fraglimit +import ui_selectedModelIndex +import ui_tourney_timelimit +import ui_tourney_fraglimit +import ui_ffa_timelimit +import ui_ffa_fraglimit +import trap_SP_GetStringTextString +import trap_SP_Register +import trap_SP_RegisterServer +import trap_PC_RemoveAllGlobalDefines +import trap_PC_LoadGlobalDefines +import trap_PC_SourceFileAndLine +import trap_PC_ReadToken +import trap_PC_FreeSource +import trap_PC_LoadSource +import trap_PC_AddGlobalDefine +import Controls_SetDefaults +import Controls_SetConfig +import Controls_GetConfig +import UI_OutOfMemory +import UI_InitMemory +import UI_Alloc +import Display_CacheAll +import Menu_SetFeederSelection +import Menu_Paint +import Menus_CloseAll +import LerpColor +import Display_HandleKey +import Menus_CloseByName +import Menus_ShowByName +import Menus_FindByName +import Menus_OpenByName +import Display_KeyBindPending +import Display_CursorType +import Display_MouseMove +import Display_CaptureItem +import Display_GetContext +import Menus_Activate +import Menus_AnyFullScreenVisible +import Menu_Reset +import Menus_ActivateByName +import Menu_PaintAll +import Menu_New +import Menu_Count +import PC_Script_Parse +import PC_String_Parse +import PC_Rect_Parse +import PC_Int_Parse +import PC_Color_Parse +import PC_Float_Parse +import Script_Parse +import String_Parse +import Rect_Parse +import Int_Parse +import Color_Parse +import Float_Parse +import Menu_ScrollFeeder +import Menu_HandleMouseMove +import Menu_HandleKey +import Menu_GetFocused +import Menu_PostParse +import Item_Init +import Menu_Init +import Display_ExpandMacros +import Init_Display +import String_Report +import String_Init +import String_Alloc +import forcePowerDarkLight +import WeaponAttackAnim +import WeaponReadyAnim +import BG_OutOfMemory +import BG_StringAlloc +import BG_TempFree +import BG_TempAlloc +import BG_AllocUnaligned +import BG_Alloc +import BG_CanUseFPNow +import BG_HasYsalamiri +import BG_GetItemIndexByTag +import BG_ParseAnimationFile +import BG_PlayerTouchesItem +import BG_G2PlayerAngles +import BG_PlayerStateToEntityStateExtraPolate +import BG_PlayerStateToEntityState +import BG_TouchJumpPad +import BG_AddPredictableEventToPlayerstate +import BG_EvaluateTrajectoryDelta +import BG_EvaluateTrajectory +import BG_ForcePowerDrain +import BG_SaberStartTransAnim +import BG_InDeathAnim +import BG_InRoll +import BG_SaberInSpecialAttack +import BG_SpinningSaberAnim +import BG_FlippingAnim +import BG_SaberInIdle +import BG_SaberInSpecial +import BG_SaberInAttack +import BG_DirectFlippingAnim +import BG_InSaberStandAnim +import BG_InSpecialJump +import BG_LegalizedForcePowers +import saberMoveData +import BG_CanItemBeGrabbed +import BG_FindItemForHoldable +import BG_FindItemForPowerup +import BG_FindItemForWeapon +import BG_FindItem +import vectoyaw +import bg_numItems +import bg_itemlist +import Pmove +import PM_UpdateViewAngles +import pm +import bgForcePowerCost +import forceMasteryPoints +import forceMasteryLevels +import bgGlobalAnimations +import BGPAFtextLoaded +import forcePowerSorted +import WP_MuzzlePoint +import ammoData +import weaponData +import GetStringForID +import GetIDForString +import Q_irand +import irand +import flrand +import Rand_Init +import Com_Printf +import Com_Error +import Info_NextPair +import Info_Validate +import Info_SetValueForKey_Big +import Info_SetValueForKey +import Info_RemoveKey_big +import Info_RemoveKey +import Info_ValueForKey +import va +import Q_CleanStr +import Q_PrintStrlen +import Q_strcat +import Q_strncpyz +import Q_strrchr +import Q_strupr +import Q_strlwr +import Q_stricmpn +import Q_strncmp +import Q_stricmp +import Q_isalpha +import Q_isupper +import Q_islower +import Q_isprint +import Com_sprintf +import Parse3DMatrix +import Parse2DMatrix +import Parse1DMatrix +import SkipRestOfLine +import SkipBracedSection +import COM_MatchToken +import COM_ParseWarning +import COM_ParseError +import COM_Compress +import COM_ParseExt +import COM_Parse +import SkipWhitespace +import COM_GetCurrentParseLine +import COM_BeginParseSession +import COM_DefaultExtension +import COM_StripExtension +import COM_SkipPath +import Com_Clamp +import PerpendicularVector +import AngleVectors +import MatrixMultiply +import MakeNormalVectors +import RotateAroundDirection +import RotatePointAroundVector +import ProjectPointOnPlane +import PlaneFromPoints +import AngleDelta +import AngleNormalize180 +import AngleNormalize360 +import AnglesSubtract +import AngleSubtract +import LerpAngle +import AngleMod +import BoxOnPlaneSide +import SetPlaneSignbits +import AxisCopy +import AxisClear +import AnglesToAxis +import vectoangles +import Q_crandom +import Q_random +import Q_rand +import Q_acos +import Q_log2 +import VectorRotate +import Vector4Scale +import VectorNormalize2 +import VectorNormalize +import CrossProduct +import VectorInverse +import VectorNormalizeFast +import DistanceSquared +import Distance +import VectorLengthSquared +import VectorLength +import VectorCompare +import AddPointToBounds +import ClearBounds +import RadiusFromBounds +import NormalizeColor +import ColorBytes4 +import ColorBytes3 +import _VectorMA +import _VectorScale +import _VectorCopy +import _VectorAdd +import _VectorSubtract +import _DotProduct +import ByteToDir +import DirToByte +import powf +import ClampShort +import ClampChar +import Q_rsqrt +import Q_fabs +import axisDefault +import vec3_origin +import g_color_table +import colorDkBlue +import colorLtBlue +import colorDkGrey +import colorMdGrey +import colorLtGrey +import colorWhite +import colorCyan +import colorMagenta +import colorYellow +import colorBlue +import colorGreen +import colorRed +import colorBlack +import colorTable +import bytedirs +import Com_Memcpy +import Com_Memset +import Hunk_Alloc +import forceSpeedLevels +import FloatSwap +import LongSwap +import ShortSwap +import acos +import fabs +import abs +import tan +import atan2 +import cos +import sin +import sqrt +import floor +import ceil +import memcpy +import memset +import memmove +import sscanf +import vsprintf +import _atoi +import atoi +import _atof +import atof +import toupper +import tolower +import strncpy +import strstr +import strchr +import strcmp +import strcpy +import strcat +import strlen +import rand +import srand +import qsort +lit +align 1 +LABELV $293 +char 1 75 +char 1 121 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $286 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $280 +char 1 94 +char 1 49 +char 1 73 +char 1 110 +char 1 118 +char 1 97 +char 1 108 +char 1 105 +char 1 100 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 32 +char 1 110 +char 1 117 +char 1 109 +char 1 98 +char 1 101 +char 1 114 +char 1 58 +char 1 32 +char 1 37 +char 1 105 +char 1 10 +char 1 0 +align 1 +LABELV $275 +char 1 37 +char 1 105 +char 1 32 +char 1 98 +char 1 111 +char 1 116 +char 1 115 +char 1 32 +char 1 112 +char 1 97 +char 1 114 +char 1 115 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $270 +char 1 46 +char 1 98 +char 1 111 +char 1 116 +char 1 0 +align 1 +LABELV $269 +char 1 98 +char 1 111 +char 1 116 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 115 +char 1 47 +char 1 98 +char 1 111 +char 1 116 +char 1 115 +char 1 46 +char 1 116 +char 1 120 +char 1 116 +char 1 0 +align 1 +LABELV $264 +char 1 103 +char 1 95 +char 1 98 +char 1 111 +char 1 116 +char 1 115 +char 1 70 +char 1 105 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $257 +char 1 64 +char 1 83 +char 1 84 +char 1 79 +char 1 80 +char 1 72 +char 1 69 +char 1 82 +char 1 69 +char 1 0 +align 1 +LABELV $241 +char 1 99 +char 1 116 +char 1 121 +char 1 0 +align 1 +LABELV $235 +char 1 99 +char 1 116 +char 1 102 +char 1 0 +align 1 +LABELV $229 +char 1 115 +char 1 97 +char 1 103 +char 1 97 +char 1 0 +align 1 +LABELV $223 +char 1 100 +char 1 117 +char 1 101 +char 1 108 +char 1 0 +align 1 +LABELV $217 +char 1 106 +char 1 101 +char 1 100 +char 1 105 +char 1 109 +char 1 97 +char 1 115 +char 1 116 +char 1 101 +char 1 114 +char 1 0 +align 1 +LABELV $211 +char 1 104 +char 1 111 +char 1 108 +char 1 111 +char 1 99 +char 1 114 +char 1 111 +char 1 110 +char 1 0 +align 1 +LABELV $205 +char 1 102 +char 1 102 +char 1 97 +char 1 0 +align 1 +LABELV $200 +char 1 116 +char 1 121 +char 1 112 +char 1 101 +char 1 0 +align 1 +LABELV $193 +char 1 108 +char 1 101 +char 1 118 +char 1 101 +char 1 108 +char 1 115 +char 1 104 +char 1 111 +char 1 116 +char 1 115 +char 1 47 +char 1 37 +char 1 115 +char 1 0 +align 1 +LABELV $186 +char 1 108 +char 1 111 +char 1 110 +char 1 103 +char 1 110 +char 1 97 +char 1 109 +char 1 101 +char 1 0 +align 1 +LABELV $183 +char 1 109 +char 1 97 +char 1 112 +char 1 0 +align 1 +LABELV $172 +char 1 94 +char 1 51 +char 1 87 +char 1 65 +char 1 82 +char 1 78 +char 1 73 +char 1 78 +char 1 71 +char 1 58 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 97 +char 1 110 +char 1 111 +char 1 117 +char 1 103 +char 1 104 +char 1 32 +char 1 109 +char 1 101 +char 1 109 +char 1 111 +char 1 114 +char 1 121 +char 1 32 +char 1 105 +char 1 110 +char 1 32 +char 1 112 +char 1 111 +char 1 111 +char 1 108 +char 1 32 +char 1 116 +char 1 111 +char 1 32 +char 1 108 +char 1 111 +char 1 97 +char 1 100 +char 1 32 +char 1 97 +char 1 108 +char 1 108 +char 1 32 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $169 +char 1 37 +char 1 105 +char 1 32 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 115 +char 1 32 +char 1 112 +char 1 97 +char 1 114 +char 1 115 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $168 +char 1 115 +char 1 99 +char 1 114 +char 1 105 +char 1 112 +char 1 116 +char 1 115 +char 1 47 +char 1 0 +align 1 +LABELV $163 +char 1 46 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 0 +align 1 +LABELV $162 +char 1 115 +char 1 99 +char 1 114 +char 1 105 +char 1 112 +char 1 116 +char 1 115 +char 1 0 +align 1 +LABELV $161 +char 1 115 +char 1 99 +char 1 114 +char 1 105 +char 1 112 +char 1 116 +char 1 115 +char 1 47 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 115 +char 1 46 +char 1 116 +char 1 120 +char 1 116 +char 1 0 +align 1 +LABELV $156 +char 1 0 +align 1 +LABELV $155 +char 1 103 +char 1 95 +char 1 97 +char 1 114 +char 1 101 +char 1 110 +char 1 97 +char 1 115 +char 1 70 +char 1 105 +char 1 108 +char 1 101 +char 1 0 +align 1 +LABELV $152 +char 1 94 +char 1 49 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 116 +char 1 111 +char 1 111 +char 1 32 +char 1 108 +char 1 97 +char 1 114 +char 1 103 +char 1 101 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 32 +char 1 105 +char 1 115 +char 1 32 +char 1 37 +char 1 105 +char 1 44 +char 1 32 +char 1 109 +char 1 97 +char 1 120 +char 1 32 +char 1 97 +char 1 108 +char 1 108 +char 1 111 +char 1 119 +char 1 101 +char 1 100 +char 1 32 +char 1 105 +char 1 115 +char 1 32 +char 1 37 +char 1 105 +char 1 0 +align 1 +LABELV $149 +char 1 94 +char 1 49 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 32 +char 1 110 +char 1 111 +char 1 116 +char 1 32 +char 1 102 +char 1 111 +char 1 117 +char 1 110 +char 1 100 +char 1 58 +char 1 32 +char 1 37 +char 1 115 +char 1 10 +char 1 0 +align 1 +LABELV $143 +char 1 37 +char 1 100 +char 1 0 +align 1 +LABELV $142 +char 1 92 +char 1 110 +char 1 117 +char 1 109 +char 1 92 +char 1 0 +align 1 +LABELV $141 +char 1 60 +char 1 78 +char 1 85 +char 1 76 +char 1 76 +char 1 62 +char 1 0 +align 1 +LABELV $138 +char 1 125 +char 1 0 +align 1 +LABELV $135 +char 1 85 +char 1 110 +char 1 101 +char 1 120 +char 1 112 +char 1 101 +char 1 99 +char 1 116 +char 1 101 +char 1 100 +char 1 32 +char 1 101 +char 1 110 +char 1 100 +char 1 32 +char 1 111 +char 1 102 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 10 +char 1 0 +align 1 +LABELV $129 +char 1 77 +char 1 97 +char 1 120 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 115 +char 1 32 +char 1 101 +char 1 120 +char 1 99 +char 1 101 +char 1 101 +char 1 100 +char 1 101 +char 1 100 +char 1 10 +char 1 0 +align 1 +LABELV $126 +char 1 77 +char 1 105 +char 1 115 +char 1 115 +char 1 105 +char 1 110 +char 1 103 +char 1 32 +char 1 123 +char 1 32 +char 1 105 +char 1 110 +char 1 32 +char 1 105 +char 1 110 +char 1 102 +char 1 111 +char 1 32 +char 1 102 +char 1 105 +char 1 108 +char 1 101 +char 1 10 +char 1 0 +align 1 +LABELV $125 +char 1 123 +char 1 0 diff --git a/CODE-mp/ui/vm/ui_util.asm b/CODE-mp/ui/vm/ui_util.asm new file mode 100644 index 0000000..e69de29 diff --git a/CODE-mp/ui/vssver.scc b/CODE-mp/ui/vssver.scc index 1a518ebf9146726c5e01a2dc74242eba2be71b54..ad20ece3c518b5571ca6134f84daf2950bcf5e3b 100644 GIT binary patch delta 53 zcmV-50LuTc0zow*t$zCc?isfb3O392smHxFvf_z8;XhiHU*X`|Q92 zYYn&01?e#YDmsGJezAhRlgd}+r6KX0v00m}mb<18RQ delta 66 zcmZo*445EdGrxS70}BHLumUNEH%8YQg?gWI0@U|m=I5-o K_^e2z`*bWh)vk0?%1l*y@Pe)-e3Se8xH6I delta 43 ycmbQhG=XV?2+RGoIcp|L^hnmKs(h^RI6a4hfq~%%5cB)GzIH0Q)yXz-Z!iE_ClBiY diff --git a/CODE-mp/win32/win_syscon.cpp b/CODE-mp/win32/win_syscon.cpp index 859fc37..8a617e1 100644 --- a/CODE-mp/win32/win_syscon.cpp +++ b/CODE-mp/win32/win_syscon.cpp @@ -562,7 +562,7 @@ void Sys_SetErrorText( const char *buf ) if ( !s_wcd.hwndErrorBox ) { s_wcd.hwndErrorBox = CreateWindow( "static", NULL, WS_CHILD | WS_VISIBLE | SS_SUNKEN, - 6, 5, s_wcd.windowWidth-20, 30, + 6, 5, 526, 30, s_wcd.hWnd, ( HMENU ) ERRORBOX_ID, // child window ID g_wv.hInstance, NULL ); diff --git a/CODE-mp/win32/win_wndproc.cpp b/CODE-mp/win32/win_wndproc.cpp index 7a67d02..0ce2551 100644 --- a/CODE-mp/win32/win_wndproc.cpp +++ b/CODE-mp/win32/win_wndproc.cpp @@ -473,10 +473,8 @@ LONG WINAPI MainWndProc ( break; case WM_SYSCOMMAND: - if ( (wParam&0xFFF0) == SC_SCREENSAVE || (wParam&0xFFF0) == SC_MONITORPOWER) - { + if ( wParam == SC_SCREENSAVE ) return 0; - } break; case WM_SYSKEYDOWN: @@ -502,13 +500,6 @@ LONG WINAPI MainWndProc ( case WM_CHAR: Sys_QueEvent( g_wv.sysMsgTime, SE_CHAR, wParam, 0, 0, NULL ); break; - case WM_POWERBROADCAST: - if (wParam == PBT_APMQUERYSUSPEND) - { - Com_Printf("Cannot go into hibernate / standby mode while game is running!\n"); - return BROADCAST_QUERY_DENY; - } - break; } return DefWindowProc( hWnd, uMsg, wParam, lParam ); diff --git a/code/SHDebug/HA312W32.DLL b/code/SHDebug/HA312W32.DLL new file mode 100644 index 0000000000000000000000000000000000000000..2b1ea82afed700e0a470d611edc9c044016ab2c0 GIT binary patch literal 382464 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

9q^0& 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�v84zg~zu&kQ3}5oQPSR5L^;$39b(wiWOb}N$(1M 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 z z%19C9q86IoKhS;3vQFCEPYx4!;$bUO0q*8(Rv6cK%4l_p)}yeT!ycr@k_mCmf%4g1yq9d)ad*MSoLB5 z=zP2(7J9LQC`!LZzNZXSSyiO?n`(|>P&=Y=Y9~_|UBGy9zbH{jBTW5#a)&%;V8&2# zp2KjavU>I;EOOB^xH&jmX;q7;AL=MDx=k?q4QSy}N(IRFiZ@N?Fz??1aOR@MM<_GO zCKDs1Uag|=0`*F?d_`7EwWqc8NP5!*-|4O2L({I#cUq(lm~KfL5m7t7!DV)oKSN$! z0-;0NRU(H&On4OIvd$V8v8{uT6}oL9DK&v4gBWXGf2Zggl*Lx+DLq!9whm4@h!C`1 zG+)8o?#yWNk3Ngyg9M(CKUrO$1HwxqnJ);V3eV$1xr#J4%Ll({D4NBV-nKu9`4ZK} z=Pys@VyXF8gyClFBt@tQ=*7p5WW7i9k^uqZkHt4AsEwp|A#`Y4+5vKse_1%^dAh{5 zk*)_7(LC-XRK8*qt9FNSRS#6^Mg!-yqal*T?dynE$kasSxT-PnX3bz)%@xx@6Uou=2B;k@{ICqgP`aF>7%)dz>- z>oYvbLVTMIAEord5%L!DKvv^$+$1?}Y*>2y*vC#FYQg%b4F9l7nnKvViWmD}$Xgl> z`j2z2v6T5CYH{O?sG*!{X90s8XT~$|Ii<&g6Fr+Zpnc@Sf&%#$VcnyDYtcVPymBII zq!6Y_Fn%|)X$~(Sj8KrzNCe`-8=i>pj^Jbh*6P#|lYg5No{9!-om*0CxkJ;%+%_-U z$wnF!B?VvBmDs7Q-{wT37f1V{Dj(i6mo`v0KE_RLb67Y4sLz4VIl~27P><ct1as3MncQLMMj~kg*;jg@R#n980v#|jjjXA#1DGUuA9|jH7ifgNN>dT2T z#TrxTSMesFzRpeHh%Y3Yq3*^nNsfKQ!NQlBUPQeibi%8>fV)!M0m(rJ5$i5t>+a&j z+V?AD#}_-{qYP?cM8{EZpyMb;$H`ncb!sa$RGJ{Wp%^P5^~OD1Mf3m(;%qCWt@IOQ z`a>n{H{eWB2F@w%NR1DYp9PbI-nUo+fW3%a1P8zV$gKNvEg7yLaR+F zKrp@=!7w_$S3KJTtvWyoT^41bdh-~VjFHM}sP2qVMC@z)_GN0$^N)eU;x)^$9+I<> zFkpA;KXkJsBvSa;s?YQ(kO*Y&6F2#Rz-ydrlHTfJlh{1q(Jihu zc-A9sVoTAC#SauK?2g~QTgf4$$VcxB`wS$2C%o0i$yQk zA57!W=eYGb9+LaOKK8lQfrp&f@TOnqJpH9Nz?}Sb-C>->eGATTBAZd4>DFg@n1cw! zT!E!Ki%`s~6_11i(Vafd1pcGjXkAb7@^cO#I6W&#T+*p50i3`|T~jWiMGc#@BHuDj zLFn-Z@fJGULnUJG&^>)}i5j+_khu2LhR3yB4Wpy7Sr_&8BakUFRq6oT8z2$FQ&;yJpF82ig7Zv#a;eLz+6RgOH&A;z*RGtN;y-J)5fPsD4* z=KrO*(ldZ|KDvcCdKSX``9?74F#IJzY5W44uhI{D`J#*ZE;i4mr8>8_q z!VE47%<-s_XDmlZ4!A6NrEx$k!X+zPeex+tLv>?WS{NI)_6O| zgDTlCu17m;?Ow(k)FThaz)zCT+j$5Ves5EuSw9)dp&`Zo3na63PJQiO_&B_sSeTXA z*cb&LcBsQ?rvZg%(>Qks6#(I)JRJwK^K|!6Z)X=(&0kT5^DD*V)VY!0RpVB_$8yD> zSfqen)zK)$(JNy+L>)vi^)eoL0RInLNNT2DqmFvxy-`#KUr)d;Oe$AUx+$%GIh2vrP3F z%TO-IB8eYw=Y^=e^%|5k2_CawmzNrhbh3^Pphu59#_v0EudRIynEoGFcTdww5Z3xW z)w|Zvutgr@jQJqrkEu8%(nNY6%CeSUvB-nkY7gGM6VHhVX%-S3WAsj!f}&`gm=)0{ ziO3c_qry%cY3ssCQ;2QvSNCFLb>yl3>Wh8Yq!Q^M>8Mpb`%56% z+eP*aqGZCH-V{$LheU_B>j)8RnhZPN!K0bgNhgCFdqq^?_}JR}QCkPpe*VIPtQt_< z&%Fj-?YBtN)^?zkM{s9uzW|olH9kkn{d&uTH&+zXT)j2i!fpaTpu zsC}`v_Ff4QQIUH=^AmphHuz>9go|5?Jm^1#6T9w!QaNZQ$DUtnil39Yt7n z+6XGgWCHH=S}&fPHbC|PeIJQUB_@a41tAXp)*}!^sRPg(vDxZ(bPHX-7>|L_kDbbm z%ppj%fRn0nHTkKq#e_Z%{X-|rIIhTq)=Chp2yuW=0~1Ii=muu z{Hln%r7QN~C3pffFDaSZGl3FqYy@3cLHVQjNa4G7qvf?!>QQ(hY->enm;k2PMTRsUs^%UDx_R_Tz1>zsi2RA>PT4 z*$@ll@IE{Q@JT)ZQ}fNdsPPAc%was)kv4nllX$(!Sj7(>#7=%rNGLqM4bj3mtxxgX zYegP)J z5`6J1t4`x6%q!$fL=FNQF37yQoxl4~`rTad?)T6|$=-S|NWvJ+jW#!>I7P~kOp05i z9EF4etj148JHu!$FtgqgSs-Pzg93&NGcdfxVenfp@Gy)3p&~t5(!b@`4ilI(p;&F6c>;5qt&ALrL^vH&WPS zDrOr)zwxriS??TRZ4E#zqBB4JV)*Ngk|5!l+;M-3!|R&0;&1$JKjsFu7s# zPbdk-1?2>Z`_W2{Jf*PJ&6Ag3!jr`i)3>{DsD2XTgPsxZ(;UJHj2%(WZ!$jRo_dmh zgGGlq?&`&Yxb8e=qDC2MTq!K-!R66`>*0|i{Q^T$Z(Iv>d~Kyf`~n?O#sg9iZpmkQ zIQ($i0T8*w%MxXSuo^o&8|`qC5b--^=+2trX_y5o!*4@FMEfW}@nTSfC}bT@@uKWd z9f6=VL{mq(yGC6e{#03pFqI&=e$>TB;b#K}+LT3be?v|s)k31 zL7E8kr#Z-qz?K^n4$)CQarNeEYuo)LtyYpVw?8p-l?T zPy14x^toJovcc*NUL%*lc=!l?Se2`%K0TFw?U3jbHE40pu;yo|9b=r;aV3W@8l%Ua zrzxP%$k_vplfrni8b!a27JNccIO4_womgqnrwC2U*$WmMhqp4VWqOUGPJK#pq*nD5 z4ZM>32wioTK9#QU0*}UNKxo#dRguJyaHw9bGupZo=t&N<(gHl~A*8VaDphZcFQtL; za52!j8YA3f!DqpQ^<&-w;#&d_WGMAJSz^$RP$C3cvC+TheJc!@wN*o)t$PytQ1 z&E78ZBCw~5X}SRe-Wi@smV(lbKrade44+hf5GtSslqDL@?93N>3=hIE{u@pNpoGtF zS$VW@ZuMvq7}4G8Kux6Pno`EyRR0Kduk}gvG-^~$qCUdU8QVgD_GbIvf@%L7i)8$R zq>rbqZVbL2d5_#~5%;6iL*$SQL!znaw~qNeyp}M`#0ChIiyD6=(`k#Z7fFbhF!zds z{IOX)v(n7f!|)N9{0N;MY#Br;HioQ+IS@a%NXk^Ut<4Sr%jF!y875Tcs8j*va{C0a zv%*AS{+K?Jt6Az!6HH3irZ@#66dy~5oDoGJ0>Q#mTmwq<+VGt*jI)oUj0TIKf z4XjoR3|i3=JrDNAJ>+ha^fB8ZZj6T$JaFDe(H5D>HrU(PlzJ_^O-WC`K@b=j-X&}v zw*gsin^fAvEk~#^M-L)uU_5FC*4gg)SW!QS`Oatj1hr?W9Kpfo-Q19tN9m=TGDrpZ z?e!~gWjp>8BA>`x}=yyD_#gv+a1u~gBD8J=Ue`L24 zp0vmolUOFONPw3_60QhifXp>6#C%E6i(*(K>{l+O0;v&?qdIm_Z#e`-VQi>n3%J0n zpdtPC`!Lw>_Ng$anl;NE{UeEPV)(~UU2kS^0;r750}zea+!S#yj2g!PwuT_92#!g4 z6!(KpNkKddP}JCZ2(nICENr0l2p*c*WKwfeud;)!p5K$&`zov>Uu%)LN61#0xNDt; z>!SxD>rmv;w{XSsB;Jg+*;4zVwX%T>9r$~R=twCf`ieF~j08YiX{zw|3cU?$>FRLs zU=a}{#Df9nBlW?2>j2())9kV_tYrx&8*%Q1{}chC9md832rsC(Qwc`eD8^73;P4gW z3Rap1Y0Cjd?SW_tl`G32HKs$JRYPP2?c81rm?DezwantCWizeSPlqQPQVYV6q!tx- zs&rH+MF9D+%S#kSSE;aFy|;mHvO52V z@3bimCD4Ec3!)2Bv|7OQJ!$$%Nhy;;Xd%T3)Y=BxQreo{A>aU014@XUIN0Vkew!8D zm^#O%GBy>9#g-REP^Qe+s!Z=1+*-vFw36q0opax5T6DktpU?CEJpbqUHE{L5&igsn zdB4tet}{2G7%zV06WR1EyRbk|$}VP`1nXkTuKbQjeg`5}*G)y{X2OB*#4u#D2$Vq+ zF>0y8A!b5XU!k&e4y@w9@<*{Vt3VG~Qs%cMeZ zy-?_$l@#D2G=WjmqNw`w$LM3X{De&4fua$-f%us4RoYT%lM+3<*_P-{?4c{HEESqT zQ13`(DWX5iJjVGoWJjsPPhw3E2mhe{oCWS6iHlO-Xov)KASf39nSzr$QFW7qQq{Q;g21>>obhOb&_}&JeG>iN&c2jhJX+;p?}i z%g0MvY~y@;a4?)fauv8SzshHY=8Vgq(2Z`M<`ZO9TUWA#UfPx}0VxofzE@^U(ErToz{XjFBV{M~dRemN9R+uz5?)LqElu4)wP&PPV2Mnk;uRmAV++ z&G%hRe2((q>%Ot%KNv-STh;Sh(_Y#}hneW%G+vOf6UKr%ep!yzhm4+!BLfsv_GB*7 zihsx2f+dFsGRC3k*@~PVY7k9+GcN5@HV|YcN;`&1>x=QGZ3{*yEdz?HNxR9RZk@b* zWo9kR)|w_XlEu=C*a>^U#sg8y`Ic-K>@fi{du`1VFfn_p^fP8PNFZhOAbD&wU~M_Z zx}{j;y+DP<@R&};U+Ceq6LV8PTV<-yx@O|*h8 zHQt;2k)E!2wjyvIR(KX&G%yYu&R<5)#d$d`;jrv|6&y88N*Z)oHuT|`DjVcNpF{$q z!9#G~gwgSumYjW<^aZr8P2X!HG#EvHTh%Y^MYb`#slDjLjM78)qwY}uNNo?TDB`fy zt_BjcLVP0a8N& z_VdT~I&cn2%5*$nG6pWZL_0m_Y|6vZGOP3w<5MRdw6ixp=}aftV7ky{ak5z{HvT7X4s?$lrsV`nsuR-9X6@e z&NeFJZBn!1%Fh91AM$4~P8Od{vM9c7;ux#+Cd+_kWrwt4Eh+&D!6H4~1FRlwtQoLP zIC!O2>18%xX&LV@u1*F1B`49=cIMIfmb_0^QXCAgi~R$3@(5y;?j0VTD zp_P&b2I(`I{h>t9iKa|vl*y$L*MPsv zE579}b?>2_F_5@}=&dbyB`U;kWNJ^-n2qGXn=`OPm5%}axWU(JgUA9c$d};KFI>^U z_o0D9!wjjJ9Sg}(Y}^hoVr#;t&p{%w^3e#v%Qtp-`B;6`35>XCkR>d$Bq(_eG4vaF z#ew+USUfvvr>YK~^uMZ{)++Sa&*=f?9;eT5STck3`goZ88?sp=u!v~@^p2$@h%*gM zu(53>1`yx1Y`;`(u0KHB%S2c8pX$ZnIU@sF^Au|VFg2RMsWwolmCHQ zAP!7D-It(Od)RRGa?f8UhVFt;Bf#S=81Mv}Gnz#JJ`F$pZ(@?;T~h zo?Lb^T8#5(kWQ!}MD|kpU(5@g){5f}fX+dvYeUW9(?;GPxjl9neHVhmwgd<%?t&OM z(`^l}n0w(>&JR-wCPzH^ml$P05j2PhsCqzEbBq;DF26X+DlNX5xa-3T%-cWCs;HQY zr4n{#rX7?gg*&t?B2q2uAFnWXo&1<2=tJSH(th6E!3X2!{*aliU*gKapNe{R9~L|> zJcLP}@x(YYZ1Ct3vw-ib(AlN$>!F_h?z_M&d|y$xMWMlv-yq>fk#l@sg#xW=dk(2F z<0|jGpu&4Ya{oT27l*BZTF%kC3^tjGj{}WsNJp3(B-xS>4;NZvq6GQ0sl{*Z}FU(>JCHia4#XCuMteH`Og)EV0u;oY2G9ATcl%B9^4~Ro+Fx z*5{aS<|u1{I3*Jo$I4nx-edfN&M`(_IuJ&Nuz|yRL|a4Uw@M!&L&Tt<=?iUu4j3rc zv|!gD>so6~G*>+C#tu_`~Nw7 zMN0lL2zDzJ3@MJH$nc{aLUfEWfOQ2>AU=sPpp3sjC9%1Ef(5S3haGT9q~d+ zk=j`$wC6BbWkY%p0@6F|B&5z>VAY^jh6NfDLQacH3lg0~t>Aq}-gq!dU5E79x){yn z9p*MO8V+y;onr$fYU5^6-Q3YeTe6q!g$=iOH<-owJqGB>3tV zES=P&NGZ)%LXyJ7bF-m}NVgi>$U>S0Rtg`h#7`lxEv;C&0)rX?TpL<4mL`N&iE$K-H$LY)fBMxhsC2Qf4Q zVg5g0IiOY*^8e&_`A6#vV&V5>Cd$v{yHyQ_f-bzXbQ!v(;gZE!vDL0j&7g#d9hkJiB5@x7IglyekIErK6D3MF_7YfD_NGa%nQBC`L8Z zyyikDjknGjY*52V#7U%Ng=UW{WM4G-P}S39q4R7CKu)$?x{hZ89HXMmMJC{xt$l%Gs*%rktzR%4g< zAe$svlN)E1ZsfxfZ`rfh35whrt(#eEoXo}?b!)L|8~MJRk3*4N(=p5=eff8&l(=--Ba>c4SM{cqg=P5dGHH)6N= zUG(3>+=i?@l=@@kd;Pz0k7RZG-Qo9qxBC$KKg;}GPXE{c@6~Vkczh%@9*6O>aRX^6 zKl>0nqQIS|YgWyW-+a2>r@GA2IRQ_`V3&tCBRIojkiq>eVpgFQe5n6nTP63iDBq}+ zD(ahOGD zoW_JQ1)>I%u<#yBp1EdP>Bk{Yyt8-ESO6W4Se;-)P@*$mTBr4OMjkQ;_-la|m~Ief zsqd8M!$`LM#PbBzf7=kXh2-pS?0Z_uf${W4CC}P{Z2(0y2Rvhiv!R=(zY+w8K zQQM*wH_t`wy6L_*FT90_laAp6_^~e@@g4DWE2(UyR1gNXJT~CpMD|5ql(SU9vILy4c;X@CTP7J&1h2rwHWwil_k%~O%c9A(W%=S0k2vDsb}xouvgV)C^w zTtqpXae4kc|BUqfE0jx0a>o~sDB)P$VS0zG33iLSkbV&Qqko#kB}Fhr(2aTZg#tAe zC;ZMZgcxb?1Ea+oaR39m&_SyMY#^<5muhw+g6bfh`zsf5;iC5~)A*XSo=ZVd4+Vz_ z;*{33bw2G=xV=w0A3PhMB1JC2B~NMmr>gJA3`%Vb>aggMg=!y^h++-2K}}IRbv~$g zDb<=5YoOqP+HuFrw!##{vOgn5`$(1vnFObQI*u`YJ4~N3UDe}5O0-; zKZlrUtd^b!35e?6;UQRI(~JX0DD}q$E+yt8cPApTboLR7B*!ckKSnPY*b4ZgzqTmi)OAmcLqlH=Y_4gzl z0q#5O`v8Yy`RZUdwJ>nC{QZkcyG|S>0&K#3L}x(ms#Vq_J?< zVWbcC+<-QDfb2|B0{%KDnxfS7Wj^2`$X-clBR4GNm@Q`RU{4>l@f@_<{TaQy>~nLHTZ05=C)1*w+%0ZUBn}Wrs&wM zbe3f1nNV5C_Qn>>Rl#WS+N3wP`#qnkw;%T%@^qH1BBpOt;x$xk%Dz8cA%H(AgiUMHz$=FJcs%PFMYsr^q|VR%q`_2&c{vC= z-hvYfwBI;XJ=G_*D;nQ1wwI^2hnS1oE!qmOYmLz&sqE;Y;Sg;elMUByD1C|g4Mz2X zVa4@lZ9nZhf(L3)a=es-zvw33iD~;tvf6;ZdlK>I&2*W| z?c?jDs;g+x*o}E<&&+g+_8mgcBLyi3PSR2|I%zAI{8ACdCx1Rd&uXI#;2AJ|u_xy? zL@Vqe3usEKh8L*|X-Lh8-;Y-i{c)Z^q!WBxDUB~&+1NlEbJ{2}4g+R5^M%;04W#yP4cq|yNgQtk)AnIkK^d8zOvzegS_@C!CcqqBNwi1TXG1P^kbdM%N^r$;a7PQGD^%w;@Kcd3;%Lou*tW zVwuMj&6JSk6yB&iQ1eUg`{F9iFBc`V~+D?yE0-F8eDEC6G z9vA)LG=o~WKSrxZt{JDD%~I&qE$5b?r_&DGhW$GxWh#34c43<(um$&|50f!=%a_Qn zZ&QFe#EJlWE%Ck&VddTw&~KcGzw7UcjXh`yY9(^XJFADP{$rT z;<*^@JLD}n9DDCB1chFi9iQxs>9RaWDRf!d`R646oaP@~h(wQl+q>dO&us`pNq7Q! zak3{c9qg_^5)|PDW{KB&0tRtLPcCKXctlSI`?`B(v#+Y>I`&ofT*JPao=NoG6u8lu z(8@TNZ0!Ml3XWo9TQ4Hv3uoNN$=pNtXniFo*Bp(Zlw0R&PLk~#u1A{hoWIGW4_o_mxOPqLO+@bd(orJ}yHAYGSw0{OJkQ^QQ(p0axsnAHl{C z`CzTvnBk0duUDl(Zp5OEaKGyIFO(~&%W?$1utAY9B*gBw1p4O|sNCY!u?I^6t$4Wu z0)flrHH$@yYG&0N=9qVxSf;k*{a}ju0s_+w} zc7B%_>7x}V$N+A25NlR+Km_Kwirqp_3!`&t+VmJBVehk?gLJp$9n+=&h)PMv{>TkK zcr0=iBoj$)`wkePcjCNN+6d7TjM`+m9F`u-I}uP`zbUZsRL=sKS(5khBr!InaD{V8 z{aqR{PKo>lw8#~kMtlKej-M&FZV2{##!7yMPT@fo zznvvDjVI+RIosc%7o%2rp&tyQXficP!y6t$MO_H}9d0qj{c41N7N|!SU6z;8a>*Hs zWafNDr={NjH4+GfvcIfeyv=f(Ej;Z8G(2elOETosMEO|Sy?K^Icz39 z5)cWS8>^ak7H`QDttC%*m+p%_xHM4e`#f)!u=?-sQi-F`L}&Tq`a3w9 zPoVl?(YCw>Wp&&8w!KYGj)2Y6*TqW1^^9?LFegK3$AZJ z#_jq$G~$*09qKUu25AL%^K3c-X}zt%%@$Nf>mnK{yi}L(w3hTz_s19kafxcIrrEf# z`KH#Avx{w3xGt7%=21YODi!mn^QeD3OTIklJSWj)h5R7d*ey=%LBg{7Au0(@Ju6}T z+YffeRCe!-`4Qj@ARgufKowxhhdX18fEF2^#P^ercE;oY3W4v&_dfZ%7x=4yZopq) zciq{YF*gCcAMcD2bShnhZtxdLs9G1L*o=zSXf(RfWQ-Z3)#=9S#_4pVB@!wb)y3X9 z>h%+R5!=Bg*rxGeGExIwW&r2cC5 zlFcJz^Af8l4Xz&HngVUxv5i5^X*;;GXnEhRMNy?KaOsM=4Q(IwPA_KQBzJj2+_tNi z!^)ZG$w@?#0xoT(>w$nbXHF*@#}!O23mFMnHGfv~9Od9?%0VH|LCs;ZX(yXxZUd># zXbB5PECDHJc=HGw0PwNu#!AtcXV5mJYm77yP~&LV_>3fa;;3MT=*#nG9gT3t-+J>r~(|m*WND68cFuX z!>6}!i8C5_oVRe9a?M=J7!o!JRHA#DY-(|Wr&9}YDWtsSs5bJ5`Gl(nlG{lyDu=Hf zHIzm6P9G9#>;6-y<Bv+k!^gs=Kl$&(o7}Q%q4*7TVnc`j{>sIwER3zsO zz8&>2LZ)Ia#)z-1Ve`cNHfuXr>Li5}cnt^6NE4gXnNQK7rL6rXm_8N8;2UjPvJJjL zJ2+@mBK_s5!PcqIONiPRiS9Yo6C96|%ivfPGB{cs3%|isNgTuK70>g|0ZliaP@-w0 zSmA{y7JP%ax-!SoR^FPum7;}yJ?Ff-c*%=Z5pu>h%rSN2rRUfQq#D>UHomCI;~1Ma zldHS;W2^TK7DNaFFWB-E7K9^dy2nwul1?yQBM8d0n(rt{ zC>d(}`L42z@nnKg)#%^K&NB}=?gjgjGI9lbFH$8aby_DPq zg|P=!7!7dHQVA700S8_K54gmu@IK%jAp2iO%yZ?voWBLAd7%|Dvz&6+JV>*AeY_nXp(fdpLJ9W&{eD?{Re{O###D@{Y>^|Z4 zXMjmXhS_Wp)N(?|2LYzZmXo>V$H5mc`DvAKk?s@u1w??YL5x5(kAMmotMxQ<>ZL!R z;yhpzpFDt^3R_>>cr|*uKJ_SX2HqwuX{sg#%iiLtUMtgBPW|Lr;%TP_ahri_k5!wl z4m^i0x~RWU>v3M^`(h~9`)lxu(eTJooMe-hU}*=Vr$cXM!PXu1X~uIHYK2X|{nf7A^ak+B2yYBc!~!FZ&qWdLkEbf5!`gQmYYVgLo{4L(6)T7pMi3`+!l}E@Hfe4kbScI z^5Q68Cl1p;rM%SfmseS@pu_cnQxt-ADU)w3h4*Uq(1&K8BYTJ;9My}?)4Et=KD2I( zcRZNRF9LOa$%kmxRKe#WkAicYv>WB$+Ro}l9LspiKAm?WxniOOmz5%U&HZ}A}ys^3t|7zEYIL5B$)^ViXQn*=77{F0hU!$M0j;t`w=cUh1Z zn;;3LZix3!G`SmJEmrN!trcNWR{**N~Ihb$hz~WZ*&*&yU4Lm$(u{S3hiB#+{;x9W2 z!sruMhRFy*d>FLov@d=shOu~oxY}rH5%ggf+~T4BC0^}~aOYktT7slXJ8Ju+ZMyvJ zlZs;Zf7O5Q4X7_Q1fRIeHQVCzi`-x7#nD?{6Gywh8tr^}%WKZah5j-GT-2E#6#Vmx zD5}(Fsmiubg15xj{jY8L1;ryrGYWAdg|NgZi1RgOq3#rfd@`zvQiJYX414dfh$zu0 zN-(m>-^c9XkyeQDL(73e>w^(&EK2>%ox9u_U1Y&Wyhw3QzwivN3rZ(})hRq(?5r#|!jtpq9>#-lvQ%JO{Q--0SwIRC}Ug7+DmF_e`YWJNS$=$j3X zlVkV4)$iey8pVsoXy}hc(fjY_4v|GcRZvybQ^~poMJ|8@J(FSNrHDb+HuPPR`lO zKhN+FX>1iIV;G)tU_9!{f5ibcrY*nrzyvZy9Z=)bfdicv5>ab^$wx|GJpR}VMr35q zO!{NMpT{46yn@bt_|?+7$IQH_$b6Qv{sVj0B&l$=#?VpXyC z{1f?ZE&0@F`Bc1Ndx2_8yLfHv{_(N<+s!XJbnfk}T4MJXsOFeoZ0_|OiohJ>e3Ol0 z?rr3#$~zgF#5kW}z3JqJ&SD_-U4 zjKpfGReO#3__}dP$9-Sp&ZGQrB?8ajlF@iboo3z9((e%&BEtGbO>gGXk`}f>Zp(VD z4TH)GkEF&a@j|uxg8}mqJU?HBiGdlvaUWH&>q2p8q(O078y)jPN!7Y5eWTzR=l2N% zbgNWtjv^n;V|}<|B>QnfdlsR%<;RxQrgZ95uB#;yxa<;0X_@pphEj#FR^Y#}b@QBZ z=>m47JlAo^d7Mqz#rt~8r9z%}cK?i>ozVNTY;N~D116`Aqz-$m)F3RHes|chjaB+N zY{3f%Ik?5mU6%8dI2|#9OQkhibg>>13T*waUhugTyJr3N=y};Vt}W_}99!7hN^aXC z3w<3)hjOrn5;j6}I@v+t$rSp zeZ(%O`z}KVgYmjd;*!NwkC)Y@i@UM9w3U-H)-!1OV12}wOX+<7hK?4;#$Q}sU@JVQ z{A?`9hTZWmdyz?_>JD)!iJje{0>{)M5!3^tgA3(;-(UA4q*`_w^y7c z!}Z5Z+Lay5a={)0sfxs4rOt4NW0YSQi8;PblQ=sV(Dp~G8JusGFo>g`jXo;ow;sPjDDQ|`TBk9z=I?F%1Ao^oi- zOSP_O$0)N!vre@z^|ha_y!9yE)T8(>kDf*TV(M#t%XdeAgrdJ-*9}HKh9V!8WYJx< zG%m@axoWBQ!dp03cuQbO*`#$;JJ|8!?F7w%Ko^E14UQk%HAOkMfgFxL&&4Yo*Lp4{ zV4#@;uU!HpECj!iDV*_XzZ^gabdAK8i_gK{F|p<1F??NPB?xT5Gi|B;WB7@TfKvl( zuci6j7>?RC9a26+v>k1`krLIkM&`z7!g;3{U^6&(!X_CI16qae3@p9evW>Ed+lmvg z6CH!`Wi<>`uqcu%>63vVnoy2NvBxkQgEAaa_3 zD$1ps!yKceHq03qi`kGakJ3q9cuho{g5`V)%N6wkEe^!oAFxp#(nLiV%}I~II4>K+ znHevwf-iwwT;!v8C{kii4i5ia>-17Rx-;UulBe3bzyv8ZHSUW}!s|YxWCjOq5+JF? zd7{K#iRNR>G;lle`37zh@n3Q z?@Q|W^Ku3(Si?3%J^;?JU;?wzE17D$buSZNH{^$5Ii8$?YeND5_ zn?lYhxHB@TOx9*d70Gl5v+cZ1x`oGqtv}}&H1EO|f36(yONbLs6JgMy#XDl{kn#|{ zJBPT}f*95FLo|*Kb{C9R%@Fys;fM#a1=!aL{TTSm>E!Ah#tN9mx$y=00hRmpp!*{?1`SVlqPyENi0XkZKcH|7ZNB`(bo;72THQ?{6%BcO|jr8xr5 zu0>N01rz5=v4dF{J1h(HSQhAMW5IuImnDFSpXDWhcvxNnN?rmoSyeB%;Ur$smVipR zaB{jOZfln_igBJ$1^Hr(yQE*$@+$nOL3*7y3OItoO%DMUve$q&WzljM=ysCml?OVy z>2>O*YOFZA1lpQQw=)!&O#R*PhQ&q6SsZKy76+ZZSO}0T*u<&wOd4>`@N~}M3ktl7 zjbkk|A)E9uX8^D+*;9^4aD9aq!(d{}EN1~8#BNUs)}#dcLwGPf%VLBxicZCG&J+m| zgyWiW_i>d?x|iGzYqobJ6mR<#O`#BR;kuo09v-{pFbaU;;{5fmz#wZAv`J^#Ru4BP zp}*8=kk%v37NZBwTqBiDdXuk?kvp4oU3f-*MsZ-e40c+AxD+k@f(?*#IV;({DLBQM zgpqIsDjyl5o;TGd$$|nbs<(R>P59`vh;vYu@w~{sSB540`*7dWaBho}Y?MSJM!SE+ z)}XCLbD%YX`=Zqe-|bA0&Yxk)U|Cf+AvGv{192PFL>nzN%w3yvx!{q?Ila||;=RvZ zWlM3QO-ko6GXL|;fsL>F$8@QmXDd#O26YppxUh_w*{*gIyDX+Kz|B#Vl&v|pl`m9j z+mk{Q19kIp)XjDN$yl4#_4~E-`O+UnpYy?qdbA7lH!rRt`md7S3{YcaYx=)26vXF^ zk!}La#YJU#heshsp;$qrw|X!= z`>^y_a&l@Dl+;H1)NCP+pfd-9-Z(U92L{-xH+h9X`x40|vmFeVbQMXxD4TUuPO~r9 zw^Hr?XaMhQ`i@~IlyuzFqc(#T7VCK!C3k-q>HbOuZ9%c#aX!X~^j_&@>`MPjz6>6p za~~JqHBY2nl33g7z|1ShZ}(+E!}C7|=()GQBblUkJ$^M_sE=#Tmwgl>YHU@B$LakZ zkJ`+HaGi&}EJ9z5F9SP8-+bEDC7qD72Td<8@?*PY)L1(n-PP~xk>+`&*Eok{Fk+{I`Z|&b0k4{Dh zoaj*g@i>G3v5ZF@p!jHhEo&nVG!A$61;O2I`IwS0F<$h#=*adx!g(gte*^g^9(c`ZJ|nCVhZugy%O( zI)`B#S>*I$wPa%)b*!17B4bUzHn^X%7@SC~dW>UH(qCB!?>&qZ_fR>!_fWjU_S_Ss zOfUv`|767QFJ~L=A3^>f^y$Bc#we9I(Ne#04v%4aw(C!gCOA0tl|s{o|n;_8H6)0 z6k+KBEqavioYZrIT@irzro62qi3A+(vE3nLV<1%-gmfNCL^7r}=^WY`iA|90Y1sNo zw7$P5fd#brj@IYTV=Dm`B=H_t1Nq`{XxnAe5nh`)&yE<)XE4xrSX*1kFEj_9WVeC& zJSu9E-rxH6U2pp1r9{fPG0Hhcnh1<t_#O#qKZdKsuMz{%!~MmKf_Y*HML1Z)twoy&6}9sJ^2A2dy1 zX+;%_e(Ku<-FC5Cp24aCblc8m(*8pc&`b%N{zJv$)!Tnsd>E|HuVTari?&fnI0&8h zkY!9ht$=zLL)CcNGn@xAlecCI&ypt)g>}?aX)4Pxo4Td|g$jHcu6ha(mFLph*exW? z8q!w4-DbcF+E>BI+0MGoUMyZnj0BbBHpMvATD3nS;cHwL+QyuHUxR}Z*@3DtpNaLn zjVx}D&Ylvx(BAwp)V8CMf2= z-n2sN95d)V32hWhuu9%^$R1}22w~cEKK5P{h~%Fjmp|XB(MIsXCautVS3n*sz;}G| zjV4rVJRQKbLK4)8|L45UUa#{!E?!CL=%Lu3m^&c`4jM``nE4!;-z4)yX6_|39Vy{- z3RgfNX1xY0aW--~uY^Dso9Adp$e%UyIl(Z42=NF8`2&nS?2tLanB&qh06?9inD|$WVUU`pbquV02CSFZC!K6m zxUa|jIp1X+uY#XALh^-1hdcS3TwPR2VhI*!zC(mMCxTgm(IhUi3(Sm!OLSL2?Vm-K zSU^R-5Bi&ri&uk(G!?>TMld+MDsKfAbC)2x4#b<~d$YouLdz9?r1=7k2mM9Zu#J|V z+4d*--fQu*%W7Xoc{-+)Nps(2^9aT_Mi8|xP$oUd?f7v#uI^AYG?gPN4{jAoGdV-Z zhf$G)GcXMi-y)jvEx;Pt6wN~5@<0*2&4GIsNqqe;XM*BoYu&Q#57PV%DNHExUI+#O zpOF1U+h0c^wJjgIkte9I#Rt2xkM8o1fgvA;DemL$Z7eLUXWD0wWfcAK>!eXE9^!y8 z%HP^Ccm<7Al|j-V=wHGvtKkHZF7hP|;7Kx>n`34Tlx$qlOuLx>1|Mr@Xc@$C8ZaMo zVb1mU(xC4(Fh-Ls0F{qvpLj&Xv+;;G?$wCb;Wmb3_=M4yOTM(M(q6#yD=UHxacP4y z&S0uWjz@kY6!`xY1-uEr$)p0&SgFHM!F~^OL~$d&R6a4W@zc=)2|vXx0{Fgrv7*n2 z5UlKUK@b)>MSbHc{aX9lM#qNPdcC#YUfFEduX5P!`sT*9cG+d7UaYY<=&NcP8{z7( zi}1|irqPU$mL|w6<5yN(o|-ay?t%qmz>nMm8+XQB0x0IsH|>lG02K3ktvh4R0?1sp zw$dRM+bf&&3u(ML|3K5zPzNi%F(#k zSzBMfoa`yzSG~G3W*R^-i>G(S+zB8v_CTYE+ouyEM+u`MbZU#m5=FmsgJ2~O`b493 zS+qvTG#JXQ;9cqUVCjM-cpLi(LQ~Uv{50?Z-X-M0=`Be1hkOnG2I-0%&(;s-a;AQM zL)C13Vp>Z24SHir=B&&VgJJgQ!p5czj@s2VqCT?SIXqD*41@-m%QmVgZeW|_K?pSB9X4Q4u^*dvFuihC$ zU-#slF}iDE2K>i4ry-@pQc^L0;Sx*f!h!`AmeSHirLd&YkeC zn1f|mp~W)SGPk18GJnDRh4a`+9;HFamJ}?!rNUY;&q6YAw9^~nu%w{uW^y1>uDS`S9J0 zDMxRsZFW}H>kE^T^q6$@hz?cEd^R*T%&KO-L**kcvtw>)bn4eSn?=17Q#p@s&<8R@ zvv0v_9Bdqwr_tHahgEQ~{}uc!gpU6u7~D2@tNajWf)xwXxdfhBgw+S-On(O!r` z++JC=MhNpRiAj%IbBMO@l@O*JZ2gSBIR*TqTCx(+PX?robzmVkn3Jb5(s<`C&%+c^tq)9)UNn3sDgF zRjaFUzmzA|U>Aqb5N1bZ6OW_0axL!9a@SEZEXE}LE2P6WFfVluGU^$=$AOf}kb^vw*_5z*;v;&R+P6N6D z=KukK<{`ufNB|fB`G5t0<$xN12-pJH1$YRs5AYn|2;dAr0t5h>wp}rC06o9}$OaSx zmH?^&BESvU0eA?o56})c3Frn$fb#(1;axFWKsE^72yXYIMOe z+>9o_`3bk<+H}Gl&RVEaxxHCjUBLrXDdA)U8WvbY6$*l|q$G#psE`qUznkuFvy0wB zg?)V!ZsXIPaE_2)y5^0$+$>y}fuWVv)r0oj!0fAPa4VeRrNG?4&}O?hXwMDIo?j!E z{mXaCDJTY2N`S}14S5LmEf>d^E&BnkkK->gbzbppKFUT;shqiG%0Rdqe=feQJ<@(tTN)+MZy>u|7= zc%AYJ;yB&G7X;%TwB18H*{h%VVR$j{_7|ZS1$0^#hF24QnEP)6?nYSBc(OhWcatC3 zlU|c;VfZfK-LNOcJ-fs3M}YUjo)n=x5r#hv{2}Cll$Sggh94muc|bJ6=`g$-_>K;4 ze=ZCUkRRDz{m3A$1AbDrpBjcI0`HdX)57q4;7xM63&QYa!1KvJh_w;84!9n9yAL?g zkn;J6Y)|-ezy&$})4=sIelE;^K=!YPfAyn0P7137uB4R+yj#wX5xDRYPirpumvIWC z{1#wjmbFP0kX@L$e3;p?9zMd{E$iW<2>o0RAC4C^R9n{9ic6UG6(z0g-(swKlI2IW z0C+yvKc!j@{G^Q61HX;yol#8CT+?@4WiP+bin}*!aWoqT2N#`=a{F z)y=XW%BkYNnCW^M48H&qpW;?(=dmf~GS(+}+)EoUV6yQ>F|R^u3SM68U}GLPD<(l0 zK;CzpV&#a?>;?WB$K!zSlkN4uPs;dA;Jq@Q4O}PtF9vRq@nyiRGF}b5NybIs`()e= zyjR9|06!_?RBq*mk}Kpx-2&$%lW{(XGkck2496cL0>cN%#m$^t9GA(J{X3N5byj9| zF>r&7F9B|q@!Nnm$#^~R9WuTi_&yom2K=Oq?*iT{<4RfRJI^j!9gS7?=H_Ay>ch>= z0@;$LuF5Kr;}{M_)Ee2(wPPvNxPjqv5gD%3I{8tGOSoKA=Eqi9Ut7&$;&GKTZ6zFE z+FZGs8U{<7rMCplvYeS0lXemqsk5;-ook`xjpxC#UbJJ1;;}L;|G9SW&8;6+hqJS@Fp4W2JV*eUf?I?ybX~5qdZQkW93&W*2~oa z!V~e}06VG{W&%!RQgBA5L7##Uczm#I+9w9f77tuWI|2B&rA>KI0jxB}4*pbo(br*& zcnJLsU-d(1r}%0#NDKZoMoLHih3i=&tHkeErz!rG@9_O#_+F9xVEvt(qAdPpbMi2= zVW`VpWaYTNh!~$IN9Lnnn9s zR#(liWOkNi7IH6JQ`-bBP0dtBX1~NyS!FM(tw-moyd5gV26cL+L;aDSb``Y^t7nsc z`i1NBA#(*R$}nC~HsCKmjV$r|HhaX4)SKW<-z57dJxMiab^2A#hAL7m$25;YfsnJ_ zuAi}fHu9rHtq-%Me9|mRQ7LMvMA<)$G+{1?gMK$dnVe+-_FnK#=0ZM(VE2tpJN9H{ z4V6vJHH~b&ON~7>WkGGTSXAq1=3^W;FSM_R5AGiB#_cKIu>2}TBBfbSr#2+}@K;0| zd8UpF#CLEiREm1T`WfqI(I05^Vyd|qdAQmo<|qhMqHz65Oc5mP3YwZ&y^@(~v=Av! zfrjHV>S>ie_)G8E8AJUjvB6nie*-!k-jPWZ8U&|MkAJYhPe%{_{BQV`W*7`9V`FCN zSE1HK)-)QStV`d}D6+O^uO7?NC4WZpM-KLeM(64peKTets1k)5u1d#h=UUQf#ypc> z(|7unm1&W8_#PWmd3!^n1G_hUlcRC9qY}!wWMx=rjiI!YGrluEt{qR0iK`Ock#=$> z`E@p6Q-&=Jl#i`-){9U#h89!k;KS&v?O-g}Lw-}zzB8{C(ENra1&%nuGT|Hl!JcpRa?2n9wc@P7~m^fUNaM_&~! z#+4rp#KV5Xj|%rP%$aHE{Z1{t!#$6fM<_5tfe{M)zf6HMco~ecKyT0xglC8I7HGs{ zgWKZmyV-Xy{2$u$ z)*d}~zU*(?C2pmBpZQ<(zaRczefaFdQ-ps!EIoYdW%0Mj@#k;mDJ+f>gvD>Id`mA> zyjAxWJ!L%f*Yf(A_qs0%Lh@!g?I&Lt%G@;h5goBPGNSqeV=8)UKFsgU?^u z6+-~-@@4-L1?Au6ZkO8>V^#F;{%sL1|2Ncsi!k_4CH!aq!eh8w82lH3-RFPuPYJIF zjYfWaKTpr^(Y~F4+7W%J-4d@A?U_9@LoeeHua+Ldq4#L0{nD50=u2&m+^Fp1Y}R^M6yqp%>}Z#P&Qlfr7)$keVP2FGhd4T767GP51@F~ z0`!0;z*K+(KzXHdkbgIT^4ubS@5YzhJpgjw0-$)%_t*)@uVix@zLeib0F>Tu0p#z` z0LtG90J*;jAoq9>h3NCY@>9Vxo$>5A%Fa9gZO}wv=$_@@dj2<#H78ZIv~v7Uf7+1pKtqB!>tq`0(JrJ2GCD)S|!8-t^))RUkbi+0i}SI zfCj)uz>feA0rmk716~72fB<0B-&DdBz)V09zy_!TxBT{q&J+}-Q?68_$Nuh-T2hdx)y zulrnY|Gv*vi8waC(&zGB+3WhzsXo`-MZGRR?1ja>t`G3Nc`%_qr_j9!w9oZaCfN+B>t)^+Tk+;cArU8rV;P-^qQh^^^Ks;#GaF(+>n(<&X5a zCISLy`dq1iS%2?yy@cqU%1AN z>2p=XzV%G6>rbaalT)C{%l$3^c}hWfuYVc&GWWUu>$N`D)yNysch>YzTubkfTst0> zn7LlHz+Sn|Ug)S5Ap~4shLb^@FJg}=Sm<%A%j}<0l|n2LPbIPkqp;76D6gy)iy9qe zI3umMbMZ*w2P%44rxtQEcU~5CkuVoA;7OlhNnR-w*5i>ySr#cF!p6`0WC55P6*Cj6 z5rpd%GZW@nsG_rP?ln?1Tux{Sb5*2!N|}kv*i@+IH_xf8F2ut?RuMz-{i;Pcz+^=$ z5QMu`C6!IKTDxn}DmtpRtQV$6ENxgDZYQ)1^&_;h7|1)ql1KsKxlYL|OLVq;#y`~0 zRLV7%kC@-Es!@1=#Ul$)2%RMRRLI{rQ|ywISQ$l-IpHRyE=uTNw@IlDoV|ZU;TKdk zixzrC4KqOmWFxo$pVd*@h?>|SnB{zx;=MJ|u1NPiiTbXrmeYhx1zyV(R-ks#Ht5LM zUX5229d`wRRz*@A zgR+xN;pTEd_~-C2uxkkS!{jL&huXl;{o!(yf?Wugqg=+?C6_HzE2WWT-I@g(b5*3( z)+1*0R=KZ~F*nu`gryAU(rXW^N-Jxd(Qd2kO>(bhu8J&NAJI6hRTQYWbR!o=o1>VR zprA!I$w>-DvYDq^ESr=*wm>#3`F&Oed99@lxR6jSyhgOM@R!4=-IR$AbdzSGjqD-5 zhwBrdd;=6a%6i-ttOttKN(tX1HwwFCLz7(?&t36ItFwu`7YOHwdgN{;!4Nxo zReD5uZMD6yrqZ#bk#)g28z6o-E3Cg42wzdCvcXig3PttK<{FA;j*}jiqu$EeenT}M zb|53o`XDRDpu7-!TkRfI30g?yYWti<2=HzVne6r^;Z}@okA?ca<=_PacLR2;gdO78XG1*G;0L``M~ipF(GIq(`w+|>Shr&_?Y;^2 zI>ZOF9`MkM0EBJ24dLLgcOT*-dq932zK0QJ4dMozgk2MvE8!P-uLE&C2|FYFBJ9ar z*x{?sLb`~zw-D|{Fc-soGoS!wglnGzfWP*9go8Ps2(lO;|8(EuNYi!vo1dt-AaAsY z$M2za{2TsPcNI7F(&i-Wr=xs^{dUOa_B+BXN6--pj8K44UwzypBYfJXsO1KI&E1I_@>0{Q@#0Amp@9&jxn z8!!)022g(yDpO+vDe3eHf1Do4l*djUSbqPeCPPnps# z$BM~0-zadaT5O8Q!dB_1C5cHmU`fr_GzwBw7P6x)39Jii>{V-Ie6D>}B^LK=8P69g z%nLKi>nntyYclkqm7DzK(UOfElf2A<^ZaJK`)jBCkY~1_lfPV07Y2GNwLlart7^)y zy1`{S*^Xr`WME>wvJ00&Rt$1R_=~I9-N^RCUti^!RNiH!m3{Tl^e8}>H8wqAF=0_c zTi45M27M`IqZF8EwCvaF;P-;)j>qLzoKnq-3zkB2>aq2qHTGbJVOwag#k0Mu!~7N1 zH)6L%BIlGMyv%bnxiT+?6l)=sBI5cs*CD}bu$W#G@1KqDe?1MR5+Ta)#x3cSFJqnwJ%Q+Iv1ssXXc^K3Q5xv}Hh|U68k=QV9#twE- zA-uba4lK^e3u-6KUa?GL;pA(r6vZlP+6sc&Coz69lB_h{WL0pwy{h1J4OYRMag|lU z+09hNz^<>7LB2JhL@eLuB^Q3%mM~o9<+%kiG^-FxFDtRKBp~Mp+Tw>7*lH2C7Z`(lCpwSZ+n;k5a4;qeK~Mw;Z!@3c}1q>I)F23G+WV z>F~dr`6enhAvaVDt3d^@f*56o+UbSgA)m>p1rz?xlCezKDYf7Xqbu1t5G!q^cpj}V zHwx9DcNJ0yud6c9hvvq zPS&LuQgTw}q&%MT$CSR5`!n`tK9RXE^Xbe3na^cjH15n=W?pYTVJ^<8$$2N|H@VC5 z)>9|dX$$f}pqah_ND{V#E>a>QmEor|>dnE0Nw5QSzq#aCq zEb|YUuVucI`BCO)nG=lhM!oTR<4j|U@lE3eV~lB>Db5scx*{tvYgSfaR!P>9tW{a> zW_^_9&-y&;Le@7~Ys^0L-0b<;w`SY3>$C67z8ksOk^Qsm-PsRkyK*+>{5WTK&Yqk< z=3L16CMPOan>#-D%G|xVXL8@o{UZ09Ty@^0ydUPZl>Dz`RZ3;b>XgQmbtykg zX-Vl!IiB)Cia+J^6m{y()SsuerS47red<%Gfz)qOuSmNZ6wFBbWm;R>@6z_AJ(Koq zT6FsL>2IWKGR9_1&zO~wmQj@PM8=;o{+iLAaU|nJ#-$+1S+!YBS$Ajc$ogs4ud*J^dMs;S)^76=^DE|$%%7Rhn@43k zve#$3v+qR>{W$wg3VM-%GwB*^oRZ`I+QrL5pL_uO|O3c{9rU ztJJR4ms3xtzLk1D^_uhp>0hM>)33|O&M3&3pRow7=DN(*%p#QKE8{ZLdQ*>SVO9fb zGuOP*{ET^A_U!COvQ;_JIocdUjw#2I6PY_YcS3G_?u^`7$n)IX`N;FFxqr+3GIvYf zKPhjw;XV;Q;|wbe2T@OH$tRNknY zyyx#-vP0DMc%3N!gk5V9LIfS5jV2c_-z=l!d7cXdMk{?P>3%b*G(8lhV$m z^`@OqyEF3_na^ZSGa8NA#(d*kW3h38ak0^6tTQ$nHyAy}`-~45e`efm{FCu7#uI26 z9~dR$fHA_PMSq!My4Ez?lxE5?SxgH|rKVd<6{Z?flWDVQa#p!{r};_rbY1q0?3vjs zva7S5*&ESY+Ol(VmgiLFOv*Lp+H&i1@6G)rHzsdEo-J>8-rl^Y@@SP{K);w~m}#&X zo-v#-{KGIW*_HfM@=M8YCf}H{8*Tp|DW9j7rahe2nf7klXK6zE&(pimy5CFxM|wiW z%8b1kZ)D8Nyf5=$=8uh!8UJ8BWqiZN5pQmrSFxVzaKyx+ZIS)(u%k^!}QxwOMy%dC}s3p7raj-()?J^;Fh@tb(2W;PuRi7J(XdML1)M_l%w~!4fhxxH5@=&{UrHZ z@`03tDSt^loH`*rK7D@r()11K+tN2@crxZ>&ddB=<|n4lOkbFyva+-Cv*u zjQX4#bAFT~)lqN>z#@r8sp-YDMav)DKgyPfJfLPWx@z?=hYoOgol# zD(y|Q;=Z&CX`|Aor{925-Iab%`i}IUr2jH~Z~Bwz&!!(rKaqYq{e$#R($8ajh{o7A zB}1QaL&i-R#*EyIA7r>PeuB30Va7nlHJRC&3o~!a{9&dy^Wn_rF-K^O*-_xV20%zS5wzZ?HUd;pp- z!<=Q#fo-|oyxCl3t~EECPn-W~9yI&R4`2ee+Ar8W z_5u4n`;0^wYsIC|iaCk7(1(`9s>Hg)=0s3Qh@){}{`3uAL)^J90#PRBT9l5&|cSJ|N)Qu>vX$`=at(Rb9@>NV;j^(OT;^$xXF zeLx*h>oiS!PTQybQLEMu8-vE@Mtxk0tEPosxWc^JTxQ;i75+Z6+x(sRsaau-v!+_p zp)C#83e1grtXg}LeW87cJ=?w#z3?nn%%;SO#1n~sO}w4xOMH^xl4mAOSc65$=HzY3 zJ7F8wB{wFwCwEYLbB_A38PZMCeNxu3cJ8tTuKY z*1^lr#%p7@#_q;ycpz4)K8E92F$L|S}Nd~5va_;c~M;(hV&n3tPN&E@6_^GIL-yy`lT;?oO~kOWr4suR|C5lC23B8IzJDx*U@~lv|^3VaAL`52dwDT8Fkx%V=F%`93bE^=SLGUM;U3)DB^`6ttsS zzc!!^YNL#?My>HpV=89MEyfRw`;3Q-$BieAXN{l3;vP2U#;?OJqCNgdyd(ZZ{F%6H zYUZ`(0tnq@7vZn9Qk&fJf^M5ndGdK32Led|k0vgg>1_6_!0`(ezWo%U6U z#fcs0_cxR8Q{Q7E9KqoXF)n^voQ<_(iMUMMDn5Y~vrjxGek#_%&cvme*k5gu#>rPlQ+s+&}KO*#HPoZWB0}$j6D|1V0HW~_9aH{Vr7Z4N?EIHRC-`ZK2ZYd6tw}n zr={vLb(PwtcB=oZKBewaE468`AOEP`rme+#`n2|)*hNe$U>7aa)zRC;4OS3eYHAjTG=% zAzmu36nmsA)DUDqpGSN`vxU*v0#m zSCrS3-ze`W?q&Q@l@i~#OqiWh7z4g+6d#m0Xtt@B(4)Th}*>% z!~oGZ@5n%E@Y5$%X>i)NzP=&tDQD9hm9IM$)5&;ndC$hvIF4f0HRmONWd z$#dm-@_e~bUMe@q&2o#pQoci8jXrOa+hJ|e==l!pL^5)h{EWO4yR2REZn;~|$vv<` zy|gcs4`J6;kdMMD4akG?DS1dfEwgAa8j99L!%-nRK3W%zL{qT2^OZ)&GOSeYP+FBX zWj$804rQCtg>@{e>{7awoU&i(#aebqDJVyk0cFs!AY?zns-V_kRh#OJsSe$o37ef# z=c)6dqfKgyx>8+@k#1MltDDpgHKTT6=bu$~tKDi3_WpVGpn60tsQs|)r_>>pX+f<< z3v1)GI&F$J)tU8l?M5@6<~z-Hn(G<8OW&zy_1${6-lOl=^ZG&k2(B9Xan*22AA$u9 zVuu*U6;+)v1=b*g9oJ4HYwU&<=rQ&idB@TfjDBOlIEDRJ$gD91bG#Wbr=#v(aqAzIr9rl~%LOTyLha=h|j=Is21cSZQ*&66wWyd&n%9M@`+bteLPQ zDQm7Z-)h8uY(1_Sw_(q})7o#Hrume`vkM$*#E968v0aUEU5_!{hVk5qvFye;_F@c= z$Tb+H`sk3x^dXDcK^vKJoZ}mscgEw0Ga~&MlTBzFV*e_C?Sa3T9)S6D?qR@4FT8pd zep%=e{0!<}OzZ!jhKBLJpcf2p7(Nf)0(S2`j}yp0Wg|L`IKa*n!e=uE7hNyDS{M}Q z{;Mw>7a8aJoBJUmIE~D1{#t>2YNpd5I8r4HViARVO;N(BTg<}> zgxl~abF9!h!MRWG#N&xBmj(a5ml__;0rEdNP-LDjfI~Px+|?lgMt&(@72_)dgLs)m z^_aW>$@gb%kpo-~Twb3%nCvnMo-_x@Pv%c9qI8}QN8po>^97vvvxW2|_?mk02<6B( zDCIHrQFtazP~d`@{R1OJfsJ08{^xAq@j18b7#5}7OGWCod_sU~zqCmbryD2LKPRI%Bk)_pkU7Fb-&5etAgTh-YPdo0i)at!tz_R2$e-mk**aWTq7 z!PFl-&Of+>u}A&nh)*wd^@D=Qe&z6ZEkYIXxNrmBNpKOL0ZzOTzu)A=<7z38ZbG@m z^i@J;8DrbM^ziBt$p6pq;scm}m$`z-+VBa25DEa9@WgOvH72g7`^_ULix3|D!nlFRkI-Ea*FxaC&7!Sufo$r)r zw2%d3N|fZE7@JX~sz3^iDtHnS^5FY@ggt9qHQYXv&mp$Pj?j3Jza~_$DCD>KyCQKM z`B8bvozM&zUG7OmAbcldKlYJ@ge({;=Sh_izKg+grz9en^p)mP5bceucHfWkQ#61t z@&U(|5%ELdGW`sRcQg1FmEvQH|_q{qVh-JZs4>%5j%gV=uWAGa*3Hc-Y^O5>61%^sH;_TI3v=v%hz8Gc|xO^73Q7;#$D< zWt;);cgiAt8zZzl#+dEJll{wrZ}yn%S!4_5Kh6i0Mtby52lhK)st@u9@|c{hUV7|L z0;$eYf00eD-a4$mLg(xl&JExU(gpDcPeq{s_U#SqCD+(h8ZW9t8jLCAh_k*tS>C=% zE(NB}!8C!KC8VBZtPkI=ayTqBJXc!J7#k;uJK>(~wFmnnq41NEep4ICcRP#2x9}Il z`$3~H8Oro8^w!_9gO?yMH1kea?YT zdXYg^CFF9B`@IuF`V`)a>me_mxB;vdxsq=Mn;t`7_#D_DZ>oO*Ji3@3_F@FHml?y9 zaD?nt23(#$2aXr>b8x(M`g04#M3(qG&UquA9{DdXUd-fTNDYQ_%ztJ zXT%xsB#QJT4|a9IJ%0h5_Tq3o$I-hEzI}1>gU|9aS9CI8t6}Z!36)7Z*hOiLaOX55b|82Z!^Shf3=Sl`#Q48Ao3>gU|B; z$M?YVJmy(YFb=zIr69U~T@CizL;dwI*w+V2vmNYTKaxF_-p2g_ihxl6zjcJM2myrZ zbHzIh9!tJ(+)u%ie8ll}@RA~r;^cQ3-sEzH`r}P-4HX1|y%sL+ht4_Vo^Lsr<||1M z_Gc@Y<}(TL8{jc6I`w%E?C%e#*w4V_`de|Vbbo=eDd4eX`7Z-YMfG z_%*P5inD|aj34bENGfoBzx-6mo>B0V;G`4l<~a(U;xT%GJO26b{`>HMOV=knu8-qG zCHjPuxA=hby%OZ$h3E?1?~yC; zy8=a~-(MM?|8_7`#1T5*jib1t{&2Xy=mnGQB%$lm6mE9>#6@sW_!?X)pW`&#OuE;L zr~Y^W?Dq#s;J*T=%Hl7t;>yN@=g%6$!AsK>*w4US;Mv9Wm4R2m*A|)Q&kf@@3OuIy Q);^4@xszbMn4aVQ4_fB7S^xk5 literal 0 HcmV?d00001 diff --git a/code/SHDebug/vssver.scc b/code/SHDebug/vssver.scc new file mode 100644 index 0000000000000000000000000000000000000000..5475c28bd5acccf8e25eaa65fb282c6756f4d4a4 GIT binary patch literal 64 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 literal 76800 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 == CLASS_PROTOCOL - || g_dismemberment->integer >= 11381138 + || g_dismemberment->integer > 3 || g_saberRealisticCombat->integer ) { //wait 100ms before allowing owner to be dismembered again diff --git a/code/cgame/cg_main.cpp b/code/cgame/cg_main.cpp index 5a2c999..7536017 100644 --- a/code/cgame/cg_main.cpp +++ b/code/cgame/cg_main.cpp @@ -1775,7 +1775,6 @@ Called before every level change or subsystem restart */ void CG_Shutdown( void ) { - in_camera = false; FX_Free(); } @@ -3173,7 +3172,7 @@ int showDataPadPowers[MAX_DPSHOWPOWERS] = FP_SABER_OFFENSE, }; -/*char *showDataPadPowersName[MAX_DPSHOWPOWERS] = +char *showDataPadPowersName[MAX_DPSHOWPOWERS] = { "HEAL2", "JUMP2", @@ -3187,8 +3186,6 @@ int showDataPadPowers[MAX_DPSHOWPOWERS] = "SABER_DEFENSE2", "SABER_OFFENSE2", }; -/* - /* =============== ForcePower_Valid diff --git a/code/cgame/cg_players.cpp b/code/cgame/cg_players.cpp index 106ca58..3e3a53e 100644 --- a/code/cgame/cg_players.cpp +++ b/code/cgame/cg_players.cpp @@ -4651,13 +4651,6 @@ Ghoul2 Insert End // if we happen to be timescaled or running in a high framerate situation, we don't want to flood // the system with very small trail slices...but perhaps doing it by distance would yield better results? - if ( saberTrail->lastTime > cg.time ) - {//after a pause, cg.time jumps ahead in time for one frame - //and lastTime gets set to that and will freak out, so, since - //it's never valid for saberTrail->lastTime to be > cg.time, - //cap it to cg.time here - saberTrail->lastTime = cg.time; - } if ( cg.time > saberTrail->lastTime + 2 && saberTrail->inAction ) // 2ms { if ( saberTrail->inAction && cg.time < saberTrail->lastTime + 300 ) // if we have a stale segment, don't draw until we have a fresh one diff --git a/code/cgame/vssver.scc b/code/cgame/vssver.scc index 177f92502a7d5e25acbae41c2c300d472f327b3d..341b394b94881170faa31463042fef9f8eb0bcd5 100644 GIT binary patch delta 144 zcmV;B0B`?*2Y?5V6a*rvcEgbvEE$*Mhouwyx569%003Sm0045QWIgiWo2uNAT_*_^ zO|*jT17>!Mk&P<^)z>)Zk-QiQ+|0o%R{1EU1CiY)378JP28er9s*RHk0UHEfMm`Ob yECEae7QtBa8sEE()jp)uovcqJVG003Sm008;kiVLb#n&91$T_*{5 zXL0-{chInmk&P<^EJF(5k-QiQreH&HI3z9L1(Dq+3DE#FEFSQE8jh0<0UHFmgY4sz yECEaeZtj`mlY9Xz1k9gH\n"); return; } diff --git a/code/client/cl_main.cpp b/code/client/cl_main.cpp index 8fe90f9..87b531a 100644 --- a/code/client/cl_main.cpp +++ b/code/client/cl_main.cpp @@ -521,7 +521,7 @@ void CL_CheckForResend( void ) { case CA_CHALLENGING: // sending back the challenge - port = Cvar_VariableIntegerValue("qport"); + port = Cvar_VariableValue ("qport"); UI_UpdateConnectionString( va("(%i)", clc.connectPacketCount ) ); @@ -629,7 +629,7 @@ void CL_ConnectionlessPacket( netadr_t from, msg_t *msg ) { NET_AdrToString( clc.serverAddress ) ); return; } - Netchan_Setup (NS_CLIENT, &clc.netchan, from, Cvar_VariableIntegerValue( "qport" ) ); + Netchan_Setup (NS_CLIENT, &clc.netchan, from, Cvar_VariableValue( "qport" ) ); cls.state = CA_CONNECTED; clc.lastPacketSentTime = -9999; // send first packet immediately return; @@ -1066,9 +1066,7 @@ CL_Init void CL_Init( void ) { Com_Printf( "----- Client Initialization -----\n" ); - SP_Register("con_text", SP_REGISTER_REQUIRED); //reference is CON_TEXT - - Con_Init (); + Con_Init (); CL_ClearState (); diff --git a/code/client/cl_parse.cpp b/code/client/cl_parse.cpp index 3e23663..46b7e52 100644 --- a/code/client/cl_parse.cpp +++ b/code/client/cl_parse.cpp @@ -324,13 +324,6 @@ void CL_SystemInfoChanged( void ) { Cvar_Set( key, value ); } - extern cvar_t *s_language; - if ( ( Q_stricmp( "DEUTSCH", s_language->string ) == 0 )//voice language is German - || (sp_language->integer == SP_LANGUAGE_GERMAN )//text language is German - || Cvar_VariableIntegerValue("ui_iscensored") == 1 ) - { - Cvar_Set( "g_dismemberment", "0"); - } } void UI_UpdateConnectionString( char *string ); diff --git a/code/client/vssver.scc b/code/client/vssver.scc index dfe76edd3a9495e1e22c925a5f5e89bdf436390b..25196b7a3f6d34fb9badaf062edff269c59b86e9 100644 GIT binary patch delta 109 zcmaFB{D66ah~=E`=j_zf8Ngr#kdBsIDrI~jRNM?GvJ%MmS;(GIRFMBeAIM(?T7zUrLE4y8+3y!@f1H?dY-qJX(l@p?kT3l^ZtjX;(6?rJ53ys3}bxJQK% E08Bk3ivR!s delta 109 zcmaFB{D66ah~>jPaV0f%1~6Cwq@yL5O4)U6e`E#}SqbF3d(P?H!VuG80OYR%@>e{H zpTuGi|A>8}uR15+#jvbbAvt{p6KmBa4DKGOPUx=hV+E?*2vm9Ru2#b2Q;!-q?onX` E0R2lOKL7v# diff --git a/code/game/AI_Jedi.cpp b/code/game/AI_Jedi.cpp index 3911d9d..87739c4 100644 --- a/code/game/AI_Jedi.cpp +++ b/code/game/AI_Jedi.cpp @@ -138,18 +138,7 @@ void NPC_Jedi_PlayConfusionSound( gentity_t *self ) { if ( self->health > 0 ) { - if ( self->client && ( self->client->NPC_class == CLASS_TAVION || self->client->NPC_class == CLASS_DESANN ) ) - { - G_AddVoiceEvent( self, Q_irand( EV_CONFUSE1, EV_CONFUSE3 ), 2000 ); - } - else if ( Q_irand( 0, 1 ) ) - { - G_AddVoiceEvent( self, Q_irand( EV_TAUNT1, EV_TAUNT3 ), 2000 ); - } - else - { - G_AddVoiceEvent( self, Q_irand( EV_GLOAT1, EV_GLOAT3 ), 2000 ); - } + G_AddVoiceEvent( self, Q_irand( EV_CONFUSE1, EV_CONFUSE2 ), 2000 ); } } diff --git a/code/game/NPC.cpp b/code/game/NPC.cpp index 3a1048b..193d273 100644 --- a/code/game/NPC.cpp +++ b/code/game/NPC.cpp @@ -50,7 +50,6 @@ cvar_t *d_JediAI; cvar_t *d_noGroupAI; cvar_t *d_asynchronousGroupAI; cvar_t *d_altRoutes; -cvar_t *d_patched; cvar_t *d_slowmodeath; extern int eventClearTime; @@ -94,7 +93,7 @@ void CorpsePhysics( gentity_t *self ) if ( level.time - self->s.time > 3000 ) {//been dead for 3 seconds - if ( g_dismemberment->integer < 11381138 && !g_saberRealisticCombat->integer ) + if ( g_dismemberment->integer < 4 && !g_saberRealisticCombat->integer ) {//can't be dismembered once dead if ( self->client->NPC_class != CLASS_PROTOCOL ) { @@ -1061,13 +1060,7 @@ void NPC_HandleAIFlags (void) NPCInfo->ffireFadeDebounce = level.time + 3000; } } - if ( d_patched->integer ) - {//use patch-style navigation - if ( NPCInfo->consecutiveBlockedMoves > 20 ) - {//been stuck for a while, try again? - NPCInfo->consecutiveBlockedMoves = 0; - } - } + } void NPC_AvoidWallsAndCliffs (void) @@ -2188,7 +2181,6 @@ void NPC_InitAI ( void ) d_noGroupAI = gi.cvar ( "d_noGroupAI", "0", CVAR_CHEAT ); d_asynchronousGroupAI = gi.cvar ( "d_asynchronousGroupAI", "1", CVAR_CHEAT ); d_altRoutes = gi.cvar ( "d_altRoutes", "1", CVAR_CHEAT ); - d_patched = gi.cvar ( "d_patched", "0", CVAR_CHEAT ); //0 = never (BORING) //1 = kyle only diff --git a/code/game/NPC_behavior.cpp b/code/game/NPC_behavior.cpp index 0d42178..e6d7451 100644 --- a/code/game/NPC_behavior.cpp +++ b/code/game/NPC_behavior.cpp @@ -577,7 +577,6 @@ void NPC_BSFollowLeader (void) { if ( NPC->client->leader && NPC->client->leader->enemy - && NPC->client->leader->enemy != NPC && ( (NPC->client->leader->enemy->client&&NPC->client->leader->enemy->client->playerTeam==NPC->client->enemyTeam) ||(NPC->client->leader->enemy->svFlags&SVF_NONNPC_ENEMY&&NPC->client->leader->enemy->noDamageTeam==NPC->client->enemyTeam) ) && NPC->client->leader->enemy->health > 0 ) diff --git a/code/game/NPC_combat.cpp b/code/game/NPC_combat.cpp index 161cb51..19b4c40 100644 --- a/code/game/NPC_combat.cpp +++ b/code/game/NPC_combat.cpp @@ -1348,9 +1348,6 @@ qboolean ValidEnemy(gentity_t *ent) if ( ent == NULL ) return qfalse; - if ( ent == NPC ) - return qfalse; - //if team_free, maybe everyone is an enemy? if ( !NPC->client->enemyTeam ) return qfalse; @@ -1580,7 +1577,7 @@ gentity_t *NPC_PickEnemy( gentity_t *closestTo, int enemyTeam, qboolean checkVis { newenemy = &g_entities[entNum]; - if ( newenemy != NPC && (newenemy->client || newenemy->svFlags & SVF_NONNPC_ENEMY) && !(newenemy->flags & FL_NOTARGET) && !(newenemy->s.eFlags & EF_NODRAW)) + if ( (newenemy->client || newenemy->svFlags & SVF_NONNPC_ENEMY) && !(newenemy->flags & FL_NOTARGET) && !(newenemy->s.eFlags & EF_NODRAW)) { if ( newenemy->health > 0 ) { diff --git a/code/game/NPC_move.cpp b/code/game/NPC_move.cpp index 124ad91..ec1211a 100644 --- a/code/game/NPC_move.cpp +++ b/code/game/NPC_move.cpp @@ -292,7 +292,7 @@ qboolean NPC_GetMoveDirectionAltRoute( vec3_t out, float *distance, qboolean try memcpy( &tempInfo, &frameNavInfo, sizeof( tempInfo ) ); if ( NAVNEW_AvoidCollision( NPC, NPCInfo->goalEntity, tempInfo, qtrue, 5 ) == qfalse ) {//revert to macro nav - //Can't get straight to goal, dump tempInfo and use macro nav + //Can't get straight to goal, deump tempInfo and use macro nav if ( NAVNEW_MoveToGoal( NPC, frameNavInfo ) == WAYPOINT_NONE ) { //Can't reach goal, just face diff --git a/code/game/NPC_reactions.cpp b/code/game/NPC_reactions.cpp index c1da586..702a8f1 100644 --- a/code/game/NPC_reactions.cpp +++ b/code/game/NPC_reactions.cpp @@ -15,6 +15,12 @@ extern qboolean G_CheckForStrongAttackMomentum( gentity_t *self ); extern void G_AddVoiceEvent( gentity_t *self, int event, int speakDebounceTime ); extern void G_SoundOnEnt( gentity_t *ent, soundChannel_t channel, const char *soundPath ); +float g_crosshairEntDist = Q3_INFINITE; +int g_crosshairSameEntTime = 0; +int g_crosshairEntNum = ENTITYNUM_NONE; +int g_crosshairEntTime = 0; +extern int teamLastEnemyTime[]; +extern cvar_t *g_spskill; extern int PM_AnimLength( int index, animNumber_t anim ); extern void cgi_S_StartSound( vec3_t origin, int entityNum, int entchannel, sfxHandle_t sfx ); extern qboolean Q3_TaskIDPending( gentity_t *ent, taskID_t taskType ); @@ -33,15 +39,7 @@ extern qboolean PM_FlippingAnim( int anim ); extern qboolean PM_RollingAnim( int anim ); extern qboolean PM_InCartwheel( int anim ); -extern cvar_t *g_spskill; -extern int teamLastEnemyTime[]; extern qboolean stop_icarus; -extern int killPlayerTimer; - -float g_crosshairEntDist = Q3_INFINITE; -int g_crosshairSameEntTime = 0; -int g_crosshairEntNum = ENTITYNUM_NONE; -int g_crosshairEntTime = 0; /* ------------------------- NPC_CheckAttacker @@ -58,9 +56,6 @@ static void NPC_CheckAttacker( gentity_t *other, int mod ) if ( !other ) return; - if ( other == NPC ) - return; - if ( !other->inuse ) return; @@ -370,10 +365,7 @@ void NPC_Pain( gentity_t *self, gentity_t *inflictor, gentity_t *other, vec3_t p // } } - if ( self->client->playerTeam - && other->client - && otherTeam == self->client->playerTeam - && (!player->client->ps.viewEntity || other->s.number != player->client->ps.viewEntity)) + if ( self->client->playerTeam && other->client && otherTeam == self->client->playerTeam && (!player->client->ps.viewEntity || other->s.number != player->client->ps.viewEntity)) {//hit by a teammate if ( other != self->enemy && self != other->enemy ) {//we weren't already enemies @@ -410,11 +402,7 @@ void NPC_Pain( gentity_t *self, gentity_t *inflictor, gentity_t *other, vec3_t p } else if ( self->NPC && !other->s.number )//should be assumed, but... {//dammit, stop that! - if ( self->NPC->charmedTime ) - {//mindtricked - return; - } - else if ( self->NPC->ffireCount < 3+((2-g_spskill->integer)*2) ) + if ( self->NPC->ffireCount < 3+((2-g_spskill->integer)*2) ) {//not mad enough yet //Com_Printf( "chck: %d < %d\n", self->NPC->ffireCount, 3+((2-g_spskill->integer)*2) ); if ( damage != -1 ) @@ -448,10 +436,6 @@ void NPC_Pain( gentity_t *self, gentity_t *inflictor, gentity_t *other, vec3_t p self->NPC->scriptFlags |= (SCF_CHASE_ENEMIES|SCF_NO_MIND_TRICK); //NOTE: we also stop ICARUS altogether stop_icarus = qtrue; - if ( !killPlayerTimer ) - { - killPlayerTimer = level.time + 10000; - } } } } @@ -470,14 +454,14 @@ void NPC_Pain( gentity_t *self, gentity_t *inflictor, gentity_t *other, vec3_t p NPC_ChoosePainAnimation( self, other, point, damage, mod, hitLoc, voiceEvent ); } //Check to take a new enemy - if ( NPC->enemy != other && NPC != other ) + if ( NPC->enemy != other ) {//not already mad at them NPC_CheckAttacker( other, mod ); } } //Attempt to run any pain instructions - if ( self->client && self->NPC ) + if(self->client && self->NPC) { //FIXME: This needs better heuristics perhaps if(self->health <= (self->max_health/3) && G_ActivateBehavior(self, BSET_FLEE) ) diff --git a/code/game/NPC_spawn.cpp b/code/game/NPC_spawn.cpp index e16ee36..0ea4482 100644 --- a/code/game/NPC_spawn.cpp +++ b/code/game/NPC_spawn.cpp @@ -57,7 +57,6 @@ extern void NPC_Mark2_Precache(void); extern void NPC_GalakMech_Precache( void ); extern void NPC_GalakMech_Init( gentity_t *ent ); extern void NPC_Protocol_Precache( void ); -extern int WP_SetSaberModel( gclient_t *client, class_t npcClass ); #define NSF_DROP_TO_FLOOR 16 @@ -1724,8 +1723,6 @@ void SP_NPC_Kyle( gentity_t *self) { self->NPC_type = "Kyle"; - WP_SetSaberModel( NULL, CLASS_KYLE ); - SP_NPC_spawner( self ); } @@ -1768,8 +1765,6 @@ void SP_NPC_Luke( gentity_t *self) { self->NPC_type = "Luke"; - WP_SetSaberModel( NULL, CLASS_LUKE ); - SP_NPC_spawner( self ); } @@ -1798,8 +1793,6 @@ void SP_NPC_Tavion( gentity_t *self) { self->NPC_type = "Tavion"; - WP_SetSaberModel( NULL, CLASS_TAVION ); - SP_NPC_spawner( self ); } @@ -1852,8 +1845,6 @@ void SP_NPC_Desann( gentity_t *self) { self->NPC_type = "Desann"; - WP_SetSaberModel( NULL, CLASS_DESANN ); - SP_NPC_spawner( self ); } @@ -1926,7 +1917,6 @@ void SP_NPC_Jedi( gentity_t *self) } } - WP_SetSaberModel( NULL, CLASS_JEDI ); SP_NPC_spawner( self ); } @@ -2355,7 +2345,6 @@ void SP_NPC_Reborn( gentity_t *self) } } - WP_SetSaberModel( NULL, CLASS_REBORN ); SP_NPC_spawner( self ); } @@ -2381,7 +2370,6 @@ void SP_NPC_ShadowTrooper( gentity_t *self) } NPC_ShadowTrooper_Precache(); - WP_SetSaberModel( NULL, CLASS_SHADOWTROOPER ); SP_NPC_spawner( self ); } diff --git a/code/game/NPC_utils.cpp b/code/game/NPC_utils.cpp index 171ab5b..d196ffe 100644 --- a/code/game/NPC_utils.cpp +++ b/code/game/NPC_utils.cpp @@ -917,10 +917,6 @@ qboolean NPC_ValidEnemy( gentity_t *ent ) if ( ent == NULL ) return qfalse; - //Must not be me - if ( ent == NPC ) - return qfalse; - //Must not be deleted if ( ent->inuse == qfalse ) return qfalse; diff --git a/code/game/Q3_Interface.cpp b/code/game/Q3_Interface.cpp index 2433353..e6234b0 100644 --- a/code/game/Q3_Interface.cpp +++ b/code/game/Q3_Interface.cpp @@ -753,16 +753,17 @@ static void Q3_SetObjective(const char *ObjEnum, int status) Q3_SetMissionFailed ------------------------- */ -extern void G_PlayerGuiltDeath( void ); static void Q3_SetMissionFailed(const char *TextEnum) { gentity_t *ent = &g_entities[0]; - if ( ent->health >= 0 ) - { - G_PlayerGuiltDeath(); - } ent->health = 0; + if ( ent->playerModel >= 0 && ent->ghoul2.size() ) + {// don't let 'em animate + gi.G2API_PauseBoneAnimIndex( &ent->ghoul2[ent->playerModel], ent->rootBone, cg.time ); + gi.G2API_PauseBoneAnimIndex( &ent->ghoul2[ent->playerModel], ent->motionBone, cg.time ); + gi.G2API_PauseBoneAnimIndex( &ent->ghoul2[ent->playerModel], ent->lowerLumbarBone, cg.time ); + } //FIXME: what about other NPCs? Scripts? // statusTextIndex is looked at on the client side. diff --git a/code/game/bg_panimate.cpp b/code/game/bg_panimate.cpp index b085963..66de564 100644 --- a/code/game/bg_panimate.cpp +++ b/code/game/bg_panimate.cpp @@ -1142,7 +1142,6 @@ int PM_AttackForEnemyPos( qboolean allowFB ) && pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 //can force jump && !(pm->gent->flags&FL_LOCK_PLAYER_WEAPONS) // yes this locked weapons check also includes force powers, if we need a separate check later I'll make one && (pm->ps->groundEntityNum != ENTITYNUM_NONE||level.time-pm->ps->lastOnGround<=500) //on ground or just jumped - && ( pm->ps->clientNum || pm->ps->legsAnim == BOTH_JUMP1 || pm->ps->legsAnim == BOTH_FORCEJUMP1 || pm->ps->legsAnim == BOTH_INAIR1 || pm->ps->legsAnim == BOTH_FORCEINAIR1 )//either an NPC or in a non-flip forward jump && ( (pm->ps->clientNum&&!PM_ControlledByPlayer()&&!Q_irand(0,2)) || pm->cmd.upmove || (pm->ps->pm_flags&PMF_JUMPING) ) )//jumping {//flip over-forward down-attack if ( (!pm->ps->clientNum||PM_ControlledByPlayer()) || @@ -1303,7 +1302,6 @@ int PM_SaberJumpAttackMove( void ) int PM_SaberFlipOverAttackMove( void ) { //FIXME: check above for room enough to jump! - //FIXME: while in this jump, keep velocity[2] at a minimum until the end of the anim vec3_t fwdAngles, jumpFwd; VectorCopy( pm->ps->viewangles, fwdAngles ); @@ -1410,7 +1408,6 @@ int PM_SaberAttackForMovement( int forwardmove, int rightmove, int move ) && pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 //can force jump && !(pm->gent->flags&FL_LOCK_PLAYER_WEAPONS) // yes this locked weapons check also includes force powers, if we need a separate check later I'll make one && (pm->ps->groundEntityNum != ENTITYNUM_NONE||level.time-pm->ps->lastOnGround<=500) //on ground or just jumped - && ( pm->ps->clientNum || pm->ps->legsAnim == BOTH_JUMP1 || pm->ps->legsAnim == BOTH_FORCEJUMP1 || pm->ps->legsAnim == BOTH_INAIR1 || pm->ps->legsAnim == BOTH_FORCEINAIR1 )//either an NPC or in a non-flip forward jump && ((pm->ps->clientNum&&!PM_ControlledByPlayer()&&!Q_irand(0,2))||pm->cmd.upmove>0||pm->ps->pm_flags&PMF_JUMPING))//jumping {//flip over-forward down-attack if ( (!pm->ps->clientNum||PM_ControlledByPlayer()) || diff --git a/code/game/bg_pmove.cpp b/code/game/bg_pmove.cpp index 8547956..678791e 100644 --- a/code/game/bg_pmove.cpp +++ b/code/game/bg_pmove.cpp @@ -1276,7 +1276,7 @@ static qboolean PM_CheckJump( void ) && !(pm->gent->flags&FL_LOCK_PLAYER_WEAPONS) // yes this locked weapons check also includes force powers, if we need a separate check later I'll make one && (pm->ps->groundEntityNum != ENTITYNUM_NONE||level.time-pm->ps->lastOnGround<=500) )//on ground or just jumped {//flip over-forward down-attack - if ( ((!pm->ps->clientNum||PM_ControlledByPlayer())&&pm->cmd.forwardmove >= 0&&!pm->cmd.rightmove) || + if ( (!pm->ps->clientNum||PM_ControlledByPlayer()) || (pm->gent->NPC && (pm->gent->NPC->rank==RANK_CREWMAN||pm->gent->NPC->rank>=RANK_LT) ) ) {//only player or acrobat or boss and higher can do this vec3_t fwdAngles = {0,pm->ps->viewangles[YAW],0}; @@ -1296,10 +1296,7 @@ static qboolean PM_CheckJump( void ) if ( pm->cmd.forwardmove > 0 //going forward && pm->ps->forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 //can force jump && !(pm->gent->flags&FL_LOCK_PLAYER_WEAPONS) // yes this locked weapons check also includes force powers, if we need a separate check later I'll make one - && ( pm->ps->legsAnim == BOTH_STAND2 - || pm->ps->legsAnim == BOTH_SABERFAST_STANCE - || pm->ps->legsAnim == BOTH_SABERSLOW_STANCE - || level.time-pm->ps->lastStationary <= 500 )//standing or just started moving + && (pm->ps->legsAnim == BOTH_STAND2||pm->ps->legsAnim == BOTH_SABERFAST_STANCE||pm->ps->legsAnim == BOTH_SABERSLOW_STANCE||level.time-pm->ps->lastStationary<=500)//standing or just started moving && (pm->ps->groundEntityNum != ENTITYNUM_NONE||(pm->ps->clientNum&&!PM_ControlledByPlayer()&&level.time-pm->ps->lastOnGround<=500)))//on ground or just jumped if non-player {//strong attack: jump-hack if ( (!pm->ps->clientNum||PM_ControlledByPlayer()) || diff --git a/code/game/g_active.cpp b/code/game/g_active.cpp index 3d87fa8..a90b4c7 100644 --- a/code/game/g_active.cpp +++ b/code/game/g_active.cpp @@ -247,27 +247,22 @@ qboolean G_ValidateLookEnemy( gentity_t *self, gentity_t *enemy ) && enemy->noDamageTeam != self->client->playerTeam && enemy->health > 0 ) {//a turret - //return qtrue; + return qtrue; } - else + return qfalse; + } + + if ( enemy->health <= 0 && ((level.time-enemy->s.time) > 3000||!InFront(enemy->currentOrigin,self->currentOrigin,self->client->ps.viewangles,0.2f)||DistanceHorizontal(enemy->currentOrigin,self->currentOrigin)>16384))//>128 + {//corpse, been dead too long or too out of sight to be interesting + if ( !enemy->message ) { return qfalse; } } - else - { - if ( enemy->client->playerTeam == self->client->playerTeam ) - {//on same team - return qfalse; - } - if ( enemy->health <= 0 && ((level.time-enemy->s.time) > 3000||!InFront(enemy->currentOrigin,self->currentOrigin,self->client->ps.viewangles,0.2f)||DistanceHorizontal(enemy->currentOrigin,self->currentOrigin)>16384))//>128 - {//corpse, been dead too long or too out of sight to be interesting - if ( !enemy->message ) - { - return qfalse; - } - } + if ( enemy->client->playerTeam == self->client->playerTeam ) + {//on same team + return qfalse; } if ( (!InFront( enemy->currentOrigin, self->currentOrigin, self->client->ps.viewangles, 0.0f) || !G_ClearLOS( self, self->client->renderInfo.eyePoint, enemy ) ) @@ -1786,7 +1781,7 @@ extern void CG_ChangeWeapon( int num ); void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ) { - if (( (*ucmd)->buttons & BUTTON_USE || (*ucmd)->forwardmove < 0 || (*ucmd)->upmove > 0 ) && ent->owner && ent->owner->delay + 500 < level.time ) + if (( (*ucmd)->buttons & BUTTON_USE || (*ucmd)->forwardmove < 0 ) && ent->owner && ent->owner->delay + 500 < level.time ) { ent->owner->s.loopSound = 0; diff --git a/code/game/g_client.cpp b/code/game/g_client.cpp index 9545e3b..81c50fe 100644 --- a/code/game/g_client.cpp +++ b/code/game/g_client.cpp @@ -1623,11 +1623,11 @@ qboolean ClientSpawn(gentity_t *ent, SavedGameJustLoaded_e eSavedGameJustLoaded // ent->health = client->ps.stats[STAT_HEALTH] = client->ps.stats[STAT_MAX_HEALTH]; - ent->client->dismemberProbHead = 0; + ent->client->dismemberProbHead = 1; ent->client->dismemberProbArms = 5; ent->client->dismemberProbHands = 20; - ent->client->dismemberProbWaist = 0; - ent->client->dismemberProbLegs = 0; + ent->client->dismemberProbWaist = 1; + ent->client->dismemberProbLegs = 1; ent->client->ps.batteryCharge = 2500; diff --git a/code/game/g_combat.cpp b/code/game/g_combat.cpp index f47c307..002f967 100644 --- a/code/game/g_combat.cpp +++ b/code/game/g_combat.cpp @@ -28,7 +28,7 @@ extern gentity_t *player; gentity_t *g_lastClientDamaged; -extern int killPlayerTimer; +int killPlayerTimer = 0; extern void NPC_TempLookTarget ( gentity_t *self, int lookEntNum, int minLookTime, int maxLookTime ); extern void G_AddVoiceEvent( gentity_t *self, int event, int speakDebounceTime ); @@ -761,6 +761,18 @@ void G_MakeTeamVulnerable( void ) { continue; } + if ( !ent->client->squadname ) + { + continue; + } + if ( !ent->client->squadname[0] ) + { + continue; + } + if ( Q_stricmp(self->client->squadname, ent->client->squadname) ) + { + continue; + } ent->flags &= ~FL_UNDYING; newhealth = Q_irand( 5, 40 ); if ( ent->health > newhealth ) @@ -1175,7 +1187,7 @@ qboolean G_GetHitLocFromSurfName( gentity_t *ent, const char *surfName, int *hit { dismember = qtrue; } - else if ( g_dismemberment->integer >= 11381138 || !ent->client->dismembered ) + else if ( g_dismemberment->integer > 3 || !ent->client->dismembered ) { if ( ent->client && ent->client->NPC_class == CLASS_PROTOCOL ) { @@ -1820,7 +1832,7 @@ qboolean G_LimbLost( gentity_t *ent, int hitLoc ) } } -static qboolean G_Dismember( gentity_t *ent, vec3_t point, +qboolean G_Dismember( gentity_t *ent, vec3_t point, const char *limbBone, const char *rotateBone, char *limbName, char *limbCapName, char *stubCapName, char *limbTagName, char *stubTagName, int limbAnim, float limbRollBase, float limbPitchBase, @@ -2123,7 +2135,7 @@ static qboolean G_Dismemberable( gentity_t *self, int hitLoc ) {//cannot dismember me right now return qfalse; } - if ( g_dismemberment->integer < 11381138 && !g_saberRealisticCombat->integer ) + if ( g_dismemberment->integer < 4 && !g_saberRealisticCombat->integer ) { if ( g_dismemberProbabilities->value > 0.0f ) {//use the ent-specific dismemberProbabilities @@ -2160,7 +2172,7 @@ static qboolean G_Dismemberable( gentity_t *self, int hitLoc ) } //check probability of this happening on this npc - if ( floor((Q_flrand( 1, 100 )*g_dismemberProbabilities->value)) > dismemberProb*2.0f )//probabilities seemed really really low, had to crank them up + if ( floor((Q_flrand( 0, 100 )*g_dismemberProbabilities->value)) > dismemberProb*2.0f )//probabilities seemed really really low, had to crank them up { return qfalse; } @@ -2175,7 +2187,7 @@ static qboolean G_Dismemberable2( gentity_t *self, int hitLoc ) {//cannot dismember me right now return qfalse; } - if ( g_dismemberment->integer < 11381138 && !g_saberRealisticCombat->integer ) + if ( g_dismemberment->integer < 4 && !g_saberRealisticCombat->integer ) { if ( g_dismemberProbabilities->value <= 0.0f ) {//add the passed-in damage to the locationDamage array, check to see if it's taken enough damage to actually dismember @@ -2191,15 +2203,15 @@ static qboolean G_Dismemberable2( gentity_t *self, int hitLoc ) extern qboolean G_StandardHumanoid( const char *modelName ); qboolean G_DoDismemberment( gentity_t *self, vec3_t point, int mod, int damage, int hitLoc, qboolean force = qfalse ) { -extern cvar_t *g_iscensored; +extern cvar_t *g_s_language; +extern cvar_t *g_sp_language; // dismemberment -- FIXME: should have a check for how long npc has been dead so people can't // continue to dismember a dead body long after it's been dead - //NOTE that you can only cut one thing off unless the dismemberment is >= 11381138 -#ifdef GERMAN_CENSORED - if ( 0 ) //germany == censorship -#else - if ( !g_iscensored->integer && ( g_dismemberment->integer || g_saberRealisticCombat->integer > 1 ) && mod == MOD_SABER )//only lightsaber -#endif + //NOTE that you can only cut one thing off unless the super dismemberment is > 3 + if ( ( g_dismemberment->integer || g_saberRealisticCombat->integer > 1 ) + && ( Q_stricmp( "DEUTSCH", g_s_language->string ) != 0 )//voice language is *not* German + && (g_sp_language->integer != SP_LANGUAGE_GERMAN )//text language is *not* German + && mod == MOD_SABER )//only lightsaber {//FIXME: don't do strcmps here if ( G_StandardHumanoid( self->NPC_type ) && (force||g_dismemberProbabilities->value>0.0f||G_Dismemberable2( self, hitLoc )) ) @@ -3588,7 +3600,7 @@ extern void RunEmplacedWeapon( gentity_t *ent, usercmd_t **ucmd ); && attacker->client && attacker->client->ps.weapon == WP_SABER && !attacker->client->ps.saberInFlight - && (d_slowmodeath->integer > 4||lastInGroup||holdingSaber))//either slow mo death level 5 (any enemy) or 4 and I was the last in my group or I'm a saber user + && (d_slowmodeath->integer > 4||lastInGroup))//either slow mo death level 5 (any enemy) or 4 and I was the last in my group {//Matrix! G_StartMatrixEffect( self ); } @@ -5040,10 +5052,7 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, vec3_ // check for godmode, completely getting out of the damage if ( targ->flags & FL_GODMODE && !(dflags&DAMAGE_NO_PROTECTION) ) { - if ( targ->client - && attacker->client - && targ->client->playerTeam == attacker->client->playerTeam - && (!targ->NPC || !targ->NPC->charmedTime) ) + if ( targ->client && attacker->client && targ->client->playerTeam == attacker->client->playerTeam ) {//complain, but don't turn on them G_FriendlyFireReaction( targ, attacker, dflags ); } @@ -5318,10 +5327,7 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, vec3_ if ( yellAtAttacker ) { - if ( !targ->NPC || !targ->NPC->charmedTime ) - { - G_FriendlyFireReaction( targ, attacker, dflags ); - } + G_FriendlyFireReaction( targ, attacker, dflags ); } } } diff --git a/code/game/g_fx.cpp b/code/game/g_fx.cpp index 613f9cd..1537408 100644 --- a/code/game/g_fx.cpp +++ b/code/game/g_fx.cpp @@ -260,16 +260,11 @@ void SP_CreateSnow( gentity_t *ent ) G_SpawnInt( "count", "1000", &ent->count ); - cvar_t *r_weatherScale = gi.cvar( "r_weatherScale", "1", CVAR_ARCHIVE ); + sprintf( temp, "snow init %i", ent->count ); - if ( r_weatherScale->value > 0.0f ) - { - sprintf( temp, "snow init %i", (int)( ent->count * r_weatherScale->value )); + G_FindConfigstringIndex( temp, CS_WORLD_FX, MAX_WORLD_FX, qtrue ); - G_FindConfigstringIndex( temp, CS_WORLD_FX, MAX_WORLD_FX, qtrue ); - - level.worldFlags |= WF_SNOWING; - } + level.worldFlags |= WF_SNOWING; } /*QUAKED fx_rain (1 0 0) (-16 -16 -16) (16 16 16) @@ -284,16 +279,11 @@ void SP_CreateRain( gentity_t *ent ) G_SpawnInt( "count", "500", &ent->count ); - cvar_t *r_weatherScale = gi.cvar( "r_weatherScale", "1", CVAR_ARCHIVE ); + sprintf( temp, "rain init %i", ent->count ); - if ( r_weatherScale->value > 0.0f ) - { - sprintf( temp, "rain init %i", (int)( ent->count * r_weatherScale->value )); + G_FindConfigstringIndex( temp, CS_WORLD_FX, MAX_WORLD_FX, qtrue ); - G_FindConfigstringIndex( temp, CS_WORLD_FX, MAX_WORLD_FX, qtrue ); - - level.worldFlags |= WF_RAINING; - } + level.worldFlags |= WF_RAINING; } diff --git a/code/game/g_main.cpp b/code/game/g_main.cpp index 885d4bb..40ea739 100644 --- a/code/game/g_main.cpp +++ b/code/game/g_main.cpp @@ -12,8 +12,8 @@ #include "b_local.h" #include "anims.h" #include "g_icarus.h" -#include "objectives.h" #include "../cgame/cg_local.h" // yeah I know this is naughty, but we're shipping soon... +#include "../qcommon/stripPublic.h" extern CNavigator navigator; static int navCalcPathTime = 0; @@ -124,7 +124,8 @@ cvar_t *com_buildScript; cvar_t *g_skippingcin; cvar_t *g_AIsurrender; cvar_t *g_numEntities; -cvar_t *g_iscensored; +cvar_t *g_s_language; +cvar_t *g_sp_language; cvar_t *g_saberAutoBlocking; cvar_t *g_saberRealisticCombat; @@ -547,18 +548,19 @@ void G_InitCvars( void ) { g_subtitles = gi.cvar( "g_subtitles", "2", CVAR_ARCHIVE ); com_buildScript = gi.cvar ("com_buildscript", "0", 0); - g_saberAutoBlocking = gi.cvar( "g_saberAutoBlocking", "1", CVAR_ARCHIVE|CVAR_CHEAT );//must press +block button to do any blocking - g_saberRealisticCombat = gi.cvar( "g_saberRealisticCombat", "0", CVAR_ARCHIVE|CVAR_CHEAT );//makes collision more precise, increases damage - g_saberMoveSpeed = gi.cvar( "g_saberMoveSpeed", "1", CVAR_ARCHIVE|CVAR_CHEAT );//how fast you run while attacking with a saber - g_saberAnimSpeed = gi.cvar( "g_saberAnimSpeed", "1", CVAR_ARCHIVE|CVAR_CHEAT );//how fast saber animations run - g_saberAutoAim = gi.cvar( "g_saberAutoAim", "1", CVAR_ARCHIVE|CVAR_CHEAT );//auto-aims at enemies when not moving or when just running forward + g_saberAutoBlocking = gi.cvar( "g_saberAutoBlocking", "1", CVAR_ARCHIVE );//must press +block button to do any blocking + g_saberRealisticCombat = gi.cvar( "g_saberRealisticCombat", "0", CVAR_ARCHIVE );//makes collision more precise, increases damage + g_saberMoveSpeed = gi.cvar( "g_saberMoveSpeed", "1", CVAR_ARCHIVE );//how fast you run while attacking with a saber + g_saberAnimSpeed = gi.cvar( "g_saberAnimSpeed", "1", CVAR_ARCHIVE );//how fast saber animations run + g_saberAutoAim = gi.cvar( "g_saberAutoAim", "1", CVAR_ARCHIVE );//auto-aims at enemies when not moving or when just running forward g_AIsurrender = gi.cvar( "g_AIsurrender", "0", CVAR_CHEAT ); g_numEntities = gi.cvar( "g_numEntities", "0", CVAR_CHEAT ); + g_s_language = gi.cvar( "s_language", "english", (CVAR_ARCHIVE|CVAR_NORESTART) ); + g_sp_language = gi.cvar( "sp_language", va("%d", SP_LANGUAGE_ENGLISH), (CVAR_ARCHIVE|CVAR_NORESTART) ); gi.cvar( "newTotalSecrets", "0", CVAR_ROM ); gi.cvar_set("newTotalSecrets", "0");//used to carry over the count from SP_target_secret to ClientBegin - g_iscensored = gi.cvar( "ui_iscensored", "0", CVAR_ARCHIVE|CVAR_ROM|CVAR_INIT|CVAR_CHEAT|CVAR_NORESTART ); } /* @@ -1144,28 +1146,8 @@ void UpdateTeamCounters( gentity_t *ent ) teamEnemyCount[ent->client->playerTeam]++; } */ -extern void G_SoundOnEnt( gentity_t *ent, soundChannel_t channel, const char *soundPath ); -void G_PlayerGuiltDeath( void ) -{ - if ( player && player->client ) - {//simulate death - player->client->ps.stats[STAT_HEALTH] = 0; - //turn off saber - if ( player->client->ps.weapon == WP_SABER && player->client->ps.saberActive ) - { - G_SoundOnEnt( player, CHAN_WEAPON, "sound/weapons/saber/saberoff.wav" ); - player->client->ps.saberActive = qfalse; - } - //play the "what have I done?!" anim - NPC_SetAnim( player, SETANIM_BOTH, BOTH_FORCEHEAL_START, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); - player->client->ps.legsAnimTimer = player->client->ps.torsoAnimTimer = -1; - //look at yourself - player->client->ps.stats[STAT_DEAD_YAW] = player->client->ps.viewangles[YAW]+180; - } -} extern void NPC_SetAnim(gentity_t *ent,int type,int anim,int priority); extern void G_MakeTeamVulnerable( void ); -int killPlayerTimer = 0; void G_CheckEndLevelTimers( gentity_t *ent ) { if ( killPlayerTimer && level.time > killPlayerTimer ) @@ -1174,13 +1156,24 @@ void G_CheckEndLevelTimers( gentity_t *ent ) ent->health = 0; if ( ent->client && ent->client->ps.stats[STAT_HEALTH] > 0 ) { - G_PlayerGuiltDeath(); - //cg.missionStatusShow = qtrue; - statusTextIndex = MAX_MISSIONFAILED; + //simulate death + ent->client->ps.stats[STAT_HEALTH] = 0; //debounce respawn time ent->client->respawnTime = level.time + 2000; + //play the "what have I done?!" anim +// NPC_SetAnim( ent, SETANIM_BOTH, BOTH_GUILT1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + /* + NPC_SetAnim( ent, SETANIM_TORSO, BOTH_SIT2TO1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + NPC_SetAnim( ent, SETANIM_LEGS, LEGS_KNEELDOWN1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD ); + */ + ent->client->ps.torsoAnimTimer = -1; + ent->client->ps.legsAnimTimer = -1; + //look at yourself + ent->client->ps.stats[STAT_DEAD_YAW] = ent->client->ps.viewangles[YAW]+180; //stop all scripts - stop_icarus = qtrue; + if (Q_stricmpn(level.mapname,"_holo",5)) { + stop_icarus = qtrue; + } //make the team killable G_MakeTeamVulnerable(); } @@ -1213,7 +1206,6 @@ void NAV_CheckCalcPaths( void ) navCalcPathTime = 0; } } - /* ================ G_RunFrame diff --git a/code/game/g_misc.cpp b/code/game/g_misc.cpp index 3814e9c..d060927 100644 --- a/code/game/g_misc.cpp +++ b/code/game/g_misc.cpp @@ -581,10 +581,6 @@ void camera_aim( gentity_t *self ) G_ClearViewEntity( player ); G_Sound( player, self->soundPos2 ); self->painDebounceTime = level.time + (self->wait*1000);//FRAMETIME*5;//don't check for player buttons for 500 ms - if ( player->client->usercmd.upmove > 0 ) - {//stop player from doing anything for a half second after - player->aimDebounceTime = level.time + 500; - } } else if ( self->painDebounceTime < level.time ) {//check for use button diff --git a/code/game/g_navigator.cpp b/code/game/g_navigator.cpp index 4325d7f..ffaaaa2 100644 --- a/code/game/g_navigator.cpp +++ b/code/game/g_navigator.cpp @@ -17,7 +17,6 @@ extern qboolean G_EntIsBreakable( int entityNum ); extern qboolean G_EntIsRemovableUsable( int entNum ); extern cvar_t *d_altRoutes; -extern cvar_t *d_patched; static vec3_t wpMaxs = { 16, 16, 32 }; @@ -1766,28 +1765,6 @@ qboolean CNavigator::NodeFailed( gentity_t *ent, int nodeID ) return qfalse; } -qboolean CNavigator::NodesAreNeighbors( int startID, int endID ) -{//See if these 2 are neighbors - if ( startID == endID ) - { - return qfalse; - } - - CNode *start = m_nodes[startID]; - int nextID = -1; - //NOTE: we only check start because we assume all connections are 2-way - for ( int i = 0; i < start->GetNumEdges(); i++ ) - { - nextID = start->GetEdge(i); - if ( nextID == endID ) - { - return qtrue; - } - } - //not neighbors - return qfalse; -} - void CNavigator::ClearFailedEdge( failedEdge_t *failedEdge ) { if ( !failedEdge ) @@ -1886,14 +1863,6 @@ void CNavigator::AddFailedEdge( int entID, int startID, int endID ) if ( m_nodes.size() == 0 ) return; - if ( d_patched->integer ) - {//use patch-style navigation - if ( startID == endID ) - {//not an edge! - return; - } - } - //Validate the ent number if ( ( entID < 0 ) || ( entID > ENTITYNUM_NONE ) ) { diff --git a/code/game/g_navigator.h b/code/game/g_navigator.h index 3b474be..51595ab 100644 --- a/code/game/g_navigator.h +++ b/code/game/g_navigator.h @@ -185,7 +185,6 @@ public: void CheckFailedNodes( gentity_t *ent ); void AddFailedNode( gentity_t *ent, int nodeID ); qboolean NodeFailed( gentity_t *ent, int nodeID ); - qboolean NodesAreNeighbors( int startID, int endID ); void ClearFailedEdge( failedEdge_t *failedEdge ); void ClearAllFailedEdges( void ); qboolean EdgeFailed( int startID, int endID ); diff --git a/code/game/g_navnew.cpp b/code/game/g_navnew.cpp index 07de0a8..1489b27 100644 --- a/code/game/g_navnew.cpp +++ b/code/game/g_navnew.cpp @@ -9,9 +9,6 @@ //Global navigator extern CNavigator navigator; extern cvar_t *d_altRoutes; -extern cvar_t *d_patched; -extern vec3_t playerMins; -extern vec3_t playerMaxs; qboolean NAV_CheckAhead( gentity_t *self, vec3_t end, trace_t &trace, int clipmask ); qboolean NAV_TestForBlocked( gentity_t *self, gentity_t *goal, gentity_t *blocker, float distance, int &flags ); @@ -140,10 +137,6 @@ void NAVNEW_PushBlocker( gentity_t *self, gentity_t *blocker, vec3_t right, qboo if ( leftSucc == 0.0f && rightSucc == 0.0f ) {//both sides failed - if ( d_patched->integer ) - {//use patch-style navigation - blocker->client->pushVecTime = 0; - } return; } @@ -469,10 +462,6 @@ qboolean NAVNEW_AvoidCollision( gentity_t *self, gentity_t *goal, navInfo_t &inf { if ( self->NPC->consecutiveBlockedMoves > blockedMovesLimit ) { - if ( d_patched->integer ) - {//use patch-style navigation - self->NPC->consecutiveBlockedMoves++; - } NPC_SetBlocked( self, info.blocker ); return qfalse; } @@ -517,55 +506,6 @@ qboolean NAVNEW_AvoidCollision( gentity_t *self, gentity_t *goal, navInfo_t &inf return qtrue; } -qboolean NAVNEW_TestNodeConnectionBlocked( int wp1, int wp2, gentity_t *ignoreEnt, int goalEntNum, qboolean checkWorld, qboolean checkEnts ) -{//see if the direct path between 2 nodes is blocked by architecture or an ent - vec3_t pos1, pos2, mins, maxs; - trace_t trace; - int clipmask = MASK_NPCSOLID|CONTENTS_BOTCLIP; - int ignoreEntNum; - - if ( !checkWorld && !checkEnts ) - {//duh, nothing to trace against - return qfalse; - } - navigator.GetNodePosition( wp1, pos1 ); - navigator.GetNodePosition( wp2, pos2 ); - - if ( !checkWorld ) - { - clipmask &= ~(CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_BOTCLIP); - } - if ( !checkEnts ) - { - clipmask &= ~CONTENTS_BODY; - } - if ( ignoreEnt ) - { - VectorCopy( ignoreEnt->mins, mins ); - VectorCopy( ignoreEnt->maxs, maxs ); - ignoreEntNum = ignoreEnt->s.number; - } - else - { - VectorCopy( playerMins, mins ); - VectorCopy( playerMaxs, mins ); - ignoreEntNum = ENTITYNUM_NONE; - } - mins[2] += STEPSIZE; - //don't let box get inverted - if ( mins[2] > maxs[2] ) - { - mins[2] = maxs[2]; - } - - gi.trace( &trace, pos1, mins, maxs, pos2, ignoreEntNum, clipmask ); - if ( trace.fraction >= 1.0f || trace.entityNum == goalEntNum ) - {//clear or hit goal - return qfalse; - } - //hit something we weren't supposed to - return qtrue; -} /* ------------------------- NAVNEW_MoveToGoal @@ -755,15 +695,7 @@ int NAVNEW_MoveToGoal( gentity_t *self, navInfo_t &info ) {//we headed toward our next waypoint (instead of our waypoint) and failed if ( d_altRoutes->integer ) {//mark this edge failed and try our waypoint - //NOTE: don't assume there is something blocking the direct path - // between my waypoint and the bestNode... I could be off - // that path because of collision avoidance... - if ( d_patched->integer &&//use patch-style navigation - ( !navigator.NodesAreNeighbors( self->waypoint, bestNode ) - || NAVNEW_TestNodeConnectionBlocked( self->waypoint, bestNode, self, self->NPC->goalEntity->s.number, qfalse, qtrue ) ) ) - {//the direct path between these 2 nodes is blocked by an ent - navigator.AddFailedEdge( self->s.number, self->waypoint, bestNode ); - } + navigator.AddFailedEdge( self->s.number, self->waypoint, bestNode ); bestNode = self->waypoint; } else diff --git a/code/game/g_savegame.cpp b/code/game/g_savegame.cpp index 8b6e0e2..dbedf71 100644 --- a/code/game/g_savegame.cpp +++ b/code/game/g_savegame.cpp @@ -1015,10 +1015,10 @@ void ReadLevel(qboolean qbAutosave, qboolean qbLoadTransition) gi.ReadFromSaveGame('DONE', &iDONE, sizeof(iDONE)); } -extern int killPlayerTimer; + qboolean GameAllowedToSaveHere(void) { - return (!in_camera&&!killPlayerTimer); + return !in_camera; } //////////////////// eof ///////////////////// diff --git a/code/game/g_turret.cpp b/code/game/g_turret.cpp index c6a70f6..f8dfcb3 100644 --- a/code/game/g_turret.cpp +++ b/code/game/g_turret.cpp @@ -1996,10 +1996,6 @@ void panel_turret_think( gentity_t *self ) cg.overrides.active &= ~CG_OVERRIDE_FOV; cg.overrides.fov = 0; - if ( ucmd->upmove > 0 ) - {//stop player from doing anything for a half second after - player->aimDebounceTime = level.time + 500; - } // can be drawn // self->s.eFlags &= ~EF_NODRAW; diff --git a/code/game/g_utils.cpp b/code/game/g_utils.cpp index eb5b77e..c93eaf2 100644 --- a/code/game/g_utils.cpp +++ b/code/game/g_utils.cpp @@ -1316,17 +1316,12 @@ void TryUse( gentity_t *ent ) */ } -extern int killPlayerTimer; void G_ChangeMap (const char *mapname, const char *spawntarget, qboolean hub) { // gi.Printf("Loading..."); //ignore if player is dead if (g_entities[0].client->ps.pm_type == PM_DEAD) return; - if ( killPlayerTimer ) - {//can't go to next map if your allies have turned on you - return; - } if ( spawntarget == NULL ) { spawntarget = ""; //prevent it from becoming "(null)" diff --git a/code/game/g_weapon.cpp b/code/game/g_weapon.cpp index 737197e..abc0c6f 100644 --- a/code/game/g_weapon.cpp +++ b/code/game/g_weapon.cpp @@ -931,7 +931,7 @@ void WP_DisruptorAltFire( gentity_t *ent ) G_PlayEffect( G_EffectIndex( "disruptor/alt_hit" ), tr.endpos, tr.plane.normal ); if ( traceEnt->client && LogAccuracyHit( traceEnt, ent )) - {//NOTE: hitting multiple ents can still get you over 100% accuracy + { ent->client->ps.persistant[PERS_ACCURACY_HITS]++; } diff --git a/code/game/vssver.scc b/code/game/vssver.scc index 56a7e1287940395729ab414e099ece4d430f9a7a..5a5659604c89292eb5688db8dd2d9e39e5b52d8b 100644 GIT binary patch delta 584 zcmZ3$zkq*&2+NJ|AL(sy5&#j zU7u{rST3<%XrJx8UEk)hGBPkc1In_hixiw(^-OE>8Ab_C)!(sPn>bqLy`TJ+QJhmZ zZlaN0{G554C-X9?bMD->^~jx1Me{T!+cJ5JJ}#}_;SaRnE6|ASRm|)=q968DO`gjn zF5&!PLCX{M%ULUdvOj>bO{y=%&3odmO+Le@IZty}`D$zp zomVtjmPK505m(t`f7uDE9e|pIG#D66H1^l|FelG*o9xS?Zt)}ITOwC}{=Dr#Suvn& zq2SG5M?E}VdI9<3K>qfcXF8AC?=7za@+E=%y$P!xb(_6&nY@NYLSxdovyajq{0))? zO3DBw88)hI;S}c$OaL-vf&72lE`Q|jE;%vz4T}WlT-zNv8R74i3s2@{6_Yv^RAmy>%~BPXfS zJXw~lT0~#yoRKk5=9w1IKL=d`vz1$qO+ zCFVR(zJI08;l(PT><^%9lj;lcxc=Z5lg}{em71W_^OxUKef?Tt@?7R}&LgsCm)8Ac zlP#Vs%OWm$QkyeJziINb$xgDN(S;}f&72lE`JPJ)b(oe8x{#pU!#@;t6VEtk;%NQ;u3|AqSSmo z?s}yKRH_72x|(~jg-Vs{tI0O37807*9d0N+%6YXFD5(yVl-gtJ`bv)D)#M)52+RJQ z`D`m1*1vUUVqj>{WMGKg|6t*s^&HQYfpIn;$UjiFtZ~P??q}10nil~11%9t>tTc3A zs7#h+s}^a9zx~V@DDwps.saberModel = "models/weapons2/saber_desann/saber_w.glm"; - break; - case CLASS_LUKE://Luke - client->ps.saberModel = "models/weapons2/saber_luke/saber_w.glm"; - break; - case CLASS_KYLE://Kyle NPC and player - client->ps.saberModel = "models/weapons2/saber/saber_w.glm"; - break; - default://reborn and tavion and everyone else - client->ps.saberModel = "models/weapons2/saber_reborn/saber_w.glm"; - break; - } - return ( G_ModelIndex( client->ps.saberModel ) ); - } - else - { - switch ( npcClass ) - { - case CLASS_DESANN://Desann - return ( G_ModelIndex( "models/weapons2/saber_desann/saber_w.glm" ) ); - break; - case CLASS_LUKE://Luke - return ( G_ModelIndex( "models/weapons2/saber_luke/saber_w.glm" ) ); - break; - case CLASS_KYLE://Kyle NPC and player - return ( G_ModelIndex( "models/weapons2/saber/saber_w.glm" ) ); - break; - default://reborn and tavion and everyone else - return ( G_ModelIndex( "models/weapons2/saber_reborn/saber_w.glm" ) ); - break; - } - } -} - void WP_SaberInitBladeData( gentity_t *ent ) { gentity_t *saberent; @@ -483,7 +442,23 @@ void WP_SaberInitBladeData( gentity_t *ent ) Ghoul2 Insert Start */ //FIXME: get saberModel from NPCs.cfg for NPCs? - saberent->s.modelindex = WP_SetSaberModel( ent->client, ent->client->NPC_class ); + if ( ent->client->NPC_class == CLASS_DESANN ) + { + ent->client->ps.saberModel = "models/weapons2/saber_desann/saber_w.glm"; + } + else if ( ent->client->NPC_class == CLASS_LUKE ) + { + ent->client->ps.saberModel = "models/weapons2/saber_luke/saber_w.glm"; + } + else if ( ent->client->NPC_class == CLASS_KYLE ) + {//Kyle NPC and player + ent->client->ps.saberModel = "models/weapons2/saber/saber_w.glm"; + } + else + {//reborn and tavion and everyone else + ent->client->ps.saberModel = "models/weapons2/saber_reborn/saber_w.glm"; + } + saberent->s.modelindex = G_ModelIndex( ent->client->ps.saberModel ); gi.G2API_InitGhoul2Model( saberent->ghoul2, ent->client->ps.saberModel, saberent->s.modelindex ); // set up a bolt on the end so we can get where the sabre muzzle is - we can assume this is always bolt 0 gi.G2API_AddBolt( &saberent->ghoul2[0], "*flash" ); @@ -831,7 +806,7 @@ qboolean WP_SaberApplyDamage( gentity_t *ent, float baseDamage, int baseDFlags, {//already being knocked around dFlags |= DAMAGE_NO_KNOCKBACK; } - if ( g_dismemberment->integer >= 11381138 || g_saberRealisticCombat->integer ) + if ( g_dismemberment->integer > 3 || g_saberRealisticCombat->integer ) { dFlags |= DAMAGE_DISMEMBER; if ( hitDismember[i] ) @@ -6936,7 +6911,6 @@ void ForceGrip( gentity_t *self ) return; break; case CLASS_ATST://much too big to grip! - return; //no droids either...? case CLASS_GONK: case CLASS_R2D2: @@ -6945,7 +6919,6 @@ void ForceGrip( gentity_t *self ) case CLASS_MARK2: case CLASS_MOUSE://? case CLASS_PROTOCOL: - //*sigh*... in JK3, you'll be able to grab and move *anything*... return; break; case CLASS_PROBE: @@ -7761,8 +7734,6 @@ void WP_ForcePowerStop( gentity_t *self, forcePowers_t forcePower ) gi.cvar_set("timescale", "1"); } } - //FIXME: reset my current anim, keeping current frame, but with proper anim speed - // otherwise, the anim will continue playing at high speed self->s.loopSound = 0; break; case FP_PUSH: diff --git a/code/qcommon/common.cpp b/code/qcommon/common.cpp index 71b63bc..13fc7bf 100644 --- a/code/qcommon/common.cpp +++ b/code/qcommon/common.cpp @@ -56,7 +56,7 @@ cvar_t *com_logfile; // 1 = buffer log, 2 = flush after each print cvar_t *com_showtrace; cvar_t *com_version; cvar_t *com_buildScript; // for automated data building scripts -//cvar_t *com_FirstTime; +cvar_t *com_FirstTime; cvar_t *cl_paused; cvar_t *sv_paused; cvar_t *com_skippingcin; @@ -238,7 +238,6 @@ void QDECL Com_Error( int code, const char *fmt, ... ) { va_end (argptr); if ( code != ERR_DISCONNECT ) { - Cvar_Get("com_errorMessage", "", CVAR_ROM); //give com_errorMessage a default so it won't come back to life after a resetDefaults Cvar_Set("com_errorMessage", com_errorMessage); } @@ -1876,7 +1875,7 @@ void Com_Init( char *commandLine ) { com_skippingcin = Cvar_Get ("skippingCinematic", "0", CVAR_ROM); com_buildScript = Cvar_Get( "com_buildScript", "0", 0 ); -// com_FirstTime = Cvar_Get( "com_FirstTime", "0", CVAR_ARCHIVE); + com_FirstTime = Cvar_Get( "com_FirstTime", "0", CVAR_ARCHIVE); if ( com_developer && com_developer->integer ) { Cmd_AddCommand ("error", Com_Error_f); Cmd_AddCommand ("crash", Com_Crash_f ); @@ -1890,7 +1889,7 @@ void Com_Init( char *commandLine ) { Sys_Init(); // this also detects CPU type, so I can now do this CPU check below... -/* if( !com_FirstTime->integer ) // special request to detect and use top-settings for Intel Williamette chip... + if( !com_FirstTime->integer ) // special request to detect and use top-settings for Intel Williamette chip... { Cvar_Set( "com_FirstTime", "1" ); // only do this once // @@ -1903,7 +1902,7 @@ void Com_Init( char *commandLine ) { // Cbuf_Execute (); } } -*/ + Netchan_Init( Com_Milliseconds() & 0xffff ); // pick a port value that should be nice and random // VM_Init(); SV_Init(); @@ -1932,16 +1931,6 @@ void Com_Init( char *commandLine ) { } com_fullyInitialized = qtrue; Com_Printf ("--- Common Initialization Complete ---\n"); - -//HACKERY FOR THE DEUTSCH - if ( (Cvar_VariableIntegerValue("ui_iscensored") == 1) //if this was on before, set it again so it gets its flags - || sp_language->integer == SP_LANGUAGE_GERMAN ) - { - Cvar_Get( "ui_iscensored", "1", CVAR_ARCHIVE|CVAR_ROM|CVAR_INIT|CVAR_CHEAT|CVAR_NORESTART); - Cvar_Set( "ui_iscensored", "1"); //just in case it was archived - Cvar_Get( "g_dismemberment", "0", CVAR_ARCHIVE|CVAR_ROM|CVAR_INIT|CVAR_CHEAT); - Cvar_Set( "g_dismemberment", "0"); //just in case it was archived - } } catch (const char* reason) { diff --git a/code/qcommon/cvar.cpp b/code/qcommon/cvar.cpp index 63cddca..0e9b073 100644 --- a/code/qcommon/cvar.cpp +++ b/code/qcommon/cvar.cpp @@ -130,15 +130,17 @@ char *Cvar_CompleteVariable( const char *partial ) { return NULL; } + // check exact match + for ( cvar = cvar_vars ; cvar ; cvar = cvar->next ) { + if ( !Q_stricmp (partial,cvar->name) ) { + return cvar->name; + } + } + // check partial match for ( cvar=cvar_vars ; cvar ; cvar=cvar->next ) { if ( !Q_stricmpn (partial,cvar->name, len) ) { - if ( (cvar->flags & CVAR_CHEAT) && !cvar_cheats->integer ) { - continue; - } - else { - return cvar->name; - } + return cvar->name; } } @@ -182,19 +184,15 @@ char *Cvar_CompleteVariableNext (char *partial, char *last) { base = cvar_vars; } + // check exact match + for (cvar=base ; cvar ; cvar=cvar->next) + if (!Q_stricmp (partial,cvar->name)) + return cvar->name; // check partial match for (cvar=base ; cvar ; cvar=cvar->next) - { - if (!Q_stricmpn (partial,cvar->name, len)) { - if ( (cvar->flags & CVAR_CHEAT) && !cvar_cheats->integer ) { - continue; - } - else { - return cvar->name; - } - } - } + if (!Q_stricmpn (partial,cvar->name, len)) + return cvar->name; return NULL; } @@ -515,7 +513,7 @@ void Cvar_Toggle_f( void ) { return; } - v = Cvar_VariableIntegerValue( Cmd_Argv( 1 ) ); + v = Cvar_VariableValue( Cmd_Argv( 1 ) ); v = !v; Cvar_Set2 (Cmd_Argv(1), va("%i", v), qfalse); diff --git a/code/qcommon/stv_version.h b/code/qcommon/stv_version.h index 3f6af50..d405dc2 100644 --- a/code/qcommon/stv_version.h +++ b/code/qcommon/stv_version.h @@ -1,6 +1,6 @@ // Current version of the single player game -#define Q3_VERSION "JK2: v1.02a" +#define Q3_VERSION "JK2: v1.02" // end diff --git a/code/qcommon/vssver.scc b/code/qcommon/vssver.scc index 17e5a0b64620deadaa3c63255e90efc7d5cfe5f6..d2a666127d8ab8337d35d866b2713ff0e6df9a8d 100644 GIT binary patch delta 100 zcmZo*X<(TkB60kiN|>HH0~qvaFfgdTeHS&GQI~0=P7I4wk+#aj9t(}w?b1616V52v y169ogsC delta 100 zcmZo*X<(TkB2grx&!(r&00w;;3=FDo-$mVvQu#VjCx*pf@w+b*dn`0o#=LZ!*JZHW y38-o&P|ZR41^HH)jD4&?{wyFrhAXUl&K>VB6W@4nMtPatZPd2@!av!T@h|`(l_9JE diff --git a/code/renderer/tr_init.cpp b/code/renderer/tr_init.cpp index 0065add..710d45f 100644 --- a/code/renderer/tr_init.cpp +++ b/code/renderer/tr_init.cpp @@ -1027,8 +1027,8 @@ void R_Register( void ) #endif r_facePlaneCull = ri.Cvar_Get ("r_facePlaneCull", "1", CVAR_ARCHIVE ); - r_surfaceSprites = ri.Cvar_Get ("r_surfaceSprites", "1", CVAR_TEMP); - r_surfaceWeather = ri.Cvar_Get ("r_surfaceWeather", "0", CVAR_TEMP); + r_surfaceSprites = ri.Cvar_Get ("r_surfaceSprites", "1", CVAR_CHEAT); + r_surfaceWeather = ri.Cvar_Get ("r_surfaceWeather", "0", 0); r_windSpeed = ri.Cvar_Get ("r_windSpeed", "0", 0); r_windAngle = ri.Cvar_Get ("r_windAngle", "0", 0); diff --git a/code/renderer/vssver.scc b/code/renderer/vssver.scc index b3e0139e2b5a081164fd3c18f8f7bf75232b6fca..0d83384be7938754f06e404d30b46412ae675341 100644 GIT binary patch delta 55 zcmbQhHi2z|2#dGKv27bAWEeRWgDu~&pZrzmxY?F*H>1R!?++Wr85kG@j2IY{q~9D} LQeNT92IK<(2^JB( delta 55 zcmbQhHi2z|2+PCVJ=q&2WEeR$itg+6)kVK_+HA|Xn^EG;4WDn~3=9kcMhpx}(r=C~ KDX;Kl1M&eX+!AU4 diff --git a/code/server/sv_game.cpp b/code/server/sv_game.cpp index f1b998b..7488b34 100644 --- a/code/server/sv_game.cpp +++ b/code/server/sv_game.cpp @@ -332,9 +332,22 @@ void SV_InitGameProgs (void) { SV_ShutdownGameProgs (); } - if ( !Cvar_VariableIntegerValue("fs_restrict") && !Sys_CheckCD() ) + if ( !Cvar_VariableValue("fs_restrict") && !Sys_CheckCD() ) { - Com_Error( ERR_NEED_CD, SP_GetStringTextString("CON_TEXT_NEED_CD") ); //"Game CD not in drive" ); + if (sp_language) // dunno if SP files are loaded at this point if no CD... + { + switch (sp_language->integer) + { + case SP_LANGUAGE_GERMAN: + Com_Error( ERR_NEED_CD, "Spiel CD nicht im Laufwerk" ); + break; // keep compiler happy + case SP_LANGUAGE_FRENCH: + Com_Error( ERR_NEED_CD, "CD de jeu pas dans le lecteur" ); + break; // keep compiler happy + } + } + + Com_Error( ERR_NEED_CD, "Game CD not in drive" ); } // load a new game dll diff --git a/code/server/sv_init.cpp b/code/server/sv_init.cpp index ec0c05e..46bc05d 100644 --- a/code/server/sv_init.cpp +++ b/code/server/sv_init.cpp @@ -198,7 +198,7 @@ void SV_SpawnServer( char *server, ForceReload_e eForceReload, qboolean bAllowSc Com_Printf ("Server: %s\n",server); // init client structures and svs.numSnapshotEntities - if ( !Cvar_VariableIntegerValue("sv_running") ) { + if ( !Cvar_VariableValue("sv_running") ) { SV_Startup(); } diff --git a/code/server/sv_savegame.cpp b/code/server/sv_savegame.cpp index b5b6d29..0827884 100644 --- a/code/server/sv_savegame.cpp +++ b/code/server/sv_savegame.cpp @@ -102,18 +102,6 @@ LPCSTR SG_GetChidText(unsigned long chid) } -static const char *GetString_FailedToOpenSaveGame(const char *psFilename, qboolean bOpen) -{ - static char sTemp[256]; - - strcpy(sTemp,S_COLOR_RED); - - const char *psReference = bOpen ? "MENUS3_FAILED_TO_OPEN_SAVEGAME" : "MENUS3_FAILED_TO_CREATE_SAVEGAME"; - Q_strncpyz(sTemp + strlen(sTemp), va( SP_GetStringTextString(psReference), psFilename),sizeof(sTemp)); - strcat(sTemp,"\n"); - return sTemp; -} - // (copes with up to 8 ptr returns at once) // static LPCSTR SG_AddSavePath( LPCSTR psPathlessBaseName ) @@ -162,7 +150,7 @@ static qboolean SG_Create( LPCSTR psPathlessBaseName ) if(!fhSaveGame) { - Com_Printf(GetString_FailedToOpenSaveGame(psLocalFilename,qfalse));//S_COLOR_RED "Failed to create new savegame file \"%s\"\n", psLocalFilename ); + Com_Printf(S_COLOR_RED "Failed to create new savegame file \"%s\"\n", psLocalFilename ); return qfalse; } @@ -242,7 +230,7 @@ qboolean SG_Open( LPCSTR psPathlessBaseName ) if (!fhSaveGame) { // Com_Printf(S_COLOR_RED "Failed to open savegame file %s\n", psLocalFilename); - Com_DPrintf(GetString_FailedToOpenSaveGame(psLocalFilename, qtrue)); + Com_DPrintf("Failed to open savegame file %s\n", psLocalFilename); return qfalse; } @@ -393,13 +381,11 @@ void SV_LoadGame_f(void) Com_Printf (S_COLOR_CYAN "Loading game \"%s\"...\n", psFilename); - gbAlreadyDoingLoad = qtrue; - if (!SG_ReadSavegame(psFilename)) { - gbAlreadyDoingLoad = qfalse; // do NOT do this here now, need to wait until client spawn, unless the load failed. - } else - { - Com_Printf (S_COLOR_CYAN "Done.\n"); - } + gbAlreadyDoingLoad = qtrue; + SG_ReadSavegame(psFilename); + //gbAlreadyDoingLoad = qfalse; // do NOT do this here now, need to wait until client spawn + + Com_Printf (S_COLOR_CYAN "Done.\n"); } qboolean SG_GameAllowedToSaveHere(qboolean inCamera); @@ -932,7 +918,7 @@ qboolean SG_WriteSavegame(const char *psPathlessBaseName, qboolean qbAutosave) if(!SG_Create( "current" )) { - Com_Printf (GetString_FailedToOpenSaveGame("current",qfalse));//S_COLOR_RED "Failed to create savegame\n"); + Com_Printf (S_COLOR_RED "Failed to create savegame\n"); SG_WipeSavegame( "current" ); sv_testsave->value = fPrevTestSave; return qfalse; @@ -968,7 +954,7 @@ qboolean SG_WriteSavegame(const char *psPathlessBaseName, qboolean qbAutosave) SG_Close(); if (gbSGWriteFailed) { - Com_Printf (GetString_FailedToOpenSaveGame("current",qfalse));//S_COLOR_RED "Failed to write savegame!\n"); + Com_Printf (S_COLOR_RED "Failed to write savegame!\n"); SG_WipeSavegame( "current" ); sv_testsave->value = fPrevTestSave; return qfalse; @@ -993,7 +979,7 @@ qboolean SG_ReadSavegame(const char *psPathlessBaseName) if (!SG_Open( psPathlessBaseName )) { - Com_Printf (GetString_FailedToOpenSaveGame(psPathlessBaseName, qtrue));//S_COLOR_RED "Failed to open savegame \"%s\"\n", psPathlessBaseName); + Com_Printf (S_COLOR_RED "Failed to open savegame \"%s\"\n", psPathlessBaseName); sv_testsave->value = fPrevTestSave; return qfalse; } @@ -1034,7 +1020,7 @@ qboolean SG_ReadSavegame(const char *psPathlessBaseName) if(!SG_Close()) { - Com_Printf (GetString_FailedToOpenSaveGame(psPathlessBaseName,qfalse));//S_COLOR_RED "Failed to close savegame\n"); + Com_Printf (S_COLOR_RED "Failed to close savegame\n"); sv_testsave->value = fPrevTestSave; return qfalse; } diff --git a/code/server/vssver.scc b/code/server/vssver.scc index a5ab97db558587ff014533e47199b9ad3b57a284..01d54382b2f5dbac8b1bf940204dd6d4178ecad1 100644 GIT binary patch delta 64 zcmV-G0Kfmx0nh=E6a-mRygQK?JQ>wvcPu{G3z{nc007J=000e}10BH$`{*8#Z5IhZ WE3FlPDgI|Ak&PP!uD6*wk*p-VBo>JP delta 64 zcmV-G0Kfmx0nh=E6a

Build Log

---------------------Configuration: starwars - Win32 Release-------------------- -

-

Command Lines

-Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A8B.tmp" with contents -[ -/nologo /G6 /MT /W4 /GX /Zi /O2 /D "NDEBUG" /D "_JK2EXE" /D "WIN32" /D "_WINDOWS" /Fo".\Release\exe/" /Fd".\Release\exe/" /FD /c -"C:\projects\jk2\CODE\qcommon\files.cpp" -] -Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A8B.tmp" -Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A8C.tmp" with contents -[ -ALut.lib OpenAL32.lib win32/FeelIt/ffc10.lib advapi32.lib winmm.lib kernel32.lib user32.lib gdi32.lib ole32.lib wsock32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:no /pdb:".\Release/jk2sp.pdb" /map:".\Release\exe/jk2sp.map" /debug /machine:I386 /out:".\Release/jk2sp.exe" -.\Release\exe\cl_cgame.obj -.\Release\exe\cl_cin.obj -.\Release\exe\cl_console.obj -.\Release\exe\cl_input.obj -.\Release\exe\cl_keys.obj -.\Release\exe\cl_main.obj -.\Release\exe\cl_mp3.obj -.\Release\exe\cl_parse.obj -.\Release\exe\cl_scrn.obj -.\Release\exe\cl_ui.obj -.\Release\exe\cm_load.obj -.\Release\exe\cm_patch.obj -.\Release\exe\cm_polylib.obj -.\Release\exe\cm_test.obj -.\Release\exe\cm_trace.obj -.\Release\exe\cmd.obj -.\Release\exe\common.obj -.\Release\exe\cvar.obj -.\Release\exe\exe_headers.obj -.\Release\exe\files.obj -.\Release\exe\genericparser2.obj -.\Release\exe\hstring.obj -.\Release\exe\md4.obj -.\Release\exe\msg.obj -.\Release\exe\net_chan.obj -.\Release\exe\q_math.obj -.\Release\exe\q_shared.obj -.\Release\exe\snd_ambient.obj -.\Release\exe\snd_dma.obj -.\Release\exe\snd_mem.obj -.\Release\exe\snd_mix.obj -.\Release\exe\snd_music.obj -.\Release\exe\strip.obj -.\Release\exe\sv_ccmds.obj -.\Release\exe\sv_client.obj -.\Release\exe\sv_game.obj -.\Release\exe\sv_init.obj -.\Release\exe\sv_main.obj -.\Release\exe\sv_savegame.obj -.\Release\exe\sv_snapshot.obj -.\Release\exe\sv_world.obj -.\Release\exe\unzip.obj -.\Release\exe\vmachine.obj -.\Release\exe\win_input.obj -.\Release\exe\win_main.obj -.\Release\exe\win_shared.obj -.\Release\exe\win_snd.obj -.\Release\exe\win_syscon.obj -.\Release\exe\win_video.obj -.\Release\exe\win_wndproc.obj -.\Release\exe\cdct.obj -.\Release\exe\csbt.obj -.\Release\exe\csbtb.obj -.\Release\exe\csbtL3.obj -.\Release\exe\cup.obj -.\Release\exe\cupini.obj -.\Release\exe\cupL1.obj -.\Release\exe\cupl3.obj -.\Release\exe\cwin.obj -.\Release\exe\cwinb.obj -.\Release\exe\cwinm.obj -.\Release\exe\hwin.obj -.\Release\exe\l3dq.obj -.\Release\exe\l3init.obj -.\Release\exe\mdct.obj -.\Release\exe\mhead.obj -.\Release\exe\msis.obj -.\Release\exe\towave.obj -.\Release\exe\uph.obj -.\Release\exe\upsf.obj -.\Release\exe\wavep.obj -.\Release\exe\fffx.obj -.\Release\exe\fffx_feel.obj -.\Release\exe\G2_API.obj -.\Release\exe\G2_bolts.obj -.\Release\exe\G2_bones.obj -.\Release\exe\G2_misc.obj -.\Release\exe\G2_surfaces.obj -.\Release\exe\MatComp.obj -.\Release\exe\tr_animation.obj -.\Release\exe\tr_backend.obj -.\Release\exe\tr_bsp.obj -.\Release\exe\tr_cmds.obj -.\Release\exe\tr_curve.obj -.\Release\exe\tr_draw.obj -.\Release\exe\tr_font.obj -.\Release\exe\tr_ghoul2.obj -.\Release\exe\tr_image.obj -.\Release\exe\tr_init.obj -.\Release\exe\tr_jpeg_interface.obj -.\Release\exe\tr_light.obj -.\Release\exe\tr_main.obj -.\Release\exe\tr_marks.obj -.\Release\exe\tr_mesh.obj -.\Release\exe\tr_model.obj -.\Release\exe\tr_noise.obj -.\Release\exe\tr_quicksprite.obj -.\Release\exe\tr_scene.obj -.\Release\exe\tr_shade.obj -.\Release\exe\tr_shade_calc.obj -.\Release\exe\tr_shader.obj -.\Release\exe\tr_shadows.obj -.\Release\exe\tr_sky.obj -.\Release\exe\tr_stl.obj -.\Release\exe\tr_surface.obj -.\Release\exe\tr_surfacesprites.obj -.\Release\exe\tr_world.obj -.\Release\exe\tr_WorldEffects.obj -.\Release\exe\win_gamma.obj -.\Release\exe\win_glimp.obj -.\Release\exe\win_qgl.obj -.\Release\exe\ui_atoms.obj -.\Release\exe\ui_connect.obj -.\Release\exe\ui_debug.obj -.\Release\exe\ui_main.obj -.\Release\exe\ui_shared.obj -.\Release\exe\ui_syscalls.obj -.\Release\exe\jcapimin.obj -.\Release\exe\jccoefct.obj -.\Release\exe\jccolor.obj -.\Release\exe\jcdctmgr.obj -.\Release\exe\jchuff.obj -.\Release\exe\jcinit.obj -.\Release\exe\jcmainct.obj -.\Release\exe\jcmarker.obj -.\Release\exe\jcmaster.obj -.\Release\exe\jcomapi.obj -.\Release\exe\jcparam.obj -.\Release\exe\jcphuff.obj -.\Release\exe\jcprepct.obj -.\Release\exe\jcsample.obj -.\Release\exe\jctrans.obj -.\Release\exe\jdapimin.obj -.\Release\exe\jdapistd.obj -.\Release\exe\jdatadst.obj -.\Release\exe\jdatasrc.obj -.\Release\exe\jdcoefct.obj -.\Release\exe\jdcolor.obj -.\Release\exe\jddctmgr.obj -.\Release\exe\jdhuff.obj -.\Release\exe\jdinput.obj -.\Release\exe\jdmainct.obj -.\Release\exe\jdmarker.obj -.\Release\exe\jdmaster.obj -.\Release\exe\jdpostct.obj -.\Release\exe\jdsample.obj -.\Release\exe\jdtrans.obj -.\Release\exe\jerror.obj -.\Release\exe\jfdctflt.obj -.\Release\exe\jidctflt.obj -.\Release\exe\jmemmgr.obj -.\Release\exe\jmemnobs.obj -.\Release\exe\jutils.obj -.\Release\exe\buffer.obj -.\Release\exe\cpp_interface.obj -.\Release\exe\sockets.obj -.\Release\exe\winquake.res -.\ALut.lib -.\OpenAL32.lib -.\win32\FeelIt\FFC10d.lib -.\win32\FeelIt\FFC10.lib -.\Release\jk2gamex86.lib -] -Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A8C.tmp" -

Output Window

-Compiling... -files.cpp -Linking... - - - -

Results

-jk2sp.exe - 0 error(s), 0 warning(s) -

---------------------Configuration: starwars - Win32 Debug-------------------- -

-

Command Lines

-Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A8F.tmp" with contents -[ -/nologo /G6 /MTd /W4 /Gm /Gi /GX /ZI /Od /D "_DEBUG" /D "_JK2EXE" /D "WIN32" /D "_WINDOWS" /Fr".\Debug\exe/" /Fo".\Debug\exe/" /Fd".\Debug\exe/" /FD /c -"C:\projects\jk2\CODE\qcommon\files.cpp" -] -Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A8F.tmp" -Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A90.tmp" with contents -[ -ALut.lib OpenAL32.lib win32/FeelIt/ffc10d.lib advapi32.lib winmm.lib kernel32.lib user32.lib gdi32.lib ole32.lib wsock32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:yes /pdb:".\Debug/jk2sp.pdb" /map:".\Debug\exe/jk2sp.map" /debug /machine:I386 /out:".\Debug/jk2sp.exe" -.\Debug\exe\cl_cgame.obj -.\Debug\exe\cl_cin.obj -.\Debug\exe\cl_console.obj -.\Debug\exe\cl_input.obj -.\Debug\exe\cl_keys.obj -.\Debug\exe\cl_main.obj -.\Debug\exe\cl_mp3.obj -.\Debug\exe\cl_parse.obj -.\Debug\exe\cl_scrn.obj -.\Debug\exe\cl_ui.obj -.\Debug\exe\cm_load.obj -.\Debug\exe\cm_patch.obj -.\Debug\exe\cm_polylib.obj -.\Debug\exe\cm_test.obj -.\Debug\exe\cm_trace.obj -.\Debug\exe\cmd.obj -.\Debug\exe\common.obj -.\Debug\exe\cvar.obj -.\Debug\exe\exe_headers.obj -.\Debug\exe\files.obj -.\Debug\exe\genericparser2.obj -.\Debug\exe\hstring.obj -.\Debug\exe\md4.obj -.\Debug\exe\msg.obj -.\Debug\exe\net_chan.obj -.\Debug\exe\q_math.obj -.\Debug\exe\q_shared.obj -.\Debug\exe\snd_ambient.obj -.\Debug\exe\snd_dma.obj -.\Debug\exe\snd_mem.obj -.\Debug\exe\snd_mix.obj -.\Debug\exe\snd_music.obj -.\Debug\exe\strip.obj -.\Debug\exe\sv_ccmds.obj -.\Debug\exe\sv_client.obj -.\Debug\exe\sv_game.obj -.\Debug\exe\sv_init.obj -.\Debug\exe\sv_main.obj -.\Debug\exe\sv_savegame.obj -.\Debug\exe\sv_snapshot.obj -.\Debug\exe\sv_world.obj -.\Debug\exe\unzip.obj -.\Debug\exe\vmachine.obj -.\Debug\exe\win_input.obj -.\Debug\exe\win_main.obj -.\Debug\exe\win_shared.obj -.\Debug\exe\win_snd.obj -.\Debug\exe\win_syscon.obj -.\Debug\exe\win_video.obj -.\Debug\exe\win_wndproc.obj -.\Debug\exe\cdct.obj -.\Debug\exe\csbt.obj -.\Debug\exe\csbtb.obj -.\Debug\exe\csbtL3.obj -.\Debug\exe\cup.obj -.\Debug\exe\cupini.obj -.\Debug\exe\cupL1.obj -.\Debug\exe\cupl3.obj -.\Debug\exe\cwin.obj -.\Debug\exe\cwinb.obj -.\Debug\exe\cwinm.obj -.\Debug\exe\hwin.obj -.\Debug\exe\l3dq.obj -.\Debug\exe\l3init.obj -.\Debug\exe\mdct.obj -.\Debug\exe\mhead.obj -.\Debug\exe\msis.obj -.\Debug\exe\towave.obj -.\Debug\exe\uph.obj -.\Debug\exe\upsf.obj -.\Debug\exe\wavep.obj -.\Debug\exe\fffx.obj -.\Debug\exe\fffx_feel.obj -.\Debug\exe\G2_API.obj -.\Debug\exe\G2_bolts.obj -.\Debug\exe\G2_bones.obj -.\Debug\exe\G2_misc.obj -.\Debug\exe\G2_surfaces.obj -.\Debug\exe\MatComp.obj -.\Debug\exe\tr_animation.obj -.\Debug\exe\tr_backend.obj -.\Debug\exe\tr_bsp.obj -.\Debug\exe\tr_cmds.obj -.\Debug\exe\tr_curve.obj -.\Debug\exe\tr_draw.obj -.\Debug\exe\tr_font.obj -.\Debug\exe\tr_ghoul2.obj -.\Debug\exe\tr_image.obj -.\Debug\exe\tr_init.obj -.\Debug\exe\tr_jpeg_interface.obj -.\Debug\exe\tr_light.obj -.\Debug\exe\tr_main.obj -.\Debug\exe\tr_marks.obj -.\Debug\exe\tr_mesh.obj -.\Debug\exe\tr_model.obj -.\Debug\exe\tr_noise.obj -.\Debug\exe\tr_quicksprite.obj -.\Debug\exe\tr_scene.obj -.\Debug\exe\tr_shade.obj -.\Debug\exe\tr_shade_calc.obj -.\Debug\exe\tr_shader.obj -.\Debug\exe\tr_shadows.obj -.\Debug\exe\tr_sky.obj -.\Debug\exe\tr_stl.obj -.\Debug\exe\tr_surface.obj -.\Debug\exe\tr_surfacesprites.obj -.\Debug\exe\tr_world.obj -.\Debug\exe\tr_WorldEffects.obj -.\Debug\exe\win_gamma.obj -.\Debug\exe\win_glimp.obj -.\Debug\exe\win_qgl.obj -.\Debug\exe\ui_atoms.obj -.\Debug\exe\ui_connect.obj -.\Debug\exe\ui_debug.obj -.\Debug\exe\ui_main.obj -.\Debug\exe\ui_shared.obj -.\Debug\exe\ui_syscalls.obj -.\Debug\exe\jcapimin.obj -.\Debug\exe\jccoefct.obj -.\Debug\exe\jccolor.obj -.\Debug\exe\jcdctmgr.obj -.\Debug\exe\jchuff.obj -.\Debug\exe\jcinit.obj -.\Debug\exe\jcmainct.obj -.\Debug\exe\jcmarker.obj -.\Debug\exe\jcmaster.obj -.\Debug\exe\jcomapi.obj -.\Debug\exe\jcparam.obj -.\Debug\exe\jcphuff.obj -.\Debug\exe\jcprepct.obj -.\Debug\exe\jcsample.obj -.\Debug\exe\jctrans.obj -.\Debug\exe\jdapimin.obj -.\Debug\exe\jdapistd.obj -.\Debug\exe\jdatadst.obj -.\Debug\exe\jdatasrc.obj -.\Debug\exe\jdcoefct.obj -.\Debug\exe\jdcolor.obj -.\Debug\exe\jddctmgr.obj -.\Debug\exe\jdhuff.obj -.\Debug\exe\jdinput.obj -.\Debug\exe\jdmainct.obj -.\Debug\exe\jdmarker.obj -.\Debug\exe\jdmaster.obj -.\Debug\exe\jdpostct.obj -.\Debug\exe\jdsample.obj -.\Debug\exe\jdtrans.obj -.\Debug\exe\jerror.obj -.\Debug\exe\jfdctflt.obj -.\Debug\exe\jidctflt.obj -.\Debug\exe\jmemmgr.obj -.\Debug\exe\jmemnobs.obj -.\Debug\exe\jutils.obj -.\Debug\exe\buffer.obj -.\Debug\exe\cpp_interface.obj -.\Debug\exe\sockets.obj -.\win32\winquake.res -.\ALut.lib -.\OpenAL32.lib -.\win32\FeelIt\FFC10d.lib -.\win32\FeelIt\FFC10.lib -] -Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A90.tmp" -

Output Window

-Compiling... -files.cpp -Linking... -Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A92.tmp" with contents -[ -/nologo /o"Debug/starwars.bsc" -.\Debug\exe\exe_headers.sbr -.\Debug\exe\cl_cgame.sbr -.\Debug\exe\cl_cin.sbr -.\Debug\exe\cl_console.sbr -.\Debug\exe\cl_input.sbr -.\Debug\exe\cl_keys.sbr -.\Debug\exe\cl_main.sbr -.\Debug\exe\cl_mp3.sbr -.\Debug\exe\cl_parse.sbr -.\Debug\exe\cl_scrn.sbr -.\Debug\exe\cl_ui.sbr -.\Debug\exe\cm_load.sbr -.\Debug\exe\cm_patch.sbr -.\Debug\exe\cm_polylib.sbr -.\Debug\exe\cm_test.sbr -.\Debug\exe\cm_trace.sbr -.\Debug\exe\cmd.sbr -.\Debug\exe\common.sbr -.\Debug\exe\cvar.sbr -.\Debug\exe\files.sbr -.\Debug\exe\genericparser2.sbr -.\Debug\exe\hstring.sbr -.\Debug\exe\md4.sbr -.\Debug\exe\msg.sbr -.\Debug\exe\net_chan.sbr -.\Debug\exe\q_math.sbr -.\Debug\exe\q_shared.sbr -.\Debug\exe\snd_ambient.sbr -.\Debug\exe\snd_dma.sbr -.\Debug\exe\snd_mem.sbr -.\Debug\exe\snd_mix.sbr -.\Debug\exe\snd_music.sbr -.\Debug\exe\strip.sbr -.\Debug\exe\sv_ccmds.sbr -.\Debug\exe\sv_client.sbr -.\Debug\exe\sv_game.sbr -.\Debug\exe\sv_init.sbr -.\Debug\exe\sv_main.sbr -.\Debug\exe\sv_savegame.sbr -.\Debug\exe\sv_snapshot.sbr -.\Debug\exe\sv_world.sbr -.\Debug\exe\unzip.sbr -.\Debug\exe\vmachine.sbr -.\Debug\exe\win_input.sbr -.\Debug\exe\win_main.sbr -.\Debug\exe\win_shared.sbr -.\Debug\exe\win_snd.sbr -.\Debug\exe\win_syscon.sbr -.\Debug\exe\win_video.sbr -.\Debug\exe\win_wndproc.sbr -.\Debug\exe\cdct.sbr -.\Debug\exe\csbt.sbr -.\Debug\exe\csbtb.sbr -.\Debug\exe\csbtL3.sbr -.\Debug\exe\cup.sbr -.\Debug\exe\cupini.sbr -.\Debug\exe\cupL1.sbr -.\Debug\exe\cupl3.sbr -.\Debug\exe\cwin.sbr -.\Debug\exe\cwinb.sbr -.\Debug\exe\cwinm.sbr -.\Debug\exe\hwin.sbr -.\Debug\exe\l3dq.sbr -.\Debug\exe\l3init.sbr -.\Debug\exe\mdct.sbr -.\Debug\exe\mhead.sbr -.\Debug\exe\msis.sbr -.\Debug\exe\towave.sbr -.\Debug\exe\uph.sbr -.\Debug\exe\upsf.sbr -.\Debug\exe\wavep.sbr -.\Debug\exe\fffx.sbr -.\Debug\exe\fffx_feel.sbr -.\Debug\exe\G2_API.sbr -.\Debug\exe\G2_bolts.sbr -.\Debug\exe\G2_bones.sbr -.\Debug\exe\G2_misc.sbr -.\Debug\exe\G2_surfaces.sbr -.\Debug\exe\MatComp.sbr -.\Debug\exe\tr_animation.sbr -.\Debug\exe\tr_backend.sbr -.\Debug\exe\tr_bsp.sbr -.\Debug\exe\tr_cmds.sbr -.\Debug\exe\tr_curve.sbr -.\Debug\exe\tr_draw.sbr -.\Debug\exe\tr_font.sbr -.\Debug\exe\tr_ghoul2.sbr -.\Debug\exe\tr_image.sbr -.\Debug\exe\tr_init.sbr -.\Debug\exe\tr_jpeg_interface.sbr -.\Debug\exe\tr_light.sbr -.\Debug\exe\tr_main.sbr -.\Debug\exe\tr_marks.sbr -.\Debug\exe\tr_mesh.sbr -.\Debug\exe\tr_model.sbr -.\Debug\exe\tr_noise.sbr -.\Debug\exe\tr_quicksprite.sbr -.\Debug\exe\tr_scene.sbr -.\Debug\exe\tr_shade.sbr -.\Debug\exe\tr_shade_calc.sbr -.\Debug\exe\tr_shader.sbr -.\Debug\exe\tr_shadows.sbr -.\Debug\exe\tr_sky.sbr -.\Debug\exe\tr_stl.sbr -.\Debug\exe\tr_surface.sbr -.\Debug\exe\tr_surfacesprites.sbr -.\Debug\exe\tr_world.sbr -.\Debug\exe\tr_WorldEffects.sbr -.\Debug\exe\win_gamma.sbr -.\Debug\exe\win_glimp.sbr -.\Debug\exe\win_qgl.sbr -.\Debug\exe\ui_atoms.sbr -.\Debug\exe\ui_connect.sbr -.\Debug\exe\ui_debug.sbr -.\Debug\exe\ui_main.sbr -.\Debug\exe\ui_shared.sbr -.\Debug\exe\ui_syscalls.sbr -.\Debug\exe\jcapimin.sbr -.\Debug\exe\jccoefct.sbr -.\Debug\exe\jccolor.sbr -.\Debug\exe\jcdctmgr.sbr -.\Debug\exe\jchuff.sbr -.\Debug\exe\jcinit.sbr -.\Debug\exe\jcmainct.sbr -.\Debug\exe\jcmarker.sbr -.\Debug\exe\jcmaster.sbr -.\Debug\exe\jcomapi.sbr -.\Debug\exe\jcparam.sbr -.\Debug\exe\jcphuff.sbr -.\Debug\exe\jcprepct.sbr -.\Debug\exe\jcsample.sbr -.\Debug\exe\jctrans.sbr -.\Debug\exe\jdapimin.sbr -.\Debug\exe\jdapistd.sbr -.\Debug\exe\jdatadst.sbr -.\Debug\exe\jdatasrc.sbr -.\Debug\exe\jdcoefct.sbr -.\Debug\exe\jdcolor.sbr -.\Debug\exe\jddctmgr.sbr -.\Debug\exe\jdhuff.sbr -.\Debug\exe\jdinput.sbr -.\Debug\exe\jdmainct.sbr -.\Debug\exe\jdmarker.sbr -.\Debug\exe\jdmaster.sbr -.\Debug\exe\jdpostct.sbr -.\Debug\exe\jdsample.sbr -.\Debug\exe\jdtrans.sbr -.\Debug\exe\jerror.sbr -.\Debug\exe\jfdctflt.sbr -.\Debug\exe\jidctflt.sbr -.\Debug\exe\jmemmgr.sbr -.\Debug\exe\jmemnobs.sbr -.\Debug\exe\jutils.sbr -.\Debug\exe\buffer.sbr -.\Debug\exe\cpp_interface.sbr -.\Debug\exe\sockets.sbr] -Creating command line "bscmake.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A92.tmp" -Creating browse info file... -

Output Window

- - - -

Results

-jk2sp.exe - 0 error(s), 0 warning(s) -

--------------------Configuration: starwars - Win32 FinalBuild--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A93.tmp" with contents +Creating command line "rc.exe /l 0x409 /fo".\FinalBuild\exe/winquake.res" /i "win32" /d "NDEBUG" "C:\projects\jk2\CODE\win32\winquake.rc"" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B3.tmp" with contents +[ +/nologo /G6 /MT /W4 /GX /Zi /O2 /D "NDEBUG" /D "FINAL_BUILD" /D "_JK2EXE" /D "WIN32" /D "_WINDOWS" /Fp".\FinalBuild\exe/starwars.pch" /Yu"..\server\exe_headers.h" /Fo".\FinalBuild\exe/" /Fd".\FinalBuild\exe/" /FD /c +"C:\projects\jk2\CODE\client\cl_cgame.cpp" +"C:\projects\jk2\CODE\client\cl_cin.cpp" +"C:\projects\jk2\CODE\client\cl_console.cpp" +"C:\projects\jk2\CODE\client\cl_input.cpp" +"C:\projects\jk2\CODE\client\cl_keys.cpp" +"C:\projects\jk2\CODE\client\cl_main.cpp" +"C:\projects\jk2\CODE\client\cl_mp3.cpp" +"C:\projects\jk2\CODE\client\cl_parse.cpp" +"C:\projects\jk2\CODE\client\cl_scrn.cpp" +"C:\projects\jk2\CODE\client\cl_ui.cpp" +"C:\projects\jk2\CODE\client\snd_ambient.cpp" +"C:\projects\jk2\CODE\client\snd_dma.cpp" +"C:\projects\jk2\CODE\client\snd_mem.cpp" +"C:\projects\jk2\CODE\client\snd_mix.cpp" +"C:\projects\jk2\CODE\client\snd_music.cpp" +"C:\projects\jk2\CODE\server\sv_ccmds.cpp" +"C:\projects\jk2\CODE\server\sv_client.cpp" +"C:\projects\jk2\CODE\server\sv_game.cpp" +"C:\projects\jk2\CODE\server\sv_init.cpp" +"C:\projects\jk2\CODE\server\sv_main.cpp" +"C:\projects\jk2\CODE\server\sv_savegame.cpp" +"C:\projects\jk2\CODE\server\sv_snapshot.cpp" +"C:\projects\jk2\CODE\server\sv_world.cpp" +"C:\projects\jk2\CODE\renderer\tr_animation.cpp" +"C:\projects\jk2\CODE\renderer\tr_backend.cpp" +"C:\projects\jk2\CODE\renderer\tr_bsp.cpp" +"C:\projects\jk2\CODE\renderer\tr_cmds.cpp" +"C:\projects\jk2\CODE\renderer\tr_curve.cpp" +"C:\projects\jk2\CODE\renderer\tr_draw.cpp" +"C:\projects\jk2\CODE\renderer\tr_font.cpp" +"C:\projects\jk2\CODE\renderer\tr_ghoul2.cpp" +"C:\projects\jk2\CODE\renderer\tr_image.cpp" +"C:\projects\jk2\CODE\renderer\tr_init.cpp" +"C:\projects\jk2\CODE\renderer\tr_jpeg_interface.cpp" +"C:\projects\jk2\CODE\renderer\tr_light.cpp" +"C:\projects\jk2\CODE\renderer\tr_main.cpp" +"C:\projects\jk2\CODE\renderer\tr_marks.cpp" +"C:\projects\jk2\CODE\renderer\tr_mesh.cpp" +"C:\projects\jk2\CODE\renderer\tr_model.cpp" +"C:\projects\jk2\CODE\renderer\tr_noise.cpp" +"C:\projects\jk2\CODE\renderer\tr_quicksprite.cpp" +"C:\projects\jk2\CODE\renderer\tr_scene.cpp" +"C:\projects\jk2\CODE\renderer\tr_shade.cpp" +"C:\projects\jk2\CODE\renderer\tr_shade_calc.cpp" +"C:\projects\jk2\CODE\renderer\tr_shader.cpp" +"C:\projects\jk2\CODE\renderer\tr_shadows.cpp" +"C:\projects\jk2\CODE\renderer\tr_sky.cpp" +"C:\projects\jk2\CODE\renderer\tr_stl.cpp" +"C:\projects\jk2\CODE\renderer\tr_surface.cpp" +"C:\projects\jk2\CODE\renderer\tr_surfacesprites.cpp" +"C:\projects\jk2\CODE\renderer\tr_world.cpp" +"C:\projects\jk2\CODE\renderer\tr_WorldEffects.cpp" +"C:\projects\jk2\CODE\win32\win_gamma.cpp" +"C:\projects\jk2\CODE\win32\win_glimp.cpp" +"C:\projects\jk2\CODE\win32\win_qgl.cpp" +"C:\projects\jk2\CODE\ui\ui_atoms.cpp" +"C:\projects\jk2\CODE\ui\ui_connect.cpp" +"C:\projects\jk2\CODE\ui\ui_debug.cpp" +"C:\projects\jk2\CODE\ui\ui_main.cpp" +"C:\projects\jk2\CODE\ui\ui_shared.cpp" +"C:\projects\jk2\CODE\ui\ui_syscalls.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcapimin.cpp" +"C:\projects\jk2\CODE\jpeg-6\jccoefct.cpp" +"C:\projects\jk2\CODE\jpeg-6\jccolor.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcdctmgr.cpp" +"C:\projects\jk2\CODE\jpeg-6\jchuff.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcinit.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcmainct.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcmarker.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcmaster.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcomapi.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcparam.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcphuff.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcprepct.cpp" +"C:\projects\jk2\CODE\jpeg-6\jcsample.cpp" +"C:\projects\jk2\CODE\jpeg-6\jctrans.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdapimin.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdapistd.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdatadst.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdatasrc.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdcoefct.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdcolor.cpp" +"C:\projects\jk2\CODE\jpeg-6\jddctmgr.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdhuff.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdinput.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdmainct.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdmarker.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdmaster.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdpostct.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdsample.cpp" +"C:\projects\jk2\CODE\jpeg-6\jdtrans.cpp" +"C:\projects\jk2\CODE\jpeg-6\jerror.cpp" +"C:\projects\jk2\CODE\jpeg-6\jfdctflt.cpp" +"C:\projects\jk2\CODE\jpeg-6\jidctflt.cpp" +"C:\projects\jk2\CODE\jpeg-6\jmemmgr.cpp" +"C:\projects\jk2\CODE\jpeg-6\jmemnobs.cpp" +"C:\projects\jk2\CODE\jpeg-6\jutils.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B3.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B4.tmp" with contents [ /nologo /G6 /MT /W4 /GX /Zi /O2 /D "NDEBUG" /D "FINAL_BUILD" /D "_JK2EXE" /D "WIN32" /D "_WINDOWS" /Fo".\FinalBuild\exe/" /Fd".\FinalBuild\exe/" /FD /c +"C:\projects\jk2\CODE\qcommon\cm_load.cpp" +"C:\projects\jk2\CODE\qcommon\cm_patch.cpp" +"C:\projects\jk2\CODE\qcommon\cm_polylib.cpp" +"C:\projects\jk2\CODE\qcommon\cm_test.cpp" +"C:\projects\jk2\CODE\qcommon\cm_trace.cpp" +"C:\projects\jk2\CODE\qcommon\cmd.cpp" +"C:\projects\jk2\CODE\qcommon\common.cpp" +"C:\projects\jk2\CODE\qcommon\cvar.cpp" "C:\projects\jk2\CODE\qcommon\files.cpp" +"C:\projects\jk2\CODE\game\genericparser2.cpp" +"C:\projects\jk2\CODE\qcommon\hstring.cpp" +"C:\projects\jk2\CODE\qcommon\md4.cpp" +"C:\projects\jk2\CODE\qcommon\msg.cpp" +"C:\projects\jk2\CODE\qcommon\net_chan.cpp" +"C:\projects\jk2\CODE\game\q_math.cpp" +"C:\projects\jk2\CODE\game\q_shared.cpp" +"C:\projects\jk2\CODE\qcommon\strip.cpp" +"C:\projects\jk2\CODE\qcommon\unzip.cpp" +"C:\projects\jk2\CODE\client\vmachine.cpp" +"C:\projects\jk2\CODE\mp3code\cdct.c" +"C:\projects\jk2\CODE\mp3code\csbt.c" +"C:\projects\jk2\CODE\mp3code\csbtb.c" +"C:\projects\jk2\CODE\mp3code\csbtL3.c" +"C:\projects\jk2\CODE\mp3code\cup.c" +"C:\projects\jk2\CODE\mp3code\cupini.c" +"C:\projects\jk2\CODE\mp3code\cupL1.c" +"C:\projects\jk2\CODE\mp3code\cupl3.c" +"C:\projects\jk2\CODE\mp3code\cwin.c" +"C:\projects\jk2\CODE\mp3code\cwinb.c" +"C:\projects\jk2\CODE\mp3code\cwinm.c" +"C:\projects\jk2\CODE\mp3code\hwin.c" +"C:\projects\jk2\CODE\mp3code\l3dq.c" +"C:\projects\jk2\CODE\mp3code\l3init.c" +"C:\projects\jk2\CODE\mp3code\mdct.c" +"C:\projects\jk2\CODE\mp3code\mhead.c" +"C:\projects\jk2\CODE\mp3code\msis.c" +"C:\projects\jk2\CODE\mp3code\towave.c" +"C:\projects\jk2\CODE\mp3code\uph.c" +"C:\projects\jk2\CODE\mp3code\upsf.c" +"C:\projects\jk2\CODE\mp3code\wavep.c" +"C:\projects\jk2\CODE\win32\FeelIt\fffx.cpp" +"C:\projects\jk2\CODE\win32\FeelIt\fffx_feel.cpp" +"C:\projects\jk2\CODE\renderer\MatComp.c" +"C:\projects\jk2\CODE\encryption\buffer.cpp" +"C:\projects\jk2\CODE\encryption\cpp_interface.cpp" +"C:\projects\jk2\CODE\encryption\sockets.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A93.tmp" -Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A94.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B4.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B5.tmp" with contents +[ +/nologo /G6 /MT /W4 /GX /Zi /O2 /D "NDEBUG" /D "FINAL_BUILD" /D "_JK2EXE" /D "WIN32" /D "_WINDOWS" /Fp".\FinalBuild\exe/starwars.pch" /Yu"../server/exe_headers.h" /Fo".\FinalBuild\exe/" /Fd".\FinalBuild\exe/" /FD /c +"C:\projects\jk2\CODE\win32\win_input.cpp" +"C:\projects\jk2\CODE\win32\win_main.cpp" +"C:\projects\jk2\CODE\win32\win_shared.cpp" +"C:\projects\jk2\CODE\win32\win_snd.cpp" +"C:\projects\jk2\CODE\win32\win_syscon.cpp" +"C:\projects\jk2\CODE\win32\win_video.cpp" +"C:\projects\jk2\CODE\win32\win_wndproc.cpp" +"C:\projects\jk2\CODE\ghoul2\G2_API.cpp" +"C:\projects\jk2\CODE\ghoul2\G2_bolts.cpp" +"C:\projects\jk2\CODE\ghoul2\G2_bones.cpp" +"C:\projects\jk2\CODE\ghoul2\G2_misc.cpp" +"C:\projects\jk2\CODE\ghoul2\G2_surfaces.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B5.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B6.tmp" with contents +[ +/nologo /G6 /MT /W4 /GX /Zi /O2 /D "NDEBUG" /D "FINAL_BUILD" /D "_JK2EXE" /D "WIN32" /D "_WINDOWS" /Fp".\FinalBuild\exe/starwars.pch" /Yc"..\server\exe_headers.h" /Fo".\FinalBuild\exe/" /Fd".\FinalBuild\exe/" /FD /c +"C:\projects\jk2\CODE\server\exe_headers.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B6.tmp" +Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B7.tmp" with contents [ ALut.lib OpenAL32.lib win32/FeelIt/ffc10.lib advapi32.lib winmm.lib kernel32.lib user32.lib gdi32.lib ole32.lib wsock32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:no /pdb:".\FinalBuild/jk2sp.pdb" /map:".\FinalBuild\exe/jk2sp.map" /debug /machine:I386 /out:".\FinalBuild/jk2sp.exe" .\FinalBuild\exe\cl_cgame.obj @@ -711,10 +349,190 @@ ALut.lib OpenAL32.lib win32/FeelIt/ffc10.lib advapi32.lib winmm.lib kernel32.lib .\win32\FeelIt\FFC10.lib .\FinalBuild\jk2gamex86.lib ] -Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP1A94.tmp" +Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP6B7.tmp"

Output Window

+Compiling resources... Compiling... +exe_headers.cpp +Compiling... +cl_cgame.cpp +cl_cin.cpp +cl_console.cpp +cl_input.cpp +cl_keys.cpp +cl_main.cpp +cl_mp3.cpp +cl_parse.cpp +cl_scrn.cpp +cl_ui.cpp +snd_ambient.cpp +snd_dma.cpp +snd_mem.cpp +snd_mix.cpp +snd_music.cpp +sv_ccmds.cpp +sv_client.cpp +sv_game.cpp +sv_init.cpp +sv_main.cpp +Generating Code... +Compiling... +sv_savegame.cpp +sv_snapshot.cpp +sv_world.cpp +tr_animation.cpp +tr_backend.cpp +tr_bsp.cpp +tr_cmds.cpp +tr_curve.cpp +tr_draw.cpp +tr_font.cpp +tr_ghoul2.cpp +tr_image.cpp +tr_init.cpp +tr_jpeg_interface.cpp +tr_light.cpp +tr_main.cpp +tr_marks.cpp +tr_mesh.cpp +tr_model.cpp +tr_noise.cpp +Generating Code... +Compiling... +tr_quicksprite.cpp +tr_scene.cpp +tr_shade.cpp +tr_shade_calc.cpp +tr_shader.cpp +tr_shadows.cpp +tr_sky.cpp +tr_stl.cpp +tr_surface.cpp +tr_surfacesprites.cpp +tr_world.cpp +tr_WorldEffects.cpp +win_gamma.cpp +win_glimp.cpp +win_qgl.cpp +ui_atoms.cpp +ui_connect.cpp +ui_debug.cpp +ui_main.cpp +ui_shared.cpp +Generating Code... +Compiling... +ui_syscalls.cpp +jcapimin.cpp +jccoefct.cpp +jccolor.cpp +jcdctmgr.cpp +jchuff.cpp +jcinit.cpp +jcmainct.cpp +jcmarker.cpp +jcmaster.cpp +jcomapi.cpp +jcparam.cpp +jcphuff.cpp +jcprepct.cpp +jcsample.cpp +jctrans.cpp +jdapimin.cpp +jdapistd.cpp +jdatadst.cpp +jdatasrc.cpp +Generating Code... +Compiling... +jdcoefct.cpp +jdcolor.cpp +jddctmgr.cpp +jdhuff.cpp +jdinput.cpp +jdmainct.cpp +jdmarker.cpp +jdmaster.cpp +jdpostct.cpp +jdsample.cpp +jdtrans.cpp +jerror.cpp +jfdctflt.cpp +jidctflt.cpp +jmemmgr.cpp +jmemnobs.cpp +jutils.cpp +Generating Code... +Compiling... +cm_load.cpp +cm_patch.cpp +cm_polylib.cpp +cm_test.cpp +cm_trace.cpp +cmd.cpp +common.cpp +cvar.cpp files.cpp +genericparser2.cpp +hstring.cpp +md4.cpp +msg.cpp +net_chan.cpp +q_math.cpp +q_shared.cpp +strip.cpp +unzip.cpp +vmachine.cpp +Generating Code... +Compiling... +cdct.c +csbt.c +csbtb.c +csbtL3.c +cup.c +cupini.c +cupL1.c +cupl3.c +cwin.c +cwinb.c +cwinm.c +hwin.c +l3dq.c +l3init.c +mdct.c +mhead.c +msis.c +towave.c +uph.c +upsf.c +Generating Code... +Compiling... +wavep.c +Generating Code... +Compiling... +fffx.cpp +fffx_feel.cpp +Generating Code... +Compiling... +MatComp.c +Generating Code... +Compiling... +buffer.cpp +cpp_interface.cpp +sockets.cpp +Generating Code... +Compiling... +win_input.cpp +win_main.cpp +win_shared.cpp +win_snd.cpp +win_syscon.cpp +win_video.cpp +win_wndproc.cpp +G2_API.cpp +G2_bolts.cpp +G2_bones.cpp +G2_misc.cpp +G2_surfaces.cpp +Generating Code... Linking... diff --git a/code/ui/ui_atoms.cpp b/code/ui/ui_atoms.cpp index c09eacb..5fceff6 100644 --- a/code/ui/ui_atoms.cpp +++ b/code/ui/ui_atoms.cpp @@ -47,7 +47,7 @@ void UI_SetActiveMenu( const char* menuname,const char *menuID ) { // this should be the ONLY way the menu system is brought up (besides the UI_ConsoleCommand below) - if (cls.state != CA_DISCONNECTED && !ui.SG_GameAllowedToSaveHere(qtrue)) //don't check full sytem, only if incamera + if (!ui.SG_GameAllowedToSaveHere(qtrue)) //don't check full sytem, only if incamera { return; } diff --git a/code/ui/ui_main.cpp b/code/ui/ui_main.cpp index 69cfd31..ee02d63 100644 --- a/code/ui/ui_main.cpp +++ b/code/ui/ui_main.cpp @@ -414,7 +414,7 @@ static qboolean UI_DeferMenuScript ( const char **args ) } // Defer if the video options were modified - deferred = Cvar_VariableIntegerValue( "ui_r_modified" ) ? qtrue : qfalse; + deferred = Cvar_VariableValue ( "ui_r_modified" ) ? qtrue : qfalse; if ( deferred ) { @@ -2500,8 +2500,8 @@ UI_ResetDefaults */ void UI_ResetDefaults( void ) { - ui.Cmd_ExecuteText( EXEC_APPEND, "cvar_restart\n"); ui.Cmd_ExecuteText( EXEC_APPEND, "exec default.cfg\n"); + ui.Cmd_ExecuteText( EXEC_APPEND, "cvar_restart\n"); ui.Cmd_ExecuteText( EXEC_APPEND, "vid_restart\n" ); Cvar_Set("com_introPlayed", "1" ); } diff --git a/code/ui/vssver.scc b/code/ui/vssver.scc index 228871afd36ab851eca77a3b674402b1837f7c71..89068943950ce405069b601d1308c3b8567e452a 100644 GIT binary patch delta 41 zcmV+^0M`GI0+0fb6a=#;0EdwnObU^>`WN>wn69Emk#0r_+uSuiOi>0Ie389VLe>y1 delta 41 zcmV+^0M`GI0+0fb6a=|aE#{FJObTL@kH(gx(OEG7k#0r_eh)4K_