Header prerequisites: objects.h __FILE__ provider packet and path.h HCEX field

objects.h: both bounding-sphere inline assertions report OBJECTS_H_FILE, which
defaults to January's relative "..\objects\objects.h". object_lights defines the
absolute spelling first, as January's string census shows. action_vehicle loses
its NODUP hand copy of object_get_bounding_sphere, so the header inline is the only
definition. render_objects' lighting_storage becomes the static local of
object_get_cached_render_lighting (symbols.json).

path.h: the opaque __unknown140A0[0x5C] span is HCEX's `struct path_result
result`, and path.c stores through the field instead of a punning cast.

Consumer sweep (full ninja, objdiff 3.3.1): stable diff shows 0 regressions and no
moved rows beyond the batch-1/Layer-2 gains. Parks 93/0/0, admission 15/0/7/0,
pytest 1157 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jonas VolmanandClaude Opus 5.5 committed 2026-09-23 23:42:16 -07:00
1 parent 931ed8dc2b
commit b807f9f61d
7 files changed
+20 -28

No files matched your search

+1 -1
View File
@@ -23248,7 +23248,7 @@
{ "file_offset": 4951098, "flags": 0, "name": "_render_camera_debug_this_fucking_frustum" },
{ "file_offset": 4951104, "flags": 0, "name": "_render_debug_globals", "static": true },
{ "file_offset": 4980812, "flags": 0, "name": "_bss_004c004c" },
{ "file_offset": 4980856, "flags": 0, "name": "_lighting_storage" },
{ "file_offset": 4980856, "flags": 0, "name": "?lighting_storage@?1??object_get_cached_render_lighting@@9@9", "static": true },
{ "file_offset": 4980976, "flags": 0, "name": "_render_object_globals", "static": true },
{ "file_offset": 4982004, "flags": 0, "name": "_debug_inactive_objects" },
{ "file_offset": 4982005, "flags": 0, "name": "_reported_rendered_object_overflow", "static": true },
-20
View File
@@ -70,11 +70,7 @@ symbols in this file:
#include "cseries.h"
#include "actions.h"
#define object_get_bounding_sphere object_get_bounding_sphere_inline
#include "actors.h"
#undef object_get_bounding_sphere
#include "actor_definitions.h"
#include "ai_debug.h"
#include "props.h"
@@ -157,22 +153,6 @@ boolean unit_get_seat_entrance_point(
/* ---------- public code */
void object_get_bounding_sphere(
long object_index,
real_point3d *center,
real *radius)
{
struct object_datum *object = object_get(object_index);
match_assert("..\\objects\\objects.h", 535, center);
match_assert("..\\objects\\objects.h", 536, radius);
*center = object->object.bounding_sphere_center;
*radius = object->object.bounding_sphere_radius;
return;
}
void action_vehicle_begin(
long actor_index)
{
+1 -1
View File
@@ -1043,7 +1043,7 @@ boolean path_state_build_path(
if (state->debug)
{
*(struct path_result *)state->debug->__unknown140A0 = *path;
state->debug->result = *path;
if (state->debug->path_build_result != _path_build_result_success)
{
+1 -1
View File
@@ -264,7 +264,7 @@ struct path_debug_storage
short path_traverse_result;
short path_build_result;
struct path_state path_state;
char __unknown140A0[0x5C];
struct path_result result;
short raw_step_count;
word pad_140FE;
struct path_step raw_steps[64];
+4
View File
@@ -140,6 +140,10 @@ symbols in this file:
/* ---------- headers */
/* objects.h lies in this unit's own directory, so January's __FILE__ for it was the absolute
path (see OBJECTS_H_FILE in objects.h) */
#define OBJECTS_H_FILE "c:\\halo\\source\\objects\\objects.h"
#include "cseries/cseries.h"
#include "cseries/errors.h"
#include "cseries/profile.h"
+12 -4
View File
@@ -188,6 +188,14 @@ enum
#define object_get(index) ((struct object_datum*)object_get_and_verify_type(index, _object_mask_all))
#define object_try_and_get(index) ((struct object_datum*)object_try_and_get_and_verify_type(index, _object_mask_all))
/* the inline assertions below report January's __FILE__ for this header, and January spelled it
two ways: its string census has "..\objects\objects.h" defined by action_vehicle (and
referenced by render_objects) and "c:\halo\source\objects\objects.h" defined by
object_lights; a unit that needs the absolute spelling defines OBJECTS_H_FILE first */
#ifndef OBJECTS_H_FILE
#define OBJECTS_H_FILE "..\\objects\\objects.h"
#endif
/* ---------- structures */
typedef void (*object_deleted_proc)(long);
@@ -488,8 +496,8 @@ __inline void object_get_bounding_sphere(
{
struct object_datum *object = object_get(object_index);
match_assert("c:\\halo\\source\\objects\\objects.h", 535, center);
match_assert("c:\\halo\\source\\objects\\objects.h", 536, radius);
match_assert(OBJECTS_H_FILE, 535, center);
match_assert(OBJECTS_H_FILE, 536, radius);
*center = object->object.bounding_sphere_center;
*radius = object->object.bounding_sphere_radius;
@@ -504,8 +512,8 @@ __inline void object_get_render_bounding_sphere(
{
struct object_datum *object = object_get(object_index);
match_assert("..\\objects\\objects.h", 551, center);
match_assert("..\\objects\\objects.h", 552, radius);
match_assert(OBJECTS_H_FILE, 551, center);
match_assert(OBJECTS_H_FILE, 552, radius);
*center = object->object.bounding_sphere_center;
*radius = object_definition_get(object->definition_index)->object.render_bounding_radius;
+1 -1
View File
@@ -304,7 +304,6 @@ static struct profile_section render_object_shadows_section =
struct data_array *cached_object_render_states;
struct render_lighting lighting_storage = { 0 };
static struct render_object_globals render_object_globals = { 0 };
boolean debug_inactive_objects = FALSE;
@@ -356,6 +355,7 @@ struct render_lighting *object_get_cached_render_lighting(
long object_index,
real level_of_detail_pixels)
{
static struct render_lighting lighting_storage;
long render_state_index = object_get_cached_render_state(
object_index,
level_of_detail_pixels);