Halo modding and gaming related applications.
liquid light
Posts: 17
Joined: Mon Mar 19, 2018 3:54 am


Post by liquid light » Tue May 08, 2018 2:59 pm

Hi. It has been a while. Zeus is the name I give my Halo-related experimental programs. I have been working on "silence":



Silence is a culmination of my existing Zeus experiments towards designing an HEK for Mac. Silence is the Halo Editing Kit for Mac.

As usual, I started with .actor HEK tag file support. Development is accelerated because of the modular approach I am using.

Silence works with OS X 10.11. I experimented with a bit of converting silence to work with Mac OS X 10.6.8, and it seems right now like a simple conversion, so I intend to make a build compatible with Snow Leopard.

Silence contains some useful features, but I did not give it the extensive suite of controls that I designed in Zeus, such as duration and angle displays.

This program is my definitive Halo editor for Mac and Windows. It uses all of my original work, with the occasional bit of code from web sites like Stack Overflow; the development of silence was a learning experience. This build for OS X 10.11 uses Auto Layout with constraints, a lot of Cocoa bindings, and in general should be kind of sophisticated in the approaches used with Objective-C. I still plan to do a version for Windows 7, but of course this should be finished first for Mac.


- dynamic language translation in the interface; simply choose the language of preference and the related language plist file is loaded and the interface redisplayed (currently only English, but contact me if you would like to translate into Spanish, etc.)
- a Halo trivia mini-game to which you can add your own questions and answers by adding them to the plist file
- display measurements in world units or meters, and angles in degrees or radians
- more informative tool tip mouseover text than appears in Guerilla
- all bytes from every Halo tag file are displayed and editable
(silence vs. Guerilla)
- automatic correction of inappropriate tag data... in other words, you get automatic tag file fixing for compatibility with the Halo Editing Kit. No more tag or map file data corruptions!


Of course, I intend to design additional "instantaneous" features which do not utilize a heavyweight user interface. And then there are future features like anything having to do with 3D display or asset extraction.


What all of this means is that possibly by the end of this year, silence will be a one-stop replacement for every single Halo editing program for Mac -- no more Eschaton, swordedit, or other miniature side projects. Silence will be the Halo modding application to use.

Concept art for the main map editing user interface. The black area is the 3D view of the game level, the top right is the area where you navigate tags in the map, and the bottom right is where you edit the selected tag:



Once silence is finished, I might release the source code. Included with the source code are C files that replace all my former published source code files, including the Zeus Retribution Library (retribution.h). And this most definitely is maybe 3 or 4 complete reverse engineering attempts past what I did with my Eschaton plugins.

Here is an example from my halo_definitions.h, which is, say, 7000 lines of code:

Code: Select all

#pragma mark - Tag Classes -
#pragma mark actr
struct halo_actr_section_perception
	float maximum_vision_distance;
	float central_vision_angle_rad;
	float maximum_vision_angle_rad;
	uint8_t pad_1[4];
	float peripheral_vision_angle_rad;
	float peripheral_distance;
	uint8_t pad_2[4];
	struct halo_vector_3d standing_gun_offset;
	struct halo_vector_3d crouching_gun_offset;
	float hearing_distance;
	float notice_projectile_chance;
	float notice_vehicle_chance;
	uint8_t pad_3[8];
	float combat_perception_time;
	float guard_perception_time;
	float non_combat_perception_time;
	// 3 calculated float values, 0 until compiled, compiled defaults:
	float unknown_1;   // 0.0555556
	float unknown_2;   // 0.0238095
	float unknown_3;   // 0.0166667 or 0

struct halo_actr_section_movement
	float dive_into_cover_chance;
	float emerge_from_cover_chance;
	float dive_from_grenade_chance;
	float path_finding_radius;
	float glass_ignorance_chance;
	float stationary_movement_distance;
	float free_flying_sidestep;
	float begin_moving_angle_rad;

