Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Phobos

#1
General / EvolveHQ Shut Down
June 16, 2017, 01:23:35 PM
A couple weeks ago, Evolve permanently shut down their VLAN service and removed all user profile pages just like Xfire. :(

Although Evolve was the best VLAN service until it shut down, at least Tunngle is still functional. Our community shouldn't have to worry though since we now have SWBFSpy.

Except for playing SWBF1 patch 1.3 online, the Internet option doesn't work so the only way is Player Hosted servers through Tunngle

http://blog.evolvehq.com/2017/06/going-way-dodo/

QuoteTo Our Friends and Members:

Evolve Labs will be shutting down operations of Evolve HQ and Evolve Arenas, effective June 1, 2017.

"Evolve or Die". These were words our company lived by. But sometimes there isn't a choice. And despite our desire and best efforts to find another way forward, we've run out of options.

This is not the time to dissect all the reasons for how we reached this point, but there were a few major contributors:

Lack of a viable business model.
Investor funding to build viable alternatives (HQ 2.0 and Arenas).
Failed acquisition.
Stiff competition.
When we were right, we were right. When we were wrong, we were damn near right. But "almost" only counts in horseshoes and hand grenades.

There are many people to thank.

Our Team – We've had the privilege of having brilliant founding engineers and the opportunity to build a team of the best talent from anywhere. They poured their guts into this company. They were loyal to a person. All were tested. All gave their all. Minneapolis. San Francisco. Seattle. Minsk. You know who you are. Prost!
Our Investors – Family. Friends. You were the ones who believed in us most. Again and again. You provided us this opportunity to realize our vision of Gaming. Better. Together. Because you believed in that vision... but more importantly, you believed in us. Thank you.
And You – Our members. All 3 million of you. But especially those who were able to support us with their wallets. We shared your pain. You shared our vision. And we can honestly say, we so wanted to make it happen for you. We're sorry we let you down.
As a side note: those of you who joined us and made a financial contribution to Evolve HQ over the last 30 days will be receiving a full refund.

We learned so much.  We hope it was worth it for you. We know it was worth trying. We hope our paths cross again. Until then...

So long, and thanks for all the fish!

Adam and OODA

I had saved only one copy of my profile page from June 2015.
#2
Night of the Living Dead - Side Assets
http://www.swbfgamers.com/index.php?action=downloads;sa=view;down=1433

NOTLD has reached 1000 downloads on ModDB.com :cheers:
There's also an additional 136 downloads currently for it on SWBFGamers.com


http://www.moddb.com/mods/night-of-the-living-dead/downloads/night-of-the-living-dead

Since the original sides & mission probably won't be updated again, I've decided to release the source builder for it, so other modders can customize NOTLD sides or use the assets in their maps. You can modify any of these files for other mods but the original credits should be included.

Tirpider has granted permission to distribute the crowbar model, originally created by Milanbon.
Quote from: tirpider on April 25, 2015, 01:56:35 PM
It should be fine. You won't be distributing the source model (which falls under Turbosquid's Royalty Free License) so simply mentioning "Original Model by milanbon" or something like that should keep everyone out of jail.

NOTLD map is being upgraded into Hershel's Farm for The Walking Dead Mod. The most recent edition of the map is featured in TWD Battlefront v0.94
#3
Maximum AI Difficulty Tweaking for Modders
This tutorial covers every currently known mission LUA and side ODF trick to improve the difficulty setting of AI in SWBF1. There are also ways to improve the AI difficulty by adding hintnodes to map LVLs, but this tutorial doesn't cover that.
For zeroeditor hintnodes tutorial, go here http://www.swbfgamers.com/index.php?topic=8424

According to all the info contained in this thread, these would be the best LUA settings to use for the strongest enemy AI possible in SWBF1, in combination with using the Hard difficulty setting ingame:

SetTeamAggressiveness(ALL, 0.0) -- player team
SetTeamAggressiveness(IMP, 1.0) -- enemy team
SetPlayerTeamDifficultyHard(-20) -- functional for SP only
SetEnemyTeamDifficultyHard (20)
SetAttackerSnipeRange(1000) -- Increases shooting range of Scout classlabel units but there is a hardcoded range limit
SetDefenderSnipeRange(1000)
SetDenseEnvironment("false") -- improves the AI awareness of their surroundings and location of players
SetAllowBlindJetJumps(1) -- the AI jets fly everywhere making them harder to kill
SetMaxFlyHeight(1000) -- lets the AI and players fly really high
SetAIVehicleNotifyRadius(1000) -- allows AI to track down vehicles from across the map
SetStayInTurrets(1) -- forces AI to stay in turrets
SetMemoryPoolSize("Aimer", 999) -- allocates the maximum memory possible for AI shooting calculations


Untested Commands (might be functional)
-- SetAIDifficulty(10,10)
-- SetAIFormationRadius()   




Quote from: Phobos on September 29, 2013, 03:54:11 PM
I figured I might as well start a thread to document the various mod tweaks I've been discovering to increase the maximum difficulty of AI. Hard setting just isn't enough and I wish we had the game source to improve the AI further but we will have to get by with LUA and ODF.

I've already implemented these codes into the mission LUA which have slightly improved the AI strength.
SetTeamAggressiveness(IMP, 1.0) -- max value recognized by the game
    SetDenseEnvironment("false") -- improves the AI awareness of their surroundings and player location.
SetAllowBlindJetJumps(1) -- the AI jets like to fly everywhere making them harder to kill.


I've also maximized the limits for the range of AI shooting at players by making this modification to all laser based weapon ODFs (snipers shotguns pistols etc):
LockOnRange  = "0.0"
LockTime  = "0.0"
MinRange  = "0"
OptimalRange  = "32"
MaxRange  = "512"


And of course here is my ODF mod for letting AI shoot rocket launchers at players from the maximum distance allowed by the game:

TargetEnemy  = "1"
TargetNeutral  = "0"
TargetFriendly  = "0"

TargetPerson  = "1"
TargetAnimal  = "0"
TargetDroid  = "0"
TargetVehicle  = "1"
TargetBuilding  = "0"

MinRange  = "0"
OptimalRange  = "16"
MaxRange  = "150"

LockOnRange  = "0.0"
LockTime  = "0.0"


Of course radar can also be added to the AI, but I'm not sure if it actually helps them or is just for players
ScanningRange = "9999.0"
TransmitRange = "9999.0"


I was looking at the meta scripts and noticed one of the bonus references for making the AI have 'advanced training'. However this was not listed in the bonus types Fred posted about here http://www.swbfgamers.com/index.php?topic=6653.msg70823#msg70823
This is what I tested in my mission LUA:
ActivateBonus(IMP, "MEDICAL_SUPPLIES") -- this adds slow auto heal
ActivateBonus(IMP, "ADVANCEDTRAINING") -- how its referenced in metagame_state
ActivateBonus(IMP, "ADVANCED_TRAINING") -- test with underscore added


This is the error I got in SPTest. The game didn't recognize the bonus type so it didn't apply it.

Message Severity: 2
D:\src\FRONTLINE_PC\FrontLine\Source\LuaCallbacks_Mission.cpp(453)
ActivateBonus specifies invalid bonus name: "ADVANCEDTRAINING"

Message Severity: 2
D:\src\FRONTLINE_PC\FrontLine\Source\LuaCallbacks_Mission.cpp(453)
ActivateBonus specifies invalid bonus name: "ADVANCED_TRAINING"


Here is the reference from metagame_state.lua
yavin = {
MapName = "YAV", -- 3-char name for base map name
LocalizeName = "planets.yavin.name",
-- fnGetBonusText = metagame_state_fnGetBonusText_yavin,
chargemax = 1,
ShortBonusText = "planets.yavin.shortbonus",
LongBonusText = "planets.yavin.longbonus",
MapName1 = "planets.yavin.mapname1", -- localization key to first map
MapName2 = "planets.yavin.mapname2", -- localization key to second map
RotateSpeed = 0.62,
ModelScale = 0.16,
BonusType = "AdvancedTraining",
pickorder = 7, -- 1 = picked first, 2 = second, etc
},


Does anyone else have any other ideas for how to implement the AdvancedTraining bonus from Galactic Conquest into a regular mission LUA or any other potential tweaks for making the AI more difficult?

