var docs = [
{path:"class/gun.html", type:"class", title:"gun", text:"the following is documentation of gun fields. Methods are currently not present in this list."},
{path:"class/player_model_handler.html", type:"class", title:"Player_model_handler.player_model_handler", text:"player_model_handler defining the player model when holding a gun each player model should have a \"gun holding equivelant\". There are numerous reasons for this first and foremost is that because Minetest is a [redacted mindless insults]. because of this you cannot unset bone offsets and return to normal animations. Bone offsets are needed for the arms to aim at the gun there's no simple way around this fact. Since every model is different custom behavior has to be defined for most."},
{path:"module/ammo_api.html", type:"module", title:"ammo_api", text:"the API for defining unique ammunition"},
{path:"module/default_controls.html", type:"module", title:"default_controls", text:"default controls used by the gun. Can be used to handle reloading"},
{path:"module/misc_helpers.html", type:"module", title:"misc_helpers", text:""},
{path:"module/play_sound.html", type:"module", title:"play_sound", text:"implements tools for quickly playing audio."},
{path:"module/Bullet_hole.html", type:"module", title:"Bullet_hole", text:""},
{path:"module/Control_handler.html", type:"module", title:"Control_handler", text:""},
{path:"module/Gun-methods.html", type:"module", title:"Gun-methods", text:""},
{path:"module/Gun.html", type:"module", title:"Gun", text:""},
{path:"module/play_sound.html#guns4d_soundspec.min_hear_distance", type:"field", title:"guns4d_soundspec.min_hear_distance", text:"float this is useful if you wish to play a sound which has a \"far\" sound, such as distant gunshots. incompatible with to_player"},
{path:"module/play_sound.html#guns4d_soundspec.sounds", type:"field", title:"guns4d_soundspec.sounds", text:"table a weighted_randoms table for randomly selecting sounds. The output will overwrite the sound field."},
{path:"module/play_sound.html#guns4d_soundspec.to_player", type:"field", title:"guns4d_soundspec.to_player", text:"objRef 4dguns changes to_player so it only plays positionless audio (as it is only intended for first person audio). If set to string \"from_player\" and player present"},
{path:"module/play_sound.html#guns4d_soundspec.player", type:"field", title:"guns4d_soundspec.player", text:"objRef this is so to_player being set to \"from_player\". It's to be set to the player which fired the weapon."},
{path:"module/play_sound.html#guns4d_soundspec.delay", type:"field", title:"guns4d_soundspec.delay", text:"float delays the playing of the sound"},
{path:"module/play_sound.html#guns4d_soundspec.attenuation_rate", type:"field", title:"guns4d_soundspec.attenuation_rate", text:"float the rate of dropoff for a sound. I figure this is a bit more intuitive then jacking the gain up super high for every sound... Set the default in config."},
{path:"module/play_sound.html#guns4d_soundspec.split_audio_by_perspective", type:"field", title:"guns4d_soundspec.split_audio_by_perspective", text:"bool [GUN CLASS SPECIFIC] tells the gun wether to split into third and first person (positionless) audio and adjust gain."},
{path:"module/play_sound.html#guns4d_soundspec.third_person_gain_multiplier", type:"field", title:"guns4d_soundspec.third_person_gain_multiplier", text:"float [GUN CLASS SPECIFIC] replaces the constant/config value \"third_person_gain_multiplier/THIRD_PERSON_GAIN_MULTIPLIER\"."},
{path:"class/gun.html#gun.properties", type:"field", title:"gun.properties", text:"properties which define the vast majority of gun attributes and may change accross instances"},
{path:"class/gun.html#gun.consts", type:"field", title:"gun.consts", text:"constants which define gun attributes and should not be changed in an instance of the gun"},
{path:"class/gun.html#gun.offsets", type:"field", title:"gun.offsets", text:"runtime storage of offsets generated by recoil sway wag or any other element."},
{path:"class/gun.html#gun.name", type:"field", title:"gun.name", text:"string the name of the gun. Set to __template for guns which have no instances and serve as a template. It is safe to set name to the same as gun.itemstring"},
{path:"class/gun.html#gun.itemstring", type:"field", title:"gun.itemstring", text:"string the itemstring of the gun- i.e. \"guns4d_pack_1:m4\". Set to \"\" for __template guns."},
{path:"class/gun.html#gun.itemstack", type:"field", title:"gun.itemstack", text:"ItemStack the gun itemstack. Remember to player:set_wielded_item(self.itemstack) when making meta or itemstack changes."},
{path:"class/gun.html#gun.player", type:"field", title:"gun.player", text:"ObjRef the operator of the weapon. This may at some point be deprecated when I start to implement AI/mob usage"},
{path:"class/gun.html#gun.meta", type:"field", title:"gun.meta", text:"MetaDataRef itemstack meta"},
{path:"class/gun.html#gun.id", type:"field", title:"gun.id", text:"string the ID of the gun used for tracking of it's inventory"},
{path:"class/gun.html#gun.gun_entity", type:"field", title:"gun.gun_entity", text:"ObjRef the gun entity"},
{path:"class/gun.html#gun._registered", type:"field", title:"gun._registered", text:"list of registered guns, *DO NOT MODIFY* I really need a metatable for this class..."},
{path:"class/gun.html#gun.bolt_charged", type:"field", title:"gun.bolt_charged", text:"bool is the bolt charged"},
{path:"class/gun.html#gun.particle_spawners", type:"field", title:"gun.particle_spawners", text:"table list of particle spawner handles (generated by firing)"},
{path:"class/gun.html#gun.current_firemode", type:"field", title:"gun.current_firemode", text:"int the active index of the firemode from firemodes"},
{path:"class/gun.html#gun.walking_tick", type:"field", title:"gun.walking_tick", text:"float walking time used to generate the figure 8 for wag"},
{path:"class/gun.html#gun.time_since_last_fire", type:"field", title:"gun.time_since_last_fire", text:"float"},
{path:"class/gun.html#gun.time_since_creation", type:"field", title:"gun.time_since_creation", text:"float"},
{path:"class/gun.html#gun.rechamber_time", type:"field", title:"gun.rechamber_time", text:"float time left for the chamber to cycle (for firerates)"},
{path:"class/gun.html#gun.burst_queue", type:"field", title:"gun.burst_queue", text:"int number of rounds left that need to be fired after a burst fire"},
{path:"class/gun.html#gun.gun_translation", type:"field", title:"gun.gun_translation", text:"vec3 translation of the gun relative to the \"gun\" bone or the player axial rotation."},
{path:"class/gun.html#gun.property_modifiers", type:"field", title:"gun.property_modifiers", text:"table indexed list of functions which are called when the gun's properties need to be built. This is used for things like attachments, etc."},
{path:"class/gun.html#gun.attached_objects", type:"field", title:"gun.attached_objects", text:"table a list of ObjRefs that are attached to the gun as a result of attached_objects"},
{path:"class/gun.html#gun.subclass_instances", type:"field", title:"gun.subclass_instances", text:"table list of subclass instances (i.e. Sprite_scope)"},
{path:"class/gun.html#lvl1_fields.properties.hip", type:"field", title:"lvl1_fields.properties.hip", text:"table hipfire properties"},
{path:"class/gun.html#lvl1_fields.properties.ads", type:"field", title:"lvl1_fields.properties.ads", text:"table aiming (\"aiming down sights\") properties"},
{path:"class/gun.html#lvl1_fields.properties.firemodes", type:"field", title:"lvl1_fields.properties.firemodes", text:"table list of firemodes"},
{path:"class/gun.html#lvl1_fields.properties.recoil", type:"field", title:"lvl1_fields.properties.recoil", text:"table defines the guns recoil"},
{path:"class/gun.html#lvl1_fields.properties.sway", type:"field", title:"lvl1_fields.properties.sway", text:"table defines the guns idle sway"},
{path:"class/gun.html#lvl1_fields.properties.wag", type:"field", title:"lvl1_fields.properties.wag", text:"table defines the movement of the gun while walking"},
{path:"class/gun.html#lvl1_fields.properties.charging", type:"field", title:"lvl1_fields.properties.charging", text:"table defines how rounds are chambered into the gun"},
{path:"class/gun.html#lvl1_fields.properties.ammo", type:"field", title:"lvl1_fields.properties.ammo", text:"table defines what ammo the gun uses"},
{path:"class/gun.html#lvl1_fields.properties.visuals", type:"field", title:"lvl1_fields.properties.visuals", text:"table defines visual attributes of the gun"},
{path:"class/gun.html#lvl1_fields.properties.sounds", type:"field", title:"lvl1_fields.properties.sounds", text:"table defines sounds to be used by functions of the gun"},
{path:"class/gun.html#lvl1_fields.properties.inventory", type:"field", title:"lvl1_fields.properties.inventory", text:"table inventory related attributes"},
{path:"class/gun.html#lvl1_fields.properties.initial_vertical_rotation", type:"field", title:"lvl1_fields.properties.initial_vertical_rotation", text:"float starting vertical rotation of the gun"},
{path:"class/gun.html#lvl1_fields.properties.breathing_scale", type:"field", title:"lvl1_fields.properties.breathing_scale", text:"float=.5 max angular deviation (vertical) from breathing"},
{path:"class/gun.html#lvl1_fields.properties.flash_offset", type:"field", title:"lvl1_fields.properties.flash_offset", text:"vector the offset from the center of the muzzle flash. Used by fire()"},
{path:"class/gun.html#lvl1_fields.properties.firerateRPM", type:"field", title:"lvl1_fields.properties.firerateRPM", text:"int=600 The number of rounds (cartidges) this gun can throw per minute. Used by update(), fire() and default controls"},
{path:"class/gun.html#lvl1_fields.properties.reload", type:"field", title:"lvl1_fields.properties.reload", text:"an ordered list of reloading states used by default_controls. the default reload states for a magazine operated weapon, copied from the m4. Example"},
{path:"class/gun.html#lvl1_fields.properties.model_bounding_box", type:"field", title:"lvl1_fields.properties.model_bounding_box", text:"table (optional) a table {x1,y1,z1, x2,y2,z2} specifying the bounding box of the model. The first 3 (x1,y1,z1) are the lower of their counterparts. This is autogenerated from the model when not present, reccomended that you leave nil."},
{path:"class/gun.html#lvl1_fields.properties.infinite_inventory_overlay", type:"field", title:"lvl1_fields.properties.infinite_inventory_overlay", text:"string overlay on the item to use when infinite ammo is on"},
{path:"class/gun.html#lvl1_fields.properties.burst", type:"field", title:"lvl1_fields.properties.burst", text:"int=3 how many rounds in burst using when firemode is at \"burst\""},
{path:"class/gun.html#lvl1_fields.properties.pc_control_actions", type:"field", title:"lvl1_fields.properties.pc_control_actions", text:"table containing a list of actions for PC users passed to Control_handler. __replace_only = true in this table, meaning if the table exists in the new definition, it will be replaced."},
{path:"class/gun.html#lvl1_fields.properties.touch_control_actions", type:"field", title:"lvl1_fields.properties.touch_control_actions", text:"table containing a list of actions for touch screen users passed to Control_handler. __replace_only = true in this table, meaning if the table exists in the new definition, it will be replaced."},
{path:"class/gun.html#gun.properties.inventory.render_size", type:"field", title:"gun.properties.inventory.render_size", text:"the size in meters to render the gun in it's inventory opened with /guns4d_inv"},
{path:"class/gun.html#gun.properties.inventory.render_image", type:"field", title:"gun.properties.inventory.render_image", text:"the image of the gun in it's inventory opened with /guns4d_inv"},
{path:"class/gun.html#gun.properties.inventory.firemode_inventory_overlays", type:"field", title:"gun.properties.inventory.firemode_inventory_overlays", text:"table of firemodes and their overlays in the player's inventory when the gun is on that firemode"},
{path:"class/gun.html#gun.properties.inventory.inventory_image_magless", type:"field", title:"gun.properties.inventory.inventory_image_magless", text:"string (optional) inventory image for when the gun has no magazine"},
{path:"class/gun.html#gun.properties.inventory.inventory_image", type:"field", title:"gun.properties.inventory.inventory_image", text:"string inventory image for when the gun is loaded. This is added automatically during construction as the item's wield image."},
{path:"class/gun.html#gun.properties.subclsses.ammo_handler", type:"field", title:"gun.properties.subclsses.ammo_handler", text:"Ammo_handler the class (based on) ammo_handler to create an instance of and use. Default is Guns4d.ammo_handler"},
{path:"class/gun.html#gun.properties.subclsses.part_handler", type:"field", title:"gun.properties.subclsses.part_handler", text:"part_handler Part_handler class to use. Default is Guns4d.part_handler"},
{path:"class/gun.html#gun.properties.subclsses.sprite_scope", type:"field", title:"gun.properties.subclsses.sprite_scope", text:"Sprite_scope sprite scope class to use. Nil by default, inherit Sprite_scope for class (*documentation needed, reccomended contact for help if working with it*)"},
{path:"class/gun.html#gun.properties.subclsses.crosshair", type:"field", title:"gun.properties.subclsses.crosshair", text:"Dynamic_crosshair crosshair class to use. Nil by default, set to Guns4d.Dynamic_crosshair for a generic circular expanding reticle."},
{path:"class/gun.html#gun.properties.ads.offset", type:"field", title:"gun.properties.ads.offset", text:"vector the offset of the gun relative to the eye's position at hip."},
{path:"class/gun.html#gun.properties.ads.horizontal_offset", type:"field", title:"gun.properties.ads.horizontal_offset", text:"float the horizontal offset of the eye when aiming"},
{path:"class/gun.html#gun.properties.ads.aim_time", type:"field", title:"gun.properties.ads.aim_time", text:"the time it takes to go into full aim"},
{path:"class/gun.html#gun.properties.hip.offset", type:"field", title:"gun.properties.hip.offset", text:"vector the offset of the gun (relative to the right arm's default position) at hip."},
{path:"class/gun.html#gun.properties.hip.axis_rotation_ratio", type:"field", title:"gun.properties.hip.axis_rotation_ratio", text:"the ratio that the look rotation is expressed through player_axial (rotated around the viewport) rotation as opposed to gun_axial (rotating the entity)."},
{path:"class/gun.html#gun.properties.hip.sway_vel_mul", type:"field", title:"gun.properties.hip.sway_vel_mul", text:"sway speed multiplier while at hip"},
{path:"class/gun.html#gun.properties.hip.sway_angle_mul", type:"field", title:"gun.properties.hip.sway_angle_mul", text:"sway angle multiplier while at hip"},
{path:"class/gun.html#gun.properties.firemodes."single"", type:"field", title:"gun.properties.firemodes.\"single\"", text:""},
{path:"class/gun.html#gun.properties.firemodes."burst"", type:"field", title:"gun.properties.firemodes.\"burst\"", text:""},
{path:"class/gun.html#gun.properties.firemodes."auto"", type:"field", title:"gun.properties.firemodes.\"auto\"", text:""},
{path:"class/gun.html#gun.properties.recoil.velocity_correction_factor", type:"field", title:"gun.properties.recoil.velocity_correction_factor", text:"float TL:DR higher decreases recoil at expense of smoothness. 1/value is the deviation of a normalized bell curve, where x is the time since firing. this means that increasing it decreases the time it takes for the angular velocity to fully \"decay\"."},
{path:"class/gun.html#gun.properties.recoil.target_correction_factor", type:"field", title:"gun.properties.recoil.target_correction_factor", text:"float Correction of recoil offset per second is calculated as such: target_correction_factor[axis]time_since_firerecoil[axis]"},
{path:"class/gun.html#gun.properties.recoil.target_correction_max_rate", type:"field", title:"gun.properties.recoil.target_correction_max_rate", text:"float The maximum rate per second of recoil offset as determined with target_correction_factor"},
{path:"class/gun.html#gun.properties.recoil.angular_velocity_max", type:"field", title:"gun.properties.recoil.angular_velocity_max", text:"float caps the recoil velocity that can stack up from shots."},
{path:"class/gun.html#gun.properties.recoil.angular_velocity", type:"field", title:"gun.properties.recoil.angular_velocity", text:"vector {x=float, y=float}, defines the initial angular velocity produced by firing the gun"},
{path:"class/gun.html#gun.properties.recoil.bias", type:"field", title:"gun.properties.recoil.bias", text:"vector {x=float, y=float}, ranges -1 to 1. Defines the probability of the recoil being positive or negative for any given axis."},
{path:"class/gun.html#gun.properties.recoil.hipfire_multiplier", type:"field", title:"gun.properties.recoil.hipfire_multiplier", text:"float angular velocity multiplier when firing from the hip"},
{path:"class/gun.html#gun.properties.sway.max_angle", type:"field", title:"gun.properties.sway.max_angle", text:"float maximum angle of the sway"},
{path:"class/gun.html#gun.properties.sway.angular_velocity", type:"field", title:"gun.properties.sway.angular_velocity", text:"float angular velocity the sway"},
{path:"class/gun.html#gun.properties.sway.hipfire_angle_multiplier", type:"field", title:"gun.properties.sway.hipfire_angle_multiplier", text:"float maximum angle multiplier while the gun is at the hip"},
{path:"class/gun.html#gun.properties.sway.hipfire_velocity_multiplier", type:"field", title:"gun.properties.sway.hipfire_velocity_multiplier", text:"float velocity multiplier while the gun is at the hip"},
{path:"class/gun.html#gun.properties.wag.cycle_speed", type:"field", title:"gun.properties.wag.cycle_speed", text:"float=1.6 the cycle speed multiplier"},
{path:"class/gun.html#gun.properties.wag.decay_speed", type:"field", title:"gun.properties.wag.decay_speed", text:"float=1 decay factor when walking has stopped and offset remains."},
{path:"class/gun.html#gun.properties.wag.offset", type:"field", title:"gun.properties.wag.offset", text:"table containing angular deviation while walking in the same format as an offset vector. Acts as a multiplier on the figure-8 generated while walking."},
{path:"class/gun.html#gun.properties.charging.require_draw_on_swap", type:"field", title:"gun.properties.charging.require_draw_on_swap", text:"bool defines wether the draw animation is played on swap (when loaded). Default true."},
{path:"class/gun.html#gun.properties.charging.bolt_charge_mode", type:"field", title:"gun.properties.charging.bolt_charge_mode", text:"string \"none\" bolt will never need to be charged after reload, \"catch\" when fired to empty bolt will not need to be charged after reload, \"no_catch\" bolt will always need to be charged after reload."},
{path:"class/gun.html#gun.properties.charging.draw_time", type:"field", title:"gun.properties.charging.draw_time", text:"float the time it takes to swap to the gun"},
{path:"class/gun.html#gun.properties.charging.draw_animation", type:"field", title:"gun.properties.charging.draw_animation", text:"string name of the animation to play from visuals.animations. Default \"draw\""},
{path:"class/gun.html#gun.properties.charging.draw_sound", type:"field", title:"gun.properties.charging.draw_sound", text:"string name of the sound to play from sounds. Default \"draw\""},
{path:"class/gun.html#gun.properties.ammo.magazine_only", type:"field", title:"gun.properties.ammo.magazine_only", text:"bool wether the gun only uses a magazine or accepts raw ammunition too."},
{path:"class/gun.html#gun.properties.ammo.accepted_rounds", type:"field", title:"gun.properties.ammo.accepted_rounds", text:"table a list of accepted bullet itemstrings"},
{path:"class/gun.html#gun.properties.ammo.accepted_magazines", type:"field", title:"gun.properties.ammo.accepted_magazines", text:"table a list of accepted magazine itemstrings"},
{path:"class/gun.html#gun.properties.ammo.initial_mag", type:"field", title:"gun.properties.ammo.initial_mag", text:"string the mag the gun starts with. Set to \"empty\" for no mag, otherwise it defaults to accepted_magazines[1] (if present)"},
{path:"class/gun.html#gun.properties.visuals.mesh", type:"field", title:"gun.properties.visuals.mesh", text:"name of mesh to display. Currently only supports b3d"},
{path:"class/gun.html#gun.properties.visuals.textures", type:"field", title:"gun.properties.visuals.textures", text:"list of textures to use."},
{path:"class/gun.html#gun.properties.visuals.scale", type:"field", title:"gun.properties.visuals.scale", text:"scale multiplier. Default 1"},
{path:"class/gun.html#gun.properties.visuals.attached_objects", type:"field", title:"gun.properties.visuals.attached_objects", text:"objects that are attached to the gun. This is especially useful for attachments Example"},
{path:"class/gun.html#gun.properties.visuals.backface_culling", type:"field", title:"gun.properties.visuals.backface_culling", text:"toggles backface culling. Default true"},
{path:"class/gun.html#gun.properties.visuals.animations", type:"field", title:"gun.properties.visuals.animations", text:"a table of animations. Indexes define the name of the animation to be refrenced by other functions of the gun. should be in the format {x=integer,y=integer} Example There are other animations which are variable which are not listed here, these are usually defined by properties such as: draw_animation"},
{path:"class/gun.html#gun.properties.sounds.fire", type:"field", title:"gun.properties.sounds.fire", text:"sound player when firing the weapon"},
{path:"class/gun.html#gun.animation_rotation", type:"field", title:"gun.animation_rotation", text:"vector containing the rotation offset from the current frame, this will be factored into the gun's direction if consts.ANIMATIONS_OFFSET_AIM=true"},
{path:"class/gun.html#gun.animation_translation", type:"field", title:"gun.animation_translation", text:"vector containing the translational/positional offset from the current frame"},
{path:"class/gun.html#gun.total_offsets", type:"field", title:"gun.total_offsets", text:"all offsets from gun.offset of a type added together gun in the same format as a an offset (that is, five vectors, gun_axial, player_axial, etc.). Note that if offsets are changed after update, this will not be updated automatically until the next update. update_rotations() must be called to do so."},
{path:"class/gun.html#gun.velocities", type:"field", title:"gun.velocities", text:"velocities in the format of offsets, but only containing angular (gun_axial and player_axial) offsets."},
{path:"class/gun.html#lvl1_fields.offsets.recoil", type:"field", title:"lvl1_fields.offsets.recoil", text:""},
{path:"class/gun.html#lvl1_fields.offsets.sway", type:"field", title:"lvl1_fields.offsets.sway", text:""},
{path:"class/gun.html#lvl1_fields.offsets.walking", type:"field", title:"lvl1_fields.offsets.walking", text:""},
{path:"class/gun.html#lvl1_fields.offsets.breathing", type:"field", title:"lvl1_fields.offsets.breathing", text:""},
{path:"class/gun.html#lvl1_fields.offsets.look", type:"field", title:"lvl1_fields.offsets.look", text:""},
{path:"class/gun.html#lvl1_fields.consts.KEYFRAME_SAMPLE_PRECISION", type:"field", title:"lvl1_fields.consts.KEYFRAME_SAMPLE_PRECISION", text:"frequency of keyframe samples for animation offsets and"},
{path:"class/gun.html#lvl1_fields.consts.DEFAULT_MAX_HEAR_DISTANCE", type:"field", title:"lvl1_fields.consts.DEFAULT_MAX_HEAR_DISTANCE", text:"default max hear distance when not specified"},
{path:"class/gun.html#lvl1_fields.consts.DEFAULT_FPS", type:"field", title:"lvl1_fields.consts.DEFAULT_FPS", text:"fps=60 animation fps i.e. during firing when no length is specified"},
{path:"class/gun.html#lvl1_fields.consts.HAS_RECOIL", type:"field", title:"lvl1_fields.consts.HAS_RECOIL", text:"bool"},
{path:"class/gun.html#lvl1_fields.consts.HAS_BREATHING", type:"field", title:"lvl1_fields.consts.HAS_BREATHING", text:"bool"},
{path:"class/gun.html#lvl1_fields.consts.HAS_SWAY", type:"field", title:"lvl1_fields.consts.HAS_SWAY", text:"bool"},
{path:"class/gun.html#lvl1_fields.consts.HAS_WAG", type:"field", title:"lvl1_fields.consts.HAS_WAG", text:"bool"},
{path:"class/gun.html#lvl1_fields.consts.HAS_GUN_AXIAL_OFFSETS", type:"field", title:"lvl1_fields.consts.HAS_GUN_AXIAL_OFFSETS", text:"bool wether the gun rotates on it's own axis instead of the player's view (i.e. ironsight misalignments)"},
{path:"class/gun.html#lvl1_fields.consts.ANIMATIONS_OFFSET_AIM", type:"field", title:"lvl1_fields.consts.ANIMATIONS_OFFSET_AIM", text:"wether animations create an offset"},
{path:"class/gun.html#lvl1_fields.consts.LOOP_IDLE_ANIM", type:"field", title:"lvl1_fields.consts.LOOP_IDLE_ANIM", text:"whether the idle animation changes or not"},
{path:"class/gun.html#lvl1_fields.consts.THIRD_PERSON_GAIN_MULTIPLIER", type:"field", title:"lvl1_fields.consts.THIRD_PERSON_GAIN_MULTIPLIER", text:"general gain multiplier for third persons when hearing sounds"},
{path:"class/gun.html#lvl1_fields.consts.ROOT_BONE", type:"field", title:"lvl1_fields.consts.ROOT_BONE", text:"the root bone of the gun (for animation offsets)"},
{path:"class/gun.html#lvl1_fields.consts.MAG_BONE", type:"field", title:"lvl1_fields.consts.MAG_BONE", text:"string=\"magazine\",the bone of the magazine in the gun (for dropping mags)"},
{path:"class/gun.html#lvl1_fields.consts.ARM_RIGHT_BONE", type:"field", title:"lvl1_fields.consts.ARM_RIGHT_BONE", text:"string=\"right_aimpoint\", the bone which the right arm aims at to"},
{path:"class/gun.html#lvl1_fields.consts.ARM_LEFT_BONE", type:"field", title:"lvl1_fields.consts.ARM_LEFT_BONE", text:"string=\"left_aimpoint\", the bone which the left arm aims at to"},
{path:"class/gun.html#lvl1_fields.consts.VERSION", type:"field", title:"lvl1_fields.consts.VERSION", text:"table version of 4dguns this gun is made for. If left empty it will be assumed it is before 1.3."},
{path:"class/player_model_handler.html#fields.offsets", type:"field", title:"fields.offsets", text:"fields.offsets"},
{path:"module/ammo_api.html#Guns4d.ammo.initialize_mag_data", type:"function", title:"Guns4d.ammo.initialize_mag_data", text:"initializes a magazine's data"},
{path:"module/ammo_api.html#Guns4d.ammo.update_mag", type:"function", title:"Guns4d.ammo.update_mag", text:"register a magazine so it can be filled with bullets and loaded into a gun"},
{path:"module/ammo_api.html#Guns4d.ammo.register_magazine", type:"function", title:"Guns4d.ammo.register_magazine", text:"register a magazine so it can be filled with bullets and loaded into a gun"},
{path:"module/misc_helpers.html#Guns4d.math.weighted_randoms", type:"function", title:"Guns4d.math.weighted_randoms", text:"picks a random index, with odds based on it's value. Returns the index of the selected."},
{path:"module/play_sound.html#Guns4d.play_sounds", type:"function", title:"Guns4d.play_sounds", text:"allows you to play one or more sounds with more complex features, so sounds can be easily coded for guns without the need for functions. WARNING: this function modifies the tables passed to it, use Guns4d.table.shallow_copy() or table.copy for inputted soundspecs Example"},
{path:"module/play_sound.html#Guns4d.get_sounds", type:"function", title:"Guns4d.get_sounds", text:"gets a list of currently playing Minetest sound handles from the Guns4d sound handle. Modification of table highly discouraged."},
{path:"module/play_sound.html#Guns4d.stop_sounds", type:"function", title:"Guns4d.stop_sounds", text:"stops a list of sounds"},
{path:"module/Bullet_hole.html#Bullet_hole.construct", type:"function", title:"Bullet_hole.construct", text:""},
{path:"module/Control_handler.html#controls.toggle_touchscreen_mode", type:"function", title:"controls:toggle_touchscreen_mode", text:""},
{path:"module/Gun-methods.html#gun_default.update", type:"function", title:"gun_default:update", text:"The entry method for the update of the gun calls virtually all functions that begin with update once. Also updates subclass"},
{path:"module/Gun-methods.html#gun_default.regenerate_visuals", type:"function", title:"gun_default:regenerate_visuals", text:"not typically called every step, updates the gun object's visuals"},
{path:"module/Gun-methods.html#gun_default.update_transforms", type:"function", title:"gun_default:update_transforms", text:"updates self.total_offsets which stores offsets for bones"},
{path:"module/Gun-methods.html#gun_default.update_burstfire", type:"function", title:"gun_default:update_burstfire", text:"Update and fire the queued weapon burst"},
{path:"module/Gun-methods.html#gun_default.cycle_firemodes", type:"function", title:"gun_default:cycle_firemodes", text:"cycles to the next firemode of the weapon"},
{path:"module/Gun-methods.html#gun_default.update_image_and_text_meta", type:"function", title:"gun_default:update_image_and_text_meta", text:"update the inventory information of the gun"},
{path:"module/Gun-methods.html#gun_default.draw", type:"function", title:"gun_default:draw", text:"plays the draw animation and sound for the gun, delays usage."},
{path:"module/Gun-methods.html#gun_default.muzzle_flash", type:"function", title:"gun_default:muzzle_flash", text:"plays the muzzle flash animation"},
{path:"module/Gun-methods.html#gun_default.attempt_fire", type:"function", title:"gun_default:attempt_fire", text:"attempt to fire the gun"},
{path:"module/Gun-methods.html#gun_default.recoil", type:"function", title:"gun_default:recoil", text:"simulate recoil by adding to the recoil velocity (called by attempt_fire)"},
{path:"module/Gun-methods.html#gun_default.update_look_offsets", type:"function", title:"gun_default:update_look_offsets", text:"update the offsets of the player's look created by the gun"},
{path:"module/Gun-methods.html#gun_default.get_pos", type:"function", title:"gun_default:get_pos", text:"get the global position of the gun. This is customized to rely on the assumption that there are 3-4 main rotations and 2-3 translations. If the behavior of the bones are changed this method may not work. the point of this is to allow the user to find the gun's object origin as well as calculate where a given point should be offset given the parameters."},
{path:"module/Gun-methods.html#gun_default.add_entity", type:"function", title:"gun_default:add_entity", text:"adds the gun entity"},
{path:"module/Gun-methods.html#gun_default.update_entity", type:"function", title:"gun_default:update_entity", text:"updates the gun's entity"},
{path:"module/Gun-methods.html#gun_default.has_entity", type:"function", title:"gun_default:has_entity", text:"checks if the gun entity exists..."},
{path:"module/Gun-methods.html#gun_default.update_wag", type:"function", title:"gun_default:update_wag", text:"updates the gun's wag offset for walking"},
{path:"module/Gun-methods.html#gun_default.update_recoil", type:"function", title:"gun_default:update_recoil", text:"updates the gun's recoil simulation"},
{path:"module/Gun-methods.html#gun_default.update_animation", type:"function", title:"gun_default:update_animation", text:"updates the gun's animation data"},
{path:"module/Gun-methods.html#gun_default.set_animation", type:"function", title:"gun_default:set_animation", text:"sets the gun's animation in the same format as ObjRef:set_animation() (future deprecation?)"},
{path:"module/Gun-methods.html#gun_default.clear_animation", type:"function", title:"gun_default:clear_animation", text:"clears the animation to the rest state"},
{path:"module/Gun-methods.html#gun_default.play_sounds", type:"function", title:"gun_default:play_sounds", text:"plays a list of sounds for the gun's user and thirdpersons"},
{path:"module/Gun-methods.html#gun_default.prepare_deletion", type:"function", title:"gun_default:prepare_deletion", text:"ready the gun to be deleted"},
{path:"class/player_model_handler.html#player_model.construct", type:"function", title:"player_model.construct", text:""},
{path:"module/misc_helpers.html#math", type:"section", title:"math helpers", text:"in guns4d.math"},
{path:"module/misc_helpers.html#table", type:"section", title:"table helpers", text:"in guns4d.table"},
{path:"module/misc_helpers.html#other", type:"section", title:"other helpers", text:""},
{path:"manual/changelog.html#changelog_135", type:"section", title:"changelog 1.3.5", text:"* reworked the table proxy system to allow for better changes to properties while active"},
{path:"manual/changelog.html#changelog_131-4", type:"section", title:"changelog 1.3.<1-4>", text:"bug fixes? crash with magazine unloading other bugfixes fixed startup crash"},
{path:"manual/changelog.html#changelog_130", type:"section", title:"changelog 1.3.0", text:"Established Versioning system moved the following fields inventory_image_magless -> inventory.inventory_image_magless inventory_image_magless -> inventory.inventory_image_magless firemode_inventory_overlays - > inventory.firemode_inventory_overlays ammo_handler -> subclasses.ammo_handler sprite_scope -> subclasses.sprite_scope crosshair -> subclasses.crosshair create the following classes Part_handler completed (expansion later) facilitates attachments Physics_system inactive future implementation for automatic translation Reflector_sight work in progress simulates a reflector sight with an entity added the following changes to the gun class made consts and properties proxy tables for protection of data (and reworked the LEEF class lib for this) created a system for property modification added subclasses property to replace hardcoded subclasses with modular system added subclass_instances field (see above). These will be automatically updated if their index is in the subclasses list. added visuals.attached_objects property to define attached entities added attached_objects field made get_pos capable of accounting for animation translations"},
{path:"manual/defining_guns.html#defining_guns", type:"section", title:"Defining guns", text:"For a list of possible fields and properties, see the Gun class"},
{path:"manual/defining_guns.html#the_basic_structure", type:"section", title:"The basic structure", text:"Guns are defined using the consts and their properties. properties define nearly everything, from how a gun handles to how it looks, what model it uses, etc. while consts define attributes that should never change, like bones within the gun, framerates, wether the gun is allowed to have certain attributes at all. The other fields of the class define tracking variables or other important things for the internal workings. There are essentially only 3 fields you must define to register a gun: itemstring, name, and properties. To hold the gun, the item defined in itemstring must actually exist, it will not automatically register. To have a functional gun however, more will need to be changed in terms of properties. it's reccomended that you take a look at existing mods (like guns4d_pack_1) for guidance Guns4d uses a class system for most moving parts- including the gun. New guns therefore are created with the :inherit(def) method, where def is the definition of your new gun- or rather the changed parts of it. So to make a new gun you can run Guns4d.gun:inherit() or you can do the same thing with a seperate class of weapons. Set name to \"__template\" for template classes of guns. for properties: for tables where you wish to delete the parent class's fields altogether (since inheritence prevents this) you can set the field __replace_old_table=true additionally"},
{path:"manual/defining_guns.html#ammunition", type:"section", title:"Ammunition", text:"Ammunition is currently self-defined. Ammo has its own attributes seperate from the gun. In the future this will be changed to where the ammunition can both have a custom effect on the gun and the gun can have an effect on the ammunition."},
{path:"manual/defining_guns.html#subclasses", type:"section", title:"Subclasses", text:"subclasses are classes which are defined in properties.subclasses (where they will be instantiated on construction of the instance). The resulting instance will then be put (under the same name/index) into the gun instance's subclass_instances table which will then be iterated. If the subclass has an update field it will be called as a function. If the properties change and the subclass no longer exists, it will be destroyed the next time properties are regenerated. This is so that things like scopes or other subclasses can be removed automatically if they no longer are present. To add a subclass after construction, you can simply change the gun's properties using a property modifier by adding a function to Gun.property_modifiers. See property_modifiers.md."},
{path:"manual/todo.html#to-do", type:"section", title:"to-do", text:"roadmap of upcoming features and fixes"},
{path:"manual/todo.html#v136", type:"section", title:"v1.3.6", text:"* fix muzzle flash effect"},
{path:"manual/todo.html#v140", type:"section", title:"v1.4.0", text:"API standardization - registration - propmod setter/getter add bloom/custom spread bullet pen deviation sprint support...? * finish reflector sight"},
{path:"manual/todo.html#v_150", type:"section", title:"v 1.5.0", text:"change recoil vector generation recoil->sway conversion hit effects/particles acceleration variable for sway -or otherwise smoothened sway"},
{path:"manual/todo.html#v200", type:"section", title:"v2.0.0", text:"refactor -gun_axial and player_axial system -player rotation~=look mounted weaponry + bipods player model physics suppression mechanics? bullet drop sway stabilization after aiming stamina gltf -LEEF gltf lib"},
{path:"manual/property_modifiers.html#property_modifiers", type:"section", title:"Property modifiers", text:"property modifiers are used to define changes to the gun's properties (though dually they have the ability to make runtime changes to other gun fields). In the context ogthe gun class, a property modifier is any function found in the property_modifiers table. You can safely make direct changes to the property table that will be cleared (and regenerated if still present) when gun:regenerate_properties() is called for example: in this example the mesh of the gun will be set to mesh.b3d but if the property_modifier is removed (as it would be if you removed an attachment for example) it would be reset to the base class's mesh."},
];