https://wiki.beyondunreal.com/w/api.php?action=feedcontributions&user=Lord+Farin&feedformat=atomUnreal Wiki - User contributions [en]2017-11-18T00:01:40ZUser contributionsMediaWiki 1.25.1https://wiki.beyondunreal.com/User_talk:Lord_Farin?diff=45373User talk:Lord Farin2013-04-17T22:03:15Z<p>Lord Farin: </p>
<hr />
<div>Hi and welcome to the Unreal Wiki. Thanks for reverting that nonsense edit to the main page. :-) —[[User:Wormbo|Wormbo]] 13:30, 17 April 2009 (UTC)<br />
<br />
:My useful contribution has long since ended. I would like for this page and my overall user page to be deleted. Much appreciated. [[User:Lord Farin|Lord Farin]] 22:03, 17 April 2013 (UTC)</div>Lord Farinhttps://wiki.beyondunreal.com/Legacy:Mod_Ideas/ChargingJumpBoots?diff=45372Legacy:Mod Ideas/ChargingJumpBoots2013-04-17T22:00:16Z<p>Lord Farin: </p>
<hr />
<div>{{classbox|Mod ideas for UT 2003 &ndash; A variable height jump match}}<br />
<br />
==Description ==<br />
<br />
This small mutator is really a logical extension to the UT JumpMatch mutator. At the beginning of play every player is given a pair of charging jump boots. The jump boots jump on release of the jump key rather than when it's pressed. This allows them to be charged up for a mega-super-duper jump. The longer the jump key is held down the higher the wearer will jump. The boots will also eliminate falling damage completely.<br />
<br />
====Interested Scripters ====<br />
<br />
If you are interested in developing this mod for UT2003 then add your name to the list. Once you start development you should indicate that below (and hopefully include a link to a journal page). Before you start development you should also check this section to see if anyone else has started. Effort should never be duplicated, only contributed. (lol - what a slogan).<br />
<br />
==Discussion ==<br />
<br />
'''ZxAnPhOrIaN:''' Could you do that in UT also?<br />
<br />
'''EntropicLqd:''' I don't see any reason why not. I just don't have the time to do anything ''interesting'' at the moment in the evenings. Remember - these pages are simply a dumping ground for ideas - they just happen to be ones that I don't have time to do anything with (from an implementation point of view) at the moment. I'm hoping that will change in the future - we shall see.<br />
<br />
'''DJPaul:''' Sounds much like the jumping system in JK][, which would be not a bad idea to tie into another mod/mutator, because it's not really big enough on itself. Unless it's a mutator. Presuming I get this [[Legacy:DJPaul/TTS|DJPaul/TTS]] thing working/released soon, I think i'll have a look at making this as an UT mutator.<br />
<br />
'''EntropicLqd:''' Hmmm, not sure I agree with that. The beauty of mutators is that you can stack them up. This means that mutators that are "atomic" (provide only a single function) are preferable. It's easier to get the otherwordly combination of effects you want if a mutator only does one thing.<br />
<br />
'''DJPaul:''' What's not atomic, EntropicLqd? Basically, in JK][, the longer you hold down the jump key, the higher you jump - which '''is''' the description of the mutator.<br />
<br />
'''EntropicLqd:''' Hee hee - This is slightly different from the JK2 jump in that you jump ''on release'' of the jump button rather than while the jump key is down. My comment on atomicity actually applies to your comment above, ''"which would be not a bad idea to tie into another mod/mutator, because it's not really big enough on itself."''. The idea is definately worthy of being its own mutator.<br />
<br />
'''DJPaul:''' Is "atomicity" a word?<br />
<br />
'''EntropicLqd:''' I have no idea - but it ought to be. Languages are dynamic things right?</div>Lord Farinhttps://wiki.beyondunreal.com/User:Lord_Farin?diff=34389User:Lord Farin2009-05-06T19:15:22Z<p>Lord Farin: </p>
<hr />
<div>__NOTOC__<br />
<br />
Some personalia:<br />
<br />
*Username: Lord_Farin<br />
*Mapping Exp: Quite some<br />
*Scripting Exp: Just starting, finished following projects:<br />
**MultiWeaponBase for UT2k4 (check http://forums.beyondunreal.com/showthread.php?p=2283912#post2283912)<br />
**KamiKaze combo for UT2k4, gives you infinite (999) ammo and all non-superweapons, berserk, and faster movement rate. After it expires, you die (violently).<br />
**ChargedJump Mutator (UT2k4). Jump is charged by holding jump arrow, falling damage will be removed.<br />
*Miscellaneous:<br><br />
Loads of experience on programming, capable of more than 10 languages, including Haskell, Mathematica, C++ and PHP.<br><br />
If you would like to have one of my projects, please post on [[User_Talk:Lord_Farin|my Talk page]].</div>Lord Farinhttps://wiki.beyondunreal.com/User:Lord_Farin?diff=34388User:Lord Farin2009-05-06T19:09:17Z<p>Lord Farin: </p>
<hr />
<div>__NOTOC__<br />
<br />
Some personalia:<br />
<br />
*Username: Lord_Farin<br />
*Mapping Exp: Quite some<br />
*Scripting Exp: Just starting, finished following projects:<br />
**MultiWeaponBase for UT2k4 (check http://forums.beyondunreal.com/showthread.php?p=2283912#post2283912)<br />
**KamiKaze combo for UT2k4, gives you infinite (999) ammo and all non-superweapons, berserk, and faster movement rate. After it expires, you die (violently).<br />
**ChargedJump Mutator (UT2k4). Jump is charged by holding up arrow, falling damage will be removed.<br />
*Miscellaneous:<br><br />
Loads of experience on programming, capable of more than 10 languages, including Haskell, Mathematica, C++ and PHP.<br><br />
If you would like to have one of my projects, please post on [[User_Talk:Lord_Farin|my Talk page]].</div>Lord Farinhttps://wiki.beyondunreal.com/User:Lord_Farin?diff=34387User:Lord Farin2009-05-06T19:08:51Z<p>Lord Farin: </p>
<hr />
<div>__NOTOC__<br />
<br />
Some personalia:<br />
<br />
*Username: Lord_Farin<br />
*Mapping Exp: Quite some<br />
*Scripting Exp: Just starting, finished following projects:<br />
**MultiWeaponBase for UT2k4 (check http://forums.beyondunreal.com/showthread.php?p=2283912#post2283912)<br />
**KamiKaze combo for UT2k4, gives you infinite (999) ammo and all non-superweapons, berserk, and faster movement rate. After it expires, you die (violently).<br />
**ChargedJump Mutator (UT2k4). Jump is charged by holding up arrow, falling damage will be removed.<br />
*Miscellaneous:<br><br />
Loads of experience on programming, capable of more than 10 languages, including Haskell, Mathematica, C++ and PHP.<br><br />
If you would like one of my projects, please post on [[User_Talk:Lord_Farin|my Talk page]]</div>Lord Farinhttps://wiki.beyondunreal.com/User:Lord_Farin?diff=34386User:Lord Farin2009-05-06T19:05:23Z<p>Lord Farin: </p>
<hr />
<div>__NOTOC__<br />
<br />
Some personalia:<br />
<br />
*Username: Lord_Farin<br />
*Mapping Exp: Quite some<br />
*Scripting Exp: Just starting, finished following projects:<br />
**MultiWeaponBase for UT2k4 (check http://forums.beyondunreal.com/showthread.php?p=2283912#post2283912)<br />
**KamiKaze combo for UT2k4, gives you infinite (999) ammo and all non-superweapons, berserk, and faster movement rate. After it expires, you die (violently).<br />
**ChargedJump Mutator (UT2k4). Jump is charged by holding up arrow, falling damage will be removed.<br />
*Miscellaneous:<br>Loads of experience on programming, capable of more than 10 languages, including Haskell, Mathematica, C++ and PHP.</div>Lord Farinhttps://wiki.beyondunreal.com/Legacy:Mod_Ideas/ChargingJumpBoots?diff=34385Legacy:Mod Ideas/ChargingJumpBoots2009-05-06T19:04:04Z<p>Lord Farin: taking on this project</p>
<hr />
<div>{{classbox|Mod ideas for UT 2003 &ndash; A variable height jump match}}<br />
<br />
==Description ==<br />
<br />
This small mutator is really a logical extension to the UT JumpMatch mutator. At the beginning of play every player is given a pair of charging jump boots. The jump boots jump on release of the jump key rather than when it's pressed. This allows them to be charged up for a mega-super-duper jump. The longer the jump key is held down the higher the wearer will jump. The boots will also eliminate falling damage completely.<br />
<br />
====Interested Scripters ====<br />
<br />
If you are interested in developing this mod for UT2003 then add your name to the list. Once you start development you should indicate that below (and hopefully include a link to a journal page). Before you start development you should also check this section to see if anyone else has started. Effort should never be duplicated, only contributed. (lol - what a slogan).<br />
<br />
==Discussion ==<br />
<br />
'''ZxAnPhOrIaN:''' Could you do that in UT also?<br />
<br />
'''EntropicLqd:''' I don't see any reason why not. I just don't have the time to do anything ''interesting'' at the moment in the evenings. Remember - these pages are simply a dumping ground for ideas - they just happen to be ones that I don't have time to do anything with (from an implementation point of view) at the moment. I'm hoping that will change in the future - we shall see.<br />
<br />
'''DJPaul:''' Sounds much like the jumping system in JK][, which would be not a bad idea to tie into another mod/mutator, because it's not really big enough on itself. Unless it's a mutator. Presuming I get this [[Legacy:DJPaul/TTS|DJPaul/TTS]] thing working/released soon, I think i'll have a look at making this as an UT mutator.<br />
<br />
'''EntropicLqd:''' Hmmm, not sure I agree with that. The beauty of mutators is that you can stack them up. This means that mutators that are "atomic" (provide only a single function) are preferable. It's easier to get the otherwordly combination of effects you want if a mutator only does one thing.<br />
<br />
'''DJPaul:''' What's not atomic, EntropicLqd? Basically, in JK][, the longer you hold down the jump key, the higher you jump - which '''is''' the description of the mutator.<br />
<br />
'''EntropicLqd:''' Hee hee - This is slightly different from the JK2 jump in that you jump ''on release'' of the jump button rather than while the jump key is down. My comment on atomicity actually applies to your comment above, ''"which would be not a bad idea to tie into another mod/mutator, because it's not really big enough on itself."''. The idea is definately worthy of being its own mutator.<br />
<br />
'''DJPaul:''' Is "atomicity" a word?<br />
<br />
'''EntropicLqd:''' I have no idea - but it ought to be. Languages are dynamic things right?<br />
<br />
'''Lord_Farin:''' No idea if it'll work for UT2k3, but I will try and create this Mutator for UT2k4.</div>Lord Farinhttps://wiki.beyondunreal.com/User:Lord_Farin?diff=34384User:Lord Farin2009-05-06T18:46:06Z<p>Lord Farin: updat e on finished projects</p>
<hr />
<div>__NOTOC__<br />
<br />
Some personalia:<br />
<br />
*Username: Lord_Farin<br />
*Mapping Exp: Quite some<br />
*Scripting Exp: Just starting, finished following projects:<br />
**MultiWeaponBase for UT2k4 (check http://forums.beyondunreal.com/showthread.php?p=2283912#post2283912)<br />
**KamiKaze combo for UT2k4, gives you infinite (999) ammo and all non-superweapons, berserk, and faster movement rate. After it expires, you die (violently).<br />
*Miscellaneous:<br>Loads of experience on programming, capable of more than 10 languages, including Haskell, Mathematica, C++ and PHP.</div>Lord Farinhttps://wiki.beyondunreal.com/Legacy:Adding_An_Adrenaline_Combo_With_A_Mutator?diff=34383Legacy:Adding An Adrenaline Combo With A Mutator2009-05-06T18:44:22Z<p>Lord Farin: </p>
<hr />
<div>This tutorial will show how to create an adrenaline combo and add the combo to all players through a mutator. The specific adrenaline combo that we are making is called the Bullet Time combo. What this adrenaline combo will allow us to do is once the combo is activated, gameplay speed will slowdown allowing all players to enter into "Bullet Time" like in the matrix trilogies.<br />
<br />
==Getting Started==<br />
<br />
First off, we will need to create the directory structure in the UT2004 directory. Create a folder named "MutBulletTimeCombo". Then inside this folder, create another folder called "Classes". For more information on the package structure, see [[Legacy:Set Up Package Folders|Set Up Package Folders]].<br />
<br />
We will create our script files in the this directory. Next, go into the system directory and locate the ut2004.ini file. Open up the file and do a search for Editor.EditorEngine. In this section, you will see many "EditPackages=X" where X is a package name. Our package is MutBulletTimeCombo, so at the end of that list, add the line "EditPackages=MutBulletTimeCombo".<br />
<br />
==Creating Combo Class==<br />
<br />
Create a new file in your preferred text editor and save the file as ComboBulletTime.uc. Inside that file, create a class called ComboBulletTime and have it extend the Combo class. This way, we gain access to the Combo class's functions and member variables. These will help us in creating our own adrenaline combo. Here is the code you will need:<br />
<br />
<uscript><br />
class ComboBulletTime extends Combo;<br />
<br />
var float fOrigGameSpeed;<br />
<br />
/*<br />
This function will get called when right combination is entered.<br />
*/<br />
function StartEffect(xPawn P)<br />
{<br />
fOrigGameSpeed = Level.Game.GameSpeed;<br />
Level.Game.SetGameSpeed(0.05);<br />
}<br />
<br />
<br />
/*<br />
This function gets called when adrenaline is all gone.<br />
*/<br />
function StopEffect(xPawn P)<br />
{<br />
Level.Game.SetGameSpeed(fOrigGameSpeed);<br />
}<br />
<br />
defaultproperties<br />
{<br />
fOrigGameSpeed = 1.0;<br />
Duration = 3;<br />
ExecMessage = "Bullet Time!"<br />
keys[0] = 1;<br />
keys[1] = 2;<br />
keys[2] = 1;<br />
keys[3] = 2;<br />
}<br />
</uscript><br />
<br />
The two functions called StartEffect and StopEffect both do exactly what the name implies. The variable Level is an object of the LevelInfo class declared in the Actor class. You have access to this variable because Combo extends from the Info class which then extends from the Actor class. Inside the LevelInfo class, there is a variable called Game which is an object of the GameInfo class. Take a look at these classes to see what these contain. Inside the GameInfo class, there is a function called SetGameSpeed that changes the value of GameSpeed within that same class. Here, we will change the game speed to be 0.05. The game speed is based on a percentage. A game speed of 1.0 means the game speed will be at 100%. We want to slow the game down, so a game speed of 5% will do the job. If you notice, we declared our own variable called fOrigGameSpeed. This is used to get the current game speed setting, which is usually 1.0, to set the speed back to once the adrenaline combo wears off.<br />
<br />
The next thing to mention is the keys array in the default properties. These are where the combination of keys are declared that the player must press in order to get the combo activated. If you take a look at the Combo class, there are numbers which go with the direction the player presses. 1 is up, 2 is down, 4 is left, and 8 is right. In this example, the player must press "Up, Down, Up, Down" in that order when the player has full adrenaline to activate the combo.<br />
<br />
Also in the default properties, you will notice the duration variable being declared to three. The reason for this is that we have set the game speed to 5%. So, 3 seconds running at 5% game speed will probably take like 60 seconds for the adrenaline to where off.<br />
<br />
==Mutator==<br />
<br />
Here, we will be adding a class called MutBulletTimeCombo, so create a new file of the same name and the .uc extension. When declaring the MutBulletTimeCombo class, have it extend Mutator. The code to add the Adrenaline combo to every player is below:<br />
<br />
<uscript><br />
class MutBulletTimeCombo extends Mutator;<br />
<br />
var xPlayer NotifyPlayer[32];<br />
<br />
function Timer()<br />
{<br />
local int i;<br />
<br />
for(i = 0; i < 32; i++)<br />
{<br />
if(NotifyPlayer[i] != None)<br />
{<br />
NotifyPlayer[i].ClientReceiveCombo("MutBulletTimeCombo.ComboBulletTime");<br />
NotifyPlayer[i] = None;<br />
}<br />
<br />
}<br />
}<br />
<br />
function bool IsRelevant(Actor Other, out byte bSuperRelevant)<br />
{<br />
local int i;<br />
<br />
if(xPlayer(Other) != None)<br />
{<br />
for(i=0; i<16; i++)<br />
{<br />
if (xPlayer(Other).ComboNameList[i] ~= "MutBulletTimeCombo.ComboBulletTime")<br />
break;<br />
else if(xPlayer(Other).ComboNameList[i] == "")<br />
{<br />
xPlayer(Other).ComboNameList[i] = "MutBulletTimeCombo.ComboBulletTime";<br />
break;<br />
}<br />
}<br />
for(i = 0; i < 32; i++)<br />
{<br />
if(NotifyPlayer[i] == None)<br />
{<br />
NotifyPlayer[i] = xPlayer(Other);<br />
SetTimer(0.5, false);<br />
break;<br />
}<br />
}<br />
}<br />
if(NextMutator != None)<br />
return NextMutator.IsRelevant(Other, bSuperRelevant);<br />
else<br />
return true;<br />
}<br />
<br />
defaultproperties<br />
{<br />
FriendlyName = "Bullet Time Combo"<br />
Description = "Adds the bullet time combo (UDUD). The combo slows all gameplay down, but allows players aim to be more accurate, as seen in the Matrix trilogies."<br />
}<br />
</uscript><br />
<br />
The description and the FriendlyName will be shown in the mutator list. The Timer function above will notify each player in the level about the new combo. To access the combo, you need to put in the package name, followed by the combo class. In this case, we add ComboBulletTime class in the MutBulletTimeCombo package. Now every player is like Neo!<br />
<br />
ToDo: Add more description about the IsRelavant Function.<br />
<br />
==Comments==<br />
<br />
'''Mad:''' I hope this tutorial helps you in understanding how combos work and how it can be activated through a mutator. I recommend grabbing the sniper rifle upon performing this combo and get your headshots in. Feel free to leave any comments or make any suggestions about this tutorial. <br />
<br />
'''Metal_Maniac:''' I get the way it works, but what if you wanted to make something similar to the berzerk combo, or you wanted to make a mutator that gives you all the default weapons, and they all have infinite ammo, but for a limited time, and at the end of that time limit, your character explodes and dies, I'd call it "KamiKaze Mania combo", so if anyone has a suggestion on how to make that, please reply.<br />
<br />
'''tornWolf:''' Just from a best practices point of view, it would likely be better to declare an int (const if we could) MAX_PLAYERS so that if the game will allow a different number than 32 players, that can be updated once in the code. I'm a noob so I may be wrong, just thought I'd throw that in.<br />
<br />
'''Lord_Farin:''' Nice idea from Metal_Maniac (though this was abadoned long ago). I have coded it, fairly easy job. Any interested people, leave a message on my talk page.<br />
[[Category:Legacy Tutorial|{{PAGENAME}}]]</div>Lord Farinhttps://wiki.beyondunreal.com/Legacy:Adding_An_Adrenaline_Combo_With_A_Mutator?diff=34381Legacy:Adding An Adrenaline Combo With A Mutator2009-05-06T18:13:24Z<p>Lord Farin: 3 seconds divided by 5% is not 15 seconds, it's 60...</p>
<hr />
<div>This tutorial will show how to create an adrenaline combo and add the combo to all players through a mutator. The specific adrenaline combo that we are making is called the Bullet Time combo. What this adrenaline combo will allow us to do is once the combo is activated, gameplay speed will slowdown allowing all players to enter into "Bullet Time" like in the matrix trilogies.<br />
<br />
==Getting Started==<br />
<br />
First off, we will need to create the directory structure in the UT2004 directory. Create a folder named "MutBulletTimeCombo". Then inside this folder, create another folder called "Classes". For more information on the package structure, see [[Legacy:Set Up Package Folders|Set Up Package Folders]].<br />
<br />
We will create our script files in the this directory. Next, go into the system directory and locate the ut2004.ini file. Open up the file and do a search for Editor.EditorEngine. In this section, you will see many "EditPackages=X" where X is a package name. Our package is MutBulletTimeCombo, so at the end of that list, add the line "EditPackages=MutBulletTimeCombo".<br />
<br />
==Creating Combo Class==<br />
<br />
Create a new file in your preferred text editor and save the file as ComboBulletTime.uc. Inside that file, create a class called ComboBulletTime and have it extend the Combo class. This way, we gain access to the Combo class's functions and member variables. These will help us in creating our own adrenaline combo. Here is the code you will need:<br />
<br />
<uscript><br />
class ComboBulletTime extends Combo;<br />
<br />
var float fOrigGameSpeed;<br />
<br />
/*<br />
This function will get called when right combination is entered.<br />
*/<br />
function StartEffect(xPawn P)<br />
{<br />
fOrigGameSpeed = Level.Game.GameSpeed;<br />
Level.Game.SetGameSpeed(0.05);<br />
}<br />
<br />
<br />
/*<br />
This function gets called when adrenaline is all gone.<br />
*/<br />
function StopEffect(xPawn P)<br />
{<br />
Level.Game.SetGameSpeed(fOrigGameSpeed);<br />
}<br />
<br />
defaultproperties<br />
{<br />
fOrigGameSpeed = 1.0;<br />
Duration = 3;<br />
ExecMessage = "Bullet Time!"<br />
keys[0] = 1;<br />
keys[1] = 2;<br />
keys[2] = 1;<br />
keys[3] = 2;<br />
}<br />
</uscript><br />
<br />
The two functions called StartEffect and StopEffect both do exactly what the name implies. The variable Level is an object of the LevelInfo class declared in the Actor class. You have access to this variable because Combo extends from the Info class which then extends from the Actor class. Inside the LevelInfo class, there is a variable called Game which is an object of the GameInfo class. Take a look at these classes to see what these contain. Inside the GameInfo class, there is a function called SetGameSpeed that changes the value of GameSpeed within that same class. Here, we will change the game speed to be 0.05. The game speed is based on a percentage. A game speed of 1.0 means the game speed will be at 100%. We want to slow the game down, so a game speed of 5% will do the job. If you notice, we declared our own variable called fOrigGameSpeed. This is used to get the current game speed setting, which is usually 1.0, to set the speed back to once the adrenaline combo wears off.<br />
<br />
The next thing to mention is the keys array in the default properties. These are where the combination of keys are declared that the player must press in order to get the combo activated. If you take a look at the Combo class, there are numbers which go with the direction the player presses. 1 is up, 2 is down, 4 is left, and 8 is right. In this example, the player must press "Up, Down, Up, Down" in that order when the player has full adrenaline to activate the combo.<br />
<br />
Also in the default properties, you will notice the duration variable being declared to three. The reason for this is that we have set the game speed to 5%. So, 3 seconds running at 5% game speed will probably take like 60 seconds for the adrenaline to where off.<br />
<br />
==Mutator==<br />
<br />
Here, we will be adding a class called MutBulletTimeCombo, so create a new file of the same name and the .uc extension. When declaring the MutBulletTimeCombo class, have it extend Mutator. The code to add the Adrenaline combo to every player is below:<br />
<br />
<uscript><br />
class MutBulletTimeCombo extends Mutator;<br />
<br />
var xPlayer NotifyPlayer[32];<br />
<br />
function Timer()<br />
{<br />
local int i;<br />
<br />
for(i = 0; i < 32; i++)<br />
{<br />
if(NotifyPlayer[i] != None)<br />
{<br />
NotifyPlayer[i].ClientReceiveCombo("MutBulletTimeCombo.ComboBulletTime");<br />
NotifyPlayer[i] = None;<br />
}<br />
<br />
}<br />
}<br />
<br />
function bool IsRelevant(Actor Other, out byte bSuperRelevant)<br />
{<br />
local int i;<br />
<br />
if(xPlayer(Other) != None)<br />
{<br />
for(i=0; i<16; i++)<br />
{<br />
if (xPlayer(Other).ComboNameList[i] ~= "MutBulletTimeCombo.ComboBulletTime")<br />
break;<br />
else if(xPlayer(Other).ComboNameList[i] == "")<br />
{<br />
xPlayer(Other).ComboNameList[i] = "MutBulletTimeCombo.ComboBulletTime";<br />
break;<br />
}<br />
}<br />
for(i = 0; i < 32; i++)<br />
{<br />
if(NotifyPlayer[i] == None)<br />
{<br />
NotifyPlayer[i] = xPlayer(Other);<br />
SetTimer(0.5, false);<br />
break;<br />
}<br />
}<br />
}<br />
if(NextMutator != None)<br />
return NextMutator.IsRelevant(Other, bSuperRelevant);<br />
else<br />
return true;<br />
}<br />
<br />
defaultproperties<br />
{<br />
FriendlyName = "Bullet Time Combo"<br />
Description = "Adds the bullet time combo (UDUD). The combo slows all gameplay down, but allows players aim to be more accurate, as seen in the Matrix trilogies."<br />
}<br />
</uscript><br />
<br />
The description and the FriendlyName will be shown in the mutator list. The Timer function above will notify each player in the level about the new combo. To access the combo, you need to put in the package name, followed by the combo class. In this case, we add ComboBulletTime class in the MutBulletTimeCombo package. Now every player is like Neo!<br />
<br />
ToDo: Add more description about the IsRelavant Function.<br />
<br />
==Comments==<br />
<br />
'''Mad:''' I hope this tutorial helps you in understanding how combos work and how it can be activated through a mutator. I recommend grabbing the sniper rifle upon performing this combo and get your headshots in. Feel free to leave any comments or make any suggestions about this tutorial. <br />
<br />
'''Metal_Maniac:''' I get the way it works, but what if you wanted to make something similar to the berzerk combo, or you wanted to make a mutator that gives you all the default weapons, and they all have infinite ammo, but for a limited time, and at the end of that time limit, your character explodes and dies, I'd call it "KamiKaze Mania combo", so if anyone has a suggestion on how to make that, please reply.<br />
<br />
'''tornWolf:''' Just from a best practices point of view, it would likely be better to declare an int (const if we could) MAX_PLAYERS so that if the game will allow a different number than 32 players, that can be updated once in the code. I'm a noob so I may be wrong, just thought I'd throw that in.<br />
<br />
'''Lord_Farin:''' Nice idea from Metal_Maniac (though this was abadoned long ago). I will start implementing it, as it will be a nice exercise on Mut and Combo making.<br />
[[Category:Legacy Tutorial|{{PAGENAME}}]]</div>Lord Farinhttps://wiki.beyondunreal.com/User:Lord_Farin?diff=34365User:Lord Farin2009-04-25T14:40:42Z<p>Lord Farin: </p>
<hr />
<div>__NOTOC__<br />
<br />
Some personalia:<br />
<br />
*Username: Lord_Farin<br />
*Mapping Exp: Quite some<br />
*Scripting Exp: Just starting, finished following projects:<br />
**MultiWeaponBase for UT2k4 (check http://forums.beyondunreal.com/showthread.php?p=2283912#post2283912)<br />
**Currently working on KamiKaze combo for UT2k4, which will give you infinite ammo and all weapons, and some kind of super berserk. After it expires, you skeletize.<br />
*Miscellaneous:<br>Loads of experience on programming, capable of more than 10 languages, including Haskell, Mathematica, C++ and PHP.</div>Lord Farinhttps://wiki.beyondunreal.com/Legacy:Adding_An_Adrenaline_Combo_With_A_Mutator?diff=34364Legacy:Adding An Adrenaline Combo With A Mutator2009-04-25T13:40:46Z<p>Lord Farin: </p>
<hr />
<div>This tutorial will show how to create an adrenaline combo and add the combo to all players through a mutator. The specific adrenaline combo that we are making is called the Bullet Time combo. What this adrenaline combo will allow us to do is once the combo is activated, gameplay speed will slowdown allowing all players to enter into "Bullet Time" like in the matrix trilogies.<br />
<br />
==Getting Started==<br />
<br />
First off, we will need to create the directory structure in the UT2004 directory. Create a folder named "MutBulletTimeCombo". Then inside this folder, create another folder called "Classes". For more information on the package structure, see [[Legacy:Set Up Package Folders|Set Up Package Folders]].<br />
<br />
We will create our script files in the this directory. Next, go into the system directory and locate the ut2004.ini file. Open up the file and do a search for Editor.EditorEngine. In this section, you will see many "EditPackages=X" where X is a package name. Our package is MutBulletTimeCombo, so at the end of that list, add the line "EditPackages=MutBulletTimeCombo".<br />
<br />
==Creating Combo Class==<br />
<br />
Create a new file in your preferred text editor and save the file as ComboBulletTime.uc. Inside that file, create a class called ComboBulletTime and have it extend the Combo class. This way, we gain access to the Combo class's functions and member variables. These will help us in creating our own adrenaline combo. Here is the code you will need:<br />
<br />
<uscript><br />
class ComboBulletTime extends Combo;<br />
<br />
var float fOrigGameSpeed;<br />
<br />
/*<br />
This function will get called when right combination is entered.<br />
*/<br />
function StartEffect(xPawn P)<br />
{<br />
fOrigGameSpeed = Level.Game.GameSpeed;<br />
Level.Game.SetGameSpeed(0.05);<br />
}<br />
<br />
<br />
/*<br />
This function gets called when adrenaline is all gone.<br />
*/<br />
function StopEffect(xPawn P)<br />
{<br />
Level.Game.SetGameSpeed(fOrigGameSpeed);<br />
}<br />
<br />
defaultproperties<br />
{<br />
fOrigGameSpeed = 1.0;<br />
Duration = 3;<br />
ExecMessage = "Bullet Time!"<br />
keys[0] = 1;<br />
keys[1] = 2;<br />
keys[2] = 1;<br />
keys[3] = 2;<br />
}<br />
</uscript><br />
<br />
The two functions called StartEffect and StopEffect both do exactly what the name implies. The variable Level is an object of the LevelInfo class declared in the Actor class. You have access to this variable because Combo extends from the Info class which then extends from the Actor class. Inside the LevelInfo class, there is a variable called Game which is an object of the GameInfo class. Take a look at these classes to see what these contain. Inside the GameInfo class, there is a function called SetGameSpeed that changes the value of GameSpeed within that same class. Here, we will change the game speed to be 0.05. The game speed is based on a percentage. A game speed of 1.0 means the game speed will be at 100%. We want to slow the game down, so a game speed of 5% will do the job. If you notice, we declared our own variable called fOrigGameSpeed. This is used to get the current game speed setting, which is usually 1.0, to set the speed back to once the adrenaline combo wears off.<br />
<br />
The next thing to mention is the keys array in the default properties. These are where the combination of keys are declared that the player must press in order to get the combo activated. If you take a look at the Combo class, there are numbers which go with the direction the player presses. 1 is up, 2 is down, 4 is left, and 8 is right. In this example, the player must press "Up, Down, Up, Down" in that order when the player has full adrenaline to activate the combo.<br />
<br />
Also in the default properties, you will notice the duration variable being declared to three. The reason for this is that we have set the game speed to 5%. So, 3 seconds running at 5% game speed will probably take like 15 seconds for the adrenaline to where off.<br />
<br />
==Mutator==<br />
<br />
Here, we will be adding a class called MutBulletTimeCombo, so create a new file of the same name and the .uc extension. When declaring the MutBulletTimeCombo class, have it extend Mutator. The code to add the Adrenaline combo to every player is below:<br />
<br />
<uscript><br />
class MutBulletTimeCombo extends Mutator;<br />
<br />
var xPlayer NotifyPlayer[32];<br />
<br />
function Timer()<br />
{<br />
local int i;<br />
<br />
for(i = 0; i < 32; i++)<br />
{<br />
if(NotifyPlayer[i] != None)<br />
{<br />
NotifyPlayer[i].ClientReceiveCombo("MutBulletTimeCombo.ComboBulletTime");<br />
NotifyPlayer[i] = None;<br />
}<br />
<br />
}<br />
}<br />
<br />
function bool IsRelevant(Actor Other, out byte bSuperRelevant)<br />
{<br />
local int i;<br />
<br />
if(xPlayer(Other) != None)<br />
{<br />
for(i=0; i<16; i++)<br />
{<br />
if (xPlayer(Other).ComboNameList[i] ~= "MutBulletTimeCombo.ComboBulletTime")<br />
break;<br />
else if(xPlayer(Other).ComboNameList[i] == "")<br />
{<br />
xPlayer(Other).ComboNameList[i] = "MutBulletTimeCombo.ComboBulletTime";<br />
break;<br />
}<br />
}<br />
for(i = 0; i < 32; i++)<br />
{<br />
if(NotifyPlayer[i] == None)<br />
{<br />
NotifyPlayer[i] = xPlayer(Other);<br />
SetTimer(0.5, false);<br />
break;<br />
}<br />
}<br />
}<br />
if(NextMutator != None)<br />
return NextMutator.IsRelevant(Other, bSuperRelevant);<br />
else<br />
return true;<br />
}<br />
<br />
defaultproperties<br />
{<br />
FriendlyName = "Bullet Time Combo"<br />
Description = "Adds the bullet time combo (UDUD). The combo slows all gameplay down, but allows players aim to be more accurate, as seen in the Matrix trilogies."<br />
}<br />
</uscript><br />
<br />
The description and the FriendlyName will be shown in the mutator list. The Timer function above will notify each player in the level about the new combo. To access the combo, you need to put in the package name, followed by the combo class. In this case, we add ComboBulletTime class in the MutBulletTimeCombo package. Now every player is like Neo!<br />
<br />
ToDo: Add more description about the IsRelavant Function.<br />
<br />
==Comments==<br />
<br />
'''Mad:''' I hope this tutorial helps you in understanding how combos work and how it can be activated through a mutator. I recommend grabbing the sniper rifle upon performing this combo and get your headshots in. Feel free to leave any comments or make any suggestions about this tutorial. <br />
<br />
'''Metal_Maniac:''' I get the way it works, but what if you wanted to make something similar to the berzerk combo, or you wanted to make a mutator that gives you all the default weapons, and they all have infinite ammo, but for a limited time, and at the end of that time limit, your character explodes and dies, I'd call it "KamiKaze Mania combo", so if anyone has a suggestion on how to make that, please reply.<br />
<br />
'''tornWolf:''' Just from a best practices point of view, it would likely be better to declare an int (const if we could) MAX_PLAYERS so that if the game will allow a different number than 32 players, that can be updated once in the code. I'm a noob so I may be wrong, just thought I'd throw that in.<br />
<br />
'''Lord_Farin:''' Nice idea from Metal_Maniac (though this was abadoned long ago). I will start implementing it, as it will be a nice exercise on Mut and Combo making.<br />
[[Category:Legacy Tutorial|{{PAGENAME}}]]</div>Lord Farinhttps://wiki.beyondunreal.com/User:Lord_Farin?diff=34359User:Lord Farin2009-04-22T18:15:59Z<p>Lord Farin: </p>
<hr />
<div>__NOTOC__<br />
<br />
Some personalia:<br />
<br />
*Username: Lord_Farin<br />
*Mapping Exp: Quite some<br />
*Scripting Exp: Just starting, finished following projects:<br />
**MultiWeaponBase for UT2k4 (check http://forums.beyondunreal.com/showthread.php?p=2283912#post2283912)<br />
*Number of edits:<br />
**Apr 14, 2009: 2<br />
*Miscellaneous:<br>Loads of experience on programming, capable of more than 10 languages, including Haskell, Mathematica, C++ and PHP.</div>Lord Farinhttps://wiki.beyondunreal.com/Main_Page?diff=34345Main Page2009-04-17T06:53:26Z<p>Lord Farin: Undo revision 34344 by Leathers97 (Talk)</p>
<hr />
<div>'''Welcome to the {{SITENAME}}.''' This site's goal is to provide comprehensive documentation of the [[Unreal Editor]], [[UnrealScript]] and all technical aspects of the [[Unreal Engine]].<br />
<br />
If you came here as a player and are looking for details about the Unreal series of games, head over to BeyondUnreal's [[Liandri:|Liandri Archives]]. If you are a server administrator looking for information about running servers for Unreal series games, try the [[uadmin:|Unreal Admin Wiki]] instead.<br />
<br />
{{ambox|type=serious|text=Please refrain from using an offline reader or similar tools to download the entire Unreal Wiki. These tools put an insane stress on the server and will most likely get you banned immediately. The Unreal Wiki has a very dynamic nature, but if you want to download a recent snapshot, try our downloadable [[Project:Offline Wiki|Offline Wiki]] archive.}}<br />
__NOTOC__ __NOEDITSECTION__<br />
{| cellpadding="0" cellspacing="10px" style="width:100%;"<br />
| id="topic-list" style="vertical-align:top;" |<br />
==Community==<br />
The [[Project:Community Portal|Community Portal]] is the general place to find out what's going on and what needs to be done on the {{SITENAME}}.<br />
<br />
New to the {{SITENAME}}? This is a community project and you are invited to join by [[Special:Userlogin|registering]]. We've provided some tips on [[Project:Getting started|how to get started]] so you can immediately start contributing.<br />
<br />
==Content==<br />
The quickest way to find what you're looking for usually is the search box on the left. Otherwise, try one of the topical starting points below.<br/><br />
Miss the old {{SITENAME}} content? Head over to the [[Legacy:Home Page|old home page]] and start browsing from there, if you want.<br />
<br />
As you may notice, there are still a lot of red links, even here on the main page. This is a side effect of our [[Project:MediaWiki conversion|switch]] to the [[wp:MediaWiki|MediaWiki]] engine and we need '''[[Project:Helping out|your help]]''' to get up to speed again.<br />
<br />
===General topics===<br />
* [[Unreal Engine overview]]<br />
* [[Modding overview]]<br />
<br />
===Mapping reference===<br />
* [[Unreal Editor overview]]<br />
* [[Mapping concepts]]<br />
* [[:Category:Mapping tutorials|Mapping tutorials]]<br />
* [[:Category:Mapping articles|All mapping articles]]<br />
<br />
===UnrealScript reference===<br />
* [[UnrealScript overview]]<br />
* [[:Category:Classes|UnrealScript API]]<br />
* [[:Category:Programming tutorials|UnrealScript tutorials]]<br />
* [[:Category:Programming articles|All programming articles]]<br />
<br />
===Modeling reference===<br />
* [[Modeling overview]]<br />
* [[:Category:Modeling tutorials|Modeling tutorials]]<br />
* [[:Category:Modeling articles|All modeling articles]]<br />
<br />
<br />
Still can't find what you were looking for? You can browse through all of the [[:Category:Article categories|articles by category]].<br />
<br />
| style="vertical-align:top;" |<!-- begin recent edits --><br />
{| class="infobox infobox-pages" id="recent-edits" style="width:300px;float:none;margin-left:auto;"<br />
|-<br />
| style="text-align:center;font-size:smaller;" |''See [[Special:Recentchanges|Recent changes]] for all changes.''<br />
|-<br />
! Recent Updates<br />
|-<br />
|<dpl><br />
namespace=|UE1|UE2|UE3<br />
count=5<br />
ordermethod=lastedit<br />
order=descending<br />
mode=userformat<br />
adduser=true<br />
addeditdate=true<br />
userdateformat=g:ia D, M j<br />
format=<ul>,<li>[[%PAGE%|%TITLE%]]<br />%USER% - %DATE%,</li>,</ul><br />
noresultsheader=''None''<br />
</dpl><br />
|-<br />
! New Pages<br />
|-<br />
|<dpl><br />
namespace=|UE1|UE2|UE3<br />
count=5<br />
ordermethod=firstedit<br />
order=descending<br />
adduser=true<br />
addeditdate=true<br />
userdateformat=g:ia D, M j<br />
format=<ul>,<li>[[%PAGE%|%TITLE%]]<br />%USER% - %DATE%,</li>,</ul><br />
noresultsheader=''None''<br />
</dpl><br />
|-<br />
! Recent Discussion<br />
|-<br />
|<dpl><br />
namespace=Talk|UE1_talk|UE2_talk|UE3_talk|Unreal_Wiki_talk|Category_talk|Legacy_talk<br />
count=5<br />
ordermethod=lastedit<br />
order=descending<br />
mode=userformat<br />
adduser=true<br />
addeditdate=true<br />
userdateformat=g:ia D, M j<br />
format=<ul>,<li>[[%PAGE%|%TITLE%]]<br />%USER% - %DATE%,</li>,</ul><br />
noresultsheader=''None''<br />
</dpl><br />
|}<br />
|}</div>Lord Farinhttps://wiki.beyondunreal.com/User:Lord_Farin?diff=34342User:Lord Farin2009-04-14T13:45:56Z<p>Lord Farin: Creation of my user page</p>
<hr />
<div>__NOTOC__<br />
<br />
Some personalia:<br />
<br />
*Username: Lord_Farin<br />
*Mapping Exp: Quite some<br />
*Scripting Exp: Barely anything, just starting<br />
*Number of edits:<br />
**Apr 14, 2009: 2<br />
*Miscellaneous:<br>Loads of experience on programming, capable of more than 10 languages, including Haskell, Mathematica, C++ and PHP.</div>Lord Farinhttps://wiki.beyondunreal.com/Legacy:Create_A_Static_Mesh?diff=34341Legacy:Create A Static Mesh2009-04-14T13:37:25Z<p>Lord Farin: An addition which will take care of some problems I encountered during this tutorial</p>
<hr />
<div>''This is a [[:Category:Legacy Basic Procedure]] tutorial page. It explains how to perform a single procedure which is required in many different contexts.''<br />
<br />
==Overview ==<br />
<br />
[[Legacy:Static Mesh|Static mesh]]es are 3D models that never change their shape (only their position, orientation and/or their size).<br />
<br />
You need a static mesh to [[Legacy:Create A Mover|create a mover]] in UT2003. Normally, static meshes would be created in a [[Legacy:Modeling Application|modeling application]] like [[Legacy:Maya|Maya]] or [[Legacy:3D Studio Max|3D Studio Max]], but for simple cases like a lift or door mover you can directly create them in UnrealEd.<br />
<br />
==Creating a Static Mesh in UnrealEd==<br />
<br />
# Create and texture the shape you want to convert to a [[Legacy:Static Mesh|static mesh]] somewhere in the world using ''addition'' [[Legacy:Brush|brush]]es (static meshes have nothing to do with CSG functions&ndash;they are always "additive". Therefore, subtraction brushes do not convert properly).<br />
<br />
# (optional &ndash; but a good idea) Set the desired [[Legacy:Pivot|pivot]] point for the new [[Legacy:Static Mesh|static mesh]] by doing the following in an orthographic view:<br />
#* Set the [[Legacy:Grid|grid]] to a size that will allow you accurately snap the pivot point to the desired location. Generally, the larger the grid size, the better.<br />
#* Select all brushes you want to convert.<br />
#* Place the mouse-pointer as close to the desired pivot location as possible without touching the selected [[Legacy:Brush|brush]]es.<br />
#* Right-click to get the [[Legacy:Actor Context Menu|Actor Context Menu]] and choose ''Pivot'' -> ''Place Pivot Snapped Here'' (you may also use ''Place Pivot Here'', but as a rule of thumb, it's best to keep things snapped to the grid as much as possible)<br />
#* Repeat in other views as necessary to define the desired location in 3D space.<br />
<br />
# Select all brushes you want to convert (if they are not already selected).<br />
<br />
# Then do '''one''' of the following:<br />
#* Right-click on one of the selected [[Legacy:Brush|brush]]es to get the [[Legacy:Actor Context Menu|Actor Context Menu]] and choose ''Convert'' -> ''To Static Mesh''<br />
#* Click the ''Add Static Mesh'' button in the UnrealEd [[Legacy:Toolbox|toolbox]]<br />
#* Select ''Edit'' -> ''Create from Selection'' in the [[Legacy:Static Mesh Browser|static mesh browser]].<br />
<br />
# Enter a package name (you can use [[Legacy:MyLevel|MyLevel]] to embed the static mesh in your map file), optionally a group name, and an arbitrary name for your static mesh. '''!Caution! :''' If you use a different package name, you should proceed to the Static Mesh browser at once, and save the package you put your mesh in. Not following this step will cause your mesh to be unloadable, and therefore the level will not be playable!<br />
<br />
After these steps your textured static mesh will show up in the [[Legacy:Static Mesh Browser|static mesh browser]] and you can, for instance, use it to [[Legacy:Create A Mover|create a mover]].<br />
<br />
==Related Topics==<br />
<br />
* [[Legacy:Static Mesh|Static Mesh]]<br />
* [[Legacy:Mover|Mover]]<br />
[[Category:Legacy Basic Procedure|{{PAGENAME}}]]</div>Lord Farin