List of things I want to improve for the AI: (note that I play SP exclusively on Hard Difficulty now)
- Intelligence and hunting down players from any distance
- Advanced Training bonuses from GC applied to Instant Action and MP mission LUAs
- More defensive manuevers when fighting players not so many predictable movements and "path hugging"
- Increase the default cutoff range for how far AI can shoot at players (i.e. make it so a sniper AI on the other side of kamino is still going to shoot at you if you're in his line of sight)
- Enable the "special jet tricks" for players which AI are seemingly only capable of using such as: rolling midair while in a jet jump, double jetting really high above the map

Quote from: Phobos on February 19, 2014, 04:14:50 AM
Would it be possible to use some of these features from SWBF2 or hack the game memory to increase AI difficulty?

http://www.secretsociety.com/forum/downloads/BF2Docs/AI/Difficulty.html
Quote from: Psych0fredAI Difficulty

Command Line Options:

/DisableAIAutoBalance
This will disable auto balancing for the entire game. Use this to pure balance your levels.

Console debugging commands:

aidiff
Dumps the difficulty to the console, and also to the debug output (TTY on ps2, DrWatson for xbox):

Profile setting: MEDIUM
AutoBalance: ACTIVE
        base   lua  auto = total
Player :  10 +   0 +   0 = 10
Enemy  :  12 +   0 +   0 = 12   

This shows the current profile difficulty setting (EASY, MEDIUM, HARD).

Then it says if AutoBalance is turned on.  You can control this with the lua EnableAIAutoBalance() command.  The modes shown are:
ACTIVE - AutoBalance is enabled and currently working.
INACTIVE - Its turned on, but not currently active.  Probably because one side has infinite reinforcements.
DISABLED - not turned on.

Then it shows the difficulty setting calculation.  "Base" is the base value that it gets from the profile setting.  "Lua" is the adjustment modifier that you can set in the lua with the SetAIDifficulty() command.  "Auto" is the modifier from the auto balancer.  "Total" is the final value that it uses.

Lua Script commands:

EnableAIAutoBalance()    
Turn on AutoBalancing.  This will work for Conquest/Assault/CTF games.  Not campaign.   Basically if the score gets too far in one teams favor (+/- 40 conquest, 60 assault, 1 ctf) it will make the losing team better and the winning team worse until things get back to close again.

DisableAIAutoBalance()    
Turn off AutoBalancing.  It is on by default so you should use this for your campaign mode scripts.

SetAIDifficulty(player, enemy)    
This will set the current difficulty modifier.  The two values are for the player's team and for the enemy's team.  These are only modifiers on the current profile setting, so you don't need to set these at all if you want.  All maps default to (0,0).

SetAIDifficulty(-2, 3)
This will make the AI on the players team 2 settings easier, and the AI on the enemy team 3 settings harder.
This can be called from any point within a mission.  So if you want the bad guys to be more difficult on just one objective, call this with say (0,2) in the OnStart function, then call it again with (0,0) to reset it in the OnComplete function.

SetAIDifficulty(player, enemy, diff)    
This works just like the above, but only for a specific profile setting.  So if you want to leave medium alone, but make hard mode harder, you could do:

   SetAIDifficulty(0, 3, "hard")
The last value can be "easy", "medium", or "hard".

Quote from: Phobos on October 19, 2014, 05:12:04 AM
To make zombies smarter you can change the UnitType value in the ODF to "Trooper" or "pilot". This will make them strafe shots at close range and they are harder to shoot in the head with high move speeds.

To make zombies more stupid and charge at the player without trying to dodge shots change the UnitType to "assault". When combined with slower move speeds this resembles the classic zombie more but they are much easier to kill. I haven't tested the other unit types such as "support" yet.

This works for any AI not just zombies btw and is most noticeable on Hard difficulty.

Quote from: Phobos on May 15, 2015, 09:55:22 AM
From http://www.swbfgamers.com/index.php?topic=4594

Quote from: tirpider on May 25, 2012, 12:25:28 PM
I grepped through the odf's for BF1 and 2 for "UnitType" and made this list:

//possible unit types:
//"assault" or "Assault"
//"pilot"
//"repair"
//"scout" or "Scout"
//"support"
//"trooper" or "Trooper"
UnitType = "assault"

I don't know if case affects it or not, so I included the variations.
They certainly affect the behavior of the unit, but I imagine the SetTeamAggressiveness setting will have more of an impact on how reckless they are.

-edit
I grepped through the lua files for SetTeamAggressiveness.
The lowest value I saw was 0.7
The Highest was 1.0  (most common one as well.)

UnitType Information
- Assault classlabel will tell AI to place landmines (if they have that weapon) on the Mine hintnodes for maps placed in ZeroEditor. It also makes the AI more 'stupid' and they will not strafe sideways when being aimed at by enemies.
- Pilot is like Trooper, the AI will be most aggressive and use tactics such as strafing. In addition this unit type can also heal vehicles automatically while driving. They also heal players and repair turrets/vehicles
- Repair has not been tested yet.
- Scout is almost as aggressive as Pilot/Trooper, but will play more defensively and retreat sometimes more often. They utilize Sniper hintnodes placed in ZE and will sometimes go prone in certain areas. They also strafe to dodge enemy shots.
- Support has not been tested yet.
- Trooper is the most aggressive unit type which will use strafing tactics to dodge enemy shots.

Also to maximize zombie aggression, use these LUA
SetDenseEnvironment("false")
SetTeamAggressiveness(IMP, 1.0) -- zombie faction

Quote from: Snake on May 25, 2012, 01:39:53 PM
I have already set all of them to assault which is what was in the Luke .odf but they still run away from grenades and still act too nonchalant. Maybe I can increase their speed slightly to make it harder.. Still, I wish there was a way to take away their "grenade sense".
this would be nice, they retreat from melee sometimes too.

Edit
SetHistorical()
SetPlayerTeamDifficultyHard(2)
SetEnemyTeamDifficultyHard (6)

It's possible adding this to a mission LUA will increase the difficulty of enemy faction defined by the missionlist.

Quote from: John Northan - Lead ProgrammerWelcome to my developer diary. My name is John Northan and I'm a programmer on Star Wars Battlefront at Pandemic Studios, specializing in game Artificial Intelligence. My plan is to give you an insight into several challenging technical issues that we've worked on whilst developing Battlefront: creating a massive battlefield sensation, encouraging emergent AI environment interaction, and developing distinct soldier behaviors, such as assault, scout and repair.
One of the great sensations to come from watching the Star Wars movies are the massive battle sequences. We want the player to feel like they are in the midst of those battles, such as down on the surface of Hoth running amongst giant AT-ATs or taking a defensive position in the snow trenches. To achieve this, we need to simulate great numbers of soldiers, ground-based vehicles, and flyers. In Battlefront's single player experience, the majority of these entities need to be controlled by AI. The AI for each entity is calculated at several different layers. At the highest level, the strategic AI, examples of the types of critical decisions that need to be made are: which command post to attack, which enemy to engage, which weapon is most appropriate, and whether to interrupt a current action because a thrown grenade has just been spotted. At the lower levels, the controller AI, examples of the types of immediate decisions that need to be made are: how fast and in what direction to move, where to aim a weapon in order to hit a moving target, and whether to alter course in order to avoid a collision.
The technical difficulty in juggling all this strategic and control AI for a large number of soldiers and vehicles is that it must all be achieved with low CPU usage. For example, in Battlefront, we allow the AI about five to ten percent of CPU time. One of our solutions was to realize that high-level strategic decisions could be made much less frequently than the lower level controls. Decisions, therefore, are made at differing time intervals, dependent upon their urgency. For example, when a soldier is running through a battlefield, he needs only to evaluate which command post to attack every few seconds, whereas he needs to make weapon aiming decisions continuously.
One of the leading-edge AI techniques in use in games at the moment is for characters to react to the environment intelligently. Examples of this are soldiers in combat seeking cover behind barriers or snipers hiding out on rooftops. This emergent behavior is achieved in Battlefront by the placement of hint nodes within the world. We have a variety of hint nodes that our Level Designers can populate the word with, such as "cover" nodes to designate strategic positions to fire on the enemy from, "snipe" hints for concealed, long-range firing positions, and "minefield" hints for areas where mines could be laid. It is the emergent use of these hints that can give an AI-controlled soldier the appearance of intelligent environment use.
We have put much time during the development of Battlefront into distinct soldier behaviors. When running through a battlefield, it is possible to notice each behavior: there will be trooper soldiers directly engaging the enemy, sniper soldiers staying hidden at the periphery of the battle, assault soldiers attempting to outflank and destroy enemy vehicles, and repair soldiers busy healing the wounded. The trooper soldiers have the most variety of behavior. Upon spotting an enemy, they will select a method of attack, based upon factors such as weapon availability and enemy mobility. For example, a trooper soldier armed with just a pistol will try to get up close to a target, dodging and weaving, whereas a trooper armed with a long-range rifle will go prone, reducing the potential for shot error. Troopers will use cover hints to use natural environmental barriers to hide from the enemy. If a cover position is compromised the soldier will run for another barrier from which to take cover.
Sniper soldiers tend to avoid direct combat. They prefer to look for strategic snipe positions, from which they can pick off enemy soldiers with a precise, long-range rifle. If their snipe position is discovered, they will pull out a pistol and make a fighting retreat. Assault soldiers seek out enemy vehicles. At long range, they will go prone and fire a low-error shot at their target. If the vehicle approaches they will attempt to outflank, heading to the backside of the vehicle, where it tends to be most vulnerable. Repair soldiers will follow other soldiers into battle, re-supplying them with ammo, and healing them if injured. Of course, if fired upon, they will interrupt their healing behavior and immediately engage in combat.
That's the quick and comprehensive look into the world of Infantry-based AI! We've also developed many other behaviors and stylized nodes to handle such things as the many, many different types of vehicles or emplacements that can be used! It would be silly to describe all of our secrets, though, wouldn't it!
Keep a look out for these soldier behaviors and more whilst you're mowing them all down in the Battlefront!

Quote from: Phobos on January 18, 2013, 05:55:35 AM
For custom single player maps is there a way to completely disable players from changing the difficulty settings (easy medium hard) and define them within the mission LUA? For example if I put this in the mission LUA
ScriptCB_SetDifficulty(3)
Would this force the difficulty to hard and override whatever the player's default difficulty setting is?
Quote from: Led on January 18, 2013, 08:51:09 AM
Yes, I think that works.  But it goes to something like 12.
Quote from: Led on June 08, 2012, 01:51:58 PM
These are LUA commands for historical maps.  Some commands are duplicated so that you can see the range of values that it may take.  This is currently a work in progress.
   SetPlayerTeamDifficultyEasy (1)
     SetEnemyTeamDifficultyEasy (4)
     SetPlayerTeamDifficultyMedium (2)
     SetEnemyTeamDifficultyMedium (3)
        SetPlayerTeamDifficultyMedium (2)
        SetEnemyTeamDifficultyMedium (-4)     
        SetPlayerTeamDifficultyEasy (14)
        SetEnemyTeamDifficultyEasy (-3)
        SetPlayerTeamDifficultyMedium (-1)
        SetEnemyTeamDifficultyMedium (6)
--     SetPlayerTeamDifficultyHard (-10)
--     SetEnemyTeamDifficultyHard (12)
     SetPlayerTeamDifficultyHard (0)
        SetEnemyTeamDifficultyHard (3)

Quote from: tirpider on October 09, 2013, 03:55:55 AM
Code (lua) Select
--ScriptCB_GetDifficulty()
-- returns: number representing the current difficulty.
--          retrieved from the current profile.
--          [1, 2, or 3](easy, medium, hard)
-- found in: [line numbers in brackets]
--           ifs_difficulty.lua [35]
--           ifs_difficulty_demo.lua [40]
--           ifs_instant_top.lua [19]
--           ifs_opt_general.lua [58][60][187][218][249]
--           ifs_sp_briefing.lua [765]



Code (lua) Select
--ScriptCB_SetAIDifficulty(n1, n2)
-- parameters: n1 and n2 should be numbers.
--             they have something to do with the number of availiable maps in
--             galactic conquest.
-- found in: [line numbers in brackets]
--           ifs_meta_battle.lua [32][34][131][133]
-- notes: I believe it sets some metric for the GC AI and has nothing to do with
--        the in-game AI.



Code (lua) Select
--ScriptCB_SetDifficulty(n)
-- parameters: n should be a number
--          [1, 2, or 3](easy, medium, hard)
-- found in: [line numbers in brackets]
--           ifs_difficulty.lua [60]
--           ifs_difficulty_demo.lua [48]
--           ifs_instant_top.lua [19]
--           ifs_opt_general.lua [187][218][249]
--           ifs_sp_briefing.lua [765]
-- notes: Pretty sure it sets the difficulty in the profile, so if a map is
--        already initialized, this won't have an effect on the current map.



Code (lua) Select
--SetEnemyTeamDifficulty(n)
--SetPlayerTeamDifficulty(n)
-- parameters: n should be a number
-- notes: the only example is commented out in kam1c.lua with 11 as it's number. Most likely a depreciated feature.


Code (lua) Select
--SetEnemyTeamDifficultyEasy(n)
--SetEnemyTeamDifficultyMedium(n)
--SetEnemyTeamDifficultyHard(n)
--SetPlayerTeamDifficultyEasy(n)
--SetPlayerTeamDifficultyMedium(n)
--SetPlayerTeamDifficultyHard(n)
-- parameters: n should be a number
-- found in: all the hustorical mission luas.
-- notes: they seem to accept a wider range of values than SetDifficulty.
          And all appear in the same files. Don't know how to use them.


These are psych0fred's LUA notes, not sure which of it is for BF2 only.
Quote from: psych0fred
I've added a setting to the lua mission scripts that tells the AI the mission is urban.  This allows the AI to change some combat behaviors to be more suitable to an urban environment (for example, ATST will not move as much around during combat, since in a tight urban setting they will collide with walls too much).
I've added the setting to all current lua files, so you will only need to add it to any new lua mission files you create:
SetUrbanEnvironment("true")
or
SetUrbanEnvironment("false")
I've renamed the script function, "SetUrbanEnvironment" to "SetDenseEnvironment" since I realized with Endor that I wanted the AI vehicles to behave in the same way in forested environments as in city environments.  The new function name generalizes the environment type better.  I've updated all the lua scripts with this new function name.

SetAIDifficulty(player, enemy)
          This will set the current difficulty modifier.
          The two values are for the player's team and for the enemy's team.
          These are only modifiers on the current profile setting, so you don't need to set these at all if you want.
          All maps default to (0,0).
      SetAIDifficulty(-2, 3)
          This will make the AI on the players team 2 settings easier, and the AI on the enemy team 3 settings harder.
          This can be called from any point within a mission.
          So if you want the bad guys to be more difficult on just one objective, call this with say (0,2) in the OnStart function, then call it
          again with (0,0) to reset it in the OnComplete function.
       
      SetAIDifficulty(player, enemy, diff)
          This works just like the above, but only for a specific profile setting.
          So if you want to leave medium alone, but make hard mode harder, you could do:

      SetAIDifficulty(0, 3, "hard")
          The last value can be "easy", "medium", or "hard".

I've added a couple of new lua commands:
SetPlayerTeamDifficulty( value )
SetEnemyTeamDifficulty( value )
where value can be between 1 (dumbest) and 20 (smartest)

I've added support for the Historical campaign lua commands:
SetPlayerTeamDifficultyEasy
SetEnemyTeamDifficultyEasy
SetPlayerTeamDifficultyMedium
SetEnemyTeamDifficultyMedium
SetPlayerTeamDifficultyHard
SetEnemyTeamDifficultyHard

Note that Lua DOES NOT accept the "+" sign, so do not do: SetPlayerTeamDifficultyEasy(+5)

Instead, do: SetPlayerTeamDifficultyEasy(5)

Of course, you can use the "-" sign: SetPlayerTeamDifficultyEasy(-5)

Quote from: Ginev on May 06, 2015, 03:54:28 PM
SetDefenderSnipeRange(170)
- Not tested, my theory is that it may increase or maximize (in terms of weapon ODF range) AI sniper bot shooting range.

SetAllowBlindJetJumps(1)
- Set to 0 by default, set to 1 makes AI jets randomly jump around as if jet nodes were everywhere on the map. I test this lines aswell.The first one works with in combination with defence hint node. You can place the hint node in zeroeditor.When a sniper class soldier go to that hint node he will ahve increased range of fire.

SetAIVehicleNotifyRadius(64)
This is taken from platforms LUA and can be seen in various other stock maps with flyer vehicles. This is used for AIs.I think 64 is default.AIs in 64 range away from any vehicle will return and will try to enter the vehicle.If the Ai is too far away for example (65) he will not come back for the vehicle.Its not good to set this value too high because bots will return from far away just to enter a vehicle.
Quote from: Phobos on May 07, 2015, 07:21:02 PM
Nice discovery. So the SetDefenderSnipeRange code allows sniper AI (UnitType=Scout) to shoot players from further distance than default limit for other units? I'm wondering if you made a giant sniper hintnode that covered the entire map, and set the LUA line to 9999, if AI could snipe players from across the map. The default cutoff range for stock sniper is 2000 velocity * 0.15 lifespan so would want to increase that for testing. If this trick worked you could in theory add unlimited shot range to all AI units :o
#4
The [FC] servers have been crashed several times recently, as a result more IPs have been banned. I have recorded all the evidence and packet captures of who it was and when it happened to share with other SWBFSpy server admins. We find it quite disrespectful that there are still crashers going around causing problems. It's happened too many times recently to call a "coincidence". The batch and other server files are confirmed to be stable and haven't crashed for several months. These are acts of direct hostility towards our server, and we have proof of UDP spam and other forms of attacks being used.

I won't post the IP addresses which have been banned here, but I will list this information:
- January 20th the TWD server was crashed by a player from Austria who is now banned
- January 31st the [FC]Battlefront server was crashed by a player from Denver Colorado who is now banned
- February 11th there was a vigorous attempt to crash the TWD server (although it wasn't successful) by a player from Germany who is now banned
- February 11th the [FC]Battlefront server was crashed by a player from Virginia who is now banned
- February 12th (shortly after midnight) the SWBF1Spy PS2 server was crashed by a player from Alabama who is now banned

The [FC] servers are continually being attacked, and I will continue to issue out permanent bans every time it occurs. Consider this a warning to anyone who thinks they can crash our servers and get away with it: You will get caught, and you will get permanently banned, so don't ruin the fun for everyone and lose the privilege of playing in our servers.

If anyone would like the IP subnets of these troublemakers to ban from their own servers as well, contact me or Anyder for the info. I'll update this thread if any more attacks happen again in the future. Thanks to everyone who is kind enough NOT to crash our servers -- but unfortunately a small fraction of these players could get accidentally banned, due to having similar IP addresses as the server crashers who have had their subnets banned.

[spoiler][/spoiler]
#5
General / IMDb Forums Shutting Down
February 08, 2017, 05:58:05 PM
www.imdb.com/board/announcement

Quote
IMDb Message Boards Announcement

IMDb is the world's most popular and authoritative source for movie, TV and celebrity content. As part of our ongoing effort to continually evaluate and enhance the customer experience on IMDb, we have decided to disable IMDb's message boards on February 20, 2017. This includes the Private Message system. After in-depth discussion and examination, we have concluded that IMDb's message boards are no longer providing a positive, useful experience for the vast majority of our more than 250 million monthly users worldwide. The decision to retire a long-standing feature was made only after careful consideration and was based on data and traffic.

Increasingly, IMDb customers have migrated to IMDb's social media accounts as the primary place they choose to post comments and communicate with IMDb's editors and one another. IMDb's Facebook page (https://www.facebook.com/imdb) and official Twitter account (https://twitter.com/imdb) have an audience of more than 10 million engaged fans. IMDb also maintains official accounts on Snapchat (https://www.snapchat.com/add/imdblive), Pinterest (https://www.pinterest.com/imdbofficial/), YouTube (https://www.youtube.com/imdb), and Tumblr (http://imdb.tumblr.com/).

Because IMDb's message boards continue to be utilized by a small but passionate community of IMDb users, we announced our decision to disable our message boards on February 3, 2017 but will leave them open for two additional weeks so that users will have ample time to archive any message board content they'd like to keep for personal use. During this two-week transition period, which concludes on February 19, 2017, IMDb message board users can exchange contact information with any other board users they would like to remain in communication with (since once we shut down the IMDb message boards, users will no longer be able to send personal messages to one another). We regret any disappointment or frustration IMDb message board users may experience as a result of this decision.

IMDb is passionately committed to providing innovative ways for our hundreds of millions of users to engage and communicate with one another. We will continue to enhance our current offerings and launch new features in 2017 and beyond that will help our customers communicate and express themselves in meaningful ways while leveraging emerging technologies and opportunities.
#6
Commented AAT.odf vehicle tutorial by psych0fred

Quote[GameObjectClass]
ClassLabel          = "hover" // Defines the class label for the game engine to expose properties
GeometryName        = "cis_hover_aat.msh"   // Defines the mesh for Zeroeditor when placed as an object

[Properties]

GeometryName        = "cis_hover_aat"   // Sets name of mesh file to use for vehicle

Explosion           = "cis_hover_aat_exp"   // Sets name of odf file to call when vehicle dies

// Some vehicles have a slow death, the ATAT for example has a long death animation attached to it
// -- the ATAT reaches critical health, crumbles to it's knees, then finally explodes; flyers can die
// -- but go spinning off before exploding...
//--in which case the ExplosionCritical and ExplosionDestruct are used

ExplosionCritical   = "cis_hover_aat_exp"   // Sets name of odf file to call when vehicle reaches critical health
ExplosionDestruct   = "cis_hover_aat_exp"   // Sets name of odf file to call when vehicle finally explodes

VehicleType         = "light"   // Defines the vehicle type for ???????
AISizeType          = "MEDIUM"  // Defines the size of the AI for planning graphs

MapTexture          = "aat_icon"    // Defines the tga file used on map for vehicle
MapScale            = 1.5   // Defines the scale of the icon on the map
HealthTexture       = "HUD_cis_aat_icon"    // Defines the tga used for the vehicle health icon

WaterEffect         = "waterwake_lg"    // Defines the common particle effect for when vehicle goes through water

FLYERSECTION        = "BODY"    // Defines the primary section of the vehicle occupied by pilot
VehiclePosition     = "common.vehiclepositions.pilot"   // Defines the pilot position for localization
FirstPerson         = "cishq\cishq;cis_1st_cockpit_AAT" // Defines the path to the fpm folder/lvl/sub-lvl
FirstPersonFOV      = "52" // Sets the first person field of view
CockpitTension      = 22    // Sets the tension of the cocpit camera

CollisionScale      = 4 // Sets the damage resulting from collision
CollisionThreshold  = 5 // Sets the threshold of impact before damage occuers
MaxHealth           = 6600.0    // Sets teh vehicle's max health
HealthType          = "vehicle" // Sets the health type for a vehicle, used for ?????????
//HitLocation       = "p_crithit 0"

SetAltitude         = 0.5   // Sets the default hover altitude
GravityScale        = 4.0   // Sets the mass of the vehicle
LiftSpring          = 4.0   // Sets the spring in the hover
LiftDamp            = 3.0   // Sets the cushion of the spring on subsequent bounces

Acceleration        = 5.25  // Sets the rate of acceleration m/s
Deceleration        = 7.0   // Sets the rate of decelleration m/s
Traction            = 20.0 // Sets the percent to decrease acceleration rate when starting from zero
ForwardSpeed        = 12.0 // Sets the maxspeed m/s
ReverseSpeed        = 10.0  // Sets the max reverse speed m/s
StrafeSpeed         = 4.5   // Sets the max strafe speed m/s

// The following sections tweak the bounce
AddSpringBody       = "-1.6 1.9 1.95 2.5"
BodySpringLength    = 0.3
AddSpringBody       = "1.6 1.9 1.95 2.5"
BodySpringLength    = 0.3

AddSpringBody       = "0.0 2.15 -1.6 3.5"
BodySpringLength    = 0.8
BodyOmegaXSpringFactor = 2

VelocitySpring      = 5
VelocityDamp        = 2.5
OmegaXSpring        = 1.0
OmegaXDamp          = 3.0
OmegaZSpring        = 4.0
OmegaZDamp          = 1.5


SpinRate            = 1.7   // Sets the rate of turn for the vehicle is turning but not moving
TurnRate            = 1.7   // Sets the rate of turn for the vehicle when turning while moving
TurnFilter          = 5.0   // Sets a tension in the rate of turn to make it ramp up
PitchRate           = 0.5   // Sets the rate of pitching the vehicle
PitchFilter         = 1.0   // Sets the rate ramping up the pitch when starting a tilt
PitchDamp           = 1.0   // Sets the rate slowing down the vehicle when stopping a tilt

//SpinRate            = 2.7
//TurnRate            = 1.7
//TurnFilter          = 5.0
//PitchRate           = 2.5
//PitchFilter         = 1.0
//PitchDamp           = 1.0


StrafeRollAngle     = 0.01  // Angle the vehicle rolls when strafing
ThrustPitchAngle    = 0.0   // Picth of the vehicle caused by thrusting forward
BankAngle           = -0.01 // Angle of the vehicle when banking
BankFilter          = 3     //low is slow - How quickly the bank returns to level
LevelSpring         = 2.0   //low is slow - the force the restores level
LevelDamp           = 1.0   //low is slow - the force that reduces the momentum of the rotation

PCPitchRate         = "15.0" // may be obsolete, otherwise these settings are used on PC
PCSpinRate          = "15.0"// may be obsolete, otherwise these settings are used on PC   
PCTurnRate          = "20.0"// may be obsolete, otherwise these settings are used on PC

//Camera settings for vehicle position
// Think of camera as fixed on one end of long stick balanced on a cone
//-- on one end is camera, other end is focal point, cone at center can be shifted
//-- camera is eyepoint; TrackOffset is focal point; Trackcenter is cone position; tilt value is tilt on pole
EyePointOffset      = "0.0 2.5 -2.0"  // Camera position from vehicle origin x,y,z
TrackCenter         = "0.0 5.0 0.0"   // Camera tilt axis from vehicle origin x,y,z
TrackOffset         = "0.0 0.0 10.0"  // Camera Focal Point from vehicle origin x,y,z   
TiltValue           = "5.0"           // How much camera can tilt
PitchLimits         = "-30 20" // How far camera swings when pitching in degrees
YawLimits           = "-90 90"  // How far camera swings when tilting in degrees

// Each body section or turret section can be occupied by a unit
// -- if a body or turret section has more than one weapon, they are defined by WEAPONSECTION headers
// -- when a section has more than one weapon, section 1 is the primary fire and section 2 the secondary fire

WEAPONSECTION       = 1
WeaponName          = "cis_weap_hover_aat_cannon" // Odf name of weapon
WeaponAmmo          = 0 // Amount of ammo or clips in weapon 0 is infinite

AimerNodeName       = "side_gun_1"  // Hardpoint name in mesh that acts as camera point for aimer
AimerPitchLimits    = "-30.0 90.0"  // Sets pitch movement limits on aimer in degrees
AimerYawLimits      = "-30.0 10.0"  // Sets yaw movement limits on aimer in degrees
BarrelNodeName      = "recoil_1"    // Sets name of object in mesh to use as gun barrel to animate recoil
BarrelRecoil        = 0.25          // Sets amount of recoil to apply to object defined as barrel
FirePointName       = "hp_gun_2"    // Sets the name of the hardpoint in the mesh where the shot comes from

NextAimer           = "-"  // Header for other barrels weapons with multiple barrels, causing alternating shots

AimerNodeName       = "side_gun_2"
AimerPitchLimits    = "-30.0 90.0"
AimerYawLimits      = "-10.0 30.0"
BarrelNodeName      = "recoil_2"
BarrelRecoil        = 0.25
FirePointName       = "hp_gun_1"

WEAPONSECTION       = 2     // Weaponsection 2 defines weapons fired using the secondary fire button
WeaponName          = "cis_weap_hover_aat_missile"
WeaponAmmo          = "9"

// The AAT has six missile tubes, three on each side. Each is separated with a nextaimer line
//--causing the shots to fire from teh barrels one by one rather than from all six at once
AimerPitchLimits    = "-5 90"
AimerYawLimits      = "-20.0 20.0"
AimerNodeName       = "hp_missleR_1"

NextAimer           = "-"

AimerPitchLimits    = "-5 90"
AimerYawLimits      = "-20.0 20.0"
AimerNodeName       = "hp_missleL_2"

NextAimer           = "-"

AimerPitchLimits    = "-5 90"
AimerYawLimits      = "-20.0 20.0"
AimerNodeName       = "hp_missleR_2"

NextAimer           = "-"

AimerPitchLimits    = "-5 90"
AimerYawLimits      = "-20.0 20.0"
AimerNodeName       = "hp_missleL_3"

NextAimer           = "-"

AimerPitchLimits    = "-5 90"
AimerYawLimits      = "-20.0 20.0"
AimerNodeName       = "hp_missleR_3"

NextAimer           = "-"

AimerPitchLimits    = "-5 90"
AimerYawLimits      = "-20.0 20.0"
AimerNodeName       = "hp_missleL_1"

// Turret1 is the turret on the top of the AAT
FLYERSECTION        = "TURRET1" // Turret1 is the secondary positon a unit can man

FirstPerson         = "cis\cissccam;cis_1st_cockpit_securitycam"
VehiclePosition     = "common.vehiclepositions.gunner"
TurretNodeName      = "Gun_Body"
PitchLimits         = "-40.0 20.0"
YawLimits           = "-180.0 180.0"
PitchTurnFactor     = 0.0

PCPitchRate         = "15.0"
PCTurnRate          = "20.0"

TurnRate            = 1.5
TurnFilter          = 5.0
PitchRate           = 0.5
PitchFilter         = 1.0
PitchDamp           = 1.0

//PitchRate         = 0.8
//PitchFilter       = 2.75
//TurnRate          = 1.3
//TurnFilter        = 2.75

AimerNodeName       = "Main_Gun"
AimerPitchLimits    = "-30.0 90.0"
AimerYawLimits      = "0.0 0.0"

BarrelNodeName      = "recoil_3"
BarrelRecoil        = 0.75
FirePointName       = "hp_cannon_1"

EyePointOffset      = "0.0 2.0 -1.75"
TrackCenter         = "0.0 1.0 -2.0"
TrackOffset         = "0.0 0.0 3.0"
TiltValue           = "10.0"

// This section sets up the sounds triggered when manning the turret as well as when it moves
TurretYawSound         = "turret_whir_yaw_lp"
TurretYawSoundPitch    = "0.7"
TurretPitchSound       = "turret_whir_pitch_lp"
TurretPitchSoundPitch  = "0.7"
TurretAmbientSound     = ""
TurretActivateSound    = "vehicle_equip"
TurretDeactivateSound  = "vehicle_equip"
TurretStartSound       = ""
TurretStopSound        = ""

WeaponName              = "cis_weap_hover_aat_launcher"
WeaponAmmo              = 0

// This section define the collision geometry within the mesh to use when colliding with what kind of object
VehicleCollision        = "p_vehiclesphere"
SoldierCollision        = "CollisionMesh"
//SoldierCollision      = "p_sidegun1"
//SoldierCollision      = "p_sidegun2"
SoldierCollision        = "p_barrel"
SoldierCollision        = "p_turret"

OrdnanceCollision       = "CollisionMesh"
OrdnanceCollision       = "p_sidegun1"
OrdnanceCollision       = "p_sidegun2"
OrdnanceCollision       = "p_barrel"
OrdnanceCollision       = "p_turret"



// Chunks are the peices resulting from the vehicle's explosion
CHUNKSECTION            = "CHUNK1" // Defines the chunk
ChunkGeometryName       = "cis_hover_att_Chunk1"    // Defines the mesh file to use for the chunk
ChunkNodeName           = ""    // Defines the hardpoint in the mesh from which the chunk originates
ChunkTerrainCollisions  = "2"   // Defines the number of time the chunk bounces
ChunkTerrainEffect      = "dirtspray"   // Defines the particle effect attached to each bounce
ChunkPhysics            = "FULL"        // Defines the chunk behavior/mass
ChunkOmega              = "1.0 2.0 1.0" // ?? Defines chunk spin???
ChunkBounciness         = 0.35  // Defines rate of upward bounce
ChunkStickiness         = 0.45  // Defines how fast chunk accelerate in bounce
ChunkSpeed              = "15.0"  // Defines speed of moving chunk
ChunkUpFactor           = "25.00"   // Defines the upward speed of spawned chunk
ChunkTrailEffect        = "mediumsmoketrail"    // Defines the particle effect attached to chunk

// The next two lines define sounds to be triggered by chunks
ChunkInitialCollisionSound = "com_veh_collision_lg" //Played each time the chunk collides with something.
ChunkScrapeCollisionSound  = "" // Played as the chunk slides along another object.

CHUNKSECTION            = "CHUNK2"
ChunkGeometryName       = "cis_hover_att_Chunk2"
ChunkNodeName           = ""
ChunkTerrainCollisions  = "4"
ChunkTerrainEffect      = "dirtspray"
ChunkPhysics            = "FULL"
ChunkOmega              = "2.0 2.5 2.0"
ChunkBounciness         = 0.45
ChunkStickiness         = 0.25
ChunkSpeed              = "10.0"
ChunkUpFactor           = "0.00"
ChunkTrailEffect        = "mediumsmoketrail"

ChunkInitialCollisionSound = "com_veh_collision_lg" //Played each time the chunk collides with something.
ChunkScrapeCollisionSound  = "" // Played as the chunk slides along another object.

CHUNKSECTION            = "CHUNK3"
ChunkGeometryName       = "cis_hover_att_Chunk3"
ChunkNodeName           = ""
ChunkTerrainCollisions  = "3"
ChunkTerrainEffect      = "dirtspray"
ChunkTrailEffect        = "mediumsmoketrail"
ChunkPhysics            = "FULL"
ChunkOmega              = "2.0 1.0 2.0"
ChunkSpeed              = "12.0"

ChunkInitialCollisionSound = "com_veh_collision_lg" //Played each time the chunk collides with something.
ChunkScrapeCollisionSound  = "" // Played as the chunk slides along another object.

CHUNKSECTION            = "CHUNK4"
ChunkGeometryName       = "cis_hover_att_Chunk4"
ChunkNodeName           = ""
ChunkTerrainCollisions  = "0"
ChunkTerrainEffect      = "dirtspray"
ChunkTrailEffect        = "mediumsmoketrail"
ChunkPhysics            = "LEAF"
ChunkOmega              = "0.2 0.0 0.2"
ChunkSpeed              = "2.0"
ChunkSmokeEffect        = "smokeplume"
ChunkSmokeNodeName      = "hp_smoke"

ChunkInitialCollisionSound = "com_veh_collision_lg" //Played each time the chunk collides with something.
ChunkScrapeCollisionSound  = "" // Played as the chunk slides along another object.


// The next section defines damage particle effects

DamageStartPercent  = 70.0              // Health percentage where damage effect is turned on
DamageStopPercent   = 20.0              // Health percentage where damage effect is turned off
DamageEffect        = "vehiclespark"    // Particle effect to be spawned/turned on
DamageAttachPoint   = "hp_damage_2"     // Hardpoint in mesh where effect is attached
DamageEffectSound   = ""                // Sound that can be trigged at start of damage state
                                        // --looping sounds will stop when damage state changes
                                        // --sounds can also be attached to spawned particle effect

DamageStartPercent  = 70.0
DamageStopPercent   = 20.0
DamageEffect        = "vehiclespark"
DamageAttachPoint   = "hp_damage_4"

DamageStartPercent  = 60.0
DamageStopPercent   = 20.0
DamageEffect        = "vehiclespark"
DamageAttachPoint   = "hp_damage_3"

DamageStartPercent  = 50.0
DamageStopPercent   = 0.0
DamageEffect        = "vehiclesmoke"
DamageAttachPoint   = "hp_damage_2"

DamageStartPercent  = 19.0
DamageStopPercent   = 0.0
DamageEffect        = "vehicleflame"
DamageAttachPoint   = "hp_damage_2"

DamageStartPercent  = 30.0
DamageStopPercent   = 0.0
DamageEffect        = "vehiclesmoke"
DamageAttachPoint   = "hp_damage_1"

DamageStartPercent  = 10.0
DamageStopPercent   = 0.0
DamageEffect        = "vehicleflame"
DamageAttachPoint   = "hp_damage_3"
DamageEffectSound   = "cis_alert_loop"



EngineSound             = "cis_hover_aat_engine_parameterized" // Name of soundproperty to be used as looping engine
HurtSound               = "cis_hover_aat_hurt"    // Name of soundproperty to be triggered when vehicle takes damage
DeathSound              = "imp_weap_ord_exp_lg" // Name of soundproperty to be triggered when vehicle dies
TurnOnSound             = "cis_hover_aat_turn_on" // Name of soundproperty triggered when unit enters vehicle
TurningOffSound         = ""        // Name of soundproperty triggered when unit leaves vehicle
TurnOffSound            = "cis_hover_aat_turn_off" // Name of soundproperty triggered when vehile turns off
TurnOffTime             = "1.0" // Time after unit leaves vehicle before vehicle turns off
Music                   = ""    // Default music played when unit enters vehicle
RepMusic                = ""    // Music played when rep unit enters vehicle
CISMusic                = ""    // Music played when cis unit enters vehicle
ALLMusic                = ""    // Music played when all unit enters vehicle
IMPMusic                = ""    // Music played when imp unit enters vehicle
MusicSpeed              = ".25" // Speed vehicle must reach before music is triggered
MusicDelay              = "3.0" // Delay when speed reached before music is played
GroundedSound           = ""    // May be obsolete -- soundtriggered by hover bouncing against terrain
GroundedHeight          = ""    // May be obsolete -- height of vehicle that triggers groundedsound
BoostSound              = ""    // Soundproperty, speed threshold (%), going over or under (1 or 0)
FoleyFXGroup            = "metal_foley" // Defines the sound foley class to play for footsteps on object
VehicleCollisionSound   ="com_veh_collision_lg" // Name of soundproperty to trigger when vehicle collides with objects

#7
Released Assets / BF1 Stock Campaign VO Stream WAVs
December 28, 2016, 11:21:05 AM
BF1 Stock Campaign VO Stream WAVs

http://www.swbfgamers.com/index.php?action=downloads;sa=view;down=1422

BF1 Stock Campaign VO Stream WAVs ripped from the stock shell mission briefings includes a zombie briefing by Unit 33.
#8
Quote from: jdee-barc on January 09, 2011, 07:30:48 PM
I found a way of making a weapon not be able to refill its ammo from a recharge droid or ammo pack. That way ensures that you can only have 3 EMP mines at a time and it is also the reason that you can't refill on Health and ammo packs from a recharge droid
put this line in the weapon odf, not the ord odf or exp odf

RefillFromItem      = 0
I just tested this on a custom vehicle dispenser ODF, but it still refills from dropped ammo packs. This is confusing, it should not supply ammo since the same setting prevents stock pilot dispensers from refilling by ammo packs.

Quote from: Gistech on January 10, 2011, 02:00:20 AM
Incorrect. It won't stop you from refilling at an ammo droid but it will stop you from refilling by picking up ammo packs. In any case, I won't use this line in the ODF of the EMP mine.
In the case of TWD mod I want to be able dispense the vehicles such as the motorcycle only once per character life. So I used the ammo bot patcher I made to remove all the ammo bots from map. The trouble is "RefillFromItem = 0" seems to be ignored, when I pick up an ammo pack the dispenser refills anyway.

Here is my ODF
[WeaponClass]
ClassLabel = "dispenser"

[Properties]
GeometryName = ""

RoundsPerClip = "1"
ShotDelay = "0.5"
ReloadTime = "9999.0"
IconTexture          = "HUD_timebomb_icon"
TriggerAll = "1"
AnimationBank = "gam" // "grenade"
RefillFromItem = 0
FireAnim                = "2"
TrackingSound        = ""

WEAPONSECTION = 1
ModeTexture = "HUD_weap_mine"
//ModeTextureColor = "42 235 42 100"
ReticuleTexture = "reticule_00"
OrdnanceName = "twd_hover_motorcycle"
ShotDelay = "1.0"
MaxItems = "1.0"
AutoAimSize = "1.0"
MinStrength = "2.0"
MaxStrength = "2.0"

FireSound           = "com_weap_throw_fire"
FireEmptySound      = "com_weap_inf_ammo_empty"
FireLoopSound       = ""
ReloadSound         = "all_weap_inf_equip_med"
ChargeSound         = ""
ChargeSoundPitch    = ""
ChangeModeSound     = "all_weap_inf_equip_med"
WeaponChangeSound   = "all_weap_inf_equip_med"
OverheatSound       = ""
OverheatSoundPitch  = ""
OverheatStopSound   = ""
ClankLeftWalkSound  = ""
ClankRightWalkSound = ""
ClankLeftRunSound   = ""
ClankRightRunSound  = ""
JumpSound           = "all_weap_inf_pistol_mvt_jump"
LandSound           = "all_weap_inf_pistol_mvt_land"
RollSound           = "all_weap_inf_pistol_mvt_roll"
ProneSound          = "all_weap_inf_pistol_mvt_squat"
SquatSound          = "all_weap_inf_pistol_mvt_lie"
StandSound          = "all_weap_inf_pistol_mvt_getup"
#9
SWBF1 Modding / ZeroEditor Crashing on Map Load [solved]
February 29, 2016, 08:03:29 PM
I'm improving my Cloud City Triton skin but when I try to load the world in ZeroEditor, it crashes on Loading bespin2_Buildings.lyr...

Problem signature:
  Problem Event Name: BEX
  Application Name: zeroeditor.exe
  Application Version: 0.0.0.0
  Application Timestamp: 41e43687
  Fault Module Name: StackHash_e98d
  Fault Module Version: 0.0.0.0
  Fault Module Timestamp: 00000000
  Exception Offset: 3e9380da
  Exception Code: c0000005
  Exception Data: 00000008
  OS Version: 6.1.7601.2.1.0.256.1
  Locale ID: 1033
  Additional Information 1: e98d
  Additional Information 2: e98dfca8bcf81bc1740adb135579ad53
  Additional Information 3: 6eab
  Additional Information 4: 6eabdd9e0dc94904be3b39a1c0583635

Read our privacy statement online:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

If the online privacy statement is not available, please read our privacy statement offline:
  C:\Windows\system32\en-US\erofflps.txt


Not sure why it's crashing since it compiles and runs in game fine, but I suspect it could be due to hex editing the MSH files. I'll try rolling back certain components to see what is causing this. Read only is disabled for all files.




Problem solved - One of the MSH files (bes2_bldg_a_bot1) had been improperly hex edited to 04 00 00 04 instead of 04 00 00 00 04. It should be noted for future reference that this will cause ZeroEditor to crash.

The former [FC] member who is now inactive that helped with these hex edits made some other mistakes, so I've gone through the MSH files and fixed them.
#10
Bypass DNAS Authentication for PS2 SWBF1
After several hours of research and experimentation I finally got SWBF1 multiplayer working on the PCSX2 Emulator! There was DNS error 864 every time I tried to connect so I looked through the shell LUA source, and I discovered a way to bypass the PS2 DNAS Server Authentication by modifying the munged ifs_mpps2_netconfig script. This method requires you to hex edit the ps2 shell.lvl which for me is stored in a 4.5GB ISO file that I hex edited using HxD since XVI32 didn't work. What this will do is skip the DNAS screen along with the obsolete patch page, taking you straight to the gamespy login and server lobby. Use the Primary DNS IP 162.243.230.247 on your ps2 network adapter settings. Here's a screenshot of my settings and the 864 error message.





Proof Of Concept Video
http://fcsite.ml/ps2/pcsx2%202016-02-04%2003-58-24-026.avi


http://www.ps2onlinegaming.com/forum/viewtopic.php?t=1830
In March 2016 the DNAS servers will possibly be shut down forever, so at that point players will need to install this fix to play online. Using this method its possible for PC and PS2 players to be in the same server but there are disadvantages to the PS2 version pretty much everything is inferior quality, missing sky textures, and limited to 20TPS. Its still fun though and ill leave the dedicated server up for some time. I can get up to 75-80FPS but I locked it at 60 for no speedhack distortion lag spikes.


There is more instructions and downloads needed beyond this video for emulation which I'll write a tutorial for later. This post is basically to inform everyone that it's now possible to completely bypass SWBF1 DNAS server authentication and how to apply the patch. The same method should be possible for SWBF2 as well, and if enough ppl are interested Ill look into building a similar patch for it.

I also looked through the the ps2 common.lvl script ifs_mp_opt but unfortunately the ps2 LUA doesn't include any codes for TPS customization or enabling visibility for all regions. I'll work on more shell/common hex edit improvements later. I want to try improving the default video settings next.

To bypass DNAS just copy/paste this code, then search for the hex value in HxD.
3D 28 6E 6F 6E 65 29 00 C1 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 0B 00 00 00 06 00 00 00 70 72 69 6E 74 00 2C 00 00 00 69 66 73 5F 6D 70 70 73 32 5F 6E 65 74 63 6F 6E 66 69 67 5F 62 75 73 79 70 6F 70 75 70 5F 66 6E 4F 6E 53 75 63 63 65 73 73 28 29 00 14 00 00 00 69 66 73 5F 6D 70 70 73 32 5F 6E 65 74 63 6F 6E 66 69 67 00 0B 00 00 00 50 6F 70 75 70 5F 42 75 73 79 00 0B 00 00 00 66 6E 41 63 74 69 76 61 74 65 00 1D 00 00 00 69 66 73 5F 6D 70 70 73 32 5F 6E 65 74 63 6F 6E 66 69 67 5F 53 68 6F 77 48 69 64 65 00 12 00 00 00 67 4F 6E 6C 69 6E 65 53 65 72 76 69 63 65 53 74 72 00 08 00 00 00 47 61 6D 65 53 70 79 00 1A 00 00 00 69 66 73 5F 6D 6F 76 69 65 74 72 61 6E 73 5F 50 75 73 68 53 63 72 65 65 6E 00 0F 00 00 00 69 66 73 5F 6D 70 70 73 32 5F 64 6E 61 73

That's a big chunk of code but were only editing the last part of it. Change this
70 73 32 5F 64 6E 61 73

To this, and save the file.
67 73 5F 6C 6F 67 69 6E

If you're playing this on an actual console you might next need to reburn the ISO or something but I haven't tested that. Now you can play the servers again :cheers:

http://fcsite.ml/ps2/skip_dnas.png


I also recorded the console tutorials here
http://fcsite.ml/SWBF1_PS2_Tutorials.avi

Note To Mods If this post is any way EULA infringing feel free to move it to a non public board.
#11
Tech Support / Website Loading Issues [Solution]
January 31, 2016, 05:42:05 PM
There is some kind of issue with the SWBFGamers homepage. The Tunngle.net banner keeps trying to reload a connection and makes the browser tab spin indefinitely. In fact I had to install this firefox addon just to make it stop and have also blacklisted the Tunngle subnet on my firewall. I assume it's an issue with the Tunngle server. This has happened before on other sites so if you run into the problem just install this addon which lets you specify a custom time limit for websites to stop loading, it can be toggled off for uploading files. Doesn't work with chrome unfortunately.

https://addons.mozilla.org/en-US/firefox/addon/killspinners/
#12
Tech Support / Keyboard Problems
January 27, 2016, 12:42:03 PM
My keyboard has been having annoying problems lately it has gotten much worse. Over 80% of the time it messes up when the "a" key is pressed. Most commonly it will input the letter twice when only pressed once, other times it will add the letter several times, and sometimes it won't add the letter at all. It is difficult even to type this without having to hit backspace constantly.

Sometimes it also does this with the "f" key though not as often maybe 20% of the time. No other keys have this problem so I'm wondering if it is a mechanical fault or possibly a driver issue. Any ideas? Model Number RZ03-0038 Razer BlackWidow Ultimate

Edit Looks like a problem called "switch chattering" http://imgur.com/a/fyxIg
QuoteSYMPTOM: Repeating Characters...like "Characterrrrsssssss". TEST: Look for repeating characters in text editor. Doublecheck on another computer to eliminate SW (key repeat rate) issues. CAUSE: Switch chattering happens with all Cherry MX switches. Cause varies: Metal fatigue, contamination (often reported after liquid spill, misalignment of the metal leaf, dust. FIX: 1. Try Compressed air to clear out possible dust (not Elitekeyboards approved!) 2. Use Deoxit to clean contacts 3. Disassemble the switch and try cleaning contacts or even GENTLY rebending them. 4. If it continues to chatter replace the switch (see buying links in the wiki)
#13
https://gameshare.community/discussion/526/unified-way-to-play-online-new-hex-edit-way-and-dedicated-executables

I've hex edited the original server and client files here. Only changes were "gamespy.com" to "gamespy.onl" in hex editor. These are for SWBF 1.2, I can upload the 1.3 patch later.

http://fcsite.ml/GameMaster_2016_patch.7z

QuoteIncludes GameMaster 2016 NoCD client and server Star Wars Battlefront 1.2 patch hex edited by Phobos.

----------

Unified way to play online (new HEX-Edit way and dedicated executables!)
Kalle
January 21 edited January 22 in Announcements
Hey guys, I recently bought the domain "gamespy.onl". This domain redirects to both masterservers via DNS. So in future you'll just need to Hex-Edit "gamespy.com" to "gamespy.onl". I also created a wiki page for that and will fill in all neccessary information in future.

This new domain will automatically rotate between the two masterserver hosts and will provide an higher level of availability for GameMaster.

Please update your executables then! Some people even using very old executables. In future I won't support the old domain names any more (meaning "gameshare.info").

I'll update our client / server executables over the next days. It's highly recommended that you'll use them instead of the old ones!

----------

Redirect games to GameMaster

Since January 2016 GameMaster got a new way to give you an easy gaming experience. Our executables now automatically load balancing all requests to our GameMaster server without the need to specify an explicit Masterserver. Before you'd to use "d.gameshare.me" for our german masterserver and "u.gameshare.me" for our american masterserver. Now only "gamespy.onl" is required.

New executables from GameMaster will be available over the next days. Stay tuned.
Download our prebuilt executables

We already have changed all neccessary things for our supported games. Just download them at our filebase. This files aren't cracked. You'll need the original CD / DVD if the game want's it! If you don't trust our own executables just hex-edit them (see info below).
Hex-Edit your game executable on your own

To be able to play old games with our masterserver you'll simply need to hex-edit your main game executable. Find all strings with "gamespy.com" in it and replace them with "gamespy.onl". After that you'll be able to play online again.
#14
Dark Trooper Championship 2015 
Draft Rules - Last Revision: November 13
DTC 2014 Thread - http://www.swbfgamers.com/index.php?topic=8174

DTC 2015 is planned to start on December 1st. It will go 4 weeks until Christmas and take a 1 week break, before resuming on January 1st and running another 2-6 weeks afterwards (6-10 weeks total), depending on how many players sign up. The rules are not finalized yet but they will be similar to DTC 2014. This is the draft as of October 2015, I'll update and post final rules within the next few weeks. All players will need to download the DTC+DTBC v1.5 installer, which will be released on the registration deadline. Anyone who is interested in playing or spectating/filming DTC 2015 can sign up or post questions here.

Signup Roster
[FC]Anyder
[FC]Shazam
~PFA~Majesty
[FC]Helios
{Alpha}Kiwi


Admins
Phobos, Anyder

Registration Deadline - November 30th 2015

DTC 2015 Rules, Mods, and Server Settings
- Enabled: Slow AutoHeal, Infinite Ammo, Global Radar
- Disabled: Grenades, Katana, Healthbots, CP Captures
- 1 second respawn timer, 3 seconds spawn protection
- Custom FOV settings can be chosen from in the included DTC side files, or a specific preference requested. Default values will include 65, 70 , 74, 78, 84, and 89. If my mod idea works players will be able to choose any custom number 1-120 directly thru the FOV.ini
- Dark Troopers move faster and are aesthetically improved (Reskinned Jet and Lasers by Phobos, Blue Jet Effect by SleepKiller, Shotgun Model by Sereja).
- There will be different colors of Dark Trooper to spawn as, White, Black, Red, Green, and Blue. Players can also toggle an override LVL which forces all DTs to appear White if they choose.
- Dual bacta packs always drop from kills and vanish within 15 seconds. These will heal 50% instead of 33% health.
- Transparency mods aka see through buildings can be enabled or disabled for participants. This is not wallhacking (noclip) which is a server side hack that won't be allowed. The default skins available will be Stock Mos Eisley, Callisto Mos Eisley, and Europa Mos Eisley v0.2 Beta Transparent Edition with FPS Boost Sky Enhancements by Phobos.
- Glitching in buildings is not allowed unless spectating.
- Prizes will consist of forum awards, crosshair reticules, and map skin mods.
- The DTC server will be hosted in New York for most balanced pings. 2 official duel servers will be running at once. For the final rounds, only 1 server will be hosted at a time, with the extra [FC] servers closed for maximum CPU performance.
- Swiss format will be used for 4-6 weeks, followed by a series of prefinal and final championship rounds for the top 4 competitors, hosted over a 2-4 week period.
- This year players will fight 2 duels per match consecutively, 1 for each side, instead of only 1 duel per match like last year.
- Each duel has 25 reinforcements per side, with a 3 ticket buffer round hosted first.
- All servers will be hosted at 40TPS for the first 4-6 weeks. Prefinal and Final rounds will be hosted at 50/60TPS.
- The final championship round format is being determined currently, it will be similar to DTC 2014.
- ELO Leaderboards will be updated based on DTC scores, but will not affect the DTC Tournament.
- Kills and Headshots will be added up for total points and prizes given to the top 4. A leaderboard script will be updated every week for current standings.
- There will be a separate scoreboard for Survivalist with a mystery prize given at the end of tournament. Narrow Escapes will not be awarded. The prize for this won't be of high significance because the player with 2nd most kills under 10% health doesn't receive any points in a duel.
Narrow Escapes: The number of times your health went down to less than 10% and you were healed back to 100% full health.
Survivalist: The player who gets the most kills while below 10% health wins this award.

Forum Awards
1st Place Total Kills+HS
2nd Place Total Kills+HS
3rd Place Total Kills+HS
4th Place Total Kills+HS
1st Place Headshots
1st Place Survivalist
All Participants

Crosshair Prizes
1st - DemonWing
1st (HS only) - BalrogWing
2nd - DragonWing
3rd - VultureWing
4th - FalconWing
5th - HawkWing
BatWing will be given to all who play at least the first 3 weeks of DTC.

Other Prizes
1st Survivalist - TBA
Other Awards - TBA

[spoiler]Crosshairs by Phobos
16. SpiderWeb - December 2011
15. AsianEye - October 2012 (made by [FC]Fate)
14. EasterEgg - January 2012
13. BatWing + HawkWing - February 2012
12. Hieroglyph - July 2012
11. AlienUFO  - August 2012
10. OwlEye/Elevator - December 2012
9. FalconWing - January 2013
8. VultureWing - September 2015
7. Pterosaur - June 2013
6. Pterodactyl - January 2014
5. KryptoDrakon - July 2014
4. DragonWing - November 2014
3. Leviathan + KrakenFang + Cthulhu - September 2015
2. DemonWing + SauronEye + Baphomet - October 2015
1. CiakarWing - TBA

Crosshairs by Anyder
1. BalrogWing
2. NazgulFellbeast
3. WatcherEye
4. RinnegenEye
5. SharkFin
6. Mangekyo
7. Sharingan

Quote from: [FC]BoMbeR on August 19, 2015, 05:25:00 PM
Batwing is amazing. I can't aim without it anymore.
Quote from: Phobos on August 22, 2015, 04:41:03 PM
<19:33:45> "Shazam": will you be giving any better shotgun crosshairs out for people outside of invis?
<19:35:15> "Phobos": yes
<19:38:34> "Shazam": ive been using batwing for a long time
Quote from: Anyder on August 23, 2015, 08:12:36 AM
Honestly, i'd tell shazam to use batwing until he reaches 2800 elo, like i did. Personally i feel i hs much more with it
[/spoiler]
#15
Custom Animation Builder v1 by Phobos
http://www.swbfgamers.com/index.php?action=dlattach;topic=9847.0;attach=5198

Instructions
This new Custom Animation Builder by Phobos features the ability to munge up to 6 custom weapon animations! Common.lvl is not modified at all, the Side and Mission only need to be modded once. Modders can quickly swap out animation models and remunge the anims.lvl, without having to remunge their side LVL. This allows for unprecedented faster testing of several animations ingame! This is very useful for large mods such as TWD which take forever to remunge. The LUA and ODFs must be initially modified however, to support these new animation banks. Details are explained below for building the new animations and incorporating them into your mods.

1) To start, extract this tool to C:\BFBuilder. Now select the MSH you want to use from the SWBF2SoldierAnimationBank folder, which contains all SWBF2 animation models. Some of these always crash in SWBF1, such as the Acklay and Greivous. The following animations work well in BF1 as discovered by Phobos and Sereja, and are included by default in the Animations subfolders:
Cannon "Side Slash" = dooku_sabre_stand_attack1b_full
Cannon3 "Dual Bladed Attack" = maul_sabre_stand_dashattack_full
Gam "Zombie Bite" = sidious_sabre_stand_useforce_full
Gam3 "Zombie Swipe" = wampa_sabre_stand_dashattack_full
Tool "Overhead Swing" = vader_sabre_stand_attack1c_full
Tool3 "Smuggler Pistol" = hansolo_pistol_stand_shoot

2) Open CANNON folder and copy 2 MSH files here that you want to use. Name the primary animation human_lascannon_stand_shoot.msh and the secondary human_lascannon_stand_shoot3.msh
CustomAnimBuilder_v1\CustomAnimationSource\Animations\cannon

3) Repeat the copy process for GAM folder. Name them human_gam_stand_shoot.msh and human_gam_stand_shoot3.msh
CustomAnimBuilder_v1\CustomAnimationSource\Animations\gam

