MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / ObjInitWeapon

Function ObjInitWeapon

Descent3/ObjInit.cpp:965–1033  ·  view source on GitHub ↗

Initialize a weapon Returns 1 if ok, 0 if error

Source from the content-addressed store, hash-verified

963// Initialize a weapon
964// Returns 1 if ok, 0 if error
965int ObjInitWeapon(object *objp) {
966 weapon *weap;
967 int ret = 1;
968 ASSERT(objp->type == OBJ_WEAPON);
969
970 if (objp->id < 0 || objp->id >= MAX_WEAPONS)
971 return 0;
972
973 weap = &Weapons[objp->id];
974 ASSERT(weap->used > 0);
975 // Set up shields
976 objp->shields = 0;
977 // Set up control info
978 SetObjectControlType(objp, CT_WEAPON);
979 // Not tracking anything
980 objp->ctype.laser_info.track_handle = OBJECT_HANDLE_NONE;
981 // Set up physics info
982 objp->movement_type = MT_PHYSICS;
983 objp->mtype.phys_info.mass = weap->phys_info.mass;
984 objp->mtype.phys_info.drag = weap->phys_info.drag;
985 objp->mtype.phys_info.rotdrag = weap->phys_info.rotdrag;
986 objp->mtype.phys_info.flags = weap->phys_info.flags;
987
988 objp->mtype.phys_info.full_rotthrust = weap->phys_info.full_rotthrust;
989 objp->mtype.phys_info.full_thrust = weap->phys_info.full_thrust;
990 objp->mtype.phys_info.rotvel = weap->phys_info.rotvel;
991 // objp->mtype.phys_info.rot_thrust = weap->phys_info.full_rot_thrust;
992 objp->mtype.phys_info.wiggle_amplitude = weap->phys_info.wiggle_amplitude;
993 objp->mtype.phys_info.wiggles_per_sec = weap->phys_info.wiggles_per_sec;
994 objp->mtype.phys_info.num_bounces = weap->phys_info.num_bounces;
995 objp->mtype.phys_info.coeff_restitution = weap->phys_info.coeff_restitution;
996 objp->lifeleft = weap->life_time;
997 objp->lifetime = weap->life_time;
998 objp->ctype.laser_info.thrust_left = weap->thrust_time;
999 objp->ctype.laser_info.last_drop_time = 0;
1000 objp->mtype.phys_info.hit_die_dot = weap->phys_info.hit_die_dot;
1001 // Set impact stuff
1002 objp->impact_size = weap->impact_size;
1003 objp->impact_time = weap->impact_time;
1004 objp->impact_player_damage = weap->impact_player_damage;
1005 objp->impact_generic_damage = weap->impact_generic_damage;
1006 objp->impact_force = weap->impact_force;
1007 // Set up a few flags
1008 objp->mtype.phys_info.flags |= PF_NO_COLLIDE_PARENT;
1009 objp->flags |= OF_USES_LIFELEFT;
1010 // Set up rendering info
1011 objp->render_type = RT_WEAPON;
1012
1013 if (!((weap->flags & WF_IMAGE_BITMAP) || (weap->flags & WF_IMAGE_VCLIP))) {
1014 objp->rtype.pobj_info.model_num = weap->fire_image_handle;
1015 objp->rtype.pobj_info.dying_model_num = -1;
1016 PageInPolymodel(weap->fire_image_handle, OBJ_WEAPON, &weap->size);
1017
1018 objp->rtype.pobj_info.subobj_flags = 0xFFFFFFFF;
1019 objp->flags |= OF_POLYGON_OBJECT;
1020 } else if (weap->flags & WF_IMAGE_VCLIP) {
1021 PageInVClip(weap->fire_image_handle);
1022 }

Callers 1

ObjInitTypeSpecificFunction · 0.85

Calls 3

SetObjectControlTypeFunction · 0.85
PageInPolymodelFunction · 0.85
PageInVClipFunction · 0.85

Tested by

no test coverage detected