// File: /workspace/github_c_makefile_star2_O0/QwazyWabbitWOS[P]lmctf60/p_weapon.c
// Function: fire_hook
edict_t *fire_hook (edict_t *self, vec3_t start, vec3_t dir, int speed)
{
	edict_t	*bolt;
	trace_t	tr;

	VectorNormalize (dir);

	bolt = G_Spawn();
	VectorCopy (start, bolt->s.origin);
	VectorCopy (start, bolt->s.old_origin);
	vectoangles (dir, bolt->s.angles);
	bolt->s.angles[PITCH] += 90;
	VectorScale (dir, speed, bolt->velocity);
	bolt->movetype = MOVETYPE_FLYMISSILE;
	bolt->clipmask = MASK_SHOT;
	bolt->solid = SOLID_BBOX;
	//bolt->s.effects |= effect;
	VectorClear (bolt->mins);
	VectorClear (bolt->maxs);
	bolt->s.modelindex = gi.modelindex ("models/objects/ghook/tris.md2");
//	bolt->s.sound = gi.soundindex ("weapons/grapple/grfire.wav");
	bolt->owner = self;
	bolt->touch = hook_touch;
	bolt->die = hook_die;
	bolt->nextthink = level.time + 1;
	bolt->think = Grapple_Bolt_Think;
	bolt->dmg = 2;
	bolt->takedamage = DAMAGE_YES;
	bolt->health = 59;	 // after 59 damage, hook destoyed
	gi.linkentity (bolt);


	//surt the muzzle flash code also causes a shotgun noise!!!!

		// send muzzle flash
//	gi.WriteByte (svc_muzzleflash);
//	gi.WriteShort (self-g_edicts);
//	gi.WriteByte (MZ_SHOTGUN | is_silenced);
//	gi.multicast (self->s.origin, MULTICAST_PVS);

	//surt can that be avoided?

	gi.sound(self, CHAN_AUTO, gi.soundindex("weapons/grapple/grfire.wav"), 0.8f, ATTN_NORM, 0);
//	gi.dprintf("Played grapple sound.\n");

//	bolt->s.sound = gi.soundindex ("weapons/grapple/grfire.wav");
//surt the above works, but sounds bad
	/*
	if (self->client)
		check_dodge (self, bolt->s.origin, dir, speed);
	*/

	tr = gi.trace (self->s.origin, NULL, NULL, bolt->s.origin, self, MASK_SHOT);
	if (tr.fraction < 1.0)
	{
		VectorMA (bolt->s.origin, -10, dir, bolt->s.origin);
		bolt->touch (bolt, tr.ent, NULL, NULL);
	}
	return bolt;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x18(%rbp), %rdi
callq 0x183d0
callq 0x19950
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movss (%rax), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, 0x4(%rax)
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, 0x8(%rax)
movq -0x10(%rbp), %rax
movss 0x8(%rax), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, 0xc(%rax)
movq -0x10(%rbp), %rax
movss (%rax), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, 0x1c(%rax)
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, 0x20(%rax)
movq -0x10(%rbp), %rax
movss 0x8(%rax), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, 0x24(%rax)
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rsi
addq $0x10, %rsi
callq 0x192a0
movq -0x28(%rbp), %rax
movss 0x66a1(%rip), %xmm0     # 0x71424
addss 0x10(%rax), %xmm0
movss %xmm0, 0x10(%rax)
movq -0x18(%rbp), %rdi
cvtsi2ssl -0x1c(%rbp), %xmm0
movq -0x28(%rbp), %rsi
addq $0x1c0, %rsi            # imm = 0x1C0
callq 0x18a80
movq -0x28(%rbp), %rax
movl $0x8, 0x118(%rax)
movq -0x28(%rbp), %rax
movl $0x6000003, 0x10c(%rax) # imm = 0x6000003
movq -0x28(%rbp), %rax
movl $0x2, 0x108(%rax)
movq -0x28(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0xd4(%rax)
movq -0x28(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0xd0(%rax)
movq -0x28(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0xcc(%rax)
movq -0x28(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0xe0(%rax)
movq -0x28(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0xdc(%rax)
movq -0x28(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0xd8(%rax)
leaq 0xcd7b(%rip), %rdi      # 0x77bac
movq 0x177c8(%rip), %rax     # 0x82600
callq *0x40(%rax)
movl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x28(%rax)
movq -0x8(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x110(%rax)
movq -0x28(%rbp), %rax
movq 0x17c7a(%rip), %rcx     # 0x82ad8
movq %rcx, 0x220(%rax)
movq -0x28(%rbp), %rax
movq 0x17f20(%rip), %rcx     # 0x82d90
movq %rcx, 0x238(%rax)
movss 0x506d(%rip), %xmm0     # 0x6feec
movq 0x17f1a(%rip), %rax     # 0x82da0
addss 0x4(%rax), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, 0x200(%rax)
movq -0x28(%rbp), %rax
movq 0x18026(%rip), %rcx     # 0x82ec8
movq %rcx, 0x210(%rax)
movq -0x28(%rbp), %rax
movl $0x2, 0x280(%rax)
movq -0x28(%rbp), %rax
movl $0x1, 0x27c(%rax)
movq -0x28(%rbp), %rax
movl $0x3b, 0x254(%rax)
movq 0x17726(%rip), %rax     # 0x82600
movq 0x90(%rax), %rax
movq -0x28(%rbp), %rdi
callq *%rax
movq 0x17712(%rip), %rax     # 0x82600
movq 0x20(%rax), %rax
movq %rax, -0xc0(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq 0xccbf(%rip), %rdi      # 0x77bca
movq 0x176ee(%rip), %rax     # 0x82600
callq *0x48(%rax)
movq -0xc8(%rbp), %rdi
movl %eax, %edx
movq -0xc0(%rbp), %rax
xorl %esi, %esi
movss 0x5551(%rip), %xmm0     # 0x70480
movss 0x4fb5(%rip), %xmm1     # 0x6feec
xorps %xmm2, %xmm2
callq *%rax
movq 0x176bd(%rip), %rax     # 0x82600
movq 0x60(%rax), %rax
movq -0x8(%rbp), %rsi
addq $0x4, %rsi
movq -0x28(%rbp), %r8
addq $0x4, %r8
movq -0x8(%rbp), %r9
leaq -0xb8(%rbp), %rdi
xorl %ecx, %ecx
movq %rcx, %rdx
movl $0x6000003, (%rsp)      # imm = 0x6000003
callq *%rax
leaq -0x70(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
movl $0x48, %edx
callq 0x18dc0
movss -0x68(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x4faa(%rip), %xmm0     # 0x6ff40
ucomisd %xmm1, %xmm0
jbe 0x6afd7
movq -0x28(%rbp), %rdi
addq $0x4, %rdi
movq -0x18(%rbp), %rsi
movq -0x28(%rbp), %rdx
addq $0x4, %rdx
movss 0xb290(%rip), %xmm0     # 0x76248
callq 0x199c0
movq -0x28(%rbp), %rax
movq 0x220(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
xorl %ecx, %ecx
movq %rcx, %rdx
callq *%rax
movq -0x28(%rbp), %rax
addq $0xd0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)