# MISC::FIRE_SINGLE_BULLET

- **Hash:** `0xCBC9A21F6A2A679C`
- **Namespace:** MISC
- **Runtime name (Lua/JS):** `FireSingleBullet`
- **Side:** client (game native)
- **Name status:** official
- **Documentation:** described with examples
- **Since game build:** 1207
- **URL:** https://natives.borderlinerp.com/natives/MISC/FIRE_SINGLE_BULLET

## Signature

```c
void FIRE_SINGLE_BULLET(Any* args);
```

## Parameters

- `args` (`Any*`)

## Returns

`void`

## Description

struct FireSingleBulletArgs
{
	alignas(8) float  xStart;
	alignas(8) float  yStart;
	alignas(8) float  zStart;
	alignas(8) float  xEnd;
	alignas(8) float  yEnd;
	alignas(8) float  zEnd;
	alignas(8) Hash   weaponHash;
	alignas(8) float  damage;
	alignas(8) float  p8;          // often -1.0f in scripts; likely default/sentinel shot float
	alignas(8) Ped    instigator;  // confirmed ped GUID
	alignas(8) Entity entity2;     // optional entity ref; likely ignore/target-related
	alignas(8) Entity entity3;     // optional entity ref; likely ignore/target-related
	alignas(8) BOOL   p12;         // main shot behavior flag
	alignas(8) BOOL   p13;         // main shot behavior flag
	alignas(8) BOOL   p14;
	alignas(8) BOOL   p15;         // adds extra internal flag bit
	alignas(8) BOOL   p16;
	alignas(8) BOOL   p17;         // confirmed BOOL
	alignas(8) BOOL   p18;         // adds extra internal flag bit
	alignas(8) BOOL   p19;         // confirmed BOOL-like
};

static_assert(sizeof(FireSingleBulletArgs) == 0xA0, "incorrect FireSingleBulletArgs size");

## Usage

### Lua

```lua
local args = FireSingleBullet(args)

-- always available, by hash
local args = Citizen.InvokeNative(0xCBC9A21F6A2A679C, Citizen.PointerValueIntInitialized(args))
```

### JavaScript

```js
const args = FireSingleBullet(args);

// by hash
const args = Citizen.invokeNative('0xCBC9A21F6A2A679C', Citizen.pointerValueIntInitialized(args));
```

### C#

```csharp
var args = new OutputArgument();
Function.Call((Hash)0xCBC9A21F6A2A679C, args);
// args.GetResult<int>()
```

- The last argument is an in/out pointer: pass its initial value, and the updated value is returned after the result.
- `Any*` arguments are often structs. Build them with a DataView buffer and pass it with `:Buffer()` — see the examples and notes below.

## Examples

*Source: VORPCORE RDR3natives*

```lua
struct FireSingleBulletArgs
{
  float xStart;
  float yStart;
  float zStart;
  float xEnd;
  float yEnd;
  float zEnd;
  Hash weaponHash;
  float damage;
  float p8;
  Entity instigator;
  Entity entity2;
  Entity entity3;
  BOOL p12;
  BOOL p13;
  BOOL p14;
  BOOL p15;
  BOOL p16;
  Any p17;
  BOOL p18;
  BOOL p19;
}
```

*Sources: alloc8or RDR3 NativeDB, VORPCORE RDR3natives.*
