UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Todo List
Global AB_LoadXML (xmlNode_t *parent)
this is for old saves now only
Global AB_LoadXML (xmlNode_t *parent)
this is for old saves now only
Global abstractScrollbarExtraData_t

think about switching to percent when its possible (lowPosition, hightPosition)

think about adding a "direction" property and merging v and h scrollbar

Global abstractScrollbarExtraData_t

think about switching to percent when its possible (lowPosition, hightPosition)

think about adding a "direction" property and merging v and h scrollbar

Global AC_LoadXML (xmlNode_t *parent)
Remove: Fallback for compatibility
Global actorHands_t
remove this and use the container id - not every unit must have two hands
Global AddLump (qFILE *bspfile, dBspHeader_t *header, int lumpnum, void *data, int len)
Implement this without the ftell stuff - don't write the bsp file twice
Global AI_ActorThink (Player &player, Actor *actor)
If possible targets that can shoot back (check their inventory for weapons, not for ammo) are close, go into reaction fire mode, too
Global AI_CheckUsingDoor (const Edict *ent, const Edict *door)
Finish implementation
Global AI_FighterCalcActionScore (Actor *actor, const pos3_t to, AiAction *aia)

fill z_align values

optimize this

do this decently, only penalizing the visible part of walk and penalizing much more for reaction shooters around; now it may remove some tactical options from aliens, e.g. they may now choose only the closer doors; however it's still better than going three times around soldier and only then firing at him

also add bonus for fleeing from reaction fire and a huge malus if more than 1 move under reaction

Global AI_FighterCheckShoot (const Actor *actor, const Edict *check, const fireDef_t *fd, float dist)

Check whether radius and power of fd are to to big for dist

Check whether the alien will die when shooting

Global AI_FindBestFiredef (AiAction *aia, Actor *actor, Actor *check, const Item *item, shoot_types_t shootType, int tu, float *maxDmg, int *bestTime, const fireDef_t *fdArray)
timed firedefs that bounce around should not be thrown/shoot about the whole distance
Global AI_NUMERICSERV
Move this into the configure script AI_ADDRCONFIG, AI_ALL, and AI_V4MAPPED are available since glibc 2.3.3. AI_NUMERICSERV is available since glibc 2.3.4.
Global AI_SearchDestroyableObject (const Actor *actor, const fireDef_t *fd)
This feature causes the 'aliens shoot at walls'-bug. I considered adding a visibility check, but that wouldn't prevent aliens from shooting at the breakable parts of their own ship. So I disabled it for now. Duke, 23.10.09
Global AII_CollectingItems (aircraft_t *aircraft, int won)
Simplify this logic
Global AIL_findweapons (lua_State *L)
Check if can reload the weapon with carried ammo or from the floor itself?
Global AIL_setwaypoint (lua_State *L)
A better way to handle waypoints
Global AIM_AutoEquipAircraft (aircraft_t *aircraft)
Eliminate hardcoded techs here.
Global AIM_CheckTechnologyIntoSlot (const aircraftSlot_t *slot, const technology_t *tech)
It is a generic function, we can move it into cp_mapfightequip.c
Parameters
[in]slotPointer to an aircraft slot (can be base/installation too)
[in]techPointer to the technology to test
Returns
The status of the technology versus the slot
Global AIM_SelectableCraftItem (const aircraftSlot_t *slot, const technology_t *tech)

maybe this isn't working, aircraft slot type can't be an AMMO

This only works for ammo that is usable in exactly one weapon check the weap_idx array and not only the first value

Global AIM_UpdateItemDescription (bool fromList, bool fromSlot)
we should clone the text, and not using the ufopedia text
Global AIR_AircraftSelect (aircraft_t *aircraft)
This shouldn't exist. UI should use the global idx as reference
Global AIR_AircraftsNotifyUFORemoved (const aircraft_t *const ufo, bool destroyed)
this should be in a BDEF_NotifyUFORemoved callback
Global AIR_CampaignRun (const campaign_t *campaign, int dt, bool updateRadarOverlay)
check if aircraft can go to a closer base with free space
Global AIR_ChangeAircraftName_f (void)
make it not using cvar and default aircraft but get them from parameterlist
Global AIR_DeleteAircraft (aircraft_t *aircraft)
Return status of deletion for better error handling.
Global AIR_DestroyAircraft (aircraft_t *aircraft, bool killPilot=true)
Return status of deletion for better error handling.
Global AIR_DestroyAircraft (aircraft_t *aircraft, bool killPilot=true)
Return status of deletion for better error handling.
Global AIR_ForeachSorted (var, sorter, userdata, sortedlist)
Sorting need to be moved to the UI (Lua) side
Global AIR_GeoSelectAircraft_f (void)
temporary action id should be removed
Global AIR_GetAircraftFromBaseByIDXSafe (const base_t *base, int index)
Remove this! Aircraft no longer have local index per base
Global AIR_GetDestinationWhilePursuing (const aircraft_t *shooter, const aircraft_t *target, vec2_t dest)
only compute this calculation every time target changes destination, or one of the aircraft speed changes.
See also
AIR_SendAircraftPursuingUFO
UFO_SendPursuingAircraft
add EQUAL_EPSILON here?
Global AIR_PostLoadInitMissions (void)
UFO_RemoveFromGeoscape call doesn't notify other systems (aircraft, base defences, sam sites, radar) about the removal of the UFO. Destroying UFOs should get a dedicated function with all necessary notify-callbacks called
Global AIR_ShowChangeHomebaseAircraft_f (void)
Temporary callback. Need to rewrite change homebase popup also
Global aircraft_s::pos
change to vec2_t - this is long/lat
Global aircraftItemType_t
move into campaign only structure
Global aircraftParams_t
move into campaign only structure
Global aircraftProjectile_s::idx
: is this really needed?
Global aircraftProjectile_s::pos [MAX_MULTIPLE_PROJECTILES]
why vec3_t this is long/lat
Global AIRFIGHT_ExecuteActions (const campaign_t *campaign, aircraft_t *shooter, aircraft_t *target)

Implement me and display an attack popup.

This should be calculated only when target destination changes, or when aircraft speed changes.

See also
AIR_GetDestination
Global AIRFIGHT_LoadXML (xmlNode_t *parent)

0 as default might be incorrect

0 as default might be incorrect

Global AIRFIGHT_ProbabilityToHit (const aircraft_t *shooter, const aircraft_t *target, const aircraftSlot_t *slot)
This probability should also depend on the pilot skills, when they will be implemented.
Global AlienContainment::isLifeSupported (const teamDef_t *team)
find a way that doesn't need a tech ID hardcoded
Global AM_CalculateTeamScores (autoMissionBattle_t *battle)
speaking names please
Global AM_DisplayResults (const autoMissionBattle_t *battle)
results should be set in missionResult and this code should be merged with manual mission result screen code, possibly in a new file: cp_mission_callbacks.c/h
Global AM_DoFight (autoMissionBattle_t *battle)
Drop this if and implement correct weapon/attack strength checks
Global ammoStatus_t
do we still need this?
Global autoUnit_t
add attack and defence scores
Global autoUnit_t
add attack and defence scores
Global B_AssembleMap (char *maps, size_t mapsLength, char *coords, size_t coordsLength, const base_t *base)

Search a empty field and add a alien craft there

If a building is still under construction, it will be assembled as a finished part. Otherwise we need mapparts for all the maps under construction.

Global B_BaseInit_f (void)
integrate building status tooltips from B_CheckBuildingStatusForMenu_f into this one
Global B_BuildBase_f (void)
Why is this needed? Also see bug #5401
Global B_BuildFromTemplate (base_t *base, const char *templateName, bool hire)
if there is no more space for mandatory building, remove a non mandatory one or build mandatory ones first
Global B_BuildingDestroy_f (void)
: make base destroyable by destroying entrance
Global B_BuildingOpenAfterClick_f (void)
Move it to Lua
Global B_Delete (base_t *base)
A lot more could be extracted here from B_Destroy
Global B_Destroy (base_t *base)
Destroy the base. For this we need to check all the dependencies and references. Should be only done after putting bases into a linkedList
Global B_GetBuildingTemplate (const char *buildingName)
make the returned pointer const
Global B_GetBuildingTemplateSilent (const char *buildingName)
make the returned pointer const
Global B_InitCallbacks (void)
unify the names into mn_base_*
Global B_LoadXML (xmlNode_t *parent)
save it as vec2t if needed, also it's opposite
Global B_MoveAircraftOnGeoscapeToOtherBases (const base_t *base)

this should be merged into CAP_RemoveAircraftExceedingCapacity

Pilot skills; really kill pilot in this case?

Global B_SaveXML (xmlNode_t *parent)
save it as vec2t if needed, also it's opposite
Global B_ShutdownCallbacks (void)
unify the names into mn_base_*
Global base_s::map [BASE_SIZE][BASE_SIZE]
maybe integrate BASE_INVALID_SPACE and BASE_FREE_SPACE here?
Global BREATHINGAPPARATUS_TECH
cp_research.h would be enough but it has an unresolved depenency on cp_camapign.h
Global BrushMostlyOnSide (const bspbrush_t *brush, const plane_t *plane)
Or vice versa?
Global BS_Buy_f (void)
warn if player can buy less item due to available credits?
Global BS_BuyUGV (const ugv_t *ugv, base_t *base)
Implement this correctly once we have UGV
Global BS_SellUGV (Employee *robot)

Implement this correctly once we have UGV

message - Couldn't fire employee.

Global BS_ShowInfo_f (void)

show specialized info about PHALANX aircraft

show specialized info about PHLANX UGVs

Global capturedNode
think about replacing it by a boolean. When capturedNode != nullptr => hoveredNode == capturedNode it create unneed case
Global Cbuf_InsertText (const char *text)
actually change the command buffer to do less copying
Global ccs_s::mapAction
eliminate or move into Lua UI scripts
Global cgame_import_s::r_xviAlpha
: remove me
Global cgame_import_t
define the import interface
Global cgame_import_t
define the import interface
Global CHAR_ShouldUpdateSoldierRank (const rank_t *rank, const character_t *chr)
(Zenerka 20080301) extend ranks and change calculations here.
Global CHAR_UpdateStats (const base_t *base, const aircraft_t *aircraft)
use chrScore_t to determine negative influence on soldier here, like killing too many civilians and teammates can lead to unhire and disband such soldier, or maybe rank degradation.
Global Check_InfoStartAligned (const entityDef_t *ed, const entity_t *e)
check for brush intersection as well as alignment, and move to a good position if bad.
Global checkcount
not thread safe
Global CheckMixedFaceContents (void)
at the moment only actorclip is removed if only set on less than half of the faces. there may be other contentflags that would benefit from this treatment
See also
ParseBrush
Global ChopWindingInPlace (winding_t **w, const vec3_t normal, const vec_t dist, const vec_t epsilon)
Why + 4?
Global ChopWindingInPlace (winding_t **w, const vec3_t normal, const vec_t dist, const vec_t epsilon)
Why + 4?
Global chrScoreGlobal_s::experience [SKILL_NUM_TYPES+1]
What are the mins and maxs for these values
Global chrScoreMission_s::kills [KILLED_NUM_TYPES]
use existing code
Global chrScoreMission_s::skillKills [SKILL_NUM_TYPES]
Check HEALING of others.
Global CHRSH_CharGenAbilitySkills (character_t *chr, bool multiplayer, const char *templateId="") __attribute__((nonnull))
Add modifiers for difficulty setting here!
Global CHRSH_CharGenAbilitySkills (character_t *chr, bool multiplayer, const char *templateId="") __attribute__((nonnull))
Add modifiers for difficulty setting here!
Global CIN_OGM_OpenCinematic (struct cinematic_s *cin, const char *filename)

