[Setup] Product=MatrixMoves Beta 4 Version=040 Archive=MatrixMovesBeta4.umod SrcPath=. MasterPath=.. Requires=UnrealTournament400Requirement Group=SetupGroup Group=umodINIGroup Group=MMGroup [UnrealTournament400Requirement] Product=UnrealTournament Version=400 [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=1048,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=587,Flags=3) [umodINIGroup] AddIni=UnrealTournament.ini,Engine.GameEngine.ServerPackages=MatrixMovesBeta4 AddIni=UnrealTournament.ini,UBrowserMMb4DM.ListFactories[0]=UBrowser.UBrowserSubsetFact,SupersetTag=UBrowserAll,GameType=MMb4DeathMatchPlus,bCompatibleServersOnly=True AddIni=UnrealTournament.ini,Engine.GameEngine.ServerPackages=MMB4_PluginPack1 Ini=System\UBrowser.int,ServerListTitles.UBrowserMMb4DM=MatrixMoves B4 DM [MMGroup] File=(Src=Help\MatrixMovesB4Readme.htm,Size=17344) File=(Src=Help\MatrixMoves_PluginB4.htm,Size=12374) File=(Src=Help\MMLogoInst.bmp,Size=29286) File=(Src=System\MatrixMovesBeta4.u,Size=224465) File=(Src=System\MatrixMovesBeta4.int,Size=436) File=(Src=System\MatrixMovesBeta4.ini,Size=6317) File=(Src=System\MMB4_PluginPack1.u,Size=147970) [Setup] LocalProduct=MatrixMoves Beta 4 ReadMe=Help\MatrixMovesB4Readme.htm SetupWindowTitle=MatrixMoves Beta 4 setup AutoplayWindowTitle=MatrixMoves Beta 4 Options ProductURL=http://www.planetunreal.com/reactor4 VersionURL=http://www.planetunreal.com/reactor4 Developer=Reactor 4 DeveloperURL=http://www.planetunreal.com/reactor4 Logo=Help\MMLogoInst.bmp [UnrealTournament400Requirement] LocalProduct=UnrealTournament ProductURL=http://www.unrealtournament.com/ VersionURL=http://unreal.epicgames.com/ Developer=Epic Games, Inc. DeveloperURL=http://www.epicgames.com/ MatrixMoves - Beta 4 Readme
MatrixMoves Beta 4
by Tuomo 'Tuco' Korva & Heikki Korva
http://www.planetunreal.com/reactor4
reactor4@planetunreal.com


Release Notes

Remember the amazing acrobatics in the movie Matrix ? Now you can do the same moves in Unreal Tournament with the MatrixMoves mutator. This beta 4 version has 7 moves and they look really cool in both 3rd and 1st person views. But of course you have to see it for yourself ! For the ultimate Matrix experience, combine this mutator with JadtheGerbil's excellent Lazy Matrix.

Installation

UMOD: Uncompress the zip file and double-click the file MatrixMovesBeta4.umod
Non-UMOD: Uncompress the zip file to your UnrealTournament\System directory

Using MatrixMoves in the Game

Off-Line Play:
You have two ways to use MatrixMoves in offline single player game:
1) Choose MatrixMoves B4 DM as the game-type.
2) Choose MatrixMoves Beta 4 from the mutator list.

On-Line Play:
Server:
You have two ways to setup MatrixMoves on your server:
1) Use MatrixMoves as normal mutator
2) Choose MatrixMoves B4 DeathMatch as gametype from the pulldown menu. With this option other people wanting to play MatrixMoves Beta 4 find your server much easily by using the MatrixMoves B4 DM server tab in the serverlist. Note that MatrixMoves mutator will be used always with this gametype even if you don't select it to be used.

If you have installed the Non-UMOD version of the mutator, you must add the following lines to the correct files by hand (additions in red color). The UMOD installer does this automatically.

File Additions
UnrealTournament.ini Additions to [Engine.GameEngine] section:
ServerPackages=MatrixMovesBeta4
ServerPackages=MMb4_Pluginpack1


Addition to the end of file:
[UBrowserMMb4DM]
ListFactories[0]=UBrowser.UBrowserSubsetFact,
SupersetTag=UBrowserAll,GameType=MMb4DeathMatchPlus,
bCompatibleServersOnly=True
UBrowser.int Additions to [ServerListTitles] section:
UBrowserMMb4DM=MatrixMoves B4 DM

Client:
You have two ways to finding Internet games using the MatrixMutator Beta 4:
1. Go to Find Internet games and click on MatrixMoves B4 DM tab on the serverbrowser.
- Note that the tab will be added to the browser the first time you activate the MatrixMoves configuration window.
2. Browse all populated servers and try to find a game using the MatrixMutator Beta 4

The Moves

- The moves work only with supported player classes. To find out if your current playerclass supports the moves during the game, hit TAB key to bring up the prompt, type checkmm and hit enter. If text "MatrixMoves Beta 4 Detected" is shown, your current playerclass supports the moves. See the supported classes at the end of this document for details.

- To be able to use all the moves, enable dodge from options->preferences->game in the UT menus.

Move Description
Wallrun & Backflip

1. Make sure that you are near a wall facing it.
2. Do a dodge forward and keep forward button pressed down to start running up the wall. You can run the wall:
- Vertically pressing and keeping down the forward/backward buttons
- Horizontally pressing and keeping down the strafe left/strafe right buttons
- Note that you can aim with your mouse during the wallrun sequence
- If you aren't pressing any of the up/down/strafe left/strafe right keys, the wallrun sequence ends. It also ends if you try run to the opposite direction you are currently going.

4. Press jump button while running up the wall to do a backflip.

Frontflip & Backflip 1. Dodge to the front or back to do a flip
- Note that you can do dodgemoves in the air.
Double Jump 1. Jump normally.
2. While still in air press jump button again to get higher.
- You can do only one Matrix Jump during one normal jump.
Freeze 1. Press and hold the crouch button while in mid-air to freeze
2. During the freeze you can turn and use weapons.
3. After letting go of the crouch button or after maximum freeze time has passed you will continue to move to the direction you were initially going.
4. Freeze can be used again after landing to the ground.
Side Cartwheels 1. Dodge to the left or right while standing to do a side cartwheel
- Note that you can do dodgemoves in the air.
Side Spin 1. Dodge to the left or right while crouching on the ground
High Jump 1. Press jump button while crouching on the ground


Configuration Options

You can configure some key attributes of MatrixMoves from the config window accessible from menus (Mod->MatrixMoves) in the UnrealTournament's main window. The changes take affect when a new level is loaded or current level restarted.

Option Description
Maximum Wallrun time Maximum amount of time in seconds player can run vertically on the wall. Set this value to 0 for infinite amount of time.
Maximum Freeze time Maximum amount of time in seconds player can freeze himself in the air. Set this value to 0 for infinite amount of time.
Wallrun speed Wallrun speed, 0.1 being the slowest value and 2.0 the fastest one. 1.0 is the default value.

Supported Playerclasses

To find out if your current playerclass supports the moves during the game, hit TAB key to bring up the prompt, type checkmm and hit enter. If text "MatrixMoves Beta 4 Detected" is shown, your current playerclass supports the moves.

Original playerclasses:
By default, Beta 4 version supports all original UnrealTournament player classes.
Male/Female Soldier, Male/Female Commando, Commander, Boss

Additional player classes:
You can configure the support for additional player classes from the "Additional playerclass window" accessible from "Plugins..." button on the "MatrixMoves configuration window". To be able to use the pluginclass simply click on corresponding checkbox. If you don't have it installed, an error message appears. Here are the additional supported player classes:
- All UT Bonuspack player classes
- Abbey, Alien Queen, Arab, AWolf, BobaFett, Dire, Drake, Gordon, Guardian, HellSpawn, Hunter, Lady Death, Lin Fang, Lobo, Lord Maul, Marine, Mask, Messiah, Obi-wan, Prowl, Q2Male, Ratamahatta, Rhino, Riot, Rumiko, SideSwipe, SolidSnake, Super Male, Unreal1Models, TekkBlade, Trinity, Troop, Valkyries and Yoshi.

As an example, let's add support for Trinity player class:
"I have downloaded the Trinity player class from the Internet (www.utskins.com, www.fileplanet.com and www.fileleech.com have them) and installed it to my UT. Then I start UT, go to the main menu and to the MatrixMoves configuration window (mod menu).Then I click the Plugins... button on the window which opens the "Additional playerclass window". I search "Trinity" from the list of Supportedclasses and check it's checkbox. After this I simply close the window, select Trinity as my new player model, set up a new practise session and frag some bots using MatrixMoves."

MatrixMoves uses a plugin type approach for supporting additional player classes. This means that you don't need any additional packages for playing MatrixMoves and it's easy to make new pluginpackages for player models which don't have MM support yet. To add support for new player classes by making pluginpackages see MatrixMoves_PluginB4 document. Note that if you want to use pluginpackages in network play, server must have them in ServerPackages list.

Known Issues

- The moves only work with the supported playerclasses.
- Bots don't use any of the new moves.
- The demo playback doesn't show the moves right.
- When playing MatrixMoves and going to the player setup, the player model may not be the right one.
- We recommend that you use the latest version of UT (v436) with this mutator.

Version History

Version Changes
Beta 4 - Playerclass code is completely rewritten to improve the network play
- Changed the start sequence for Wallrun
- Horizontal wallrun added !
- Added a console command for easy supported class detection ("checkmm")
- New window added for handling plugin playerclasses
- Fixed skin problem with Boss player class
- Removed the "Time between Jumps" option

Thanks to

- FangsFirst for the help with playerclass pluginpackage
- UsAaR33 for the new pluginpackage architecture idea

Authors

Tuomo 'Tuco' Korva
Heikki Korva

December 22nd, 2000
Copyright Reactor 4 - 2000. All Rights Reserved.

 

 
MatrixMoves - Playerclass Plugins for MMB4
MatrixMoves
Playerclass plugin documentation for
MatrixMoves Beta 4
by Tuomo 'Tuco' Korva
http://www.planetunreal.com/reactor4
reactor4@planetunreal.com


Release Notes

This document describes the procedure to make pluginpackages for supporting new player classes in MatrixMoves Beta 4. Making the plugin package takes about 30 minutes and requires a bit programming experience.

Supported classes

By default beta 4 version supports the following player classes:
- All original UnrealTournament player classes
- All UT Bonuspack player classes
- Abbey, Alien Queen, Arab, AWolf, BobaFett, Dire, Drake, Gordon, Guardian, HellSpawn, Hunter, Lady Death, Lin Fang, Lobo, Lord Maul, Marine, Mask, Messiah, Obi-wan, Prowl, Q2Male, Ratamahatta, Rhino, Riot, Rumiko, SideSwipe, SolidSnake, Super Male, Unreal1Models, TekkBlade, Trinity, Troop, Valkyries and Yoshi.

MatrixMoves B4 uses a plugin type approach for supporting additional player classes. This means that you don't need any additional packages for playing MatrixMoves and it's easy to make new pluginpackages for player models which don't have MM support yet.

How to make a new playerclass plugin

There are two ways to make plugins:
I If the playerclass you want to support doesn't have any mod specific code (like Rumiko or Obiwan), you should add your subclass below MM_BaseMale or MM_BaseFemale. However, if the playerclass you want to support has mod-specific code (like Infiltration or U4e), you should add your subclass below the class you want to support. Look at the examples below to see how to make new pluginclasses.

Example 1. Making a plugin for Trinity player class

1. Make sure you have MatrixMoves Beta 4 and the unsupported player class installed to UT
OK, MatrixMoves Beta 4and Trinity are both installed.

2. Open Unrealtournament\System\Unreal.ini file and add MatrixMovesBeta4, MMB4_PluginPack1 and the unsupported packages to the end of editpackages list
Open file in notepad. Search for editpackages and add the lines to the end of the list.
EditPackages=MatrixMovesBeta4
EditPackages=MMB4_PluginPack1
EditPackages=Trinity

3. Fire up UnrealEd and find the unsupported player class from the class hierarchy. Also click on the export all scripts.
Trinity seems to located in Pawn- PlayerPawn- TournamentPlayer- TournamentFemale-Trinity. I also export all the scripts.

4. Add a subclass to either MM_BaseMale or MM_BaseFemale depending on where the unsupported playe class was located.
Trinity is located under TournamentFemale so I'll use MM_BaseFemale.The class has some new code but it doesn't contain any mod-specific code. Right click on the MM_BaseFemale in the class browser, choose create new class, put MMB3_Trinityplugin as package name and MMTrinity as new class name.

5. Open the class you just created. Also open some other pluginclass that has been already created.
OK, MMTrinity and MMaqueen are opened in the editor.

6. Copy the code from an already ready pluginclass to the new class you created. Then open the UC file of unsupported class you exported earlier and copy/paste all the code excluding the model import code to your new class. You also need the default properties section.
I copy the code from aqueen class to Trinity class. Then I open the exported file in some text editor from F:\UT\Trinity\Classes\Trinity.uc and copy all the text from there to the trinity class open in UnrealEd2. After the copy I remove all the import commands from the class.

7. Modify the code in you new class in function PostBeginPlay so that the variables being initialized are the ones you just copied from the UC file.
Trinity has some own code for handling animations so I put it to the start of the class. To the end of the class I put the function PostBeginPlay and modify it so that it has the values of Trinity instead of Alien Queen. For example, I change the mesh to be loaded from aqueen.aqueen to Trinity.Trinity. The variables that Trinity doesn't have can be destroyed and the ones that Trinity has but the Alien Queen doesn't have I add as new ones.

8. Then I just hit compile and save the package.
Just press the compile button, then select the MMB4_TrinityPlugin package from list and press save selected packages.

9. Open Unrealtournament\System\MatrixMoves.ini file in some text editor. Add the original player class name to the first empty line in SupportedClasses. Then add the name of the class you created to the first empty line in PluginClasses.
Open file in notepad. Add the lines to the first empty line which in this case is after the cow class. The class name consists of package name and class name so for the original trinity class it'strinity.trinityi and for the plugin class it's MMB4_TrinityPlugin.MMtrinity.

SupportedClasses[0]=multimesh.tcow
SupportedClasses[1]=trinity.trinity
PluginClasses[0]=MMB4_PluginPack1.MMtcow
PluginClasses[1]=MMB4_TrinityPlugin.MMtrinity

10. You're done. Test if the plugin works in the game.

Example 2. Making a plugin for Infiltration player class

1. Make sure you have MatrixMoves and the unsupported player class installed to UT
OK, MatrixMoves Beta 4and Infiltration are both installed.

2. Open Unrealtournament\System\Unreal.ini file and add both packages to the end of editpackages list
Open file in notepad. Search for editpackages and add the lines to the end of the list.
EditPackages=MatrixMovesBeta4
EditPackages=InfiltrationUT (Not sure if the Infiltration package name is really that !)

3. Fire up UnrealEd and find the unsupported player class from the class hierarchy
Infiltration player class seems to located in Pawn and the class name is INFUT_TMale1

4. Add a subclass for the unsupported player class and put it to a new package
Right click on the original class in the class browser, choose create new class, put MMB4_Infiltrationplugin as package name and MMInfUT_TMale1 as new class name.

5. Open MM_BaseMale class under Male1 and copy all the code from it to new player class you created
Copy/paste the code from MM_BaseMale to the MMInfUT_TMale1 class.

6. Compile code and save the new package.
Just press the compile button, then select the MMB4_Infitrationplugin package from list and press save selected packages.

7. Open Unrealtournament\System\MatrixMoves.ini file in some text editor. Add the original player class name to the first empty line in SupportedClasses. Then add the name of the class you created to the first empty line in PluginClasses.
Open file in notepad. Add the lines to the first empty line which in this case is after the cow class. The class name consists of package name and class name so for the original nali class it's multimesh.tnali and for the plugin class it's MM_BonuspackPlugin.MMtnali.
SupportedClasses[0]=multimesh.tcow
SupportedClasses[1]=InfiltrationUT.INFUT_TMale1
PluginClasses[0]=MM_BonusPackPlugin.MMtcow
PluginClasses[1]=MMB4_InfiltrationPlugin.MMInfUT_TMale1
(Not sure if the Infiltration package name is really that !)

8. You're done. Test if the plugin works in the game.