struct halo_actr_section_looking
	uint8_t pad_1[4];
	struct halo_angle_2d maximum_aiming_deviation;
	struct halo_angle_2d maximum_looking_deviation;
	struct halo_angle_delta non_combat_look_delta;
	struct halo_angle_delta combat_look_delta;
	struct halo_angle_2d idle_aiming_range;
	struct halo_angle_2d idle_looking_range;
	struct halo_ranged_float event_look_time_modifier;
	struct halo_ranged_float non_combat_idle_facing;
	struct halo_ranged_float non_combat_idle_aiming;
	struct halo_ranged_float non_combat_idle_looking;
	struct halo_ranged_float guard_idle_facing;
	struct halo_ranged_float guard_idle_aiming;
	struct halo_ranged_float guard_idle_looking;
	struct halo_ranged_float combat_idle_facing;
	struct halo_ranged_float combat_idle_aiming;
	struct halo_ranged_float combat_idle_looking;
	uint8_t pad_2[8];
	// calculated values, 0 until compiled: 3 unknown values of the same data (0xb33bbd2e) followed by 1 float value of 0.5
	uint32_t unknown_1;
	uint32_t unknown_2;
	uint32_t unknown_3;
	float unknown_4;
	struct halo_dependency d1_do_not_use;	// weap
	uint8_t pad_3[268];
	struct halo_dependency d2_do_not_use;	// proj

struct halo_actr_section_unopposable
	enum halo_danger_level_triggers unreachable_danger_trigger_list;
	enum halo_danger_level_triggers vehicle_danger_trigger_list;
	enum halo_danger_level_triggers player_danger_trigger_list;
	uint8_t pad_1[2];
	struct halo_ranged_float danger_trigger_time;
	int16_t friends_killed_trigger;
	int16_t friends_retreating_trigger;
	uint8_t pad_2[12];
	struct halo_ranged_float retreat_time;
	uint8_t pad_3[8];

struct halo_actr_section_panic
	struct halo_ranged_float cowering_time;
	float friend_killed_panic_chance;
	enum halo_actor_types leader_type_list;
	uint8_t pad_1[2];
	float leader_killed_panic_chance;
	float panic_damage_threshold;
	float surprise_distance;
	uint8_t pad_2[4];

struct halo_actr_section_defensive
	uint8_t pad_1[24];
	struct halo_ranged_float hide_behind_cover_time;
	float hide_target_not_visible_time;
	float hide_shield_fraction;
	float attack_shield_fraction;
	float pursue_shield_fraction;
	uint8_t pad_2[16];
	enum halo_crouch_triggers defensive_crouch_type_list;
	uint8_t pad_3[2];
	float attacking_crouch_threshold;
	float defending_crouch_threshold;
	float minimum_stand_time;
	float minimum_crouch_time;
	float defending_hide_time_modifier;
	float attacking_evasion_threshold;
	float defending_evasion_threshold;
	float evasion_seek_cover_chance;
	float evasion_delay_time;
	float maximum_seek_cover_distance;
	float cover_damage_threshold;
	float stalking_discovery_time;
	float stalking_maximum_distance;
	float stationary_facing_angle_rad;
	float change_facing_stand_time;

struct halo_actr_section_pursuit
	uint8_t pad_1[4];
	struct halo_ranged_float uncover_delay_time;
	struct halo_ranged_float target_search_time;
	struct halo_ranged_float pursuit_position_time;
	int16_t num_positions_coord;
	int16_t num_positions_normal;
	uint8_t pad_2[32];

struct halo_actr_section_berserk
	float melee_attack_delay;
	float melee_fudge_factor;
	float melee_charge_time;
	struct halo_ranged_float melee_leap_range;
	float melee_leap_velocity;
	float melee_leap_chance;
	float melee_leap_ballistic;
	float berserk_damage_amount;
	float berserk_damage_threshold;
	float berserk_proximity;
	float suicide_sensing_distance;
	float berserk_grenade_chance;
	uint8_t pad_1[12];

struct halo_actr_section_firing_positions
	struct halo_ranged_float guard_position_time;
	struct halo_ranged_float combat_position_time;
	float old_position_avoid_distance;
	float friend_avoid_distance;
	uint8_t pad_1[40];

struct halo_actr_section_communication
	struct halo_ranged_float non_combat_idle_speech_time;
	struct halo_ranged_float combat_idle_speech_time;
	uint8_t pad_1[176];
	struct halo_dependency d1_do_not_use;	// actr
	uint8_t pad_2[48];

struct halo_actr
	struct halo_actr_flags_bf flags_bf;
	struct halo_actr_more_flags_bf more_flags_bf;
	uint8_t pad_1[12];
	enum halo_actor_types actor_type_list;
	uint8_t pad_2[2];
	struct halo_actr_section_perception perception;
	uint8_t pad_3[8];
	struct halo_actr_section_movement movement;
	struct halo_actr_section_looking looking;
	struct halo_actr_section_unopposable unopposable;
	struct halo_actr_section_panic panic;
	struct halo_actr_section_defensive defensive;
	struct halo_actr_section_pursuit pursuit;
	struct halo_actr_section_berserk berserk;
	struct halo_actr_section_firing_positions firing_positions;
	struct halo_actr_section_communication communication;

Like with the Zeus forum topic, I'll give a status update list, so you can be appraised of the development track. I'm starting this list after having already completed the .actor tag file reading/display functionality. Undo/redo functionality and saving to disk remain to be developed.

Given the modularity of things, it is too quick and easy for the development to separate each file format into reading and writing and interface, so I'll simply colorize green the file formats that are considered fully complete, as far as reading, writing, and arith-- I mean, displaying in the user interface. :lol: Green means that a file can be opened, displayed to the user, modified by the user with undo and redo functionality, and saved back to disk.
actr / .actor / Actor
actv / .actor_variant / Actor Variant
ant! / .antenna / Antenna
antr / .model_animations / Animations
bipd / .biped / Biped
bitm / .bitmap / Bitmap
boom / .spheroid / Spheroid
cdmg / .continuous_damage_effect / Continuous Damage Effect
coll / .model_collision_geometry / Collision Model
colo / .color_table / Color Table
cont / .contrail / Contrail
ctrl / .device_control / Control Panel
deca / .decal / Decal
DeLa / .ui_widget_definition / UI Widget Definition
devc / .input_device_defaults / Input Device Defaults
devi / .device / Device
dobc / .detail_object_collection / Detail Object Collection
effe / .effect / Effect
elec / .lightning / Lightning
eqip / .equipment / Equipment
flag / .flag / Flag Cloth
fog / .fog / Fog
font / .font / Font
foot / .material_effects / Material Collision Effects
garb / .garbage / Garbage
glw! / .glow /Particle Glow Effect
grhi / .grenade_hud_interface / Grenade HUD Interface
hmt / .hud_message_text / HUD Messages
hudg / .hud_globals / General HUD Settings
hud# / .hud_number / HUD Numbers Settings
item / .item / Item
itmc / .item_collection / Respawning Objects Collection
jpt! / .damage_effect / Damage Effect
lens / .lens_flare / Lens Flare
lifi / .device_light_fixture / Light Fixture
ligh / .light / Light
lsnd / .sound_looping / Looping Sound
mach / .device_machine / Machine
matg / .globals / General Game Settings
metr / .meter / Meter
mgs2 / .light_volume / Volumetric Light
mod2 / .gbxmodel / Gearbox PC Model
mode / .model / Xbox Model
mply / .multiplayer_scenario_description / Multiplayer Descriptions
ngpr / .preferences_network_game / Multiplayer Character Settings
obje / .object / Object
part / .particle / Particle
pctl / .particle_system / Particle System
phys / .physics / Object Physics
plac / .placeholder / Object Placeholder
pphy / .point_physics / Particle Point Physics
proj / .projectile / Projectile
rain / .weather_particle_system / Weather
sbsp / .scenario_structure_bsp / Scenario Environment Structure
scen / .scenery / Scenery
scex / .shader_transparent_chicago_extended / Extended Transparent Shader
schi / .shader_transparent_chicago / Transparent Shader
scnr / .scenario / Scenario Environment Configuration
senv / .shader_environment / Environment Shader
sgla / .shader_transparent_glass / Transparent Glass Shader
shdr / .shader / Generic Shader
sky / .sky / Sky
smet / .shader_transparent_meter / Transparent Meter Shader
snd! / .sound / Sound
snde / .sound_environment / Ambient Effect
soso / .shader_model / Model Shader
sotr / .shader_transparent_generic / Generic Transparent Shader
Soul / .ui_widget_collection / UI Widget Collection
spla / .shader_transparent_plasma / Transparent Plasma Shader
ssce / .sound_scenery / Sound-Emitting Scenery
str# / .string_list / String References
swat / .shader_transparent_water / Transparent Water Shader
tagc / .tag_collection / Tag Collection
trak / .camera_track / Camera Track
udlg / .dialogue / Unit Dialogue
unhi / .unit_hud_interface / Unit HUD Interface
unit / .unit / Unit
ustr / .unicode_string_list / Unicode String References
vcky / .virtual_keyboard / Virtual Keyboard
vehi / .vehicle / Vehicle
weap / .weapon / Weapon
wind / .wind / Wind
wphi / .weapon_hud_interface / Weapon HUD Interface