vorbis/theora-header & init in sub-functions

"clean" error-returns ...

FIXME? can serialno be 0 in ogg? (better way to check initialized?)

support for more than one audio stream? / detect files with one stream(or without correct ones)

Global CIN_OGM_OpenCinematic (struct cinematic_s *cin, const char *filename)

vorbis/theora-header & init in sub-functions

"clean" error-returns ...

FIXME? can serialno be 0 in ogg? (better way to check initialized?)

support for more than one audio stream? / detect files with one stream(or without correct ones)

Global CL_ActorClientAction (const eventRegister_t *self, dbuffer *msg)
Hud should have a button that should be activated now
Global CL_ActorConditionalMoveCalc (le_t *le)
seems like this function is called before the TUs are set
Global CL_ActorDie (const eventRegister_t *self, dbuffer *msg)
CHRSH_IsTeamDefRobot: spawn smoke particles for robots
Global CL_ActorDoShoot (const eventRegister_t *self, dbuffer *msg)
Improve detection of left- or right animation.
See also
EV_ACTOR_SHOOT
Global CL_ActorDoThrow (const eventRegister_t *self, dbuffer *msg)
add victim support for blood and hurt sounds
Global CL_ActorMouseTrace (void)
Shouldn't we check the return value of CM_TestLineDM here - maybe we don't have to do the second Grid_Fall call at all and can save a lot of traces
Global CL_ActorStartShoot (const eventRegister_t *self, dbuffer *msg)
Improve detection of left- or right animation.
See also
EV_ACTOR_START_SHOOT
Global CL_ActorUseHeadgear_f (void)
make this a variable somewhere?
Global CL_AddActor (le_t *le, entity_t *ent)
Better value for this?
Global CL_AddUGV (le_t *le, entity_t *ent)
Global CL_BattlescapeRadarGenerateAllRelease_f (void)
allow to call UI_TimerRelease into timer callback
Global CL_BattlescapeRadarMapInFrameBuffer (int *x, int *y, int *width, int *height)

fix that function, map is not well captured

viddef.context should be removed

Global CL_ChangeSkin_f (void)

Get the skin id from the model by using the actorskin id

Or remove skins from models and convert character_t->skin to string

Global CL_ChangeSkinForWholeTeam_f (void)

What happens if a model of a team member does not have the selected skin?

Get the skin id from the model by using the actorskin id

Or remove skins from models and convert character_t->skin to string

Global CL_CharacterSkillAndScoreCvars (const character_t *chr)
: replace this cvar hell with confuncs
Global CL_EndRoundAnnounce (const eventRegister_t *self, dbuffer *msg)
Build into hud
Global CL_FinishHTTPDownload (void)
technically i shouldn't need to do this as curl will auto reuse the existing handle when you change the URL. however, the handleCount goes all weird when reusing a download slot in this way. if you can figure out why, please let me know.
Global CL_FixActorSkinIDX (int idx)
we should check somewhere there is at least 1 skin
Global CL_GetHitProbability (const le_t *actor)

The hit probability should work somewhat differently for splash damage weapons. Since splash damage weapons can deal damage even when they don't directly hit an actor, the hit probability should be defined as the predicted percentage of the maximum splash damage of the firemode, assuming the projectile explodes at the desired location. This means that a percentage should be displayed for EVERY actor in the predicted blast radius. This will likely require specialized code.

use LE_FindRadius

Global CL_GetSkillIndicator (const character_t *chr, abilityskills_t skill)

This currently always uses exactly the first two firemodes (see fmode1+fmode2) for calculation. This needs to be adapted to support less (1) or more 3+ firemodes. I think the function will even break on only one firemode .. never tested it.

i think currently also the different ammo/firedef types for each weapon (different weaponr_fd_idx and weaponr_fd_idx values) are ignored.

Global CL_GetTipOfTheDay_f (void)
not his role, remove it when its possible
Global CL_HudRadarDown_f (void)
only call/register it when we are on the battlescape
Global CL_HudRadarUp_f (void)
only call/register it when we are on the battlescape
Global CL_InvAddTime (const struct eventRegister_s *self, dbuffer *msg, eventTiming_t *eventTiming)
but if the dying actor didn't have any item in its inventory this event won't be sent, the next unrelated EV_INV_ADD event might be badly scheduled
Global CL_ParticleFunction (ptl_t *p, ptlCmd_t *cmd)
make the children boolean configurable
Global CL_ParticleLoadArt (ptlArt_t *a)
Support the frame data from ptlArt_t for models, too
Global CL_PopupInterceptClick_f (void)
are these newlines really needed? at least the first should be handled by the menu code
Global CL_PrecacheCharacterModels (float alreadyLoadedPercent)
Does not precache armoured models
Global CL_SetRatioFilter_f (void)
We should check the ratio list and remove matched resolutions, here it is a hack
Global CL_Shutdown (void)
this is a callback from Sys_Quit and Com_Error. It would be better to run quit through here before the final handoff to the sys code.
See also
Sys_Quit
CL_Init
Global CL_SoundEvent (const eventRegister_t *self, dbuffer *msg)

render

render

Global CL_StartHTTPDownload (dlqueue_t *entry, dlhandle_t *dl)
use the FS_OpenFile function here
Global CL_TargetingGrenade (const pos3_t fromPos, actorSizeEnum_t fromActorSize, const pos3_t toPos)
character strength should be used here, too the stronger the character, the further the throw
Global CL_TargetingStraight (const pos3_t fromPos, actorSizeEnum_t fromActorSize, const pos3_t toPos)

is this really needed for straight targetting? - for grenades, yes, but not for straight no? cl_worldlevel->integer should be enough here

is this really needed for straight targetting? - for grenades, yes, but not for straight no? cl_worldlevel->integer should be enough here

Global clientBattleScape_s::numMapParticles
make this private to the particle code
Global ClumpOrder (const void *a, const void *b)
Morton order comparison to improve clusterization after sorting (beware the black magic)
Global CM_GetVisibility (const mapTiles_t *mapTiles, const pos3_t position)
implement me
Global CM_HintedTransformedBoxTrace (MapTile &tile, const Line &traceLine, const AABB &traceBox, const int headnode, const int brushmask, const int brushrejects, const vec3_t origin, const vec3_t angles, const vec3_t rmaShift, const float fraction)
figure out how to do this with existing angles
Global CM_HintedTransformedBoxTrace (MapTile &tile, const Line &traceLine, const AABB &traceBox, const int headnode, const int brushmask, const int brushrejects, const vec3_t origin, const vec3_t angles, const vec3_t rmaShift, const float fraction)
figure out how to do this with existing angles
Global Cmd_ExecuteString (const char *text,...)
lookupnoadd the token to speed search?
Global Cmd_GetCommandDesc (const char *command)
- search alias, too
Global Cmd_GetCommandDesc (const char *command)
- search alias, too
Global CMod_LoadLighting (MapTile &tile, const byte *base, const lump_t *lump)
Implement this
Global CMod_LoadRouting (MapTile &tile, mapData_t *mapData, const byte *base, const char *name, const lump_t *lump, const int sX, const int sY, const int sZ)

TEST z-level routing

this eats a lot of memory - load directory into mapData->map

Global colorDefault

it may be nice to vectorise that

it may be nice to vectorise that

Global Com_GetRandomMapAssemblyNameForCrashedCraft (const char *craftID)
implement this in a better way
Global Com_GrenadeTarget (const vec3_t from, const vec3_t at, float speed, bool launched, bool rolled, vec3_t v0)

refactor and move me

Com_GrenadeTarget() is called from CL_TargetingGrenade() with speed param as (fireDef_s) fd->range (gi.GrenadeTarget, too), while it is being used here for speed calculations - a bug or just misleading documentation?

See also
CL_TargetingGrenade
Global Com_ParseValue (void *base, const char *token, valueTypes_t type, int ofs, size_t size, size_t *writtenBytes)
This function has much in common with Com_SetValue. Refactor them !
Global COMP_ParseComponents (const char *name, const char **text)
Set item links to NONE if needed
Global CON_FlushIn (void)
relevant?
Global ConstructLevelNodes_r (const int levelnum, const AABB &partBox, int entityNum)
better algo to chose a split position - could force all splits to make continuous grid, for example
Global CP_AddCampaignCallbackCommands (void)
callbacks should be registered on menu push (what about sideeffects for commands that are called from different menus?)
See also
CP_AddCampaignCommands
CP_RemoveCampaignCallbackCommands
Global CP_AddRadarCoverage (const vec2_t pos, float innerRadius, float outerRadius, bool source)
add EQUAL_EPSILON here?
Global CP_AddWeaponAmmo (equipDef_t *ed, Item *item)

We may want to change this to use the type->ammo[] info.

on return from a mission with no clips left and one weapon half-loaded wielded by soldier and one empty in equip, on the first opening of equip, the empty weapon will be in soldier hands, the half-full in equip; this should be the other way around.

We may want to change this to use the type->ammo[] info.

