Skip to content

Commit a3f54df

Browse files
committed
First draft of prop object type
1 parent a224736 commit a3f54df

37 files changed

+1158
-48
lines changed

code/globalincs/globals.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
#define MAX_SHIPS 500 // max number of ship instances there can be.DTP; bumped from 200 to 400, then to 500 in 2022
3535
#define SHIPS_LIMIT 500 // what MAX_SHIPS will be at release time (for error checking in debug mode); dtp Bumped from 200 to 400, then to 500 in 2022
3636

37+
// from prop.h
38+
#define MAX_PROPS 200 // Arbitrary guess
39+
3740
// from missionparse.h and then redefined to the same value in sexp.h
3841
#define TOKEN_LENGTH 32
3942

code/graphics/shadows.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ void shadows_render_all(fov_t fov, matrix *eye_orient, vec3d *eye_pos)
509509
switch(objp->type)
510510
{
511511
case OBJ_RAW_POF:
512+
case OBJ_PROP:
512513
case OBJ_SHIP:
513514
{
514515
obj_queue_render(objp, &scene);

code/mission/missionparse.cpp

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
#include "parse/generic_log.h"
6565
#include "parse/parselo.h"
6666
#include "parse/sexp_container.h"
67+
#include "prop/prop.h"
6768
#include "scripting/global_hooks.h"
6869
#include "scripting/hook_api.h"
6970
#include "scripting/hook_conditions.h"
@@ -140,6 +141,9 @@ p_object Ship_arrival_list; // for linked list of ships to arrive later
140141
// all the ships that we parse
141142
SCP_vector<p_object> Parse_objects;
142143

144+
// all the props that we parse
145+
SCP_vector<parsed_prop> Parse_props;
146+
143147

144148
// list for arriving support ship
145149
p_object Support_ship_pobj;
@@ -4934,17 +4938,50 @@ void parse_wing(mission *pm)
49344938
// Goober5000 - wing creation stuff moved to post_process_ships_wings
49354939
}
49364940

4941+
void parse_prop(mission* pm)
4942+
{
4943+
parsed_prop prop;
4944+
required_string("$Name:");
4945+
stuff_string(prop.name, F_NAME, NAME_LENGTH);
4946+
4947+
// Maybe do this by name instead?
4948+
required_string("$Class:");
4949+
stuff_int(&prop.prop_info_index);
4950+
4951+
required_string("$Location:");
4952+
stuff_vec3d(&prop.position);
4953+
4954+
required_string("$Orientation:");
4955+
stuff_matrix(&prop.orientation);
4956+
4957+
Parse_props.emplace_back(prop);
4958+
}
4959+
49374960
void parse_wings(mission* pm)
49384961
{
49394962
required_string("#Wings");
4940-
while (required_string_either("#Events", "$Name:"))
4941-
{
4963+
while (true) {
4964+
int which = required_string_one_of(3, "#Events", "#Props", "$Name:");
4965+
4966+
if (which == -1 || which == 0 || which == 1) // #Events or #Props
4967+
break;
4968+
49424969
Assert(Num_wings < MAX_WINGS);
49434970
parse_wing(pm);
49444971
Num_wings++;
49454972
}
49464973
}
49474974

4975+
void parse_props(mission* pm)
4976+
{
4977+
if (optional_string("#Props")) {
4978+
while (required_string_either("#Events", "$Name:")) {
4979+
Assert(Parse_props.size() < MAX_PROPS);
4980+
parse_prop(pm);
4981+
}
4982+
}
4983+
}
4984+
49484985
// Goober5000
49494986
void resolve_path_masks(int anchor, int *path_mask)
49504987
{
@@ -5023,6 +5060,15 @@ void post_process_path_stuff()
50235060
}
50245061
}
50255062

5063+
// MjnMixael
5064+
void post_process_props()
5065+
{
5066+
for (int i = 0; i < static_cast<int>(Parse_props.size()); i++) {
5067+
parsed_prop* propp = &Parse_props[i];
5068+
prop_create(&propp->orientation, &propp->position, propp->prop_info_index, propp->name);
5069+
}
5070+
}
5071+
50265072
// Goober5000
50275073
void post_process_ships_wings()
50285074
{
@@ -5147,7 +5193,6 @@ void post_process_ships_wings()
51475193
mission_parse_maybe_create_parse_object(&p_obj);
51485194
}
51495195

5150-
51515196
// ----------------- at this point the ships have been created -----------------
51525197
// Now set up the wings. This must be done after both dock stuff and ship stuff.
51535198

@@ -6298,6 +6343,7 @@ bool parse_mission(mission *pm, int flags)
62986343
parse_player_info(pm);
62996344
parse_objects(pm, flags);
63006345
parse_wings(pm);
6346+
parse_props(pm);
63016347
parse_events(pm);
63026348
parse_goals(pm);
63036349
parse_waypoints_and_jumpnodes(pm);
@@ -6383,6 +6429,8 @@ bool post_process_mission(mission *pm)
63836429
ship_weapon *swp;
63846430
ship_obj *so;
63856431

6432+
post_process_props();
6433+
63866434
// Goober5000 - this must be done even before post_process_ships_wings because it is a prerequisite
63876435
ship_clear_ship_type_counts();
63886436

@@ -6839,6 +6887,7 @@ void mission_init(mission *pm)
68396887

68406888
jumpnode_level_close();
68416889
waypoint_level_close();
6890+
props_level_close();
68426891

68436892
red_alert_invalidate_timestamp();
68446893
event_music_reset_choices();
@@ -6870,6 +6919,8 @@ void mission_init(mission *pm)
68706919

68716920
Num_reinforcements = 0;
68726921

6922+
Parse_props.clear();
6923+
68736924
Asteroid_field.num_initial_asteroids = 0;
68746925

68756926
// This could be set with a sexp, so we should reset it here

code/model/animation/modelanimation_driver.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ namespace animation {
9898
}
9999
}
100100

