// Interactive_models\Parakeets.gsc // At Nate's suggestion I'm trying not to entangle this with other systems. There are some things I can't avoid though. // I introduced a level array called "_interactive" that I'll use for all this stuff that isn't a traditional destructible. // However, my intention is that any given type of interactive object can have its own struct in this array. // Parakeets are interactive_birds. They have a rig that all the birds attach to and different bird models for flying vs sitting. // The 'dlc' version uses modified mp animations, which are hacky but still, it should be copied over the original version if // we plan to continue using it for the next game. (NB: It hasn't been tested in SP yet.) #include common_scripts\utility; #using_animtree( "animals_dlc" ); main() { info = SpawnStruct(); info.interactive_type = "parakeets_dlc"; info.rig_model = "pigeon_flock_rig"; info.rig_animtree = #animtree; info.rig_numtags = 12; info.bird_model["idle"] = "parakeet"; info.bird_model["fly"] = "parakeet_fly"; info.bird_animtree = #animtree; info.topSpeed = 600; // Inches per second. info.accn = 150; // Use this for both acceleration and deceleration. info.scareRadius = 300; // Default distance at which pigeons will leave perch to avoid player or AI. info.death_effect = LoadFX( "fx/props/chicken_exp_white" ); info.birdmodel_anims = []; info.rigmodel_anims = []; info.birdmodel_anims[ "idle" ][ 0 ] = %pigeon_idle; info.birdmodel_anims[ "idleweight" ][ 0 ] = 1; info.birdmodel_anims[ "idle" ][ 1 ] = %pigeon_idle_twitch_1; info.birdmodel_anims[ "idleweight" ][ 1 ] = 0.3; info.birdmodel_anims[ "flying" ] = %pigeon_flying_cycle; info.rigmodel_anims[ "flying" ] = %pigeon_flock_fly_loop; info.rigmodel_anims[ "takeoff_wire" ] = %pigeon_flock_takeoff_wire; // These match the Radiant keypairs "interactive_takeoffAnim" and "interactive_landAnim" info.rigmodel_anims[ "land_wire" ] = %pigeon_flock_land_wire; info.rigmodel_anims[ "takeoff_ground" ] = %pigeon_flock_takeoff_ground; info.rigmodel_anims[ "land_ground" ] = %pigeon_flock_land_ground; info.rigmodel_anims[ "takeoff_inpipe" ] = %pigeon_flock_takeoff_inpipe; info.rigmodel_anims[ "land_inpipe" ] = %pigeon_flock_land_inpipe; if ( !isSP() ) { info.birdmodel_anims[ "idlemp" ][ 0 ] = "pigeon_idle"; info.birdmodel_anims[ "idlemp" ][ 1 ] = "pigeon_idle_twitch_1"; info.birdmodel_anims[ "flyingmp" ] = "pigeon_flying_cycle"; // These _mp animations for the rig are a hack. They are identical to the SP animations in length and // motion, but keep the tags all facing forward, since the MP animations can't be rotated the same way // the SP ones can. info.rigmodel_anims[ "flyingmp" ] = "pigeon_flock_fly_loop_mp"; info.rigmodel_anims[ "takeoff_wiremp" ] = "pigeon_flock_takeoff_wire_mp"; info.rigmodel_anims[ "land_wiremp" ] = "pigeon_flock_land_wire_mp"; info.rigmodel_anims[ "takeoff_groundmp" ] = "pigeon_flock_takeoff_ground_mp"; info.rigmodel_anims[ "land_groundmp" ] = "pigeon_flock_land_ground_mp"; info.rigmodel_anims[ "takeoff_inpipemp" ] = "pigeon_flock_takeoff_inpipe_mp"; info.rigmodel_anims[ "land_inpipemp" ] = "pigeon_flock_land_inpipe_mp"; /*info.rigmodel_anims[ "flyingmp" ] = "pigeon_flock_fly_loop"; info.rigmodel_anims[ "takeoff_wiremp" ] = "pigeon_flock_takeoff_wire"; info.rigmodel_anims[ "land_wiremp" ] = "pigeon_flock_land_wire"; info.rigmodel_anims[ "takeoff_groundmp" ] = "pigeon_flock_takeoff_ground"; info.rigmodel_anims[ "land_groundmp" ] = "pigeon_flock_land_ground"; info.rigmodel_anims[ "takeoff_inpipemp" ] = "pigeon_flock_takeoff_inpipe"; info.rigmodel_anims[ "land_inpipemp" ] = "pigeon_flock_land_inpipe";*/ } info.sounds = []; info.sounds[ "takeoff" ] = "anml_bird_startle_flyaway"; PreCacheModel( info.rig_model ); foreach ( model in info.bird_model ) { PreCacheModel( model ); } if( !isdefined ( level._interactive ) ) level._interactive = []; level._interactive[ info.interactive_type ] = info; thread maps\interactive_models\_birds_dlc::birds(info); }