Skip to content

Instantly share code, notes, and snippets.

@ammaraskar
Last active January 4, 2023 14:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ammaraskar/bc9b613e26f1a262ce0ea5dcf1e58478 to your computer and use it in GitHub Desktop.
Save ammaraskar/bc9b613e26f1a262ce0ea5dcf1e58478 to your computer and use it in GitHub Desktop.
sims2 effects resource
meta:
id: effects
file-extension: effects
endian: le
seq:
- id: first_short
type: u2
- id: num_particles
type: u4
- id: particles
type: particle
repeat: expr
repeat-expr: num_particles
- id: num_meta_particles
type: u4
- id: meta_particles
type: meta_particle
repeat: expr
repeat-expr: num_meta_particles
- id: num_decals
type: u4
- id: decals
type: decal
repeat: expr
repeat-expr: num_decals
- id: num_brushes
type: u4
- id: num_scrubbers
type: u4
- id: num_sequences
type: u4
- id: sequences
type: sequence
repeat: expr
repeat-expr: num_sequences
- id: num_sounds
type: u4
- id: sounds
type: sound
repeat: expr
repeat-expr: num_sounds
- id: num_cameras
type: u4
- id: cameras
type: camera
repeat: expr
repeat-expr: num_cameras
- id: num_games
type: u4
- id: num_models
type: u4
- id: models
type: model
repeat: expr
repeat-expr: num_models
- id: num_screens
type: u4
- id: screens
type: screen
repeat: expr
repeat-expr: num_screens
- id: num_waters
type: u4
- id: waters
type: water
repeat: expr
repeat-expr: num_waters
- id: num_lights
type: u4
- id: visual_effect_version
type: u2
- id: num_visual_efects
type: u4
- id: visual_effects
type: visual_effect
repeat: expr
repeat-expr: num_visual_efects
- id: effect_ids
type: effect_id
repeat: until
repeat-until: _.effect_name.string == "end"
types:
effect_id:
seq:
- id: effect_name
type: length_prefixed_string
- id: effect_id
type: u4
vec2_float:
seq:
- id: x
type: f4
- id: y
type: f4
vec3_float:
seq:
- id: x
type: f4
- id: y
type: f4
- id: z
type: f4
vec3_float_list:
seq:
- id: num_elements
type: u4
- id: values
type: vec3_float
repeat: expr
repeat-expr: num_elements
bounding_box:
seq:
- id: corner1
type: vec3_float
- id: corner2
type: vec3_float
float_curve:
seq:
# TODO: there's a different type here, see if it shows up in practice.
# Marked by (type_and_length & 0xff000000) != 0
- id: type_and_length
type: u4
- id: curve_values
type: f4
repeat: expr
repeat-expr: type_and_length
wiggle:
seq:
- id: time_rate
type: f4
- id: rate_direction
type: vec3_float
- id: wiggle_direction
type: vec3_float
wiggle_list:
seq:
- id: num_wiggles
type: u4
- id: wiggles
type: wiggle
repeat: expr
repeat-expr: num_wiggles
tractor_point:
seq:
- id: vec1
type: vec3_float
- id: vec2
type: vec3_float
- id: float
type: f4
tractor_points:
seq:
- id: num_points
type: u4
- id: points
type: tractor_point
repeat: expr
repeat-expr: num_points
length_prefixed_string:
seq:
- id: length
type: u4
- id: string
type: str
terminator: 0
size: length
encoding: UTF-8
particle_rotation:
seq:
- id: unknown_rotation_u8
type: u1
- if: _parent.version < 6
id: rotate_mult_vary_range
type: f4
- if: _parent.version < 6
id: rotate_unknown_float
type: f4
- if: _parent.version >= 6
id: rotate_mult_vary_range_vec
type: vec2_float
- if: _parent.version >= 6
id: rotate_unknown_vec
type: vec2_float
- id: rotation_offsets
type: f4
- id: rotation_unknown_float
type: f4
collider:
seq:
- id: flags
type: u4
- id: unknown_byte
type: u1
if: (flags & 0x1) == 1
- id: unknown_string_1
type: length_prefixed_string
- id: unknown_vec1
type: vec3_float
- id: unknown_vec2
type: vec3_float
- id: unknown_vec3
type: vec3_float
- id: unknown_float1
type: f4
- id: unknown_float2
type: f4
- if: ((flags & 0x1) == 1) and (unknown_byte != 0)
id: unknown_float3
type: f4
- id: unknown_float4
type: f4
- id: unknown_float5
type: f4
- id: unknown_string_2
type: length_prefixed_string
- id: unknown_string_3
type: length_prefixed_string
colliders:
seq:
- id: num_colliders
type: u4
- id: collider
type: collider
repeat: expr
repeat-expr: num_colliders
random_walk:
seq:
- id: vec1
type: vec2_float
- id: vec2
type: vec2_float
- id: f1
type: f4
- id: f2
type: f4
- id: f3
type: f4
particle:
seq:
- id: version
type: u2
- if: version < 5
id: flags_old
type: u4
- if: version >= 5
type: u8
- id: life
type: vec2_float
- id: life_preroll
type: f4
- id: rate_delay
type: vec2_float
- id: rate_trigger
type: vec2_float
- id: unknown_bounding_box
type: bounding_box
- id: emit_speed
type: vec2_float
- id: emit_direction_bounding_box
type: bounding_box
- if: "version > 2"
id: unknown_float
type: f4
- id: rate_curve
type: float_curve
- id: rate_unknown_float1
type: f4
- id: unknown_short1
type: u2
- id: rate_speed_scale
type: f4
- id: size_curve
type: float_curve
- id: size_vary
type: f4
- id: aspect_curve
type: float_curve
- id: aspect_vary
type: f4
- id: rotate_axis
type: vec3_float
- id: unknown_vec3_float
type: vec3_float
- id: particle_rotation
type: particle_rotation
- id: unknown_float_curve1
type: float_curve
- id: unknown_float_curve2
type: float_curve
- if: version > 4
id: unknown_vec3_float_2
type: vec3_float_list
- if: version > 4
id: unknown_vec3_float_3
type: vec3_float
- id: alpha_curve
type: float_curve
- id: alpha_vary
type: f4
- id: color_rgb
type: vec3_float_list
- id: color_vary
type: vec3_float
- id: unknown_string
type: length_prefixed_string
- id: tile_count_u
type: u1
- id: tile_count_v
type: u1
- id: particle_alignment_type
type: u1
- id: particle_draw_type
type: u1
- id: layer
type: f4
- id: frame_speed
type: f4
- id: frame_start
type: u1
- id: frame_count
type: u1
- id: unknown_vec3_float_4
type: vec3_float
- id: unknown_float_2
type: f4
- id: unknown_float_3
type: f4
- id: unknown_vec3_float_5
type: vec3_float
- id: unknown_float_4
type: f4
- id: unknown_float_5
type: f4
- id: screw
type: f4
- id: unknown_wiggle
type: wiggle_list
- id: unknown_u1_1
type: u1
- id: unknown_u1_2
type: u1
- id: unknown_u1_3
type: u1
- id: unknown_u1_4
type: u1
- id: colliders
type: colliders
- id: unknown_string_2
type: length_prefixed_string
- if: version > 10
id: unknown_float_6
type: vec3_float
- id: terrain_bounce
type: f4
- id: unknown_float_7
type: f4
- id: unknown_float_8
type: f4
- id: terrain_repel_scout
type: f4
- id: terrain_repel_vertical
type: f4
- id: terrain_repel_kill_height
type: f4
- id: terrain_death
type: f4
- id: unknown_float_9
type: f4
- id: unknown_vec2_float_1
type: vec2_float
- id: random_walk_delay
type: vec2_float
- id: random_walk_strength
type: vec2_float
- id: random_walk_turn1
type: f4
- id: random_walk_turn2
type: f4
- if: version < 8
id: unknown_attractor_vec
type: vec3_float
- if: version < 8
id: attractor_strength_curve
type: float_curve
- if: version < 8
id: unknown_attractor_float
type: f4
meta_particle:
seq:
- id: version
type: u2
- id: flags
type: u8
- id: life
type: vec2_float
- id: life_preroll
type: f4
- id: rate_delay
type: vec2_float
- id: rate_trigger
type: vec2_float
- id: unknown_bounding_box
type: bounding_box
- id: emit_speed
type: vec2_float
- id: emit_direction_bounding_box
type: bounding_box
- if: "version > 1"
id: unknown_float
type: f4
- id: rate_curve
type: float_curve
- id: rate_unknown_float1
type: f4
- id: unknown_u4
type: u4
- id: size_curve
type: float_curve
- id: size_vary
type: f4
- id: aspect_curve
type: float_curve
- id: aspect_vary
type: f4
- id: rotate_curve
type: float_curve
- id: rotate_vary
type: f4
- id: rotate_offset
type: f4
- id: color_rgb
type: vec3_float_list
- id: color_vary
type: vec3_float
- id: alpha_curve
type: float_curve
- id: alpha_vary
type: f4
- id: base_effect_name
type: length_prefixed_string
- id: particle_alignment_type
type: u1
- id: unknown_vec3_float_1
type: vec3_float
- id: unknown_float_1
type: f4
- id: unknown_float_2
type: f4
- id: unknown_vec3_float_2
type: vec3_float
- id: unknown_float_3
type: f4
- id: unknown_float_4
type: f4
- id: unknown_wiggle
type: wiggle_list
- id: bloom_alpha_1
type: u1
- id: bloom_alpha_2
type: u1
- id: bloom_size_1
type: u1
- id: bloom_size_2
type: u1
- id: colliders
type: colliders
- id: terrain_bounce
type: f4
- id: unknown_float_7
type: f4
- id: unknown_float_8
type: f4
- id: terrain_repel_scout
type: f4
- id: terrain_repel_vertical
type: f4
- id: terrain_repel_kill_height
type: f4
- id: terrain_death
type: f4
- id: unknown_float_9
type: f4
- id: unknown_vec2_float_1
type: vec2_float
- id: random_walks
type: random_walk
repeat: expr
repeat-expr: 2
- id: walk_prefer_direction
type: vec3_float
- id: alignment_damp
type: f4
- id: alignment_bank_wind
type: f4
- id: alignment_bank
type: f4
- if: version < 4
id: attractor_vec
type: vec3_float
- if: version < 4
id: attractor_curve
type: float_curve
- if: version < 4
id: attractor_range
type: f4
- if: version < 3
id: tractor_points
type: tractor_points
- id: unknown_float_last
type: f4
decal:
seq:
- id: version
type: u2
- id: flags
type: u4
- id: texture_name
type: length_prefixed_string
- id: decal_draw_type
type: u1
- id: life_type
type: u1
- id: life
type: f4
- id: rotate_curve
type: float_curve
- id: size_curve
type: float_curve
- id: alpha_curve
type: float_curve
- id: color_rgb
type: vec3_float_list
- id: aspect_curve
type: float_curve
- id: alpha_vary
type: f4
- id: size_vary
type: f4
- id: rotate_vary
type: f4
- id: texture_repeat
type: f4
- id: texture_offset
type: vec2_float
sequence_effect:
seq:
- id: activate_time
type: vec2_float
- id: effect_name
type: length_prefixed_string
sequence:
seq:
- id: version
type: u2
- id: num_sequences
type: u4
- id: sequence
type: sequence_effect
repeat: expr
repeat-expr: num_sequences
- id: flags
type: u4
sound:
seq:
- id: version
type: u2
- id: flags
type: u4
- id: audio_id
type: u4
- id: location_update_delta
type: f4
- id: play_time
type: f4
- id: volume
type: f4
camera:
seq:
- id: version
type: u2
- id: flags
type: u4
- id: life
type: f4
- id: shake_fade_length
type: f4
- id: shake_amplitude
type: float_curve
- id: shake_frequency
type: float_curve
- id: shake_aspect
type: f4
- id: shake_type
type: u1
- id: heading
type: float_curve
- id: pitch
type: float_curve
- id: roll
type: float_curve
- id: orbit
type: float_curve
- id: field_of_view
type: float_curve
- id: near_clip
type: float_curve
- id: far_clip
type: float_curve
- id: zoom
type: s1
- id: rotate
type: s1
- id: attach_radius
type: f4
- id: camera_select
type: length_prefixed_string
model:
seq:
- id: version
type: u2
- id: model_name
type: length_prefixed_string
- id: size
type: f4
- id: color
type: vec3_float
- id: alpha
type: f4
screen:
seq:
- id: version
type: u2
- id: mode
type: u1
- id: flags
type: u4
- id: color_rgb
type: vec3_float_list
- id: strength
type: float_curve
- id: length
type: f4
- id: delay
type: f4
- id: texture
type: length_prefixed_string
water_zero_flag:
seq:
- id: drop_size
type: f4
- id: drop_depth
type: f4
- id: x
type: f4
water:
seq:
- id: version
type: u2
- id: flags
type: u4
- if: flags == 0
id: zero_variant
type: water_zero_flag
matrix:
seq:
- id: elements
type: vec3_float
repeat: expr
repeat-expr: 3
visual_effect_transform:
seq:
- id: byte_1
type: u1
- id: float_1
type: f4
- id: matrix_1
type: matrix
- id: vec_1
type: vec3_float
visual_effect:
seq:
- id: flags
type: u4
- id: short_1
type: u2
- if: _parent.visual_effect_version < 3
id: short_2
type: u2
- if: _parent.visual_effect_version >= 3
id: int_1
type: u4
- id: int_2
type: u4
- id: int_3
type: u4
- id: vec_1
type: vec2_float
- id: num_visual_descriptions
type: u4
- id: visual_effect_descriptions
type: visual_effect_description
repeat: expr
repeat-expr: num_visual_descriptions
visual_effect_description:
seq:
- id: base_effect
type: length_prefixed_string
- id: block_type
type: u1
- id: flags
type: u4
- id: transform
type: visual_effect_transform
- id: lod_begin
type: u1
- id: lod_end
type: u1
- id: emit_scale_begin
type: f4
- id: emit_scale_end
type: f4
- id: size_scale_begin
type: f4
- id: size_scale_end
type: f4
- id: alpha_scale_begin
type: f4
- id: alpha_scale_end
type: f4
- if: _parent._parent.visual_effect_version < 3
id: short_1
type: u2
- if: _parent._parent.visual_effect_version < 3
id: short_2
type: u2
- id: selection_group
type: u2
- id: selection_chance
type: u2
- id: time_scale
type: f4
- id: block_index
type: s4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment