# ui_add_subraces function library

Dependencies: alter_effect, ds, lib_2da, lib_2daq, lib_anon, lib_array, lib_class, lib_cre, lib_data, lib_eff, lib_fn, lib_ids, lib_ietool, lib_ini, lib_kit, lib_script, lib_sfo, lib_spl, lib_splconv, lib_ssl, lib_struct, lib_sugar, lib_tools, lib_ui, lib_vtable, resolve_spell, ui_bonus_spells, ui_deolvynize, ui_detect_class_kit, ui_dual_class_kits, ui_externalize_hlas, ui_externalize_proficiencies, ui_extra_spells, ui_on_open, ui_shared_code, ui_spell_system, ui_system_call, ui_virtual_class

## Description

Functions to add races, subraces and pseudoraces to the game. EE-only (edits the UI).

## Public functions

add_pseudorace(NAME:s="-1", DESC:s="-1", REAL_RACE:s="-1")=() action

Add a single race to SFO's master table of pseudoraces. (This only updates the tables; the game itself is not updated.)

add_race(race:s, NAME:s, DESCSTR:s, UPPERCASE:s, BIOGRAPHY:s)=() action

Add a single race to SFO's master table of races. (This only updates the tables; the game itself is not updated.)

add_subrace(COLOR_SKIN:i="-1", COLOR_HAIR:i="-1", COLOR_MAJOR:i="-1", COLOR_MINOR:i="-1", STR:i, DEX:i, CON:i, INT:i, WIS:i, CHA:i, EXTRA_PROF:i, PP:i, OL:i, FT:i, MS:i, HS:i, DI:i, ST:i, subrace:s, NAME:s, DESC:s, PARENT:s, FINAL_RACE:s="*", ICON:s="-1", ICON_STRREF:s="-1", BIO_OLD:s="-1", BIO_NEW:s="-1", SPL_INIT:s, SPL_RECUR:s)=() action

Add a single subrace to SFO's master table of subraces. (This only updates the tables; the game itself is not updated.)

add_to_subrace_tables(subrace_table:s, race_table:s, pseudorace_table:s, disabled:s, table_path:s)=() action

Take a bunch of tables defining race, subrace and pseudorace and add them to SFO's master tables. (This only updates the tables; the game itself is not updated.)

build_subraces(tlk_signal_start:i=900000, delay_mode:b)=() action

Operate on the subrace tables to actually construct the subraces if delay_mode=1, introduce a 1-second delay into the spells (for experimental HoW compatibility, though we haven't got this stable yet).

disable_subrace(subrace:s)=() action

Disable the listed subrace (assumed to be installed) from the list of subraces offered to the player in character generation.

ui_subrace_item_use()=() action

Goes through all items in the game to make sure that they're appropriately marked as unusable by new races. We assume that the new race can use something iff humans can (except that if only humans are prohibited from using it, we assume new races can use it). This is idempotent but not called automatically.

## Internal functions

These should not be called from outside the library itself.

ability_opcode_map()=(ability_opcode_map:a) action

add_subraces_2da_prof_setup()=() action

add_subraces_build_spells(delay_mode:i)=() action

add_subraces_desc_modifiers()=() action

add_subraces_handle_strength()=(subrace_data:a) action

add_subraces_lua_setup(tlk_signal_start:i=900000)=() action

add_subraces_write_lua_tables()=() action

add_to_subrace_tables_helper(warn_of_repeats:i=1, to_read:s, to_add_to:s)=() action

all_clabs()=(clab_array:a) action

assign_npc_subraces()=() action

build_str_ex_spell()=() action

build_subrace_id_function()=() action

build_subrace_menu()=() action

build_subrace_secondary_recurring_spell(race:i, spell:s)=(needed:s) action

build_subrace_secondary_spell(race:i, spell:s)=() patch

build_subrace_tertiary_spell(id:i, race:i, spell:s, ind:s)=() patch

chargen_display_subrace()=() action

edit_race_menu()=() patch

load_subrace_2da_table(tlk_signal_start:i, subrace_2da:s, icon_path:s)=(max_count:s, subrace_data:a, subrace_rows:a, default_subrace:a, real_races_used:a, extra_race_map:a) action

skill_opcode_map()=(skill_opcode_map:a) action

subrace_clab_patch(initial:s="****", recur:s)=() action

subrace_label_joinable_npcs()=() action

ui_ability_roller()=() patch

ui_pseudoraces()=() patch

ui_skill_adjusts()=() patch

ui_subrace_engine_strings()=(enginest:a) action