deadline balancing
Attachment stats and other stuff for Deadline.
changelogs
wiki
Contains information about stats, gameplay, mechanics, and more.
https://github.com/recoil-group/deadline-balancing/wiki
balancing knowledge base
- Balancing guide: goals and design priorities.
- Stat reference: stat behavior, units, formulas, and interactions.
demos
repo guide
balancing.csv
Master balancing sheet. Should always be up to date with the latest changes.
testing.csv
Testing sheet. Gets imported into dev branch when updated.
weapon_names.json
Dynamic weapon display-name rules keyed by weapon code. Each rule lists the attachments required for that name; nested attachment arrays are interchangeable options.
/changes
Folder containing all change sheets. These are used to balance groups of attachments to then be ported into balancing.csv.
/changelogs
Folder containing all generated changelog markdown files.
/archive
Folder containing all balancing sheets from previous versions. These are used to generate changelogs.
port.py
Script to port changes from a CSV or Excel change sheet into balancing.csv or testing.csv. Usage:
python port.py (change sheet) (target sheet) (header row)
python port.py "changes/changes.csv" "testing.csv" 2
python port.py "changes/changes.xlsx" "balancing.csv" 2
python port.py "changes/changes.xlsx" "balancing.csv" 2 --dry-run
python port.py "changes/changes.xlsx" "balancing.csv" 2 --dry-run --format json
- Updates the date in the target sheet automatically.
- Matches rows by
namecolumn, make sure those are included in the change sheet. - Order of columns in the change sheet does not matter.
- Empty cells will overwrite existing data. Be careful.
[header row]is the row # of the column headers in the change sheet. Useful for extra labels or dates above the headers.- Warns when source names or columns are not present in the target.
--dry-runprints every proposed old-to-new value without writing and identifies blank overwrites. Exact textual differences such as5and5.0remain effective complete-state changes.- Rows without a
name, names absent from the target, and unknown source columns are ignored. The latter two are warnings in the preview. - The preview also warns about blank overwrites,
pretty_namechanges, and source names or headers with surrounding whitespace. Warnings never stop a port. In text output,!marks warned change lines; JSON contains a complete structured warning list. - An uncached formula in a cell that would be imported stops the port because its unknown result would otherwise be exported as a blank override.
- Writes are atomic, and the target date is updated only when cells change.
xlsx_to_csv.py
Exports cached values from the first worksheet of an .xlsx or .xlsm workbook
to a UTF-8 CSV. Reports formula cells with cached or missing results.
python xlsx_to_csv.py "changes/changes.xlsx" [output.csv]
inspect_xlsx.py
Prints a compact, read-only view of an Excel change sheet for coding agents. It shows every worksheet, populated cells and coordinates, cached formula results, repeated formula patterns, tables, merged ranges, comments, hyperlinks, and hidden regions without rendering or modifying the workbook. Conservative header cues identify likely table and section headers, including multiple sections in one worksheet, while leaving interpretation to the reader.
Recommended agent workflow:
- Run
inspect_xlsx.pybefore using a general spreadsheet importer or renderer. - If the output is truncated or the task is focused, rerun it with
--sheetand--range. - Use
--show-formulaswhen exact expressions are needed inline. - Only render the workbook when the task depends on layout, formatting, charts, or other visual details.
python inspect_xlsx.py "changes/m4-stocks.xlsx"
python inspect_xlsx.py "changes/308-ammo-super.xlsx" --sheet Model --range A1:C39
python inspect_xlsx.py "changes/m4-stocks.xlsx" --sheet m4-stocks --range N3:Q5 --show-formulas
Use --max-cells and --max-formula-patterns to control output size, and
remember that formula results are cached values saved by Excel. The script does
not recalculate them or guarantee that they are current. Displayed floats are
rounded to remove unhelpful binary floating-point noise; workbook values are
never changed.
update_xlsx_from_csv.py
Updates shared columns in an existing workbook from a CSV, matching rows by
name and skipping formulas by default. The workbook is updated in place.
python update_xlsx_from_csv.py "balancing.csv" "changes/changes.xlsx" 2
Use --dry-run to preview changes. Saving with openpyxl may clear cached
formula results. CSV names absent from the workbook are expected and are not
reported.
fix_booleans.py
Lowercases TRUE/FALSE cells in any CSV. Accepts multiple files and rewrites
them in place, leaving all other cells untouched.
python fix_booleans.py calibers.csv
python fix_booleans.py balancing.csv optics.csv --dry-run
changelog.py
Script to compare two sheets and output a changelog. Usage:
python changelog.py (old sheet) (new sheet)
python changelog.py "archive/old-sheet.csv" "balancing.csv"
- Outputs a changelog to
changelogs/version-changelog.md. - Matches rows by
namecolumn. - Uses the
pretty_namecolumn for display in the changelog, falling back toname. - Reports changed and new entries.
diff.py
Basically changelog.py but for comparing smaller change sheets. Usage:
python diff.py (old sheet) (new sheet)
python diff.py "old-sheet.csv" "changes/new-sheet.csv"
- Outputs a changelog to
diffs/new-sheet.md. - Matches rows by
namecolumn. - Uses the
pretty_namecolumn for display in the changelog, falling back toname. - Reports changed, new, and removed entries.