1 of 2 < >

Privay Policy Update

We’ve updated the Tripwire Privacy Notice under our Policies to be clearer about our use of customer information to come in line with the EU General Data Protection Regulation (GDPR) rules that come into force today (25th May 2018). The following are highlights of our changes:

We’ve incorporated the relevant concepts from the GDPR including joining the EU and Swiss Privacy Shield framework. We’ve added explanations for why and how Tripwire processes customer data and the types of data that we process, as well as information about your data protection rights.

For more information about our privacy practices, please review the new Privacy Policy found here:
2 of 2 < >

Forum Rules

  • Items changed, or highlighted for future attention, on 20 July 2013 are highlighted in yellow.

Global Rules
  • Forum moderators may or may not be Tripwire Interactive staff members, but either way, please respect them, as they are the authority of the forums. Speaking to them with intentional spite will not be tolerated and may result in the loss of your forum privileges.
  • Any decisions made by any member of staff or moderator are final and not subject to discussion. Doing so may result in a ban from the site. The owners of Tripwire Interactive Forums reserve the right to remove, edit, move or close any thread for any reason, as well as to remove access to the forums for any individuals with or without warning for breaches of the rules.
  • If you have a complaint regarding another user, PM the appropriate moderators, or if you have an administrative issue, [RO]schneidzekk.

General Behaviour
  • Use the search function before posting. Chances are your question has already been answered.
  • Use a title that describes the content of your post. Don't use all caps or special characters to draw attention either in the title or the body of the post.
  • Up to 10 emoticons are allowed in a post
  • Political discussions are prohibited.
  • Flaming - We do not tolerate abusive, malicious, personal attacks. You will be banned if you persist in this behavior.
  • Trolls - Anyone deliberately antagonizing other forum users by posting 'flame bait' type messages is not welcome. You will be banned (possibly without warning depending on the severity of the issue) if you persist in this behavior.
  • Personal insults (directed at anyone) will result in a ban. If the behavior is not corrected, it will be made more permanent.
  • Constructive criticism is welcome. However keep in mind we (and other forums goers) may not agree with you. If you can't keep the conversation civil, you will be removed from the forums.
  • The use of hyperbole, one liners, and images as part of a forum debate is likely to get you infracted. You have many ways to participate and be a constructive part of this community, even when you disagree.
  • To make the highlighted bits above 100% clear to everyone, the following WILL NOT BE TOLERATED:
    1. Personal attacks, insults, antagonism of any forum-goers, moderators or Tripwire Interactive staff.
    2. Name Shaming and Public "Witch Hunts" are also not allowed.
    3. Breaches of confidentiality and privacy of any sort.
    4. Any form of racism, bigotry or attacks on race, creed or color.
    5. Linking to posts on other forums related to ANY of the above, whether you are the originator or not, without exception.

  • There has been too much in the way of abhorrent personal behaviors in the past. These will cease. It doesn't matter who started it or who reacted to it - it will all result in moderator action. If you have to indulge your hatreds, for whatever reason, go do it elsewhere - and do not try and drag our forum-goers over to enjoy your hatreds.
  • We understand that people have strong feelings about our games, what we do for a living and how we respond (or don't) to comments on the forums. We all aren't going to agree about everything. So, BE CIVIL in your disagreements!

  • DO NOT Transmit any message, information, data, text, software or graphic files, or other materials ("Content") that is unlawful (including illegal drug usage), harmful, threatening, abusive, harassing, defamatory, vulgar, obscene, libelous, hateful or racially, ethnically, sexually or otherwise objectionable. This includes publicizing private information, such as individual's real names, IP addresses and anything else that might be used to identify them to the freakier members of the internet. This also means you may NOT publically share private communications (PM, email or anything else) without the original poster's permission.
  • DO NOT Post or transmit any Content that contains a virus, Trojan horse or other mischievous Content.
  • DO NOT Post or transmit any unsolicited advertising, promotional materials, "junk mail", "spam", "chain letters", "pyramid schemes" or any other form of solicitation.
  • DO NOT link to posts on any other forums, or any other form of media, that breaches our rules. It will be treated just the same as if you had posted it here.
  • DO NOT Double Post, cross Post, "necro post" or restart closed threads.
  • DO NOT Intentionally or unintentionally violate any applicable local, state, national or international law, rule or regulation.
  • DO NOT Upload or transmit any Content that infringes any patent, trademark, trade secret, copyright or other proprietary rights ("Rights") of any party.
  • DO NOT complain about being banned from a server and DO NOT complain about other players on servers - that is between you and the admin, no need to get the community involved.

Username, Avatar and Signature Rules
  • Multiple registrations result in a ban.
  • No offensive user names
  • Avatars:
    Avatars are disabled.
  • All signatures should not exceed the following size limits, you can have both text and images
  • - For text signatures: 4 lines normal size, 8 lines small size and up to 100 chars per line. Font sizes above 2 are not allowed. (Blank lines count as lines.)
  • - For images in signatures: 1 image up to 400 pixels wide, 150 pixels tall and 100kb in size plus 2 lines normal size text and up to 100 chars per line
Netiquette: Written text has no inflection, and, as such, you should be careful how you write your messages as interpretation will vary from person to person. Please take advantage of the built-in emoticons to add such expression to your words. Please remember the golden rule: to treat other forum users the way you would like to be treated. Please use common courtesy, and enjoy using Red Orchestra's forums
Offensive material
The following is a list of some things that MAY be considered "offensive" by the moderators and the team. This is NOT an exclusive list and it does depend very much on context.

Crossing the line into "offensive" territory is likely to get you asked to change your name, sig or avatar or to withdraw/delete posts. This will be done politely by the moderators. If you refuse to comply further action WILL be taken once started, ultimately leading to banning from the forums.

A key point: please attempt to use your brains. What is mild humour to you may well be deeply offensive to others. While we have no intention of acting as politically-correct "thought police", we are on the lookout for those things that can cause offense and, in some cases, are actually still illegal in some jurisdictions.
  1. Names recalling notorious war criminals or personalities.
  2. Names recalling atrocities and war crimes in general, or units with particularly odious histories.
  3. Use of obscenities and expletives.
  4. Blatant racism, mysogynism or many other "ism"s.
  5. Use of symbolism and regalia recalling Nazism or Fascism; this does not include pics of soldiers who happen to have such symbols on their uniform, unless we feel this has been done to provoke. Please note that many Nazi symbols (including the Swastika) are still illegal in Germany and other countries and considered deeply offensive by many Europeans.
  6. Use of symbolism and regalia recalling Stalinism.
  7. On both the previous two, the moderators' views on the intention and impact of use of such symbols will be final - not yours. Please be understanding if you are advised to change something.
  8. In general, if a sig/avatar represents your allegiances in-game and is clearly "in part", it is likely to be fine; if the moderators feel you are trying to demonstrate unpalatable political allegiances, or to use it in an attempt to ridicule or provoke others you WILL be asked to change it. RO is NOT the place to make any extremist political statements of any kind.

So people get the idea, some examples that would be considered offensive, numbered as above:
  1. "Hitler", "Beria"
  2. "NKVD Blocking Detachment", "Einsatzgruppen"
  3. This one should be pretty obvious...
  4. So should this - and it includes calling all Germans "Nazis" and all Soviets/Russians "Commies". It got boring 50 years ago, so stop it.
  5. Use of swastikas, fasces, SS-runes and so on for the Axis.
  6. There is actually very little overt symbolism from the Stalinist era; the hammer-and-sickle isn't offensive per se.

A simple rule-of-thumb: many Europeans find Nazi symbolism of any sort offensive; many Americans still find Soviet symbolism offensive. Engage your brain before using.

Final Note: this is NOT open to debate, so please do NOT start whining and moaning if a moderator asks you to change something. They will advise at first, giving reasons, then, if you take no notice, they will step up the pressure through to banning.
See more
See less

Question about converting custom gamemode to a mutator

  • Filter
  • Time
  • Show
Clear All
new posts

  • Question about converting custom gamemode to a mutator

    Hello, I would like to make Versus balancing mutator. Just go with basic and simple numeric changes for a start and sake of keeping this request relatively concise(like damage multipliers or SprintSpeed). I know just some basics of C++ and watched a beginner’s series on UnrealScript.

    I managed to do so as a custom gamemode but would like to turn it into a mutator*.

    class VersusBalance extends KFGameInfo_VersusSurvival;
    class KFPawn_ZedBloat_VersusBalanced extends KFPawn_ZedBloat_Versus;
    DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Submachinegun',        DamageScale=(0.35)))
    KFGameInfo_VersusSurvival has plenty of stuff already in it’s default properties and especially PlayerZedClasses which allows me to point the gamemode to my own Zed classes derived from base versus ones.

    KFMutator ->Mutator->Info->Actor… and other core game classes. No noob-obvious way to get to the good stuff.

    Is it even possible to change what I intend or are mutators meant for changing core gameplay/game engine things? If yes could someone push me in the right direction?(like show how somebody would go about changing versus player bloat’s SprintSpeed in a mutator)?

    Thank You

    * Custom Gamemode shows in the server browser as "ANY” in MODE type. This will drastically limit server’s exposure to already severely limited Versus playerbase when filtering for "Versus” servers.

  • #2
    Gamemodes are easier to work with as a beginner, but often you will want to instead use a mutator for compatibility reasons. As you're likely aware, you can run multiple mutators simultaneously, but only a single gamemode. However, compatibility issues are really not a major concern for a versus mod.

    Ideally, for compatibility reasons, avoid overriding classes like zeds and weapons - although few mods replace these. If possible, use mutator hooks such as NetDamage and CheckReplacement to modify damage or other properties of zeds, weapons, players, or any Actor. See for an example of the CheckReplacement pattern. The additional damage-type modifier you have shown can easily be added to any spawned bloat in CheckReplacement:
    function bool CheckReplacement(Actor Other)
        local KFPawn_Monster.DamageModifierInfo DamageTypeModifier;
        local array<float> DamageScale;
        DamageTypeModifier.DamageType = class'KFDT_Ballistic_Submachinegun';
        DamageTypeModifier.DamageScale = DamageScale;
        //If this is a versus bloat.
        if(KFPawn_ZedBloat_Versus(Other) != None)
            //Add our custom damage-type modifier.
        return Super.CheckReplacement(Other);
    Of course you would want a more concise and automated approach for multiple such modifiers, e.g. by making a list of modifiers in the mutator itself which could be configurable. See Project One for an example of this approach: https://forums.tripwireinteractive.c...15#post2294939. I can provide source code for the relevant class in the update version of the mod, KFC, if you wish.

    As for modifying the speed of zeds, it looks like TW have thankfully added NormalGroundSpeed and NormalSprintSpeed variables which you can modify externally, in addition to the current GroundSpeed and SprintSpeed.

    Some things will be easy to do with a mutator without having to replace classes, while others will be impossible without replacing classes. It will require some digging to figure out if what you want to achieve can be done easily. Typically, variables changing values during play without corresponding mutator hooks will make it more difficult. You can change quite a lot with mutators if you can wrap your head around how best to inject your desired functionality into what events you have to play with. One of the largest mods for KF2, ServerExt, is in fact a mutator - but it replaces most of the major classes so it loses the flexibility of compatibility anyway.


    • #3
      Greatly appreciated. I now have another dilemma however. This is how dmg multipliers look for alpha clot:

      Alpha Clot
          // Base
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Submachinegun',     DamageScale=(1.5)))  //3.0
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_AssaultRifle',     DamageScale=(1.0)))
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Shotgun',             DamageScale=(1.0)))
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Handgun',             DamageScale=(1.01)))
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Rifle',             DamageScale=(1.0)))  //0.76
          DamageTypeModifiers.Add((DamageType=class'KFDT_Slashing',                     DamageScale=(0.85))) //0.75
          DamageTypeModifiers.Add((DamageType=class'KFDT_Bludgeon',                     DamageScale=(0.9))) //0.75
          DamageTypeModifiers.Add((DamageType=class'KFDT_Fire',                         DamageScale=(1.0)))
          DamageTypeModifiers.Add((DamageType=class'KFDT_Microwave',                     DamageScale=(0.25)))
          DamageTypeModifiers.Add((DamageType=class'KFDT_Explosive',                     DamageScale=(1.0)))
          DamageTypeModifiers.Add((DamageType=class'KFDT_Piercing',                     DamageScale=(1.0)))
          DamageTypeModifiers.Add((DamageType=class'KFDT_Toxic',                         DamageScale=(1.0))) //0.88
          DamageTypeModifiers.Add((DamageType=class'KFDT_Bleeding',                     DamageScale=(1.0)))
          // Special Case
          DamageTypeModifiers.Add((DamageType=class'KFDT_Slashing_Knife',              DamageScale=(1.0)) //0.95
      Alpha Clot Versus
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Submachinegun',     DamageScale=(0.8)))  //3.0
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_AssaultRifle',     DamageScale=(0.7)))  //1.0 //0.5
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Shotgun',             DamageScale=(0.5)))  //0.9 //0.4
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Handgun',             DamageScale=(0.4)))  //1.01
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Rifle',             DamageScale=(0.5)))  //0.76
          DamageTypeModifiers.Add((DamageType=class'KFDT_Slashing',                     DamageScale=(0.8)))  //0.5
          DamageTypeModifiers.Add((DamageType=class'KFDT_Bludgeon',                     DamageScale=(0.8)))  //0.5
          DamageTypeModifiers.Add((DamageType=class'KFDT_Fire',                         DamageScale=(1.0)))  //0.8 //0.5
          DamageTypeModifiers.Add((DamageType=class'KFDT_Microwave',                     DamageScale=(0.35)))  //0.25
          DamageTypeModifiers.Add((DamageType=class'KFDT_Explosive',                     DamageScale=(0.35)))  //0.85
          DamageTypeModifiers.Add((DamageType=class'KFDT_Piercing',                     DamageScale=(0.4)))   //1.0
          DamageTypeModifiers.Add((DamageType=class'KFDT_Toxic',                         DamageScale=(0.5)))  //0.88 //1.0
          // special case
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_AR15',              DamageScale=(1.0))
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_MB500',              DamageScale=(1.0)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Rem1858',              DamageScale=(0.75)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Colt1911',          DamageScale=(0.65)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_9mm',                  DamageScale=(1.6)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Pistol_Medic',      DamageScale=(1.5)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Winchester',          DamageScale=(0.6)))  //0.9 0.7
          DamageTypeModifiers.Add((DamageType=class'KFDT_Fire_CaulkBurn',              DamageScale=(2.0)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_ExplosiveSubmunition_HX25',      DamageScale=(0.6)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_Slashing_EvisceratorProj',      DamageScale=(0.3)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_Slashing_Eviscerator',          DamageScale=(0.3)))  //0.9
          DamageTypeModifiers.Add((DamageType=class'KFDT_Bludgeon_Crovel',              DamageScale=(1.2)))  //0.8
      I want to set all zeds to multipliers from base Survival as a starting point for balance tweaking. In the special dmg cases put in VS the only way to get rid of them is to let's say set 'KFDT_Ballistic_AR15' in VS to the value of 'KFDT_Ballistic_AssaultRifle' from Survival?


      • #4
        You can remove elements of a dynamic array in the defaultproperties by replacing Add with Remove. In this case you would have:
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Ballistic_Submachinegun',     DamageScale=(1.5)))  //3.0
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Ballistic_AssaultRifle',     DamageScale=(1.0)))
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Ballistic_Shotgun',             DamageScale=(1.0)))
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Ballistic_Handgun',             DamageScale=(1.01)))
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Ballistic_Rifle',             DamageScale=(1.0)))  //0.76
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Slashing',                     DamageScale=(0.85))) //0.75
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Bludgeon',                     DamageScale=(0.9))) //0.75
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Fire',                         DamageScale=(1.0)))
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Microwave',                     DamageScale=(0.25)))
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Explosive',                     DamageScale=(1.0)))
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Piercing',                     DamageScale=(1.0)))
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Toxic',                         DamageScale=(1.0))) //0.88
        DamageTypeModifiers.Remove((DamageType=class'KFDT_Bleeding',                     DamageScale=(1.0)))
        I believe if the DamageScale of any modifier is altered, then it won't be found and thus removed from the array. This means your mod will be sensitive to damage resistance changes, which the devs might decide to revisit. Alternatively, you could do:
        to clear the array, and then add whatever you want after that.


        • #5
          In the case of gamemode I could do it from defaultproperties but here I don't inherit from appropriate stuff. How can I remove it in there instead of CheckReplacement function? I'm confused.

          Edit: To avoid confusion: the code in my earlier post is the source code from game base files, not something I had in mutator
          Last edited by Bardyss; 01-11-2019, 12:41 PM.