4) Repeat the copy process for TOOL folder. Name them human_tool_stand_shoot.msh and human_tool_stand_shoot3.msh
CustomAnimBuilder_v1\CustomAnimationSource\Animations\tool

5) Once all the MSH files are in place, all you do is run the CustomAnimationMunger.bat
This will munge into the animations into 3 ZAABIN and 3 ZAFBIN files. Next, these files are automatically munged into the new anims.lvl, which is then automatically copied to the required folder after munging
C:\Program Files (x86)\LucasArts\Star Wars Battlefront\GameData\Data\_LVL_PC\SIDE

6) Now all you have to do is replace the MSH files as needed, remunge, and restart the mission. New animations can be munged on the fly and tested much faster using this method. All steps after this only need to be applied once, to the Side REQ/ODFs and Mission LUA.

7) Edit the Mission LUA to call on 3 new units ingame, which are referred to as Animation Dummies. These call the custom animations into the game memory. I have chosen to name the dummies based on the animation bank they use for simplicity. The LUA only has to reference these units as part of a native faction, the dummy units should not actually spawn in game. Here is the LUA code to add for this to work
--  Team 3 Stats
AddUnitClass(3, "twd_inf_zombie_flesheater",5)
    AddUnitClass(3, "twd_inf_anim_cannon",0) -- keep these at 0
    AddUnitClass(3, "twd_inf_anim_gam",0)
    AddUnitClass(3, "twd_inf_anim_tool",0)