As I continue developing this application, I will post the most recent video preview here.


Simply reply to this forum post or send me a message in my Discord server:


silence version 1 for OS X 10.11+. The .zip archive password is:

Code: Select all

beta tester
Version 1 has full support for .actor tag files.


Version 1 is a milestone. I intend to easily complete the rest of the tag file support, probably within this month of May.

User avatar
Posts: 5
Joined: Wed Mar 28, 2018 1:46 pm

Re: silence

Post by joshZippy » Fri May 11, 2018 1:53 pm

very cool! thank you for this. <3

liquid light
Posts: 17
Joined: Mon Mar 19, 2018 3:54 am

status update

Post by liquid light » Sun May 27, 2018 6:11 am

I'm not using Auto Layout anymore. That means I've started over with the project, including some approaches that I learned.

If I get this working properly without issues, silence will be for Mac OS X 10.6.8 Snow Leopard. There is no apparent reason to use a newer Mac SDK.

I'm still experimenting with presentation of information. A list of all Halo-related files and a single window that can compare two files side-by-side and a HUD information window and a 3D rendering window are currently planned.

liquid light
Posts: 17
Joined: Mon Mar 19, 2018 3:54 am

Re: silence

Post by liquid light » Sat Jun 09, 2018 11:21 am

Here is a video and some screenshots showing my "silence" application for Mac OS X 10.6 rendering some Halo game level terrains from Halo Editing Kit .scenario_structure_bsp tag files. The terrains are bloodgulch and tutorial. Tutorial is a game level that comes with the Halo Editing Kit, and Bloodgulch is a popular multiplayer game level.


If any Mac users are interested in a build of silence and some HEK SBSP terrain tags to play around with, they can get in touch with me in my Discord server where I post development updates and screenshots.

Have a wonderful weekend!

liquid light
Posts: 17
Joined: Mon Mar 19, 2018 3:54 am

Re: silence

Post by liquid light » Sat Jun 09, 2018 7:31 pm

Hey, I'm sorry about the low-quality video export. Also, I noticed afterwards that the X axis in the view needed to be negated. Here is a development build of silence from today:


by sparky
Development Build 2 for Mac OS X 10.6+
June 9, 2018

Demonstrated feature:
Open a .scenario_structure_bsp tag and view its terrain geometry in point and edge (wireframe) modes.


1. Start silence
2. You can close the documents list window if you want.
3. File -> Open , select a tag from the "sbsp tags" folder or another .scenario_structure_bsp tag of your own.
4. You can maximize the resulting tag window -- if you didn't close or move the documents list window, the tag window will probably be hidden behind it at the top left corner of the screen.
5. Use the following controls:

Code: Select all

E                forward
D                backwards
S                strafe left
F                strafe right
space            move up
Z                move down
A                reset camera
V                cycle display modes; only the first two modes are properly applied: point and edge modes
right click        toggle camera mouse control
esc                back out of mouse control and key control
mouse wheel        while the mouse is controlling the camera, alters the field of view
You can open all the tags at once, but the handling is unrefined, so be prepared to use 5 GB of RAM or more if you do this. I recommend that you only open at most one or two tag documents simultaneously.

Oh, and you can also open .actor tag files, but I didn't redo the window for that yet, so trying to open those documents is aimless in this build. ...
- silence, demonstration build 2 application
- Instructions
- Folder with 89 .scenario_structure_bsp tags, 88 of which were extracted from Halo PC maps using HEK+, and 1 of which is from the HEK tutorial map tag files



Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest