if sName == "XO":
QB.g_bAddedUIHandlers = 0
QB.BuildDialog()
# Remove the simulation menus
pMenu = pCharacter.GetMenu()
pButton = pMenu.GetButtonW(QB.g_pMissionDatabase.GetString("QuickBattle Configuration"))
if pButton: pMenu.DeleteChild(pButton)
pButton = pMenu.GetButtonW(QB.g_pMissionDatabase.GetString("Start Simulation"))
if pButton: pMenu.DeleteChild(pButton)
pButton = pMenu.GetButtonW(QB.g_pMissionDatabase.GetString("End Simulation"))
if pButton: pMenu.DeleteChild(pButton)
pButton = pMenu.GetButtonW(QB.g_pMissionDatabase.GetString("Restart Simulation"))
if pButton: pMenu.DeleteChild(pButton)
# And recreate them
QB.CreateSimulationMenus()class RandomUniformDef(ImplicitUniformDef):
def GetAllCharacters(self):
return -1
def GetUniformForCharacter(self, char, oBridgeInfo, pBridgeSet, Plug):
global dCharacters
# Pick a random uniform from the list
oPickedUniform = None
Random = lambda iMax : int(App.g_kSystemWrapper.GetRandomNumber(iMax * 1000) / 1000)
while(1):# Fake a "do while" loop
oPickedUniform = dCharacters[char][Random(len(dCharacters[char]))]
if oPickedUniform.name != "Random Uniform " + char:
break
return oPickedUniform
oRandomUniform = RandomUniformDef("Random Uniform")dDefaultTacticalUniformConfig = {
"DisplayName": "Felix",
"NIFs": ["BodyMaleL/BodyMaleL.nif", "HeadFelix/felix_head.nif"],
"Textures":["BodyMaleM/FedGold_body.tga", "HeadFelix/felix_head.tga"],
"Size": App.CharacterClass.LARGE,
"Gender": App.CharacterClass.MALE,
"RandomAnimationChance": .75,
"BlinkChance": 0.1,
"Module": __import__("Bridge.Characters.Felix"),
"BlinkStages": {"Blink0": "HeadFelix/Felix_blink1.tga",
"Blink1": "HeadFelix/Felix_blink2.tga",
"Blink2": "HeadFelix/Felix_eyes_close.tga"},
"FacialAnimation": {
"SpeakA": "HeadFelix/Felix_head_a.tga",
"SpeakE": "HeadFelix/Felix_head_e.tga",
"SpeakU": "HeadFelix/Felix_head_u.tga"},
"MenuName": "Tactical",
"NothingToAddLine": "FelixNothingToAdd",
"Custom": """pCharacter.AddAnimation("Place", "Bridge.Characters.CommonAnimations.Standing")
pCharacter.SetLocation("")
pCharacter.SetAudioMode(App.CharacterClass.CAM_EXTREMELY_VOCAL)
pCharacter.SetStanding(0)""",
"Type": BRIDGE_CREW_MEMBER,
"sCharacter": "Tactical"
}oBCDefaultFelix = CharacterDef("Default BC Uniform Tactical", dDefaultTacticalUniformConfig)oDefaultBCUniform = UniformDef("Default BC Uniform",
dict = {"Characters": {
# Bridge Crew
"Engineer": Foundation.dDefaultEngineerUniformConfig,
"Tactical": { "Object": oBCDefaultFelix,},# Test to see if the linking works...
"Helm": Foundation.dDefaultHelmUniformConfig,
"Science": Foundation.dDefaultScienceUniformConfig,
"XO": Foundation.dDefaultXOUniformConfig
}
})"XO": Foundation.dDefaultXOUniformConfigdNewSaffiUniform = {}dNewSaffiUniform.update(Foundation.dDefaultXOUniformConfig())dNewSaffiUniform["Textures"][1] = "HeadData/data_head.tga"oNewSaffiUniform = Foundation.CharacterDef("New Saffi Uniform XO", dNewSaffiUniform)import Foundation
dNewSaffiUniform = {}
dNewSaffiUniform.update(Foundation.dDefaultXOUniformConfig())
dNewSaffiUniform["Textures"][1] = "HeadData/data_head.tga"
oNewSaffiUniform = Foundation.CharacterDef("New Saffi Uniform XO", dNewSaffiUniform)import Foundation
mode = Foundation.MutatorDef("New Saffi Uniform")
<Your>import Foundation
if hasattr(Foundation, "UniformDef"):
else:
mode = Foundation.MutatorDef("New Saffi Uniform")
<Your>
import Foundation
if hasattr(Foundation, "UniformDef"):
dNewSaffiUniform = {}
dNewSaffiUniform.update(Foundation.dDefaultXOUniformConfig())
dNewSaffiUniform["Textures"][1] = "HeadData/data_head.tga"
oNewSaffiUniform = Foundation.CharacterDef("New Saffi Uniform XO", dNewSaffiUniform)
else:
mode = Foundation.MutatorDef("New Saffi Uniform")
<Your>
| Attribute: | Type of value: | Optional: | Description: |
| FullPath | 1 or 0 | Yes, defaults to 0 | If FullPath is 1, then it will expect that the nifs and textures are from the BC root, instead of the usual data/Models/Characters/(Heads/Bodies)(Detail)/ |
| DisplayName | A string (text) | Yes, it defaults to names like "Tactical" or "Helm" | It's the name of the Character that is to be displayed, for example "Felix" or "Kiska" |
| NIFs | A list (denoted with [ and ]) containing 2 strings | No | 2 strings which respectively are the body nif and the head nif, the path is influenced by FullPath |
| Textures | A list (denoted with [ and ]) containing 2 strings | No | 2 strings which respectively are the body and the head texture, the path is influenced by FullPath |
| Size | A decimal number | Yes, defaults to 0.75 | This number represents the height of a character (rather, the scale of it) |
| Gender | Either App.CharacterClass.MALE or App.CharacterClass.FEMALE | Yes, defaults to App.CharacterClass.MALE | Defines the Gender of the character, I currently don't know (or remember) the effect of it on the game |
| RandomAnimationChance | A decimal number between 0 (never) and 1 (always) | Yes, defaults to 0.75 | This number represents the chance of the character doing a random action (like pushing some buttons) |
| BlinkChance | A decimal number between 0 (never) and 1 (always) | Yes, defaults to 0.1 | This number represents the chance of the character to blink |
| Module | An imported module | Technicly no, practicly yes, more info later though | This is partly the reason why it's possible to have backwards compatible uniforms. The new uniform system still needs a character files for things like LoadSounds (and in some cases, Liu and Graff for example, Breath and some other functions), the requiredness is in case of most uniforms not existent, atleast, if you update from an existing uniform, since they already have the module part set for their respective characters. But if you want to update things like LoadSound as well, then you need to create a new module for your character (if you need to just update LoadSounds for example, contact me for a way to do this easier) |
| BlinkStages | A dictionary with spefic keys/values | Yes, defaults to an empty dictionary | If this dictionary is left empty (or there is a naming mistake) then it will cause your character not to blink. Normally, there are 3 blink stages. The naming is as following, the key is the word: "blink" with a number appended to it, the first blink stage is blink0, the second blink1, etc, etc. Now, the value is the path to the texture for that blink stage, this path is also affected by the FullPath attribute. Please try to keep it in order (as you add it) from 0 to n |
| FacialAnimation | A dictionary with spefic keys/values | Yes, defaults to an empty dictionary | If this dictionary is left empty then it will cause your character not to speak animated (the sound will play, it just won't change the textures to make it look speaking). There are just 3 possible (atleast, as far as I know it, if anyone has successfully tried otherwise, please let me know) keys, SpeakA, SpeakE and SpeakU. Their respective values are the paths to the textures, this path is affected by the FullPath attribute |
| MenuName | A string (text) | Yes, defaults to the name of the character (Tactical, Helm, etc) | This attribute holds the name of the menu that belongs to this character. It must be one found in the Bridge Menus tgl, or it will generate a None value which causes problems in the scripts. If you have a diffrently named menu for this character, then you need to use the Custom attribute to assign the correct menu to this character afterwards, but this field must be correct in the first place. |
| NothingToAddLine | String (text) | Yes, defaults to None | This attribute holds the name of the "Nothing to add" line of the character and only the standard crew have these. If it's not None, then it will get the Game database and use that to load the sound into the game. If you are basing your new uniform of the existing crew, then you don't need to worry about this attribute |
| Custom | String (text) | Yes, defaults to None | This attribute can hold custom code that needs to be run for a character. Some of the default uniforms use this to work properly (2 of them are Tactical and Engineering, those are just of the standard bridge crew, there are a couple of guest characters as well that use this). The code is in text format (to do this easy, just write your code, and put """ before and after it, and put that entire part in your dictionary, don't worry, it will work, pCharacter will be a valid variable which will hold the new character) and it will be evaluated in the code. |
| Type | One of 3 values | Yes and no | Type is one of 3 values, namely: "BRIDGE_CREW_MEMBER", "EXTRA_CREW_MEMBER" or "GUEST_CREW_MEMBER", these values are all found in Foundation and are accessed through (for example) Foundation.BRIDGE_CREW_MEMBER. The value is optional if you base your uniform through an existing uniform (through update), otherwise, it's a not optional attribute |
/\ Longest post ever made in the history of BCN/BCU. lol
Very nice work, MLeo! This mod goes WAY above what I had imagined:
Appropriate uniforms loading for each bridge. Include that (which I think you did...you wrote a lot), and I'll be happy. :D
Awesome thos are the borg models from EF right? Lol someone needs to model the BC crew as borg. Also I think there a Locutas Model for EF i'm not sure.
You should do a FC skin of Data like when he had the partial Skin on his face. That would be kinda cool.
dNewTacticalUniform = {}
dNewTacticalUniform.update(Foundation.dDefaultTacticalUniformConfig)
<Your>dNewTacticalUniform = {}
dNewTacticalUniform.update(Foundation.dDefaultTacticalUniformConfig()) #<<<< Note the () after dDefaultTacticalUniformConfig
<Your>dNewTacticalUniform = {}
Foundation.dDefaultTacticalUniformConfig.reverse_update(dNewTacticalUniform)
<Your>nice work still MLeo, this will be revolutionary.
import Foundation
o1701CUniforms = Foundation.TotalConversionUniformDef("1701-C Uniform", "1701-C", {"NIF Head Inclusion": ["Tactical", "Engineer", "XO", "Science"]})import Foundation
oAGTUniforms = Foundation.TotalConversionUniformDef("AGT Uniform", "AGT", {"NIF Head Inclusion": ["XO"]})excellent!! :)
I say closed beta, because else you might get people whine that something doesn't work and that they are really putt off by it and such.
You must copy the contents of the Bodies and Heads to the, included, corresponding directory
lol - interesting poll!
"Public or Closed Beta?"
* yes or
*no
:P
You must copy the contents of the Bodies and Heads directories to the, included, corresponding directory of the uniform[/list:u]
Well, then you have the same problem as me. Not being able to properly run SP. :(
Also, try imageshack.us for the image.
tho i havent played SP in years (literally), it seems i can run it, i just have to turn off all but a few mutators...
ya this is true... i was actually going to use a photobucket link (so you can click on the pic to enlarge), but i just uploaded the image instead...
i'll use a link from now on...
but in either event, was this the screenshot you were looking for? if not, i can grab another...
I've decided to also 2 of BlackRooks uniforms in the Beta, there have been several people (including me) that have been trying to contact him about permission. But I'm just going to put them with the beta.
You will have to download the uniforms for them anyway.
Come to think of it, I've released mutator versions of his uniforms in the past, with permission.
Also, if you are planning on releasing an uniform soon, also put your name up (atleast, if you have BP Core installed that is).
It would be a shame if there weren't any uniforms to use when this gets out, don't you think?
I'll try and get hold of him via email, if you've already got permission and there's a credit, I would think that'd be ok.
so is there anything that i should do to confirm that im a beta-tester?
if you want you can include my uniforms when they are finished :)
ah man that coool
cardies look cool, tho id suggest less colours on the face as with most male cardies, all of their facial features are the same colour
Just a thought, but would it be possible to link a bridge type to a specific uniform and/or race?
e.g
Cardy bridge - Cardie uniforms and faces
Klingon bridge - Klingon uniforms and faces
etc
Maybe have a flag that matches these up subject to availability of course?
I like the logo, is there anything he can't do ;)?
If im taking ages on a project I will post SOMETHING even if i have nothing to show yet,at least telling about what im working on currently,just so the thread doesnt leave the first page and to keep peoples hopes up.