SetUnitCount(3, 5)
SetTeamAsEnemy(3,DEF)
SetTeamAsFriend(3,ATT)
    SetTeamAsEnemy(DEF,3)
    SetTeamAsFriend(ATT,3)   

   
8) Before any of the SIDE lvl are called upon, directly after the SOUND section of the mission LUA, you must also add this line ReadDataFile("SIDE\\anims.lvl")
-- SOUND
ReadDataFile("sound\\bes.lvl;bes2gcw");
ReadDataFile("ZOM\\029.lvl;029gcw");
ReadDataFile("ZOM\\zombie.lvl", "zombie");

ReadDataFile("SIDE\\anims.lvl")

-- SIDE
ReadDataFile("ZOM\\TWD.lvl",
"twd_inf_basic");


9) Now you edit the Side REQ and add the 3 Animation Dummies. Here is an example REQ file
ucft
{
REQN
{
"class"
"twd_inf_anim_cannon"
"twd_inf_anim_gam"
"twd_inf_anim_tool"
"twd_inf_human_abraham"
"twd_inf_human_andrea"
"twd_inf_human_bob"


10A) Now you will create the dummy ODFs. Fortunately for you I have created them already, just copy/paste and rename them as referenced in the Mission LUA and Side REQ.
10B) Specify any existing Unit Model for GeometryName and GeometryLowRes in your MSH folder. Ghoul is the model I used.
10C) Also change the WeaponName1 value to any existing weapon in your ODF folder.
10D) The example is for twd_inf_anim_cannon.odf, change the 4 lines for Animation and Skeleton values to GAM and TOOL for the other two dummy ODFs.
[GameObjectClass]
ClassLabel = "soldier"
GeometryName = "Ghoul.msh"

[Properties]
FootWaterSplashEffect = "watersplash_sm"
WaterSplashEffect = "watersplash_md"
WakeWaterSplashEffect = "watersplash_wade"
UnitType = "assault"
IconTexture = "all_soldier_icon"
MapTexture = "troop_icon"
MapScale = 1.6
GeometryName = "Ghoul"
//AnimationName = "all_inf_snowtrooper"
AnimationName = "cannon"
AnimationLowRes = "cannon"
SkeletonName            = "cannon"
SkeletonLowRes          = "cannon"
FirstPerson = "all\alltroop;all_1st_trooper"
FirstPersonFOV = "70"
ThirdPersonFOV = "65"
GeometryLowRes = "Ghoul_low1"
CapturePosts = 0
CAMERASECTION = "STAND"
EyePointOffset = "0.0 1.8 0.0"
TrackCenter = "0.0 1.8 0.0
TrackOffset = "0.0 0.0 3.5"
TiltValue = "5.0"
CAMERASECTION = "STANDZOOM"
EyePointOffset = "0.0 1.8 0.0"
TrackCenter = "0.0 1.8 0.0
TrackOffset = "0.4 0.05 2.8"
TiltValue = "3.5"
CAMERASECTION = "CROUCH"
EyePointOffset = "0.0 1.3 0.0"
TrackCenter = "0.0 1.3 0.0
TrackOffset = "0.0 0.15 3.5"
TiltValue = "5.0"
CAMERASECTION = "CROUCHZOOM"
EyePointOffset = "0.0 1.3 0.0"
TrackCenter = "0.0 1.3 0.0
TrackOffset = "0.4 0.2 2.8"
TiltValue = "3.5"
CAMERASECTION = "PRONE"
EyePointOffset = "0.0 0.5 0.0"
TrackCenter = "0.0 0.5 0.0"
TrackOffset = "0.0 0.0 3.0"
TiltValue = "5.0"
CAMERASECTION = "PRONEZOOM"
EyePointOffset = "0.0 0.5 0.0"
TrackCenter = "0.0 0.5 0.0"
TrackOffset = "0.4 0.2 2.8"
TiltValue = "3.5"
AimValue = "1.0"
HealthType = "person"
MaxHealth = 1000.0
NoEnterVehicles = 1
Acceleraton = 35.0
MaxSpeed = 3.5
MaxStrafeSpeed = 2.25
MaxTurnSpeed = 2.0
ScanningRange = "50000.0"
TransmitRange = "50000.0"
WeaponName1 = "twd_weap_inf_zombiemelee2"
WeaponAmmo1 = 0
AimFactorPostureSpecial = 50
AimFactorPostureStand = 100
AimFactorPostureCrouch = 140
AimFactorPostureProne = 160
AimFactorStrafe = 60
AimFactorMove = 70
AISizeType = "SOLDIER"