File cp_airfight.cpp
Somehow i need to know which alien race was in the ufo we shoot down I need this info for spawning the crash site
See also
CP_CreateBattleParameters
Global CP_AttackUFOCarrier_f (void)
until we have the carrier mission fully implemented, this is the campaign end
Global CP_BaseAttackPrepareBattle (mission_t *mission)
remove me - this is not needed because we are using the base->aircraftCurrent pointer for resolving the aircraft - only Autocombat needs this
Global CP_BaseAttackStartMission (struct mission_s *mission)
handle command centre properly
Global CP_BaseAttackStartMission (struct mission_s *mission)
handle command centre properly
Global CP_BuildBaseGovernmentLeave (const campaign_t *campaign, mission_t *mission)
when the mission is created, we should select a position where nation exists, otherwise subverting a government is meaningless
Global CP_CheckLostCondition (const campaign_t *campaign)
Should we make the campaign lost when a player loses all his bases? until he has set up a base again, the aliens might have invaded the whole world ;) - i mean, removing the credits check here.
Global CP_CreateCivilianTeam (const mission_t *mission, battleParam_t *param)
There should always be a nation, no? Otherwise the mission was placed wrong.
Global CP_EndRescueMission (struct mission_s *mission, aircraft_t *aircraft, bool won)
it should be dumped to the cargo loot of the dropship done the rescue mission not the base directly
Global CP_EndRescueMission (struct mission_s *mission, aircraft_t *aircraft, bool won)
it should be dumped to the cargo loot of the dropship done the rescue mission not the base directly
Global CP_GetRandomPosOnGeoscapeWithParameters (vec2_t pos, const linkedList_t *terrainTypes, const linkedList_t *cultureTypes, const linkedList_t *populationTypes, const linkedList_t *nations)

- cache the counted hits

add EQUAL_EPSILON here?

Global CP_HandleNationData (float minHappiness, mission_t *mis, const nation_t *affectedNation, const missionResults_t *results, bool won)

Scoring should eventually be expanded to include such elements as infected humans and mission objectives other than xenocide.

HACK: This should be handled properly, i.e. civilians should only factor into the scoring if the mission objective is actually to save civilians.

The score for aliens should be dependent on the mission objective. In a mission that has a special objective, the amount of killed aliens should only serve to increase the score, not reduce the penalty.

Global CP_HarvestMissionGo (struct mission_s *mission)
Remove me when CP_XVIMissionGo will be implemented This function should take a location close to an XVI infection point see gameplay proposal on wiki
Global CP_HarvestMissionGo (struct mission_s *mission)
Remove me when CP_XVIMissionGo will be implemented This function should take a location close to an XVI infection point see gameplay proposal on wiki
Global CP_InitStartup (void)
remove me and move all the included stuff to proper places
File cp_messageoptions_callbacks.cpp
Remove direct access to nodes
Global CP_MissionEnd (const campaign_t *campaign, mission_t *mission, const battleParam_t *battleParameters, bool won)
replace HP check with some CHRSH->IsDead() function
Global CP_OnGeoscape (void)
This relies on scripted content. Should work other way!
File cp_overlay.cpp
update the alpha values for radar like the ones for the xvi map - it's much faster like this
Global CP_ParseResearchableCampaignStates (const campaign_t *campaign, const char *name, const char **text, bool researchable)
Mark unresearchable
Global CP_RemoveCampaignCallbackCommands (void)
callbacks should be removed on menu pop (what about sideeffects for commands that are called from different menus?)
See also
CP_AddCampaignCommands
CP_RemoveCampaignCallbackCommands
File cp_research.cpp
comment on used global variables.
Global CP_SecondConvert (int second)
Abstract the code into an extra function (DateConvertSeconds?) see also CP_DateConvertLong
Global CP_Shutdown (void)
Where does this belong?
Global CP_SpawnRescueMission (aircraft_t *aircraft, aircraft_t *ufo)

Don't spawn rescue mission every time! It should depend on pilot's manoeuvring (piloting) skill

don't "kill" everyone - this should depend on luck and a little bit on the skills

find out what to do in this case

File cp_transfer.cpp
Remove direct access to nodes
File cp_ufopedia.cpp

Split the mail code into cl_mailclient.c/h

Remove direct access to nodes

Global CP_UFORemoveFromGeoscape (mission_t *mission, bool destroyed)
remove me once the ufo list is a linked list
Global craftItem
move into campaign only structure
Global craftItem
move into campaign only structure
Global csi_s::alienTeams [MAX_TEAMS_PER_MISSION]
this does not belong here - this is only static data that is shared
Global csi_s::damStunGas
Maybe even make a differentiation between aliens/humans here?
Global currentTransferType
move this into Lua UI
Global Cvar_InfoValidate (const char *s)
This allows for Cvar identifier names containing spaces. This is probably unwanted so best to extent the check with whitespace.
Global dataExtraData_s::number
Add it again when "string" from uiNode_t is removed / or property "string" from abstract node char* string;
Global dateLong_s::hour
check what number-range this gives)
Global defaultMaterial
load this from file, will make tweaking the game much easier
Global do_accept (SOCKET sock)
close stream?
Global Door_Use (Edict *door, Edict *activator)
Check if the door can be opened or closed - there should not be anything in the way (e.g. an actor)
Global E_EmployeeList_f (void)
replace magic numbers - use confuncs
Global E_GetEmployeeType (const char *type)
use cgi->Com_ConstInt*
Global E_HireEmployee (base_t *base, Employee *employee)

handle EMPL_ROBOT capacities here?

shouldn't we link CID_EQUIP here already to the base inventory equip container?

Global E_InitialEmployees (const campaign_t *campaign)
don't use hardcoded UGV ids
Global ED_ParseField (const char *key, const char *value, Edict *ent)
This (maxteams) should also be handled server side - currently this is only done client side
Global Edict::isOpponent (const Actor *actor) const
Should we really know if the other actor is controlled by the other team (STATE_XVI)? aliens would of course know if an actor is infected (becomes part of the hive mind), but humans?
Global Employee::unhire ()
handle EMPL_ROBOT capacities here?
Global entityNum
userdata for ProcessLevel thread
Global FS_CopyFile (const char *fromOSPath, const char *toOSPath)
Allow copy of pk3 file content
Global FS_GetMaps (bool reset)
paths are normalized here?
Global G_ActorDieOrStun (Actor *actor, Edict *attacker)
Discuss whether stunned actor should really drop everything to floor. Maybe it should drop only what he has in hands? Stunned actor can wake later during mission.
Global G_ActorDoTurn (Edict *ent, byte dir)
If performing an action, ensure the actor is facing the direction needed to perform the action if needed (climbing ladders).
Global G_ActorFall (Edict *ent)
Handle cases where the grid position the actor would fall to is occupied by another actor already.
Global G_ActorInvMove (Actor *actor, const invDef_t *from, Item *fItem, const invDef_t *to, int tx, int ty, bool checkaction)
what if we don't have enough TUs after subtracting the reserved ones?
Global G_ActorInvMove (Actor *actor, const invDef_t *from, Item *fItem, const invDef_t *to, int tx, int ty, bool checkaction)
what if we don't have enough TUs after subtracting the reserved ones?
Global G_ActorRevitalise (Actor *actor)
have a look at the morale value of the actor and maybe get into rage or panic?
Global G_ClientAssignDefaultActorValues (Actor *actor)
for now, heal fully upon entering mission
Global G_ClientConnect (Player *player, char *userinfo, size_t userinfoSize)
Check if the teamnum preference has already reached maxsoldiers and reject connection if so
Returns
false if the connection is refused, true otherwise
Global G_ClientMove (const Player &player, int visTeam, Actor *actor, const pos3_t to)
Handle dazed via trigger_hurt
Global G_ClientShoot (const Player &player, Actor *actor, const pos3_t at, shoot_types_t shootType, fireDefIndex_t firemode, shot_mock_t *mock, bool allowReaction, int z_align)

check for direct shot / splash damage shot?

This really needs an overhaul.And it might get dumped completely when Feature Request "[1814158] Extended shot-definitions in firedef" https://sourceforge.net/tracker/?func=detail&atid=805245&aid=1814158&group_id=157793 gets implemented.

Global G_ClientUseEdict (const Player &player, Actor *actor, Edict *door)
Do we have to change the trigger position here, too? I don't think this is really needed.
See also
CL_ActorUse
G_UseEdict
Global G_ClientUseEdict (const Player &player, Actor *actor, Edict *door)
Do we have to change the trigger position here, too? I don't think this is really needed.
See also
CL_ActorUse
G_UseEdict
Global G_Damage (Edict *target, const fireDef_t *fd, int damage, Actor *attacker, shot_mock_t *mock, const vec3_t impact)
there should be a possible protection, too
Global G_FireAffectedSurface (const cBspSurface_t *surface, const fireDef_t *fd)
Such function should check notonly fire - it should be generic function to check surface vulnerability for given damagetype.
Global G_GetPlayerForTeam (int team)
What if there are multiple players for a team (multiplayer coop match)
Global G_GetTeam (Player &player)
Check whether there are enough free spawnpoints in all cases
Global G_MatchEndCheck (void)

count from 0 to get the civilians for objectives

< 2 does not work when we count civilians

Global G_MissionTouch (Edict *self, Edict *activator)
use level.nextmap to spawn another map when every living actor has touched the mission trigger
Note
Don't set a client action here - otherwise the movement event might be corrupted
Global G_ShootSingle (Actor *ent, const fireDef_t *fd, const vec3_t from, const pos3_t at, int mask, const Item *weapon, shot_mock_t *mock, int z_align, int i, shoot_types_t shootType, vec3_t impact)
reduce even more if the wall was hit far away and not close by the shooting actor
Global G_SpawnFieldGroup (const entity_type_t fieldtype, const vec3_t vec, const char *particle, int rounds, int damage, vec_t radius)
Does '2 rounds' mean: created in player's turn, last through the aliens turn, vanish before the 2nd player's turn ??
Parameters
[in]damageThe damage dealt by the field
[in]radiusThe max distance of a cell from the center to get a particle
Global G_SpawnSmokeField (const vec3_t vec, const char *particle, int rounds, int damage, vec_t radius)
Does '2 rounds' mean: created in player's turn, last through the aliens turn, vanish before the 2nd player's turn ??
Parameters
[in]damageThe amount of damage this field will cause when touched by an actor.
[in]radiusThe max distance of a cell from the center to get a particle
Global G_SplashDamage (Actor *ent, const fireDef_t *fd, vec3_t impact, shot_mock_t *mock, const trace_t *tr)
splash might also hit other surfaces and the trace doesn't handle that
Global G_TreatActor (Actor *target, const fireDef_t *const fd, const int heal, const int healerTeam)
According to specs it should only be possible to use the medikit to keep an alien sedated when 'live alien' is researched, is it possible to find if a tech is researched here?
Global G_UpdateStunState (int team)
Make this depend on the character-attributes.
Global GAME_CP_Drop (void)
maybe create a savegame?
Global GAME_EndRoundAnnounce (int playerNum, int team)
do we need the team number here? isn't the playernum enough to get the team?
Global GAME_GetImportData (const cgameType_t *t)

add a wrapper here that stores the cgame command and removes them on shutdown automatically

add a wrapper here that stores the cgame cvars and removes them on shutdown automatically

Global GAME_LoadCharacter (xmlNode_t *p, character_t *chr)
Fallback compatibility code for older saves
Global GAME_MP_CompleteNetworkAddress (const char *partial, const char **match)
Extend this for all the servers on the server browser list
Global GAME_MP_InitStartup (void)
make equipment configurable for multiplayer
Global GAME_MP_ParseTeamInfoMessage (dbuffer *msg)
warning must not be into the player list. if we see this we are the first player that would be connected to the server
Global GAME_MP_StartServer_f (void)
implement different ufo and dropship support for multiplayer, too (see skirmish)
Global GAME_SaveItem (xmlNode_t *p, const Item *item, containerIndex_t container, int x, int y)
: is there any case when amount != 1 for soldier inventory item?
Global GAME_SK_Start_f (void)
make the teamdef configurable
Global GEO_AngleOfPath3D (const vec2_t start, const vec2_t end, vec3_t direction, vec3_t ortVector)
Save the value angle instead of direction: we don't need a vector here, we could just compare angle to current angle.
Global GEO_Click (const uiNode_t *node, int x, int y, const vec2_t pos)
make this a function in cp_base.c - B_BuildBaseAtPos
Global GEO_DrawMapOnePhalanxAircraft (const uiNode_t *node, aircraft_t *aircraft, bool oneUFOVisible)

: check why path.numPoints can be sometime equal to -1

we should only show healthbar if the aircraft is fighting but it's a slow algo

Global GEO_DrawMarkers (const uiNode_t *node)
we should only show healthbar if aircraft is fighting but it's a slow algo
Global GEO_GetColor (const vec2_t pos, mapType_t type, bool *coast)
add EQUAL_EPSILON here?
Global GEO_NotifyUFORemoved (const aircraft_t *ufo, bool destroyed)
convert to linked list
Global GET_ACC (ab, sk, pn)
Skill-influence needs some balancing.
Global GL_READ_FRAMEBUFFER_EXT
update SDL to version that includes these
Global Grid_Fall (const Routing &routing, const actorSizeEnum_t actorSize, const pos3_t pos)
if an actor can fly, then set this to true.
Global HashVec (const vec3_t vec)
Fix this to support the full bsp level bounds
Global HUD_CheckCLHud (cvar_t *cvar)
check for multiple base classes
Global HUD_DisplayActions_f (void)
we can extend it with short cut equip action, more reload, action on the map (like open doors)...
Global HUD_DisplayImpossibleReaction (const le_t *actor)
at the moment of writing, this should be impossible: reaction should be disabled whenever the actor loses its reaction weapon.
Global HUD_ExecuteAction_f (void)
extend it to open doors or things like that
Global HUD_GetLeftHandWeapon (const le_t *actor, containerIndex_t *container)
remove me
Global HUD_PopupFiremodeReservation (const le_t *le, bool popupReload)
use components and confuncs here
Global HUD_SetWeaponButton (buttonTypes_t button, weaponButtonState_t state)
This should be a confunc which also sets the tooltips
Global HUD_ShotReserve_f (void)
do this on the server
Global HUD_UsableReactionTUs (const le_t *le)
Maybe only return "reaction" value if reaction-state is active? The value should be 0, but one never knows :)
Global humanAircraftType_t
doesn't belong here, but AIRCRAFTTYPE_MAX is needed for the equipment definitions
Global IMAGE_WIDTH
Replace magic number 64 by some script definition
Global Info_ValueForKey (const char *s, const char *key)
Not thread safe
Global INS_FillTypes_f (void)
Move this out from installations code
Global INV_GetFilterFromItem (const objDef_t *obj)
need to implement everything
Global INV_ItemDescription (const objDef_t *od)

Do we need to add checks for od->isDummy here somewhere?

is there ammo with no firedefs?

Global INV_ItemMatchesFilter (const objDef_t *obj, const itemFilterTypes_t filterType)

Should we handle FILTER_AIRCRAFT here as well?

I guess we should search for components matching this item here.

Global Inventory::_getNextCont (const Container *prev) const
: convert into iterator
Global Inventory::canHoldItem (const invDef_t *container, const objDef_t *od, const int x, const int y, const Item *ignoredItem) const
aren't both (equip and floor) temp container?
Global Inventory::findSpace (const invDef_t *container, const Item *item, int *const px, int *const py, const Item *ignoredItem) const
optimize for single containers
Global Inventory::getContainer2 (const containerIndex_t idx) const
this should return a reference - can't be null
Global Inventory::getEquipContainer () const
this should return a reference - can't be null
Global Inventory::getFloorContainer () const
this should return a reference - can't be null
Global Inventory::getHolsterContainer () const
this should return a reference - can't be null
Global Inventory::getLeftHandContainer () const
this should return a reference - can't be null
Global Inventory::getNextCont (const Container *prev, bool inclTemp=false) const
convert into iterator
Global Inventory::getRightHandContainer () const
this should return a reference - can't be null
Global InventoryInterface::moveInInventory (Inventory *const inv, const invDef_t *from, Item *item, const invDef_t *to, int tx, int ty, int *TU, Item **icp)
change the other code to browse through these things.
Global InventoryInterface::removeFromInventory (Inventory *const inv, const invDef_t *container, Item *fItem) __attribute__((warn_unused_result))
the problem here is, that in case of a move inside the same container the item don't just get updated x and y values but it is tried to remove one of the items => crap - maybe we have to change the inventory move function to check for this case of move and only update the x and y coordinates instead of calling the add and remove functions
Global Irc_Client_CmdRplEndofnames (const char *params, const char *trailing)
Implement me
Global Irc_GetExternalIP (const char *externalIP, void *userdata)
Maybe somehow check the version of the client with ctcp VERSION and only send to those, that are connected with ufoai and have a correct version
Global Irc_Logic_Frame (void)
do this without disconnect, connect
Global Irc_Proto_Enqueue (const char *msg, size_t msg_len)
strip high bits - or unprintable chars
Global Irc_Proto_ProcessServerMsg (const irc_server_msg_t *msg)
Skip non printable chars here
Global Key_Console (int key, int unicode)
use isprint here?
Global Key_KeynumToString (int keynum)
handle quote special (general escape sequence?)
See also
Key_StringToKeynum
use isprint here?
Global keyBindings [K_KEY_SIZE]
To support international keyboards nicely, we will need full support for binding to either
  • a unicode value, however achieved
  • a key
  • modifier + key with a priority system to decide which to try first. This will mean that cleverly-hidden punctuation keys will still have their expected effect, even if they have to be pressed as Shift-AltGr-7 or something. At the same time, it allows key combinations to be bound regardless of what their translated meaning is, so that for example Shift-4 can do something with the 4th agent regardless of which punctuation symbol is above the 4.
Global LE_AddProjectile (const fireDef_t *fd, int flags, const vec3_t muzzle, const vec3_t impact, int normal, le_t *leVictim)
Special particles for stun attack (mind you that there is electrical and gas/chemical stunning)?
Global LE_PlaySoundFileAndParticleForSurface (le_t *le, const char *textureName)
use the Grid_Fall method (ACTOR_SIZE_NORMAL) to ensure, that the particle is drawn at the ground (if needed - maybe the origin is already ground aligned)
Global LE_Unlock (le_t *le)
If the event loop ever becomes multithreaded, this should be a real mutex lock.
Global LEAFNODE
replace this with CONTENTS_NODE?
Global LET_HiddenMove (le_t *le)
Is there something we should do here?
Global LET_Projectile (le_t *le)
Special particles for stun attack (mind you that there is electrical and gas/chemical stunning)?
Global LET_RotateDoor (le_t *le, int speed)
lerp the rotation
Global lineChartExtraData_t
add info about axes min-max...
Global lineChartExtraData_t
add info about axes min-max...
Global LINEHEIGHT
use the font height?
Global LIST_Add (linkedList_t **list, void const *data, size_t length)
Optimize this to not allocate memory for every entry - but use a hunk
Global LIST_Add (linkedList_t **list, void const *data, size_t length)
Optimize this to not allocate memory for every entry - but use a hunk
Global LIST_AddPointer (linkedList_t **listDest, void *data)
Optimize this to not allocate memory for every entry - but use a hunk
Global LIST_AddString (linkedList_t **list, const char *data)
Optimize this to not allocate memory for every entry - but use a hunk
Global LIST_AddString (linkedList_t **list, const char *data)
Optimize this to not allocate memory for every entry - but use a hunk
Global LIST_PrependString (linkedList_t **listDest, const char *data)
Optimize this to not allocate memory for every entry - but use a hunk
Global listBlock_t
This block list code is broken in terms of filename order To see the bug reduce the FL_BLOCKSIZE to 1024 and verify the order of the filenames FS_NextScriptHeader gives you - you will see that the last files will be in reversed order
Global listBlock_t
This block list code is broken in terms of filename order To see the bug reduce the FL_BLOCKSIZE to 1024 and verify the order of the filenames FS_NextScriptHeader gives you - you will see that the last files will be in reversed order
Global LM_AddToSceneOrder (bool parents)
what if the tagent is not rendered due to different level flags?
Global M_Change_f (void)
Make the music a scriptable list
Global main (int argc, char **argv)
see https://sourceforge.net/tracker/?func=detail&aid=2993773&group_id=157793&atid=805242
Global mapData_s::reroute [ACTOR_MAX_SIZE][PATHFINDING_WIDTH][PATHFINDING_WIDTH]
not threadsafe
Global markResearched_t
MAX_CAMPAIGNS is not defined unless cp_campaign.h is included before
Global markResearched_t
MAX_CAMPAIGNS is not defined unless cp_campaign.h is included before
Global messageStack
implement this on a per-node basis
Global MIN_TILE_SIZE
take this datum from the correct place
Global MIS_GeoSelectMission_f (void)
Move this popup from cp_popup and rebuild
Global MIS_GetModel (const mission_t *mission)
we have two different alienbase models
Global MSO_LoadXML (xmlNode_t *parent)
(menu) check why this message is not shown anywhere in logs
Global MSO_LoadXML (xmlNode_t *parent)
(menu) check why this message is not shown anywhere in logs
Global MSO_Toggle_f (void)
move this into scripts
Global MSO_UpdateVisibleButtons (void)
move this into scripts
Global NAT_BackupMonthlyData (void)
other stuff to back up?
Global NAT_HandleBudget (const campaign_t *campaign)
This is very redundant with STATS_Update_f. Investigate and clean up.
Global NAT_SetHappiness (const float minhappiness, nation_t *nation, const float happiness)
need to more specific message
Global nationInfo_t
Maybe we should also move the "funding" stuff (see nation_t) in here? It is static right now though so i see no reason to do that yet.
Global nationInfo_t
Maybe we should also move the "funding" stuff (see nation_t) in here? It is static right now though so i see no reason to do that yet.
Global NET_Connect (const char *node, const char *service, stream_onclose_func *onclose)
What about a timeout
Global NET_DatagramBroadcast (struct datagram_socket *s, const char *buf, int len, int port)
This is only sending on the first available device, what if we have several devices?
Global node_s::area
not used, remove it when we change the bsp version the next time
Global OF ((unzFile file, unz_file_info *pfile_info, unz_file_info_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize))
Describe parameters and the two headers.
Global ogmCinematic_t::videoStreamIsXvid
atm there isn't really a check for this (all "video" streams are handled as xvid, because xvid support more than one "subtype")
Global pcmdData [MAX_PCMD_DATA]
check pcmdData overflow
Global PLAYER2x2_WIDTH
may need some tweaks.
Global PR_ProductionDecrease_f (void)
add (confirmaton) popup in case storage cannot take all the items we add back to it
Global PR_ProductionIncrease_f (void)

-) need to popup something like: "You need the following items in order to produce more of ITEM: x of ITEM, x of ITEM, etc..." This info should also be displayed in the item-info. -) can can (if possible) change the 'amount' to a vlalue that can be produced (i.e. the maximum amount possible).

this popup hides any previous popup, like popup created in PR_QueueNew

Global PR_ProductionListClick_f (void)
left click on spacer should either delete current selection or do nothing, not update visible selection but show old info
Global PR_ResetUFODisassembly (production_t *prod)
remove this and make the ufo const
Global PR_SaveXML (xmlNode_t *parent)
this should not be the base index
Global PR_SaveXML (xmlNode_t *parent)
this should not be the base index
Global PR_SetUFODisassembly (production_t *prod)
remove this and make the ufo const
Global PrecalcNormalsAndTangents (const char *filename)
currently md2 models only have one mesh - for md3 files this would get overwritten for each mesh
Global ProcessLevel (unsigned int levelnum)
Check what happens if two threads do the memcpy
Global PruneNodes_r (node_t *node)
free stuff
File q_shared.h
Apparently included by every file - unnecessary?
Global Q_strcasecmp (a, b)
is this still the case in most recent mingw versions?
Global Qcommon_Init (int argc, char **argv)
This line wants to be removed
Global R_AddLight (const vec3_t origin, float radius, const vec3_t color)
- integrate the particle-based lights into the new dynamic light system
Global R_AddLightToEntity (const vec_t *pos, lighting_t *ltng, const light_t *light, const float distSqr)

- the updating of the per-entity list of nearest lights doesn't necessarily need to be updated before every frame; if the list is a few frames (or even a few seconds) out of date, it would still probably look just fine. Ideally, this updating could be done in the background by a separate, low-priority thread that constantly looped through all the entities and updated their light lists, while the high-priority rendering thread just used the most up to date version available.

will caching VectorDistSqr() results improve the rendering speed?

Global R_CleanupDepthBuffer (int x, int y, int width, int height)
can we fix bigZ with a value come from glGet?
Global R_CreateFramebuffer (int width, int height, int ntextures, bool depth, bool halfFloat, unsigned int *filters)
also check if we are running on older (SM2.0) hardware, which doesn't support antialiased MRT
Global R_Draw3DGlobe (const vec2_t pos, const vec2_t size, int day, int second, const vec3_t rotate, float zoom, const char *map, bool disableSolarRender, float ambient, bool overlayNation, bool overlayXVI, bool overlayRadar, image_t *r_xviTexture, image_t *r_radarTexture, bool renderNationGlow)

render atmosphere glow even when postprocessing is disabled

Replace this magic number with some speaking constant

Global R_DrawAliasModel (entity_t *e)
this breaks the encapsulation - don't call CL_* functions from within the renderer code
Global R_DrawAliasModelBuffer (entity_t *e)
what about the origin of a tagged model here?
Global R_DrawBox (const entity_t *e)
fill one array
Global R_DrawBuffers (unsigned int n)
introduce enum or speaking constants for the buffer numbers that are drawn here and elsewhere
Global R_DrawBuffers (unsigned int n)
introduce enum or speaking constants for the buffer numbers that are drawn here and elsewhere
Global R_DrawEntityEffects (void)

use default_texcoords

use default_texcoords

Global R_DrawFill (int x, int y, int w, int h, const vec4_t color)
this shouldn't be here, but only called once at the end of the frame but this is needed here because a) we don't want them to get rendered on top of the console and b) the ui stuff relies on the order of these renderings
Global R_DrawFlareSurfaces (const mBspSurfaces_t *surfs, glElementIndex_t *indexPtr)
better GL state handling
Global R_DrawFloor (const entity_t *e)
use default_texcoords
Global R_DrawMaterialSurfaces (const mBspSurfaces_t *surfs, glElementIndex_t *indexPtr)
- integrate BSP lighting with model lighting
Global R_DrawQuad (void)
use default_texcoords
Global R_DrawSurfaces (const mBspSurfaces_t *surfs, glElementIndex_t *indexPtr)
integrate it better with R_SetSurfaceState - maybe cache somewhere in the mBspSurface_t ?
Global R_EnableGlowMap (const image_t *image)
Is the following condition correct or not? Either fix it or write the comment why it should be done that way
Global R_EnableModelLights (const light_t **lights, int numLights, bool inShadow, bool enable)

is it a good idea?

assert?

Global R_FillArrayData (mAliasModel_t *mod, mAliasMesh_t *mesh, float backlerp, int framenum, int oldframenum, bool prerender)
damn slow - optimize this
Global R_FindImage (const char *pname, imagetype_t type)
should also check the mipmapping
Global R_FindModel (const char *name)
this case should be useless, do we ever use extension?
Global R_FontAnalyze (const char *name, const char *path, int renderStyle, int size)
Check whether font is already loaded
Global R_FontDrawString (const char *fontId, align_t align, int x, int y, int absX, int maxWidth, int lineHeight, const char *c, int boxHeight, int scrollPos, int *curLine, longlines_t method)
This could be replaced with a set of much simpler interfaces.
Global R_FontFindFit (const font_t *font, char *text, int maxlen, int maxWidth, int *widthp)
Smart breaking of Chinese text
Global R_FontMakeChunks (const font_t *f, const char *text, int maxWidth, longlines_t method, int *lines, bool *aborted)
check for infinite recursion here
Global R_GenerateGrass ()
sometimes rounding error makes it to plant an extra clump which may overrun the vertex array, thus causing problems with OpenGL driver, should be fixed
Global R_LoadActorSkinsFromModel (mAliasMesh_t *outMesh, image_t *defaultSkin)
should we add warning here?
Global R_LoadBspVertexArrays (model_t *mod)

Don't use the buffers from r_state here - they might overflow

Decrease MAX_GL_ARRAY_LENGTH to 32768 again when this is fixed

Global R_LoadImageData (const char *name, const byte *pic, int width, int height, imagetype_t type)
Instead of this hack, unit tests' build should link to the dummy GL driver
Global R_LoadSurfacesArrays_ (model_t *mod)
only one allocation should be used here - allocate the whole array with one Mem_PoolAlloc call
Global R_ModelAutoScale (const vec2_t boxSize, modelInfo_t *mi, vec3_t scale, vec3_t center)
Take the rotation info from modelInfo_t into account
Global R_ModLoadAliasMD2MeshUnindexed (model_t *mod, const dMD2Model_t *md2, int bufSize, bool loadNormals)
Should we check skin image versus this size?
Global R_ModLoadAliasMD3Model (struct model_s *mod, byte *buffer, int bufSize)
the tag loading is broken - the order is different in the md3 file
Global R_ModLoadAliasMD3Model (struct model_s *mod, byte *buffer, int bufSize)
the tag loading is broken - the order is different in the md3 file
Global R_ModReloadSurfacesArrays (void)
fix this for threaded renderer mode
Global R_PlantGrass (Clump &clump)
use UNIT_SIZE and co defines here
Global R_RecursiveWorldNode (const mBspNode_t *node, int tile)
avoid being too precise, it's a waste of CPU time; possibly, granularity of 256x256x256 should be enough
Global R_RenderBspRRefs (drawSurfaceFunc drawFunc, surfaceArrayType_t surfType)
make it work again; also reimplement r_showbox 2
Global R_ResetArrayState (void)
proper logic for unbinding buffers
Global R_RunThread (void *p)
- update per-model dynamic light list sorting here
Global R_SetSurfaceStageState (const mBspSurface_t *surf, const materialStage_t *stage)
WTF? surely it was supposed to use the specular color
Global R_StageLighting (const mBspSurface_t *surf, const materialStage_t *stage)
fix it and enable it back for r_materials 1
Global R_StageVertex (const mBspSurface_t *surf, const materialStage_t *stage, const vec3_t in, vec3_t out)
implement this
Global R_UpdateLightList (entity_t *ent)

bad implementation – copying light pointers every frame is a very wrong idea

Replace this hack with something more legit (hack can cause bizarre stencil shadows if enabled)

what if origin is NOT inside aabb? then this estimate will not be conservative enough

clear caches when r_dynamic_lights cvar is changed OR always keep maximal # of static lights in the cache

Hack to avoid dropships being shadowed by lightclips placed at them. Should be removed once correct global illumination model is done

Global R_UpdateWeather (const char *cvarName, const char *oldValue, const char *newValue, void *data)
Some better way?
Global R_UseFramebuffer (const r_framebuffer_t *buf)
buf != &screenBuffer
Global RADAR_DeactivateRadarOverlay (void)
Is aircraft->radar cleared for crashed aircraft?
Global RandomMapAssemblyTest::testAssembly (const char *source, const unsigned int numRuns, const char *mapTheme, const char *mapAssembly)
the assemble thread sets a different seed
Global reservedTokens []
Use dichotomic search
Global RS_InitTree (const campaign_t *campaign, bool load)
Add a function to reset ALL research-stati to RS_NONE; -> to be called after start of a new game.
See also
CP_CampaignInit
Implement me
Global RS_LoadXML (xmlNode_t *parent)
this should be handled by the mail system
Global RS_MarkResearched (technology_t *tech, const base_t *base)
Base shouldn't be needed here - check RS_MarkResearchable() for that.
See also
RS_ResearchRun
Global RS_ParseTechnologies (const char *name, const char **text)
use cgi->Com_RegisterConstInt();
Global RS_RequirementsMet (const technology_t *tech, const base_t *base)
Add support for the "delay" value.
Global RS_ResearchRun (void)
Needs to check on the exact time that elapsed since the last check of the status.
See also
RS_MarkResearched
Returns
The amout of new researched technologies
Global RS_SaveXML (xmlNode_t *parent)
this should be handled by the mail system
Global RS_ScriptSanityCheck (void)
error++; Crafts still give errors - are there any definitions missing?
Global RT_AllCellsBelowAreFilled (const Routing &routing, const int actorSize, const pos3_t pos)
see CL_ActorMoveMouse
Global RunEffectForImplant (const fireDef_t &fd, character_t &chr, const implant_t &implant, const objDef_t &od, const itemEffect_t &effect)
perform tests
Global RunStrengthenImplant (character_t &chr, const implant_t &implant, const objDef_t &od)
perform tests
Global S_Init (void)
implement the volume change for already loaded sample chunks
Global SampleNormal (const lightinfo_t *l, const vec3_t pos, vec3_t normal)
Implement it (just clones the normal of nearest vertex for now)
Global SAVE_TRANSFER_ITEM
Remove: Fallback records for compatibility.
Global SCR_Init (void)
remove me - but this was an archive cvar once
File scriplib.cpp
Remove this and use parse.c
Global SEQ_Render2D (sequenceContext_t *context, bool backgroundObjects)

We need this check - but this does not work

use this for some nice line spacing

Global SEQ_Render3D (sequenceContext_t *context)
Models are not at the right position (relative to the node position). Maybe R_SetupFrustum erase matrix. Not a trivialous task.
Global sequences [MAX_SEQUENCES]
move it to cls?
Global shot_mock_s::self
incorrect actor facing or shotOrg, or bug in trace code?
Global SKILL_AWARD_SCALE
make these scripted in campaign definitions maybe
Global SL_BSPSlice (const TR_TILE_TYPE *model, float thickness, int scale, bool singleFile, bool multipleContour)
remove these values once the mins/maxs calculation works
Global SL_SliceTheWorld (const TR_TILE_TYPE *tile, const vec3_t mins, const vec3_t maxs, float stepsize, int scale, bool singleFile, bool multipleContour)
handle content flags
Global SP_civilian_target (Edict *ent)
These waypoints should be placeable by the human player (e.g. spawn a special particle on the waypoint) to direct the civilians to a special location
Global SP_misc_model (Edict *ent)
is fieldsize and forbidden list update really needed here?
Global SP_player_start (Edict *ent)
Wrong place here
Global SP_worldspawn (const localEntityParse_t *entData)

- make sun position/color vary based on local time at location?

Parse fog from worldspawn config

Global SplitBrush (const bspbrush_t *brush, uint16_t planenum, bspbrush_t **front, bspbrush_t **back)

Print brush and entnum either of the brush that was splitted or the plane that was used as splitplane

Print brush and entnum either of the brush that was split or the plane that was used as splitplane

Print brush and entnum either of the brush that was splitted or the plane that was used as splitplane

Print brush and entnum either of the brush that was splitted or the plane that was used as splitplane

Global STANDARD_3D_ZOOM
these are currently duplicated - remove this defines here
Global STAT_GetExpenses_f (void)
should have something like CP_GetCurrentCampaign
Global STATS_Update_f (void)
This is very redundant with NAT_HandleBudget Investigate and clean up.
Global Step::checkWalkingDirections (const pathing_t *path)

falling_height should be replaced with an arbitrary max falling height based on the actor.

actor_stepup_height should be replaced with an arbitrary max stepup height based on the actor.

Global Step::flier
flier should return true if the actor can fly.
Global Step::hasLadderSupport
has_ladder_support should return true if 1) There is a ladder in the new cell in the specified direction or 2) There is a ladder in any direction in the cell below the new cell and no ladder in the new cell itself.
Global Step::hasLadderToClimb
has_ladder_climb should return true if 1) There is a ladder in the new cell in the specified direction.
Global Step::init ()
actor_height is currently the fixed height of a 1x1 actor. This needs to be adjusted to the actor's actual height.
Global StringToFilter (const char *s, ipfilter_t *f)
find out if this printf is needed. Passing nullptr as a player would have crashed anyway.
Global STRUCT_MEMORY_ALIGN
Remove it and use something from compiler
File sv_clientstub.cpp
Calls to functions not required by the dedicated server should be surrounded by the DEDICATED_ONLY macro.
Global SV_MapcycleAdd (const char *mapName, bool day, const char *gameType)
check for maps and valid gametypes here
See also
SV_MapcycleClear
Global SV_ModLoadObjModel (sv_model_t *mod, const byte *buffer, int bufferLength)
implement me
Global SV_ParallelSearch (MapInfo *map)
Maybe we also need to reduce the timeout value a bit every time it succeeds?
Global SV_Trace (const Line &traceLine, const AABB &box, const edict_t *passedict, int contentmask)
There is more than one world in case of a map assembly - use clip.trace.mapTile to get the correct one
Global Sys_TTYConsoleShow (void)
need to position the cursor if needed?
Global Sys_TTYDeleteCharacter (void)
there may be a way to find out if '\b' alone would work though
Global teammask_t
make this a byte
Global technology_s::delay
Number in days the system should wait until the tech is available for research. Starting from the first time all other dependencies have been fulfilled and counting only if a day has passed and they still are met.
Global technologyDescriptions_s::usedDescription
Check if we should set this in the function that updates the research_proposals? Currently it's only in RS_GetDescription.
Global TEST_F (CampaignTest, testAircraftHandling)
we should not assume that initial base has aircraft. It's a campaign parameter
Global TEST_F (UILevel2Test, RuntimeError)
when it is possible, we should check error message but ATM we only check it dont crash
Global TEST_F (UILevel2Test, InheritedConfunc)
extend the text with inherited confunc from window (and not only from component)
Global TEST_F (CampaignTest, testCampaignDateHandling)
fix magic number
Global TEST_F (UILevel2Test, Binding)
unfortunately we can't use "bindui" or "press" commands in tests.
Global TEST_F (RendererTest, CharacterAnimationFiles)

remove this hack - but ugvs are just not ready yet

remove this hack - alientank is just not ready yet

Global TEST_F (CampaignTest, testNation)
implement a check here
Global TEST_F (ParserTest, ParserCommonType)

V_POS

V_VECTOR

V_COLOR

V_STRING

V_TRANSLATION_STRING

V_LONGSTRING

Global TEST_F (GameTest, Shooting)

equip the soldier

set the input variables – gi.ReadFormat(format, &pos, &i, &firemode, &from);

do the shot – G_ClientShoot(player, ent, pos, i, firemode, &mock, true, from);

implement the test here - e.g. extend shot_mock_t

Global TEST_F (CampaignTest, testMarket)
implement a check here
Global TEST_ParseScript (const char *scriptName)
move it somewhere
Global Touch_Breakable (Edict *self, Edict *activator)
check that the actor is standing upon the breakable
Global Touch_HurtTrigger (Edict *self, Edict *activator)
Handle dazed via trigger_hurt
Global tr
move this into ccs_t or somewhere else
Global TR_BoxTrace (boxtrace_t &traceData, const Line &traceLine, const AABB &traceBox, const int headnode, const float fraction)
Would Interpolating traceData.end to traceData.fraction and passing traceData.fraction instead of 1.0 make this faster?
Global TR_CargoList (void)
implement UGV transfers
Global TR_ClipBoxToBrush (boxtrace_t *traceData, cBspBrush_t *brush, TR_LEAF_TYPE *leaf)
special case for axial
Global TR_FillEmployees (const base_t *srcBase, const base_t *destBase)
implement UGV transfers
Global TR_List_f (void)
: add ugv listing when they're implemented
Global TR_TestBoxInBrush (boxtrace_t *traceData, cBspBrush_t *brush)
special case for axial
Global TR_TransferEnd (transfer_t *transfer)
what if source base is lost? we won't be able to unhire transferred employees.
Global UFO_CampaignCheckEvents (void)
present a popup with possible orders like: return to base, attack the ufo, try to flee the rockets
See also
UFO_SearchAircraftTarget
Global UFO_GeoSelectUFO_f (void)
Move this popup from cp_popup and rebuild
Global UFO_SearchAircraftTarget (const campaign_t *campaign, aircraft_t *ufo, float maxDetectionRange=MAX_DETECTING_RANGE)
present a popup with possible orders like: return to base, attack the ufo, try to flee the rockets
Global UI_AbstractOption_GetFirstOption (uiNode_t *node)
check versionId and update cached data, and fire events
Global UI_AbstractOption_SortOptions (uiNode_t *node)
the sort option should do it itself
Global UI_AddListener (uiNode_t *node, const value_t *property, uiNode_t const *functionNode)
It is a hack, we should remove that
Global UI_AddListener (uiNode_t *node, const value_t *property, uiNode_t const *functionNode)
It is a hack, we should remove that
Global UI_AllocNode (const char *name, const char *type, bool isDynamic)
Assert out when we are not in parsing/loading stage
Parameters
[in]nameName of the new node, else nullptr if we don't want to edit it.
[in]typeName of the node behavior
[in]isDynamicAllocate a node in static or dynamic memory
This method can be merged with UI_AllocNodeWithoutNew. Since all nodes are dynamic, there is no real reason to distinguish between types of allocation.
Global UI_AllocNodeWithoutNew (const char *name, const char *type, bool isDynamic)
Assert out when we are not in parsing/loading stage
Parameters
[in]nameName of the new node, else nullptr if we don't want to edit it.
[in]typeName of the node behavior
[in]isDynamicAllocate a node in static or dynamic memory
Global UI_AllocStaticColor (int count) __attribute__((warn_unused_result))
Assert out when we are not in parsing/loading stage
Global UI_AllocStaticColor (int count) __attribute__((warn_unused_result))
Assert out when we are not in parsing/loading stage
Global UI_AllocStaticFloat (int count) __attribute__((warn_unused_result))
Assert out when we are not in parsing/loading stage
Global UI_AllocStaticFloat (int count) __attribute__((warn_unused_result))
Assert out when we are not in parsing/loading stage
Global UI_AllocStaticSprite (const char *name) __attribute__((warn_unused_result))
Assert out when we are not in parsing/loading stage
Global UI_AllocStaticSprite (const char *name) __attribute__((warn_unused_result))
Assert out when we are not in parsing/loading stage
Global UI_AllocStaticString (const char *string, int size) __attribute__((warn_unused_result))
Assert out when we are not in parsing/loading stage
Global UI_AllocStaticString (const char *string, int size) __attribute__((warn_unused_result))
Assert out when we are not in parsing/loading stage
Global UI_CaptureDrawOver (uiNode_t *node)
it can be better to capture the draw over only one time (need new event like mouseEnter, mouseLeave)
Global UI_CloneNode (const uiNode_t *node, uiNode_t *newWindow, bool recursive, const char *newName, bool isDynamic) __attribute__((warn_unused_result))

exclude rect is not safe cloned.

actions are not cloned. It is be a problem if we use add/remove listener into a cloned node.

Global UI_CloneNode (const uiNode_t *node, uiNode_t *newWindow, bool recursive, const char *newName, bool isDynamic) __attribute__((warn_unused_result))

exclude rect is not safe cloned.

actions are not cloned. It is be a problem if we use add/remove listener into a cloned node.

Global UI_CloseWindowByRef (uiNode_t *window)

Find better name

If the focus is not on the window we close, we don't need to remove it

Global UI_ColumnLayout (uiNode_t *node)
Use child@align to align each nodes inside respective cell.
Layout_column.png
Global UI_ContainerItemIteratorNext (containerItemIterator_t *iterator)
not sure its the right check
Global UI_ContainerNodeAutoPlaceItem (uiNode_t *node, Item *ic)

We should use an item ID, and get the item inside the function, to avoid wrong uses.

hard coded node name, remove it when it is possible

Global UI_ContainerNodeDrawDropPreview (uiNode_t *target)
enable Shift-rotate for battlescape too when issues are solved
Global UI_ContainerNodeGetExistingItem (const uiNode_t *node, const objDef_t *item, const itemFilterTypes_t filterType)
Remove filter it is not a generic concept, and here it mean nothing
Returns
Item Pointer to the Item/item that is located at x/y or equals "item".
See also
Inventory::getItemAtPos
Global UI_ContainerNodeUpdateEquipment (Inventory *inv, const equipDef_t *ed)
it's not obvious for the caller that ui_inventory pointer must be set
Parameters
[in,out]invThe inventory to add the unused items from ed to
[in]edThe equipment definition to get the used items from that should be added to the ground container of inv
not used nor called by the container node; should be move somewhere else
Global UI_CreateWindow (const char *type, const char *name, const char *super)
If the old style ui scripts are no longer used, the check UI_TokenIsReserved should be removed.
File ui_data.h
clean up the interface
Global UI_DeleteNode (uiNode_t *node)
We must delete all EA_LISTENER too
Global UI_DeleteWindowFromStack (uiNode_t *window)
Why dont we call onClose?
Global UI_DrawBorderedPanel (const vec2_t pos, const vec2_t size, const char *texture, int texX, int texY, int texW, int texH, int border)
can we improve the code? is it need?
Global UI_DrawItem (uiNode_t *node, const vec3_t org, const Item *item, int x, int y, const vec3_t scale, const vec4_t color)

Change the rotation of the image as well, right now only the location is changed. How is image-rotation handled right now?

Image size calculation depends on handling of image-rotation. imgWidth = od->sy * C_UNIT; imgHeight = od->sx * C_UNIT;

Global UI_DrawModelNode (uiNode_t *node, const char *source)
need to merge UI model case, and the common case (looks to be a copy-pasted code)
Global UI_DrawNode (uiNode_t *node)

remove it when its possible: we can create a 'box' node with this properties, but we often don't need it

move it at the right position

we can skip nodes outside visible rect

move it at the right position

Global UI_DrawNotice (void)
Move it into Window node, and/or convert it in a reserved named string node and update the protocol
Global UI_DrawPanel (const vec2_t pos, const vec2_t size, const char *texture, int texX, int texY, const int panelDef[7])

can we improve the code? is it need?

merge texX and texY here

Global UI_DrawSpriteInBox (bool flip, const uiSprite_t *icon, uiSpriteStatus_t status, int posX, int posY, int sizeX, int sizeY)

Add warning

merge all this cases

Global UI_DrawSpriteInBox (bool flip, const uiSprite_t *icon, uiSpriteStatus_t status, int posX, int posY, int sizeX, int sizeY)

Add warning

merge all this cases

Global UI_DrawStringInBox (const char *fontID, align_t align, int x, int y, int width, int height, const char *text, longlines_t method=LONGLINES_PRETTYCHOP)

remove the use of UI_DrawString

test the code for multiline?

fix problem with truncation (maybe problem into UI_DrawString)

Global UI_DrawStringInBox (const char *fontID, align_t align, int x, int y, int width, int height, const char *text, longlines_t method=LONGLINES_PRETTYCHOP)

remove the use of UI_DrawString

test the code for multiline?

fix problem with truncation (maybe problem into UI_DrawString)

Global UI_ExecuteAction (const uiAction_t *action, uiCallContext_t *context)
Skipping actions like that is a bad way. the function should return the next action, or we should move IF, ELSE, ELIF... in a IF block and not interleave it with default actions
Global UI_FocusExecuteActionNode (void)

need a cleanup

need a cleanup

Global UI_FocusNextActionNode (void)
need a cleanup
Global UI_GeoscapeNodeScroll_f (void)
convert into node method
Global UI_GeoscapeNodeZoom_f (void)
convert into node method
Global UI_GetFloatFromExpression (uiAction_t *expression, const uiCallContext_t *context)
do we have some check to do?
Global UI_GetNodeInTreeAtPosition (uiNode_t *node, int rx, int ry)
we should improve the loop (last-to-first)
Global UI_GetPath (const uiNode_t *node) __attribute__((warn_unused_result))
we can use something faster than cat
Global UI_GetPath (const uiNode_t *node) __attribute__((warn_unused_result))
we can use something faster than cat
Global UI_GetReferenceString (uiNode_t const *node, const char *ref) __attribute__((warn_unused_result))
we should review this code, '*' doesn't work very well for all the needed things
Global UI_GetReferenceString (uiNode_t const *node, const char *ref) __attribute__((warn_unused_result))
we should review this code, '*' doesn't work very well for all the needed things
Global UI_GetStringFromExpression (uiAction_t *expression, const uiCallContext_t *context)

this should not work very well, because too much va are used then we should locally cache values, or manage a temporary string structure

should we add a delta?

should we add a delta?

should we add a delta?

Global UI_ImageAlignBoxInBox (vec2_t outerBoxPos, vec2_t outerBoxSize, vec2_t innerBoxSize, align_t align, vec2_t innerBoxPos)
Generic function, move it outside.
Parameters
[in]outerBoxPosPosition of the top-left corner of the outer box.
[in]outerBoxSizeSize of the outer box.
[in]innerBoxSizeSize of the inner box.
alignAlignment of the inner box inside the outer box.
[out]innerBoxPosPosition of the top-left corner of the inner box.
Global UI_InitActions (void)
rework these commands to use a script language way
Global UI_InitializeNodeBehaviour (uiBehaviour_t *behaviour)

Find a way to remove that, if possible

not possible at the moment, not sure its the right way

not possible at the moment, not sure its the right way

Global UI_InitModelInfoView (uiNode_t *node, modelInfo_t *mi, uiModel_t *model)
the param "model" is not used !?
Global UI_InitOptionIteratorAtIndex (int index, uiNode_t *option, uiOptionIterator_t *iterator, bool skipCollapsed, bool skipInvisible)
Rework that code, we should split "Init" and "AtIndex"
Global UI_InitOptionIteratorAtIndex (int index, uiNode_t *option, uiOptionIterator_t *iterator)
Rework that code, we should split "Init" and "AtIndex"
Global UI_InitRawActionValue (uiAction_t *action, uiNode_t *node, const value_t *property, const char *string)

remove node param and catch error where we call that function

we should hide use of ui_global.curadata

Global UI_InitStack (const char *activeWindow, const char *mainWindow)

remove Cvar_Set we have direct access to the cvar

We should only call it a very few time. When we switch from/to this different par of the game: main-option-interface / geoscape-and-base / battlescape

Global ui_inventory
need refactoring to remove, reduce use... of that var Global access to many node content like that is very bad.
Global UI_KeyPressed (unsigned int key, unsigned short unicode)
think about what we should do when the mouse is captured
Global UI_LeftClick (int x, int y)

need to refactoring it with the focus code (cleaner)

at least should be moved on the mouse down event (when the focus should change)

this code must be on mouse down

Global UI_MAX_SMALLTEXTLEN
we should delete it, UI script support random text size
Global UI_MessageGetIcon (const uiMessageListNodeMessage_t *message)

do not hard code icons

cache icon result

Global UI_MouseDown (int x, int y, int button)
find a way to create the timer when UI loading and remove "if (longPressTimer)"
Global UI_MouseMove (int x, int y)
we can remove that loop with an array allocation
Global UI_MouseUp (int x, int y, int button)
it is really need to clean up this subfunctions
File ui_node_abstractoption.cpp
manage disabled option
File ui_node_abstractscrollable.cpp
use this interface into every scrollable node
File ui_node_baseinventory.cpp
extend it with aircraft equipment
File ui_node_battlescape.cpp
Maybe we should capture the input with it, instead of using client namespace MS_*
File ui_node_button.cpp

implement clicked button when its possible.

allow auto size (use the size need looking string, problem when we change language)

File ui_node_container.cpp

Move container role outside of the node name

Link soldier container with a soldier

Link floor container with a map/cell...

File ui_node_controls.cpp
Remove it. Window node can manage itself dragging.
Global UI_Node_IsFunction (uiNode_t const *node)
Use typeid when it is possible
Global UI_Node_IsScrollableContainer (uiNode_t const *node)
Use typeid when it is possible
File ui_node_messagelist.cpp
add getter/setter to cleanup access to extradata from cl_*.c files (check "u.text.")
File ui_node_optionlist.cpp
manage disabled option
File ui_node_optiontree.cpp
manage disabled option
File ui_node_rows.cpp
clean up all properties
File ui_node_selectbox.cpp
manage disabled option
1 selectbox texres_box
2 {
3  {
4  image "ui/selectbox"
5  pos "774 232"
6  size "100 20"
7  color "0.6 0.6 0.6 0.3"
8  cvar "*cvar:gl_maxtexres"
9  }
10  option low_value {
11  label "_Low"
12  value "256"
13  }
14  option medium_value {
15  label "_Medium"
16  value "512"
17  }
18 }
File ui_node_tab.cpp
auto tooltip for chopped options
File ui_node_text.cpp
add getter/setter to cleanup access to extradata from cl_*.c files (check "u.text.")
File ui_node_textentry.cpp

allow to edit text without any cvar

add a custom max size

File ui_node_video.cpp

add function to play/stop/pause

fix fullscreen, looped video

event when video end

function to move the video by position

function or cvar to know the video position

cvar or property to know the size of the video

File ui_node_vscrollbar.cpp

implement disabled

robustness

File ui_node_window.cpp
move it as an inheritance of panel behaviour?
Global UI_NodeSetPropertyFromActionValue (uiNode_t *node, const value_t *property, const uiCallContext_t *context, uiAction_t *value)

refactoring it to remove "context", we should only call that function when the action value is a leaf (then a value, and not an expression)

here we must catch error in a better way, and using cvar for error code to create unittest automations

we should improve if when the prop is a boolean/int/float

Global UI_OptionNodeRemoveHigherOption (uiNode_t **option)
option should start with '_' if we need to translate it
Warning
update parent
Global UI_OptionTreeNodeGetFirstOption (uiNode_t *node)

we should remove this call loop

check versionId and update cached data, and fire events

FIXME it MUST be an option behaviour

File ui_parse.cpp

remove all "token" param from function and use Com_UnParseLastToken

reduce use of uiGlobal (create global functions to add/get/... entities)

remove Com_EParseValue and use Com_ParseValue

Global UI_ParseActionList (uiNode_t *node, const char **text, const char **token)

need cleanup, compute action out of the final memory; reduce number of var

better to append the action after initialization

Global UI_ParseExcludeRect (uiNode_t *node, const char **text, const char **token, const char *errhead)
move it into a property array
Global UI_ParseNode (uiNode_t *parent, const char **text, const char **token, const char *errhead)
we can think about merging UI_ParseNodeProperties here
Note
first token already read
dont read more than the need token (last right token is '}' of end of node)
Global UI_ParseProperty (void *object, const value_t *property, const char *objectName, const char **text, const char **token)

don't read the next token (need to change the script language)

check for the moment its not a cvar

Global UI_ParseValueExpression (const char **text)

when it is possible, we must check range of param id

We MUST remove the OLD code as fast as possible

use a better check - e.g. Com_ParseValue with V_INT or V_FLOAT

Global UI_PoolAllocAction (uiAction_t **action, int type, const void *data)
we should create a function to free the memory. We can use a tag in the Mem_PoolAlloc calls and use use Mem_FreeTag.
Global UI_ReadNodePath (const char *path, const uiNode_t *relativeNode, const uiNode_t *iterationNode, uiNode_t **resultNode, const value_t **resultProperty, value_t *luaMethod=nullptr)
Speed up, evilly used function, use strncmp instead of using buffer copy (name[MAX_VAR])
Note
If luaMethod is set, make sure to release the allocated .name string.
FIXME use a warning instead of an assert
Global UI_ReadNodePath (const char *path, const uiNode_t *relativeNode, const uiNode_t *iterationNode, uiNode_t **resultNode, const value_t **resultProperty, value_t *luaMethod=nullptr)
Speed up, evilly used function, use strncmp instead of using buffer copy (name[MAX_VAR])
Note
If luaMethod is set, make sure to release the allocated .name string.
FIXME use a warning instead of an assert
Global UI_RegisterAbstractNode (uiBehaviour_t *)
move it into common?
Global UI_RegisterAbstractNode (uiBehaviour_t *)
move it into common?
Global UI_RegisterImageNode (uiBehaviour_t *behaviour)
rename it according to the function name when its possible
Global UI_RegisterLinkedListText (int textId, linkedList_t *text)
FIXME It is a hack to disable release memory, if we only want to update the same list
Global UI_RegisterLinkedListText (int textId, linkedList_t *text)
FIXME It is a hack to disable release memory, if we only want to update the same list
Global UI_RegisterMaterialEditorNode (uiBehaviour_t *behaviour)
convert it to ui functions
Global UI_RegisterTextNode (uiBehaviour_t *behaviour)
delete it when its possible (need to create a textlist...)
Global UI_ReleaseVariable (uiValue_t *variable)
most of cases here are useless, it only should be EA_VALUE_STRING
Global UI_SetKeyBinding (const char *path, int key, const char *description)

check: only one binding per nodes?

check: key per window must be unique

check: key used into UI_KeyPressed can't be used

Global UI_SetKeyBindingEx (const char *path, int key, const char *description, bool inherited)

check: only one binding per nodes

check: key per window must be unique

check: key used into UI_KeyPressed can't be used

Global UI_SetNewWindowPos (uiNode_t *window, int x, int y)

remove that

move it on m_nodes, its a common getter/setter

Global UI_StarLayout (uiNode_t *node)
Tag it static when it is possible
Global UI_TabNodeTabAtPosition (const uiNode_t *node, int x, int y)

improve test when we are on a junction

improve test when we are on a chopped tab

this doesn't work when an option is hidden

Global UI_Window_SetCloseButton (uiNode_t *node, bool value)
Once image_t is known on the client, use image->width resp. image->height here
Global UI_WindowNodeAddIndexedNode (uiNode_t *node, uiNode_t *child)
display a warning, we must not override a node name here
Global UI_WindowNodeAddIndexedNode (uiNode_t *node, uiNode_t *child)
display a warning, we must not override a node name here
Global UI_WindowNodeRegisterKeyBinding (uiNode_t *window, struct uiKeyBinding_s *binding)
Rework that function to remove possible wrong use of that function
Global UI_WindowNodeRegisterKeyBinding (uiNode_t *window, struct uiKeyBinding_s *binding)
Rework that function to remove possible wrong use of that function
Global UI_WindowNodeRemoveIndexedNode (uiNode_t *node, uiNode_t *child)
FIXME implement it
Global UI_WindowNodeRemoveIndexedNode (uiNode_t *node, uiNode_t *child)
FIXME implement it
Global uiAbstractScrollableNode::isSizeChange (uiNode_t *node)
remove it, use property listener
Global uiAction_s::terminal
Define the "sometimes"
Global uiAction_t
FIXME Merge terminal and nonTerminal, this way is finally stupid. Left can be terminal and right can be non terminal, then the structure make non sens and can create hidden bugs.
Global uiAction_t
FIXME Merge terminal and nonTerminal, this way is finally stupid. Left can be terminal and right can be non terminal, then the structure make non sens and can create hidden bugs.
Global uiButtonNode::draw (uiNode_t *node) override
should we move it according to the text align?
Global uiContainerNode::onDndFinished (uiNode_t *node, bool isDroped) override

We must split the move in two. Here, we should not know how to add the item to the target (see dndDrop)

enable Shift-rotate for battlescape too when issues are solved

Global uiContainerNode::onLoaded (uiNode_t *node) override
find a better way to add more equip node, without this hack
Global uiFuncNode::onLoaded (uiNode_t *node)

special cases should be managed as a common property event of the parent node

move this code into the parser (cause property should not create a func node)

Global uiGeoscapeNode::zoom (uiNode_t *node, bool out)
it should use an int param for smooth zoom
Global uiImageNode::draw (uiNode_t *node) override

convert all pic using mousefx into button.

delete mousefx

convert all pic using mousefx into button.

delete mousefx

Global uiItemNode::draw (uiNode_t *node) override
we should not use DrawItem but draw the image with render function (remove dependency with container)
Global uiMaterialEditorNode::draw (uiNode_t *node) override
do it incremental. Don't need all this math
Global uiNode::onActivate (uiNode_t *node)
The old implementation calls onClick when activated. This is odd and should be replaced by a correct onActivate event handler.
Global uiNode_t::contentAlign
needs cleanup
Global uiNode_t::num
delete it
Global uiPanelNode::onCapturedMouseMove (uiNode_t *node, int x, int y) override
do it as well for x
Global uiPanelNode::onPropertyChanged (uiNode_t *node, const value_t *property) override
move it to registration code when it is possible
Global uiRadarNode::draw (uiNode_t *node) override
use the same coef for x and y
Global uiRadioButtonNode::draw (uiNode_t *node) override
need to implement image. We can't do everything with only one icon (or use another icon)
Global uiRadioButtonNode::onActivate (uiNode_t *node) override
the parser should already check that the property value is a right cvar
Global uiSelectBoxNode::onCapturedMouseMove (uiNode_t *node, int x, int y) override
we can remove the loop if we save the current element in the node
Global uiSpriteStatus_t
use a more generic name and move it to main ui
Global uiTabNode::draw (uiNode_t *node) override

this doesn't work when an option is hidden

fontWidth can be =0, maybe a bug from the font cache

Global uiTabNode::onWindowOpened (uiNode_t *node, linkedList_t *params) override
move cvar check to AbstractOption
Global uiTextEntryNode::draw (uiNode_t *node) override
Make the cursor into a real graphical object instead of using a text character.
Global uiTextListNode::onRightClick (uiNode_t *node, int x, int y) override
we should delete that function
Global uiTextNode::drawText (uiNode_t *node, const char *text, const linkedList_t *list, bool noDraw)
what about multiline text that should be highlighted completely?
Global uiTimer_t
We can use void* for the owner type, and allow to use it outside nodes
Global uiTimer_t
We can use void* for the owner type, and allow to use it outside nodes
Global uiTimerNode::draw (uiNode_t *node) override
Use a real timer and not that hack
Global uiVideoNode::drawOverWindow (uiNode_t *node) override
Maybe draw a black screen?
Global uiWindowNode::doLayout (uiNode_t *node) override
check and fix here window outside the screen
Global uiWindowNode::draw (uiNode_t *node) override

it should be over the window

why not using glClear here with glClearColor set to black here?

Global UP_AircraftDescription (const technology_t *tech)
Display crippled info and pre-research text here
Global UP_AircraftDescription (const technology_t *tech)
Display crippled info and pre-research text here
Global UP_AircraftItemDescription (const objDef_t *item)
Don't display things like speed for base defence items - a missile facility isn't getting slower or faster due a special weapon or ammunition
Global UP_DisplayTechTree (const technology_t *t)

Add support for "requireAND"

re-iterate trough logic blocks (i.e. append the tech-names it references recursively)

If it is one (a logic tech) we may want to re-iterate from its requirements?

Global UP_GenerateSummary (void)
use a confunc
Global UP_TechTreeClick_f (void)
The "num" value and the link-index will most probably not match.
Global UP_UGVDescription (const ugv_t *ugvType)

make me shiny

Display crippled info and pre-research text here

Global UTF8_char_len (unsigned char c)
Using this does not solve the truncation problem in case of decomposed characters. For example a code for "a" followed by a code for "put dots above previous character: the "a" will be reported as a character of length 1 by this function, even though the code that follows is part of its visual appearance and should not be cut off separately. Fortunately decomposed characters are rarely used.
Global V_UI_MASK
we should split/flag parse type (type need only 1 lex; and other)
Global VectorNormalize2 (const vec3_t v, vec3_t out)
Global VID_Restart_f (void)

only reload the skins, not all models

going back into the map isn't working as long as GAME_ReloadMode is called

Global Weather::render (void)

shadowcasting at least for the sunlight

proper color to brightness mapping

alpha decay

make a proper projection instead of this hack

should use proper velocity vector ... or maybe not

actually rotate billboard in the correct position

Global Weather::update (int milliseconds)

creates vanishing-before-impact particles at low framerates – should improve that somehow

proper code for physics

Global windowExtraData_t::onWindowOpened
think about converting it to action instead of node