UEFN 24.01 Pre-Release notes

24.01 Release Notes

Updates to Maximum Publish Download Size

  • The maximum download size for publishing has been increased from 300MB to 400MB. In the future we intent to have per platform limitations that will vary.

Known Issues

  • Validation
    • For the 24.01 release, Spray Decals will not validate. This will prevent you from playing these projects. Please remove Spray Decals until this issue addressed at a later date
  • If you add the Day Sequence Device, Delete it and Undo, the editor may be in a conflicted state where lighting updates do not work. In this case, please close the editor and re-open it.
  • If you are using Perforce, and Hide Selected in the Outliner, then saving, will result in every file in that level (for one file per actor) being checked out and the save of the level failing. This will be addressed in a future release.
  • Under “World Settings”, if you remove the “Day Night Cycle” from the “World Time of Day Manager”, you may not be able to save your level. If using Perforce, it also may result in the check out of every file in the one file per actor system. This will be addressed in a future release.
  • After using the event binding in Creative Edit mode, if those devices are copy and pasted in the editor, they will lose their event binding references. This only affects events bound in the Fortnite client and doesn’t affect devices bound in the UEFN editor. This will be fixed in a future release.
  • Vaulting - Enabling Vaulting on the island settings results in vaulting not functioning in play.
  • Engaging tactical sprint while in the pre-game phase of an island running from a test island code results in broken sprinting animation state.
  • If the user disables the sprinting and sliding, players will see buggy sprint animation when trying to sprint and slide while in edit mode.

Removals

  • Verse API from the following devices has been removed
  • The following API in AI devices have been removed. They will return in the future with an improved API.
    • Creature Spawner Device
      • EliminatedEvent
    • Guard Spawner Device
      • SpawnedEvent
      • EliminatedEvent
      • EliminatingPlayerEvent
      • EliminatingAIEvent
      • HiredEvent
      • DismissedEvent
      • AlertedToAgentEvent
      • TargetLostEvent
      • Hire
      • DismissAllHiredGuards
      • DismissAgentHiredGuards
    • Wildlife Spawner Device
      • SpawnedEvent
      • EliminatedEvent
      • TamedEvent
      • UntamedEvent
      • ForceSpawnedEvent
      • EliminatedByANeutralAgentEvent
      • EliminatedByAnEnemyAgentEvent
      • EliminatedByPredatorEvent
      • DamagedEvent
      • SomethingIsEatenEvent
      • RiddenEvent
      • DismountedEvent
      • Tame
      • UntameAll
      • UntameFromAgent
      • EliminatedTamedFromAgent
      • Ride
      • DismountAgent
      • RestoreEnergyForAgent
      • ConsumeEnergyForAgent