11) There are 3 primary and 3 secondary animations that can be used, for banks CANNON, GAM, and TOOL. Weapons that are ClassLabel=Melee only support primary animations. Weapons that are ClassLabel=Cannon, Dispenser, & Grenade support primary and secondary anims. AnimationBank specifies the custom animation to use. FireAnim = 2 will call upon the secondary animation, but unfortunately this property is not supported for the melee classlabel. You must now assign the animation banks to each weapon ODF as specified. When all of this is finished, munge your mission, anims, and side LVLs. You won't have to repeate steps 6-11 if followed correctly, unless you wish to add more weapons or change the assigned animations.

Example of a functional Melee ODF using Primary Animation
[WeaponClass]
ClassLabel          = "melee"

[Properties]
IconTexture     = "hud_knife_icon"
GeometryName        = "MonkSpade"
AnimationBank       = "tool" //overhead swing
CanDeflect = 0


Example of a functional Pistol ODF using Secondary Animation
[WeaponClass]
ClassLabel = "cannon"

[Properties]
AnimationBank = "cannon" // not to be confused with classlabel cannon!
FireAnim            = "2" // calls on human_lascannon_stand_shoot3
GeometryName = "coltrevolver"


Conclusion
There you have it, a builder and tutorial for everything needed to add custom weapon animations to your mods! You can improve these tools as needed but please retain the original readme and credits. If you have further questions or get stuck you can post on the thread for help. Also, if you find any animations that resemble a two-handed Scythe Sweep or a Spear Stab / Punch, please let me know.
       
Additional Information
http://www.swbfgamers.com/index.php?topic=8448
http://www.swbfgamers.com/index.php?topic=8089

Credits
Phobos - Custom Animation Builder, Batch Scripting, Discovering Animation Dummies & LasCannon Bank
MileHighGuy/Ginev - Yoda Animation Munger, Tutorials
Sereja - Tutorials, Helping Discover Custom Animations
Psych0fred - Assets, Mod Tools

Quote-----Bf1_yoda_v2_milehighguy readme-----

yoda bf1 version

my last link went down so heres a new one. it has bf2 animations by replacement of the gammorean's animations

there can only be 1 set of gamorean animations per map, i think.

I could not get his low res animation to stop stretching so i just used the high res.

I have included the unmunged animations so you can see how i did it.
i think the only way to get custom animations without modifying the common lvl is by using "gam" in the weapon and the new animation in the soldier odf.

credit me if you use.

credits:

pandemic/lucasarts: original art/odfs
#16
Here is the download for BattleBelk's custom resolution launcher
http://www.swbfgamers.com/index.php?topic=2806

Poll Options (blue resolutions are supported ingame by default)
800x600
1024x768
1152x864
1280x960
1280x1024

1366x768
1600x1200
1680x1050
1920x1080
Other Resolution

I prefer 1920x1080 since that is my monitor's native resolution.
#17
https://www.nasa.gov/press-release/nasa-confirms-evidence-that-liquid-water-flows-on-today-s-mars

QuoteNew findings from NASA's Mars Reconnaissance Orbiter (MRO) provide the strongest evidence yet that liquid water flows intermittently on present-day Mars. Using an imaging spectrometer on MRO, researchers detected signatures of hydrated minerals on slopes where mysterious streaks are seen on the Red Planet. These darkish streaks appear to ebb and flow over time. They darken and appear to flow down steep slopes during warm seasons, and then fade in cooler seasons. They appear in several locations on Mars when temperatures are above minus 10 degrees Fahrenheit (minus 23 Celsius), and disappear at colder times.

"It took multiple spacecraft over several years to solve this mystery, and now we know there is liquid water on the surface of this cold, desert planet," said Michael Meyer, lead scientist for NASA's Mars Exploration Program at the agency's headquarters in Washington. "It seems that the more we study Mars, the more we learn how life could be supported and where there are resources to support life in the future."
#18
Requests / [CLOSED] Attach Backpack Request
September 27, 2015, 08:37:15 AM
Could someone please attach the backpack to Tyreese model using XSI or kitbash? There is too much of a gap when I tried attaching it through ODF.
#19
I've developed an LUA script mod for common.lvl which lets players host servers at TPS settings above 30. Now you can host MP or LAN servers at 40, 50, 60, 90, or 120 TPS! The script can be customized as needed for additional settings. Attached the LUA and a preview video to this post.
Enjoy hosting at higher framerates! :cheers:

