Massive overhaul#429
Draft
tichys wants to merge 47 commits into
Draft
Conversation
- Move roleplay_constants.dm include to __DEFINES section so constants are available everywhere - Consolidate duplicate #defines from karma.dm, faction_definitions.dm, level_system.dm, perk_system.dm, trade_system.dm into roleplay_constants.dm - Add missing /datum/quest type declaration in quest_system.dm - Remove invalid check_for_sleep keyword arg from 14 emote() calls in emotes.dm - Fix name= assignments, defined() calls, and constant comparisons in roleplay_tests.dm - Fix field_access_static_type warning in preferences.dm (typed local for background.name) - Fix proc_call_static_type warnings in dialogue_loader.dm (typed locals before .Copy()) - Fix field/proc type warnings in karma_history.dm (typed local before .len/.Cut())
- Add missing trailing newlines to 30 roleplay/event files flagged by check_filedirs.sh - Remove var/ prefix from proc arguments in dialogue_system.dm, notebook.dm, and traveling_merchant.dm
MySQL raises ERROR 1061 (duplicate key name) when a column is declared with both an inline UNIQUE constraint and a separately named UNIQUE KEY with the same identifier. The `player_levels` table had `ckey` defined as `NOT NULL UNIQUE` on the column and also `UNIQUE KEY `ckey` (`ckey`)` at the end of the table. Removed the inline UNIQUE, keeping only the named constraint.
adjust_karma() had no null check, so calling it with a null ckey would compute clamp(0 + amount, ...) and return the amount instead of 0. Added an early-return guard matching the pattern already used in modify_karma_by_action(). The null_safety_karma unit test now passes.
Introduce a full TGUI-based character setup interface and supporting client logic. Adds: a new React TGUI interface (CharacterSetup.tsx) with styles, DM datum for tgui_character_setup to drive the UI and map preview, client procs for ASCII previews (ascii_preview.dm) and terminal sounds (terminal_sounds.dm). Wire up new_player to open the TGUI panel, replace the old view_variables HTML fallback with debug_variables_tgui, and update tgui config (nodeLinker) and styles/bundle assets. Also remove obsolete TGS3.json.
SSthrowing.currentrun is declared without a default value and stays null until the subsystem's first fire() cycle. During map initialization an assaultron triggers an explosion that throws nearby items; the resulting thrownthing datums are destroyed before SSthrowing has ever fired, causing three "type mismatch: null -= <item>" runtimes at throwing.dm:112. Added a null check before the currentrun subtraction. The processing list is already initialized as list() so the processing -= line is safe.
…panel null crash - karma.dm, reputation.dm, level_system_db.dm: Add write-through in-memory caches to eliminate redundant synchronous MySQL queries on every combat event. Steady-state DB cost per event drops from 7-8 queries to 2. - level_system_db.dm: Fix handle_level_up never firing — old_level was read back from DB *after* the UPDATE so it always equalled new_level. Now computed from current_xp before the write. - character_setup_tgui.dm: Fix mannequin preview appearing in the top-left corner instead of centered (screen_loc 1,1 → CENTER,CENTER). - statpanel.dm: Fix runtime "Cannot execute null.stat_entry()" on startup — Failsafe is null until after Master.Initialize completes, added null guard.
…into massive-overhaul
Introduce server-side TGUI datums and frontend interfaces replacing legacy browser menus and inline HTML. - Added server datums: datum/create_panel (object/turf/mob spawner), datum/game_mode/dynamic TGUI handlers, datum/latejoin_panel, and datum/lobby_menu with ui_state/ui_interact/ui_data/ui_act implementations and admin procs to open them. - Updated admin/game_panel to invoke the new datums and to open the dynamic gamemode UI when appropriate. - Refactored character setup preview: removed BYOND map/screen objects and ByondUi usage; use owner.show_character_previews() and owner.clear_character_previews() for lifecycle and preview updates. - Replaced large inline HTML browser pages in new_player with TGUI panels (lobby & latejoin). new_player now opens the lobby/latejoin datums instead of building raw HTML strings. - Added frontend TGUI components: CreatePanel.tsx and GameModePanel.tsx (plus LateJoin and LobbyMenu interfaces) and modified CharacterSetup.tsx to remove mapRef and show a placeholder preview message. - Added create_object_fallout.html as a standalone HTML template (legacy/auxiliary terminal page) and updated spawn logic (offsets, count, dir, name, where) in create_panel. These changes migrate numerous lobby/admin flows to the TGUI stack, simplify preview handling, and centralize UI logic in datums for better maintainability.
Introduce a new TGUI backend and React interfaces for roleplay features. Adds code/modules/roleplay/tgui_panels.dm which implements datum panels for RP stats, Relationships, Bounties, Karma History, Notebook, Perk Menu, and Quest Journal (including a helper proc get_player_quests_by_status and client verbs to open each panel). Adds corresponding frontend interfaces under tgui/packages/tgui/interfaces (RPStats, Relationships, Bounties, KarmaHistory, Notebook, PerkMenu, QuestJournal). Update hailmary.dme includes to pull in the new panels and a few related TGUI/login panels. Minor fixes: ensure game_panel_tgui returns TRUE after opening gamemode UI, restrict GamePanel.tsx to show the gamemode button only when master_mode === 'dynamic', and change several player verb categories (select_background, propose_relationship, set_accent) to "Admin". These changes wire up TGUI UIs for roleplay systems and adjust related admin/verb behavior.
- Move roleplay_constants.dm include to __DEFINES section so constants are available everywhere - Consolidate duplicate #defines from karma.dm, faction_definitions.dm, level_system.dm, perk_system.dm, trade_system.dm into roleplay_constants.dm - Add missing /datum/quest type declaration in quest_system.dm - Remove invalid check_for_sleep keyword arg from 14 emote() calls in emotes.dm - Fix name= assignments, defined() calls, and constant comparisons in roleplay_tests.dm - Fix field_access_static_type warning in preferences.dm (typed local for background.name) - Fix proc_call_static_type warnings in dialogue_loader.dm (typed locals before .Copy()) - Fix field/proc type warnings in karma_history.dm (typed local before .len/.Cut())
- Add missing trailing newlines to 30 roleplay/event files flagged by check_filedirs.sh - Remove var/ prefix from proc arguments in dialogue_system.dm, notebook.dm, and traveling_merchant.dm
MySQL raises ERROR 1061 (duplicate key name) when a column is declared with both an inline UNIQUE constraint and a separately named UNIQUE KEY with the same identifier. The `player_levels` table had `ckey` defined as `NOT NULL UNIQUE` on the column and also `UNIQUE KEY `ckey` (`ckey`)` at the end of the table. Removed the inline UNIQUE, keeping only the named constraint.
adjust_karma() had no null check, so calling it with a null ckey would compute clamp(0 + amount, ...) and return the amount instead of 0. Added an early-return guard matching the pattern already used in modify_karma_by_action(). The null_safety_karma unit test now passes.
SSthrowing.currentrun is declared without a default value and stays null until the subsystem's first fire() cycle. During map initialization an assaultron triggers an explosion that throws nearby items; the resulting thrownthing datums are destroyed before SSthrowing has ever fired, causing three "type mismatch: null -= <item>" runtimes at throwing.dm:112. Added a null check before the currentrun subtraction. The processing list is already initialized as list() so the processing -= line is safe.
Introduce a full TGUI-based character setup interface and supporting client logic. Adds: a new React TGUI interface (CharacterSetup.tsx) with styles, DM datum for tgui_character_setup to drive the UI and map preview, client procs for ASCII previews (ascii_preview.dm) and terminal sounds (terminal_sounds.dm). Wire up new_player to open the TGUI panel, replace the old view_variables HTML fallback with debug_variables_tgui, and update tgui config (nodeLinker) and styles/bundle assets. Also remove obsolete TGS3.json.
…panel null crash - karma.dm, reputation.dm, level_system_db.dm: Add write-through in-memory caches to eliminate redundant synchronous MySQL queries on every combat event. Steady-state DB cost per event drops from 7-8 queries to 2. - level_system_db.dm: Fix handle_level_up never firing — old_level was read back from DB *after* the UPDATE so it always equalled new_level. Now computed from current_xp before the write. - character_setup_tgui.dm: Fix mannequin preview appearing in the top-left corner instead of centered (screen_loc 1,1 → CENTER,CENTER). - statpanel.dm: Fix runtime "Cannot execute null.stat_entry()" on startup — Failsafe is null until after Master.Initialize completes, added null guard.
Introduce server-side TGUI datums and frontend interfaces replacing legacy browser menus and inline HTML. - Added server datums: datum/create_panel (object/turf/mob spawner), datum/game_mode/dynamic TGUI handlers, datum/latejoin_panel, and datum/lobby_menu with ui_state/ui_interact/ui_data/ui_act implementations and admin procs to open them. - Updated admin/game_panel to invoke the new datums and to open the dynamic gamemode UI when appropriate. - Refactored character setup preview: removed BYOND map/screen objects and ByondUi usage; use owner.show_character_previews() and owner.clear_character_previews() for lifecycle and preview updates. - Replaced large inline HTML browser pages in new_player with TGUI panels (lobby & latejoin). new_player now opens the lobby/latejoin datums instead of building raw HTML strings. - Added frontend TGUI components: CreatePanel.tsx and GameModePanel.tsx (plus LateJoin and LobbyMenu interfaces) and modified CharacterSetup.tsx to remove mapRef and show a placeholder preview message. - Added create_object_fallout.html as a standalone HTML template (legacy/auxiliary terminal page) and updated spawn logic (offsets, count, dir, name, where) in create_panel. These changes migrate numerous lobby/admin flows to the TGUI stack, simplify preview handling, and centralize UI logic in datums for better maintainability.
Introduce a new TGUI backend and React interfaces for roleplay features. Adds code/modules/roleplay/tgui_panels.dm which implements datum panels for RP stats, Relationships, Bounties, Karma History, Notebook, Perk Menu, and Quest Journal (including a helper proc get_player_quests_by_status and client verbs to open each panel). Adds corresponding frontend interfaces under tgui/packages/tgui/interfaces (RPStats, Relationships, Bounties, KarmaHistory, Notebook, PerkMenu, QuestJournal). Update hailmary.dme includes to pull in the new panels and a few related TGUI/login panels. Minor fixes: ensure game_panel_tgui returns TRUE after opening gamemode UI, restrict GamePanel.tsx to show the gamemode button only when master_mode === 'dynamic', and change several player verb categories (select_background, propose_relationship, set_accent) to "Admin". These changes wire up TGUI UIs for roleplay systems and adjust related admin/verb behavior.
…into massive-overhaul
Replace the legacy HTML popup RD console with a TGUI-based interface. Removed the old ui_interact HTML popup in rdconsole.dm and added rdconsole_tgui.dm which implements TGUI hooks (ui_interact, ui_data, ui_act) and helper procs to expose nodes, designs, lathe/imprinter, disk and destroyer data and actions. Added the React/TypeScript frontend (ResearchConsole.tsx) and styles (ResearchConsole.scss), and wired the new server file into hailmary.dme. Provides search, node/detail view, production/imprinter menus, disk operations and device sync/deconstruct actions.
Introduces first-pass faction systems and many UI components. Adds Brotherhood of Steel modules (defines, base defense network, codex enforcement, paladin progression/abilities, power armor mastery, tech recovery and sites) and supporting datums/terminals. Adds numerous faction modules for Enclave, Legion, and NCR as scaffolding (defines and subsystem files). Expands roleplay systems with courier/mercenary contracts, safe houses, scavenger hunts, and other roleplay updates and fixes across backgrounds, dialogue, karma, perks, quests, reputation, shops, and related modules. Adds many TGUI interfaces and style assets for faction terminals, town UIs, and management screens, and minor comment cleanups in a few event files. This commit lays the groundwork for faction gameplay, server-side logic, and matching client-side interfaces.
Apply consistent JSX formatting across multiple TGUI interface components: wrap long lines and text nodes, multiline props/handlers, and normalize indentation in ArenaControl, BountyBoard, CaravanLogistics, EnclaveTerminal, EyebotControl, FEVResearch, PaladinTerminal, PrisonManagement, RangerTerminal, SheriffOffice, SlaveManagement, and VertibirdControl. Also tidy up a few UI strings (e.g. remove an emoji in caravan alert) and ensure consistent spacing; these are stylistic/formatting changes only and do not alter component logic.
Introduce a dedicated Flavor Text Editor and modernize several terminal UIs and styles. Key changes: - Add a new TGUI interface FlavorTextEditor (TSX) and accompanying SCSS to edit long character flavor text with a save/cancel flow. - Integrate flavor text editor into CharacterSetup: new button to open editor, UI action handlers (open_flavor_editor, set_flavor_text, close) and a /datum/flavor_text_editor DM type implementing ui_interact, ui_data, ui_act, New and Destroy. - Enforce minimum flavor text length on late-join paths: checks added in latejoin_panel_tgui.dm and lobby menu flow to require editing flavor text before joining. - Add close handling to CharacterSetup and LateJoin UIs so they properly close and return to the lobby/new-player panels. - Revamp LateJoin and LobbyMenu TSX interfaces: layout, sizing, job list rendering (job numbering, clickable rows, improved status display), and added more contextual fields (current_slot, ready) in lobby data. - Add new SCSS files for LobbyMenu, LateJoin, FlavorTextEditor and extensive CharacterSetup styling improvements (phosphor theme variables, CRT background, menu items, status styles). - Enhance fallout theme (fallout.scss): new variables, CRT scanlines, vignette, flicker/cursor/glow animations and updated button/typography styles. - Register new SCSS files in main.scss. These changes improve UX for character flavor editing, add stricter validation for late-join, and unify terminal visuals to a Fallout/CRT aesthetic.
Introduce a caps paycheck system and XP constants, wire paycheck startup into the ticker, and add per-job caps_paycheck settings across many job types. Add new roleplay modules (caps_paycheck, dynamic quests, gambling, tavern, territory control, player job board, smart bounty hunter) and update related roleplay code (bounty system, dialogue, perks, karma, level/mercenary/companion systems). Implement bounty checking on player death and a recent_hostile_kill_time on humans. Improve NPC interaction (alt-attack opens dialogue for hostile NPCs) and add a new smart AI file plus numerous AI behavior flags on hostile mobs (anti-kite: lunges, dodge/veer chances, cover usage, suppress/throw grenades, ambush/retreat/stimpak behavior, etc.) and cover-related variables in hostile.dm to support smarter combat tactics.
Major overhaul of environmental fire and related systems plus several QoL fixes. - Fire system refactor: rewritten hotspot handling, decay, spread logic and visuals; turfs now track active hotspots; hotspot processing moved to an ongoing process with temperature/volume decay and spread checks. - Flamethrower changes: added fuel tracking, refuel on tank swap, fuel consumption and empty behavior, simplified ignition to hotspot_expose and mob ignition. - Mob fire behavior: changed how fire stacks decay and ignition conditions; fire_act now considers exposure temperature/volume. - Projectiles: incendiary and shotgun incendiary hits now trigger hotspot_expose with adjusted parameters. - Character creation/UI: added tgui ui_close callbacks for several panels, enforce SPECIAL max sum via SPECIAL_MAX_POINT_SUM_CAP and updated preferences message. - Cigarette packet: fix to_chat target when a cigarette goes out. - Paychecks/pay safes: paychecks now credit nearest pay safes instead of dropping caps; added global pay_safes list and a pay_safe machinery with collection UI and bookkeeping. - Trade system: added escrow support for caps (take/return escrowed stacks), improved execute/rollback logic, automatic return of items on cancel/disconnect, and helper utilities for moving caps between players. - Misc: increased SPECIAL_MAX_POINT_SUM_CAP to 40 and small related checks. These changes aim to make fire behavior more realistic and robust, add persistent payroll via safes, and make trading/cap transfers safer by escrow.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A very large overhaul affecting stat panels, chat, karma and reputation introductions and a overhauling of a dialogue system