Previous Closed Source Changelog - cortex-command-community/Cortex-Command-Community-Project GitHub Wiki
NOTE: Everything in this changelog is work done by weegee while the game was still closed source. Due to differences in versioning and process, it is separated from the main changelog, which can be found here. You can find a download link for this version of the game (B33) here.
27.01.2019
- Working Networking multiplayer implementation.
29.01.2019
- Added AudioChannels option to Settings.ini though that does not seem to actually change anything.
30.01.2019
- Build in VS 2017 with v141 toolchain is working but breaks Lua.
31.01.2019
- Lua:
ADoor:
Enum DoorState
CLOSED, 0
OPENING, 1
OPEN, 2
CLOSING, 3
Func GetDoorState
Func OpenDoor
Func CloseDoor
Func SetClosedByDefault
HDFirearm:
Prop MuzzleOffset, r/w
Prop IsAnimatedManually, r/w
HeldDevice:
Prop SharpLength, r/w
Prop SupportOffset, r/w
Func SetSupported
- INI:
HDFirearm:
IsAnimatedManually, r/w
01.02.2019
- INI merging tool to speed up loading times. See Base.rte\Tools
- Reworked loading screen to reduce loading time.
- Added an option "DisableLoadingScreen" in settings.ini to disable loading screen completely to reduce loading time (Thanks Duh102, CrazyMLC, MaximDude)
- Fixed InvincibleCrafts and ToughCrafts global scripts (Thanks 4zK)
- Lua:
ACDropShip:
Prop LeftHatch, r/o
Prop RightHatch, r/o
MovableMan:
Func FindObjectByUniqueID
02.02.2019
- Lua:
MOSRotating:
Coll Emitters
Coll Attachables
AHuman & ACrab:
Prop LimbPathPushForce, r/w
Func GetLimbPathSpeed
Func SetLimbPathSpeed
Scene:
Prop GlobalAcc, r/w
- Added Low Gravity and Faster walking global scripts.
03.02.2019
- Lua:
Attachable:
Prop InheritsRotAngle, r/w
MovableObject:
Prop GlobalAccScalar, r/w
Prop AirResistance, r/w
Prop AirThreshold, r/w
ACDropShip:
Prop MaxEngineAngle, r/w
AEmitter:
Prop FlashScale, r/w
- INI:
Attachable:
Prop InheritsRotAngle
- Added bulky drop ships global script.
- Added per-player DrawPrimitive functions allowing to draw on different player screens.
07.02.2019
- Lua:
ACDropShip:
Prop LateralControlSpeed, r/w
ACRocket:
Enum LandingGearState
RAISED, 0
LOWERED, 1
LOWERING, 2
RAISING, 3
Prop MainEngine, r/o
Prop LeftEngine, r/o
Prop RightEngine, r/o
Prop LeftThruster, r/o
Prop RightThruster, r/o
Prop GearState, r/o
Emission:
Prop ParticlesPerMinute, r/w
Prop MinVelocity, r/w
Prop MaxVelocity, r/w
Prop PushesEmitter, r/w
Prop LifeVariation, r/w
Prop BurstSize, r/w
Prop Spread, r/w
Func ResetEmissionTimers
Emitter:
Coll EmissionList
- INI:
ACDropShip:
Prop LateralControlSpeed
- Fixed a bug when AEmitter flash was drawn in the wrong position if emitter was not emitting.
10.02.2019
- You can press CTRL + ~ (ConsoleMan.ForceVisibility = true) to toggle console which does not grab input.
- Lua:
UInputMan:
Prop FlagAltState, r/o
Prop FlagShiftState, r/o
Prop FlagCtrlState, r/o
ConsoleMan:
Prop ForceVisibility, r/w
MovableObject:
Prop IgnoreTerrain, r/w
11.02.2019
- Added ping display to both client and server. Press ALT, CTRL or SHIFT in client to see ping.
13.02.2019
- Lua:
PresetMan:
Func GetLoadout
14.02.2019
- Lua:
Scene:
Coll Deployments
Deployment:
Func CreateDeployedActor
Func CreateDeployedObject
Func GetLoadoutName
Prop SpawnRadius, r/o
Prop ID, r/o
Prop HFlipped, r/o
20.02.2019
- Implemented mass and passengers count constraints for crafts.
- Added global scripts to disable buy menu constraints.
- Lua:
BuyMenuGUI:
Prop EnforceMaxPassengersConstraint, r/w
Prop EnforceMaxMassConstraint, r/w
SceneObject:
Func SetGoldValue
Attachable:
Func GetParent
21.02.2019
- Added binding UI for weapon pick, drop, next, prev and reload for "keyboard only" and "keyboard" control schemes.
03.03.2019
- Lua:
AudioMan:
Func PlaySound
- Bullets traveled more than LethalRange (if LethalRange > 0) distance won't hit target as if they missed it.
- MOSRotating now respects Attachable.DrawAfterParent when drawing generic attachments.
04.03.2019
- Lua:
MovableObject:
Prop HitWhatMOID, r/o
Prop HitWhatTerrMaterial, r/o
Prop HitWhatParticleUniqueID, r/o
MOSRotating:
Prop TravelImpulse, r/o
Actor:
Prop ImpulseDamageThreshold, r/w
- Added Global scripts Better jetpacks, Constant Gold Income and All Units Are Brains
18.03.2019
- Lua:
Sound:
Func IsPlaying
Func Stop
Func UpdateDistance
ACraft:
Prop DeliveryDelayMultiplier, r/o
- INI:
ACraft:
Prop DeliveryDelayMultiplier
- Buy menu GUI now shows order mass minus craft mass.
23.03.2019
- Lua:
Material:
Prop ID, r/o
Prop Restitution, r/o
Prop Bounce, r/o
Prop Friction, r/o
Prop Stickiness, r/o
Prop Strength, r/o
Prop StructuralIntegrity, r/o
Prop DensityKGPerVolumeL, r/o
Prop DensityKGPerPixel, r/o
Prop SettleMaterial, r/o
Prop SpawnMaterial, r/o
Prop TransformsInto, r/o
Prop IsScrap, r/o
MovableObject:
Prop Material, r/o
SceneMan:
Func GetMaterial
Func GetMaterialFromID
MovableObject:
Prop MissionCritical, r/w
Prop DamageOnCollision, r/w
28.03.2019
- Lua:
Arm (AHuman):
Prop IdleOffset, r/w
- Fixed a bug in Siege when incorrect units were spawned.
19.04.2019
- Lua:
Actor:
Prop AimRange, r/w
MovableObject:
Func GetForcesCount
Func GetForceVector
Func GetForceOffset
Func SetForceVector
Func SetForceOffset
Func GetImpulsesCount
Func GetImpulseVector
Func GetImpulseOffset
Func SetImpulseVector
Func SetImpulseOffset
21.04.2019
- Included NAT punch-through server in the package - NATCompleteServer.exe
22.04.2019
- Lua:
MOSRotating:
Prop TravelImpulse, r/w
23.04.2019
- Lua:
Attachable:
Prop JointOffset, r/w
27.04.2019
- Lua:
AHuman::Arm:
Prop HandPos, r/w
- Fixed a crash when calling TimerMan.TicksPerSecond in Lua script
01.05.2019
- Fixed a situation where flipped crafts dropped units in invalid direction.
06.05.2019
INI:
GlobalScript:
LateUpdate // If 0 (default) the script is updated during ActivityMan::Update, if 1 the script is updated after MovableMan::Update
10.05.2019
- Added shortcuts:
- F1 - Shortcut help
- F2 - Reload all scripts
- F3 - Dump console text to file
- F4 - Dump console input to file
- F5 - Clear console log
11.05.2019
- INI:
Emission:
Prop Offset // Custom emission-specific offset which overrides parent AEmitter's offset if not zero
- Lua:
Emission:
Prop Offset, r/w
SceneMan:
Func CastUnseenRay // bool CastUnseenRay(int team, const Vector &start, const Vector &ray, Vector &endPos, int strengthLimit, int skip, bool reveal);
12.05.2019
- INI:
MovableObject:
Prop DamageOnPenetration // If not 0 a fixed amount of damage is applied when this penetrates
Prop WoundDamageMultiplier // Damage multiplier transferred to wound inflicted by this object on penetration
AEmitter:
Prop EmitterDamageMultiplier // Damage multiplier derived from penetrating particle. Affects both burst and emit damage values.
- Lua:
MovableObject:
Prop DamageOnPenetration, r/w
Prop WoundDamageMultiplier, r/w
AEmitter:
Prop EmitterDamageMultiplier, r/w
- PresetMan:ReloadAllScripts() now first clears package.loaded table from user-defined modules to trigger their reload.
13.05.2019
- Hopefullly fixed mouse capture issues in server mode.
18.05.2019
- Fixed a situation when Gibs were saved as original presets instead of CopyOf's
20.05.2019
- Lua:
MOSprite:
Prop SpriteAnimDuration, r/w
Func SetEntryWound(presetName, moduleName) // Sets entry wound emitter for this MOSprite
Func SetExitWound(presetName, moduleName) // Sets exit wound emitter for this MOSprite
Func GetEntryWoundPresetName() // Returns entry wound emitter preset name for this MOSprite
Func GetExitWoundPresetName() // Returns exit wound emitter preset name for this MOSprite
Activity:
Prop CraftsOrbitAtTheEdge, r/w // If true then on non-wrapped maps crafts beyond the edge of the map are considered orbited
- INI:
Activity:
Prop CraftsOrbitAtTheEdge
22.05.2019
- Added UI editor executable GUI_Editor.exe to the package.
01.06.2019
- Lua:
HeldDevice:
Func IsDualWieldable() // Indicates whether this is a dual wieldable weapon or not.
Func SetDualWieldable() // Sets whether this is a dual wieldable weapon or not.
AHuman:
Func GetEquippedBGItem() // Returns whatever is equipped in the BG Arm, if anything.
- INI:
HeldDevice:
Prop DualWieldable // Can be wielded with bg hand or not. Equipped via EquipShieldInBGArm
08.06.2019
- Lua:
HDFirearm:
Prop RecoilTransmission, r/w // Scalar of how much of the fire recoil force is transmitted to who/whatever is holding this weapon
09.06.2019
- DYNAMIC PIE MENUS:
Tutorial:
With this update it is now possible to alter pie menu in all kinds of ways dynamically.
This is what happens when pie menu opens now:
OnPieMenu(self) Lua-defined event handler is called for an actor who opened the pie menu, where self is the actor who opened the pie menu
OnPieMenu(self) Lua-defined event handler is called for held item where self is the held item
OnPieMenu(self) Lua-defined event handler is called for any MovableObject (in Actors, Items or Particles collections) on the scene which has ProvidesPieMenuContext = true where self is movable object itself
OnPieMenu() Lua-defined event handler is called for current GAScripted activity.
OnPieMenu() Lua-defined event handler is called for all active global scripts.
When handling OnPieMenuEvents you can access the actor which opened the pie menu via GameActivity.PieMenuActor, GlobalScript.PieMenuActor or MovableObject.PieMenuActor property depending on the object which caught the event
When this event is called it is the only time to alter the contents of pie menu. Add, Remove or Alter items with the GameActivity functions designed for that.
It is not safe to mess with any pie menu related stuff at any other time. All pie magic must be strictly contained inside OnPieMenu function.
All changes made to pie menu slices during OnPieMenu are discarded the next time pie menu activates. Every time the pie menu it is good as new and all customizations must be redone.
To add Activity or GlobalScript based pie menu slice you need:
Define the slice itself in INI as usual, for example:
AddGlobalScript = GlobalScript
PresetName = Test Global Script
Description = Test Global Script
ScriptPath = Base.rte/Scripts/TestGlobalScript.lua
LuaClassName = TestGlobalScript
AddPieSlice = Slice
Description = Global Script Slice
Direction = 1
Icon = Icon
CopyOf = Grapple Gun Stop
ScriptPath = Base.rte/Scripts/TestGlobalScript.lua
FunctionName = TestGlobalScriptPieMenuAction
Add an OnPieMenu event handler onto your Activity or GlobalScript code which will add the custom slice, for example:
function TestGlobalScript:OnPieMenu()
print (self.PieMenuActor)
local activity = ActivityMan:GetActivity()
local gameActivity = ToGameActivity(activity)
if gameActivity then
gameActivity:AddPieMenuSlice("Global Script Slice", "TestGlobalScriptPieMenuAction", Slice.RIGHT, true)
end
end
Add the global function to handle the pie menu slice activation, as ususal, for example:
function TestGlobalScriptPieMenuAction(actor)
print (actor)
end
Pretty much the same stuff for MovableObjects, except that the event signature is OnPieMenu(actor), where actor is an actor which opened the pie menu
- Lua:
[PieMenu]
Slice:
Enum Direction:
NONE = 0
UP = 1
RIGHT = 2
DOWN = 3
LEFT = 4
Enum Type:
PSI_NONE = 0
PSI_PICKUP = 1
PSI_DROP = 2
PSI_NEXTITEM = 3
PSI_PREVITEM = 4
PSI_RELOAD = 5
PSI_BUYMENU = 6
PSI_STATS = 7
PSI_MINIMAP = 8
PSI_FORMSQUAD = 9
PSI_CEASEFIRE = 10
PSI_SENTRY = 11
PSI_PATROL = 12
PSI_BRAINHUNT = 13
PSI_GOLDDIG = 14
PSI_GOTO = 15
PSI_RETURN = 16
PSI_STAY = 17
PSI_DELIVER = 18
PSI_SCUTTLE = 19
PSI_DONE = 20
PSI_LOAD = 21
PSI_SAVE = 22
PSI_NEW = 23
PSI_PICK = 24
PSI_MOVE = 25
PSI_REMOVE = 26
PSI_INFRONT = 27
PSI_BEHIND = 28
PSI_ZOOMIN = 29
PSI_ZOOMOUT = 30
PSI_TEAM1 = 31
PSI_TEAM2 = 32
PSI_TEAM3 = 33
PSI_TEAM4 = 34
PSI_SCRIPTED = 35
PSI_COUNT = 36
Prop FunctionName, r/o // Global Lua function name to call. Built-in have those empty.
Description, r/o // Descrption text shown in UI
Type, r/o // Predefined type of Slice.Type enum. Only makes sense for built-in slices, custom will be PSI_SCRIPTED
Direction, r/o // Slice direction of Slice.Drection enum.
GlobalScript:
Prop PieMenuActor, r/o // Actor who opened pie menu
GameActivity:
Prop PieMenuActor, r/o // Actor who opened pie menu
Collection PieMenuSlices // List of all slices in the current menu. Do not add or remove items while iterating this
Func AddPieMenuSlice(description, functionName, direction, isEnabled) // Adds pie menu slice. Notice that the object itself is loaded from those defined in INI's and because pie slices don't have names it's looked up by a combination of description and functionName
Func AlterPieMenuSlice(description, functionName, direction, isEnabled) // Changes direction or enabled status of pie menu slice.
Func RemovePieMenuSlice(description, functionName) // Removes pie menu slice from the menu and returns the removed slice
MovableObject:
Prop ProvidesPieMenuContext, r/w // If true the OnPieMenu Lua event handler will be called for this object when pie menu activates
- INI:
GlobalScript:
Can handle AddPieSlice now
Activity:
Can handle AddPieSlice now
MovableObject:
Can handle AddPieSlice now
Prop ProvidesPieMenuContext // If true the OnPieMenu Lua event handler will be called for this object when pie menu activates
15.06.2019
- INI:
Entity:
Prop RandomWeight // Random weight used when picking item using PresetMan::GetRandomBuyableOfGroupFromTech and Random[Class] functions. From 0 to 100. 0 means item won't be ever picked.
- Lua:
Entity:
Prop RandomWeight, r/o
17.06.2019
- INI:
DataModule:
Prop ScriptPath // Executes the specified script during module load
20.06.2019:
- Lua:
MovableObject:
Prop EffectRotAngle, r/w // The effect's (glow's) rotation angle
- INI:
MovableObject:
Prop EffectRotAngle
Prop InheritEffectRotAngle // Whether effect's rot angle should be inherited from parent
Prop RandomizeEffectRotAngle // Whether effect's rot angle should be randomized on creation
Prop RandomizeEffectRotAngleEveryFrame // Whether effects rot angle should be randomized every frame
23.06.2019:
- DYNAMIC BUY MENUS:
Tutorial:
With this update it is now possible to manipulate the contents of the buy menu in a dynamic fashion right from your activity or other script.
You can prohibit specific items without messing with IsBuyable fields, but you can't allow to buy any stuff with IsBuyable = false.
So, what's the new opportunities:
Disable everything and allow only specific items.
This is managed via AllowedItems list.
For example, only allow to buy a Dummy blaster and a Dummy actor (self is current activity)
local buyMenu = self:GetBuyGUI(0);
buyMenu:AddAllowedItem("Dummy.rte/Dummy");
buyMenu:AddAllowedItem("Dummy.rte/Blaster");
Disable some specific items, while leaving everything else buyable.
This is managed via ProhibitedItems list
For example, prohibit Dreadnought from buying.
buyMenu:AddProhibitedItem("Dummy.rte/Dreadnought");
Keep an inventory of owned item, and buy these items free of charge if there's a stock of them.
This is managed via OwnedItems list.
For example, give a stock of 10 dummies and 10 blasters.
buyMenu:SetOwnedItemsAmount("Dummy.rte/Blaster", 10);
buyMenu:SetOwnedItemsAmount("Dummy.rte/Dummy", 10);
You can disable any items which are out of stock.
buyMenu.ShowOnlyOwnedItems = true;
Make an item available even if it's out of stock.
This is managed via AlwaysAllowedItems.
For example enable Drop shop even if it's out of stock.
buyMenu:AddAlwaysAllowedItem("Base.rte/Drop Ship MK1");
The buy menu is initialized before you're able to enable or disable items and loads default load out in the cart.
Because of this if you disable items you need to manually reset the cart contents and reload the default loadout,
or you may end up with prohibited items in the cart.
buyMenu:ClearCartList();
buyMenu:LoadDefaultLoadoutToCart();
Buy menu does not track the stock of available items while you manipulate it. So you may try to order items which currently out of stock.
In this case out of stock items (unless they are whitelisted via AlwaysAllowedItems list) will not be delivered. And if a craft is out of
stock and not whitelisted the delivery will be cancelled.
- PRESET ENUMERATION:
Tutorial:
It is now possible to enumerate the list of all data modules loaded and all of the presets they contain.
For example, this prints all preset in all the modules:
for m in PresetMan.Modules do
print (m.FileName)
for p in m.Presets do
print (p.PresetName)
end
end
- Lua:
BuyMenuGUI:
Func AddAllowedItem(string presetName) // Adds an item to the list of allowed items.
Func RemoveAllowedItem(string presetName) // Removes an item from the list of allowed items.
Func ClearAllowedItems() // Clears the list of allowed items
Func AddAlwaysAllowedItem(string presetName) // Adds an item to the list of always allowed items.
Func RemoveAlwaysAllowedItem(string presetName) // Removes an item from the list of always allowed items.
Func ClearAlwaysAllowedItems() // Clears the list of always allowed items
Func AddProhibitedItem(string presetName) // Adds an item to the list of prohibited items.
Func RemoveProhibitedItem(string presetName) // Removes an item from the list of prohibited items.
Func ClearProhibitedItems() // Clears the list of progibited items
Func SetOwnedItemsAmount(std::string presetName, int amount) // Sets the amount of specified items to be owned in this buy menu
Func GetOwnedItemsAmount(std::string presetName) // Returns the amount of specified items owned in this buy menu
Prop ShowOnlyOwnedItems, r/w // If set to true only owned items in stock will be shown in buy menu. Overriden by AlwaysAllowed list.
Func ForceRefresh() // Forces a refresh update of the list of buy menu items
Func SetHeaderImage(string path) // Changes the header image to the one specified in path
Func SetLogoImage(string path) // Changes the logo image to the one specified in path
Func ClearCartList // Clear the cart out of items selected for purchase
Func LoadDefaultLoadoutToCart // Loads the default loadout to the cart
PresetMan:
Collection Modules // List of all available data modules of DataModule type
DataModule:
Collection Presets // List of all presets in the data module. Contains Entity objects, so you'll have to up-cast to get most of the properties
Prop FileName, r/o // Module file name, like Base.rte
Prop FriendlyName, r/o // Module friendly name, like Dummy Tech
30.06.2019
- Lua:
MovableMan:
Func ChangeActorTeam(actor, team) // Change actor team and update team rosters properly. Remember to switch actor manually if it's player controlled