Simply munge this script into your common.lvl (builders can be downloaded HERE and restart Battlefront.exe



-- Online options
---- Modified by Phobos for increased hosting TPS options. Added 40, 50, 60, 90, and 120 as options. It is not recommended to host over 40-50 TPS for most servers. Do not use /noframelock if you want FPS to be the same as your TPS. Higher TPS also means that weapons can be switched faster.
ifs_opt_mp_vbutton_layout = {
yHeight = 50,
ySpacing  = 0,
width = 310,
font = "gamefont_medium",
-- RightJustify = 1,
buttonlist = {
-- Title is for the left column, string the right-hand option
{ tag = "appear",    title = "ifs.onlineopt.appear", string = "ifs.onlineopt.online" },
{ tag = "voicemask", title = "ifs.onlineopt.voicemask", string = "common.no" },
{ tag = "voicevol",  title = "ifs.onlineopt.voicetotvvolume", string = "10" },
{ tag = "players", title = "ifs.onlineopt.hostbandwidth", string = "128k" },
{ tag = "turns", title = "ifs.onlineopt.tps", string = "20" },
{ tag = "icon", title = "ifs.onlineopt.icon", string = "common.off" },   -- display network performance icon
{ tag = "allregions", title = "ifs.onlineopt.allregions", string = "common.yes" },
{ tag = "prompt",  title = "ifs.onlineopt.autologin", string = "" },
{ tag = "voicerecord",   title = "ifs.onlineopt.voicerecordvol", string = "10" },
{ tag = "voiceplayback", title = "ifs.onlineopt.voiceplaybackvol", string = "10" },
{ tag = "voiceenable",   title = "ifs.onlineopt.voiceenable", string = "common.off" },
-- Delete these before we go live
-- { tag = "journal",   title = "common.mp.journal", string = "common.ok", },
},
nocreatebackground = 1,
}

function ifs_mp_opt_fnBadHostPopupDone(bResult)
local this = ifs_opt_mp

IFObj_fnSetVis(this.buttons, 1)
IFObj_fnSetVis(this.buttonlabels, 1)

if(bResult) then
ifs_opt_mp_SaveAndPop()
end
end

-- Read current options, adjust text to fit
function ifs_opt_mp_fnUpdateStrings(this)
this.bAppearOffline,this.bVoiceMask,this.iTVVoiceVol,this.iVoiceRecordVol,this.iVoicePlayVol,this.iNumPlayers,this.iTurnsPerSecond,this.icon,this.bAllRegions = ScriptCB_GetOnlineOpts()

if(this.bAppearOffline) then
RoundIFButtonLabel_fnSetString(this.buttons.appear,"ifs.onlineopt.offline")
else
RoundIFButtonLabel_fnSetString(this.buttons.appear,"ifs.onlineopt.online")
end

if(this.bVoiceMask) then
RoundIFButtonLabel_fnSetString(this.buttons.voicemask,"common.yes")
else
RoundIFButtonLabel_fnSetString(this.buttons.voicemask,"common.no")
end
   
if(this.bAllRegions) then
RoundIFButtonLabel_fnSetString(this.buttons.allregions,"common.yes")
else
RoundIFButtonLabel_fnSetString(this.buttons.allregions,"common.no")
end

if (ScriptCB_GetVoiceEnable()) then
        RoundIFButtonLabel_fnSetString(this.buttons.voiceenable,"common.on")
else
        RoundIFButtonLabel_fnSetString(this.buttons.voiceenable,"common.off")
end

--RoundIFButtonLabel_fnSetString(this.buttons.voicevol,format("%d",this.iTVVoiceVol))
    if (this.iTVVoiceVol == 0) then
        RoundIFButtonLabel_fnSetString(this.buttons.voicevol,"common.off")
    else
        RoundIFButtonLabel_fnSetString(this.buttons.voicevol,"common.on")
    end
    RoundIFButtonLabel_fnSetString(this.buttons.voicerecord,format("%d",this.iVoiceRecordVol))
    RoundIFButtonLabel_fnSetString(this.buttons.voiceplayback,format("%d",this.iVoicePlayVol))
   
local NewStr = ""

-- NewStr = ScriptCB_usprintf("ifs.mp.createopts.maxplayers",
if(gPlatformStr == "XBox") then
if(this.iNumPlayers<1) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"ifs.onlineopt.bandwidth1")
elseif(this.iNumPlayers<2) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"ifs.onlineopt.bandwidth2")
elseif(this.iNumPlayers<3) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"ifs.onlineopt.bandwidth3")
elseif(this.iNumPlayers<4) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"ifs.onlineopt.bandwidth4")
elseif(this.iNumPlayers<5) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"ifs.onlineopt.bandwidth5")
else
RoundIFButtonLabel_fnSetString(this.buttons.players,"ifs.onlineopt.bandwidth6")
end
else
if(this.iNumPlayers<1) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"128k")
elseif(this.iNumPlayers<2) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"256k")
elseif(this.iNumPlayers<3) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"384k")
elseif(this.iNumPlayers<4) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"512k")
elseif(this.iNumPlayers<5) then
RoundIFButtonLabel_fnSetString(this.buttons.players,"768k")
else
RoundIFButtonLabel_fnSetString(this.buttons.players,"1M+")
end
end

NewStr = ScriptCB_usprintf("ifs.onlineopt.hostbandwidth", ScriptCB_tounicode(""))
IFText_fnSetUString(this.buttonlabels.players, NewStr)

if (this.iTurnsPerSecond == 30) then
RoundIFButtonLabel_fnSetString(this.buttons.turns,"30")
elseif (this.iTurnsPerSecond == 15) then
RoundIFButtonLabel_fnSetString(this.buttons.turns, "15")
    elseif (this.iTurnsPerSecond == 40) then
        RoundIFButtonLabel_fnSetString(this.buttons.turns, "40")
elseif (this.iTurnsPerSecond == 50) then
        RoundIFButtonLabel_fnSetString(this.buttons.turns, "50")
    elseif (this.iTurnsPerSecond == 60) then
        RoundIFButtonLabel_fnSetString(this.buttons.turns, "60")
    elseif (this.iTurnsPerSecond == 90) then
        RoundIFButtonLabel_fnSetString(this.buttons.turns, "90")
    elseif (this.iTurnsPerSecond == 120) then
        RoundIFButtonLabel_fnSetString(this.buttons.turns, "120")
    else
this.iTurnsPerSecond = 20
RoundIFButtonLabel_fnSetString(this.buttons.turns, "20")
end

if( this.icon == 1 ) then
RoundIFButtonLabel_fnSetString(this.buttons.icon,"common.on")
else
RoundIFButtonLabel_fnSetString(this.buttons.icon,"common.off")
end

this.NickStr,this.EmailStr,this.PasswordStr,this.iSaveType,this.iPromptType = ScriptCB_GetGSProfileInfo()
print("this.iPromptType = ", this.iPromptType)

if(this.iPromptType == 0) then
RoundIFButtonLabel_fnSetString(this.buttons.prompt,"ifs.gsprofile.prompt")
elseif (this.iPromptType == 1) then
RoundIFButtonLabel_fnSetString(this.buttons.prompt,"common.always")
else
RoundIFButtonLabel_fnSetString(this.buttons.prompt,"common.never")
end

end

