Skip to content

Commit a377ce2

Browse files
committed
First draft of prop object type
1 parent f96c73f commit a377ce2

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

@@ -6844,6 +6892,7 @@ void mission_init(mission *pm)
68446892

68456893
jumpnode_level_close();
68466894
waypoint_level_close();
6895+
props_level_close();
68476896

68486897
red_alert_invalidate_timestamp();
68496898
event_music_reset_choices();
@@ -6875,6 +6924,8 @@ void mission_init(mission *pm)
68756924

68766925
Num_reinforcements = 0;
68776926

6927+
Parse_props.clear();
6928+
68786929
Asteroid_field.num_initial_asteroids = 0;
68796930

68806931
// 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
@@ -4925,6 +4925,7 @@ void model_get_moving_submodel_list(SCP_vector<int> &submodel_vector, const obje
49254925

49264926
int model_instance_num;
49274927
int model_num;
4928+
// ADD PROP HERE
49284929
if (objp->type == OBJ_SHIP) {
49294930
model_instance_num = Ships[objp->instance].model_instance_num;
49304931
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
@@ -1327,6 +1327,7 @@ int model_render_determine_elapsed_time(int objnum, uint64_t flags)
13271327
if ( objnum >= 0 ) {
13281328
object *objp = &Objects[objnum];
13291329

1330+
// ADD PROP HERE
13301331
if ( objp->type == OBJ_SHIP ) {
13311332
return timestamp_since(Ships[objp->instance].base_texture_anim_timestamp);
13321333
}
@@ -1923,6 +1924,7 @@ void model_render_set_glow_points(const polymodel *pm, int objnum)
19231924
if ( objnum > -1 ) {
19241925
object *objp = &Objects[objnum];
19251926

1927+
// ADD PROP HERE
19261928
if ( objp != NULL && objp->type == OBJ_SHIP ) {
19271929
shipp = &Ships[Objects[objnum].instance];
19281930
sip = &Ship_info[shipp->ship_info_index];
@@ -2607,6 +2609,7 @@ void model_render_queue(const model_render_params* interp, model_draw_list* scen
26072609
objp = &Objects[objnum];
26082610
int tentative_num = -1;
26092611

2612+
// ADD PROP HERE
26102613
if (objp->type == OBJ_SHIP) {
26112614
shipp = &Ships[objp->instance];
26122615
tentative_num = shipp->model_instance_num;
@@ -2925,6 +2928,7 @@ void model_render_only_glowpoint_lights(const model_render_params* interp, int m
29252928
objp = &Objects[objnum];
29262929
int tentative_num = -1;
29272930

2931+
// ADD PROP HERE
29282932
if (objp->type == OBJ_SHIP) {
29292933
shipp = &Ships[objp->instance];
29302934
tentative_num = shipp->model_instance_num;

code/nebula/neb.cpp

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

679679
// any ship or raw pof less than 3% visible at their closest point
680680
case OBJ_RAW_POF:
681+
case OBJ_PROP:
681682
case OBJ_SHIP:
682683
if (fog < 0.03f)
683684
return 1;
@@ -713,6 +714,8 @@ float neb2_get_lod_scale(int objnum)
713714
ship *shipp;
714715
ship_info *sip;
715716

717+
// ADD PROP HERE
718+
716719
// bogus
717720
if ( (objnum < 0)
718721
|| (objnum >= MAX_OBJECTS)
@@ -1094,6 +1097,7 @@ void neb2_get_fog_values(float *fnear, float *ffar, object *objp)
10941097
return;
10951098
}
10961099

1100+
// ADD PROP HERE
10971101
// determine what fog index to use
10981102
if(objp->type == OBJ_SHIP) {
10991103
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)