101+
// ADD PROP HERE
101102
template<typename property, property ship::* property_ptr, float property::* subproperty_ptr>
102103
static float get_ship_subproperty_float(polymodel_instance* pmi){
103104
int objnum = get_pmi_objnum(pmi);

code/model/modelread.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4906,6 +4906,7 @@ void model_get_moving_submodel_list(SCP_vector<int> &submodel_vector, const obje
49064906

49074907
int model_instance_num;
49084908
int model_num;
4909+
// ADD PROP HERE
49094910
if (objp->type == OBJ_SHIP) {
49104911
model_instance_num = Ships[objp->instance].model_instance_num;
49114912
model_num = Ship_info[Ships[objp->instance].ship_info_index].model_num;

code/model/modelrender.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,6 +1372,7 @@ int model_render_determine_elapsed_time(int objnum, uint64_t flags)
13721372
if ( objnum >= 0 ) {
13731373
object *objp = &Objects[objnum];
13741374

1375+
// ADD PROP HERE
13751376
if ( objp->type == OBJ_SHIP ) {
13761377
return timestamp_since(Ships[objp->instance].base_texture_anim_timestamp);
13771378
}
@@ -1968,6 +1969,7 @@ void model_render_set_glow_points(const polymodel *pm, int objnum)
19681969
if ( objnum > -1 ) {
19691970
object *objp = &Objects[objnum];
19701971

1972+
// ADD PROP HERE
19711973
if ( objp != NULL && objp->type == OBJ_SHIP ) {
19721974
shipp = &Ships[Objects[objnum].instance];
19731975
sip = &Ship_info[shipp->ship_info_index];
@@ -2721,6 +2723,7 @@ void model_render_queue(const model_render_params* interp, model_draw_list* scen
27212723
objp = &Objects[objnum];
27222724
int tentative_num = -1;
27232725

2726+
// ADD PROP HERE
27242727
if (objp->type == OBJ_SHIP) {
27252728
shipp = &Ships[objp->instance];
27262729
tentative_num = shipp->model_instance_num;
@@ -3018,6 +3021,7 @@ void model_render_only_glowpoint_lights(const model_render_params* interp, int m
30183021
objp = &Objects[objnum];
30193022
int tentative_num = -1;
30203023

3024+
// ADD PROP HERE
30213025
if (objp->type == OBJ_SHIP) {
30223026
shipp = &Ships[objp->instance];
30233027
tentative_num = shipp->model_instance_num;

code/nebula/neb.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,7 @@ int neb2_skip_render(object *objp, float z_depth)
673673

674674
// any ship or raw pof less than 3% visible at their closest point
675675
case OBJ_RAW_POF:
676+
case OBJ_PROP:
676677
case OBJ_SHIP:
677678
if (fog < 0.03f)
678679
return 1;
@@ -708,6 +709,8 @@ float neb2_get_lod_scale(int objnum)
708709
ship *shipp;
709710
ship_info *sip;
710711

712+
// ADD PROP HERE
713+
711714
// bogus
712715
if ( (objnum < 0)
713716
|| (objnum >= MAX_OBJECTS)
@@ -1089,6 +1092,7 @@ void neb2_get_fog_values(float *fnear, float *ffar, object *objp)
10891092
return;
10901093
}
10911094

1095+
// ADD PROP HERE
10921096
// determine what fog index to use
10931097
if(objp->type == OBJ_SHIP) {
10941098
Assert((objp->instance >= 0) && (objp->instance < MAX_SHIPS));

code/object/collidedebrisship.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
#include "ship/ship.h"
2424
#include "ship/shiphit.h"
2525

26+
// Need a version of this for PROPS
27+
2628

2729
void calculate_ship_ship_collision_physics(collision_info_struct *ship_ship_hit_info);
2830

code/object/collidepropdebris.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// STUB

code/object/collidepropship.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
//STUB

0 commit comments

Comments
 (0)