Updates / Refactors

  • EpicGames.com module has been renamed to UnrealEngine.com. Replace using { /EpicGames.com/*** } with using { /UnrealEngine.com/*** }.

  • Some events were changed to have an optional agent result. You should now check to see if there was an agent or not.

    • creature_placer_device.EliminatedEvent()
    • wildlife_spawner_device.DamagedEvent()
    • supply_drop_spawner_device.BalloonPoppedEvent()

Example:

Was:

AwaitTrigger(Trigger:trigger_device, GroupEvent:event(agent))<suspends>:void =
    GroupEvent.Signal(Trigger.TriggeredEvent.Await())

Is now:

AwaitTrigger(Trigger:trigger_device, GroupEvent:event(agent))<suspends>:void =
    loop:
        MaybeAgent := Trigger.TriggeredEvent.Await()
        if (TriggerAgent := MaybeAgent?):
            GroupEvent.Signal(TriggerAgent)
            break  # exit loop
        # No agent so loop back for another trigger

Devices

The Verse team has been performing final reviews for the 24.01 release. This review resulted in changes to standardize the Verse API and minimize inconsistencies.

Device Name Before After
animated_mesh_device PauseAnimation() Pause()
animated_mesh_device PlayAnimation() Play()
animated_mesh_device PlayReverseAnimation() PlayReverse()
attribute_trigger_device attribute_trigger_device attribute_evaluator_device
audio_player_device RegisterAgent(Agent:agent) Register(Agent:agent)
audio_player_device UnregiseterAllAgents() UnregisterAll()
audio_player_device UnregisterAgent(Agent:agent) Unregister(Agent:agent)
cancelable interface cancellable cancelable
capture_area_device ResetTeamControl() Reset()
character_device TurnOffVisibility() Hide()
character_device TurnOnVisibility() Show()
class_selector_ui_device ShowPopupUI() Show()
creature_spawner_device CreatureEliminatedEvent:listenable(agent) EliminatedEvent:listenable(?agent)
down_but_not_out_device DownAgent(Agent:agent) Down(Agent:agent)
down_but_not_out_device ReviveAgent(Agent:agent) Revive(Agent:agent)
elimination_manager_device EliminationEvent:listenable(agent) EliminationEvent:listenable(?agent)
explosive_device TurnOffVisibility() Hide()
explosive_device TurnOnVisibility() Show()
fishing_zone_device ResetUses() Reset()
fort_br_team_collection AddAgentToTeam(InAgent:agent, InTeam:team) AddToTeam(InAgent:agent, InTeam:team)
fort_br_team_collection GetAgentsOnTeam(InTeam:team) GetAgents(InTeam:team)
fort_br_team_collection GetTeamForAgent(InAgent:agent) GetTeam(InAgent:agent)
fort_br_team_collection IsAgentOnTeam(InAgent:agent, InTeam:team) IsOnTeam(InAgent:agent, InTeam:team)
fort_character SetVisible(IsVisible:logic) Show()/Hide()
fort_minigame_team_collection AddAgentToTeam(InAgent:agent, InTeam:team) AddToTeam(InAgent:agent, InTeam:team)
fort_minigame_team_collection GetAgentsOnTeam(InTeam:team) GetAgents(InTeam:team)
fort_minigame_team_collection GetTeamForAgent(InAgent:agent) GetTeam(InAgent:agent)
fort_minigame_team_collection IsAgentOnTeam(InAgent:agent, InTeam:team) IsOnTeam(InAgent:agent, InTeam:team)
fort_team_collection AddAgentToTeam(InAgent:agent, InTeam:team) AddToTeam(InAgent:agent, InTeam:team)
fort_team_collection GetAgentsOnTeam(InTeam:team) GetAgents(InTeam:team)
fort_team_collection GetTeamForAgent(InAgent:agent) GetTeam(InAgent:agent)
fort_team_collection IsAgentOnTeam(InAgent:agent, InTeam:team) IsOnTeam(InAgent:agent, InTeam:team)
fuel_pump_device RestockFuel() Reset()
guard_spawner_device EliminatedEvent:listenable(agent) EliminatedEvent:listenable(?agent)
guard_spawner_device ResetTotalSpawnCount() Reset()
hud_message_device GetMessage() GetText()
hud_message_device SetMessage() SetText()
item_granter_device ClearSaveDataForAgent(Agent:agent) ClearSaveData(Agent:agent)
objective_device TurnOffVisibility() Hide()
objective_device TurnOnVisibility() Show()
player_counter_device GetShowInfoPanel() IsShowingInfoPanel[]
player_counter_device ResetTargetCount() Reset()
player_counter_device SetShowInfoPanel(Show:logic) ShowInfoPanel(); HideInfoPanel()
popup_dialog_device HideFromAll() Hide()
popup_dialog_device ShowToAll() Show()
prop_mover_device MovementFinishedEvent() FinishedEvent()
prop_mover_device MovementStartedEvent() BeganEvent()
prop_mover_device MovementStoppedEvent() EndedEvent()
race_manager_device BeginRace() Begin()
race_manager_device EndRace() End()
race_manager_device RaceStartedByManagerEvent() RaceBeganEvent()
radio_device RegisterAgent(Agent:agent) Register(Agent:agent)
radio_device UnregiseterAllAgents() UnregisterAll()
radio_device UnregisterAgent(Agent:agent) Unregister(Agent:agent)
sentry_device EliminatedEvent:listenable(agent) EliminatedEvent:listenable(?agent)
sequencer_device BeginSequence() Begin()
sequencer_device EndSequence() End()
sequencer_device sequencer_device pulse_trigger_device
supply_drop_spawner_device LockSupplyDrop() Lock()
supply_drop_spawner_device OpenSupplyDrop(Agent:agent) Open(Agent:agent)
supply_drop_spawner_device SpawnSupplyDrop() Spawn()
supply_drop_spawner_device SpawnSupplyDrop(Agent:agent) Spawn(Agent:agent)
supply_drop_spawner_device UnlockSupplyDrop() Unlock()
switch_device ClearAgentPersistenceData(Agent:agent) ClearPersistenceData(Agent:agent)
timed_objective_device StartedEvent() BeganEvent()
timed_objective_device StoppedEvent() EndedEvent()
timer_device FailureEvent:listenable(agent) FailureEvent:listenable(?agent)
timer_device SetLapTimeForAgent(Agent:agent) SetLapTime(Agent:agent)
timer_device StartUrgencyModeEvent:listenable(agent) StartUrgencyModeEvent:listenable(?agent)
timer_device SuccessEvent:listenable(agent) SuccessEvent:listenable(?agent)
tracker_device DecrementProgress(Agent:agent) Decrement(Agent:agent)
tracker_device IncrementProgress(Agent:agent) Increment(Agent:agent)
tracker_device LoadForAgent(Agent:agent) Load(Agent:agent)
tracker_device ResetProgress(Agent:agent) Reset(Agent:agent)
trigger_base_device ResetTimesTriggered() Reset()
vfx_creator_device BeginEffectAtAgent(Agent:agent) Begin(Agent:agent)
vfx_creator_device BeginEffectAtDevice() Begin()
vfx_creator_device BeginEffectForAllAgents() BeginForAll()
vfx_creator_device EndEffectAtAgent(Agent:agent) End(Agent:agent)
vfx_creator_device EndEffectAtDevice() End()
vfx_creator_device EndEffectForAllAgents() EndForAll()
vfx_creator_device RemoveEffectFromAgent(Agent:agent) Remove(Agent:agent)
vfx_creator_device RemoveEffectFromAllAgents() RemoveFromAll()
vfx_creator_device SpawnAtAgent(Agent:agent) SpawnAt(Agent:agent)
vfx_creator_device ToggleEffectAtAgent(Agent:agent) Toggle(Agent:agent)
vfx_creator_device ToggleEffectAtDevice() Toggle()
vfx_creator_device ToggleEffectForAllAgents() ToggleForAll()
vfx_creator_device ToggleEffectPauseAtAgent(Agent:agent) TogglePause(Agent:agent)
vfx_creator_device ToggleEffectPauseAtDevice() TogglePause()
vfx_creator_device ToggleEffectPauseForAllAgents() TogglePauseForAll()
video_player_device EndAllStreaming() EndForAll()
water_device ResetWater() Reset()
wildlife_spawner_device EliminatedEvent:listenable(agent) EliminatedEvent:listenable(?agent)
wildlife_spawner_device ResetTotalSpawnCount() Reset()

Recap of 24.00 release highlights

Validation

24.00 introduces asset validation. This validation verifies that the content is allowed in a UEFN project. There may be issues with assets or devices that you believe are valid but prevent your project from being uploaded.

Please see this post for more details: Handling Content Validation in 24.00

Verse API Changes for 24.00

These are included if you were upgrading a project that is upgrading from a release prior to 24.00

Removals

  • editable_text_base, editable_text, and editable_text_box widgets have been removed from the UI API
  • material_block and texture_block widgets have been removed

Updates / Refactors

  • Support for Verse code finding props and user devices by tag
  • This includes renaming
    • GetDevicesWithTag to GetCreativeObjectsWithTag
    • GetDevicesWithTags to GetCreativeObjectsWithTags
    • These methods also return a creative_object_interface which can then be cast to each of these.
        # Some test code for finding all of these that have an all_tag on them and then casting to the appropriate type
        AllCreativeObjects:[]creative_object_interface := GetCreativeObjectsWithTag(all_tag{})

        for (PropItem:AllCreativeObjects):
            if (TheProp := creative_prop[PropItem]):
                Logger.Print("Prop found with all_tag at position: {TheProp.GetTransform().Translation}")

        for (DeviceItem:AllCreativeObjects):
            if (TheDevice := creative_device_base[DeviceItem]):
                Logger.Print("Creative device found with all_tag at position: {TheDevice.GetTransform().Translation}")
        
        for (UserDeviceItem:AllCreativeObjects):
            if (TheDevice := creative_device[UserDeviceItem]):
                Logger.Print("User device found with all_tag at position: {TheDevice.GetTransform().Translation}")
  • Rename ToStringSeparated to Join
  • Removed vector3.XAxis, vector3.YAxis, vector3.ZAxis
  • Removed fort_character.IsDown and added fort_character.IsActive to indicate the character is active. If IsActive returns false, most character actions will silently fail.
  • Added vector3.IsAlmostZero(tolerance) and IsAlmostEqual(vector3, vector3, tolerance) to more easily allow testing for these states.
  • Add support for NamedColors.Tan

Devices

  • Audio Player

    • Audio Player now uses Play() and Stop() instead of Activate() and Deactivate()
    • Audio Player now has an option to call Play(Agent) or Stop(Agent) if you want to direct audio at a specific user.
  • Radio

    • Radio now uses Play() and Stop() instead of PlayRadio() and Stop Radio()
  • Random Number Generator Device

    • Device no longer takes an optional Agent argument. Instead users can either choose to call a function with a mandatory Agent argument, or one with no arguments at all.
  • Switch Device

    • Device no longer takes an optional Agent argument. Instead users can either choose to call a function with a mandatory Agent argument, or one with no arguments at all.
  • Timer Device

    • Device no longer takes an optional Agent argument. Instead users can either choose to call a function with a mandatory Agent argument, or one with no arguments at all.
  • Bear Spawner Device

    • bear_spawner_device has been renamed to vehicle_spawner_pickup_truck_device
  • Mudflap Spawner Device

    • mudflap_spawner_device has been renamed to vehicle_spawner_big_rig_device
  • Prevalent Spawner Device

    • Prevalent_spawner_device has been renamed to vehicle_spawner_sedan_device
  • Whiplash Spawner Device

    • whiplash_spawner_device has been renamed to vehicle_spawner_sports_car_device
2 Likes

ok