Changelog
Website documentation last updated on May 30, 2023. 📆
- v3.6.0
- v3.5.4
- v3.4.1
- v3.3.8
General​
- [NEW] Added a Storage buffer that allows users to store and retrieve data between scripts. The stored data is not serialized and will reset when reopening the game, but it will persist across different levels.
- [NEW] Implemented a new Sound system for playing sound effects. It shares the same volume slider as Bullfrog's sound volume, but sounds play through the updated audio engine, akin to the Music and Narrator systems. Note that playing sounds will not be serialized, meaning they will not continue playing when loading a saved game.
- [CHANGE] Fog of War behaviour changes:
- Scripting commands to cover/uncover fog now overwrite/cancel each other.
- It is now possible to permanently cover the player's reincarnation site.
Events​
- [NEW] OnFrontEndFrame.
Functions​
- [NEW] Storage: supported types 'int', 'bool', 'string'.
- Storage.type.resize
- Storage.type.clear
- Storage.type.push_back
- Storage.type.pop_back
- Storage.type.get
- Storage.type.set
- [NEW] Achievements.SetCount
- [NEW] Achievements.Add
- [NEW] Achievements.UpdateValue
- [NEW] Achievements.UpdateUnlocked
- [NEW] Achievements.UpdateUnlockedValue
- [NEW] Achievements.GetUnlocked
- [NEW] Achievements.GetTarget
- [NEW] Achievements.GetValue
- [NEW] Achievements.Reset
- [NEW] counter_going
- [NEW] counter_get_time
- [NEW] Fow.UncoverReincSite
- [NEW] Sound.Play
- [NEW] Sound.Play3D
- [NEW] Sound.PlayWhilePaused
- [NEW] Sound.SetListenerPos
- [NEW] Sound.Clear
- [NEW] Sound.SetVolume
- [NEW] Sound.GetVolume
- [NEW] FENEW.startLevel
- [NEW] Narrator.GetVolume
- [NEW] Narrator.SetVolume
- [NEW] Game.getGameMode
- [NEW] Game.setGameMode
- [NEW] Game.quit
- [NEW] FENEW.setMenu
- [NEW] FENEW.getCurrentMenu
- [NEW] FENEW.setBackground
- [NEW] change_game_control_mode
- [NEW] is_player_alive
- [NEW] set_player_name
- [NEW] LbDraw_SetClipRect
- [NEW] LbDraw_ReleaseClipRect
- [NEW] LbDraw_SetViewPort
- [NEW] LbDraw_ReleaseViewPort
- [NEW] load_palette
- [NEW] gui_draw_me_a_person_ex
- [NEW] change_single_persons_selected_status
- [NEW] change_persons_selected_status
- [NEW] person_look_at_angle
- [NEW] set_person_draw_info_ptai
- [NEW] set_person_draw_info_by_anim
- [NEW] GetSelectedSpell
- [NEW] SelectSpell
- [NEW] start_level
- [NEW] save_game
- [NEW] load_game
- [NEW] create_shot
Structures​
- [NEW] CmdTargetInfo::TMIdxs
- [NEW] CmdTargetInfo::TIdxSize
- [NEW] CmdTMIdxs::TargetIdx
- [NEW] CmdTMIdxs::MapIdx
- [NEW] CmdIdxSize::MapIdx
- [NEW] CmdIdxSize::CellsX
- [NEW] CmdIdxSize::CellsZ
- [NEW] ShotGeneral::EffectModel
- [NEW] Player::LastManaIncr
- [NEW] GlobalNonSaveItems::Flags4
Enums​
The following enums have been added:
TIF2_NO_DRAW
SHOTF_IS_ARROW
SHOTF_IS_FIRE_ARROW
SHOTF_IS_FIRE_ARROW_2
GM_MAIN_MENU
GM_MAIN_GAME
GM_EDITOR
GM_OBJECT_EDITOR
GM_GAMUT_GENERATION
GM_NETWORK_INTERFACE_2
GM_FRONTEND
GM_LANGUAGE_TEST
GM_FE_NET
GM_PLANETARY_LEVEL_SELECT
GM_KEY_DEFINE_TEST
GM_CREDITS
FEN_MENU_MAIN
FEN_MENU_QUITPROMPT
FEN_MENU_RECOMMENDTUTORIAL
FEN_MENU_LOAD
FEN_MENU_MULTISERVICE
FEN_MENU_MULTIIPXIPLOOK
FEN_MENU_MULTIIPADDRESSBOOK
FEN_MENU_MULTINEWNAME
FEN_MENU_MULTINEWSTART
FEN_MENU_MULTIMODEMSETUP
FEN_MENU_MULTIMODEMJOIN
FEN_MENU_MULTISERIALSETUP
FEN_MENU_MULTISERIALSETTINGS
FEN_MENU_OPTIONS
FEN_MENU_SAVE
FEN_MENU_SINGLELEVEL
FEN_MENU_INGAMEMENU
FEN_MENU_IGMRESTARTLEVELPROMPT
FEN_MENU_IGMQUITLEVELPROMPT
FEN_MENU_IGMPLSQUITGAMEPROMPT
FEN_MENU_SPLASH
FEN_MENU_PLSMENU
S_VEHICLE_BOAT_STAND
S_VEHICLE_AIRSHIP_STAND
S_VEHICLE_BOAT_TRAVEL
S_VEHICLE_AIRSHIP_TRAVEL
S_VEHICLE_BOAT_DYING
S_VEHICLE_AIRSHIP_DYING
S_VEHICLE_DRIFT_TO_SHORE
S_VEHICLE_BOAT_STRANDED
S_VEHICLE_BLAST_EXPLODING
General​
- ProcessThingsList with a
T_PERSON
list will now parse AoD's and Wildmen. - Fixed Music.GetPlayLength not returning a value.
- Fixed Music.GetPlayPosition not returning a value.
- Fixed FoW.Uncover ignoring and not using the duration parameter.
- LbDraw_Sprite and LbDraw_ScaledSprite can now be given 0,0 coords.
- Reworked serialization system. It has been extended with functionality and thoroughly simplified.
- Serialization and deserialization is done exclusively through SaveTable and LoadTable.
- Support for zero-indexed tables.
- Support for hybrid keyed and indexed tables.
- Knowing the table length is no longer necessary.
- Knowing previous data types or keys held by a table no longer necessary.
- Tables may now contain any data type, including anonymous functions.
- usertype data is NOT serializable, for instance the structure Coord3D.
- Fixed documentation typos, examples and missing API.
- Some of the missing functions: GFGetGuiWidth, toggle_pause, is_the_level_complete, KillMenuId, switch_world_to_normal_views_direct, set_new_scenery_resource_size, set_creature_new_state
- Added a new page section "Script Examples" filled with code snippets.
Events​
- [NEW] OnFrontEnd
- [NEW] OnFrameCredits
Functions​
- [REMOVED] SaveTableRaw.
- [REMOVED] LoadTableRaw.
- [REMOVED] SaveVar.
- [REMOVED] LoadVar.
- [CHANGE] CharWidth() -> CharWidth(UBYTE c).
- [NEW] SaveTable & LoadTable will now return a boolean.
- [NEW] DumpTable
- [NEW] LoadDump
- [NEW] computer_num_of_building_type
- [NEW] find_me_a_number_of_spare_people
- [NEW] computer_find_training_building_that_can_be_used_for_training_now
- [NEW] computer_how_many_people_are_training_to_be
- [NEW] stop_sound_event
- [NEW] Camera.getAngle
- [NEW] Camera.setCoords
- [NEW] Camera.setAngle
- [NEW] update_cmd_list_entry
- [NEW] get_thing_curr_cmd_list_ptr
- [NEW] FoW.UncoverAll
- [NEW] Mouse.isPointValid
- [NEW] process_shape_map_elements
- [NEW] is_shape_valid_at_map_pos
- [NEW] is_valid_jnav_path
- [NEW] get_building_entrance_coord
- [NEW] remove_person_from_building_dwellers
- [NEW] LbDraw_SpriteEx
- [NEW] LbDraw_ScaledSpriteEx
- [NEW] LbDraw_SetAlphaTable
- [NEW] set_building_sprog_time
- [NEW] set_building_max_sprogging_population
- [NEW] set_map_elem_object_shadow
- [NEW] set_training_min_frames
- [NEW] init_archer_hut
- [NEW] is_person_selected
- [NEW] set_archer_fire_arrows
- [NEW] get_archer_fire_arrows
- [NEW] is_med_man_in_valid_state_to_cast_a_spell
- [NEW] computer_is_map_elem_in_cps_base
- [NEW] computer_check_spell_bucket_usage
- [NEW] computer_can_medicine_man_cast_at_pos
- [NEW] computer_cast_spell_on_pos
- [NEW] computer_cast_spell_on_pos_targeted
- [NEW] computer_get_persons_attack_group
- [NEW] computer_set_base_bucket_rate
- [NEW] LbDraw_Rectangle
- [NEW] LbDraw_RectangleOutline
- [NEW] CharWidth
- [NEW] ScreenWidth
- [NEW] ScreenHeight
- [NEW] DrawStretchyButtonBox
- [NEW] Music.Pause
- [NEW] Music.Resume
- [NEW] Music.SetAutoResume
- [NEW] Narrator.Pause
- [NEW] Narrator.Resume
- [NEW] Narrator.SetAutoResume
- [NEW] PlayCutscene
Structures​
- [NEW] Counter
- [NEW] GlobalSaveItems::Counter::Value
- [NEW] GlobalNonSaveItems::CurrPointer
- [NEW] PersonOwned::CurrCmd
- [NEW] Commands
- [NEW] Commands::CommandType
- [NEW] Commands::Flags
- [NEW] Commands::NumCommandees
- [NEW] Commands::u
- [NEW] CmdTargetInfo
- [NEW] CmdTargetInfo::TargetIdx
- [NEW] CmdTargetInfo::TargetCoord
- [NEW] Player::ShotMapIdx
- [NEW] Player::DeadCount
- [NEW] Player::PlayerActive
- [NEW] Player2::NumPeopleOfType
- [NEW] Thing::u::Shot
- [NEW] Shot::Count
- [NEW] Shot::Flags
- [NEW] Shot::StartCoord
- [NEW] Shot::TargetCoord
- [NEW] Shot::EffectType
- [NEW] Shot::ItemsPerTurn
- [NEW] Shot::ItemDuration
- [NEW] Shot::TargetThingIdx
- [NEW] SoulConvert::FallenToGround
- [NEW] SoulConvert::CurrModel
- [NEW] GlobalNonSaveItems::Flags3
- [NEW] GlobalSaveMultiverseItems::LightStormsActive::Flags3
- [NEW] TbRect
- [NEW] TbRect::Left
- [NEW] TbRect::Top
- [NEW] TbRect::Right
- [NEW] TbRect::Bottom
- [NEW] BorderLayout
- [NEW] BorderLayout::TopLeft
- [NEW] BorderLayout::Top
- [NEW] BorderLayout::Left
- [NEW] BorderLayout::Centre
- [NEW] BorderLayout::Right
- [NEW] BorderLayout::BottomLeft
- [NEW] BorderLayout::Bottom
- [NEW] BorderLayout::BottomRight
- [NEW] MovementDestInfo
- [NEW] MovementDestInfo::AngleXZ
- [NEW] MovementDestInfo::Coord
- [NEW] MovementDestInfo::Angles
- [NEW] MovementDestInfo::Coords
- [NEW] MovementDestCoordInfo
- [NEW] MovementDestCoordInfo::D2
- [NEW] MovementDestCoordInfo::D3
- [NEW] MovementDestAngleInfo
- [NEW] MovementDestAngleInfo::XZ
- [NEW] MovementDestAngleInfo::ZY
Enums​
The following enums have been added:
TIF_NOT_PREACHABLE
TIF2_SPR_ANIM_8_ANGLES
IN_TRAINING_OK
DEFENDING_OK
BUILDING_OK
NOT_IN_TRAINING_BUILDING
NOT_DEFENDING_PREACHERS
NOT_IN_BUILDING
NOT_IN_DRUM_TOWER
CMD_NONE
CMD_EXIT_MENU_ACCEPT
CMD_EXIT_MENU_ABORT
CMD_GOTO_POINT
CMD_FOLLOW_PERSON
CMD_CREATE_BEACON
CMD_BUILD_BUILDING
CMD_GET_WOOD
CMD_GO_IN_BLDG
CMD_DROP_WOOD
CMD_DISMANTLE_BUILDING
CMD_GUARD_AREA
CMD_SPARE
CMD_SPY_BURN_WOOD
CMD_SPY_INTERROGATE
CMD_SPY_SABOTAGE
CMD_SPY_DISGUISE
CMD_RELIGIOUS_PREACH
CMD_MOVE_REINCARN_SITE
CMD_ATTACK_AREA_2
CMD_ENTER_PORTAL
CMD_AUTO_ATTACK_AREA
CMD_GET_INTO_VEHICLE
CMD_GET_OUT_OF_VEHICLE
CMD_CONVERT_WILD
CMD_GUARD_AREA_PATROL
CMD_FLATTEN
CMD_HEAD_PRAY
CMD_ATTACK_TARGET
CMD_GET_DISCOVERY
CMD_GUARD_SHAMAN
CMD_RELIGIOUS_BLDG_PREACH
CMD_AUTO_RELIGIOUS_PREACH
CMD_LIBRARY_PRAY
CMD_SEEK_NEAREST_BLDGS
SHME_MODE_SET_TMP
SHME_MODE_REMOVE_TMP
SHME_MODE_SET_PERM
SHME_MODE_REMOVE_PERM
SHME_MODE_CONVERT_TO_BLDG
E2_ME2_WAVY
DF_HIDE_ON_ANIM_FINISH
General​
- Serialization function SaveTableRaw and LoadTableRaw implementations finished.
- Fixed ProcessThingsList broken T_GENERAL list.
- Fixed MARKER_ENTRIES.
- Fixed shaman_defend_base_pos.
- ProcessThingsList can now be given a T_EFFECT list.
- ProcessThingsListModel can now parse M_EFFECT_PICKUP_OBJECT lists.
- You may now disable tweeting sounds and sprites.
- You may now disable sounds emitted by persons.
- Added ability to unlock the framerate cap during flybies.
- Added ability to disable tweeting sounds and sprites.
- Added ability to disable certain sounds emitted by persons.
- Added ability to customize spell incantations during game runtime for both good and evil alignments.
- Fog reveal when the level is won is now optional.
- Increased the max. amount of sound entries possible by 50.
Events​
- [CHANGE] OnKeyDown has to return a boolean indicating whether the key should be processed by the game.
- [CHANGE] Renamed misspelled "OnRenerateLevel" to "OnRegenerate".
- [CHANGE] OnSpriteFrame now ONLY works with non-hspr banks.
- [NEW] OnAnimSpriteFrame event. (previous OnSpriteFrame functionality).
- [REMOVED] OnPreAnimSpriteFrame.
Functions​
- [CHANGE] Narrator.Init now takes a bool parameter.
- [REMOVED] GetPalette.
- [REMOVED] FoW.Initialize.
- [NEW] apply_speed_to_velocity
- [NEW] player_can_cast
- [NEW] Pack32
- [NEW] set_person_look_at_target_angles
- [NEW] set_moving_thing_dest_angle
- [NEW] get_angle_xz
- [NEW] move_xz
- [NEW] toggle_view
- [NEW] CREATE_THING_WITH_PARAMS4
- [NEW] move_in_direction_mapposxz
- [NEW] get_world_dist_xz
- [NEW] get_world_dist_xz_quick
- [NEW] QuestManager.setDrawXY
- [NEW] QuestManager.setFont
- [NEW] PLAYERS_VEHICLE_OF_TYPE
- [NEW] READ_BUCKET_COUNT_FOR_SPELL
- [NEW] READ_BUCKET_REFILL_RATE_FOR_SPELL
- [NEW] toggle_panel
- [NEW] is_person_in_a_fight
- [NEW] is_person_on_a_shape
- [NEW] is_person_on_a_building
- [NEW] has_person_failed_navigation
- [NEW] init_person_hspr_bank
- [NEW] create_building_explode_things
- [NEW] command_person_attack_map_idx
- [NEW] player_has_spell_unlocked
- [NEW] utils_is_swamp_on_map_pos
- [NEW] set_player_sound_alignment
- [NEW] map_ptr_to_world_coord3d
- [NEW] coord2D_to_coord3D
- [NEW] coord3D_to_coord2D
- [NEW] Music.ClearQueue
- [NEW] Music.SetStatus
- [NEW] Music.SetVolume
- [NEW] Music.GetVolume
- [NEW] Music.SetPlayPaused
- [NEW] Narrator.SetPlayPaused
- [NEW] Difficulty.Process
Structures​
- [NEW] GlobalNonSaveItems::PrisonThing
- [NEW] Thing::Child
- [NEW] Thing::Parent
- [NEW] General3D
- [NEW] Effect::Orbiting
- [NEW] Movement::Velocity
- [NEW] Player::CP
- [NEW] Player::CP::Flags
- [NEW] Player::CP::StartSite
- [NEW] Player::CP::DrumTowerStartPos
- [NEW] Player::CP::Base
- [NEW] Player::CP::Base::Site
- [NEW] Player::CP::Base::MaxRadius
- [NEW] Player::SpellDelayCount
- [NEW] Player::ShotMapIdx
- [NEW] DrawInfo::DrawTableIdx
- [NEW] ThingTypeData::SoulConvert
- [NEW] SoulConvert::Count
- [NEW] GlobalNonSaveItems::ActiveGlobalThings
- [NEW] BuildingTypeInfo::Flags2
- [NEW] SpriteFrameEvent::BankNum
- [NEW] SpellsTypeInfo::SampleIdxGood
- [NEW] SpellsTypeInfo::SampleIdxEvil
- [REMOVED] BuildingTypeInfo::UnitHarmonyIncr
- [REMOVED] SpriteFrameEvent::FrameIdx
- [REMOVED] SpellsTypeInfo::PanelSampleIdx
- [REMOVED] SpellsTypeInfo::PanelSampleCount
Enums​
The following enums have been added:
CPF_BUSY
CPF_SOME_ACTION_IN_CONTROL_OF_PRAYING
CPF_UNDER_ATTACK
CPF_STARTED_DEFENCE
CPF_USE_MARKER_FOR_DEFENCE
CPF_USE_GIVEN_POS_FOR_DRUM_TOWER
CPF_USE_CONVERT_POS_FROM_SCRIPT
CPF_BUILD_OUTER_DEFENCES_UP
CPF_SHAMAN_DEFEND_BASE
CPF_USE_MARKER_FOR_CONVERT
CPF_DONT_BUILD_MAIN_DRUM_TOWER_YET
CPF_ONLY_STAND_AT_MARKERS
CPF_SHAMAN_BLASTED_BY_SUPER_WARRIOR
CPF_TAKE_NOTICE_OF_SUPER_WARRIORS_BLASTING_THE_SHAMAN
CPF_ACTIVELY_TARGET_BLUE_SHAMAN
CPF_ACTIVELY_TARGET_BLUE_DRUM_TOWERS
CPF_PARTIAL_BUILDING_COUNT
CPF_DO_EXTRA_WOOD_COLLECTION
CPF_USE_SPELL_BUCKET_CHECKS
CPF_SUPER_ATTACK_POS_VALID
BF_ROCK_MODE
BF_ALLOW_DWELLER_REMOVAL
BF_CAN_HOUSE_DWELLERS
BF_UNDER_ATTACK
BF_VEHICLE_WOOD_REQUIRING
BF_DYING_MODE
BF_TRAINING_IN_PROGRESS
BF_JUST_TRAINED
BF_RESET_QUEUE_POSITIONS
BF_DO_A_SPROGG
BF_DISMANTLE_MODE
BTI2_PRODUCE_ARCHER
BTI2_PRODUCE_MELEE_GHOUL
BTI2_PRODUCE_RANGED_GHOUL
BTI2_PRODUCE_WOLF_GUY
BANK_WOLF_PELT_BLUE
BANK_WOLF_CREATURE
BANK_ARCHER_BLUE
BANK_ARCHER_RED
BANK_ARCHER_YELLOW
BANK_ARCHER_GREEN
BANK_ARCHER_WHITE
BANK_MELEE_GHOUL_BLUE
BANK_MELEE_GHOUL_RED
BANK_MELEE_GHOUL_YELLOW
BANK_MELEE_GHOUL_GREEN
BANK_MELEE_GHOUL_WHITE
BANK_RANGED_GHOUL_BLUE
BANK_RANGED_GHOUL_RED
BANK_RANGED_GHOUL_YELLOW
BANK_RANGED_GHOUL_GREEN
BANK_RANGED_GHOUL_WHITE
P2FL_NO_ACCEPT_SOUND
GSMI_NO_FLYBY_FRAMERATE_CAP
QUEST_TEXT_TYPE_TITLE
QUEST_TEXT_TYPE_MESSAGE
QUEST_TEXT_TYPE_TASK
QUEST_TEXT_TYPE_TASK_COMPLETE
QUEST_TEXT_TYPE_TASK_FAILED
M_EFFECT_LOCUST
M_EFFECT_HAIL_FIRE
M_EFFECT_ORBITING_OBJECT
M_EFFECT_CHOP_TREE
E2_ME2_WAVY
E2_ME2_SHROUD
LB_KEY_BACKSPACE
M_MVS_PERSON_ARCHER
M_MVS_PERSON_MELEE_GHOUL
M_MVS_PERSON_RANGED_GHOUL
No history.