ifs_opt_mp = NewIFShellScreen {

nologo = 1,
movieIntro      = nil, -- played before the screen is displayed
movieBackground = nil, -- played while the screen is displayed
bNohelptext_backPC = 1,
bg_texture = "iface_bgmeta_space",

-- display network performance icon
icon = 0,
bAllRegions = true,
iNumPlayers = 0,
iTurnsPerSecond = 20,

title = NewIFText {
string = "ifs.onlineopt.title",
font = "gamefont_large",
textw = 460,
y = 0,
ScreenRelativeX = 0.5,
ScreenRelativeY = 0.0,
inert = 1,
nocreatebackground = 1,
},

buttonlabels = NewIFContainer {
ScreenRelativeX = 0.7,
ScreenRelativeY = 0.5,
x = -5,
y = 20, -- go down a little to make space for title up top
},

buttons = NewIFContainer {
ScreenRelativeX = 0.7,
ScreenRelativeY = 0.5,
x = 5,
y = 20, -- go down a little to make space for title up top
},

-- Do any adjustments necessary on entering this screen
Enter = function(this, bFwd)
ScriptCB_MarkCurrentProfile()
this.bReloadProfile = 1
gIFShellScreenTemplate_fnEnter(this, bFwd) -- call default enter function

if(this.PopOnEnter) then
this.PopOnEnter = nil
ScriptCB_PopScreen()
end

-- Added chunk for error handling...
if(not bFwd) then
local ErrorLevel,ErrorMessage = ScriptCB_GetError()
if(ErrorLevel >= 6) then -- session or login error, must keep going further
ScriptCB_PopScreen()
end
end

-- enable local voice echo for test / auditioning
        --if (gPlatformStr ~= "PC") then
    ScriptCB_SetVoiceLocalEchoEnable(1)
        --end

-- Disable presence button if not on XLive
local bIsXLive
        local bOnXbox
        if (gPlatformStr == "XBox") then
            bOnXbox = 1
        else
            bOnXbox = nil
        end
       
if(gOnlineServiceStr ~= "XLive") then
bIsXLive = nil
            if (bOnXbox) then
                SetCurButton("voicemask")
            else
    SetCurButton("voicerecord")
            end
else
bIsXLive = 1
SetCurButton("appear")
end

-- ShowHideVerticalButtons|Text will break some of the formatting, so
-- behave a lot like it. :(
this.buttons.appear.hidden = not bIsXLive
this.buttonlabels.appear.hidden = not bIsXLive
IFObj_fnSetVis(this.buttons.appear, bIsXLive)
IFObj_fnSetVis(this.buttonlabels.appear, bIsXLive)

        IFObj_fnSetVis(this.buttons.voicemask, bOnXbox)
        IFObj_fnSetVis(this.buttonlabels.voicemask, bOnXbox)
        IFObj_fnSetVis(this.buttons.voicevol, bOnXbox)
        IFObj_fnSetVis(this.buttonlabels.voicevol, bOnXbox)

        bOnXbox = bOnXbox or (gPlatformStr == "PC")
        IFObj_fnSetVis(this.buttons.voicerecord, not bOnXbox)
        IFObj_fnSetVis(this.buttonlabels.voicerecord, not bOnXbox)
        IFObj_fnSetVis(this.buttons.voiceplayback, not bOnXbox)
        IFObj_fnSetVis(this.buttonlabels.voiceplayback, not bOnXbox)
       
        local voiceEnableOpt = nil -- ScriptCB_GetShellActive() and (gPlatformStr == "PC")
        IFObj_fnSetVis(this.buttons.voiceenable, voiceEnableOpt)
        IFObj_fnSetVis(this.buttonlabels.voiceenable, voiceEnableOpt)

-- Repaint screen w/ latest selections
ifs_opt_mp_fnUpdateStrings(this)       
end,
   
    Exit = function(this, bFwd)
        --if (gPlatformStr ~= "PC") then
            -- disable local voice echo
            ScriptCB_SetVoiceLocalEchoEnable(0)
        --end
        if( this.bReloadProfile ) then
ScriptCB_ReloadMarkedProfile()
        end
if(gCurHiliteButton) then
IFButton_fnSelect(gCurHiliteButton,nil)
end
    end,

Update = function(this, fDt)
-- Call default base class's update function (make button bounce)
gIFShellScreenTemplate_fnUpdate(this,fDt)
--        ifs_opt_mp_fnUpdateStrings(this)

-- Lobby might be active (if we entered thru it). Update it.
ScriptCB_UpdateLobby(nil)
end,

Input_Accept = function(this)
-- If base class handled this work, then we're done
if(gShellScreen_fnDefaultInputAccept(this)) then
return
end



ifelm_shellscreen_fnPlaySound(this.acceptSound)
if (this.CurButton == "journal") then
ScriptCB_EnableJournal()

-- Chunk disabled NM 7/21/04 - don't toggle options again while accepting them
-- elseif (this.CurButton == "appear") then
-- this.bAppearOffline = not this.bAppearOffline
-- elseif (this.CurButton == "voicemask") then
-- this.bVoiceMask = not this.bVoiceMask
end


if(this.CurButton ~= "_ok" ) then
this:Input_GeneralRight()
return
end
ScriptCB_SetOnlineOpts(this.bAppearOffline,this.bVoiceMask,this.iTVVoiceVol, this.iVoiceRecordVol, this.iVoicePlayVol, this.iNumPlayers, this.iTurnsPerSecond, this.icon,this.bAllRegions)
-- Repaint screen w/ latest selections
ifs_opt_mp_fnUpdateStrings(this)

-- don't reload profile when we leave
this.bReloadProfile = nil
       
--        ScriptCB_PopScreen()
if(gPlatformStr == "XBox") then
if(not ScriptCB_CanSupportMaxPlayers(this.iNumPlayers)) then
IFObj_fnSetVis(this.buttons, nil)
IFObj_fnSetVis(this.buttonlabels, nil)

Popup_AB.CurButton = "no" -- default
Popup_AB.fnDone = ifs_mp_opt_fnBadHostPopupDone
IFText_fnSetString(Popup_AB.title,"ifs.mp.badhost")
Popup_AB:fnActivate(1)
else
ifs_opt_mp_SaveAndPop()
end
else
ifs_opt_mp_SaveAndPop()
end
end,

Input_Back = function(this)
if(gPlatformStr == "PC") then
ScriptCB_PopScreen()
elseif(gPlatformStr == "XBox") then
if(not ScriptCB_CanSupportMaxPlayers(this.iNumPlayers)) then
IFObj_fnSetVis(this.buttons, nil)
IFObj_fnSetVis(this.buttonlabels, nil)

Popup_AB.CurButton = "no" -- default
Popup_AB.fnDone = ifs_mp_opt_fnBadHostPopupDone
IFText_fnSetString(Popup_AB.title,"ifs.mp.badhost")
Popup_AB:fnActivate(1)
else
ifs_opt_mp_SaveAndPop()
end
else
ifs_opt_mp_SaveAndPop()
end
end,

Input_Misc  = function(this)
print("input Misc")
this:Input_GeneralLeft()
end,
Input_GeneralLeft = function(this)
if (this.CurButton == "appear") then
this.bAppearOffline = not this.bAppearOffline
ifelm_shellscreen_fnPlaySound(this.acceptSound)
elseif (this.CurButton == "voicemask") then
this.bVoiceMask = not this.bVoiceMask
ifelm_shellscreen_fnPlaySound(this.acceptSound)
elseif (this.CurButton == "allregions") then
this.bAllRegions = not this.bAllRegions
ifelm_shellscreen_fnPlaySound(this.acceptSound)
elseif (this.CurButton == "voicevol") then
--this.iTVVoiceVol = max(0, this.iTVVoiceVol - 1)
            this.iTVVoiceVol = 0
ifelm_shellscreen_fnPlaySound(this.acceptSound)
elseif (this.CurButton == "voicerecord") then
this.iVoiceRecordVol = max(0, this.iVoiceRecordVol - 1)
elseif (this.CurButton == "voiceplayback") then
this.iVoicePlayVol = max(0, this.iVoicePlayVol - 1)
elseif (this.CurButton == "players") then
if(this.iNumPlayers<2) then
this.iNumPlayers=0
elseif(this.iNumPlayers<3) then
this.iNumPlayers=1
elseif(this.iNumPlayers<4) then
this.iNumPlayers=2
elseif(this.iNumPlayers<5) then
this.iNumPlayers=3
elseif(this.iNumPlayers<6) then
this.iNumPlayers=4
else
this.iNumPlayers=5
end
elseif (this.CurButton == "turns") then
if (this.iTurnsPerSecond == 120) then
this.iTurnsPerSecond = 90
elseif (this.iTurnsPerSecond == 90) then
this.iTurnsPerSecond = 60
            elseif (this.iTurnsPerSecond == 60) then
this.iTurnsPerSecond = 50
            elseif (this.iTurnsPerSecond == 50) then
this.iTurnsPerSecond = 40
            elseif (this.iTurnsPerSecond == 40) then
this.iTurnsPerSecond = 30
            elseif (this.iTurnsPerSecond == 30) then
this.iTurnsPerSecond = 20
            elseif (this.iTurnsPerSecond == 20) then
this.iTurnsPerSecond = 15
end

elseif (this.CurButton == "prompt") then
this.NickStr,this.EmailStr,this.PasswordStr,this.iSaveType,this.iPromptType = ScriptCB_GetGSProfileInfo()

print("Change prompt, pre = ", this.iPromptType)

ifelm_shellscreen_fnPlaySound(this.acceptSound)
this.iPromptType = this.iPromptType + 1
if(this.iPromptType > 2) then
this.iPromptType = 0
end

-- Only show 'always' if the parameters look valid
if((this.iPromptType == 1) and ifs_mpgs_login_fnCheckString) then
if((strlen(this.NickStr) < 1) or
(strlen(this.EmailStr) < 1) or
(strlen(this.PasswordStr) < 1) or
(not ifs_mpgs_login_fnCheckString(this.NickStr)) or
(not ifs_mpgs_login_fnCheckString(this.EmailStr)) or
(not ifs_mpgs_login_fnCheckString(this.PasswordStr)) or
(not ifs_mpgs_login_fnCheckString2(this.NickStr)) or
(not ifs_mpgs_login_fnCheckString2(this.EmailStr)) or
(not ifs_mpgs_login_fnCheckString2(this.PasswordStr))) then
this.iPromptType = 2 -- skip to never
end
end

print("Change prompt, post = ", this.iPromptType)

ScriptCB_SetGSProfileInfo(this.NickStr,this.EmailStr,this.PasswordStr,this.iSaveType,this.iPromptType)
elseif (this.CurButton == "icon") then
this.icon = 1 - this.icon
elseif (this.CurButton == "voiceenable") then
ScriptCB_VoiceEnable(not ScriptCB_GetVoiceEnable())
end

ScriptCB_SetOnlineOpts(this.bAppearOffline,this.bVoiceMask,this.iTVVoiceVol, this.iVoiceRecordVol, this.iVoicePlayVol, this.iNumPlayers, this.iTurnsPerSecond, this.icon, this.bAllRegions)
-- Repaint screen w/ latest selections
ifs_opt_mp_fnUpdateStrings(this)
end,

Input_GeneralRight = function(this)
if (this.CurButton == "appear") then
this.bAppearOffline = not this.bAppearOffline
ifelm_shellscreen_fnPlaySound(this.acceptSound)
elseif (this.CurButton == "voicemask") then
this.bVoiceMask = not this.bVoiceMask
ifelm_shellscreen_fnPlaySound(this.acceptSound)
elseif (this.CurButton == "allregions") then
this.bAllRegions = not this.bAllRegions
ifelm_shellscreen_fnPlaySound(this.acceptSound)
elseif (this.CurButton == "voicevol") then
--this.iTVVoiceVol = min(10, this.iTVVoiceVol + 1)
            this.iTVVoiceVol = 10
ifelm_shellscreen_fnPlaySound(this.acceptSound)
elseif (this.CurButton == "voicerecord") then
this.iVoiceRecordVol = min(10, this.iVoiceRecordVol + 1)
elseif (this.CurButton == "voiceplayback") then
this.iVoicePlayVol = min(10, this.iVoicePlayVol + 1)
elseif (this.CurButton == "players") then
if(this.iNumPlayers<1) then
this.iNumPlayers=1
elseif(this.iNumPlayers<2) then
this.iNumPlayers=2
elseif(this.iNumPlayers<3) then
this.iNumPlayers=3
elseif(this.iNumPlayers<4) then
this.iNumPlayers=4
elseif(this.iNumPlayers<5) then
this.iNumPlayers=5
else
this.iNumPlayers=6
end
elseif (this.CurButton == "turns") then
if (this.iTurnsPerSecond == 30) then
this.iTurnsPerSecond = 40
elseif (this.iTurnsPerSecond == 20) then
this.iTurnsPerSecond = 30
            elseif (this.iTurnsPerSecond == 40) then
this.iTurnsPerSecond = 50
            elseif (this.iTurnsPerSecond == 50) then
this.iTurnsPerSecond = 60
            elseif (this.iTurnsPerSecond == 60) then
this.iTurnsPerSecond = 90
            elseif (this.iTurnsPerSecond == 90) then
this.iTurnsPerSecond = 120
            elseif (this.iTurnsPerSecond == 15) then
this.iTurnsPerSecond = 20
end
elseif (this.CurButton == "prompt") then
this.NickStr,this.EmailStr,this.PasswordStr,this.iSaveType,this.iPromptType = ScriptCB_GetGSProfileInfo()

print("Change prompt, pre = ", this.iPromptType)

ifelm_shellscreen_fnPlaySound(this.acceptSound)
this.iPromptType = this.iPromptType + 1
if(this.iPromptType > 2) then
this.iPromptType = 0
end

-- Only show 'always' if the parameters look valid
if((this.iPromptType == 1) and ifs_mpgs_login_fnCheckString) then
if((strlen(this.NickStr) < 1) or
(strlen(this.EmailStr) < 1) or
(strlen(this.PasswordStr) < 1) or
(not ifs_mpgs_login_fnCheckString(this.NickStr)) or
(not ifs_mpgs_login_fnCheckString(this.EmailStr)) or
(not ifs_mpgs_login_fnCheckString(this.PasswordStr)) or
(not ifs_mpgs_login_fnCheckString2(this.NickStr)) or
(not ifs_mpgs_login_fnCheckString2(this.EmailStr)) or
(not ifs_mpgs_login_fnCheckString2(this.PasswordStr))) then
this.iPromptType = 2 -- skip to never
end
end

print("Change prompt, post = ", this.iPromptType)

ScriptCB_SetGSProfileInfo(this.NickStr,this.EmailStr,this.PasswordStr,this.iSaveType,this.iPromptType)
elseif (this.CurButton == "icon") then
this.icon = 1 - this.icon
elseif (this.CurButton == "voiceenable") then
ScriptCB_VoiceEnable(not ScriptCB_GetVoiceEnable())
end

ScriptCB_SetOnlineOpts(this.bAppearOffline,this.bVoiceMask,this.iTVVoiceVol, this.iVoiceRecordVol, this.iVoicePlayVol, this.iNumPlayers, this.iTurnsPerSecond, this.icon, this.bAllRegions)
-- Repaint screen w/ latest selections
ifs_opt_mp_fnUpdateStrings(this)
end,

}


----------------------------------------------------------------------------------------
-- when we're done with this screen, save any dirty profiles
----------------------------------------------------------------------------------------

function ifs_opt_mp_SaveAndPop()
print("ifs_opt_mp_SaveAndPop")
local this = ifs_opt_mp

-- if we're in the game, don't try to save
if(not ifs_saveop) then
ScriptCB_PopScreen()
return
end

ifs_saveop.doOp = "SaveProfile"
ifs_saveop.OnSuccess = ifs_opt_mp_SaveProfile1Success
ifs_saveop.OnCancel = ifs_opt_mp_SaveProfile1Cancel
ifs_saveop.saveName = ScriptCB_GetProfileName(1)
ifs_saveop.saveProfileNum = 1
ifs_movietrans_PushScreen(ifs_saveop)
end

function ifs_opt_mp_SaveProfile1Success()
print("ifs_opt_mp_SaveProfile1Success")
-- exit once we reenter
ifs_opt_mp.PopOnEnter = 1
ScriptCB_PopScreen()
end

function ifs_opt_mp_SaveProfile1Cancel()
print("ifs_opt_mp_SaveProfile1Cancel")
-- exit once we reenter
ifs_opt_mp.PopOnEnter = 1
ScriptCB_PopScreen()
end

----------------------------------------------------------------------------------------
-- done profile save
----------------------------------------------------------------------------------------


function ifs_opt_mp_fnBuildScreen(this)
local w
local h
w,h = ScriptCB_GetSafeScreenInfo()
ifs_opt_mp_vbutton_layout.width = w * this.buttonlabels.ScreenRelativeX

AddVerticalText(this.buttonlabels,ifs_opt_mp_vbutton_layout)

local k,v
for k,v in this.buttonlabels do
if(type(v) == "table") then
v.x      = -(v.textw)
v.halign = "right"
end
end

ifs_opt_mp_vbutton_layout.width = w * (1.0 - this.buttonlabels.ScreenRelativeX)

this.CurButton = AddVerticalButtons(this.buttons,ifs_opt_mp_vbutton_layout)
this.buttons.x = 5 -- ifs_opt_mp_vbutton_layout.width * 0.25

this.Background = NewIFImage
{
ZPos = 255,
x = w/2,  --centered on the x
y = h/2, -- inertUVs = 1,
alpha = 10,
localpos_l = -w/1.5, localpos_t = -h/1.5,
localpos_r = w/1.5, localpos_b =  h/1.5,
texture = "opaque_black",
ColorR = 20, ColorG = 20, ColorB = 150, -- blue
}

local BackButtonW = 130 -- made 130 to fix 6198 on PC - NM 8/18/04
local BackButtonH = 25
this.donebutton = NewIFContainer
{
ScreenRelativeX = 1.0, -- right
ScreenRelativeY = 1.0, -- bottom
y = -15, -- just above bottom
x = -BackButtonW,
btn = NewClickableIFButton -- NewRoundIFButton
{
btnw = BackButtonW,
btnh = BackButtonH,
font = "gamefont_medium",
bg_width = BackButtonW,
tag = "_ok",
nocreatebackground=1,
}, -- end of btn
}
RoundIFButtonLabel_fnSetString(this.donebutton.btn,"common.accept")

this.cancelbutton = NewIFContainer
{
ScreenRelativeX = 0.0, -- right
ScreenRelativeY = 1.0, -- bottom
y = -15, -- just above bottom
x = BackButtonW,
btn = NewClickableIFButton -- NewRoundIFButton
{
btnw = BackButtonW,
btnh = BackButtonH,
font = "gamefont_medium",
bg_width = BackButtonW,
tag = "_back",
nocreatebackground=1,
}, -- end of btn
}
RoundIFButtonLabel_fnSetString(this.cancelbutton.btn,"common.cancel")

this.Background = NewIFImage
{
ZPos = 255,
x = w/2,  --centered on the x
y = h/2, -- inertUVs = 1,
alpha = 10,
localpos_l = -w/1.5, localpos_t = -h/1.5,
localpos_r = w/1.5, localpos_b =  h/1.5,
texture = "opaque_black",
ColorR = 20, ColorG = 20, ColorB = 150, -- blue
}
--this.Helptext_Back.helpstr.string = "common.cancel"
end

ifs_opt_mp_fnBuildScreen(ifs_opt_mp)
ifs_opt_mp_fnBuildScreen = nil
AddIFScreen(ifs_opt_mp, "ifs_opt_mp")
#20
Released Assets / AT-AT Skins
September 12, 2015, 07:29:08 AM
Here are some custom AT-AT skins that players can add to their imp.lvl

Credits
Phobos
Psych0fred