December 22nd, 2000
Copyright Reactor 4 - 2000. All Rights Reserved.

 

 
BMfr6(WR0n . .Ľƿw{[}}0zR|Kt])A:~B){Jo[~;21"qS;zk|C{;sQqR*k[rK)|<"uB)uh|1!~2nR$|1nJ"qBhU{)})lJhQnB]]s8q;jJ|"{)nllt2{!lA[Yq3aSt*z n:lZt)n4cLcGufBt!p(l0sUSm*sdbb[Ga8cQ^B`8lYEj e)OL\6jv[Q[8c"[2PH_(t[JNBIImXJ\)^ bR:auVA\!fTHIFURRW)S3Q3S2Y"ZO4T$BBG:ZWMIJ5Q#K2P"H5K)SVRI)=9RJ#<<gH3B/|I"B0KFCCC(A*L}IF G9066J{A!sB!u71|Az;$tAU<.{Ej8'sBh9!r9 k;s:c:g0,q;633t++b2!j2 k9k<Q4"[2 e8 e2[1J-#S1[*%a2Z1T1S&&/**J*R)Y1B)W!!R.Q)B)J)J B I):"C!@:!/@":3)1:  )120")*!    ZZҥ㑑xփ{{{{{{{xӠrrrrrrr{{rxxӃrr{{{ֵr{{{{{{rߵ{{{rr{{{{{{rֵփxxӃrr{{{rxxxxx⠠֠{xxxxx{ߵ{x e  xW{r{r  r{փr  *   r     r x r   7*    {{ߠ eM   *xӃrrxr r{W xW rӃ  r ӠxW xrrx{W  ZMe  e Wx* rr h rx r   *h rr r  7r  rrx  7ee ҥ   {́rxhhh r*r rr * *r̠r   xx 77 hrxh   eM {Whr *h rh r̠  r ́  h̠ rhxxhWWeeeM7ʹhԠh̠Ǡ*hWhʵhʠW*x *hWʽWhh*Ӡ*Ёʽ¹ʽʽ ʹɹɽ·ǹɽʽʽʽʽʹɹ·ù··ʽʽʽʽʽϽʽʽ·ɹɹ··ɹʽϽʽʽʽZʽɽ·ʽȻʽʽ;ó;ͱvvvvvllllZZZZZZZZ[[DDDDD;;EE--...........0000000EEEE;;;DDDDJJJJJJZZZZZZZZZZZZZZZZAAAAASSSAAAAAAAAA[JJJJJJJJJD;;;---->>>>--.......1111.>>>>DDDD;;;D[[JJJJJJ]]]]iiiiiiiiijjjjpuuuuu;;vvvllliZZZZZZZZ[JDDDDDD;;D-----........0000000EEEEDDD;;;DDDD[JJJZZZZZZZZZZZZZZZZZZAAAAAAAAAAAAAA[JJJJJJJJJJJDDDDDDDDDDDD--->>>>>111111.111->>>>DDDDDDJJJJJJJJJJ]]]iiiiiiiijjjjjppppppuѵ;;sssssssipppppiipliiiillllllllllllllsssllssssuuuuuuuuuuuuuupppppppppiipppppppppssssssssssssssss±нδǾļĴĻĴIJĴZĴĴļȿļómkk^^kkkkkkqq^Uk~k^^^^kk^^k^^^^XCC__XXX___XXXXNNNNNNjjIIIIVYYRRNN_X==X}tLC^CCXXXXXXXX____c|nN)N333VVIVVVIIIIYw`NN===XXXXXXCCCCCk~mLOOOOUUU^^^UUUCC^LCXXXXXOOOLL^^C2mtBO\^^^^LL======T_mmk^^^^XXXXCCCOOOOO~ȼoyooϜbbQyœob׬ooz944'''4444??99/?~q?'499999///??////BB6%%8888%%%%%%%,$YY,,,,,$$$&&&:6///kk66!!6666/&&&:Xnc$$$$$=`R%%%%%%%%%&&////^m^2!!!!!9999999?qq2////////6666^k///?66666///6///B^^C6666////4444''''qȼyGQyoGQʬbQoby۬QGbbQzzQboGz944444444?OO444K~~\KKOKKKK///KK//B6TTB%%88888888,,,,gY$$:::6666BB6kkC&&&&&CCC6%88:Rn`$HHH$$NnR&&666666///^q^???!!!????6666666kmC/////6///6KK/^m66666666666B///B__B//2266444444449~ϻGbɏGybbɳGooGGoͭoGb94?944?99\aO///OkX^\OOOOOB66BBB&B__N%%$HNNHHH$$$$$$gj$$$:TTB6666CCCtt=&:::::XT88NN$$$Rw` 5IHHH Rw_$=&&&BBBBBB&d~d???!!!!??O?66?<66m}C6666666C6//6BC_t/222222%&CCCB&&&=kkTBBOOKK??66''99?ɏGoQoyQQboooQzQbzGobooQGG99K449KKKOOK6BBX}XXXXBXKKKK6/BB&%8__N,,,HHHHHH555@@ Vj$$$$8BTBB6666::L}:&&8888NN$$HH  V|` """" H55H R|c)=:&&&&&&6BBB66d~d22222?OO22CCm}B&BB&&2CC2///22ct/666BB&&&CXCB&&&XmcXBTTT????2!!!?9'?ɏGoQoyGGbzbGQQzozGbzGoGbZ?9O99OOKKKKKKTBX}T:TTTTTB6666BB8%8__N,,,HHH555555F@Vj$$::%8CCCCCC666C=::$$$HHH$$$$ Puj"""""""@@@@ Y`$))):&&&&&BB6666k~d<<<>>>>>>>1]j$XX:::::CCCXC8TNHRI5Fgg@D]si.""""55@@@@@""`` 33:::&&22CC66qq?9?11g`N_C666OBmtBBRHV@@jp-J]l.DjP55H5Hjj""j`+wn:&&&&&CC^~m2~m<>1jn%_kBB6//UȘXNI@@-((]p-####;fEPu$$R`5VnYXKUO66ŤCm~UUUȚ}6TN,,$$B}٤CCC%n|&cļmB&T_ttBTή~'?Ϝb܎o~OՙO'a~?kNw|V5gϼɼN,Rwj>>[EE0SZ#0DD>5jw%_kK????qȚ^XV1>J-((if0####EfE(>V`$nٓRHVwY}T/K~q/Uؐ&k~UUqm2^LBBkϘXXN8%X۲B/XT%n|%8nt\BBXXB&&B_~mBXa????Uސ'9ɧaՐ?'\~Nw|g5@t8,Ijg>>[EEEff##DD11uw%_mm՘XXY>D[D..fZ#00##SfD(1ɞct`,HYnR}6/tը6^ދ/mtBXC/B6//KĚ_XH$$%cĸk6BB%n%%n~qO////66/6_tmTT~k99??9''~99ZqŐaq~H|wg55ȫ_%$HggDEEE0Sff##EE1@w%_Ȩދ6XV>[[[E#ff#0S00SfD11RΫϊ8,,,YnRO^dqދ6tm6_~C6666/KkXH$$$:ĤkΘT%:,n%%ntk^\K///\mm\KKKKqqqq99qލN|pP1@jwYN_м_8IIjjD.EEESfS##D[>Ht%_k/XF1[[[EEff00S00SfD155,cۤB%::,cnT靐՘C~tBcmB6666??~tTYHHHntBtȿn%N,n%%cп~999/Oqq\9Oȸ؋49Oȝ՘N|pF11P||,,TȫRHVFjjE0SSSSfZ##D]FH|t%Xm/XI1DDEEEly00SSSSi[15H$B^//TT%_tTtȝșĚTt}TctB66/666~ȸ}N}YHHHΊNNT|,N,w%%X44?K\qkOKaΝd'9'~qޝ~H|[>(1pԛ,,}H5FFjfEESS00fZ##E]F5wt%^qq~dd~ޘ6TV1D...Sl00SSSSlP@I$$XO//BB%c}Bkq~ޚNw}HYtCB6///?ȶtN}I55@w,N%ۓ$Hp%%_q??OOaqaOO~~O?'?~4q؝OK޶~IgE((]êHHϫ`55PPifE0SS00fS##E[@5w}/k?'9'''OդCCF1JE00Svl00SS0SiD@V,%}ΨȐB/BB&mm6^ș??~ضN||5YwTB6///UծcN@Fgj$|ĞYI5p,:t~~~aKKaUKa~k9\ըq\k~~~d?499O~9~a9/\ĨIfE((Ej@1>[[iiE#00SSllEEE>55wĂ6~\'???UqؚBBF.J;000ll00A00AlDI$Yؘ^}66:&mk/m޶U//CĮI|u@jXBBB66~ؤX:F1]ggPp,:}qa?9999?UK?dk4^qO9''??Od~d9?~9K446ոn@p[E.#.[ϦpDZZlf;0SSSlʡfD115wċ6~䐀&&@J;;0Zv000AlD5NޮC6t/:%ck6Cտ|IuuPjȫt^kqqq:8P1juD">Pp,%tqaa~k?99Oqk9dȶqa~9'O؀996/^`@pEEEE((j11[fffEZ೧sD |Θ6q~%8>Z;0l„0000AiDV}/BBTT%km6m!!!&Lw+uuFF|鿤%:>J---i]Γ,8tŋO9Ok~q?O''ZOa?KK%8ۼgFEE[[.(ɈP1>[[[pfEfʯj wΚ/UޮX%8F1]D.;;AiD"ޤ_BT%cՐT%mm2<22&&:`"F55ضcRۧ-DJJ]jΓ%Tk~KK^qqU2dȨq9UaOOOB%%Nnn@V[D]]D.D>D][JiiJ]ɼ@wΘ/6Ÿ~C%%8V@]DD#.l-;;;ZsPFĤcNNN:%_=m~2d^!222==YnnI@V5YŀC&&Y"]]>>DPP>PjϘ%TX~خ~\K^qq^K6^ظUU!9'OOKUU?6B%%%,,VF>PgPF>FP@FPPPjjPPgjjppujjjjI$wՋ//Uqqqqqaad2Y@PPD>1Fjj]-----JsP+``YNNNNN%%cn:m~!!<<2!2CCCX:5@Y3+:cq2NI"""">>>FPPPPPPϘ%TTOk~~~~~~qdUOUkqqdO222Uq~qd^O22?9?U??\\66TBBB$,V@1FPPPP@55555@FVVppPFF"@FFF@++RN&}؋//?99?UO??<<22Y+VVF@5@FFFFF"PpP 3 3R==T88:&m~!!!22CLLLXN:$$+V+R)&2222<<222%8Y+"""""""FPPF""И%BBB??999'''666Uk~~dCCC6669??20?0@0A0B0C0D0E0F0G0H0I0J0n]Beta 4t]22nd Dec. 2000.  Z R KVWXvuW O @n[bLkWRKRZY|$!&p P jY Y g {/::$::$ 6#ܞѨT1X'X'X'X'X'R@GR@GԝX{#Uss  ):& ~gt` Fz/::$::$ 6(F_o1X'X'X'X'X'R@GR@GԝX{#Uss  ):& C y U   X/L3" AW% QUp5r@^w@BZba mkpd j /::$::$ 6EPwG'1X'X'X'X'X'R@GR@GԝX{#Uss  ):& ;@=mG@<l {tQ:UDfQR  nRPO@||Cw9j  vT J_COD>]bNMK@@IoK@@U{t@@`Kg@qas_a `eeTds E`YV[1 [bBg @ dr c vN , f i m G@4 @A Mp~\Vn{Rx IaVFGHLrlhcbEp@a HDp@A|{RU_~AeH IR] zknxoxC u@ldz@wxyy@eq j Wk~V o T2DTdMo o  , rSIuLHv]M ZXJyeTOP Z + c^A K H? q@B_FKFlNFCa@j}@m@wCDqrC[PxH KH? `hlILAUMOrPssJiOoX+ h@Xwf + Pt H? Za <>TAEFD?=; G@NIMOPQRb_Vuc{\fghijKXk^^@QtTrW T ]hv%~.'lo PPTAEFD?=; G@NIMOPQRyK@@PG @XPm| [Kw[ YcXD_ZTUNMowjaVemAlKrl nuoz|(k V 6tc8f(F_  6"9"5]FCommandoSkins.cmdo7]FCommandoSkins.2]Botpack.SelectionFemale10]Botpack.TrophyFemale14]Female Commando8]BotPack.VoiceFemaleOne1(q W 6u)u9(F_  6"y"9"5]SGirlSkins.army7] SGirlSkins.Y2]Botpack.SelectionFemale20]Botpack.TrophyFemale24MFemale Soldier8]BotPack.VoiceFemaleTwo1x@W p Uw$ , O@|qqb lK}l Q^NYh ESMdB^P}] <>TAEFD?=;G~F G@NIMOPQRzKw n Z2[NMo o  , fvc]MatrixMoves Configuration]Ivu>u>H#?O:% ::$G$F I?::$IHGa=FIHGa=F ^Z*v-%Z `u%  g!tu $ \iyT,:c:$ :c:$cR#?#? h_ b c\c\5r xdt4o$"$$q!  5b;#$-(-(-(  cB."t }*s;#$-(-(-(  IvS`w#$-(-(-(6v@6v66v6a+v N-+ ]Ta]c pvh\ys nt j-Dt D  0.8kH  1.5~:;1/MatrixMoves odetected S@?/pppWallrun:UkFreeze:UfSpeed:Ur @]E ml"t L A b kidQiea QV a$y YeWl1>>u>u> <$ h$ V ?,e:%$ $V ?, $ $ $ $V ?, ^ W?-R(::$WV[a=^"WV[a=^--R h SE:_f- ;:]:$ :]:$]dQ?,cc f Y`.?Y 4:i%dY<i?o:4do:6?a,6?,66?,6?D?a,,6?,66?,6?D?a,,96?,66?,?,-ea,@%-la, %-Pa,%-P--{a, %}$ &}$ ,}$ ,}$ ,}$ d-e-l-P}"dIKm,KII?,`?, -P--{--{-e-g w*V:%U$$M-f+-h w*WBB:%X$U$|Y?%|G?|??|Y6F:j6Fm[::$ ::$x,bx&Ix6 Ix6I6Fx66Fx66FIS::$ ::$ ::$ ::$6FIda=F6I6m66Fa+Fxz |?%|-b-c-Pid;C?t@F4C?putpp=t?,w.*u uZYa6u6u6u666 BVsBE(&s-$o$q!b Jx.k+ Ix iB* dOgpI $ 4$ ?^ L$"?, Q$ V$ [$ v$?6 o$q! Y[CX>>u>u>aFS?%Xa??%::$$::$$?%::$$::$$:?%X#??!::$$77::$$?%X#?z::$$::$$$E C?$:%::$ ::$b$S?,2::$e$e$-V(_::$CXea=ECXea=E--V b c%  F z(\[V:%::$z Y$$%[4 }$$ %[4 ::$:z:$-P'$x%f?%af(o$q!$z $A%b$\?,2aX_\?,26_6_?6_6_?_?h?%_-P'$A$k?%ak(4% $%\4 ?$ 4% <$%\4 q$T4% n$%[4 $4% $%[4 -P$?'HD?58 SWKD8K$ \ (Ci>-3?,a!J;a!Kg_?,a!aga!L JJ lMoUbM?DM>u>u> <$ h$ Z"?,e:%$ $Z"?, $ $ $ $Z"?, J L?-L(::$LZJa=J"LZJa=J--L q] %c $/] @G.]̌?//̌?.?6@6.6 D6 6 Z  $Z $ $ $ z$/] G.]L?/Y/L?.?.::$6 D::$6 D::$6 D6 D6 6 6 6 Z  w$Z+ $ $ /] G.]?/`/?.?.::$ 6 D+6 D6 6  Z ~$Z+ ']a+Z Z 8tc Ns%NPXz 5$o$q!# $$~ի?$$6?,q! $$~ի$$6?,q! [$$~ի?$6?,q! $$~ի$6?,q! $$~ի?$6?,q! $ $~ի$6?,q!  F $s;#$-(-(-(  tA F=]Q::$ ::$ ::$ ::$a{q]?,2Q?,Z6q6q?6q6q?q?h? $$6D?@6%6p66D?@?6@( $6DBA666p66PF6&?%6PF66X?6BAX?D?@F6%6D?@6@( N$$6D?@6%6p66D?@?6( $6DBA666p6PF6?%6PF6X?6BAX?D?@F66D?@6( $$6D6@6%6@6D?6( H$6DBA6666@6@,d666X?6BAX?DF6@6666( $$6D??X6666D??6( %$6DBA66^6%6@6%66@6X?6BAX?D?F66D?66( 'Aa+ ZqD F=CUc: :$ : :$ : :$ : :$aRmC?,2c?,Z6m6m?6m6m?fm?h?ff $ $6D?@6%6p66D?@?6@( $6DBD666p66PF6&?%6PF66V?6BDV?D?@F6%6D?@6@( N$ $6D?@6%6p66D?@?6( $6DBD666p6PF6?%6PF6V?6BDV?D?@F66D?@6( $ $6D6@6%6@6D?6( H$6DBD6666@6@,d666V?6BDV?DF6@6666( $ $6D??X6666D??6( %$6DBD66^6%6@6%66@6V?6BDV?D?F66D?66( 'Da+ T E%( s"?+ X LE%( }d %c $3d @G0ď?33̌?0?6@606 D6 6 \  $\ $ $ $ z$3d G0dL?3Y3L?0?0::$6 D::$6 D::$6 D6 D6 6 6 6 \  w$\+ $ $ 3d G0d?3`3?0?0::$ 6 D+6 D6 6  \ ~$\+ 'da+\ W e -+ U "J+ W 16384SA*+-%A y 32768~(Ci>-3?,a!J;a!Kg_?,a!aga!L zcc y hA%:h:$$o$q!:h:$$CDjj?"j30 q!$ Cc%  { .t C  65536{ 49152B  1.1N o*u-%o E vvu>u>w#?O:% ::$x$y v?::$vwxa=yvwxa=y Q X t4o$ $$q! | 0.5u7&&BossSkins.Boss I J(pjV^ j q } }^zqqBossSkins. pq :7,5%pp 1T_R7pp1T_R75%p 1p1%pp1T_R7pp1T_R7 &pp 2T_R7pp 2T_R7,pp 3T_R7pp 3T_R7,pp 4T_R7pp 4T_R7c%p 1 &p 2p 2,p 3p 3,p 4p 4w.*..p 5Xan   M H`.?H 4:Z%_H<Z?o:4_o:6?c,6?,66?,6?D?c,,6?,66?,6?D?c,,96?,66?,?,-`c,@%-_c, %-Nc,%-N--Bc, %B$ &B$ ,B$ ,B$ ,B$ _-`-_-NB"_>Pb,P>>?,q?, -N--B--B-I-y w*V:%U$$M-F+-| w*WBB:%X$U$CH?%CG?C??CH6K:Q6Kb[::$ ::$p,bp&>p6 >p6>6Kp66Kp66K>S::$ ::$ ::$ ::$6K>ba=K6>6b66Ka+KAz C?%C-U-~-Nqb;C?`@F4C?Yz`YY=`?,w.*z zZHa6z6z6z666 B ;b;#$-(-(-(  YS*+-%S V u%  7@Q -+ U .e+ R S T "D+ {D Q;r  n~%n^_V 5$o$q!# $&tի?&&6?,q! $&tի&&6?,q! [$&tի?&6?,q! $&tի&6?,q! $&tի?&6?,q! $ &tի&6?,q!  0c tY`w#$-(-(-(6t@6t66t6a+t TTI #2a ] @ $ \ !4A $ ^ EA%:E:$$o$q!:E:$$OP}}?%}58 q!$ [ 16384hv b @_f- ;:V:$ :V:$Vdh?,ii _ (Ci>-3?,a!J;a!Kg_?,a!aga!L kd gD8g$ O]*+-%] e fBE(&f-$o$q!b k g E%( i N F=DMB::$ ::$ ::$ ::$aboD?,2B?,Z6o6o?6o6o?Qo?h?QQ $$6D?@6%6p66D?@?6@( $6DBN666p66PF6&?%6PF66W?6BNW?D?@F6%6D?@6@( N$$6D?@6%6p66D?@?6( $6DBN666p6PF6?%6PF6W?6BNW?D?@F66D?@6( $$6D6@6%6@6D?6( H$6DBN6666@6@,d666W?6BNW?DF6@6666( $$6D??X6666D??6( %$6DBN66^6%6@6%66@6W?6BNW?D?F66D?66( 'Na+ Vo dx%djmn 5$o$q!# $!jի?!!6?,q! $!jի!!6?,q! [$!jի?!6?,q! $!jի!6?,q! $!jի?!6?,q! $ !jի!6?,q!  DW=1$p%A%x%4%Q w -*XOc>>u>u>n::$ L?%L-wXO6w::$l$l$;::$M$ --$'--$C--$_--${::$M::M?-l::$-33$;;::$ ::$-;?%$z::$ :% % L?%l$~a%::$ ~!{- :%-6b -{{-66)666D?6?&?, 1=-{?6?6%U6666-\-UO-?&?A-_ -?V- ~!-y'-(^-y(::$-wla=_-wla=_--y n \[b666666}::$ ::$\ `  32768[r  49152j SoUbS?DS:?D:S:US:U?U:?SDD&S:U:SU?US?:D&DUOU^3D&6D:?@L6D:?@`6DS Ok \X>>u>u>|`M?%O|??%: :$$: :$ $?%: :$$: :$ $:?%O#??!: :$$77: :$ $?%O#?z: :$$: :$ $$e \?$:%::$ ::$b$M?,2::$s$s$-I(_::$\Osa=e\Osa=e--I z S-EK_:%::$S Y$$ K, }$$  K, ::$:S:$-R'$ g?%ag(o$q!$S $@%b$E?,2aN^E?,26^6^?6^6^?^?h? ^-R'$@$b?%ab(,% $ E, ?$ ,% <$ E, q$T,% n$ K, $,% $ K, -R$?'HD?/. p *pP L>6*?%06*?%@B;@CD|6*?%n6*?%@y@4CDQ6*6*@Q?,I@6*?%6*?%@?,D6*?%6*?%@?,DD6*?%6*?%@?h@ Q@ ] 'uj& ::$g:% ::$ o$L?633@r]::$ j,633?$ Su UX>>u>u>@L?%I@??%::$$::$$?%::$$::$$:?%I#??!::$$77::$$?%I#?z::$$::$$$a U?$:%::$ ::$b$?,2::$l$l$-~(_::$UIla=aUIla=a--~ t  65536R_6 W8-z^(U-'U::$p Y 20AAW>>u>u>n::$ W?%W2aAA6a::$k$k$;::$B$ --$'--$C--$_--${::$B::B?2k::$233$;;::$ ::$2;?%$z::$ :% M% W?%k$la%::$ l!{- :%-6b 2{{-66)666D?6?&?, 1=2{?6?6%H6666-\2HA-?&?A2J 2?V- l!-s'-(^-s(::$2aka=J2aka=J--s | _; W8-z^(U-'U::$j G m G* }  1.1T{ E 5_f- ;:d:$ :d:$ddJ?,rr J~ G "up& ::$g:% ::$ o$Q?633@rG::$ p,633?$ S )pU L>6)?%06)?%JB;JCD|6)?%n6)?%JyJ4CDT6)6)JT?,I@6)?%6)?%J?,D6)?%6)?%J?,DD6)?%6)?%J?hJ D uN`w#$-(-(-(6u@6u66u6a+u T[ e 0r  0b;#$-(-(-(  L N b M c%  O Q Xc P i %c $5i @G8ǐ?55̌?8?6@686 D6 6 g  $g $ $ $ z$5i G8iL?5Y5L?8?8::$6 D::$6 D::$6 D6 D6 6 6 6 g  w$g+ $ $ 5i G8i?5`5?8?8::$ 6 D+6 D6 6  g ~$g+ 'ia+g U H[b666666}::$ ::$H g` WB1$j%@%%,%L YX Y }SR gl1>>u>u> <$ h$ M%?,e:%$ $M%?, $ $ $ $M%?, h g?-z(::$gM}a=h"gM}a=h--z ^WA%:W:$$o$q!:W:$$TYKK? K/. q!$ ^ _ MSWdQWDE }B  0.8U6%UZ@>>u>u>n::$ Q?%Q6^UZ6^::$A$A$;::$[$ --$'--$C--$_--${::$[::[?6A::$633$;;::$ ::$6;?%$z::$ :% x% Q?%A$Da%::$ D!{- :%-6b 6{{-66)666D?6?&?, 1=6{?6?6%R6666-\6RZ-?&?A6@ 6?V- D!-X'-(^-X(::$6^Aa=@6^Aa=@--X b  0.5[ f \pC $ 4$ ?^ L$%?, Q$ V$ [$ v$?6 o$q! Cfr $y i K  $y s;#$-(-(-(  k m "s n o l .t p -9t q s ct r u t4o$%$$q! t !iu $ v u%  w ~*u-%~ _x ivu>u>k#?O:% ::$n$o i?::$ikna=oikna=o kj"s } ]E" ~ S@?/pppWallrun:UbFreeze:UgSpeed:Uc B :;1/MatrixMoves odetected z @ yT,:q:$ :q:$qR#?#? A qE  1.5`H9F`Mutator{9{9e~9,e%r9e99}9e&r99zrMatrixMovesBeta4.MatrixMutator-y'-x'&-ye~`Mutator=u`e,z`e,b-x`ppuMatrixMovesBeta4.MatrixMutator,z`ppuMatrixMovesBeta4.MatrixMutatorz`O H  0.5m eI  0.8J  1.1K  65536L  49152O  32768d  1.5M :;1/MatrixMoves odetected L 16384.GKR BIM"L"D"E"C*e7DO*ei"ɋ6iH1;@(˙̥D̚ˠ̠̥̠̗'˙̠̥C̟̠̙D˙R̚C˙̥Rˠ(̙̙̙˙̚˙('˚̙DˠΠΟ͠(˦|ΠͥΆD̠̥R̥̙D̠˚̘RΥ(̙˚˥˚˚̙((̠̚D͞ΠΨ͞5̙|ΨΨ͆ͤͦͥR̚ˠ͠˚̘̥|ΩΤΤΦ5̥̙̚5(̙̙TҨѣ5˚΁ѨTѣͦ|˥̥ͤрΤ̙ͥ̀Ҥҧ5̦˚̖̙̠̙˥5(˚̥vĢâþç6˙˚΁ǕTÿѤΨ|ˠTΥ˙˦ÿĨ6Υ̙˚˚6(“vE@Bv7||||~̦΁ljǓTR|˥vҏTC66ͤĿ6|6777ˇ|67|7 (R̞ÈȾ*5¾Ɛx8OEĩ7*7ľNNŽÿ6D7˂ΝÈġC67*6ͣȽ57|*R̄6'5R7 (|6(}CĈȜ55ľů@ĩC~~~C5Ůǯҝ6|7΂̄C6˃CFTR5BÕEE}̚7RC '̄R56Cv6ħůLCĊC̓ŋŸ¢56C̥6CC̅7FĨvE˚̇C̚̚D*'̄5D5CC@ƯNCΟ75ů̦D~67DCC̙Câ5;E65*|˚*6**RD** R|C57CC6ŸOFΝ9***6ŌƸĨE;D̦|DDCCD̚DCFC5**D̗˘67CC*CD*** R||7CEFTT@Ÿx¢FD5**65ƐƸĊEBΩ56CD̃|̗DҩCCT̗̖̓R*C**** RRRC6âBFTT@F¾ŹxFTCƐƸĢE@ĊDC΃C̥̟BҩC;΀̦Φ||5D5**@N |R˙̇6@ΨƹxvT̖D̓ȒȽvFĎ̦˖D˄6CRTTBDͅDF̈́F@TC7ͤ}7D||66|˚R555* 3ӷ(|̥̄ĈҤ̥ȈǽȡħÊя̥˚̈́̀ΦTTTTͥ|||˚R5555** w'˙̦ĉΦ˥ľçÊ̦̦̥̄˅Υ΀ͦͩͥ̚R655ɭɷ*Bɶɺ4!{(̙̚}̦Φҧħ҉Υ˦ͥΩΩҢĩюΦ̥̦̦̇̆̀˦Ξͥ̚|765OOy4{4ӷ3w(̦̥̚ΦΩħč̥ͥΥΨҤҨҏͨΦ˦̥̇̅˥́˦̦˥Ξ|7766;ɶL3{(̚˙̦̥̥ͨΩҩҩΨͦ˦̔˥ΦͤҩҔΦ̖̥̚˥̦̥̃Π˦̦CC7vOy;O@wwL(̥̚˦̠ΩҨͦΦ˦Φ͠ҩҨҩ̖̚˅̥̠̄̄RDCɭɶ6OɺN*{Lz )**55;66B@66BFTvXTTTTTvXvTTTTTTTT|RDC766@6@@BB@9,8,# )**55566BB66BETvvXvvTTFFFFFTvXFTTFFFTTFTTTTTTTTTTFFFTTTRDC76699;;;@@;*$$+)**5566BB@6BETTTXvTTvFOXXXvvxxxxvOXXXTTTFSEEEEFFFXXXxxxxXSSSTTTFCEEFTTTFFFFTTTTTTTTTFFFFTTTvXFFFEEEFTTDDDDC66955999=@=$##        +-IA55;@EEBB6BSXXFTFFXSXXOxxxxxOOXOFXXFTEEEESEFXXOXxxxxvXSESXXTTTXXEEESXTTTSSSXXXFTXXFFXFSXXFFXXXSEESSSTXTSXTC76;A?89*,JJI0/%%0       0G!"3GGK4HKHLLLLMQQQwzzxxxOzzQQPHH4KG33KG0   0%"?mm?dY:k;U8:Uk@@I,,?;k;:m8d: &%   q1q1q1`ba fkmpI,88A;8,>g.]m8,]kkImmpI<,d>8pIJ8g$V]mg]],$8>d,gI$,8>g,)  %    8,88,,$$$,,,,$$,>:88,$..>><.,,,$..,$$$,>-,$+#,,.-.,$$,$..,++#,<-.,$,,...,,$,]-,,,$,>888,,,,--,,$,8,88,$)+.,8,,$,,,,,$#$$.,,)) %    ++,+++###+++#..+++#+,..,,+###++#+#..+####++++####+#####.+++###++++#++++###.,,$###+++###++,,+#,++#+#++####++##       #######++#####+#####+###########++#############                                                                                             @@@        !(#(- # )',3; 3 9#*%+%+38292; 6!: 6 !< 5";(>#<$$)"#822566;BQ &F -S 1Z%B%J(E*L%C&J(D*L-T0K2Z 8g >q8g=t%&I$)V!1K$5X00U'*e--q#5h%:v13j58y Cx@oBz/B]3C].Dd#D{2Ec5Ei2Jk8Fl=Kc7Gx>QlBBEFFJHHMJKQANhBQmIScLYnATsGTyHV|M\sL]zP\rR^{Ra}\i~aadffikkmglxyy{>//)<.=58:; JOPRHLQSY^`c&E)I$Q3F3G)M'U)\5G>J1S6Y$b6aknquz*_:[&h'm q%u6b7j0q5t&z*}:m6v7zBBCCDIBGEPFT]kbnivm{~~t{HJNNEZJ\STTV]]FaGfBtRdGjKmFsGwUgVkSrUt```p'(24z|AC}|HD8H$ S JB#E(&J-$o$q!b y V//============================================================================= // MM_PluginFramedWindow. //============================================================================= class MM_PluginFramedWindow expands UWindowFramedWindow; function Created() { ClientClass=Class'MatrixMovesBeta4.MM_ScrollingDialogClient'; WindowTitle="MatrixMoves Playerclasses"; Super.Created(); SetSize(220, 300); WinLeft = ((Root.WinWidth - WinWidth) / 2) + 30; WinTop = ((Root.WinHeight - WinHeight) / 2) + 30; } //============================================================================= // MM_ScrollingDialogClient. //============================================================================= class MM_ScrollingDialogClient expands UWindowScrollingDialogClient; function Created() { ClientClass = class'MM_PluginClientWindow'; FixedAreaClass = None; Super.Created(); } b l F3STd:%::$F Y$$"T1 }$$ "T1 ::$:F:$-|'$M"m?%am(o$q!$F $N%b$S?,2a\bS?,26b6b?6b6b?b?h?"b-|'$N $n?%an(1% $"S1 ?$ 1% <$"S1 q$T1% n$"T1 $1% $"T1 -|$?'HD?30 L 0Z  999[  0.1\  2]  75^ u&B@-wCLLGG;;-w' _ C5MLyDLGyDG;@=;  ` q<va/!{.#bL.#gG.#c;.#_a/!z.(nL.(mG.(i;.(__a/!.EkL.EfG.Er;.E~w* q a Kt\ ROhK'wO*KOPw*tKvx x//============================================================================= // MM_BaseMale. // // MatrixMoves mutator beta 4 // by Tuomo 'Tuco' Korva & Heikki Korva / Reactor 4 // // EMAIL... reactor_4@hotmail.com // WWW..... http://www.planetunreal.com/reactor4 // // Copyright Reactor 4, 2000 // All rights reserved. //============================================================================= class MMCommander expands Commander; var enum EMove { MM_None, MM_Freeze, MM_Wallrun, MM_Airbackroll, MM_DodgeFront, MM_DodgeBack, MM_DodgeLeft, MM_DodgeRight, MM_LowTwistLeft, MM_LowTwistRight } MatrixMove; var enum EWallDir { WD_None, WD_Up, WD_Up1st, WD_Down, WD_Down1st, WD_Left, WD_Left1st, WD_Right, WD_Right1st } WallrunDir; var float MaxWallRunTime, MaxFreezeTime, WallRunSpeed; var int NumWallruns, NumFreezes, NumJumps, NumDodges; var vector AfterGlideVector; var rotator ViewRotBeforeRoll; var float RotDegrees, PassedRotTime, FreezeDisabledTime, WallRot; CONST ROT90 = 16384; CONST ROT180 = 32768; CONST ROT270 = 49152; CONST ROT360 = 65536; CONST AIRBACKFLIP_TIME = 1.1; CONST DODGE_ROTTIME = 0.8; CONST LOWTWISTTIME = 0.5; CONST CIRCLE_TIME = 1.5; replication { // Variables the server should send to the client. reliable if( Role == ROLE_Authority) MaxWallRunTime, MaxFreezeTime, WallRunSpeed; // Vars the client sends to the server. reliable if( Role 0) WallRot_Yaw = 90; else WallRot_Yaw = 270; } else { if(vNormal.Y == 0) { if(vNormal.X > 0) WallRot_Yaw = 0; else WallRot_Yaw= 180; } else { temp1 = vNormal.Y / vNormal.X; WallRot_Yaw = atan(temp1) * (180/Pi); if(vNormal.X < 0 && vNormal.Y > 0) WallRot_Yaw+= 180; else if(vNormal.X < 0 && vNormal.Y < 0) WallRot_Yaw += 180; else if(vNormal.X > 0 && vNormal.Y < 0) WallRot_Yaw += 360; } } return WallRot_Yaw; } // *************************************************************** state PlayerWalking { ignores SeePlayer, HearNoise, Bump; exec function Jump( optional float F ) { if ( !bShowMenu && (Level.Pauser == PlayerReplicationInfo.PlayerName) ) SetPause(False); else { bPressedJump = true; if(MatrixMove == MM_None) NumJumps++; } } function DoJump( optional float F ) { if(NumJumps == 1 && Physics == PHYS_Walking) { // High jump if(bDuck != 0 && MatrixMove == MM_None) { PlayInAir(); SetPhysics(PHYS_Falling); FreezeDisabledTime = 0.5; Velocity.Z = JumpZ*2.3; } else Super.DoJump(F); } // Double jump else if (MatrixMove == MM_None && NumJumps == 2) { Velocity.Z = JumpZ*1.4; MatrixMove = MM_None; } } function Dodge(eDodgeDir DodgeMove) { local vector X,Y,Z, HitLoc1,HitNorm1; local bool bDisableSnd; GetAxes(Rotation,X,Y,Z); if (bDuck != 0) { if(Physics == PHYS_Walking) { switch(DodgeMove) { case DODGE_Left: MatrixMove = MM_LowTwistLeft; AfterGlideVector = Y; NumDodges++; break; case DODGE_Right: MatrixMove = MM_LowTwistRight; AfterGlideVector = -Y; NumDodges++; break; } } else if(Physics == PHYS_Falling) { if(DodgeMove == DODGE_Back) { bDisableSnd = true; MatrixMove = MM_Freeze; NumFreezes++; AfterGlidevector = Velocity; if (MaxFreezeTime > 0) SetTimer(MaxFreezeTime,false); SetPhysics(PHYS_Flying); GotoState('Freezed'); } } } else { switch(DodgeMove) { case DODGE_Forward: if(NumWallruns == 0 && !FastTrace(Location+X*50,Location)) { Trace(HitLoc1, HitNorm1, Location+X*50,Location); HitNorm1.X = HitNorm1.X * -1; HitNorm1.Y = HitNorm1.Y * -1; WallRot = (CalcWallRotation(HitNorm1)/360) * 65535; AfterGlideVector = -HitNorm1; bDisableSnd = true; MatrixMove = MM_Wallrun; NumWallRuns++; WallrunDir = WD_None; if (MaxWallRunTime > 0) SetTimer(MaxWallRunTime,false); } else { if(NumDodges > 0) return; else { MatrixMove = MM_DodgeFront; AfterGlideVector = X; NumDodges++; } } break; case DODGE_Back: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeBack; AfterGlideVector = -X; NumDodges++; } break; case DODGE_Left: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeLeft; AfterGlideVector = Y; NumDodges++; } break; case DODGE_Right: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeRight; AfterGlideVector = -Y; NumDodges++; } break; } } if(!bDisableSnd) PlayOwnedSound(JumpSound, SLOT_Talk, 1.0, true, 800, 1.0 ); PassedRotTime = 0; RotDegrees = 0; } // Here we hack again... function PlayerMove( float DeltaTime ) { local vector X,Y,Z, NewAccel; local EDodgeDir OldDodge; local eDodgeDir DodgeMove; local rotator OldRotation; local float Speed2D; local bool bSaveJump; local name AnimGroupName; GetAxes(Rotation,X,Y,Z); aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; if(MatrixMove != MM_Freeze && FreezeDisabledTime > 0) FreezeDisabledTime -= DeltaTime; // Update acceleration. NewAccel = aForward*X + aStrafe*Y; NewAccel.Z = 0; // Check for Dodge move if ( DodgeDir == DODGE_Active ) DodgeMove = DODGE_Active; else DodgeMove = DODGE_None; if (DodgeClickTime > 0.0) { if ( DodgeDir < DODGE_Active ) { OldDodge = DodgeDir; DodgeDir = DODGE_None; if (bEdgeForward && bWasForward) DodgeDir = DODGE_Forward; if (bEdgeBack && bWasBack) DodgeDir = DODGE_Back; if (bEdgeLeft && bWasLeft) DodgeDir = DODGE_Left; if (bEdgeRight && bWasRight) DodgeDir = DODGE_Right; if ( DodgeDir == DODGE_None) DodgeDir = OldDodge; else if ( DodgeDir != OldDodge ) DodgeClickTimer = DodgeClickTime + 0.5 * DeltaTime; else DodgeMove = DodgeDir; } if (DodgeDir == DODGE_Done) { DodgeClickTimer -= DeltaTime; if (DodgeClickTimer < -0.35) { DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } } else if ((DodgeDir != DODGE_None) && (DodgeDir != DODGE_Active)) { DodgeClickTimer -= DeltaTime; if (DodgeClickTimer < 0) { DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } } } // Do freeze if(Physics != PHYS_Walking && bDuck != 0 && NumFreezes == 0 && FreezeDisabledTime <= 0) DodgeMove = DODGE_Back; AnimGroupName = GetAnimGroup(AnimSequence); if ( (Physics == PHYS_Walking) && (AnimGroupName != 'Dodge') ) { //if walking, look up/down stairs - unless player is rotating view if ( !bKeyboardLook && (bLook == 0) ) { if ( bLookUpStairs ) ViewRotation.Pitch = FindStairRotation(deltaTime); else if ( bCenterView ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; if (ViewRotation.Pitch > 32768) ViewRotation.Pitch -= 65536; ViewRotation.Pitch = ViewRotation.Pitch * (1 - 12 * FMin(0.0833, deltaTime)); if ( Abs(ViewRotation.Pitch) < 1000 ) ViewRotation.Pitch = 0; } } Speed2D = Sqrt(Velocity.X * Velocity.X + Velocity.Y * Velocity.Y); //add bobbing when walking if ( !bShowMenu ) CheckBob(DeltaTime, Speed2D, Y); } else if ( !bShowMenu ) { BobTime = 0; WalkBob = WalkBob * (1 - FMin(1, 8 * deltatime)); } // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if ( bPressedJump && (AnimGroupName == 'Dodge') ) { bSaveJump = true; bPressedJump = false; } else bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { local vector x,y,z; Super.ProcessMove(DeltaTime, NewAccel, DodgeMove, DeltaRot); switch(MatrixMove) { case MM_Wallrun: SetPhysics(PHYS_Flying); GotoState('WallWalk'); break; case MM_DodgeFront: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*X + (Velocity Dot Y)*Y; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeBack: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*X + (Velocity Dot Y)*Y; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeLeft: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeRight: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_LowTwistLeft: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_LowTwistRight: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; } } } // ---------------------------------------------------------- // State MMMoves, parent state // ---------------------------------------------------------- State MMMoves { function ShakeView( float shaketime, float RollMag, float vertmag) { } exec function FeignDeath() { } function ServerFeignDeath() { } function PlayerMove(float DeltaTime) { } event PlayerTick( float DeltaTime ) { if ( bUpdatePosition ) ClientUpdatePosition(); PlayerMove(DeltaTime); } // Ugly hack but I guess there's no other way function ServerMove ( float TimeStamp, vector InAccel, vector ClientLoc, bool NewbRun, bool NewbDuck, bool NewbJumpStatus, bool bFired, bool bAltFired, bool bForceFire, bool bForceAltFire, eDodgeDir DodgeMove, byte ClientRoll, int View, optional byte OldTimeDelta, optional int OldAccel ) { local float DeltaTime, clientErr, OldTimeStamp; local rotator DeltaRot, Rot; local vector Accel, LocDiff; local int maxPitch, ViewPitch, ViewYaw; local actor OldBase; local bool NewbPressedJump, OldbRun, OldbDuck; local eDodgeDir OldDodgeMove; // If this move is outdated, discard it. if ( CurrentTimeStamp >= TimeStamp ) return; // if OldTimeDelta corresponds to a lost packet, process it first if ( OldTimeDelta != 0 ) { OldTimeStamp = TimeStamp - float(OldTimeDelta)/500 - 0.001; if ( CurrentTimeStamp < OldTimeStamp - 0.001 ) { // split out components of lost move (approx) Accel.X = OldAccel >>> 23; if ( Accel.X > 127 ) Accel.X = -1 * (Accel.X - 128); Accel.Y = (OldAccel >>> 15) & 255; if ( Accel.Y > 127 ) Accel.Y = -1 * (Accel.Y - 128); Accel.Z = (OldAccel >>> 7) & 255; if ( Accel.Z > 127 ) Accel.Z = -1 * (Accel.Z - 128); Accel *= 20; OldbRun = ( (OldAccel & 64) != 0 ); OldbDuck = ( (OldAccel & 32) != 0 ); NewbPressedJump = ( (OldAccel & 16) != 0 ); if ( NewbPressedJump ) bJumpStatus = NewbJumpStatus; switch (OldAccel & 7) { case 0: OldDodgeMove = DODGE_None; break; case 1: OldDodgeMove = DODGE_Left; break; case 2: OldDodgeMove = DODGE_Right; break; case 3: OldDodgeMove = DODGE_Forward; break; case 4: OldDodgeMove = DODGE_Back; break; } MoveAutonomous(OldTimeStamp - CurrentTimeStamp, OldbRun, OldbDuck, NewbPressedJump, OldDodgeMove, Accel, rot(0,0,0)); CurrentTimeStamp = OldTimeStamp; } } // View components ViewPitch = View/32768; ViewYaw = 2 * (View - 32768 * ViewPitch); ViewPitch *= 2; // Make acceleration. Accel = InAccel/10; NewbPressedJump = (bJumpStatus != NewbJumpStatus); bJumpStatus = NewbJumpStatus; // handle firing and alt-firing if ( bFired ) { if ( bForceFire && (Weapon != None) ) Weapon.ForceFire(); else if ( bFire == 0 ) Fire(0); bFire = 1; } else bFire = 0; if ( bAltFired ) { if ( bForceAltFire && (Weapon != None) ) Weapon.ForceAltFire(); else if ( bAltFire == 0 ) AltFire(0); bAltFire = 1; } else bAltFire = 0; // Save move parameters. DeltaTime = TimeStamp - CurrentTimeStamp; if ( ServerTimeStamp > 0 ) { // allow 1% error TimeMargin += DeltaTime - 1.01 * (Level.TimeSeconds - ServerTimeStamp); if ( TimeMargin > MaxTimeMargin ) { // player is too far ahead TimeMargin -= DeltaTime; if ( TimeMargin < 0.5 ) MaxTimeMargin = Default.MaxTimeMargin; else MaxTimeMargin = 0.5; DeltaTime = 0; } } CurrentTimeStamp = TimeStamp; ServerTimeStamp = Level.TimeSeconds; Rot.Roll = 256 * ClientRoll; Rot.Yaw = ViewYaw; if ( (Physics == PHYS_Swimming) || (Physics == PHYS_Flying) ) maxPitch = 2; else maxPitch = 1; If ( (ViewPitch > maxPitch * RotationRate.Pitch) && (ViewPitch < 65536 - maxPitch * RotationRate.Pitch) ) { If (ViewPitch < 32768) Rot.Pitch = maxPitch * RotationRate.Pitch; else Rot.Pitch = 65536 - maxPitch * RotationRate.Pitch; } else Rot.Pitch = ViewPitch; // MM, bigger pitch needed if(MatrixMove == MM_Wallrun || MatrixMove == MM_AirBackRoll || MatrixMove == MM_DodgeFront || MatrixMove == MM_Dodgeback) { Rot.Pitch = ViewPitch; } DeltaRot = (Rotation - Rot); ViewRotation.Pitch = ViewPitch; ViewRotation.Yaw = ViewYaw; ViewRotation.Roll = Rot.Roll; // ViewRotation.Roll = 0; SetRotation(Rot); OldBase = Base; // Perform actual movement. if ( (Level.Pauser == "") && (DeltaTime > 0) ) MoveAutonomous(DeltaTime, NewbRun, NewbDuck, NewbPressedJump, DodgeMove, Accel, DeltaRot); // Accumulate movement error. if ( Level.TimeSeconds - LastUpdateTime > 500.0/Player.CurrentNetSpeed ) ClientErr = 10000; else if ( Level.TimeSeconds - LastUpdateTime > 180.0/Player.CurrentNetSpeed ) { LocDiff = Location - ClientLoc; ClientErr = LocDiff Dot LocDiff; } // If client has accumulated a noticeable positional error, correct him. if ( ClientErr > 3 ) { if ( Mover(Base) != None ) ClientLoc = Location - Base.Location; else ClientLoc = Location; LastUpdateTime = Level.TimeSeconds; ClientAdjustPosition ( TimeStamp, GetStateName(), Physics, ClientLoc.X, ClientLoc.Y, ClientLoc.Z, Velocity.X, Velocity.Y, Velocity.Z, Base ); } } } // ---------------------------------------------------------- // State wallwalk, used when running up the wall // ---------------------------------------------------------- State WallWalk expands MMMoves { ignores SeePlayer, HearNoise, Bump; function DoJump( optional float F ) { Dodgedir = DODGE_Right; } function Timer() { Dodgedir = DODGE_Left; } function Dodge(eDodgeDir DodgeMove) { local vector wx,wy,wz; if(DodgeMove == DODGE_Left) { MatrixMove = MM_None; SetPhysics(PHYS_Falling); Gotostate('Playerwalking'); } // Airbackroll else if(DodgeMove == DODGE_Right) { MatrixMove = MM_AirbackRoll; GetAxes(Rotation,wx,wy,wz); Velocity = wz*1000; AfterGlideVector = wz; PassedRotTime = 0; RotDegrees = 0; PlayInAir(); Gotostate('MMRoll'); } DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } // always run straight function PlayRunning() { if(Weapon.bPointing) { if (Weapon.Mass < 20) LoopAnim('RunSMFR'); else LoopAnim('RunLGFR'); } else { if (Weapon.Mass < 20) LoopAnim('RunSM'); else LoopAnim('RunLG'); } } function Landed(vector HitNormal) { Global.Landed(HitNormal); Dodgedir = DODGE_Left; } function ZoneChange( ZoneInfo NewZone ) { if (NewZone.bWaterZone) { MatrixMove = MM_None; setPhysics(PHYS_Swimming); GotoState('PlayerSwimming'); } } function AnimEnd() { if(Health > 0) PlayRunning(); } function UpdateRotation(float DeltaTime, float maxPitch) { local rotator R; local float view_yaw, newwall_yaw; local vector Hitloc1, HitNorm1,X,Y,Z; GetAxes(Rotation,X,Y,Z); // get rotation of wall if(WallRunDir == WD_Left || WallRunDir == WD_Left1st || WallRunDir == WD_Right || WallRunDir == WD_Right1st) { Trace(HitLoc1, HitNorm1, Location+X*50-Z*90,Location); HitNorm1.X = HitNorm1.X * -1; HitNorm1.Y = HitNorm1.Y * -1; newwall_yaw = (CalcWallRotation(HitNorm1)/360) * 65535; if(newwall_yaw != WallRot) WallRot = newwall_yaw; } // going right switch(WallRunDir) { case WD_Right1st: WallrunDir = WD_Right; ViewRotation.Yaw = (Wallrot + ROT90); ViewRotation.Pitch = 0; ViewRotation.Roll = 6000; r.pitch = 500; r.yaw = Wallrot + ROT90+500; r.roll = ROT90+500; break; case WD_Right: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; ViewRotation.Roll = 6000; If ((ViewRotation.Pitch > 18000) && (ViewRotation.Pitch < 49152)) { If (aLookUp > 0) ViewRotation.Pitch = 18000; else ViewRotation.Pitch = 49152; } view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, (Wallrot+ROT90) & 65535, ROT90); r.pitch = 0; r.yaw = Wallrot + ROT90; r.roll = ROT90; break; case WD_Left1st: WallrunDir = WD_Left; ViewRotation.Yaw = (Wallrot - ROT90); ViewRotation.Pitch = 0; ViewRotation.Roll = ROT360-6000; r.pitch = 500; r.yaw = WallRot - ROT90+500; r.roll = ROT270+500; break; case WD_Left: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; ViewRotation.Roll = ROT360-6000; If ((ViewRotation.Pitch > 18000) && (ViewRotation.Pitch < 49152)) { If (aLookUp > 0) ViewRotation.Pitch = 18000; else ViewRotation.Pitch = 49152; } view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, (Wallrot-ROT90) & 65535, ROT90); r.pitch = 1000; r.yaw = WallRot - ROT90; r.roll = ROT270; break; case WD_Up1st: WallrunDir = WD_Up; ViewRotation.Yaw = Wallrot; ViewRotation.Pitch = ROT90 + 500; ViewRotation.Roll = 0; r.pitch = ROT90+500; r.yaw = Wallrot+500; r.roll = 500; break; case WD_Up: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; if(ViewRotation.Pitch > ROT270 || ViewRotation.Pitch < ROT90) ViewRotation.Pitch = ROT90 + 100; else if(ViewRotation.Pitch > 42000 && ViewRotation.Pitch < ROT270) ViewRotation.Pitch = 42000; view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, Wallrot & 65535, ROT90); r.pitch = ROT90; r.yaw = ViewRotation.Yaw; r.roll = ViewRotation.Roll; break; case WD_Down1st: WallrunDir = WD_Down; ViewRotation.Yaw = Wallrot-ROT180-600; ViewRotation.Pitch = ROT270+500; ViewRotation.Roll = 1000; r.pitch = ROT270+500; r.yaw = WallRot-ROT180+500; r.roll = 500; break; case WD_Down: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; if(ViewRotation.Pitch > 0 && ViewRotation.Pitch < ROT90) ViewRotation.Pitch = 0; else if(ViewRotation.Pitch < ROT180 && ViewRotation.Pitch > ROT90) ViewRotation.Pitch = ROT180; view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw,(Wallrot-ROT180) & 65535, ROT90); r.pitch = ROT270; r.yaw = WallRot-ROT180; r.roll = ViewRotation.Roll; break; } // ViewShake(deltaTime); ViewFlash(deltaTime); setRotation(r); } function HandleViewYaw(float newyaw, float b, float MaxDifference) { local float Diff; local int Direction; newyaw = newyaw & 65535; b = b & 65535; if(newyaw > b) { Diff = Abs(newyaw-b); if(Diff > ROT180) { Diff = b+ROT360-newyaw; Direction = -1; } else Direction = 1; } else if(newyaw < b) { Diff = Abs(b-newyaw); if(Diff > ROT180) { Diff = newyaw+ROT360-b; Direction = 1; } else Direction = -1; } else Diff = 0; if(Diff > MaxDifference) { if(Direction == 1) ViewRotation.Yaw = b + ROT90; else ViewRotation.Yaw = b - ROT90; } else ViewRotation.Yaw = newyaw; } function PlayerMove( float DeltaTime ) { local vector wX,wY,wZ, NewAccel; local rotator OldRotation; local bool bSaveJump; local eDodgeDir DodgeMove; aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; GetAxes(Rotation,wx,wy,wz); if(aStrafe != 0) { NewAccel = wx * 280; if(aStrafe > 0) // Right { if(WallrunDir == WD_Left) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Right) WallRunDir = WD_Right1st; } else if(aStrafe < 0) // Left { if(WallrunDir == WD_Right) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Left) WallRunDir = WD_Left1st; } } else if(aForward > 0) { NewAccel = vect(0,0,1) * 280; if(WallrunDir == WD_Down) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Up) WallRunDir = WD_Up1st; } else if(aForward < 0) { NewAccel = vect(0,0,-1) * 280; if(WallrunDir == WD_Up) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Down) WallRunDir = WD_Down1st; } else Dodgedir = DODGE_Left; // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if(bDuck != 0 || Dodgedir != DODGE_None && DodgeDir < DODGE_Active || FastTrace(Location-wz*50,Location) ) { if(Dodgedir != DODGE_None) DodgeMove = Dodgedir; else DodgeMove = DODGE_Left; } bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { if (bPressedJump) DoJump(); if (DodgeMove != DODGE_None && DodgeMove < DODGE_Active) Dodge(DodgeMove); else { Velocity = NewAccel * 6 * WallRunSpeed; Acceleration = Velocity * WallRunSpeed; } } function BeginState() { local Rotator R; WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; r.pitch = 16384; r.yaw = ViewRotation.Yaw; r.roll = ViewRotation.Roll; SetRotation(R); } } // ---------------------------------------------------------- // State MMRoll // ---------------------------------------------------------- State MMRoll expands MMMoves { ignores SeePlayer, HearNoise, Bump; function BeginState() { WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; PlayInAir(); } function DoJump( optional float F ) { } function AnimEnd() { if(Health > 0) PlayInAir(); } function Dodge(eDodgeDir DodgeMove) { } function UpdateRotation(float DeltaTime, float maxPitch) { local rotator newRotation,r; local vector wX,wY,wZ; local float i; switch(MatrixMove) { case MM_Airbackroll: PassedRotTime += DeltaTime; r = ViewRotation; I = (ROT270-RotDegrees) * (DeltaTime / (AIRBACKFLIP_TIME-PassedRotTime)); if(PassedRotTime < AIRBACKFLIP_TIME && (I + RotDegrees) < ROT270 && ViewRotation.Pitch > ROT90 && ViewRotation.Pitch < ROT360) { RotDegrees += i; r.pitch += i; r.Pitch = r.Pitch & 65535; NewRotation = R; ViewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; } break; case MM_DodgeFront: case MM_DodgeBack: case MM_DodgeLeft: case MM_dodgeRight: PassedRotTime += DeltaTime; R = ViewRotation; I = (ROT360-RotDegrees) * (DeltaTime / (DODGE_ROTTIME-PassedRotTime)); if(PassedRotTime < DODGE_ROTTIME && (I + RotDegrees) < ROT360) { RotDegrees += i; if (MatrixMove == MM_DodgeFront) r.Pitch -= i; else if (MatrixMove == MM_DodgeBack) r.Pitch += i; else if (MatrixMove == MM_DodgeLeft) r.Roll += i; else r.Roll -= i; r.Pitch = r.Pitch & 65535; r.Roll = r.Roll & 65535; NewRotation = R; ViewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; PlayLanded(0); } break; case MM_LowTwistLeft: case MM_LowTwistRight: PassedRotTime += DeltaTime; R = ViewRotation; I = (Rot360-RotDegrees) * (DeltaTime / (LOWTWISTTIME-PassedRotTime)); if(PassedRotTime < LOWTWISTTIME && (I + RotDegrees) < ROT360) { RotDegrees += i; if (MatrixMove == MM_LowTwistRight) r.Yaw += i; else r.Yaw -= i; r.Yaw = r.Yaw & 65535; ViewRotation = R; NewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; PlayLanded(0); } break; } // ViewShake(deltaTime); ViewFlash(deltaTime); setRotation(newRotation); } function PlayerMove(float DeltaTime) { local vector wX,wY,wZ, NewAccel; local EDodgeDir OldDodge; local eDodgeDir DodgeMove; local rotator OldRotation; local bool bSaveJump; aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; switch(MatrixMove) { case MM_LowTwistLeft: case MM_LowTwistRight: NewAccel = AfterGlideVector * 230; if (bDuck == 0) MatrixMove = MM_None; break; case MM_Airbackroll: NewAccel = AfterGlideVector * 180; break; case MM_DodgeFront: case MM_Dodgeback: case MM_DodgeLeft: case MM_dodgeRight: NewAccel = AfterGlideVector * 200; break; } // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { Acceleration = Normal(NewAccel); Switch(MatrixMove) { case MM_LowTwistLeft: case MM_LowTwistRight: Velocity = Acceleration*350; break; case MM_AirBackroll: Velocity = AfterGlideVector*230; break; case MM_DodgeFront: case MM_DodgeBack: case MM_DodgeLeft: case MM_DodgeRight: Velocity = Acceleration*310; break; default: SetPhysics(PHYS_Falling); Gotostate('Playerwalking'); break; } } } // ---------------------------------------------------------- // State freezed // ---------------------------------------------------------- State Freezed { ignores SeePlayer, HearNoise, Bump; function BeginState() { WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; PlayInAir(); } function ShakeView( float shaketime, float RollMag, float vertmag) { } exec function FeignDeath() { } function ServerFeignDeath() { } function DoJump( optional float F ) { } function Dodge(eDodgeDir DodgeMove) { SetPhysics(PHYS_Falling); Velocity = AfterGlideVector; MatrixMove = MM_None; DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; Gotostate('Playerwalking'); } function Timer() { Dodgedir = DODGE_Back; } function AnimEnd() { if(Health > 0) PlayInAir(); } event PlayerTick( float DeltaTime ) { if ( bUpdatePosition ) ClientUpdatePosition(); PlayerMove(DeltaTime); } function PlayerMove( float DeltaTime ) { local vector NewAccel; local eDodgeDir DodgeMove; local rotator OldRotation; aLookup *= 0.24; aTurn *= 0.24; NewAccel = vect(0,0,1); if (bDuck == 0 || Dodgedir == DODGE_Back) DodgeMove = DODGE_Back; // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { if (DodgeMove != DODGE_None && DodgeMove < DODGE_Active) Dodge(DodgeMove); else { Acceleration = vect(0,0,1); Velocity = vect(0,0,1); } } } r.`+ S//============================================================================= // MM_ModMenuItem. //============================================================================= class MM_ModMenuItem expands UMenuModMenuItem; function Execute() { MenuItem.Owner.Root.CreateWindow(class'MM_ConfigWindow', 10, 10, 150, 100); } c fhj ?rf  E;0rf  ;Hrf  B;`rf  E;xrf  t;rf  u;[%;[,K}[w%;11z[y1u[w 1rufH[M 1wH*H[* g l X2i ]!є;aGնmo  l, _]MatrixMoves Beta 4`]Configure MatrixMovesH^//============================================================================= // MMTFemale1. //============================================================================= class MMTFemale1 expands MM_BaseFemale; C a -u]& ::$g:% ::$ o$W?633@ra::$ ],633?$ 3XVCHC?,?, 3 wMatrixMoves Playerclasses\CC?,?,?,?, 3  y* ^//============================================================================= // MMTFemale2. //============================================================================= class MMTFemale2 expands MM_BaseFemale; F fyT,:}:$ :}:$}R#?#? X//============================================================================= // MMTMale2. //============================================================================= class MMTMale2 expands MM_BaseMale; zG`.?G 4:P%hG<P?o:4ho:6?h,6?,66?,6?D?h,,6?,66?,6?D?h,,96?,66?,?,-gh,@%-Fh, %-Fh,%-F--Th, %r$ &r$ ,r$ ,r$ ,r$ h-g-F-Fr"hOG{,GOO?,@?, -F--T--T-p-u w*V:%U$$M-o+-r w*WBB:%X$U$vG?%vG?v??vG6P:T6P{[::$ ::$n,bn&On6 On6O6Pn66Pn66POS::$ ::$ ::$ ::$6POva=P6O6{66Pa+PVz v?%v-{-}-Ftv;C?N@F4C?|{N||=N?,w.*{ {ZGa6{6{6{666 BX//============================================================================= // MMPlayer. //============================================================================= class MMTMale1 expands MM_BaseMale; O//============================================================================= // MM_ConfigWindow. //============================================================================= class MM_ConfigWindow expands UWindowFramedWindow; function Created() { Super.Created(); SetSize(214, 200); WinLeft = (Root.WinWidth - WinWidth) / 2; WinTop = (Root.WinHeight - WinHeight) / 2; } | !?A $ Q//============================================================================= // MMTBoss. //============================================================================= class MMTBoss expands MM_BaseMale; simulated function PostBeginPlay() { FaceSkin=1; Default.FaceSkin=1; DefaultSkinName="BossSkins.Boss"; Default.DefaultSkinName = DefaultSkinName; Super.PostBeginPlay(); } static function SetMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum) { local string MeshName, SkinItem, SkinPackage; MeshName = SkinActor.GetItemName(string(SkinActor.Mesh)); SkinItem = SkinActor.GetItemName(SkinName); SkinPackage = Left(SkinName, Len(SkinName) - Len(SkinItem)); if(SkinPackage == "") { SkinPackage="BossSkins."; SkinName=SkinPackage$SkinName; } if( TeamNum != 255 ) { if(!SetSkinElement(SkinActor, 0, SkinName$"1T_"$String(TeamNum), default.DefaultSkinName$"1T_"$String(TeamNum))) { if(!SetSkinElement(SkinActor, 0, SkinName$"1", default.DefaultSkinName$"1")) { SetSkinElement(SkinActor, 0, default.DefaultSkinName$"1T_"$String(TeamNum), default.DefaultSkinName$"1T_"$String(TeamNum)); SkinName=default.DefaultSkinName; } } SetSkinElement(SkinActor, 1, SkinName$"2T_"$String(TeamNum), SkinName$"2T_"$String(TeamNum)); SetSkinElement(SkinActor, 2, SkinName$"3T_"$String(TeamNum), SkinName$"3T_"$String(TeamNum)); SetSkinElement(SkinActor, 3, SkinName$"4T_"$String(TeamNum), SkinName$"4T_"$String(TeamNum)); } else { if(!SetSkinElement(SkinActor, 0, SkinName$"1", default.DefaultSkinName)) SkinName=default.DefaultSkinName; SetSkinElement(SkinActor, 1, SkinName$"2", SkinName$"2"); SetSkinElement(SkinActor, 2, SkinName$"3", SkinName$"3"); SetSkinElement(SkinActor, 3, SkinName$"4", SkinName$"4"); } if( Pawn(SkinActor) != None ) Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(SkinName$"5Xan", class'Texture')); } G'3, C1A!fv!f',8. @?'C? Maximum wallrunning time=cSet maximum wallrunning time, use 0 for infinite time}%p'n's,$U L,',. @?'C?Maximum freeze time?cSet maximum freeze time in air, use 0 for infinite time}%p'n's,$U G,',t. A?'BAtWallrun speedC. %C?' BACU ;,Q. HB?'B?Q  Q cSet the speed of wallrunQo=@D=Q ;',/L. A?'@BALPlugins...I. B?'@BAIDefaultsG.  C?'@BAGSave/Exit~. (C\CA~$~4Version o, G v  A $ { rfV\CB }  Ql C?AA C?AAR C?RARA @ A ~ sp|1sr|s? Q  x _A W8-z^(U-'U::$] {{Z #=a @ ->t B EwErr $E |Lq.D  DBBCC  gq G~. g I@ $E k x Ro Q|  `j//============================================================================= // MM_PluginClientWindow. //============================================================================= class MM_PluginClientWindow expands UWindowDialogClientWindow; var UWindowCheckbox PluginBox[75]; var UWindowSmallCloseButton CloseButton; var UWindowLabelControl HText[4]; CONST MMCELLWIDTH = 180; CONST MMROWHEIGHT = 15; var int MMWinHeight; function Created() { local int j, RowY; local string s, Supported; MMWinHeight = 43; HText[0] = UMenuLabelControl(CreateWindow(class'UMenuLabelControl', 10, 3,MMCELLWIDTH, MMROWHEIGHT)); HText[0].SetText("MM additional playerclass support:"); HText[1] = UMenuLabelControl(CreateWindow(class'UMenuLabelControl', 10, 15,MMCELLWIDTH, MMROWHEIGHT)); HText[1].SetText("Only add support if you have installed"); HText[2] = UMenuLabelControl(CreateWindow(class'UMenuLabelControl', 10, 27,MMCELLWIDTH, MMROWHEIGHT)); HText[2].SetText("the additional player class to UT !"); for(j=0; j < 75; j++) { if (Len(class'MatrixMovesBeta4.MatrixMutator'.default.SupportedClasses[j]) == 0) break; else { S = Left(class'MatrixMovesBeta4.MatrixMutator'.default.SupportedClasses[j],25); PluginBox[j] = UWindowCheckbox(CreateControl(class'UWindowCheckbox',10, MMWinHeight, MMCELLWIDTH, MMROWHEIGHT)); PluginBox[j].SetText(S); MMWinHeight += (MMROWHEIGHT + 1); Supported = class'MatrixMovesBeta4.MatrixMutator'.default.UseInGame[j]; if(Supported == "1") PluginBox[j].bChecked = true; } } // Close button CloseButton = UWindowSmallCloseButton(CreateControl(class'UWindowSmallCloseButton', 150, MMWinHeight, 48, 16)); MMWinHeight += 20; Super.Created(); } function AfterCreate() { DesiredWidth = 200; DesiredHeight = MMWinHeight; } function CheckSupport(int iValue) { local class SupportedClass; local String ErrorString; if(PluginBox[iValue].bChecked && class'MatrixMovesBeta4.MatrixMutator'.default.UseInGame[iValue] == "0") { SupportedClass = class(DynamicLoadObject( class'MatrixMovesBeta4.MatrixMutator'.default.SupportedClasses[iValue], class'Class')); if(SupportedClass == none) { ErrorString = class'MatrixMovesBeta4.MatrixMutator'.default.SupportedClasses[iValue]; PluginBox[iValue].bChecked = false; MessageBox("Error","Error"@ErrorString@"not found!", MB_OK, MR_OK); } else { class'MatrixMovesBeta4.MatrixMutator'.default.UseInGame[iValue] = "1"; class'MatrixMovesBeta4.MatrixMutator'.static.staticsaveconfig(); } } else if(!PluginBox[iValue].bChecked && class'MatrixMovesBeta4.MatrixMutator'.default.UseInGame[iValue] == "1") { class'MatrixMovesBeta4.MatrixMutator'.default.UseInGame[iValue] = "0"; class'MatrixMovesBeta4.MatrixMutator'.static.staticsaveconfig(); } } function Notify(UWindowDialogControl C, byte E) { Super.Notify(C, E); switch(E) { case DE_Change: switch(C) { case PluginBox[0]: CheckSupport(0); break; case PluginBox[1]: CheckSupport(1); break; case PluginBox[2]: CheckSupport(2); break; case PluginBox[3]: CheckSupport(3); break; case PluginBox[4]: CheckSupport(4); break; case PluginBox[5]: CheckSupport(5); break; case PluginBox[6]: CheckSupport(6); break; case PluginBox[7]: CheckSupport(7); break; case PluginBox[8]: CheckSupport(8); break; case PluginBox[9]: CheckSupport(9); break; case PluginBox[10]: CheckSupport(10); break; case PluginBox[11]: CheckSupport(11); break; case PluginBox[12]: CheckSupport(12); break; case PluginBox[13]: CheckSupport(13); break; case PluginBox[14]: CheckSupport(14); break; case PluginBox[15]: CheckSupport(15); break; case PluginBox[16]: CheckSupport(16); break; case PluginBox[17]: CheckSupport(17); break; case PluginBox[18]: CheckSupport(18); break; case PluginBox[19]: CheckSupport(19); break; case PluginBox[20]: CheckSupport(20); break; case PluginBox[21]: CheckSupport(21); break; case PluginBox[22]: CheckSupport(22); break; case PluginBox[23]: CheckSupport(23); break; case PluginBox[24]: CheckSupport(24); break; case PluginBox[25]: CheckSupport(25); break; case PluginBox[26]: CheckSupport(26); break; case PluginBox[27]: CheckSupport(27); break; case PluginBox[28]: CheckSupport(28); break; case PluginBox[29]: CheckSupport(29); break; case PluginBox[30]: CheckSupport(30); break; case PluginBox[31]: CheckSupport(31); break; case PluginBox[32]: CheckSupport(32); break; case PluginBox[33]: CheckSupport(33); break; case PluginBox[34]: CheckSupport(34); break; case PluginBox[35]: CheckSupport(35); break; case PluginBox[36]: CheckSupport(36); break; case PluginBox[37]: CheckSupport(37); break; case PluginBox[38]: CheckSupport(38); break; case PluginBox[39]: CheckSupport(39); break; case PluginBox[40]: CheckSupport(40); break; case PluginBox[41]: CheckSupport(41); break; case PluginBox[42]: CheckSupport(42); break; case PluginBox[43]: CheckSupport(43); break; case PluginBox[44]: CheckSupport(44); break; case PluginBox[45]: CheckSupport(45); break; case PluginBox[46]: CheckSupport(46); break; case PluginBox[47]: CheckSupport(47); break; case PluginBox[48]: CheckSupport(48); break; case PluginBox[49]: CheckSupport(49); break; case PluginBox[50]: CheckSupport(50); break; case PluginBox[51]: CheckSupport(51); break; case PluginBox[52]: CheckSupport(52); break; case PluginBox[53]: CheckSupport(53); break; case PluginBox[54]: CheckSupport(54); break; case PluginBox[55]: CheckSupport(55); break; case PluginBox[56]: CheckSupport(56); break; case PluginBox[57]: CheckSupport(57); break; case PluginBox[58]: CheckSupport(58); break; case PluginBox[59]: CheckSupport(59); break; case PluginBox[60]: CheckSupport(60); break; case PluginBox[61]: CheckSupport(61); break; case PluginBox[62]: CheckSupport(62); break; case PluginBox[63]: CheckSupport(63); break; case PluginBox[64]: CheckSupport(64); break; case PluginBox[65]: CheckSupport(65); break; case PluginBox[66]: CheckSupport(66); break; case PluginBox[67]: CheckSupport(67); break; case PluginBox[68]: CheckSupport(68); break; case PluginBox[69]: CheckSupport(69); break; case PluginBox[70]: CheckSupport(70); break; case PluginBox[71]: CheckSupport(71); break; case PluginBox[72]: CheckSupport(72); break; case PluginBox[73]: CheckSupport(73); break; case PluginBox[74]: CheckSupport(74); break; } break; } } c X M* N S@?/pppWallrun:UnFreeze:UmSpeed:Ui F k],L?% 0[[L? 999 J x],L?% 0[[L? 999 K oN],LR?%R 0[[LR?R 999 L |%CUQ, M @U 2.50 3.00R 3.00Q ? N ~-m LL GL ;Q  O zAA`%=`,3` z'`(  E S ht `P ovCwo*so  (ws*w..s*w..s*..sg(..s*J%AJ,7J !J w b AJ  pG !nu $ fx//============================================================================= // MM_ConfigClientWindow. //============================================================================= class MM_ConfigClientWindow expands UWindowDialogClientWindow; var UWindowSmallButton CloseButton, DefaultButton, PluginButton; var UWindowEditControl WallrunEdit, FreezeEdit, DoubleJumpEdit; var UWindowHSliderControl WallrunSpeedSlider; var UWindowLabelControl WallRunSpeedText, WallrunSpeedvalue, VersionNum; function Created() { local int RowY; Super.Created(); class'MatrixMovesBeta4.MatrixMutator'.static.ValidateValues(); if(!bOnServerList('UBrowserMMb4DM')) InsertToServerList(self, 'UBrowserMMb4DM'); RowY = 56; // Wallrun max time WallrunEdit = UWindowEditControl(CreateControl(class'UWindowEditControl', 5, RowY, 155, 1)); WallrunEdit.SetText("Maximum wallrunning time"); WallrunEdit.SetHelpText("Set maximum wallrunning time, use 0 for infinite time"); WallrunEdit.SetFont(F_Normal); WallrunEdit.SetNumericOnly(True); WallrunEdit.SetNumericFloat(True); WallrunEdit.SetMaxLength(4); WallrunEdit.Align = TA_Left; WallRunEdit.SetValue(Left(string(class'MatrixMovesBeta4.MatrixMutator'.default.MaxWallRunTime), 4)); RowY += 22; // Freeze max time FreezeEdit = UWindowEditControl(CreateControl(class'UWindowEditControl', 5, RowY, 155, 1)); FreezeEdit.SetText("Maximum freeze time"); FreezeEdit.SetHelpText("Set maximum freeze time in air, use 0 for infinite time"); FreezeEdit.SetFont(F_Normal); FreezeEdit.SetNumericOnly(True); FreezeEdit.SetNumericFloat(True); FreezeEdit.SetMaxLength(4); FreezeEdit.Align = TA_Left; FreezeEdit.SetValue(Left(string(class'MatrixMovesBeta4.MatrixMutator'.default.MaxFreezeTime), 4)); RowY += 22; // Doublejump max time /* DoubleJumpEdit = UWindowEditControl(CreateControl(class'UWindowEditControl', 5, RowY, 155, 1)); DoubleJumpEdit.SetText("Delay between MatrixJumps"); DoubleJumpEdit.SetHelpText("Set delay time between MatrixJumps"); DoubleJumpEdit.SetFont(F_Normal); DoubleJumpEdit.SetNumericOnly(True); DoubleJumpEdit.SetNumericFloat(True); DoubleJumpEdit.SetMaxLength(4); DoubleJumpEdit.Align = TA_Left; DoubleJumpEdit.SetValue(Left(string(class'MatrixMovesBeta4.MatrixMutator'.default.DoubleJumpDelay), 4)); RowY += 22; */ // wallrun speed slider WallRunSpeedText = UWindowLabelControl(CreateControl(class'UWindowLabelControl', 25, RowY, 100, 16)); WallRunSpeedText.SetText("Wallrun speed"); WallrunSpeedvalue = UWindowLabelControl(CreateControl(class'UWindowLabelControl', 165, RowY, 40, 16)); WallrunSpeedvalue.SetText(Left(string(class'MatrixMovesBeta4.MatrixMutator'.default.WallRunSpeed),3)); WallrunSpeedSlider = UWindowHSliderControl(CreateControl(class'UWindowHSliderControl',50,RowY,100,1)); WallrunSpeedSlider.SetText(" "); WallrunSpeedSlider.sethelptext("Set the speed of wallrun"); WallrunSpeedSlider.SetRange(0.1,2,0.1); WallrunSpeedSlider.SetValue(class'MatrixMovesBeta4.MatrixMutator'.default.WallRunSpeed); RowY += 47; // Plugin button PluginButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', 24, RowY, 48, 16)); PluginButton.SetText("Plugins..."); // Default button DefaultButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', 81, RowY, 48, 16)); DefaultButton.SetText("Defaults"); // Close button CloseButton = UWindowSmallButton(CreateControl(class'UWindowSmallButton', 138, RowY, 48, 16)); CloseButton.SetText("Save/Exit"); // version num VersionNum = UWindowLabelControl(CreateControl(class'UWindowLabelControl', 0, 168, 220, 16)); VersionNum.Align = TA_Center; VersionNum.SetText("Version"@class'MatrixMovesBeta4.MatrixMutator'.default.VersionNumber@","@ class'MatrixMovesBeta4.MatrixMutator'.default.VersionDate); } function AfterCreate() { DesiredWidth = 220; DesiredHeight = 110; } function BeforePaint(Canvas C, float X, float Y) { WallrunEdit.SetSize(160, 1); WallrunEdit.WinLeft = 25; WallrunEdit.EditBoxWidth = 30; FreezeEdit.SetSize(160, 1); FreezeEdit.WinLeft = 25; FreezeEdit.EditBoxWidth = 30; DoubleJumpEdit.SetSize(160, 1); DoubleJumpEdit.WinLeft = 25; DoubleJumpEdit.EditBoxWidth = 30; } function Paint(Canvas C, float X, float Y) { Super.Paint(C, X, Y); DrawClippedTexture(C, 0, 1, Texture'MMLogo'); } function Notify(UWindowDialogControl C, byte E) { local MM_PluginFramedWindow PW; Super.Notify(C, E); switch(E) { case DE_Click: switch(C) { case PluginButton: PW = MM_PluginFramedWindow(Root.CreateWindow(class'MM_PluginFramedWindow', 80, 80, 300, 300, Self)); GetParent(class'UWindowFramedWindow').ShowModal(PW); break; case CloseButton: SaveSettings(); UWindowFramedWindow(GetParent(class'UWindowFramedWindow')).Close(); break; case DefaultButton: SetDefaults(); break; break; } case DE_Change: switch(C) { case WallrunEdit: WallRunChanged(); break; case FreezeEdit: FreezeChanged(); break; case DoubleJumpEdit: DoubleJumpChanged(); break; case WallrunSpeedSlider: WallrunSpeedChanged(); break; } } } function WallRunChanged() { if (float(WallRunEdit.GetValue()) < 0) WallRunEdit.SetValue("0"); else if (float(WallRunEdit.GetValue()) > 999) WallRunEdit.SetValue("999"); } function FreezeChanged() { if (float(FreezeEdit.GetValue()) < 0) FreezeEdit.SetValue("0"); else if (float(FreezeEdit.GetValue()) > 999) FreezeEdit.SetValue("999"); } function DoubleJumpChanged(){ if (float(DoubleJumpEdit.GetValue()) < 0) DoubleJumpEdit.SetValue("0"); else if (float(DoubleJumpEdit.GetValue()) > 999) DoubleJumpEdit.SetValue("999"); } function WallrunSpeedChanged() { WallrunSpeedvalue.SetText(Left(string(WallrunSpeedSlider.GetValue()),3)); } function SetDefaults() { WallRunEdit.SetValue("2.50"); FreezeEdit.SetValue("3.00"); DoubleJumpEdit.SetValue("3.00"); WallrunSpeedSlider.SetValue(1); } function SaveSettings() { class'MatrixMovesBeta4.MatrixMutator'.default.MaxWallRunTime = float(WallRunEdit.GetValue()); class'MatrixMovesBeta4.MatrixMutator'.default.MaxFreezeTime = float(FreezeEdit.GetValue()); class'MatrixMovesBeta4.MatrixMutator'.default.WallrunSpeed = WallrunSpeedSlider.GetValue(); class'MatrixMovesBeta4.MatrixMutator'.static.staticsaveconfig(); } // Server tab static function bool bOnServerList(name sGameName) { local int i; for (i=0;i<20;i++){ if (class'UBrowserMainClientWindow'.Default.ServerListNames[i] == sGameName){ return true; } } return false; } static function InsertToServerList(UWindowWindow CurrentWindow, name sGameName) { local int i; local UWindowWindow UW; if (CurrentWindow != None){ UW = CurrentWindow.Root.FindChildWindow(class'UMenuMenuBar', false); if (UW != None){ if (UMenuMultiplayerMenu(UMenuMenuBar(UW).Multiplayer) != None){ if (UMenuMultiplayerMenu(UMenuMenuBar(UW).Multiplayer).BrowserWindow != None){ UMenuMultiplayerMenu(UMenuMenuBar(UW).Multiplayer).BrowserWindow.Close(false); UMenuMultiplayerMenu(UMenuMenuBar(UW).Multiplayer).BrowserWindow = None; } } } } for (i=0;i<20;i++){ if (class'UBrowserMainClientWindow'.Default.ServerListNames[i] == ''){ class'UBrowserMainClientWindow'.Default.ServerListNames[i] = sGameName; class'UBrowserMainClientWindow'.SaveConfig(); class'UBrowserMainClientWindow'.static.StaticSaveConfig(); break; } } } }//============================================================================= // MM_BaseMale. // // MatrixMoves mutator beta 4 // by Tuomo 'Tuco' Korva & Heikki Korva / Reactor 4 // // EMAIL... reactor_4@hotmail.com // WWW..... http://www.planetunreal.com/reactor4 // // Copyright Reactor 4, 2000 // All rights reserved. //============================================================================= class MM_BaseMale expands TournamentMale; var enum EMove { MM_None, MM_Freeze, MM_Wallrun, MM_Airbackroll, MM_DodgeFront, MM_DodgeBack, MM_DodgeLeft, MM_DodgeRight, MM_LowTwistLeft, MM_LowTwistRight } MatrixMove; var enum EWallDir { WD_None, WD_Up, WD_Up1st, WD_Down, WD_Down1st, WD_Left, WD_Left1st, WD_Right, WD_Right1st } WallrunDir; var float MaxWallRunTime, MaxFreezeTime, WallRunSpeed; var int NumWallruns, NumFreezes, NumJumps, NumDodges; var vector AfterGlideVector; var rotator ViewRotBeforeRoll; var float RotDegrees, PassedRotTime, FreezeDisabledTime, WallRot; CONST ROT90 = 16384; CONST ROT180 = 32768; CONST ROT270 = 49152; CONST ROT360 = 65536; CONST AIRBACKFLIP_TIME = 1.1; CONST DODGE_ROTTIME = 0.8; CONST LOWTWISTTIME = 0.5; CONST CIRCLE_TIME = 1.5; replication { // Variables the server should send to the client. reliable if( Role == ROLE_Authority) MaxWallRunTime, MaxFreezeTime, WallRunSpeed; // Vars the client sends to the server. reliable if( Role 0) WallRot_Yaw = 90; else WallRot_Yaw = 270; } else { if(vNormal.Y == 0) { if(vNormal.X > 0) WallRot_Yaw = 0; else WallRot_Yaw= 180; } else { temp1 = vNormal.Y / vNormal.X; WallRot_Yaw = atan(temp1) * (180/Pi); if(vNormal.X < 0 && vNormal.Y > 0) WallRot_Yaw+= 180; else if(vNormal.X < 0 && vNormal.Y < 0) WallRot_Yaw += 180; else if(vNormal.X > 0 && vNormal.Y < 0) WallRot_Yaw += 360; } } return WallRot_Yaw; } // *************************************************************** state PlayerWalking { ignores SeePlayer, HearNoise, Bump; exec function Jump( optional float F ) { if ( !bShowMenu && (Level.Pauser == PlayerReplicationInfo.PlayerName) ) SetPause(False); else { bPressedJump = true; if(MatrixMove == MM_None) NumJumps++; } } function DoJump( optional float F ) { if(NumJumps == 1 && Physics == PHYS_Walking) { // High jump if(bDuck != 0 && MatrixMove == MM_None) { PlayInAir(); SetPhysics(PHYS_Falling); FreezeDisabledTime = 0.5; Velocity.Z = JumpZ*2.3; } else Super.DoJump(F); } // Double jump else if (MatrixMove == MM_None && NumJumps == 2) { Velocity.Z = JumpZ*1.4; MatrixMove = MM_None; } } function Dodge(eDodgeDir DodgeMove) { local vector X,Y,Z, HitLoc1,HitNorm1; local bool bDisableSnd; GetAxes(Rotation,X,Y,Z); if (bDuck != 0) { if(Physics == PHYS_Walking) { switch(DodgeMove) { case DODGE_Left: MatrixMove = MM_LowTwistLeft; AfterGlideVector = Y; NumDodges++; break; case DODGE_Right: MatrixMove = MM_LowTwistRight; AfterGlideVector = -Y; NumDodges++; break; } } else if(Physics == PHYS_Falling) { if(DodgeMove == DODGE_Back) { bDisableSnd = true; MatrixMove = MM_Freeze; NumFreezes++; AfterGlidevector = Velocity; if (MaxFreezeTime > 0) SetTimer(MaxFreezeTime,false); SetPhysics(PHYS_Flying); GotoState('Freezed'); } } } else { switch(DodgeMove) { case DODGE_Forward: if(NumWallruns == 0 && !FastTrace(Location+X*50,Location)) { Trace(HitLoc1, HitNorm1, Location+X*50,Location); HitNorm1.X = HitNorm1.X * -1; HitNorm1.Y = HitNorm1.Y * -1; WallRot = (CalcWallRotation(HitNorm1)/360) * 65535; AfterGlideVector = -HitNorm1; bDisableSnd = true; MatrixMove = MM_Wallrun; NumWallRuns++; WallrunDir = WD_None; if (MaxWallRunTime > 0) SetTimer(MaxWallRunTime,false); } else { if(NumDodges > 0) return; else { MatrixMove = MM_DodgeFront; AfterGlideVector = X; NumDodges++; } } break; case DODGE_Back: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeBack; AfterGlideVector = -X; NumDodges++; } break; case DODGE_Left: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeLeft; AfterGlideVector = Y; NumDodges++; } break; case DODGE_Right: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeRight; AfterGlideVector = -Y; NumDodges++; } break; } } if(!bDisableSnd) PlayOwnedSound(JumpSound, SLOT_Talk, 1.0, true, 800, 1.0 ); PassedRotTime = 0; RotDegrees = 0; } // Here we hack again... function PlayerMove( float DeltaTime ) { local vector X,Y,Z, NewAccel; local EDodgeDir OldDodge; local eDodgeDir DodgeMove; local rotator OldRotation; local float Speed2D; local bool bSaveJump; local name AnimGroupName; GetAxes(Rotation,X,Y,Z); aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; if(MatrixMove != MM_Freeze && FreezeDisabledTime > 0) FreezeDisabledTime -= DeltaTime; // Update acceleration. NewAccel = aForward*X + aStrafe*Y; NewAccel.Z = 0; // Check for Dodge move if ( DodgeDir == DODGE_Active ) DodgeMove = DODGE_Active; else DodgeMove = DODGE_None; if (DodgeClickTime > 0.0) { if ( DodgeDir < DODGE_Active ) { OldDodge = DodgeDir; DodgeDir = DODGE_None; if (bEdgeForward && bWasForward) DodgeDir = DODGE_Forward; if (bEdgeBack && bWasBack) DodgeDir = DODGE_Back; if (bEdgeLeft && bWasLeft) DodgeDir = DODGE_Left; if (bEdgeRight && bWasRight) DodgeDir = DODGE_Right; if ( DodgeDir == DODGE_None) DodgeDir = OldDodge; else if ( DodgeDir != OldDodge ) DodgeClickTimer = DodgeClickTime + 0.5 * DeltaTime; else DodgeMove = DodgeDir; } if (DodgeDir == DODGE_Done) { DodgeClickTimer -= DeltaTime; if (DodgeClickTimer < -0.35) { DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } } else if ((DodgeDir != DODGE_None) && (DodgeDir != DODGE_Active)) { DodgeClickTimer -= DeltaTime; if (DodgeClickTimer < 0) { DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } } } // Do freeze if(Physics != PHYS_Walking && bDuck != 0 && NumFreezes == 0 && FreezeDisabledTime <= 0) DodgeMove = DODGE_Back; AnimGroupName = GetAnimGroup(AnimSequence); if ( (Physics == PHYS_Walking) && (AnimGroupName != 'Dodge') ) { //if walking, look up/down stairs - unless player is rotating view if ( !bKeyboardLook && (bLook == 0) ) { if ( bLookUpStairs ) ViewRotation.Pitch = FindStairRotation(deltaTime); else if ( bCenterView ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; if (ViewRotation.Pitch > 32768) ViewRotation.Pitch -= 65536; ViewRotation.Pitch = ViewRotation.Pitch * (1 - 12 * FMin(0.0833, deltaTime)); if ( Abs(ViewRotation.Pitch) < 1000 ) ViewRotation.Pitch = 0; } } Speed2D = Sqrt(Velocity.X * Velocity.X + Velocity.Y * Velocity.Y); //add bobbing when walking if ( !bShowMenu ) CheckBob(DeltaTime, Speed2D, Y); } else if ( !bShowMenu ) { BobTime = 0; WalkBob = WalkBob * (1 - FMin(1, 8 * deltatime)); } // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if ( bPressedJump && (AnimGroupName == 'Dodge') ) { bSaveJump = true; bPressedJump = false; } else bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { local vector x,y,z; Super.ProcessMove(DeltaTime, NewAccel, DodgeMove, DeltaRot); switch(MatrixMove) { case MM_Wallrun: SetPhysics(PHYS_Flying); GotoState('WallWalk'); break; case MM_DodgeFront: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*X + (Velocity Dot Y)*Y; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeBack: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*X + (Velocity Dot Y)*Y; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeLeft: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeRight: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_LowTwistLeft: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_LowTwistRight: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; } } } // ---------------------------------------------------------- // State MMMoves, parent state // ---------------------------------------------------------- State MMMoves { function ShakeView( float shaketime, float RollMag, float vertmag) { } exec function FeignDeath() { } function ServerFeignDeath() { } function PlayerMove(float DeltaTime) { } event PlayerTick( float DeltaTime ) { if ( bUpdatePosition ) ClientUpdatePosition(); PlayerMove(DeltaTime); } // Ugly hack but I guess there's no other way function ServerMove ( float TimeStamp, vector InAccel, vector ClientLoc, bool NewbRun, bool NewbDuck, bool NewbJumpStatus, bool bFired, bool bAltFired, bool bForceFire, bool bForceAltFire, eDodgeDir DodgeMove, byte ClientRoll, int View, optional byte OldTimeDelta, optional int OldAccel ) { local float DeltaTime, clientErr, OldTimeStamp; local rotator DeltaRot, Rot; local vector Accel, LocDiff; local int maxPitch, ViewPitch, ViewYaw; local actor OldBase; local bool NewbPressedJump, OldbRun, OldbDuck; local eDodgeDir OldDodgeMove; // If this move is outdated, discard it. if ( CurrentTimeStamp >= TimeStamp ) return; // if OldTimeDelta corresponds to a lost packet, process it first if ( OldTimeDelta != 0 ) { OldTimeStamp = TimeStamp - float(OldTimeDelta)/500 - 0.001; if ( CurrentTimeStamp < OldTimeStamp - 0.001 ) { // split out components of lost move (approx) Accel.X = OldAccel >>> 23; if ( Accel.X > 127 ) Accel.X = -1 * (Accel.X - 128); Accel.Y = (OldAccel >>> 15) & 255; if ( Accel.Y > 127 ) Accel.Y = -1 * (Accel.Y - 128); Accel.Z = (OldAccel >>> 7) & 255; if ( Accel.Z > 127 ) Accel.Z = -1 * (Accel.Z - 128); Accel *= 20; OldbRun = ( (OldAccel & 64) != 0 ); OldbDuck = ( (OldAccel & 32) != 0 ); NewbPressedJump = ( (OldAccel & 16) != 0 ); if ( NewbPressedJump ) bJumpStatus = NewbJumpStatus; switch (OldAccel & 7) { case 0: OldDodgeMove = DODGE_None; break; case 1: OldDodgeMove = DODGE_Left; break; case 2: OldDodgeMove = DODGE_Right; break; case 3: OldDodgeMove = DODGE_Forward; break; case 4: OldDodgeMove = DODGE_Back; break; } MoveAutonomous(OldTimeStamp - CurrentTimeStamp, OldbRun, OldbDuck, NewbPressedJump, OldDodgeMove, Accel, rot(0,0,0)); CurrentTimeStamp = OldTimeStamp; } } // View components ViewPitch = View/32768; ViewYaw = 2 * (View - 32768 * ViewPitch); ViewPitch *= 2; // Make acceleration. Accel = InAccel/10; NewbPressedJump = (bJumpStatus != NewbJumpStatus); bJumpStatus = NewbJumpStatus; // handle firing and alt-firing if ( bFired ) { if ( bForceFire && (Weapon != None) ) Weapon.ForceFire(); else if ( bFire == 0 ) Fire(0); bFire = 1; } else bFire = 0; if ( bAltFired ) { if ( bForceAltFire && (Weapon != None) ) Weapon.ForceAltFire(); else if ( bAltFire == 0 ) AltFire(0); bAltFire = 1; } else bAltFire = 0; // Save move parameters. DeltaTime = TimeStamp - CurrentTimeStamp; if ( ServerTimeStamp > 0 ) { // allow 1% error TimeMargin += DeltaTime - 1.01 * (Level.TimeSeconds - ServerTimeStamp); if ( TimeMargin > MaxTimeMargin ) { // player is too far ahead TimeMargin -= DeltaTime; if ( TimeMargin < 0.5 ) MaxTimeMargin = Default.MaxTimeMargin; else MaxTimeMargin = 0.5; DeltaTime = 0; } } CurrentTimeStamp = TimeStamp; ServerTimeStamp = Level.TimeSeconds; Rot.Roll = 256 * ClientRoll; Rot.Yaw = ViewYaw; if ( (Physics == PHYS_Swimming) || (Physics == PHYS_Flying) ) maxPitch = 2; else maxPitch = 1; If ( (ViewPitch > maxPitch * RotationRate.Pitch) && (ViewPitch < 65536 - maxPitch * RotationRate.Pitch) ) { If (ViewPitch < 32768) Rot.Pitch = maxPitch * RotationRate.Pitch; else Rot.Pitch = 65536 - maxPitch * RotationRate.Pitch; } else Rot.Pitch = ViewPitch; // MM, bigger pitch needed if(MatrixMove == MM_Wallrun || MatrixMove == MM_AirBackRoll || MatrixMove == MM_DodgeFront || MatrixMove == MM_Dodgeback) { Rot.Pitch = ViewPitch; } DeltaRot = (Rotation - Rot); ViewRotation.Pitch = ViewPitch; ViewRotation.Yaw = ViewYaw; ViewRotation.Roll = Rot.Roll; // ViewRotation.Roll = 0; SetRotation(Rot); OldBase = Base; // Perform actual movement. if ( (Level.Pauser == "") && (DeltaTime > 0) ) MoveAutonomous(DeltaTime, NewbRun, NewbDuck, NewbPressedJump, DodgeMove, Accel, DeltaRot); // Accumulate movement error. if ( Level.TimeSeconds - LastUpdateTime > 500.0/Player.CurrentNetSpeed ) ClientErr = 10000; else if ( Level.TimeSeconds - LastUpdateTime > 180.0/Player.CurrentNetSpeed ) { LocDiff = Location - ClientLoc; ClientErr = LocDiff Dot LocDiff; } // If client has accumulated a noticeable positional error, correct him. if ( ClientErr > 3 ) { if ( Mover(Base) != None ) ClientLoc = Location - Base.Location; else ClientLoc = Location; LastUpdateTime = Level.TimeSeconds; ClientAdjustPosition ( TimeStamp, GetStateName(), Physics, ClientLoc.X, ClientLoc.Y, ClientLoc.Z, Velocity.X, Velocity.Y, Velocity.Z, Base ); } } } // ---------------------------------------------------------- // State wallwalk, used when running up the wall // ---------------------------------------------------------- State WallWalk expands MMMoves { ignores SeePlayer, HearNoise, Bump; function DoJump( optional float F ) { Dodgedir = DODGE_Right; } function Timer() { Dodgedir = DODGE_Left; } function Dodge(eDodgeDir DodgeMove) { local vector wx,wy,wz; if(DodgeMove == DODGE_Left) { MatrixMove = MM_None; SetPhysics(PHYS_Falling); Gotostate('Playerwalking'); } // Airbackroll else if(DodgeMove == DODGE_Right) { MatrixMove = MM_AirbackRoll; GetAxes(Rotation,wx,wy,wz); Velocity = wz*1000; AfterGlideVector = wz; PassedRotTime = 0; RotDegrees = 0; PlayInAir(); Gotostate('MMRoll'); } DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } // always run straight function PlayRunning() { if(Weapon.bPointing) { if (Weapon.Mass < 20) LoopAnim('RunSMFR'); else LoopAnim('RunLGFR'); } else { if (Weapon.Mass < 20) LoopAnim('RunSM'); else LoopAnim('RunLG'); } } function Landed(vector HitNormal) { Global.Landed(HitNormal); Dodgedir = DODGE_Left; } function ZoneChange( ZoneInfo NewZone ) { if (NewZone.bWaterZone) { MatrixMove = MM_None; setPhysics(PHYS_Swimming); GotoState('PlayerSwimming'); } } function AnimEnd() { if(Health > 0) PlayRunning(); } function UpdateRotation(float DeltaTime, float maxPitch) { local rotator R; local float view_yaw, newwall_yaw; local vector Hitloc1, HitNorm1,X,Y,Z; GetAxes(Rotation,X,Y,Z); // get rotation of wall if(WallRunDir == WD_Left || WallRunDir == WD_Left1st || WallRunDir == WD_Right || WallRunDir == WD_Right1st) { Trace(HitLoc1, HitNorm1, Location+X*50-Z*90,Location); HitNorm1.X = HitNorm1.X * -1; HitNorm1.Y = HitNorm1.Y * -1; newwall_yaw = (CalcWallRotation(HitNorm1)/360) * 65535; if(newwall_yaw != WallRot) WallRot = newwall_yaw; } // going right switch(WallRunDir) { case WD_Right1st: WallrunDir = WD_Right; ViewRotation.Yaw = (Wallrot + ROT90); ViewRotation.Pitch = 0; ViewRotation.Roll = 6000; r.pitch = 500; r.yaw = Wallrot + ROT90+500; r.roll = ROT90+500; break; case WD_Right: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; ViewRotation.Roll = 6000; If ((ViewRotation.Pitch > 18000) && (ViewRotation.Pitch < 49152)) { If (aLookUp > 0) ViewRotation.Pitch = 18000; else ViewRotation.Pitch = 49152; } view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, (Wallrot+ROT90) & 65535, ROT90); r.pitch = 0; r.yaw = Wallrot + ROT90; r.roll = ROT90; break; case WD_Left1st: WallrunDir = WD_Left; ViewRotation.Yaw = (Wallrot - ROT90); ViewRotation.Pitch = 0; ViewRotation.Roll = ROT360-6000; r.pitch = 500; r.yaw = WallRot - ROT90+500; r.roll = ROT270+500; break; case WD_Left: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; ViewRotation.Roll = ROT360-6000; If ((ViewRotation.Pitch > 18000) && (ViewRotation.Pitch < 49152)) { If (aLookUp > 0) ViewRotation.Pitch = 18000; else ViewRotation.Pitch = 49152; } view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, (Wallrot-ROT90) & 65535, ROT90); r.pitch = 1000; r.yaw = WallRot - ROT90; r.roll = ROT270; break; case WD_Up1st: WallrunDir = WD_Up; ViewRotation.Yaw = Wallrot; ViewRotation.Pitch = ROT90 + 500; ViewRotation.Roll = 0; r.pitch = ROT90+500; r.yaw = Wallrot+500; r.roll = 500; break; case WD_Up: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; if(ViewRotation.Pitch > ROT270 || ViewRotation.Pitch < ROT90) ViewRotation.Pitch = ROT90 + 100; else if(ViewRotation.Pitch > 42000 && ViewRotation.Pitch < ROT270) ViewRotation.Pitch = 42000; view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, Wallrot & 65535, ROT90); r.pitch = ROT90; r.yaw = ViewRotation.Yaw; r.roll = ViewRotation.Roll; break; case WD_Down1st: WallrunDir = WD_Down; ViewRotation.Yaw = Wallrot-ROT180-600; ViewRotation.Pitch = ROT270+500; ViewRotation.Roll = 1000; r.pitch = ROT270+500; r.yaw = WallRot-ROT180+500; r.roll = 500; break; case WD_Down: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; if(ViewRotation.Pitch > 0 && ViewRotation.Pitch < ROT90) ViewRotation.Pitch = 0; else if(ViewRotation.Pitch < ROT180 && ViewRotation.Pitch > ROT90) ViewRotation.Pitch = ROT180; view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw,(Wallrot-ROT180) & 65535, ROT90); r.pitch = ROT270; r.yaw = WallRot-ROT180; r.roll = ViewRotation.Roll; break; } // ViewShake(deltaTime); ViewFlash(deltaTime); setRotation(r); } function HandleViewYaw(float newyaw, float b, float MaxDifference) { local float Diff; local int Direction; newyaw = newyaw & 65535; b = b & 65535; if(newyaw > b) { Diff = Abs(newyaw-b); if(Diff > ROT180) { Diff = b+ROT360-newyaw; Direction = -1; } else Direction = 1; } else if(newyaw < b) { Diff = Abs(b-newyaw); if(Diff > ROT180) { Diff = newyaw+ROT360-b; Direction = 1; } else Direction = -1; } else Diff = 0; if(Diff > MaxDifference) { if(Direction == 1) ViewRotation.Yaw = b + ROT90; else ViewRotation.Yaw = b - ROT90; } else ViewRotation.Yaw = newyaw; } function PlayerMove( float DeltaTime ) { local vector wX,wY,wZ, NewAccel; local rotator OldRotation; local bool bSaveJump; local eDodgeDir DodgeMove; aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; GetAxes(Rotation,wx,wy,wz); if(aStrafe != 0) { NewAccel = wx * 280; if(aStrafe > 0) // Right { if(WallrunDir == WD_Left) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Right) WallRunDir = WD_Right1st; } else if(aStrafe < 0) // Left { if(WallrunDir == WD_Right) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Left) WallRunDir = WD_Left1st; } } else if(aForward > 0) { NewAccel = vect(0,0,1) * 280; if(WallrunDir == WD_Down) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Up) WallRunDir = WD_Up1st; } else if(aForward < 0) { NewAccel = vect(0,0,-1) * 280; if(WallrunDir == WD_Up) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Down) WallRunDir = WD_Down1st; } else Dodgedir = DODGE_Left; // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if(bDuck != 0 || Dodgedir != DODGE_None && DodgeDir < DODGE_Active || FastTrace(Location-wz*50,Location) ) { if(Dodgedir != DODGE_None) DodgeMove = Dodgedir; else DodgeMove = DODGE_Left; } bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { if (bPressedJump) DoJump(); if (DodgeMove != DODGE_None && DodgeMove < DODGE_Active) Dodge(DodgeMove); else { Velocity = NewAccel * 6 * WallRunSpeed; Acceleration = Velocity * WallRunSpeed; } } function BeginState() { local Rotator R; WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; r.pitch = 16384; r.yaw = ViewRotation.Yaw; r.roll = ViewRotation.Roll; SetRotation(R); } } // ---------------------------------------------------------- // State MMRoll // ---------------------------------------------------------- State MMRoll expands MMMoves { ignores SeePlayer, HearNoise, Bump; function BeginState() { WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; PlayInAir(); } function DoJump( optional float F ) { } function AnimEnd() { if(Health > 0) PlayInAir(); } function Dodge(eDodgeDir DodgeMove) { } function UpdateRotation(float DeltaTime, float maxPitch) { local rotator newRotation,r; local vector wX,wY,wZ; local float i; switch(MatrixMove) { case MM_Airbackroll: PassedRotTime += DeltaTime; r = ViewRotation; I = (ROT270-RotDegrees) * (DeltaTime / (AIRBACKFLIP_TIME-PassedRotTime)); if(PassedRotTime < AIRBACKFLIP_TIME && (I + RotDegrees) < ROT270 && ViewRotation.Pitch > ROT90 && ViewRotation.Pitch < ROT360) { RotDegrees += i; r.pitch += i; r.Pitch = r.Pitch & 65535; NewRotation = R; ViewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; } break; case MM_DodgeFront: case MM_DodgeBack: case MM_DodgeLeft: case MM_dodgeRight: PassedRotTime += DeltaTime; R = ViewRotation; I = (ROT360-RotDegrees) * (DeltaTime / (DODGE_ROTTIME-PassedRotTime)); if(PassedRotTime < DODGE_ROTTIME && (I + RotDegrees) < ROT360) { RotDegrees += i; if (MatrixMove == MM_DodgeFront) r.Pitch -= i; else if (MatrixMove == MM_DodgeBack) r.Pitch += i; else if (MatrixMove == MM_DodgeLeft) r.Roll += i; else r.Roll -= i; r.Pitch = r.Pitch & 65535; r.Roll = r.Roll & 65535; NewRotation = R; ViewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; PlayLanded(0); } break; case MM_LowTwistLeft: case MM_LowTwistRight: PassedRotTime += DeltaTime; R = ViewRotation; I = (Rot360-RotDegrees) * (DeltaTime / (LOWTWISTTIME-PassedRotTime)); if(PassedRotTime < LOWTWISTTIME && (I + RotDegrees) < ROT360) { RotDegrees += i; if (MatrixMove == MM_LowTwistRight) r.Yaw += i; else r.Yaw -= i; r.Yaw = r.Yaw & 65535; ViewRotation = R; NewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; PlayLanded(0); } break; } // ViewShake(deltaTime); ViewFlash(deltaTime); setRotation(newRotation); } function PlayerMove(float DeltaTime) { local vector wX,wY,wZ, NewAccel; local EDodgeDir OldDodge; local eDodgeDir DodgeMove; local rotator OldRotation; local bool bSaveJump; aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; switch(MatrixMove) { case MM_LowTwistLeft: case MM_LowTwistRight: NewAccel = AfterGlideVector * 230; if (bDuck == 0) MatrixMove = MM_None; break; case MM_Airbackroll: NewAccel = AfterGlideVector * 180; break; case MM_DodgeFront: case MM_Dodgeback: case MM_DodgeLeft: case MM_dodgeRight: NewAccel = AfterGlideVector * 200; break; } // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { Acceleration = Normal(NewAccel); Switch(MatrixMove) { case MM_LowTwistLeft: case MM_LowTwistRight: Velocity = Acceleration*350; break; case MM_AirBackroll: Velocity = AfterGlideVector*230; break; case MM_DodgeFront: case MM_DodgeBack: case MM_DodgeLeft: case MM_DodgeRight: Velocity = Acceleration*310; break; default: SetPhysics(PHYS_Falling); Gotostate('Playerwalking'); break; } } } // ---------------------------------------------------------- // State freezed // ---------------------------------------------------------- State Freezed { ignores SeePlayer, HearNoise, Bump; function BeginState() { WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; PlayInAir(); } function ShakeView( float shaketime, float RollMag, float vertmag) { } exec function FeignDeath() { } function ServerFeignDeath() { } function DoJump( optional float F ) { } function Dodge(eDodgeDir DodgeMove) { SetPhysics(PHYS_Falling); Velocity = AfterGlideVector; MatrixMove = MM_None; DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; Gotostate('Playerwalking'); } function Timer() { Dodgedir = DODGE_Back; } function AnimEnd() { if(Health > 0) PlayInAir(); } event PlayerTick( float DeltaTime ) { if ( bUpdatePosition ) ClientUpdatePosition(); PlayerMove(DeltaTime); } function PlayerMove( float DeltaTime ) { local vector NewAccel; local eDodgeDir DodgeMove; local rotator OldRotation; aLookup *= 0.24; aTurn *= 0.24; NewAccel = vect(0,0,1); if (bDuck == 0 || Dodgedir == DODGE_Back) DodgeMove = DODGE_Back; // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { if (DodgeMove != DODGE_None && DodgeMove < DODGE_Active) Dodge(DodgeMove); else { Acceleration = vect(0,0,1); Velocity = vect(0,0,1); } } } o//============================================================================= // MMDeathMatchPlus. //============================================================================= class MMb4DeathMatchPlus expands DeathMatchPlus; event InitGame(string Options, out string Error) { local MatrixMutator MM; local int pos; local string InOpt, LeftOpt, sLeft, SRight; local bool bMMFound, bMutFound; // add matrixmovesbeta4 if not already used InOpt = ParseOption( Options, "Mutator"); if ( InOpt != "" ) { while ( InOpt != "" ) { pos = InStr(InOpt,","); if ( pos > 0 ) { LeftOpt = Left(InOpt, pos); InOpt = Right(InOpt, Len(InOpt) - pos - 1); } else { LeftOpt = InOpt; InOpt = ""; } if (LeftOpt == "MatrixMovesBeta4.MatrixMutator") bMMFound = true; else bMutFound = true; } } if(!bMMFound){ pos = InStr(Options,"Mutator="); sLeft = Left(Options,pos+8); sRight = Mid(Options,(pos+8)); if(bMutFound) options = sLeft$"MatrixMovesBeta4.MatrixMutator,"$sRight; else options = sLeft$"MatrixMovesBeta4.MatrixMutator"$sRight; } Super.InitGame(Options, Error); }  180\  15[ D m6^ a-%n  P]MatrixMoves Beta 4 DM] ?3 `@,+%.  A@@4CpA%*MM additional playerclass support:&.  ApA4CpA&.Only add support if you have installed,.  AA4CpA,+the additional player class to UT !?%$?,Kg}? w%$n? w,?.  A?@4CpA? n@,&m? yzm1?-'?9s. C?@@BA@, C//============================================================================= // MM_BaseFemale. // // MatrixMoves mutator beta 4 // by Tuomo 'Tuco' Korva & Heikki Korva / Reactor 4 // // EMAIL... reactor_4@hotmail.com // WWW..... http://www.planetunreal.com/reactor4 // // Copyright Reactor 4, 2000 // All rights reserved. //============================================================================= class MM_BaseFemale expands TournamentFemale; var enum EMove { MM_None, MM_Freeze, MM_Wallrun, MM_Airbackroll, MM_DodgeFront, MM_DodgeBack, MM_DodgeLeft, MM_DodgeRight, MM_LowTwistLeft, MM_LowTwistRight } MatrixMove; var enum EWallDir { WD_None, WD_Up, WD_Up1st, WD_Down, WD_Down1st, WD_Left, WD_Left1st, WD_Right, WD_Right1st } WallrunDir; var float MaxWallRunTime, MaxFreezeTime, WallRunSpeed; var int NumWallruns, NumFreezes, NumJumps, NumDodges; var vector AfterGlideVector; var rotator ViewRotBeforeRoll; var float RotDegrees, PassedRotTime, FreezeDisabledTime, WallRot; CONST ROT90 = 16384; CONST ROT180 = 32768; CONST ROT270 = 49152; CONST ROT360 = 65536; CONST AIRBACKFLIP_TIME = 1.1; CONST DODGE_ROTTIME = 0.8; CONST LOWTWISTTIME = 0.5; CONST CIRCLE_TIME = 1.5; replication { // Variables the server should send to the client. reliable if( Role == ROLE_Authority) MaxWallRunTime, MaxFreezeTime, WallRunSpeed; // Vars the client sends to the server. reliable if( Role 0) WallRot_Yaw = 90; else WallRot_Yaw = 270; } else { if(vNormal.Y == 0) { if(vNormal.X > 0) WallRot_Yaw = 0; else WallRot_Yaw= 180; } else { temp1 = vNormal.Y / vNormal.X; WallRot_Yaw = atan(temp1) * (180/Pi); if(vNormal.X < 0 && vNormal.Y > 0) WallRot_Yaw+= 180; else if(vNormal.X < 0 && vNormal.Y < 0) WallRot_Yaw += 180; else if(vNormal.X > 0 && vNormal.Y < 0) WallRot_Yaw += 360; } } return WallRot_Yaw; } // *************************************************************** state PlayerWalking { ignores SeePlayer, HearNoise, Bump; exec function Jump( optional float F ) { if ( !bShowMenu && (Level.Pauser == PlayerReplicationInfo.PlayerName) ) SetPause(False); else { bPressedJump = true; if(MatrixMove == MM_None) NumJumps++; } } function DoJump( optional float F ) { if(NumJumps == 1 && Physics == PHYS_Walking) { // High jump if(bDuck != 0 && MatrixMove == MM_None) { PlayInAir(); SetPhysics(PHYS_Falling); FreezeDisabledTime = 0.5; Velocity.Z = JumpZ*2.3; } else Super.DoJump(F); } // Double jump else if (MatrixMove == MM_None && NumJumps == 2) { Velocity.Z = JumpZ*1.4; MatrixMove = MM_None; } } function Dodge(eDodgeDir DodgeMove) { local vector X,Y,Z, HitLoc1,HitNorm1; local bool bDisableSnd; GetAxes(Rotation,X,Y,Z); if (bDuck != 0) { if(Physics == PHYS_Walking) { switch(DodgeMove) { case DODGE_Left: MatrixMove = MM_LowTwistLeft; AfterGlideVector = Y; NumDodges++; break; case DODGE_Right: MatrixMove = MM_LowTwistRight; AfterGlideVector = -Y; NumDodges++; break; } } else if(Physics == PHYS_Falling) { if(DodgeMove == DODGE_Back) { bDisableSnd = true; MatrixMove = MM_Freeze; NumFreezes++; AfterGlidevector = Velocity; if (MaxFreezeTime > 0) SetTimer(MaxFreezeTime,false); SetPhysics(PHYS_Flying); GotoState('Freezed'); } } } else { switch(DodgeMove) { case DODGE_Forward: if(NumWallruns == 0 && !FastTrace(Location+X*50,Location)) { Trace(HitLoc1, HitNorm1, Location+X*50,Location); HitNorm1.X = HitNorm1.X * -1; HitNorm1.Y = HitNorm1.Y * -1; WallRot = (CalcWallRotation(HitNorm1)/360) * 65535; AfterGlideVector = -HitNorm1; bDisableSnd = true; MatrixMove = MM_Wallrun; NumWallRuns++; WallrunDir = WD_None; if (MaxWallRunTime > 0) SetTimer(MaxWallRunTime,false); } else { if(NumDodges > 0) return; else { MatrixMove = MM_DodgeFront; AfterGlideVector = X; NumDodges++; } } break; case DODGE_Back: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeBack; AfterGlideVector = -X; NumDodges++; } break; case DODGE_Left: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeLeft; AfterGlideVector = Y; NumDodges++; } break; case DODGE_Right: if(NumDodges > 0) return; else { MatrixMove = MM_DodgeRight; AfterGlideVector = -Y; NumDodges++; } break; } } if(!bDisableSnd) PlayOwnedSound(JumpSound, SLOT_Talk, 1.0, true, 800, 1.0 ); PassedRotTime = 0; RotDegrees = 0; } // Here we hack again... function PlayerMove( float DeltaTime ) { local vector X,Y,Z, NewAccel; local EDodgeDir OldDodge; local eDodgeDir DodgeMove; local rotator OldRotation; local float Speed2D; local bool bSaveJump; local name AnimGroupName; GetAxes(Rotation,X,Y,Z); aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; if(MatrixMove != MM_Freeze && FreezeDisabledTime > 0) FreezeDisabledTime -= DeltaTime; // Update acceleration. NewAccel = aForward*X + aStrafe*Y; NewAccel.Z = 0; // Check for Dodge move if ( DodgeDir == DODGE_Active ) DodgeMove = DODGE_Active; else DodgeMove = DODGE_None; if (DodgeClickTime > 0.0) { if ( DodgeDir < DODGE_Active ) { OldDodge = DodgeDir; DodgeDir = DODGE_None; if (bEdgeForward && bWasForward) DodgeDir = DODGE_Forward; if (bEdgeBack && bWasBack) DodgeDir = DODGE_Back; if (bEdgeLeft && bWasLeft) DodgeDir = DODGE_Left; if (bEdgeRight && bWasRight) DodgeDir = DODGE_Right; if ( DodgeDir == DODGE_None) DodgeDir = OldDodge; else if ( DodgeDir != OldDodge ) DodgeClickTimer = DodgeClickTime + 0.5 * DeltaTime; else DodgeMove = DodgeDir; } if (DodgeDir == DODGE_Done) { DodgeClickTimer -= DeltaTime; if (DodgeClickTimer < -0.35) { DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } } else if ((DodgeDir != DODGE_None) && (DodgeDir != DODGE_Active)) { DodgeClickTimer -= DeltaTime; if (DodgeClickTimer < 0) { DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } } } // Do freeze if(Physics != PHYS_Walking && bDuck != 0 && NumFreezes == 0 && FreezeDisabledTime <= 0) DodgeMove = DODGE_Back; AnimGroupName = GetAnimGroup(AnimSequence); if ( (Physics == PHYS_Walking) && (AnimGroupName != 'Dodge') ) { //if walking, look up/down stairs - unless player is rotating view if ( !bKeyboardLook && (bLook == 0) ) { if ( bLookUpStairs ) ViewRotation.Pitch = FindStairRotation(deltaTime); else if ( bCenterView ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; if (ViewRotation.Pitch > 32768) ViewRotation.Pitch -= 65536; ViewRotation.Pitch = ViewRotation.Pitch * (1 - 12 * FMin(0.0833, deltaTime)); if ( Abs(ViewRotation.Pitch) < 1000 ) ViewRotation.Pitch = 0; } } Speed2D = Sqrt(Velocity.X * Velocity.X + Velocity.Y * Velocity.Y); //add bobbing when walking if ( !bShowMenu ) CheckBob(DeltaTime, Speed2D, Y); } else if ( !bShowMenu ) { BobTime = 0; WalkBob = WalkBob * (1 - FMin(1, 8 * deltatime)); } // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if ( bPressedJump && (AnimGroupName == 'Dodge') ) { bSaveJump = true; bPressedJump = false; } else bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { local vector x,y,z; Super.ProcessMove(DeltaTime, NewAccel, DodgeMove, DeltaRot); switch(MatrixMove) { case MM_Wallrun: SetPhysics(PHYS_Flying); GotoState('WallWalk'); break; case MM_DodgeFront: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*X + (Velocity Dot Y)*Y; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeBack: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*X + (Velocity Dot Y)*Y; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeLeft: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_DodgeRight: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_LowTwistLeft: GetAxes(Rotation,X,Y,Z); Velocity = 1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; case MM_LowTwistRight: GetAxes(Rotation,X,Y,Z); Velocity = -1.5*GroundSpeed*Y + (Velocity Dot X)*X; Velocity.Z += 160; Gotostate('MMRoll'); break; } } } // ---------------------------------------------------------- // State MMMoves, parent state // ---------------------------------------------------------- State MMMoves { function ShakeView( float shaketime, float RollMag, float vertmag) { } exec function FeignDeath() { } function ServerFeignDeath() { } function PlayerMove(float DeltaTime) { } event PlayerTick( float DeltaTime ) { if ( bUpdatePosition ) ClientUpdatePosition(); PlayerMove(DeltaTime); } // Ugly hack but I guess there's no other way function ServerMove ( float TimeStamp, vector InAccel, vector ClientLoc, bool NewbRun, bool NewbDuck, bool NewbJumpStatus, bool bFired, bool bAltFired, bool bForceFire, bool bForceAltFire, eDodgeDir DodgeMove, byte ClientRoll, int View, optional byte OldTimeDelta, optional int OldAccel ) { local float DeltaTime, clientErr, OldTimeStamp; local rotator DeltaRot, Rot; local vector Accel, LocDiff; local int maxPitch, ViewPitch, ViewYaw; local actor OldBase; local bool NewbPressedJump, OldbRun, OldbDuck; local eDodgeDir OldDodgeMove; // If this move is outdated, discard it. if ( CurrentTimeStamp >= TimeStamp ) return; // if OldTimeDelta corresponds to a lost packet, process it first if ( OldTimeDelta != 0 ) { OldTimeStamp = TimeStamp - float(OldTimeDelta)/500 - 0.001; if ( CurrentTimeStamp < OldTimeStamp - 0.001 ) { // split out components of lost move (approx) Accel.X = OldAccel >>> 23; if ( Accel.X > 127 ) Accel.X = -1 * (Accel.X - 128); Accel.Y = (OldAccel >>> 15) & 255; if ( Accel.Y > 127 ) Accel.Y = -1 * (Accel.Y - 128); Accel.Z = (OldAccel >>> 7) & 255; if ( Accel.Z > 127 ) Accel.Z = -1 * (Accel.Z - 128); Accel *= 20; OldbRun = ( (OldAccel & 64) != 0 ); OldbDuck = ( (OldAccel & 32) != 0 ); NewbPressedJump = ( (OldAccel & 16) != 0 ); if ( NewbPressedJump ) bJumpStatus = NewbJumpStatus; switch (OldAccel & 7) { case 0: OldDodgeMove = DODGE_None; break; case 1: OldDodgeMove = DODGE_Left; break; case 2: OldDodgeMove = DODGE_Right; break; case 3: OldDodgeMove = DODGE_Forward; break; case 4: OldDodgeMove = DODGE_Back; break; } MoveAutonomous(OldTimeStamp - CurrentTimeStamp, OldbRun, OldbDuck, NewbPressedJump, OldDodgeMove, Accel, rot(0,0,0)); CurrentTimeStamp = OldTimeStamp; } } // View components ViewPitch = View/32768; ViewYaw = 2 * (View - 32768 * ViewPitch); ViewPitch *= 2; // Make acceleration. Accel = InAccel/10; NewbPressedJump = (bJumpStatus != NewbJumpStatus); bJumpStatus = NewbJumpStatus; // handle firing and alt-firing if ( bFired ) { if ( bForceFire && (Weapon != None) ) Weapon.ForceFire(); else if ( bFire == 0 ) Fire(0); bFire = 1; } else bFire = 0; if ( bAltFired ) { if ( bForceAltFire && (Weapon != None) ) Weapon.ForceAltFire(); else if ( bAltFire == 0 ) AltFire(0); bAltFire = 1; } else bAltFire = 0; // Save move parameters. DeltaTime = TimeStamp - CurrentTimeStamp; if ( ServerTimeStamp > 0 ) { // allow 1% error TimeMargin += DeltaTime - 1.01 * (Level.TimeSeconds - ServerTimeStamp); if ( TimeMargin > MaxTimeMargin ) { // player is too far ahead TimeMargin -= DeltaTime; if ( TimeMargin < 0.5 ) MaxTimeMargin = Default.MaxTimeMargin; else MaxTimeMargin = 0.5; DeltaTime = 0; } } CurrentTimeStamp = TimeStamp; ServerTimeStamp = Level.TimeSeconds; Rot.Roll = 256 * ClientRoll; Rot.Yaw = ViewYaw; if ( (Physics == PHYS_Swimming) || (Physics == PHYS_Flying) ) maxPitch = 2; else maxPitch = 1; If ( (ViewPitch > maxPitch * RotationRate.Pitch) && (ViewPitch < 65536 - maxPitch * RotationRate.Pitch) ) { If (ViewPitch < 32768) Rot.Pitch = maxPitch * RotationRate.Pitch; else Rot.Pitch = 65536 - maxPitch * RotationRate.Pitch; } else Rot.Pitch = ViewPitch; // MM, bigger pitch needed if(MatrixMove == MM_Wallrun || MatrixMove == MM_AirBackRoll || MatrixMove == MM_DodgeFront || MatrixMove == MM_Dodgeback) { Rot.Pitch = ViewPitch; } DeltaRot = (Rotation - Rot); ViewRotation.Pitch = ViewPitch; ViewRotation.Yaw = ViewYaw; ViewRotation.Roll = Rot.Roll; // ViewRotation.Roll = 0; SetRotation(Rot); OldBase = Base; // Perform actual movement. if ( (Level.Pauser == "") && (DeltaTime > 0) ) MoveAutonomous(DeltaTime, NewbRun, NewbDuck, NewbPressedJump, DodgeMove, Accel, DeltaRot); // Accumulate movement error. if ( Level.TimeSeconds - LastUpdateTime > 500.0/Player.CurrentNetSpeed ) ClientErr = 10000; else if ( Level.TimeSeconds - LastUpdateTime > 180.0/Player.CurrentNetSpeed ) { LocDiff = Location - ClientLoc; ClientErr = LocDiff Dot LocDiff; } // If client has accumulated a noticeable positional error, correct him. if ( ClientErr > 3 ) { if ( Mover(Base) != None ) ClientLoc = Location - Base.Location; else ClientLoc = Location; LastUpdateTime = Level.TimeSeconds; ClientAdjustPosition ( TimeStamp, GetStateName(), Physics, ClientLoc.X, ClientLoc.Y, ClientLoc.Z, Velocity.X, Velocity.Y, Velocity.Z, Base ); } } } // ---------------------------------------------------------- // State wallwalk, used when running up the wall // ---------------------------------------------------------- State WallWalk expands MMMoves { ignores SeePlayer, HearNoise, Bump; function DoJump( optional float F ) { Dodgedir = DODGE_Right; } function Timer() { Dodgedir = DODGE_Left; } function Dodge(eDodgeDir DodgeMove) { local vector wx,wy,wz; if(DodgeMove == DODGE_Left) { MatrixMove = MM_None; SetPhysics(PHYS_Falling); Gotostate('Playerwalking'); } // Airbackroll else if(DodgeMove == DODGE_Right) { MatrixMove = MM_AirbackRoll; GetAxes(Rotation,wx,wy,wz); Velocity = wz*1000; AfterGlideVector = wz; PassedRotTime = 0; RotDegrees = 0; PlayInAir(); Gotostate('MMRoll'); } DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; } // always run straight function PlayRunning() { if(Weapon.bPointing) { if (Weapon.Mass < 20) LoopAnim('RunSMFR'); else LoopAnim('RunLGFR'); } else { if (Weapon.Mass < 20) LoopAnim('RunSM'); else LoopAnim('RunLG'); } } function Landed(vector HitNormal) { Global.Landed(HitNormal); Dodgedir = DODGE_Left; } function ZoneChange( ZoneInfo NewZone ) { if (NewZone.bWaterZone) { MatrixMove = MM_None; setPhysics(PHYS_Swimming); GotoState('PlayerSwimming'); } } function AnimEnd() { if(Health > 0) PlayRunning(); } function UpdateRotation(float DeltaTime, float maxPitch) { local rotator R; local float view_yaw, newwall_yaw; local vector Hitloc1, HitNorm1,X,Y,Z; GetAxes(Rotation,X,Y,Z); // get rotation of wall if(WallRunDir == WD_Left || WallRunDir == WD_Left1st || WallRunDir == WD_Right || WallRunDir == WD_Right1st) { Trace(HitLoc1, HitNorm1, Location+X*50-Z*90,Location); HitNorm1.X = HitNorm1.X * -1; HitNorm1.Y = HitNorm1.Y * -1; newwall_yaw = (CalcWallRotation(HitNorm1)/360) * 65535; if(newwall_yaw != WallRot) WallRot = newwall_yaw; } // going right switch(WallRunDir) { case WD_Right1st: WallrunDir = WD_Right; ViewRotation.Yaw = (Wallrot + ROT90); ViewRotation.Pitch = 0; ViewRotation.Roll = 6000; r.pitch = 500; r.yaw = Wallrot + ROT90+500; r.roll = ROT90+500; break; case WD_Right: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; ViewRotation.Roll = 6000; If ((ViewRotation.Pitch > 18000) && (ViewRotation.Pitch < 49152)) { If (aLookUp > 0) ViewRotation.Pitch = 18000; else ViewRotation.Pitch = 49152; } view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, (Wallrot+ROT90) & 65535, ROT90); r.pitch = 0; r.yaw = Wallrot + ROT90; r.roll = ROT90; break; case WD_Left1st: WallrunDir = WD_Left; ViewRotation.Yaw = (Wallrot - ROT90); ViewRotation.Pitch = 0; ViewRotation.Roll = ROT360-6000; r.pitch = 500; r.yaw = WallRot - ROT90+500; r.roll = ROT270+500; break; case WD_Left: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; ViewRotation.Roll = ROT360-6000; If ((ViewRotation.Pitch > 18000) && (ViewRotation.Pitch < 49152)) { If (aLookUp > 0) ViewRotation.Pitch = 18000; else ViewRotation.Pitch = 49152; } view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, (Wallrot-ROT90) & 65535, ROT90); r.pitch = 1000; r.yaw = WallRot - ROT90; r.roll = ROT270; break; case WD_Up1st: WallrunDir = WD_Up; ViewRotation.Yaw = Wallrot; ViewRotation.Pitch = ROT90 + 500; ViewRotation.Roll = 0; r.pitch = ROT90+500; r.yaw = Wallrot+500; r.roll = 500; break; case WD_Up: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; if(ViewRotation.Pitch > ROT270 || ViewRotation.Pitch < ROT90) ViewRotation.Pitch = ROT90 + 100; else if(ViewRotation.Pitch > 42000 && ViewRotation.Pitch < ROT270) ViewRotation.Pitch = 42000; view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw, Wallrot & 65535, ROT90); r.pitch = ROT90; r.yaw = ViewRotation.Yaw; r.roll = ViewRotation.Roll; break; case WD_Down1st: WallrunDir = WD_Down; ViewRotation.Yaw = Wallrot-ROT180-600; ViewRotation.Pitch = ROT270+500; ViewRotation.Roll = 1000; r.pitch = ROT270+500; r.yaw = WallRot-ROT180+500; r.roll = 500; break; case WD_Down: ViewRotation.Pitch += 32.0 * DeltaTime * aLookUp; ViewRotation.Pitch = ViewRotation.Pitch & 65535; if(ViewRotation.Pitch > 0 && ViewRotation.Pitch < ROT90) ViewRotation.Pitch = 0; else if(ViewRotation.Pitch < ROT180 && ViewRotation.Pitch > ROT90) ViewRotation.Pitch = ROT180; view_yaw = ViewRotation.Yaw + 32.0 * DeltaTime * aTurn; HandleViewYaw(view_yaw,(Wallrot-ROT180) & 65535, ROT90); r.pitch = ROT270; r.yaw = WallRot-ROT180; r.roll = ViewRotation.Roll; break; } // ViewShake(deltaTime); ViewFlash(deltaTime); setRotation(r); } function HandleViewYaw(float newyaw, float b, float MaxDifference) { local float Diff; local int Direction; newyaw = newyaw & 65535; b = b & 65535; if(newyaw > b) { Diff = Abs(newyaw-b); if(Diff > ROT180) { Diff = b+ROT360-newyaw; Direction = -1; } else Direction = 1; } else if(newyaw < b) { Diff = Abs(b-newyaw); if(Diff > ROT180) { Diff = newyaw+ROT360-b; Direction = 1; } else Direction = -1; } else Diff = 0; if(Diff > MaxDifference) { if(Direction == 1) ViewRotation.Yaw = b + ROT90; else ViewRotation.Yaw = b - ROT90; } else ViewRotation.Yaw = newyaw; } function PlayerMove( float DeltaTime ) { local vector wX,wY,wZ, NewAccel; local rotator OldRotation; local bool bSaveJump; local eDodgeDir DodgeMove; aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; GetAxes(Rotation,wx,wy,wz); if(aStrafe != 0) { NewAccel = wx * 280; if(aStrafe > 0) // Right { if(WallrunDir == WD_Left) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Right) WallRunDir = WD_Right1st; } else if(aStrafe < 0) // Left { if(WallrunDir == WD_Right) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Left) WallRunDir = WD_Left1st; } } else if(aForward > 0) { NewAccel = vect(0,0,1) * 280; if(WallrunDir == WD_Down) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Up) WallRunDir = WD_Up1st; } else if(aForward < 0) { NewAccel = vect(0,0,-1) * 280; if(WallrunDir == WD_Up) Dodgedir = DODGE_Back; else if(WallRunDir != WD_Down) WallRunDir = WD_Down1st; } else Dodgedir = DODGE_Left; // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if(bDuck != 0 || Dodgedir != DODGE_None && DodgeDir < DODGE_Active || FastTrace(Location-wz*50,Location) ) { if(Dodgedir != DODGE_None) DodgeMove = Dodgedir; else DodgeMove = DODGE_Left; } bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { if (bPressedJump) DoJump(); if (DodgeMove != DODGE_None && DodgeMove < DODGE_Active) Dodge(DodgeMove); else { Velocity = NewAccel * 6 * WallRunSpeed; Acceleration = Velocity * WallRunSpeed; } } function BeginState() { local Rotator R; WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; r.pitch = 16384; r.yaw = ViewRotation.Yaw; r.roll = ViewRotation.Roll; SetRotation(R); } } // ---------------------------------------------------------- // State MMRoll // ---------------------------------------------------------- State MMRoll expands MMMoves { ignores SeePlayer, HearNoise, Bump; function BeginState() { WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; PlayInAir(); } function DoJump( optional float F ) { } function AnimEnd() { if(Health > 0) PlayInAir(); } function Dodge(eDodgeDir DodgeMove) { } function UpdateRotation(float DeltaTime, float maxPitch) { local rotator newRotation,r; local vector wX,wY,wZ; local float i; switch(MatrixMove) { case MM_Airbackroll: PassedRotTime += DeltaTime; r = ViewRotation; I = (ROT270-RotDegrees) * (DeltaTime / (AIRBACKFLIP_TIME-PassedRotTime)); if(PassedRotTime < AIRBACKFLIP_TIME && (I + RotDegrees) < ROT270 && ViewRotation.Pitch > ROT90 && ViewRotation.Pitch < ROT360) { RotDegrees += i; r.pitch += i; r.Pitch = r.Pitch & 65535; NewRotation = R; ViewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; } break; case MM_DodgeFront: case MM_DodgeBack: case MM_DodgeLeft: case MM_dodgeRight: PassedRotTime += DeltaTime; R = ViewRotation; I = (ROT360-RotDegrees) * (DeltaTime / (DODGE_ROTTIME-PassedRotTime)); if(PassedRotTime < DODGE_ROTTIME && (I + RotDegrees) < ROT360) { RotDegrees += i; if (MatrixMove == MM_DodgeFront) r.Pitch -= i; else if (MatrixMove == MM_DodgeBack) r.Pitch += i; else if (MatrixMove == MM_DodgeLeft) r.Roll += i; else r.Roll -= i; r.Pitch = r.Pitch & 65535; r.Roll = r.Roll & 65535; NewRotation = R; ViewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; PlayLanded(0); } break; case MM_LowTwistLeft: case MM_LowTwistRight: PassedRotTime += DeltaTime; R = ViewRotation; I = (Rot360-RotDegrees) * (DeltaTime / (LOWTWISTTIME-PassedRotTime)); if(PassedRotTime < LOWTWISTTIME && (I + RotDegrees) < ROT360) { RotDegrees += i; if (MatrixMove == MM_LowTwistRight) r.Yaw += i; else r.Yaw -= i; r.Yaw = r.Yaw & 65535; ViewRotation = R; NewRotation = R; } else { MatrixMove = MM_None; NewRotation = ViewRotation; PlayLanded(0); } break; } // ViewShake(deltaTime); ViewFlash(deltaTime); setRotation(newRotation); } function PlayerMove(float DeltaTime) { local vector wX,wY,wZ, NewAccel; local EDodgeDir OldDodge; local eDodgeDir DodgeMove; local rotator OldRotation; local bool bSaveJump; aForward *= 0.4; aStrafe *= 0.4; aLookup *= 0.24; aTurn *= 0.24; switch(MatrixMove) { case MM_LowTwistLeft: case MM_LowTwistRight: NewAccel = AfterGlideVector * 230; if (bDuck == 0) MatrixMove = MM_None; break; case MM_Airbackroll: NewAccel = AfterGlideVector * 180; break; case MM_DodgeFront: case MM_Dodgeback: case MM_DodgeLeft: case MM_dodgeRight: NewAccel = AfterGlideVector * 200; break; } // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); bSaveJump = false; if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); bPressedJump = bSaveJump; } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { Acceleration = Normal(NewAccel); Switch(MatrixMove) { case MM_LowTwistLeft: case MM_LowTwistRight: Velocity = Acceleration*350; break; case MM_AirBackroll: Velocity = AfterGlideVector*230; break; case MM_DodgeFront: case MM_DodgeBack: case MM_DodgeLeft: case MM_DodgeRight: Velocity = Acceleration*310; break; default: SetPhysics(PHYS_Falling); Gotostate('Playerwalking'); break; } } } // ---------------------------------------------------------- // State freezed // ---------------------------------------------------------- State Freezed { ignores SeePlayer, HearNoise, Bump; function BeginState() { WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; PlayInAir(); } function ShakeView( float shaketime, float RollMag, float vertmag) { } exec function FeignDeath() { } function ServerFeignDeath() { } function DoJump( optional float F ) { } function Dodge(eDodgeDir DodgeMove) { SetPhysics(PHYS_Falling); Velocity = AfterGlideVector; MatrixMove = MM_None; DodgeDir = DODGE_None; DodgeClickTimer = DodgeClickTime; Gotostate('Playerwalking'); } function Timer() { Dodgedir = DODGE_Back; } function AnimEnd() { if(Health > 0) PlayInAir(); } event PlayerTick( float DeltaTime ) { if ( bUpdatePosition ) ClientUpdatePosition(); PlayerMove(DeltaTime); } function PlayerMove( float DeltaTime ) { local vector NewAccel; local eDodgeDir DodgeMove; local rotator OldRotation; aLookup *= 0.24; aTurn *= 0.24; NewAccel = vect(0,0,1); if (bDuck == 0 || Dodgedir == DODGE_Back) DodgeMove = DODGE_Back; // Update rotation. OldRotation = Rotation; UpdateRotation(DeltaTime, 1); if ( Role < ROLE_Authority ) // then save this move and replicate it ReplicateMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); else ProcessMove(DeltaTime, NewAccel, DodgeMove, OldRotation - Rotation); } function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot) { if (DodgeMove != DODGE_None && DodgeMove < DODGE_Active) Dodge(DodgeMove); else { Acceleration = vect(0,0,1); Velocity = vect(0,0,1); } } } nI ]E( g +p[ L>6+?%06+?%CB;CCD|6+?%n6+?%CyC4CDp6+6+Cp?,I@6+?%6+?%C?,D6+?%6+?%C?,DD6+?%6+?%C?hC _ r6 HC?@ d B?WB-zB y0kB w rk*jB wB-(dErrorErrorjnot found!$$B y1 UUB-zB y1B y0  T SpawnClass, out string Portal, out string Options) { local class NewPlrClass; NewPlrClass = GetMMClass(SpawnClass); if(NewPlrClass != none) SpawnClass = NewPlrClass; if ( NextMutator != None ) NextMutator.ModifyLogin(SpawnClass, Portal, Options); } function class GetMMClass(class myPlrClass) { local class PluginClass, SupportedClass; local int j; if(myPlrClass == class'BotPack.Commander') return class'MatrixMovesBeta4.MMCommander'; else if(myPlrClass == class'BotPack.TBoss') return class'MatrixMovesBeta4.MMTBoss'; else if(myPlrClass == class'BotPack.TMale1') return class'MatrixMovesBeta4.MMTMale1'; else if(myPlrClass == class'BotPack.TMale2') return class'MatrixMovesBeta4.MMTMale2'; else if(myPlrClass == class'BotPack.TFemale1') return class'MatrixMovesBeta4.MMTFemale1'; else if(myPlrClass == class'BotPack.TFemale2') return class'MatrixMovesBeta4.MMTFemale2'; else { for(j=0; j( DynamicLoadObject(SupportedClasses[j], class'Class')); if (SupportedClass == myPlrClass) { PluginClass = class( DynamicLoadObject(PluginClasses[j], class'Class')); if (PluginClass != none) return PluginClass; } } } } return none; } h Y[b666666}::$ ::$Y j WH1$]%N%M%1%W e fwZ fNN $f 7%% K&& a,, w,, ,, ,, ,, ,, ,, , ,  , ,  ', ,  =, ,  S, ,  i,, ,, ,, ,, ,, ,, ,, ,, ,, /,, E,, [,, q,, ,, ,, ,, ,, ,, , ,  ,!,! !,"," 7,#,# M,$,$ c,%,% y,&,& ,',' ,(,( ,),) ,*,* ,+,+ ,,,, ,-,- ),.,. ?,/,/ U,0,0 k,1,1 ,2,2 ,3,3 ,4,4 ,5,5 ,6,6 ,7,7 ,8,8 ,9,9 1,:,: G,;,; ],<,< s,=,= ,>,> ,?,? ,@,@ ,A,A ,B,B ,C,C ,D,D #,E,E 9,F,F O,G,G e,H,H {,I,I ,J,J   }mdQmkX oHoUbH?DH=?D=H=TH=T?T=?HUU&H=T=HT?TH?=U&UTOTZ3U&6D=?@L6D=?@`6DH k< [ A ACB  v v uC uU P& uW uV PO fy mN v, uf uG uj fT vY my v mO fg uv uu ju jK uB FA uW uk jx uM u um fC ui vl uw kE jn jC j vK ue j{ iQ iL u` j vt vr j~ uL j} jF u~ N uN jG fW fR vm uS uR va un uF j} iz uY f) G uU ju uQ uC uK uF e5 vA v@ kv uN jy G mB G kN G jv kM k~ uO uh uT ig ug G* G! eJ G[ iY G G uF jD jU kD mh G. G" uD G G| G- Gd uD uQ uV G_ jb G[ G3 iO G] GI iL GJ uL iG k` uQ Gw je jd G3 kj kP G kp kG j~ ko u\ eX G kJ G` uR kL vs kI kH G hI k_ G_ iI GH il jc va[b kl GB uP kS ha kw G] Gu Gp Gr G] jh jf Gu G3 uO jl u][c[d uP G( GH vi m6 uZ iOE i~J G^ G~k ec G\ uo GQ uW gj u_ u[ u^ vX uY i1[3| v7{ GJ Gt uX ik u\ uX uV GqXqXpXoXmXa v{[%n\Gl\Gk[j[i[h[g[f[e gf G( gf uKypk|E0z|(SESO#S_/{oj{},{K5{Y%{g{uJt C(^P#^_E^nv_}v^ K#k XEk e(k rKM)u [%T hmu t5T AXu Mz ZT g sJf A#fNmK\(fj{ix)KaEfoXK}u KziWx@xxN#x\#ejo} x#h E#i Q(h ^(ej} x(i EEeREi `} mJdzEh H` Tux aR nx {+x HKZ UP bxy o,} {%w H#y U/} ajn } XS e+D q Z }y JK} Vs cD pj} |Z I} Vvacv`ruD @+r Lur Y/A fjA s,A @r M%F ZP g5F s%} @w{M{[Z i A v{CKA Q5} ^[ kYwF FA S} `mx m~zo~H/{V{ dj{qK{ ,{Ki Yo fXx s b@} N [ { h uKbBbP } ^ i k)x xyqEyt S~_Ki mK} zuq GwuSE aV nKV {{MHT VwKc#j qM}KE KvMX E fEj sq uKKY+q gMs(j AMM V [$MhKvuD(dRM`K@ nT {MG#sU#Rd @ s~ @ESM#S\@ k(Rx#dGEsU{~ d(Sq(s@n OEd\J` jERvv~ EZ{ R{ _{ loMyEc Gow T~aS oN|_@ Jo^ W,B c]pEb~Ka M} Z^ g]s] A~NM\} j$]w@ E$} Ro\_| moKz| HjB Tw| aw~ma {{} Hc~U} cw pKN}KK\Yv} g ~t]Bo]PK| ^{]kKS y~F~Tv]b/B p} }]J} X>@ eMr^ @ S L~Y] g Nt~B_ Pw ] | jI wF} DFMQF~_F] mJ z a G| T~`vd n#c {#bHKW\evcsTmAvn~}vrKZZv\i]x@Fv]U(c c(bpWKv M,x Zw g@s} AoQ Nw [~houvDKBa~o#H,},uiJR wKy DKO Qs^KCl/x z CG O U)vbO q>~~ BL%p Z%[f y uu Bw Nn[#} ikvwDvRvba[oC~H LL XK dw q(H,}vsi~w{w E{@R{s`unjx |/uIjuW_~ey sv @Q Mvw Z$~g v u$w Bv@N)w \;iBFx} TQ aTnEH,KuwXC ExR*s `'} l(Hx(TKzaf} oXM{X~I AWt e U q x ~xK z Y q f m s u @ ~M M[*ziz w*BDX} RE} _JK kK~xu FyrS~bm p]I}l F GS\lal MU ZK gx sKx @#^QMA^:} l#Ywx>so>}#[IKKq Tt az nKz {|H#HV#Ti )} L] Y)MfKMt/zB#(Psx/KFxTBbzpM~+E Lz Yp} fzt ruE ~wxKvYs gjzsoxAm} Oz\g|jez xcMEBSmMaE(oz Wm~dmC rq z LKAYu g |t(V{B(W}}c zU[GZ bKm o)C |,zIKu W((d} L,KXxfKGtE BMOz]s kwt E} QM]Mkz y{FjKTwzb_sp_~ MLEHZM} mMyKU GGTETb)~xF} TZQ`cq*.T)Bt k!"waY zMX~ fC s\#,@:lEf} k.xZ U@ aEn#is;-\${I$sft t5@ @%sM5s[5{ i v-T=~ s C @Eq Mx WEs dE:CnESQqE]'B"iV GEd/e } T($+aYyLsE#dSC w;`CD#B@J@pT. 6'#\!ܞѨ{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#U{#UԝXԝXԝXԝXԝXԝXԝXԝXt{#Ut{#Ut{#Ut{#UԝXԝXԝXԝXt{#Ut{#U : R%,#::$a?' @Q-@BL(@h@ifj@l@@\`,@M4H* ErCommandoSkins.cmdoBlake, \z  -|z88pset multiskin 8~ 8, hV:,, pp R,) %  .. fw.*.pFailed to load {.. .w.*{{  :,,..p -Face xr.*.. ..   2@=@@@UFd@?@e&]N@%@;5c7:-r55\[ [4V5@5 4\p4}4}@@,  k@IN, $er* r*-'CommandoSkins.cmdoBlake {w*-r%*- w*44$r* 4@[@DP@^@G@a@b@ @_y@I@H//============================================================================= // MMq2male. //============================================================================= class MMq2male expands MM_BaseMale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("q2male.q2male", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } TG//============================================================================= // MMtskaarj. //============================================================================= class MMtskaarj expands MMBonusPack; // #exec AUDIO IMPORT FILE="Sounds\SkWalk2.wav" NAME="SkWalk" GROUP="Skaarj" // special animation functions function PlayDuck() { BaseEyeHeight = 0; PlayAnim('Duck',1, 0.25); } function PlayInAir() { local vector X,Y,Z, Dir; local float f, TweenTime; BaseEyeHeight = 0.7 * Default.BaseEyeHeight; if ( (GetAnimGroup(AnimSequence) == 'Landing') && !bLastJumpAlt ) { GetAxes(Rotation, X,Y,Z); Dir = Normal(Acceleration); f = Dir dot Y; if ( f > 0.7 ) TweenAnim('DodgeL', 0.35); else if ( f < -0.7 ) TweenAnim('DodgeR', 0.35); else if ( Dir dot X > 0 ) TweenAnim('DodgeF', 0.35); else TweenAnim('DodgeB', 0.35); bLastJumpAlt = true; return; } bLastJumpAlt = false; if ( AnimSequence == 'DodgeF' ) TweenTime = 2; else if ( GetAnimGroup(AnimSequence) == 'Jumping' ) { TweenAnim('DodgeF', 2); return; } else TweenTime = 0.7; if ( AnimSequence == 'StrafeL' ) TweenAnim('DodgeR', TweenTime); else if ( AnimSequence == 'StrafeR' ) TweenAnim('DodgeL', TweenTime); else if ( AnimSequence == 'BackRun' ) TweenAnim('DodgeB', TweenTime); else if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('JumpSMFR', TweenTime); else TweenAnim('JumpLGFR', TweenTime); } function PlayDodge(eDodgeDir DodgeMove) { if ( Mesh == FallBackMesh ) { Super.PlayDodge(DodgeMove); return; } Velocity.Z = 210; if ( DodgeMove == DODGE_Left ) PlayAnim('RollLeft', 1.35 * FMax(0.35, Region.Zone.ZoneGravity.Z/Region.Zone.Default.ZoneGravity.Z), 0.06); else if ( DodgeMove == DODGE_Right ) PlayAnim('RollRight', 1.35 * FMax(0.35, Region.Zone.ZoneGravity.Z/Region.Zone.Default.ZoneGravity.Z), 0.06); else if ( DodgeMove == DODGE_Back ) TweenAnim('DodgeB', 0.25); else PlayAnim('Flip', 1.35 * FMax(0.35, Region.Zone.ZoneGravity.Z/Region.Zone.Default.ZoneGravity.Z), 0.06); } function PlayDying(name DamageType, vector HitLoc) { if ( Mesh == FallBackMesh ) { Super.PlayDying(DamageType, HitLoc); return; } BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if ( DamageType == 'Suicided' ) { PlayAnim('Dead1',, 0.1); return; } // check for head hit if ( DamageType == 'Decapitated' ) { PlaySkaarjDecap(); return; } // check for big hit if ( Velocity.Z > 200 ) { if ( FRand() < 0.65 ) PlayAnim('Dead4',,0.1); else if ( FRand() < 0.5 ) PlayAnim('Dead2',, 0.1); else PlayAnim('Dead3',, 0.1); return; } // check for repeater death if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) ) { PlayAnim('Dead9',, 0.1); return; } if ( HitLoc.Z - Location.Z > 0.7 * CollisionHeight ) { if ( FRand() < 0.35 ) PlaySkaarjDecap(); else PlayAnim('Dead2',, 0.1); return; } if ( FRand() < 0.6 ) //then hit in front or back PlayAnim('Dead1',, 0.1); else PlayAnim('Dead3',, 0.1); } function PlaySkaarjDecap() { local carcass carc; local class carcclass; if ( class'GameInfo'.Default.bVeryLowGore ) { PlayAnim('Dead2',, 0.1); return; } PlayAnim('Dead5',, 0.1); if ( Level.NetMode != NM_Client ) { carcclass = class(DynamicLoadObject("multimesh.TSkaarjHead", class'Class')); carc = Spawn(carcclass,,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) ); if (carc != None) { carc.Initfor(self); carc.RemoteRole = ROLE_SimulatedProxy; carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } } } simulated function PostbeginPlay(){ DefaultFace="Dominator"; Default.DefaultFace="Dominator"; TeamSkin="T_skaarj_"; Default.TeamSkin="T_skaarj_"; DefaultCustomPackage="TSkMSkins."; Default.DefaultCustomPackage="TSkMSkins."; DefaultSkinName="TSkMSkins.Warr"; Default.DefaultSkinName="TSkMSkins.Warr"; Footstep1=Sound(DynamicLoadObject("multimesh.Skaarj.SkWalk", class'Sound')); Default.FootStep1 = FootStep1; Footstep2 = FootStep1; Default.Footstep2 = FootStep1; FootStep3 = FootStep1; Default.Footstep3 = FootStep1; Mesh = Mesh(DynamicLoadObject("EpicCustomModels.TSkM", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } r//============================================================================= // MMRumiko. //============================================================================= class MMBonusPack expands MM_BaseMale; var() mesh FallBackMesh; var() string Author; var() string AuthorInfo; var() string DefaultFace, TeamSkin, DefaultCustomPackage; static function SetMyMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum) { local string MeshName, FacePackage, SkinItem, FaceItem, SkinPackage; MeshName = SkinActor.GetItemName(string(SkinActor.Mesh)); SkinItem = SkinActor.GetItemName(SkinName); FaceItem = SkinActor.GetItemName(FaceName); FacePackage = Left(FaceName, Len(FaceName) - Len(FaceItem)); SkinPackage = Left(SkinName, Len(SkinName) - Len(SkinItem)); log(SkinItem@FaceItem@FacePackage@SkinPackage); if(SkinPackage == "") { SkinPackage=default.DefaultCustomPackage; SkinName=SkinPackage$SkinName; } if(FacePackage == "") { FacePackage=default.DefaultCustomPackage; FaceName=FacePackage$FaceName; } // Set the fixed skin element. If it fails, go to default skin & no face. if(!SetSkinElement(SkinActor, default.FixedSkin, SkinName$string(default.FixedSkin+1), default.DefaultSkinName$string(default.FixedSkin+1))) { SkinName = default.DefaultSkinName; FaceName = ""; } // Set the face - if it fails, set the default skin for that face element. SetSkinElement(SkinActor, default.FaceSkin, FacePackage$SkinItem$String(default.FaceSkin+1)$FaceItem, SkinName$String(default.FaceSkin+1)); // Set the team elements if( TeamNum != 255 ) { SetSkinElement(SkinActor, default.TeamSkin1, SkinName$string(default.TeamSkin1+1)$"T_"$String(TeamNum), SkinName$string(default.TeamSkin1+1)); SetSkinElement(SkinActor, default.TeamSkin2, SkinName$string(default.TeamSkin2+1)$"T_"$String(TeamNum), SkinName$string(default.TeamSkin2+1)); } else { SetSkinElement(SkinActor, default.TeamSkin1, SkinName$string(default.TeamSkin1+1), ""); SetSkinElement(SkinActor, default.TeamSkin2, SkinName$string(default.TeamSkin2+1), ""); } // Set the talktexture if(Pawn(SkinActor) != None) { if(FaceName != "") Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(FacePackage$SkinItem$"5"$FaceItem, class'Texture')); else Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = None; } } static function SetMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum) { local string MeshName, SkinPackage; local Texture NewSkin; if ( SkinActor.Mesh == Default.FallBackMesh ) { Super.SetMultiSkin(SkinActor, "CommandoSkins.cmdo", "Blake", TeamNum); return; } if ( SkinName == "" ) SkinName = default.DefaultSkinName; if ( default.bisMultiSkinned ) { if ( FaceName == "" ) FaceName = default.DefaultFace; log("set multiskin "$SkinName@FaceName); //Super. SetMyMultiSkin(SkinActor, SkinName, FaceName, TeamNum); return; } // only one skin for mesh MeshName = SkinActor.GetItemName(string(SkinActor.Mesh)); if( TeamNum != 255 ) SkinName = default.DefaultCustomPackage$default.TeamSkin$String(TeamNum); if( !SetSkinElement(SkinActor, 0, SkinName, default.DefaultSkinName) ) SkinName = default.DefaultSkinName; NewSkin = Texture(DynamicLoadObject(SkinName, class'Texture')); if ( NewSkin != None ) SkinActor.Skin = NewSkin; else { log("Failed to load "$SkinName); if(default.DefaultSkinName != "") { NewSkin = Texture(DynamicLoadObject(default.DefaultSkinName, class'Texture')); SkinActor.Skin = NewSkin; } } // Set the talktexture if( Pawn(SkinActor) != None ) { if ( (SkinName != Default.DefaultSkinName) && (TeamNum == 255) ) { Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(SkinName$"-Face", class'Texture')); if ( Pawn(SkinActor).PlayerReplicationInfo.TalkTexture == None ) Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(default.DefaultFace, class'Texture')); } else Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(default.DefaultFace, class'Texture')); } } static function GetMultiSkin( Actor SkinActor, out string SkinName, out string FaceName ) { local string FullSkinName, ShortSkinName; if ( default.bisMultiSkinned || (SkinActor.Mesh == Default.FallBackMesh) ) { Super.GetMultiSkin(SkinActor,SkinName,FaceName); return; } // only one skin FaceName = ""; FullSkinName = String(SkinActor.Skin); ShortSkinName = SkinActor.GetItemName(FullSkinName); SkinName = Left(FullSkinName, Len(FullSkinName) - Len(ShortSkinName)) $ Left(ShortSkinName, 4); } simulated function PostBeginPlay() { Super.PostBeginPlay(); SetMyMesh(); if ( Role == ROLE_SimulatedProxy ) SetTimer(1.0, true); } simulated function Timer() { if ( (Role == ROLE_SimulatedProxy) && (Mesh == None) ) SetMyMesh(); Super.Timer(); } simulated function SetMyMesh() { local Mesh NewMesh; DrawType = DT_Mesh; // class'MultiMeshMenu'.default.bForceDefaultMesh removed if ((Mesh == None) && (Default.Mesh == None)) { bIsMultiSkinned = true; Mesh = FallBackMesh; Super.SetMultiSkin(self, "CommandoSkins.cmdo", "Blake", PlayerReplicationInfo.Team); return; } if ( Default.Mesh != none ) Mesh = Default.Mesh; if ( bIsMultiSkinned ) { if ( MultiSkins[0] == None ) { if ( bIsPlayer && (PlayerReplicationInfo != None) ) SetMultiSkin(self, "","", PlayerReplicationInfo.team); else SetMultiSkin(self, "","", 0); } } else if ( Skin == None ) Skin = Default.Skin; } // should use PostNetBeginPlay, but version 400 doesn't have it, so put code here simulated function Tick(float DeltaTime) { if ( Role != ROLE_SimulatedProxy ) { Disable('Tick'); return; } if ( (PlayerReplicationInfo == None) || !PlayerReplicationInfo.bIsSpectator ) SetMyMesh(); if ( (PlayerReplicationInfo != None) && (PlayerReplicationInfo.Owner == None) ) PlayerReplicationInfo.SetOwner(self); Disable('Tick'); } // don't make assumptions deaths will also work as certain type of hit anim function PlayGutHit(float tweentime) { if ( AnimSequence == 'GutHit' ) { if (FRand() < 0.5) TweenAnim('LeftHit', tweentime); else TweenAnim('RightHit', tweentime); } else TweenAnim('GutHit', tweentime); } function PlayHeadHit(float tweentime) { if ( AnimSequence == 'HeadHit' ) TweenAnim('GutHit', tweentime); else TweenAnim('HeadHit', tweentime); } function PlayLeftHit(float tweentime) { if ( AnimSequence == 'LeftHit' ) TweenAnim('GutHit', tweentime); else TweenAnim('LeftHit', tweentime); } function PlayRightHit(float tweentime) { if ( AnimSequence == 'RightHit' ) TweenAnim('GutHit', tweentime); else TweenAnim('RightHit', tweentime); } // hacks because SetMesh() didn't exist in 400 (to preserve compatibility) state PlayerWalking { ignores SeePlayer, HearNoise, Bump; function BeginState() { if ( Mesh == None ) SetMyMesh(); WalkBob = vect(0,0,0); DodgeDir = DODGE_None; bIsCrouching = false; bIsTurning = false; bPressedJump = false; if (Physics != PHYS_Falling) SetPhysics(PHYS_Walking); if ( !IsAnimating() ) PlayWaiting(); } } state PlayerWaiting { ignores SeePlayer, HearNoise, Bump, TakeDamage, Died, ZoneChange, FootZoneChange; function BeginState() { Texture = None; DrawType = DT_Sprite; Mesh = None; if ( PlayerReplicationInfo != None ) { PlayerReplicationInfo.bIsSpectator = true; PlayerReplicationInfo.bWaitingPlayer = true; } SetCollision(false,false,false); EyeHeight = BaseEyeHeight; SetPhysics(PHYS_None); } function EndState() { SetMyMesh(); PlayerReplicationInfo.bIsSpectator = false; PlayerReplicationInfo.bWaitingPlayer = false; SetCollision(true,true,true); } } state PlayerSpectating { ignores SeePlayer, HearNoise, Bump, TakeDamage, Died, ZoneChange, FootZoneChange; function BeginState() { Texture = None; DrawType = DT_Sprite; PlayerReplicationInfo.bIsSpectator = true; PlayerReplicationInfo.bWaitingPlayer = true; bShowScores = true; Mesh = None; SetCollision(false,false,false); EyeHeight = Default.BaseEyeHeight; SetPhysics(PHYS_None); } function EndState() { PlayerReplicationInfo.bIsSpectator = false; PlayerReplicationInfo.bWaitingPlayer = false; SetMyMesh(); SetCollision(true,true,true); } } n>//============================================================================= // MMtnali. //============================================================================= class MMtnali expands MMBonusPack; // special animation functions function PlayDying(name DamageType, vector HitLoc) { BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if ( DamageType == 'Suicided' ) { PlayAnim('Dead',, 0.1); return; } // check for head hit if ( DamageType == 'Decapitated' ) { PlayNaliDecap(); return; } // check for big hit if ( Velocity.Z > 200 ) { if ( FRand() < 0.65 ) PlayAnim('Dead4',,0.1); else PlayAnim('Dead2',, 0.1); return; } if ( HitLoc.Z - Location.Z > 0.7 * CollisionHeight ) { if ( FRand() < 0.35 ) PlayNaliDecap(); else PlayAnim('Dead2',, 0.1); return; } if ( FRand() < 0.6 ) //then hit in front or back PlayAnim('Dead',, 0.1); else PlayAnim('Dead2',, 0.1); } function PlayNaliDecap() { local carcass carc; local class carcclass; if ( class'GameInfo'.Default.bVeryLowGore ) { PlayAnim('Dead2',, 0.1); return; } PlayAnim('Dead3',, 0.1); if ( Level.NetMode != NM_Client ) { carcclass = class(DynamicLoadObject("multimesh.TNaliHead", class'Class')); carc = Spawn(carcclass,,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) ); if (carc != None) { carc.Initfor(self); carc.RemoteRole = ROLE_SimulatedProxy; carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } } } static function SetMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum) { local string SkinItem, SkinPackage; if ( SkinActor.Mesh == Default.FallBackMesh ) { Super.SetMultiSkin(SkinActor, "CommandoSkins.cmdo", "Blake", TeamNum); return; } // two skins if ( SkinName == "" ) SkinName = default.DefaultSkinName; else { SkinItem = SkinActor.GetItemName(SkinName); SkinPackage = Left(SkinName, Len(SkinName) - Len(SkinItem)); if( SkinPackage == "" ) { SkinPackage=default.DefaultCustomPackage; SkinName=SkinPackage$SkinName; } } if( !SetSkinElement(SkinActor, 0, SkinName, default.DefaultSkinName) ) SkinName = default.DefaultSkinName; // Set the team elements if( TeamNum < 4 ) { SetSkinElement(SkinActor, 0, skinpackage$"T_nali_"$String(TeamNum), SkinName); if( !SetSkinElement(SkinActor, 0, skinpackage$"T_nali_"$String(TeamNum), default.DefaultSkinName) ) SetSkinElement(SkinActor, 0, "TNaliMeshSkins.T_nali_"$String(TeamNum), SkinName);} else SetSkinElement(SkinActor, 0, skinname, SkinName); // Set the talktexture (contains other changes too: deletions) if( Pawn(SkinActor) != None ) { Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(SkinName$"-Face", class'Texture')); if ( Pawn(SkinActor).PlayerReplicationInfo.TalkTexture == None ) Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject("TNaliMeshSkins.nali-Face", class'Texture')); } } static function GetMultiSkin( Actor SkinActor, out string SkinName, out string FaceName ) { local string FullSkinName; FullSkinName = String(SkinActor.MultiSkins[0]); SkinName = FullSkinName; Facename= ""; } simulated function PostbeginPlay(){ DefaultFace="TNaliMeshSkins.nali-Face"; Default.DefaultFace="TNaliMeshSkins.nali-Face"; TeamSkin="T_nali_"; Default.TeamSkin="T_nali_"; DefaultCustomPackage="TNaliMeshSkins."; Default.DefaultCustomPackage="TNaliMeshSkins."; DefaultSkinName="TNaliMeshSkins.Ouboudah"; default.DefaultSkinName="TNaliMeshSkins.Ouboudah"; bIsMultiSkinned=False; Default.bIsMultiSkinned=False; Mesh = Mesh(DynamicLoadObject("EpicCustomModels.tnalimesh", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } ni\ 6r*( ܞѨ]q2male.q2male ]q2male.q2male ]q2malewjX 6s؋ܞѨ]hunter.hunter ]hunter.hunter ]hunter@.V//============================================================================= // MMladydeath. //============================================================================= class MMladydeath expands MM_BaseFemale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("LadyDeath.LadyDeath", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } Z //============================================================================= // MMtroop. //============================================================================= class MMtroop expands MM_BaseMale; simulated function PostbeginPlay(){ FaceSkin=3; Default.FaceSkin=3; FixedSkin=2; Default.FixedSkin=2; TeamSkin2=1; Default.TeamSkin2=1; DefaultSkinName="TroopSkins.trpr"; Default.DefaultSkinName="TroopSkins.trpr"; DefaultPackage="TroopSkins."; Default.DefaultPackage="TroopSkins."; Mesh = Mesh(DynamicLoadObject("Troop.Troop", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } H//============================================================================= // MMhunter. //============================================================================= class MMhunter expands MM_BaseMale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("Hunter.Hunter", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } uVW 6xF_]Ladydeath.Ladydeath ]Ladydeath.Ladydeath ] LadyDeath.@#oXZ 6z*,~#\!]H]H]H]H]H111111X'y] Dominatorz] T_skaarj_x= TSkMSkins.MTSkMSkins.Warr]u_g^pqrstjh]EpicCustomModels.TSkMed ]Skaarj Hybrid]MultiMesh.SkaarjVoiceC$Q8?}nV 6{=9ܞѨ]SuperMale.SMale ]Botpack.TrophyMale1 = Super Male\$y?h //============================================================================= // MMsmale. //============================================================================= class MMsmale expands MM_BaseMale; simulated function PostBeginPlay(){ DefaultSkinName="SMaleSkins.CtfM"; Default.DefaultSkinName="SMaleSkins.CtfM"; DefaultPackage="SMaleSkins."; Default.DefaultPackage="SMaleSkins."; CarcassType = Class(DynamicLoadObject("supermale.SMaleCarcass", class'Class')); Default.CarcassType = CarcassType; Mesh=Mesh(DynamicLoadObject("supermale.SMale", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } U//============================================================================= // MMtekkblade. //============================================================================= class MMtekkblade expands MM_BaseMale; simulated function PostbeginPlay(){ Mesh = Mesh(DynamicLoadObject("tekkblade.tekkblade", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } QY}.!Ba&!YY,a&!BY PWR 6@ pLNF_]UnrealShare.Female1 ]Botpack.TrophyFemale1 ]Drace]UnrealShare.Female1XtS.!fa&!YX,a&!fX #qG[ 6B瞇#\!ԝXԝXԝXt{#Ut{#Ut{#U]H]H]H]H]Hy]TNaliMeshSkins.nali-Facez] T_nali_x]TNaliMeshSkins.]TNaliMeshSkins.Ouboudah]u_g^pqrstjhFS]EpicCustomModels.TNaliMeshed ]Nali]MultiMesh.NaliVoiceAWs.!ia&!YW,a&!iW VyM 6D^[ܞѨԝXԝXԝXt{#U]bender.benderselect ]Bender]Bendervoice.Bendervoice\$ff?ClG # vh_ 6FZܞѨ`"k"("]TroopSkins.trpr] TroopSkins.]Troop.SelectionTroop ]Troop.TrophyTroop ]Troop : `kY 6GD>6ܞѨ]linfang.linfang ]linfang.linfang ] Lin Fangm}n $@n)!::$ r*, st@.MZ|o u::$v!o >r*-,lw*r*av!o DOA|J;!Y+?a&!fA8a&!iAHa&!YA WmT 6R-v@ܞѨ] Rhino.Rhino ] Rhino.Rhino ]RhinoC$0,-(-(a''' kNDC! oE}- {+//============================================================================= // MMbender. //============================================================================= class MMbender expands MM_BaseMale; simulated function PostbeginPlay() { DefaultSkinName="BenderSkins.bend"; Default.DefaultSkinName="BenderSkins.bend"; DefaultPackage="BenderSkins."; Default.DefaultPackage="BenderSkins."; Mesh = Mesh(DynamicLoadObject("bender.bender", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Deaths[0]=Sound(DynamicLoadObject("bender.benderDeath1", class'Sound')); Default.Deaths[0] = Deaths[0]; Deaths[1]=Sound(DynamicLoadObject("bender.benderDeath2", class'Sound')); Default.Deaths[1] = Deaths[1]; Deaths[2]=Sound(DynamicLoadObject("bender.benderDeath3", class'Sound')); Default.Deaths[2] = Deaths[2]; Deaths[3]=Sound(DynamicLoadObject("bender.benderDeath4", class'Sound')); Default.Deaths[3] = Deaths[3]; Deaths[4]=Sound(DynamicLoadObject("bender.benderDeath5", class'Sound')); Default.Deaths[4] = Deaths[4]; Deaths[5]=Sound(DynamicLoadObject("bender.benderDeath6", class'Sound')); Default.Deaths[5] = Deaths[5]; Super.PostBeginPlay(); } static function SetMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum) { local string MeshName, SkinItem, SkinPackage; MeshName = SkinActor.GetItemName(string(SkinActor.Mesh)); SkinItem = SkinActor.GetItemName(SkinName); SkinPackage = Left(SkinName, Len(SkinName) - Len(SkinItem)); if(SkinPackage == "") { SkinPackage="BenderSkins."; SkinName=SkinPackage$SkinName; } if( TeamNum != 255 ) { if(!SetSkinElement(SkinActor, 0, SkinName$"1T_"$String(TeamNum), default.DefaultSkinName$"1T_"$String(TeamNum))) { if(!SetSkinElement(SkinActor, 0, SkinName$"1", default.DefaultSkinName$"1")) { SetSkinElement(SkinActor, 0, default.DefaultSkinName$"1T_"$String(TeamNum), default.DefaultSkinName$"1T_"$String(TeamNum)); SkinName=default.DefaultSkinName; } } SetSkinElement(SkinActor, 1, SkinName$"2T_"$String(TeamNum), SkinName$"2T_"$String(TeamNum)); SetSkinElement(SkinActor, 2, SkinName$"3T_"$String(TeamNum), SkinName$"3T_"$String(TeamNum)); SetSkinElement(SkinActor, 3, SkinName$"4T_"$String(TeamNum), SkinName$"4T_"$String(TeamNum)); } else { if(!SetSkinElement(SkinActor, 0, SkinName$"1", default.DefaultSkinName)) SkinName=default.DefaultSkinName; SetSkinElement(SkinActor, 1, SkinName$"2", SkinName$"2"); SetSkinElement(SkinActor, 2, SkinName$"3", SkinName$"3"); SetSkinElement(SkinActor, 3, SkinName$"4", SkinName$"4"); } if( Pawn(SkinActor) != None ) Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(SkinName$"5Bender", class'Texture')); } XYZU\A- ]^[n1$ X*$-'-'-'*a(((o$ S //============================================================================= // MMlinfang. //============================================================================= class MMlinfang expands MM_BaseMale; simulated function PostBeginPlay(){ MultiSkins[0] = Texture(DynamicLoadObject("Linfang.Skins.Jlinfang", class'Texture')); Default.MultiSkins[0] = MultiSkins[0]; MultiSkins[1] = Texture(DynamicLoadObject("Linfang.Skins.linf1t_0", class'Texture')); Default.MultiSkins[1] = MultiSkins[1]; MultiSkins[2] = Texture(DynamicLoadObject("Linfang.Skins.linf1t_1", class'Texture')); Default.MultiSkins[2] = MultiSkins[2]; Mesh=Mesh(DynamicLoadObject("Linfang.Linfang", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } Z,Z-' ;a4Er;CommandoSkins.cmdoBlake _zV }}Vz p &:, &ppT_RU &ppT_R & ,ppT_cow_R ,ppT_cow_R ,pTCowMeshSkins.T_Cow_Rx & ,pcowpackx ,pcowpack ,EpicCustomModels.TCowMeshSkins.cowpackw.*..pFace r.*..   ~g] 6cF/bܞѨ]tekkblade.tekkblade ]tekkblade.tekkblade ] tekkblade : [//============================================================================= // MMsolidsnake. //============================================================================= class MMsolidsnake expands MM_BaseMale; //Allows ducking to use the crouch aim found in HL models...... function PlayDuck() { BaseEyeHeight = 0; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckUpSmaim', 0.3); else //I put whole animation in on accident and I'm too lazy to get rid of it, so I might as well USE it..... LoopAnim('duckUpLgaim'); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckDnSmaim', 0.3); else TweenAnim('duckDnLgaim', 0.3); } } else LoopAnim('DuckWait'); } function PlayCrawling() { //log("Play duck"); BaseEyeHeight = 0; LoopAnim('DuckWlkL'); } //no recoil animaiton in HL... function PlayRecoil(float Rate) { PlayFiring(); } //crouching shooting handled here...... function PlayFiring() { // switch animation sequence mid-stream if needed if (AnimSequence == 'RunLG') AnimSequence = 'RunLGFR'; else if (GetAnimGroup(AnimSequence) == 'Ducking') { //ducking fire....... ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { if (Weapon.Mass < 20) AnimSequence = 'DuckDnSmFR'; else AnimSequence = 'DuckDnLgFr'; } else { if ( Weapon.Mass < 20) AnimSequence = 'DuckUpSMFR'; else AnimSequence = 'DuckUpLgFR'; } } else if (AnimSequence == 'RunSM') AnimSequence = 'RunSMFR'; else if (AnimSequence == 'WalkLG') AnimSequence = 'WalkLGFR'; else if (AnimSequence == 'WalkSM') AnimSequence = 'WalkSMFR'; else if ( AnimSequence == 'JumpSMFR' ) TweenAnim('JumpSMFR', 0.03); else if ( AnimSequence == 'JumpLGFR' ) TweenAnim('JumpLGFR', 0.03); else if ( (GetAnimGroup(AnimSequence) == 'Waiting') || (GetAnimGroup(AnimSequence) == 'Gesture') && (AnimSequence != 'TreadLG') && (AnimSequence != 'TreadSM') ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimUpSmFr'); } else{ PlayAnim('AimUpLgFr'); } } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimDnSmFr'); } else{ PlayAnim('AimDnLgFr'); } } } else{ if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.02); else TweenAnim('StillLgFr', 0.02); }} } //handles aiming....... function PlayWaiting() { local name newAnim; if ( Mesh == None ) return; if ( bIsTyping ) { PlayChatting(); return; } if ( (IsInState('PlayerSwimming')) || (Physics == PHYS_Swimming) ) { BaseEyeHeight = 0.7 * Default.BaseEyeHeight; if ( (Weapon == None) || (Weapon.Mass < 20) ) LoopAnim('TreadSM'); else LoopAnim('TreadLG'); } else { BaseEyeHeight = Default.BaseEyeHeight; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpSmFr'); else TweenAnim('AimUpSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpLgFr'); else TweenAnim('AimUpLg', 0.3);} } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnSmFr'); else TweenAnim('AimDnSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnLgFr'); else TweenAnim('AimDnLg', 0.3);} } } else if ( (Weapon != None) && Weapon.bPointing ) { if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.3); else TweenAnim('StillFRRP', 0.3); } else { if ( FRand() < 0.1 ) { if ( (Weapon == None) || (Weapon.Mass < 20) ) PlayAnim('CockGun', 0.5 + 0.5 * FRand(), 0.3); else PlayAnim('CockGunL', 0.5 + 0.5 * FRand(), 0.3); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1') || (AnimSequence == 'Breath2')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1'; else newAnim = 'Breath2'; } else { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1L') || (AnimSequence == 'Breath2L')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1L'; else newAnim = 'Breath2L'; } if ( AnimSequence == newAnim ) LoopAnim(newAnim, 0.4 + 0.4 * FRand()); else PlayAnim(newAnim, 0.4 + 0.4 * FRand(), 0.25); } } } } //to use crouch death...... function PlayDying(name DamageType, vector HitLoc) { BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if (GetAnimGroup(AnimSequence) == 'Ducking') { PlayAnim('Deadduck'); return; } if ( DamageType == 'Suicided' ) { PlayAnim('Dead8',, 0.1); return; } // check for head hit if ( (DamageType == 'Decapitated') && !class'GameInfo'.Default.bVeryLowGore ) { PlayDecap(); return; } if ( FRand() < 0.1 ) { PlayAnim('Dead2',,0.1); return; } // check for big hit if ( (Velocity.Z > 250) && (FRand() < 0.75) ) { if ( FRand() < 0.5 ) PlayAnim('Dead1',,0.1); else PlayAnim('Dead11',, 0.1); return; } // check for repeater death if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) ) { PlayAnim('Dead9',, 0.1); return; } if ( (HitLoc.Z - Location.Z > 0.7 * CollisionHeight) && !class'GameInfo'.Default.bVeryLowGore ) { if ( FRand() < 0.5 ) PlayDecap(); else PlayAnim('Dead7',, 0.1); return; } if ( Region.Zone.bWaterZone || (FRand() < 0.5) ) //then hit in front or back PlayAnim('Dead3',, 0.1); else PlayAnim('Dead8',, 0.1); } //cause I used two fixed skins........... static function SetMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum) { local string MeshName, FacePackage, SkinItem, FaceItem, SkinPackage; MeshName = SkinActor.GetItemName(string(SkinActor.Mesh)); SkinItem = SkinActor.GetItemName(SkinName); FaceItem = SkinActor.GetItemName(FaceName); FacePackage = Left(FaceName, Len(FaceName) - Len(FaceItem)); SkinPackage = Left(SkinName, Len(SkinName) - Len(SkinItem)); if(SkinPackage == "") { SkinPackage=default.DefaultPackage; SkinName=SkinPackage$SkinName; } if(FacePackage == "") { FacePackage=default.DefaultPackage; FaceName=FacePackage$FaceName; } // Set the fixed skin element SetSkinElement(SkinActor, 2, SkinName$"3", default.DefaultSkinName$"3"); SetSkinElement(SkinActor, 3, SkinName$"4", default.DefaultSkinName$"4"); // Set the face - if it fails, set the default skin for that face element. SetSkinElement(SkinActor, default.FaceSkin, FacePackage$SkinItem$String(default.FaceSkin+1)$FaceItem, SkinName$String(default.FaceSkin+1)); // Set the team elements if( TeamNum != 255 ) { SetSkinElement(SkinActor, 0, SkinName$"1T_"$String(TeamNum), SkinName$"1"); } else { SetSkinElement(SkinActor, 0, SkinName$"1", ""); } // Set the talktexture if(Pawn(SkinActor) != None) { if(FaceName != "") Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(FacePackage$SkinItem$"5"$FaceItem, class'Texture')); else Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject("solidsnakeskins.snak5snake", class'Texture')); } } simulated function PostBeginPlay(){ FaceSkin = 1; Default.FaceSkin = FaceSkin; DefaultSkinName="solidsnakeSkins.snak"; Default.DefaultSkinName = DefaultSkinName; DefaultPackage="solidsnakeskins."; Default.DefaultPackage = DefaultPackage; Mesh=Mesh(DynamicLoadObject("solidsnake.solidsnake", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } @df^ 6fܞѨԝXԝXԝXԝXt{#Ut{#U1X'X'X'X'X'X'X'X'X'X'X'X'X'X']solidsnakeSkins.snak]solidsnakeskins.]solidsnake.solidsnake : jlU 6gSFJܞѨ]messiah.messiah ]messiah.messiah ] messiahz|//============================================================================= // MMtrinity. //============================================================================= class MMtrinity expands MM_BaseFemale; //Allows ducking to use the crouch aim found in HL models...... function PlayDuck() { BaseEyeHeight = 0; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckUpSmaim', 0.3); else // I put whole animation in on accident and I'm too lazy to get rid of it, so I might as well USE it..... LoopAnim('duckUpLgaim'); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckDnSmaim', 0.3); else TweenAnim('duckDnLgaim', 0.3); } } else LoopAnim('DuckWait'); } function PlayCrawling() { //log("Play duck"); BaseEyeHeight = 0; LoopAnim('DuckWlkL'); } //no recoil animaiton in HL... function PlayRecoil(float Rate) { PlayFiring(); } //crouching shooting handled here...... function PlayFiring() { // switch animation sequence mid-stream if needed if (AnimSequence == 'RunLG') AnimSequence = 'RunLGFR'; else if (GetAnimGroup(AnimSequence) == 'Ducking') { //ducking fire....... ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { if (Weapon.Mass < 20) AnimSequence = 'DuckDnSmFR'; else AnimSequence = 'DuckDnLgFr'; } else { if ( Weapon.Mass < 20) AnimSequence = 'DuckUpSMFR'; else AnimSequence = 'DuckUpLgFR'; } } else if (AnimSequence == 'RunSM') AnimSequence = 'RunSMFR'; else if (AnimSequence == 'WalkLG') AnimSequence = 'WalkLGFR'; else if (AnimSequence == 'WalkSM') AnimSequence = 'WalkSMFR'; else if ( AnimSequence == 'JumpSMFR' ) TweenAnim('JumpSMFR', 0.03); else if ( AnimSequence == 'JumpLGFR' ) TweenAnim('JumpLGFR', 0.03); else if ( (GetAnimGroup(AnimSequence) == 'Waiting') || (GetAnimGroup(AnimSequence) == 'Gesture') && (AnimSequence != 'TreadLG') && (AnimSequence != 'TreadSM') ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimUpSmFr'); } else{ PlayAnim('AimUpLgFr'); } } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimDnSmFr'); } else{ PlayAnim('AimDnLgFr'); } } } else{ if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.02); else TweenAnim('StillLgFr', 0.02); }} } //handles aiming....... function PlayWaiting() { local name newAnim; if ( Mesh == None ) return; if ( bIsTyping ) { PlayChatting(); return; } if ( (IsInState('PlayerSwimming')) || (Physics == PHYS_Swimming) ) { BaseEyeHeight = 0.7 * Default.BaseEyeHeight; if ( (Weapon == None) || (Weapon.Mass < 20) ) LoopAnim('TreadSM'); else LoopAnim('TreadLG'); } else { BaseEyeHeight = Default.BaseEyeHeight; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpSmFr'); else TweenAnim('AimUpSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpLgFr'); else TweenAnim('AimUpLg', 0.3);} } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnSmFr'); else TweenAnim('AimDnSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnLgFr'); else TweenAnim('AimDnLg', 0.3);} } } else if ( (Weapon != None) && Weapon.bPointing ) { if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.3); else TweenAnim('StillFRRP', 0.3); } else { if ( FRand() < 0.1 ) { if ( (Weapon == None) || (Weapon.Mass < 20) ) PlayAnim('CockGun', 0.5 + 0.5 * FRand(), 0.3); else PlayAnim('CockGunL', 0.5 + 0.5 * FRand(), 0.3); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1') || (AnimSequence == 'Breath2')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1'; else newAnim = 'Breath2'; } else { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1L') || (AnimSequence == 'Breath2L')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1L'; else newAnim = 'Breath2L'; } if ( AnimSequence == newAnim ) LoopAnim(newAnim, 0.4 + 0.4 * FRand()); else PlayAnim(newAnim, 0.4 + 0.4 * FRand(), 0.25); } } } } //to use crouch death...... function PlayDying(name DamageType, vector HitLoc) { local carcass carc; BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if (GetAnimGroup(AnimSequence) == 'Ducking') { PlayAnim('Deadduck'); return; } if ( DamageType == 'Suicided' ) { PlayAnim('Dead8',, 0.1); return; } // check for head hit if ( (DamageType == 'Decapitated') && !class'GameInfo'.Default.bVeryLowGore ) { PlayDecap(); return; } if ( FRand() < 0.1 ) { PlayAnim('Dead2',,0.1); return; } // check for big hit if ( (Velocity.Z > 250) && (FRand() < 0.75) ) { if ( (HitLoc.Z < Location.Z) && !class'GameInfo'.Default.bVeryLowGore && (FRand() < 0.6) ) { PlayAnim('Dead1',,0.05); if ( Level.NetMode != NM_Client ) { carc = Spawn(class 'UT_FemaleFoot',,, Location - CollisionHeight * vect(0,0,0.5)); if (carc != None) { carc.Initfor(self); carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } } } else PlayAnim('Dead11',, 0.1); return; } // check for repeater death if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) ) { PlayAnim('Dead9',, 0.1); return; } if ( (HitLoc.Z - Location.Z > 0.7 * CollisionHeight) && !class'GameInfo'.Default.bVeryLowGore ) { if ( FRand() < 0.5 ) PlayDecap(); else PlayAnim('Dead7',, 0.1); return; } if ( Region.Zone.bWaterZone || (FRand() < 0.5) ) //then hit in front or back PlayAnim('Dead3',, 0.1); else PlayAnim('Dead8',, 0.1); } function PlayDecap() { local carcass carc; PlayAnim('Dead4',, 0.1); if ( Level.NetMode != NM_Client ) { carc = Spawn(class 'UT_HeadFemale',,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) ); if (carc != None) { carc.Initfor(self); carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } } } simulated function PostBeginPlay(){ FaceSkin=2; Default.FaceSkin=2; FixedSkin=3; Default.FixedSkin=3; TeamSkin2=1; Default.TeamSkin2=1; DefaultSkinName="trinitySkins.trin"; Default.DefaultSkinName="trinitySkins.trin"; DefaultPackage="trinityskins."; Default.DefaultPackage="trinityskins."; Mesh=Mesh(DynamicLoadObject("trinity.trinity", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } RbccF ,GV&c bGa  L//============================================================================= // MMmessiah. //============================================================================= class MMmessiah expands MM_BaseMale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("messiah.messiah", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } ESE) ongr*,#$-(-(-(W::$o$ea2 JiC&O !rCU *QC!+a! = hC!){ 6?,a!% = 6U6333?a! = a!' = hUb 6!o>7F_]H]H]H]H]H]H]H]H1X'X'X'X'X'X'X'X'X'X'X'X'X'X'`"k"("]trinitySkins.trin]trinityskins.]trinity.trinitycwK 6pyܞѨ] Yoshi.Yoshi ] Yoshi.Yoshi ]Yoshin{y 3" -a! = a!Z =1::$Tmultimesh.tcowhead aT #L?a<" @1w*X$ 6 6 6 U//============================================================================= // MMsideswipe. //============================================================================= class MMsideswipe expands MM_BaseMale; simulated function PostbeginPlay(){ Mesh = Mesh(DynamicLoadObject("Sideswipe.Sideswipe", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } L$q~TCowMeshSkins.WarCowFaceTCowMeshSkins.WarCowFaceT_cow_T_cow_ TCowMeshSkins. TCowMeshSkins.TCowMeshSkins.WarCowTCowMeshSkins.WarCowmultimesh.tcowcarcass w*-(-(.EpicCustomModels.TCowMesh Zw*,.EpicCustomModels.TCowMeshSkins.cowpack w,*,,$ S& -*0S!+a!@ = GS!)b 6?,vff&?a!Z =a! = 6k6333?33>ba! = ?a!@ =a! = |vL 6vܞѨ] VF1J.VF1J ] VF1J.VF1J ]VF1JH|At ub764" -a! = a!% =2::$Hmultimesh.TNaliHead aH #L?a<" @2w*X$ 6 6 6 rQ` 6yܞѨ]Sideswipe.Sideswipe ]Sideswipe.Sideswipe ] Sideswipe : i'//============================================================================= // MMVF1A. //============================================================================= class MMVF1A expands MM_BaseMale; simulated function PostBeginPlay(){ HitSound1= Sound(DynamicLoadObject("ValkyrieSounds.(All).pain100_2", class'Sound')); Default.HitSound1 = HitSound1; HitSound2= Sound(DynamicLoadObject("ValkyrieSounds.(All).pain100_1", class'Sound')); Default.HitSound2 = HitSound2; Deaths[0]= Sound(DynamicLoadObject("ValkyrieSounds.(All).death1", class'Sound')); Default.Deaths[0] = Deaths[0]; Deaths[1]= Sound(DynamicLoadObject("ValkyrieSounds.(All).Death2", class'Sound')); Default.Deaths[1] = Deaths[1]; Deaths[2]= Sound(DynamicLoadObject("ValkyrieSounds.(All).Death3", class'Sound')); Default.Deaths[2] = Deaths[2]; Deaths[3]= Sound(DynamicLoadObject("ValkyrieSounds.(All).Death4", class'Sound')); Default.Deaths[3] = Deaths[3]; Deaths[4]= Deaths[1]; Default.Deaths[4]= Deaths[1]; Deaths[5]= Deaths[2]; Default.Deaths[5]= Deaths[2]; UWHit1 = Sound(DynamicLoadObject("ValkyrieSounds.(All).pain75_1", class'Sound')); Default.UWHit1 = UWHit1; UWHit2 = UWHit1; Default.UWHit2 = UWHit1; Die = Deaths[2]; Default.Die = Deaths[2]; Die2 = Deaths[3]; Default.Die2 = Deaths[3]; Die3 = Deaths[1]; Default.Die3 = Deaths[1]; Die4 = Deaths[0]; Default.Die4 = Deaths[0]; LandGrunt = Sound(DynamicLoadObject("ValkyrieSounds.(All).fall1", class'Sound')); Default.LandGrunt = LandGrunt; JumpSound = Sound(DynamicLoadObject("ValkyrieSounds.(All).Jump2", class'Sound')); Default.JumpSound = JumpSound; Land = Sound(DynamicLoadObject("ValkyrieSounds.(All).fall2", class'Sound')); Default.Land = Land; HitSound3=Sound(DynamicLoadObject("ValkyrieSounds.(All).pain50_2", class'Sound')); Default.HitSound3 = HitSound3; HitSound4=Sound(DynamicLoadObject("ValkyrieSounds.(All).pain75_2", class'Sound')); Default.HitSound4 = HitSound4; breathagain = Sound(DynamicLoadObject("ValkyrieSounds.(All).gurp1", class'Sound')); Default.breathagain = breathagain; GaspSound = breathagain; Default.GaspSound = breathagain; Footstep1=Sound(DynamicLoadObject("ValkyrieSounds.(All).Bump", class'Sound')); Default.Footstep1 = Footstep1; Footstep2 = Footstep1; Default.Footstep2 = Footstep1; Footstep3 = Footstep1; Default.Footstep3 = Footstep1; Mesh=Mesh(DynamicLoadObject("VF1A.VF1A", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } ;x 4OIEr ; CommandoSkins.cmdoBlake' _zQ %}}Qz%% p% %}:', %pp%T_nali_R'z %pp%T_nali_R' %pTNaliMeshSkins.T_nali_R' %Gw. *. .p-Face Gr. *. .TNaliMeshSkins.nali-Face   PIGa 6} UF_W"("MRiotSkins.cybe= RiotSkins.[]RiotGirl.SelectRiot ] Riot Girl]BotPack.VoiceFemaleOneC$Q8?'@~dV+ ( }}(-}}+稨+(-z-- p-z pH pS&pS& ppp+S&(pS&:E, pppS&T_REpS& pppS&T_REpS&V pS& pS&w.*{..ppp+5( .*  zuP 6@U(DynamicLoadObject("UnrealShare.MaleThreeCarcass", class'Class')); Default.CarcassType = CarcassType; Mesh=Mesh(DynamicLoadObject("UnrealShare.Male3", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } $B *TNaliMeshSkins.nali-FaceTNaliMeshSkins.nali-FaceT_nali_T_nali_ TNaliMeshSkins. TNaliMeshSkins.TNaliMeshSkins.OuboudahTNaliMeshSkins.Ouboudah-(-(.EpicCustomModels.tnalimesh "w*$ 3 da!A?> HOD333?a%!B -ON]DFDNF333?a&!w33>F333a&!v33>DO?%a&!l33>a&!m33>-' -(!l@2'a%!~a&!l@ 2333?Q!za&!vp!ya&!w!{a&!mr*?,a&!a&! FtN 6Jy;ܞѨ]UnrealShare.Male3 ]Botpack.TrophyMale1 ]BaneL//============================================================================= // MMtmaletwo. //============================================================================= class MMtmaletwo expands MM_BaseMale; simulated function PostBeginPlay(){ CarcassType = Class(DynamicLoadObject("UnrealI.MaleTwoCarcass", class'Class')); Default.CarcassType = CarcassType; Mesh=Mesh(DynamicLoadObject("UnrealI.Male2", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } KsO 6L QEܞѨ]UnrealI.Male2 ]Botpack.TrophyMale1 ]AshU//============================================================================= // MMprowl. //============================================================================= class MMprowl expands MM_BaseMale; simulated function PostBeginPlay(){ Deaths[0]=Sound(DynamicLoadObject("ProwlSounds.(All).death1", class'Sound')); Default.Deaths[0] = Deaths[0]; Deaths[1]=Sound(DynamicLoadObject("ProwlSounds.(All).Death2", class'Sound')); Default.Deaths[1] = Deaths[1]; Deaths[2]=Sound(DynamicLoadObject("ProwlSounds.(All).Death3", class'Sound')); Default.Deaths[2] = Deaths[2]; Deaths[3]=Sound(DynamicLoadObject("ProwlSounds.(All).Death4", class'Sound')); Default.Deaths[3]=Deaths[3]; Deaths[4]=Deaths[0]; Default.Deaths[4]=Deaths[4]; Deaths[5]=Deaths[1]; Default.Deaths[5]=Deaths[5]; Drown=Sound(DynamicLoadObject("ProwlSounds.(All).drown1", class'Sound')); Default.Drown = Drown; GaspSound=Sound(DynamicLoadObject("ProwlSounds.(All).gurp1", class'Sound')); Default.GaspSound = GaspSound; UWHit1=Sound(DynamicLoadObject("ProwlSounds.(All).gurp2", class'Sound')); Default.UWHit1 = UWHit1; UWHit2=UWHit1; Default.UWHit2 = UWHit2; LandGrunt=Sound(DynamicLoadObject("ProwlSounds.(All).fall2", class'Sound')); Default.LandGrunt = LandGrunt; Land=Sound(DynamicLoadObject("ProwlSounds.(All).fall1", class'Sound')); Default.Land = Land; Die=Deaths[0]; Default.Die = Die; Mesh=Mesh(DynamicLoadObject("Prowl.Prowl", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } _>Y!0-(-(,a''' N //============================================================================= // MMobiwan. //============================================================================= class MMobiwan expands MM_BaseMale; simulated function PostBeginPlay(){ TeamSkin1=1; Default.TeamSkin1 = TeamSkin1; TeamSkin2=2; Default.TeamSkin2 = TeamSkin2; DefaultSkinName="obiwanSkins.obiw"; Default.DefaultSkinName = DefaultSkinName; DefaultPackage="obiwanSkins."; Default.DefaultPackage = DefaultPackage; Mesh=Mesh(DynamicLoadObject("obiwan.obiwan", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } X//============================================================================= // MMtfemaleone. //============================================================================= class MMtfemaleone expands MM_BaseFemale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("UnrealShare.Female1", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } ONd 6Q շEܞѨW"("]obiwanSkins.obiw] obiwanSkins.]obiwan.Selectobiwan ]Botpack.TrophyMale2 ]Obiwan Kenobi]BotPack.VoiceMaleTwo : Q*&R~!r*L *Q*!+a!' = h*!)a 6?,ff&?a!Z =?a! =a!% = *!0 *!1a!/ = Q6L6333?A33>aOa! = n?a!' =|a!% = l //============================================================================= // MMmask. //============================================================================= class MMmask expands MM_BaseMale; simulated function PostbeginPlay(){ TeamSkin1=1; Default.TeamSkin1=1; TeamSkin2=2; Default.TeamSkin2=2; DefaultSkinName="MaskSkins.Mask"; Default.DefaultSkinName="MaskSkins.Mask"; DefaultPackage="MaskSkins."; Default.DefaultPackage="MaskSkins."; Mesh = Mesh(DynamicLoadObject("Mask.Mask", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } {//============================================================================= // MMtmaleone. //============================================================================= class MMtmaleone expands MM_BaseMale; simulated function PlayMetalStep(){ local sound step; local float decision; if ( !bIsWalking && (Level.Game != None) && (Level.Game.Difficulty > 1) && ((Weapon == None) || !Weapon.bPointing) ) MakeNoise(0.05 * Level.Game.Difficulty); if ( FootRegion.Zone.bWaterZone ) { PlaySound(sound 'LSplash', SLOT_Interact, 1, false, 1000.0, 1.0); return; } decision = FRand(); if ( decision < 0.34 ) step = sound'MetWalk1'; else if (decision < 0.67 ) step = sound'MetWalk2'; else step = sound'MetWalk3'; if ( bIsWalking ) PlaySound(step, SLOT_Interact, 0.5, false, 400.0, 1.0); else PlaySound(step, SLOT_Interact, 1, false, 800.0, 1.0); } simulated function PostBeginPlay(){ CarcassType = Class(DynamicLoadObject("UnrealI.MaleOneCarcass", class'Class')); Default.CarcassType = CarcassType; Mesh=Mesh(DynamicLoadObject("UnrealI.Male1", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } Ra 6" -a! = a!o =4::$Kmultimesh.TSkaarjHead aK #L?a<" @4w*X$ 6 6 6 SMh 6VčgܞѨW"("MMaskSkins.Mask= MaskSkins.]Mask.SelectMask ]Botpack.TrophyMale2 ] The Mask]BotPack.VoiceMaleTwo\$ @ : D//============================================================================= // MMrhino. //============================================================================= class MMrhino expands MM_BaseMale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("rhino.rhino", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } $U3EDominatorDominatorT_skaarj_T_skaarj_ TSkMSkins. TSkMSkins.TSkMSkins.WarrTSkMSkins.Warr.multimesh.Skaarj.SkWalk .EpicCustomModels.TSkM =w*$ &&,,aqueenSkins.aqueaqueenSkins.aqueaqueenSkins.aqueenSkins..aqueen.aqueen w* 3 -6666666r*?,a&!;>a!:r*?,a&!9>a&!8>a!7 ZR' a!Q []L/ \6!V!Pa%!$666666?,!@!??,!>!=!I!O$!5!TA!M!S`!a&!<!a&!<a%!<2a%!A ! !666666k6`r*?,a!#ha!"r*?,a!!a! ?,a&! ף<a&!F ף< ^20  r* -G a!- ::$333?yr*?,a!a!6666666Rr*?,B:% :%a!#Oa&!N>w:% :%a!"a&!K>r*?,:% :%a!!a&!6>:% :%a! a&!J>iw*-Y?,a&!>fa&!C>=r*?,a!H??>a!E??>_r*?,7@?! !\Q?!\!@?! !?!!a>>a>>> A //============================================================================= // MMmarine. //============================================================================= class MMmarine expands MM_BaseMale; simulated function PostbeginPlay(){ TeamSkin1=1; Default.TeamSkin1=1; TeamSkin2=2; Default.TeamSkin2=2; DefaultSkinName="6Marineskins.mari"; Default.DefaultSkinName="6Marineskins.mari"; DefaultPackage="6Marineskins."; Default.DefaultPackage="6Marineskins."; Mesh = Mesh(DynamicLoadObject("6Marine.Marine", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } _3&*-a%!$a!B L3!+a! = y3!) - =a! = 6?, @??a!' =a!D = #3!0 3!1a!/ = 6l6333? -u?a!U = 6- ?a!% =a! = `Lf 6bDb^\ܞѨW"("]6Marineskins.mari]6Marineskins.[]6Marine.SelectMarine ]Botpack.TrophyMale2 ] RogMarine]BotPack.VoiceMaleTwo : S//============================================================================= // MMyoshi. //============================================================================= class MMyoshi expands MM_BaseMale; simulated function PostBeginPlay(){ HitSound1= Sound(DynamicLoadObject("YoshiSounds.(All).pain100_1", class'Sound')); Default.HitSound1 = HitSound1; HitSound2= Sound(DynamicLoadObject("YoshiSounds.(All).pain100_2", class'Sound')); Default.HitSound2 = HitSound2; Deaths[0]= Sound(DynamicLoadObject("YoshiSounds.(All).death1", class'Sound')); Default.Deaths[0] = Deaths[0]; Deaths[1]= Deaths[0]; Default.Deaths[1]= Deaths[0]; Deaths[2]= Deaths[0]; Default.Deaths[2]= Deaths[0]; Deaths[3]= Deaths[0]; Default.Deaths[3]= Deaths[0]; Deaths[4]= Deaths[0]; Default.Deaths[4]= Deaths[0]; Deaths[5]= Deaths[0]; Default.Deaths[5]= Deaths[0]; UWHit1 = Sound(DynamicLoadObject("YoshiSounds.(All).gurp1", class'Sound')); Default.UWHit1 = UWHit1; UWHit2 = UWHit1; Default.UWHit2 = UWHit1; Die = Deaths[0]; Default.Die = Deaths[0]; LandGrunt = Sound(DynamicLoadObject("YoshiSounds.(All).fall1", class'Sound')); Default.LandGrunt = LandGrunt; JumpSound = Sound(DynamicLoadObject("YoshiSounds.(All).Jump2", class'Sound')); Default.JumpSound = JumpSound; Land = Sound(DynamicLoadObject("YoshiSounds.(All).fall2", class'Sound')); Default.Land = Land; HitSound3=Sound(DynamicLoadObject("YoshiSounds.(All).pain75_1", class'Sound')); Default.HitSound3 = HitSound3; HitSound4=Sound(DynamicLoadObject("YoshiSounds.(All).pain75_2", class'Sound')); Default.HitSound4 = HitSound4; Footstep1=Sound(DynamicLoadObject("YoshiSounds.(All).bump1", class'Sound')); Default.Footstep1 = Footstep1; Footstep2 = Footstep1; Default.Footstep2 = Footstep1; Footstep3 = Footstep1; Default.Footstep3 = Footstep1; Mesh=Mesh(DynamicLoadObject("Yoshi.Yoshi", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } a%E&&arabSkins.%%%%arabskins..arab.arab w* A.AWolf.AWolf 9w* G.BobaFett.BobaFett ?w* ?.Dire.Dire 7w* 3 /6666666r*?,a&!;>a!:r*?,a&!9>a&!8>a!7 hR& a!Q ikL. j5!V!Pa%!$666666?,!@!??,!>!=!I!O$!5!TA!M!S`!a&!<!a&!<a%!<2a%!A ! !666666k6`r*?,a!#ha!"r*?,a!!a! ?,a&! ף<a&!F ף< l20  r* -G a!- ::$333?yr*?,a!a!6666666Rr*?,B:% :%a!#Oa&!N>w:% :%a!"a&!K>r*?,:% :%a!!a&!6>:% :%a! a&!J>iw*-Y?,a&!>fa&!C>=r*?,a!H??>a!E??>_r*?,7@?! !\Q?!\!@?! !?!!a>>a>>> Q//============================================================================= // MMlordmaul. //============================================================================= class MMlordmaul expands MM_BaseMale; simulated function PostbeginPlay(){ Mesh = Mesh(DynamicLoadObject("LordMaul.LordMaul", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } m1&*-a%!$a!B L1!+a! = y1!) - =a! = 6?, @??a!' =a!D = #1!0 1!1a!/ = 6j6333? -u?a!U = 6- ?a!% =a! = nKg 6p'(ޚܞѨ]LordMaul.LordMaul ]LordMaul.LordMaul ] Lord Maul : TCC 6qƈ F_X'X'[]6Rmko.SelectRumiko ]Botpack.TrophyFemale2 MFemale -Rumiko]BotPack.VoiceFemaleTwoo#C&&DrakeSkins.%%%%DrakeSkins.%%%%Drakeskins.Drakeskins..Drake.Drake w* 36666666r*?,a&!;>a!:r*?,a&!9>a&!8>a!7 sR%a!Q tvL-+ u3!V!Pa%!$666666?,!@!??,!>!=!I!O$!5!TA!M!S`!a&!<!a&!<a%!<2a%!A ! !666666k6`r*?,a!#ha!"r*?,a!!a! ?,a&! ף<a&!F ף< w2  r* -G a!- ::$333?yr*?,a!a!6666666Rr*?,B:% :%a!#Oa&!N>w:% :%a!"a&!K>r*?,:% :%a!!a&!6>:% :%a! a&!J>iw*-Y?,a&!>fa&!C>=r*?,a!H??>a!E??>_r*?,7@?! !\Q?!\!@?! !?!!a>>a>>> In//============================================================================= // MMlobo. //============================================================================= class MMlobo expands MM_BaseMale; //Allows ducking to use the crouch aim found in HL models...... function PlayDuck() { BaseEyeHeight = 0; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckUpSmaim', 0.3); else //I put whole animation in on accident and I'm too lazy to get rid of it, so I might as well USE it..... LoopAnim('duckUpLgaim'); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckDnSmaim', 0.3); else TweenAnim('duckDnLgaim', 0.3); } } else LoopAnim('DuckWait'); } function PlayCrawling() { //log("Play duck"); BaseEyeHeight = 0; LoopAnim('DuckWlkL'); } //no recoil animaiton in HL... function PlayRecoil(float Rate) { PlayFiring(); } //crouching shooting handled here...... function PlayFiring() { // switch animation sequence mid-stream if needed if (AnimSequence == 'RunLG') AnimSequence = 'RunLGFR'; else if (GetAnimGroup(AnimSequence) == 'Ducking') { //ducking fire....... ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { if (Weapon.Mass < 20) AnimSequence = 'DuckDnSmFR'; else AnimSequence = 'DuckDnLgFr'; } else { if ( Weapon.Mass < 20) AnimSequence = 'DuckUpSMFR'; else AnimSequence = 'DuckUpLgFR'; } } else if (AnimSequence == 'RunSM') AnimSequence = 'RunSMFR'; else if (AnimSequence == 'WalkLG') AnimSequence = 'WalkLGFR'; else if (AnimSequence == 'WalkSM') AnimSequence = 'WalkSMFR'; else if ( AnimSequence == 'JumpSMFR' ) TweenAnim('JumpSMFR', 0.03); else if ( AnimSequence == 'JumpLGFR' ) TweenAnim('JumpLGFR', 0.03); else if ( (GetAnimGroup(AnimSequence) == 'Waiting') || (GetAnimGroup(AnimSequence) == 'Gesture') && (AnimSequence != 'TreadLG') && (AnimSequence != 'TreadSM') ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimUpSmFr'); } else{ PlayAnim('AimUpLgFr'); } } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimDnSmFr'); } else{ PlayAnim('AimDnLgFr'); } } } else{ if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.02); else TweenAnim('StillLgFr', 0.02); }} } //handles aiming....... function PlayWaiting() { local name newAnim; if ( Mesh == None ) return; if ( bIsTyping ) { PlayChatting(); return; } if ( (IsInState('PlayerSwimming')) || (Physics == PHYS_Swimming) ) { BaseEyeHeight = 0.7 * Default.BaseEyeHeight; if ( (Weapon == None) || (Weapon.Mass < 20) ) LoopAnim('TreadSM'); else LoopAnim('TreadLG'); } else { BaseEyeHeight = Default.BaseEyeHeight; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpSmFr'); else TweenAnim('AimUpSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpLgFr'); else TweenAnim('AimUpLg', 0.3);} } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnSmFr'); else TweenAnim('AimDnSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnLgFr'); else TweenAnim('AimDnLg', 0.3);} } } else if ( (Weapon != None) && Weapon.bPointing ) { if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.3); else TweenAnim('StillFRRP', 0.3); } else { if ( FRand() < 0.1 ) { if ( (Weapon == None) || (Weapon.Mass < 20) ) PlayAnim('CockGun', 0.5 + 0.5 * FRand(), 0.3); else PlayAnim('CockGunL', 0.5 + 0.5 * FRand(), 0.3); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1') || (AnimSequence == 'Breath2')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1'; else newAnim = 'Breath2'; } else { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1L') || (AnimSequence == 'Breath2L')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1L'; else newAnim = 'Breath2L'; } if ( AnimSequence == newAnim ) LoopAnim(newAnim, 0.4 + 0.4 * FRand()); else PlayAnim(newAnim, 0.4 + 0.4 * FRand(), 0.25); } } } } //to use crouch death...... function PlayDying(name DamageType, vector HitLoc) { BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if (GetAnimGroup(AnimSequence) == 'Ducking') { PlayAnim('Deadduck'); return; } if ( DamageType == 'Suicided' ) { PlayAnim('Dead8',, 0.1); return; } // check for head hit if ( (DamageType == 'Decapitated') && !class'GameInfo'.Default.bVeryLowGore ) { PlayDecap(); return; } if ( FRand() < 0.1 ) { PlayAnim('Dead2',,0.1); return; } // check for big hit if ( (Velocity.Z > 250) && (FRand() < 0.75) ) { if ( FRand() < 0.5 ) PlayAnim('Dead1',,0.1); else PlayAnim('Dead11',, 0.1); return; } // check for repeater death if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) ) { PlayAnim('Dead9',, 0.1); return; } if ( (HitLoc.Z - Location.Z > 0.7 * CollisionHeight) && !class'GameInfo'.Default.bVeryLowGore ) { if ( FRand() < 0.5 ) PlayDecap(); else PlayAnim('Dead7',, 0.1); return; } if ( Region.Zone.bWaterZone || (FRand() < 0.5) ) //then hit in front or back PlayAnim('Dead3',, 0.1); else PlayAnim('Dead8',, 0.1); } simulated function PostbeginPlay(){ FaceSkin=1; Default.FaceSkin=1; DefaultSkinName="LoboSkins.%%%%"; Default.DefaultSkinName="LoboSkins.%%%%"; DefaultPackage="Loboskins."; Default.DefaultPackage="Loboskins."; Mesh = Mesh(DynamicLoadObject("Lobo.Lobo", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } x7&*-a%!$a!B L7!+a! = y7!) - =a! = 6?, @??a!' =a!D = #7!0 7!1a!/ = 6`6333? -u?a!U = 6- ?a!% =a! = yJk 6{l |ܞѨ1X'X'X'X'X'X'X'X'X'X'X'X'X'X'MLoboSkins.%%%%= Loboskins.] Lobo.Lobo : R)//============================================================================= // MMVF1J. //============================================================================= class MMVF1J expands MM_BaseMale; simulated function PostBeginPlay(){ HitSound1= Sound(DynamicLoadObject("ValkyrieSounds.(All).pain100_1", class'Sound')); Default.HitSound1 = HitSound1; HitSound2= Sound(DynamicLoadObject("ValkyrieSounds.(All).pain100_2", class'Sound')); Default.HitSound2 = HitSound2; Deaths[0]= Sound(DynamicLoadObject("ValkyrieSounds.(All).death4", class'Sound')); Default.Deaths[0] = Deaths[0]; Deaths[1]= Sound(DynamicLoadObject("ValkyrieSounds.(All).Death3", class'Sound')); Default.Deaths[1] = Deaths[1]; Deaths[2]= Sound(DynamicLoadObject("ValkyrieSounds.(All).Death2", class'Sound')); Default.Deaths[2] = Deaths[2]; Deaths[3]= Sound(DynamicLoadObject("ValkyrieSounds.(All).Death1", class'Sound')); Default.Deaths[3] = Deaths[3]; Deaths[4]= Deaths[2]; Default.Deaths[4]= Deaths[2]; Deaths[5]= Deaths[0]; Default.Deaths[5]= Deaths[0]; UWHit1 = Sound(DynamicLoadObject("ValkyrieSounds.(All).pain75_1", class'Sound')); Default.UWHit1 = UWHit1; UWHit2 = UWHit1; Default.UWHit2 = UWHit1; Die = Deaths[0]; Default.Die = Deaths[0]; Die2 = Deaths[1]; Default.Die2 = Deaths[1]; Die3 = Deaths[2]; Default.Die3 = Deaths[2]; Die4 = Deaths[3]; Default.Die4 = Deaths[3]; LandGrunt = Sound(DynamicLoadObject("ValkyrieSounds.(All).fall1", class'Sound')); Default.LandGrunt = LandGrunt; JumpSound = Sound(DynamicLoadObject("ValkyrieSounds.(All).Jump2", class'Sound')); Default.JumpSound = JumpSound; Land = Sound(DynamicLoadObject("ValkyrieSounds.(All).fall2", class'Sound')); Default.Land = Land; HitSound3=Sound(DynamicLoadObject("ValkyrieSounds.(All).pain75_2", class'Sound')); Default.HitSound3 = HitSound3; HitSound4=Sound(DynamicLoadObject("ValkyrieSounds.(All).pain50_2", class'Sound')); Default.HitSound4 = HitSound4; breathagain = Sound(DynamicLoadObject("ValkyrieSounds.(All).gurp1", class'Sound')); Default.breathagain = breathagain; GaspSound = breathagain; Default.GaspSound = breathagain; Drown = Sound(DynamicLoadObject("ValkyrieSounds.(All).drown1", class'Sound')); Default.Drown = Drown; Footstep1=Sound(DynamicLoadObject("ValkyrieSounds.(All).Bump", class'Sound')); Default.Footstep1 = Footstep1; Footstep2 = Footstep1; Default.Footstep2 = Footstep1; Footstep3 = Footstep1; Default.Footstep3 = Footstep1; Mesh=Mesh(DynamicLoadObject("VF1J.VF1J", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } z!&&gordonSkins.gordgordonSkins.gordgordonskins.gordonskins..gordon.gordon w* ,,,,&&GuardianSkins.guarGuardianSkins.guarGuardianSkins.GuardianSkins..Guardian.Guardian w* I.HellSpawn.HellSpawn Aw* 3 -6666666r*?,a&!;>a!:r*?,a&!9>a&!8>a!7 @R&a!Q ACL. B5!V!Pa%!$666666?,!@!??,!>!=!I!O$!5!TA!M!S`!a&!<!a&!<a%!<2a%!A ! !666666k6`r*?,a!#ha!"r*?,a!!a! ?,a&! ף<a&!F ף< D2.  r* -G a!- ::$333?yr*?,a!a!6666666Rr*?,B:% :%a!#Oa&!N>w:% :%a!"a&!K>r*?,:% :%a!!a&!6>:% :%a! a&!J>iw*-Y?,a&!>fa&!C>=r*?,a!H??>a!E??>_r*?,7@?! !\Q?!\!@?! !?!!a>>a>>> U//============================================================================= // MMhellspawn. //============================================================================= class MMhellspawn expands MM_BaseMale; simulated function PostbeginPlay(){ Mesh = Mesh(DynamicLoadObject("HellSpawn.HellSpawn", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } E/&*-a%!$a!B L/!+a! = y/!) - =a! = 6?, @??a!' =a!D = #/!0 /!1a!/ = 6i6333? -u?a!U = 6- ?a!% =a! = Fi 6HIQܞѨ]HellSpawn.HellSpawn ]HellSpawn.HellSpawn ] HellSpawn : t //============================================================================= // MMriot. //============================================================================= class MMriot expands MM_BaseFemale; simulated function PostBeginPlay(){ TeamSkin1=1; Default.TeamSkin1=1; TeamSkin2=2; Default.TeamSkin2=2; DefaultSkinName="RiotSkins.cybe"; Default.DefaultSkinName="RiotSkins.cybe"; DefaultPackage="RiotSkins."; Default.DefaultPackage="RiotSkins."; Mesh=Mesh(DynamicLoadObject("RiotGirl.Riot", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } G#A&&LoboSkins.%%%%LoboSkins.%%%%Loboskins.Loboskins..Lobo.Lobo w* G.LordMaul.LordMaul ?w* &&,,6Marineskins.mari6Marineskins.mari6Marineskins.6Marineskins..6Marine.Marine w* &&,,MaskSkins.MaskMaskSkins.MaskMaskSkins.MaskSkins..Mask.Mask w* &,obiwanSkins.obiwobiwanSkins..obiwan.obiwan w* %.ProwlSounds.(All).death1 %%&.ProwlSounds.(All).Death2 &&,.ProwlSounds.(All).Death3 ,,,.ProwlSounds.(All).Death4 ,,,%,,,&,,.ProwlSounds.(All).drown1 .ProwlSounds.(All).gurp1 .ProwlSounds.(All).gurp2 .ProwlSounds.(All).fall2 .ProwlSounds.(All).fall1 %.Prowl.Prowl w* M.Ratamahatta.Ratamahatta Ew* I.Sideswipe.Sideswipe Aw* 3 96666666r*?,a&!;>a!:r*?,a&!9>a&!8>a!7 RR&a!Q SUL. T5!V!Pa%!$666666?,!@!??,!>!=!I!O$!5!TA!M!S`!a&!<!a&!<a%!<2a%!A ! !666666k6`r*?,a!#ha!"r*?,a!!a! ?,a&! ף<a&!F ף< V2:  r* -G a!- ::$333?yr*?,a!a!6666666Rr*?,B:% :%a!#Oa&!N>w:% :%a!"a&!K>r*?,:% :%a!!a&!6>:% :%a! a&!J>iw*-Y?,a&!>fa&!C>=r*?,a!H??>a!E??>_r*?,7@?! !\Q?!\!@?! !?!!a>>a>>> r //============================================================================= // MMguardian. //============================================================================= class MMguardian expands MM_BaseMale; simulated function PostbeginPlay(){ FaceSkin=3; Default.FaceSkin=3; FixedSkin=2; Default.FixedSkin=2; TeamSkin2=1; Default.TeamSkin2=1; DefaultSkinName="GuardianSkins.guar"; Default.DefaultSkinName="GuardianSkins.guar"; DefaultPackage="GuardianSkins."; Default.DefaultPackage="GuardianSkins."; Mesh = Mesh(DynamicLoadObject("Guardian.Guardian", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } W0&*-a%!$a!B L0!+a! = y0!) - =a! = 6?, @??a!' =a!D = #0!0 0!1a!/ = 6f6333? -u?a!U = 6- ?a!% =a! = X~j 6Z2ܞѨ`"k"("]GuardianSkins.guarMGuardianSkins.]Guardian.SelectionGuardian ]Guardian.TrophyGuardian ] Guardian : [//============================================================================= // MMratamahatta. //============================================================================= class MMratamahatta expands MM_BaseMale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("Ratamahatta.Ratamahatta", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } Y 4'ee V >  = ! !}!}=2 } }>z22 p2 z  !p ! ,p 3p3 ,p 4p4 ppp >S&=p S&:J, %pp 1T_RJp 1 %p 1cw. *{!. .ppp >5= c. .solidsnakeskins.snak5snake   ~k//============================================================================= // MMgordon. //============================================================================= class MMgordon expands MM_BaseMale; function PlayDuck() { BaseEyeHeight = 0; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckUpSmaim', 0.3); else //I put whole animation in on accident and I'm too lazy to get rid of it, so I might as well USE it..... LoopAnim('duckUpLgaim'); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckDnSmaim', 0.3); else TweenAnim('duckDnLgaim', 0.3); } } else LoopAnim('DuckWait'); } function PlayCrawling() { //log("Play duck"); BaseEyeHeight = 0; LoopAnim('DuckWlkL'); } //no reco function PlayRecoil(float Rate) { PlayFiring(); } function PlayFiring() { // switch animation sequence mid-stream if needed if (AnimSequence == 'RunLG') AnimSequence = 'RunLGFR'; else if (GetAnimGroup(AnimSequence) == 'Ducking') { //ducking fire....... ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { if (Weapon.Mass < 20) AnimSequence = 'DuckDnSmFR'; else AnimSequence = 'DuckDnLgFr'; } else { if ( Weapon.Mass < 20) AnimSequence = 'DuckUpSMFR'; else AnimSequence = 'DuckUpLgFR'; } } else if (AnimSequence == 'RunSM') AnimSequence = 'RunSMFR'; else if (AnimSequence == 'WalkLG') AnimSequence = 'WalkLGFR'; else if (AnimSequence == 'WalkSM') AnimSequence = 'WalkSMFR'; else if ( AnimSequence == 'JumpSMFR' ) TweenAnim('JumpSMFR', 0.03); else if ( AnimSequence == 'JumpLGFR' ) TweenAnim('JumpLGFR', 0.03); else if ( (GetAnimGroup(AnimSequence) == 'Waiting') || (GetAnimGroup(AnimSequence) == 'Gesture') && (AnimSequence != 'TreadLG') && (AnimSequence != 'TreadSM') ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimUpSmFr'); } else{ PlayAnim('AimUpLgFr'); } } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimDnSmFr'); } else{ PlayAnim('AimDnLgFr'); } } } else{ if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.02); else TweenAnim('StillLgFr', 0.02); }} } function PlayWaiting() { local name newAnim; if ( Mesh == None ) return; if ( bIsTyping ) { PlayChatting(); return; } if ( (IsInState('PlayerSwimming')) || (Physics == PHYS_Swimming) ) { BaseEyeHeight = 0.7 * Default.BaseEyeHeight; if ( (Weapon == None) || (Weapon.Mass < 20) ) LoopAnim('TreadSM'); else LoopAnim('TreadLG'); } else { BaseEyeHeight = Default.BaseEyeHeight; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpSmFr'); else TweenAnim('AimUpSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpLgFr'); else TweenAnim('AimUpLg', 0.3);} } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnSmFr'); else TweenAnim('AimDnSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnLgFr'); else TweenAnim('AimDnLg', 0.3);} } } else if ( (Weapon != None) && Weapon.bPointing ) { if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.3); else TweenAnim('StillFRRP', 0.3); } else { if ( FRand() < 0.1 ) { if ( (Weapon == None) || (Weapon.Mass < 20) ) PlayAnim('CockGun', 0.5 + 0.5 * FRand(), 0.3); else PlayAnim('CockGunL', 0.5 + 0.5 * FRand(), 0.3); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1') || (AnimSequence == 'Breath2')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1'; else newAnim = 'Breath2'; } else { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1L') || (AnimSequence == 'Breath2L')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1L'; else newAnim = 'Breath2L'; } if ( AnimSequence == newAnim ) LoopAnim(newAnim, 0.4 + 0.4 * FRand()); else PlayAnim(newAnim, 0.4 + 0.4 * FRand(), 0.25); } } } } //to use crouch death...... function PlayDying(name DamageType, vector HitLoc) { BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if (GetAnimGroup(AnimSequence) == 'Ducking') { PlayAnim('Deadduck'); return; } if ( DamageType == 'Suicided' ) { PlayAnim('Dead8',, 0.1); return; } // check for head hit if ( (DamageType == 'Decapitated') && !class'GameInfo'.Default.bVeryLowGore ) { PlayDecap(); return; } if ( FRand() < 0.1 ) { PlayAnim('Dead2',,0.1); return; } // check for big hit if ( (Velocity.Z > 250) && (FRand() < 0.75) ) { if ( FRand() < 0.5 ) PlayAnim('Dead1',,0.1); else PlayAnim('Dead11',, 0.1); return; } // check for repeater death if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) ) { PlayAnim('Dead9',, 0.1); return; } if ( (HitLoc.Z - Location.Z > 0.7 * CollisionHeight) && !class'GameInfo'.Default.bVeryLowGore ) { if ( FRand() < 0.5 ) PlayDecap(); else PlayAnim('Dead7',, 0.1); return; } if ( Region.Zone.bWaterZone || (FRand() < 0.5) ) //then hit in front or back PlayAnim('Dead3',, 0.1); else PlayAnim('Dead8',, 0.1); } simulated function PostbeginPlay(){ FaceSkin=1; Default.FaceSkin=1; DefaultSkinName="gordonSkins.gord"; Default.DefaultSkinName="gordonSkins.gord"; DefaultPackage="gordonskins."; Default.DefaultPackage="gordonskins."; Mesh = Mesh(DynamicLoadObject("gordon.gordon", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } ]}n 6^vÚܞѨ1X'X'X'X'X'X'X'X'X'X'X'X'X'X']gordonSkins.gord] gordonskins.]gordon.gordon : Qn//============================================================================= // MMdrake. //============================================================================= class MMdrake expands MM_BaseMale; //Allows ducking to use the crouch aim found in HL models...... function PlayDuck() { BaseEyeHeight = 0; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckUpSmaim', 0.3); else //I put whole animation in on accident and I'm too lazy to get rid of it, so I might as well USE it..... LoopAnim('duckUpLgaim'); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckDnSmaim', 0.3); else TweenAnim('duckDnLgaim', 0.3); } } else LoopAnim('DuckWait'); } function PlayCrawling() { //log("Play duck"); BaseEyeHeight = 0; LoopAnim('DuckWlkL'); } //no recoil animaiton in HL... function PlayRecoil(float Rate) { PlayFiring(); } //crouching shooting handled here...... function PlayFiring() { // switch animation sequence mid-stream if needed if (AnimSequence == 'RunLG') AnimSequence = 'RunLGFR'; else if (GetAnimGroup(AnimSequence) == 'Ducking') { //ducking fire....... ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { if (Weapon.Mass < 20) AnimSequence = 'DuckDnSmFR'; else AnimSequence = 'DuckDnLgFr'; } else { if ( Weapon.Mass < 20) AnimSequence = 'DuckUpSMFR'; else AnimSequence = 'DuckUpLgFR'; } } else if (AnimSequence == 'RunSM') AnimSequence = 'RunSMFR'; else if (AnimSequence == 'WalkLG') AnimSequence = 'WalkLGFR'; else if (AnimSequence == 'WalkSM') AnimSequence = 'WalkSMFR'; else if ( AnimSequence == 'JumpSMFR' ) TweenAnim('JumpSMFR', 0.03); else if ( AnimSequence == 'JumpLGFR' ) TweenAnim('JumpLGFR', 0.03); else if ( (GetAnimGroup(AnimSequence) == 'Waiting') || (GetAnimGroup(AnimSequence) == 'Gesture') && (AnimSequence != 'TreadLG') && (AnimSequence != 'TreadSM') ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimUpSmFr'); } else{ PlayAnim('AimUpLgFr'); } } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimDnSmFr'); } else{ PlayAnim('AimDnLgFr'); } } } else{ if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.02); else TweenAnim('StillLgFr', 0.02); }} } //handles aiming....... function PlayWaiting() { local name newAnim; if ( Mesh == None ) return; if ( bIsTyping ) { PlayChatting(); return; } if ( (IsInState('PlayerSwimming')) || (Physics == PHYS_Swimming) ) { BaseEyeHeight = 0.7 * Default.BaseEyeHeight; if ( (Weapon == None) || (Weapon.Mass < 20) ) LoopAnim('TreadSM'); else LoopAnim('TreadLG'); } else { BaseEyeHeight = Default.BaseEyeHeight; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpSmFr'); else TweenAnim('AimUpSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpLgFr'); else TweenAnim('AimUpLg', 0.3);} } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnSmFr'); else TweenAnim('AimDnSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnLgFr'); else TweenAnim('AimDnLg', 0.3);} } } else if ( (Weapon != None) && Weapon.bPointing ) { if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.3); else TweenAnim('StillFRRP', 0.3); } else { if ( FRand() < 0.1 ) { if ( (Weapon == None) || (Weapon.Mass < 20) ) PlayAnim('CockGun', 0.5 + 0.5 * FRand(), 0.3); else PlayAnim('CockGunL', 0.5 + 0.5 * FRand(), 0.3); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1') || (AnimSequence == 'Breath2')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1'; else newAnim = 'Breath2'; } else { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1L') || (AnimSequence == 'Breath2L')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1L'; else newAnim = 'Breath2L'; } if ( AnimSequence == newAnim ) LoopAnim(newAnim, 0.4 + 0.4 * FRand()); else PlayAnim(newAnim, 0.4 + 0.4 * FRand(), 0.25); } } } } //to use crouch death...... function PlayDying(name DamageType, vector HitLoc) { BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if (GetAnimGroup(AnimSequence) == 'Ducking') { PlayAnim('Deadduck'); return; } if ( DamageType == 'Suicided' ) { PlayAnim('Dead8',, 0.1); return; } // check for head hit if ( (DamageType == 'Decapitated') && !class'GameInfo'.Default.bVeryLowGore ) { PlayDecap(); return; } if ( FRand() < 0.1 ) { PlayAnim('Dead2',,0.1); return; } // check for big hit if ( (Velocity.Z > 250) && (FRand() < 0.75) ) { if ( FRand() < 0.5 ) PlayAnim('Dead1',,0.1); else PlayAnim('Dead11',, 0.1); return; } // check for repeater death if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) ) { PlayAnim('Dead9',, 0.1); return; } if ( (HitLoc.Z - Location.Z > 0.7 * CollisionHeight) && !class'GameInfo'.Default.bVeryLowGore ) { if ( FRand() < 0.5 ) PlayDecap(); else PlayAnim('Dead7',, 0.1); return; } if ( Region.Zone.bWaterZone || (FRand() < 0.5) ) //then hit in front or back PlayAnim('Dead3',, 0.1); else PlayAnim('Dead8',, 0.1); } simulated function PostbeginPlay(){ FaceSkin=1; Default.FaceSkin=1; DefaultSkinName="DrakeSkins.%%%%"; Default.DefaultSkinName="DrakeSkins.%%%%"; DefaultPackage="Drakeskins."; Default.DefaultPackage="Drakeskins."; Mesh = Mesh(DynamicLoadObject("Drake.Drake", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } w//============================================================================= // MMtfemaletwo. //============================================================================= class MMtfemaletwo expands MM_BaseFemale; simulated function PostBeginPlay(){ Skin = Texture(DynamicLoadObject("Female2Skins.Katryn", class'Texture')); Default.Skin = Skin; Mesh=Mesh(DynamicLoadObject("UnrealI.Female2", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } MOc 6a41)ܞѨ] Prowl.Prowl ] Prowl.Prowl ]ProwlE : _rl 6bʠݯܞѨ1X'X'X'X'X'X'X'X'X'X'X'X'X'X']DrakeSkins.%%%%] Drakeskins.] Drake.Drake : C//============================================================================= // MMdire. //============================================================================= class MMdire expands MM_BaseMale; simulated function PostbeginPlay(){ Mesh = Mesh(DynamicLoadObject("Dire.Dire", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; Super.PostBeginPlay(); } cgm 6doߚܞѨ] Dire.Dire ] Dire.Dire ]Dire : N//============================================================================= // MMbobafett. //============================================================================= class MMbobafett expands MM_BaseMale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("BobaFett.BobaFett", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } \Y &solidsnakeSkins.snaksolidsnakeskins..solidsnake.solidsnake w* I.tekkblade.tekkblade Aw* ,,,,&&TroopSkins.trprTroopSkins.trprTroopSkins.TroopSkins..Troop.Troop w* C.q2male.q2male ;w* C.Hunter.Hunter ;w* %.Linfang.Skins.Jlinfang %%&.Linfang.Skins.linf1t_0 &&,.Linfang.Skins.linf1t_1 ,,.Linfang.Linfang w* E.messiah.messiah =w* A.rhino.rhino 9w* SMaleSkins.CtfMSMaleSkins.CtfMSMaleSkins.SMaleSkins.supermale.SMaleCarcass .supermale.SMale w* ) /H-w*:&r*-bL=<6-a $?(zD? BB{>) B+?) ) ,-a)$?(C?Fa)$?(HD? efp 6p.ܞѨ]BobaFett.BobaFett ]BobaFett.BobaFett ] BobaFett : B//============================================================================= // MMawolf. //============================================================================= class MMawolf expands MM_BaseMale; simulated function PostBeginPlay(){ Mesh=Mesh(DynamicLoadObject("AWolf.AWolf", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } o!|UnrealI.MaleOneCarcass .UnrealI.Male1 tw* |UnrealI.MaleTwoCarcass .UnrealI.Male2 tw* UnrealShare.MaleThreeCarcass .UnrealShare.Male3 ~w* .ValkyrieSounds.(All).pain100_2 .ValkyrieSounds.(All).pain100_1 %.ValkyrieSounds.(All).death1 %%&.ValkyrieSounds.(All).Death2 &&,.ValkyrieSounds.(All).Death3 ,,,.ValkyrieSounds.(All).Death4 ,,,&,&,,,,.ValkyrieSounds.(All).pain75_1 ,,,,&&%%.ValkyrieSounds.(All).fall1 .ValkyrieSounds.(All).Jump2 .ValkyrieSounds.(All).fall2 .ValkyrieSounds.(All).pain50_2 .ValkyrieSounds.(All).pain75_2 .ValkyrieSounds.(All).gurp1 .ValkyrieSounds.(All).Bump .VF1A.VF1A w*  .ValkyrieSounds.(All).pain100_1 .ValkyrieSounds.(All).pain100_2 %.ValkyrieSounds.(All).death4 %%&.ValkyrieSounds.(All).Death3 &&,.ValkyrieSounds.(All).Death2 ,,,.ValkyrieSounds.(All).Death1 ,,,,,,,%,%.ValkyrieSounds.(All).pain75_1 %%&&,,,,.ValkyrieSounds.(All).fall1 .ValkyrieSounds.(All).Jump2 .ValkyrieSounds.(All).fall2 .ValkyrieSounds.(All).pain75_2 .ValkyrieSounds.(All).pain50_2 .ValkyrieSounds.(All).gurp1 .ValkyrieSounds.(All).drown1 .ValkyrieSounds.(All).Bump .VF1J.VF1J w* .YoshiSounds.(All).pain100_1 .YoshiSounds.(All).pain100_2 %.YoshiSounds.(All).death1 %%&%&%,%,%,%,%,%,%,%,%.YoshiSounds.(All).gurp1 %%.YoshiSounds.(All).fall1 .YoshiSounds.(All).Jump2 .YoshiSounds.(All).fall2 .YoshiSounds.(All).pain75_1 .YoshiSounds.(All).pain75_2 .YoshiSounds.(All).bump1 .Yoshi.Yoshi w*  BenderSkins.bendBenderSkins.bendBenderSkins.BenderSkins..bender.bender w*%.bender.benderDeath1 %%&.bender.benderDeath2 &&,.bender.benderDeath3 ,,,.bender.benderDeath4 ,,,.bender.benderDeath5 ,,,.bender.benderDeath6 ,, x4'MmVI ?}}Iz??BenderSkins.p?:,7 %pp1T_Rpp1T_R7 %p1p1 %pp1T_Rpp1T_R &pp2T_Rpp2T_R ,pp3T_Rpp3T_R ,pp4T_Rpp4T_Re %p1 &p2p2 ,p3p3 ,p4p4w.*..p5Bender   qer 6zVYܞѨ] AWolf.AWolf ] AWolf.AWolf ]AWolf : Pn//============================================================================= // MMarab. //============================================================================= class MMarab expands MM_BaseMale; //Allows ducking to use the crouch aim found in HL models...... function PlayDuck() { BaseEyeHeight = 0; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckUpSmaim', 0.3); else //I put whole animation in on accident and I'm too lazy to get rid of it, so I might as well USE it..... LoopAnim('duckUpLgaim'); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('duckDnSmaim', 0.3); else TweenAnim('duckDnLgaim', 0.3); } } else LoopAnim('DuckWait'); } function PlayCrawling() { //log("Play duck"); BaseEyeHeight = 0; LoopAnim('DuckWlkL'); } //no recoil animaiton in HL... function PlayRecoil(float Rate) { PlayFiring(); } //crouching shooting handled here...... function PlayFiring() { // switch animation sequence mid-stream if needed if (AnimSequence == 'RunLG') AnimSequence = 'RunLGFR'; else if (GetAnimGroup(AnimSequence) == 'Ducking') { //ducking fire....... ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { if (Weapon.Mass < 20) AnimSequence = 'DuckDnSmFR'; else AnimSequence = 'DuckDnLgFr'; } else { if ( Weapon.Mass < 20) AnimSequence = 'DuckUpSMFR'; else AnimSequence = 'DuckUpLgFR'; } } else if (AnimSequence == 'RunSM') AnimSequence = 'RunSMFR'; else if (AnimSequence == 'WalkLG') AnimSequence = 'WalkLGFR'; else if (AnimSequence == 'WalkSM') AnimSequence = 'WalkSMFR'; else if ( AnimSequence == 'JumpSMFR' ) TweenAnim('JumpSMFR', 0.03); else if ( AnimSequence == 'JumpLGFR' ) TweenAnim('JumpLGFR', 0.03); else if ( (GetAnimGroup(AnimSequence) == 'Waiting') || (GetAnimGroup(AnimSequence) == 'Gesture') && (AnimSequence != 'TreadLG') && (AnimSequence != 'TreadSM') ) { ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimUpSmFr'); } else{ PlayAnim('AimUpLgFr'); } } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ PlayAnim('AimDnSmFr'); } else{ PlayAnim('AimDnLgFr'); } } } else{ if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.02); else TweenAnim('StillLgFr', 0.02); }} } //handles aiming....... function PlayWaiting() { local name newAnim; if ( Mesh == None ) return; if ( bIsTyping ) { PlayChatting(); return; } if ( (IsInState('PlayerSwimming')) || (Physics == PHYS_Swimming) ) { BaseEyeHeight = 0.7 * Default.BaseEyeHeight; if ( (Weapon == None) || (Weapon.Mass < 20) ) LoopAnim('TreadSM'); else LoopAnim('TreadLG'); } else { BaseEyeHeight = Default.BaseEyeHeight; ViewRotation.Pitch = ViewRotation.Pitch & 65535; If ( (ViewRotation.Pitch > RotationRate.Pitch) && (ViewRotation.Pitch < 65536 - RotationRate.Pitch) ) { If (ViewRotation.Pitch < 32768) { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpSmFr'); else TweenAnim('AimUpSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimUpLgFr'); else TweenAnim('AimUpLg', 0.3);} } else { if ( (Weapon == None) || (Weapon.Mass < 20) ){ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnSmFr'); else TweenAnim('AimDnSm', 0.3);} else{ if ( (bFire != 0) || (bAltFire != 0) ) PlayAnim('AimDnLgFr'); else TweenAnim('AimDnLg', 0.3);} } } else if ( (Weapon != None) && Weapon.bPointing ) { if ( Weapon.Mass < 20 ) TweenAnim('StillSMFR', 0.3); else TweenAnim('StillFRRP', 0.3); } else { if ( FRand() < 0.1 ) { if ( (Weapon == None) || (Weapon.Mass < 20) ) PlayAnim('CockGun', 0.5 + 0.5 * FRand(), 0.3); else PlayAnim('CockGunL', 0.5 + 0.5 * FRand(), 0.3); } else { if ( (Weapon == None) || (Weapon.Mass < 20) ) { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1') || (AnimSequence == 'Breath2')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1'; else newAnim = 'Breath2'; } else { if ( (FRand() < 0.75) && ((AnimSequence == 'Breath1L') || (AnimSequence == 'Breath2L')) ) newAnim = AnimSequence; else if ( FRand() < 0.5 ) newAnim = 'Breath1L'; else newAnim = 'Breath2L'; } if ( AnimSequence == newAnim ) LoopAnim(newAnim, 0.4 + 0.4 * FRand()); else PlayAnim(newAnim, 0.4 + 0.4 * FRand(), 0.25); } } } } //to use crouch death...... function PlayDying(name DamageType, vector HitLoc) { BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if (GetAnimGroup(AnimSequence) == 'Ducking') { PlayAnim('Deadduck'); return; } if ( DamageType == 'Suicided' ) { PlayAnim('Dead8',, 0.1); return; } // check for head hit if ( (DamageType == 'Decapitated') && !class'GameInfo'.Default.bVeryLowGore ) { PlayDecap(); return; } if ( FRand() < 0.1 ) { PlayAnim('Dead2',,0.1); return; } // check for big hit if ( (Velocity.Z > 250) && (FRand() < 0.75) ) { if ( FRand() < 0.5 ) PlayAnim('Dead1',,0.1); else PlayAnim('Dead11',, 0.1); return; } // check for repeater death if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) ) { PlayAnim('Dead9',, 0.1); return; } if ( (HitLoc.Z - Location.Z > 0.7 * CollisionHeight) && !class'GameInfo'.Default.bVeryLowGore ) { if ( FRand() < 0.5 ) PlayDecap(); else PlayAnim('Dead7',, 0.1); return; } if ( Region.Zone.bWaterZone || (FRand() < 0.5) ) //then hit in front or back PlayAnim('Dead3',, 0.1); else PlayAnim('Dead8',, 0.1); } simulated function PostBeginPlay(){ FaceSkin=1; Default.FaceSkin=1; DefaultSkinName="arabSkins.%%%%"; Default.DefaultSkinName = DefaultSkinName; DefaultPackage="arabskins."; Default.DefaultPackage = DefaultPackage; Mesh=Mesh(DynamicLoadObject("arab.arab", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } @{dw 6}ܞѨ1X'X'X'X'X'X'X'X'X'X'X'X'X'X'MarabSkins.%%%%= arabskins.] arab.arab : TrS 6 ~ia!:r*?,a&!9>a&!8>a!7 HR'a!Q IKL/ J6!V!Pa%!$666666?,!@!??,!>!=!I!O$!5!TA!M!S`!a&!<!a&!<a%!<2a%!A ! !666666k6`r*?,a!#ha!"r*?,a!!a! ?,a&! ף<a&!F ף< L29  r* -G a!- ::$333?yr*?,a!a!6666666Rr*?,B:% :%a!#Oa&!N>w:% :%a!"a&!K>r*?,:% :%a!!a&!6>:% :%a! a&!J>iw*-Y?,a&!>fa&!C>=r*?,a!H??>a!E??>_r*?,7@?! !\Q?!\!@?! !?!!a>>a>>> EYv 6N|ۚܞѨW"("]aqueenSkins.aque] aqueenSkins.]aqueen.SelectAqueen ]Botpack.TrophyMale2 ] Alien Queen]BotPack.VoiceMaleTwo : M:&*-a%!$a!B L:!+a! = y:!) - =a! = 6?, @?6M6 - ?a!' L=::$&a  #?w&*&X& 6& 6& 6a!D = :!0 :!1a!/ = g6M6333? -W?ea!U = 6- ?a!% =a! = kK//============================================================================= // MMRumiko. //============================================================================= class MMtcow expands MMBonusPack; simulated function SetMyMesh() { Super.SetMyMesh(); bIsMultiSkinned = true; } static function SetMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum) { local string SkinItem, SkinPackage; if ( SkinActor.Mesh == Default.FallBackMesh ) { Super.SetMultiSkin(SkinActor, "CommandoSkins.cmdo", "Blake", TeamNum); return; } // two skins if ( SkinName == "" ) SkinName = default.DefaultSkinName; else { SkinItem = SkinActor.GetItemName(SkinName); SkinPackage = Left(SkinName, Len(SkinName) - Len(SkinItem)); if( SkinPackage == "" ) { SkinPackage=default.DefaultCustomPackage; SkinName=SkinPackage$SkinName; } } if( !SetSkinElement(SkinActor, 1, SkinName, default.DefaultSkinName) ) SkinName = default.DefaultSkinName; // Set the team elements if( TeamNum < 4 ) {SetSkinElement(SkinActor, 1, SkinName$"T_"$String(TeamNum), default.DefaultSkinName); if(!SetSkinElement(SkinActor, 1, SkinName$"T_"$String(TeamNum), default.DefaultSkinName)) SetSkinElement(SkinActor, 1, SkinName, default.DefaultSkinName); SetSkinElement(SkinActor, 2, skinpackage$"T_cow_"$String(TeamNum), SkinName); if( !SetSkinElement(SkinActor, 2, skinpackage$"T_cow_"$String(TeamNum), default.DefaultSkinName) ) SetSkinElement(SkinActor, 2, "TCowMeshSkins.T_Cow_"$String(TeamNum), SkinName);} else{ SetSkinElement(SkinActor, 1, SkinName, default.DefaultSkinName); SetSkinElement(SkinActor, 2, skinpackage$"cowpack", SkinName); if( !SetSkinElement(SkinActor, 2, skinpackage$"cowpack", default.DefaultSkinName) ) SetSkinElement(SkinActor, 2, "EpicCustomModels.TCowMeshSkins.cowpack", SkinName);} // Set the talktexture (contains other changes too: deletions) if( Pawn(SkinActor) != None ) { Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(SkinName$"Face", class'Texture')); if ( Pawn(SkinActor).PlayerReplicationInfo.TalkTexture == None ) Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(default.DefaultFace, class'Texture')); } } // This is what stops cowy from changing in multiplayer static function GetMultiSkin( Actor SkinActor, out string SkinName, out string FaceName ) { local string FullSkinName; FullSkinName = String(SkinActor.MultiSkins[1]); SkinName = FullSkinName; Facename= ""; } //anifunctions.... function PlayDying(name DamageType, vector HitLoc) { if ( Mesh == FallBackMesh ) { Super.PlayDying(DamageType, HitLoc); return; } BaseEyeHeight = Default.BaseEyeHeight; PlayDyingSound(); if ( DamageType == 'Suicided' ) { PlayAnim('Dead2',, 0.1); return; } // check for head hit if ( DamageType == 'Decapitated' ) { PlayCowDecap(); return; } // check for big hit if ( Velocity.Z > 200 ) { PlayAnim('Dead3',,0.1); return; } if ( HitLoc.Z - Location.Z > 0.7 * CollisionHeight ) { PlayAnim('Dead2',, 0.1); return; } PlayAnim('Dead1',, 0.1); } function PlayCowDecap() { local carcass carc; local class carcclass; if ( class'GameInfo'.Default.bVeryLowGore ) { PlayAnim('Dead2',, 0.1); return; } PlayAnim('Dead4',, 0.1); if ( Level.NetMode != NM_Client ) { carcclass = class(DynamicLoadObject("multimesh.tcowhead", class'Class')); carc = Spawn(carcclass,,, Location + CollisionHeight * vect(0,0,0.8), Rotation + rot(3000,0,16384) ); if (carc != None) { carc.Initfor(self); carc.RemoteRole = ROLE_SimulatedProxy; carc.Velocity = Velocity + VSize(Velocity) * VRand(); carc.Velocity.Z = FMax(carc.Velocity.Z, Velocity.Z); } } } simulated function PostbeginPlay(){ DefaultFace="TCowMeshSkins.WarCowFace"; Default.DefaultFace="TCowMeshSkins.WarCowFace"; TeamSkin="T_cow_"; Default.TeamSkin="T_cow_"; DefaultCustomPackage="TCowMeshSkins."; Default.DefaultCustomPackage="TCowMeshSkins."; DefaultSkinName="TCowMeshSkins.WarCow"; Default.DefaultSkinName="TCowMeshSkins.WarCow"; CarcassType = class(DynamicLoadObject("multimesh.tcowcarcass", class'Class')); if(CarcassType != none) Default.CarcassType = CarcassType; bIsMultiSkinned=False; Default.bIsMultiSkinned=False; Mesh = Mesh(DynamicLoadObject("EpicCustomModels.TCowMesh", class'Mesh')); if (Mesh != none) Default.Mesh = mesh; MultiSkins[2]= Texture(DynamicLoadObject("EpicCustomModels.TCowMeshSkins.cowpack", class'Texture')); if(MultiSkins[2] != none) Default.MultiSkins[2] = MultiSkins[2]; Super.PostBeginPlay(); } I6q@ Ur6 6RC:6:$a!J̬?33>66 66 u=S:6:$a!I̬?33>66 66 u=S:6:$a&!m>Sa!H̬?33>66 66 u= #Ptx 6R ^#\!]H]H]H]H]HԝXԝXԝXt{#Ut{#Ut{#U]u_g^pqrstjh]EpicCustomModels.TCowMeshed ] Nali Cow]MultiMesh.CowVoiceO"4a!Z =::$"a  #L?a<" @w"*"X" 6" 6" 6 ~//============================================================================= // MMRumiko. //============================================================================= class MMRumiko expands MM_BaseFemale; function TweenToWaiting(float tweentime) { if ( (IsInState('PlayerSwimming')) || (Physics == PHYS_Swimming) ) { BaseEyeHeight = 0.7 * Default.BaseEyeHeight; if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('TreadSM', tweentime); else TweenAnim('TreadLG', tweentime); } else { BaseEyeHeight = Default.BaseEyeHeight; if ( (Weapon == None) || (Weapon.Mass < 20) ) TweenAnim('Breath1', tweentime); else TweenAnim('Breath2', tweentime); } } simulated function PostBeginPlay(){ TeamSkin1=1; Default.TeamSkin1 = TeamSkin1; TeamSkin2=2; Default.TeamSkin2 = TeamSkin2; DefaultSkinName="Rumikoskins.rmko"; Default.DefaultSkinName = DefaultSkinName; DefaultPackage="Rumikoskins."; Default.DefaultPackage = DefaultPackage; Mesh=Mesh(DynamicLoadObject("6Rmko.Rumiko", class'Mesh')); if(Mesh != none) Default.mesh = mesh; Super.PostBeginPlay(); } SC,,,,&&trinitySkins.trintrinitySkins.trintrinityskins.trinityskins..trinity.trinity w* I.LadyDeath.LadyDeath Aw*  I.UnrealShare.Female1 Aw* {.Female2Skins.Katryn .UnrealI.Female2 sw* mmoOmoHoJoX^ndhVL ^L_J^o_hGowoLomf[_VooLKojfCoaolfmh oVohoDmSVhHoboy^a^_h(ori@iBh`o^^sonhWohmUofgTosmRk[^N^FhqoioamImcfTLq^|^A^jh}m^^u_&hk^t^r^p^eiK^O^h^dgF^q^_^^^ggHhj_3^roigzgT_Lh]_R_2_^]wMgShM_4iR^`wo^U^FgXwlJDwUoJinJEitws^vgbm^ipokwmwewpwkwN_}wpwDwrwaiyi\fEwBoh_A^yw}_@gSwno`o__|_c_q_DwkwAwEw{w@_o_o&w~wGwFwCo[o\_|_s_tw_}o^wdo]wWwfwjwbwiwNumt_Fn_n_gO_ogQg]JGhuhKqYgMivhGgx^z_n_JG9R SUR `UN mU9N zUR GVR TV;N `VN mVN zVN GW#x TWR `W;R lW9QxW#y FXMc RXc ^Xc jXc vXc BYc NYe ZY#XfYY tYL @ZQMZc [Z#z gZwsZwA[wO[c ][L i[Sw v[.uC\#7xbe ocOw {cQHdd Vd/{bde pd| }d;QIee We;P cee pee }ee Jfe Wfe cfRg pfRN}fQWKge Yg;L fgDY rgOe ~g#4HKhAY Sod _o| ko9e woRf CpY Op/V [pe gp[tpQBql Pqg \q`hq9| vqQBr`PrP ^rOP krZxroFsg Ts| `s#cAlse mu`zuP Hv| UvY avY mvY yv#,KEwRL PzRR \zmizL wzR D{P Q{L ^{R k{Nx{\ F|\ R|P ^|Nk|;\ y|P F}P S}P `}P m}9\ z}rg4SG~zg4_GZ#g4~yg4y>w\JpXJz#Y Dxg4aPg4e qsg4SVWYi;e B#ZMNV\[Z w{g4s Cg4`v#}>VRoT#t>C#[wA#s>xMNv#G-D_[qYPL}\#@:zIt#~ BQOe ]ZI i#ovve l#|VyTEO?T#D-S}@g4F,^IdPrQ@e NAZxye GP Tn\ag4^ }ZR,&[;R4WA]hXg4g@L g^esUOXg4E}gRRcg4Fdzazjhpdg4OT$zIcNbl=3MN=R,[=L"GW i=Bu=2c wg4L Z=&zff|`g4^\=uz :Bo 0Hq $@y "3My "R,F "L"r W T "B` "2c b g4\E "&za gd[ CP "SO 3Mb R,o L"[ W } BI 2c K g4Tnn &zB kC| g4]) Y\ zu Jo 3My R,F L"r W T B` 2c b g4`E &ze ih_ g4 G MF HS g[ VB GX !__ N~ JL 3MV R,c L"O W q B} 2c  g4} b &z_ joY g4fH 4Vn g4IlD nMM "g4\nZ ?g4Bv cXx lIP $g4NY mOg 0g4Yv NO J]hgrDOsDSPWFgBm{uo>cdpcG:g4Mj>lwkcuNDCsGR zXL4YdrT}=g4[nQ9L lwCxSO{QpJBg4Ez|]u}\GYB|]`Ng4C }BT@ZT3MnR,{L"gJW IBU2c Wvvz&QpRg4vKAzqYw#xYPsig4I\uexJZJd?mn System\Manifest.iniSystem\Manifest.intKHelp\MatrixMovesB4Readme.htmCHelp\MatrixMoves_PluginB4.htmJV0Help\MMLogoInst.bmp,{frSystem\MatrixMovesBeta4.ulSystem\MatrixMovesBeta4.intcZSystem\MatrixMovesBeta4.ini\System\MMB4_PluginPack1.utBƶ3x