예제 #1
0
파일: grapple.py 프로젝트: barryp/qwpython
def Check_Overhead(*qwp_extra):
    qc.makevectors(qc.self.owner.angles)
    #  The following comparisons could be optimized by doing away with
    #  SRC and END, and plugging the values directly into the traceline
    #  function calls. Using SRC and END made debugging easier. You
    #  decide if it's worth it.
    #  quick check right above head
    src = qc.self.owner.origin - Vector(0, 0, 24)
    end = qc.self.owner.origin - Vector(0, 0, 24)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    src = qc.self.owner.origin - Vector(0, 0, 24) - qc.v_forward * 16
    end = qc.self.owner.origin - Vector(0, 0, 24) - qc.v_forward * 16 + Vector(0, 0, 58)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    src = qc.self.owner.origin - Vector(0, 0, 24) + qc.v_forward * 16
    end = qc.self.owner.origin - Vector(0, 0, 24) + qc.v_forward * 16 + Vector(0, 0, 58)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    src = qc.self.owner.origin - Vector(0, 0, 24) - qc.v_right * 16
    end = qc.self.owner.origin - Vector(0, 0, 24) - qc.v_right * 16 + Vector(0, 0, 58)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    src = qc.self.owner.origin - Vector(0, 0, 24) + qc.v_right * 16
    end = qc.self.owner.origin - Vector(0, 0, 24) + qc.v_right * 16 + Vector(0, 0, 58)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    return defs.TRUE
예제 #2
0
def W_FireLightning(*qwp_extra):
    if qc.self.ammo_cells < 1:
        qc.self.weapon = W_BestWeapon()
        W_SetCurrentAmmo()
        return

    #  explode if under water
    if qc.self.waterlevel > 1:
        cells = qc.self.ammo_cells
        qc.self.ammo_cells = 0
        W_SetCurrentAmmo()
        combat.T_RadiusDamage(qc.self, qc.self, 35 * cells, qc.world)
        return

    if qc.self.t_width < qc.time:
        qc.self.sound(defs.CHAN_WEAPON, 'weapons/lhit.wav', 1, defs.ATTN_NORM)
        qc.self.t_width = qc.time + 0.6

    qc.msg_entity = qc.self
    qc.WriteByte(defs.MSG_ONE, defs.SVC_SMALLKICK)
    qc.self.currentammo = qc.self.ammo_cells = qc.self.ammo_cells - 1
    org = qc.self.origin + Vector(0, 0, 16)
    qc.traceline(org, org + qc.v_forward * 600, defs.TRUE, qc.self)
    qc.WriteByte(defs.MSG_MULTICAST, defs.SVC_TEMPENTITY)
    qc.WriteByte(defs.MSG_MULTICAST, defs.TE_LIGHTNING2)
    qc.WriteEntity(defs.MSG_MULTICAST, qc.self)
    qc.WriteCoord(defs.MSG_MULTICAST, org.x)
    qc.WriteCoord(defs.MSG_MULTICAST, org.y)
    qc.WriteCoord(defs.MSG_MULTICAST, org.z)
    qc.WriteCoord(defs.MSG_MULTICAST, qc.trace_endpos.x)
    qc.WriteCoord(defs.MSG_MULTICAST, qc.trace_endpos.y)
    qc.WriteCoord(defs.MSG_MULTICAST, qc.trace_endpos.z)
    engine.multicast(org, defs.MULTICAST_PHS)
    LightningDamage(qc.self.origin, qc.trace_endpos + qc.v_forward * 4,
                    qc.self, 30)
예제 #3
0
파일: weapons.py 프로젝트: barryp/qwpython
def W_FireAxe(*qwp_extra):
    source = Vector(0, 0, 0)
    org = Vector(0, 0, 0)
    qc.makevectors(qc.self.v_angle)
    source = qc.self.origin + Vector(0, 0, 16)
    qc.traceline(source, source + qc.v_forward * 64, defs.FALSE, qc.self)
    if qc.trace_fraction == 1.0:
        return 
    org = qc.trace_endpos - qc.v_forward * 4
    if qc.trace_ent.takedamage:
        qc.trace_ent.axhitme = 1
        SpawnBlood(org, 20)
        if defs.deathmatch > 3:
            combat.T_Damage(qc.trace_ent, qc.self, qc.self, 75)
        else:
            combat.T_Damage(qc.trace_ent, qc.self, qc.self, 20)
        
    else:
        #  hit wall
        qc.self.sound(defs.CHAN_WEAPON, 'player/axhit2.wav', 1, defs.ATTN_NORM)
        qc.WriteByte(defs.MSG_MULTICAST, defs.SVC_TEMPENTITY)
        qc.WriteByte(defs.MSG_MULTICAST, defs.TE_GUNSHOT)
        qc.WriteByte(defs.MSG_MULTICAST, 3)
        qc.WriteCoord(defs.MSG_MULTICAST, org.x)
        qc.WriteCoord(defs.MSG_MULTICAST, org.y)
        qc.WriteCoord(defs.MSG_MULTICAST, org.z)
        engine.multicast(org, defs.MULTICAST_PVS)
예제 #4
0
파일: weapons.py 프로젝트: barryp/qwpython
def W_FireLightning(*qwp_extra):
    if qc.self.ammo_cells < 1:
        qc.self.weapon = W_BestWeapon()
        W_SetCurrentAmmo()
        return 
        
    #  explode if under water
    if qc.self.waterlevel > 1:
        cells = qc.self.ammo_cells
        qc.self.ammo_cells = 0
        W_SetCurrentAmmo()
        combat.T_RadiusDamage(qc.self, qc.self, 35 * cells, qc.world)
        return 
        
    if qc.self.t_width < qc.time:
        qc.self.sound(defs.CHAN_WEAPON, 'weapons/lhit.wav', 1, defs.ATTN_NORM)
        qc.self.t_width = qc.time + 0.6
        
    qc.msg_entity = qc.self
    qc.WriteByte(defs.MSG_ONE, defs.SVC_SMALLKICK)
    qc.self.currentammo = qc.self.ammo_cells = qc.self.ammo_cells - 1
    org = qc.self.origin + Vector(0, 0, 16)
    qc.traceline(org, org + qc.v_forward * 600, defs.TRUE, qc.self)
    qc.WriteByte(defs.MSG_MULTICAST, defs.SVC_TEMPENTITY)
    qc.WriteByte(defs.MSG_MULTICAST, defs.TE_LIGHTNING2)
    qc.WriteEntity(defs.MSG_MULTICAST, qc.self)
    qc.WriteCoord(defs.MSG_MULTICAST, org.x)
    qc.WriteCoord(defs.MSG_MULTICAST, org.y)
    qc.WriteCoord(defs.MSG_MULTICAST, org.z)
    qc.WriteCoord(defs.MSG_MULTICAST, qc.trace_endpos.x)
    qc.WriteCoord(defs.MSG_MULTICAST, qc.trace_endpos.y)
    qc.WriteCoord(defs.MSG_MULTICAST, qc.trace_endpos.z)
    engine.multicast(org, defs.MULTICAST_PHS)
    LightningDamage(qc.self.origin, qc.trace_endpos + qc.v_forward * 4, qc.self, 30)
예제 #5
0
def identify_player(disp, *qwp_extra):
    #  e is a temp entity; guy is our current best guess
    #  as to at whom the player is pointing
    guy = None
    #  The best "closeness" heuristic so far.
    closeness = -1

    #  Walk the list of players...
    e = qc.find(qc.world, 'classname', 'player')
    while e != qc.world:
        #  Get a vector pointing from the viewer to the current
        #  player under consideration
        diff = e.origin - qc.self.origin

        #  Normalize it since we only care where he's pointing,
        #  not how far away the guy is.
        diff = diff.normalize()

        #  Normalize self.angles so we can do a length-independent
        #  consideration
        point = qc.self.angles.normalize()

        #  Find the different between the current player's angle
        #  and the viewer's vision angle
        diff -= point

        #  The length is going to be our definition of closeness
        currclose = diff.length()

        qc.traceline(qc.self.origin, e.origin, defs.FALSE, qc.self)
        if qc.trace_ent == e:
            if (closeness == -1) or (currclose < closeness):
                closeness = currclose
                guy = e
        e = qc.find(e, 'classname', 'player')

    #  Now we display.
    if disp == 0:
        return guy
    if not guy:
        status.TeamPlayerUpdate(qc.self, "You're not looking at anyone!")
        return qc.world

    status.TeamPlayerUpdate2(qc.self, 'You are looking at ', guy.netname)
    return guy
예제 #6
0
파일: ident.py 프로젝트: barryp/qwpython
def identify_player(disp, *qwp_extra):
    #  e is a temp entity; guy is our current best guess
    #  as to at whom the player is pointing
    guy = None
    #  The best "closeness" heuristic so far.
    closeness = -1

    #  Walk the list of players...
    e = qc.find(qc.world, "classname", "player")
    while e != qc.world:
        #  Get a vector pointing from the viewer to the current
        #  player under consideration
        diff = e.origin - qc.self.origin

        #  Normalize it since we only care where he's pointing,
        #  not how far away the guy is.
        diff = diff.normalize()

        #  Normalize self.angles so we can do a length-independent
        #  consideration
        point = qc.self.angles.normalize()

        #  Find the different between the current player's angle
        #  and the viewer's vision angle
        diff -= point

        #  The length is going to be our definition of closeness
        currclose = diff.length()

        qc.traceline(qc.self.origin, e.origin, defs.FALSE, qc.self)
        if qc.trace_ent == e:
            if (closeness == -1) or (currclose < closeness):
                closeness = currclose
                guy = e
        e = qc.find(e, "classname", "player")

    #  Now we display.
    if disp == 0:
        return guy
    if not guy:
        status.TeamPlayerUpdate(qc.self, "You're not looking at anyone!")
        return qc.world

    status.TeamPlayerUpdate2(qc.self, "You are looking at ", guy.netname)
    return guy
예제 #7
0
파일: weapons.py 프로젝트: barryp/qwpython
def FireBullets(shotcount, dir, spread, *qwp_extra):
    global puff_org
    
    qc.makevectors(qc.self.v_angle)
    src = qc.self.origin + qc.v_forward * 10
    src %= Vector(None, None, qc.self.absmin.z + qc.self.size.z * 0.7)
    ClearMultiDamage()
    qc.traceline(src, src + dir * 2048, defs.FALSE, qc.self)
    puff_org = qc.trace_endpos - dir * 4
    while shotcount > 0:
        direction = dir + crandom() * spread.x * qc.v_right + crandom() * spread.y * qc.v_up
        qc.traceline(src, src + direction * 2048, defs.FALSE, qc.self)
        if qc.trace_fraction != 1.0:
            TraceAttack(4, direction)
        shotcount -= 1
        
    ApplyMultiDamage()
    Multi_Finish()
예제 #8
0
def FireBullets(shotcount, dir, spread, *qwp_extra):
    global puff_org

    qc.makevectors(qc.self.v_angle)
    src = qc.self.origin + qc.v_forward * 10
    src %= Vector(None, None, qc.self.absmin.z + qc.self.size.z * 0.7)
    ClearMultiDamage()
    qc.traceline(src, src + dir * 2048, defs.FALSE, qc.self)
    puff_org = qc.trace_endpos - dir * 4
    while shotcount > 0:
        direction = dir + crandom() * spread.x * qc.v_right + crandom(
        ) * spread.y * qc.v_up
        qc.traceline(src, src + direction * 2048, defs.FALSE, qc.self)
        if qc.trace_fraction != 1.0:
            TraceAttack(4, direction)
        shotcount -= 1

    ApplyMultiDamage()
    Multi_Finish()
예제 #9
0
def W_FireAxe(*qwp_extra):
    qc.makevectors(qc.self.v_angle)
    source = qc.self.origin + Vector(0, 0, 16)
    qc.traceline(source, source + qc.v_forward * 64, defs.FALSE, qc.self)
    if qc.trace_fraction == 1.0:
        return
    org = qc.trace_endpos - qc.v_forward * 4
    if qc.trace_ent.takedamage:
        qc.trace_ent.axhitme = 1
        SpawnBlood(org, 20)
        combat.T_Damage(qc.trace_ent, qc.self, qc.self, 20)
    else:
        #  hit wall
        qc.self.sound(defs.CHAN_WEAPON, 'player/axhit2.wav', 1, defs.ATTN_NORM)
        qc.WriteByte(defs.MSG_MULTICAST, defs.SVC_TEMPENTITY)
        qc.WriteByte(defs.MSG_MULTICAST, defs.TE_GUNSHOT)
        qc.WriteByte(defs.MSG_MULTICAST, 3)
        qc.WriteCoord(defs.MSG_MULTICAST, org.x)
        qc.WriteCoord(defs.MSG_MULTICAST, org.y)
        qc.WriteCoord(defs.MSG_MULTICAST, org.z)
        engine.multicast(org, defs.MULTICAST_PVS)
예제 #10
0
def LightningDamage(p1, p2, from0, damage, *qwp_extra):
    f = p2 - p1
    f.normalize()
    f %= Vector(0 - f.y, None, None)
    f %= Vector(None, f.x, None)
    f %= Vector(None, None, 0)
    f *= 16
    e1 = e2 = qc.world
    qc.traceline(p1, p2, defs.FALSE, qc.self)
    if qc.trace_ent.takedamage:
        LightningHit(from0, damage)
        if qc.self.classname == 'player':
            if qc.other.classname == 'player':
                qc.trace_ent.velocity %= Vector(None, None,
                                                qc.trace_ent.velocity.z + 400)

    e1 = qc.trace_ent
    qc.traceline(p1 + f, p2 + f, defs.FALSE, qc.self)
    if qc.trace_ent != e1 and qc.trace_ent.takedamage:
        LightningHit(from0, damage)

    e2 = qc.trace_ent
    qc.traceline(p1 - f, p2 - f, defs.FALSE, qc.self)
    if qc.trace_ent != e1 and qc.trace_ent != e2 and qc.trace_ent.takedamage:
        LightningHit(from0, damage)
예제 #11
0
파일: weapons.py 프로젝트: barryp/qwpython
def LightningDamage(p1, p2, from0, damage, *qwp_extra):
    e1 = engine.world
    e2 = engine.world
    f = Vector(0, 0, 0)
    f = p2 - p1
    f.normalize()
    f %= Vector(0 - f.y, None, None)
    f %= Vector(None, f.x, None)
    f %= Vector(None, None, 0)
    f *= 16
    e1 = e2 = qc.world
    qc.traceline(p1, p2, defs.FALSE, qc.self)
    if qc.trace_ent.takedamage:
        LightningHit(from0, damage)
        if qc.self.classname == 'player':
            if qc.other.classname == 'player':
                qc.trace_ent.velocity %= Vector(None, None, qc.trace_ent.velocity.z + 400)
            
        
    e1 = qc.trace_ent
    qc.traceline(p1 + f, p2 + f, defs.FALSE, qc.self)
    if qc.trace_ent != e1 and qc.trace_ent.takedamage:
        LightningHit(from0, damage)
        
    e2 = qc.trace_ent
    qc.traceline(p1 - f, p2 - f, defs.FALSE, qc.self)
    if qc.trace_ent != e1 and qc.trace_ent != e2 and qc.trace_ent.takedamage:
        LightningHit(from0, damage)
예제 #12
0
def Check_Overhead(*qwp_extra):
    qc.makevectors(qc.self.owner.angles)
    #  The following comparisons could be optimized by doing away with
    #  SRC and END, and plugging the values directly into the traceline
    #  function calls. Using SRC and END made debugging easier. You
    #  decide if it's worth it.
    #  quick check right above head
    src = qc.self.owner.origin - Vector(0, 0, 24)
    end = qc.self.owner.origin - Vector(0, 0, 24)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    src = qc.self.owner.origin - Vector(0, 0, 24) - qc.v_forward * 16
    end = qc.self.owner.origin - Vector(0, 0, 24) - qc.v_forward * 16 + Vector(
        0, 0, 58)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    src = qc.self.owner.origin - Vector(0, 0, 24) + qc.v_forward * 16
    end = qc.self.owner.origin - Vector(0, 0, 24) + qc.v_forward * 16 + Vector(
        0, 0, 58)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    src = qc.self.owner.origin - Vector(0, 0, 24) - qc.v_right * 16
    end = qc.self.owner.origin - Vector(0, 0, 24) - qc.v_right * 16 + Vector(
        0, 0, 58)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    src = qc.self.owner.origin - Vector(0, 0, 24) + qc.v_right * 16
    end = qc.self.owner.origin - Vector(0, 0, 24) + qc.v_right * 16 + Vector(
        0, 0, 58)
    qc.traceline(src, end, defs.FALSE, qc.self.owner)
    if qc.trace_fraction != 1.0:
        return defs.FALSE
    return defs.TRUE
예제 #13
0
파일: client.py 프로젝트: barryp/qwpython
def CheckWaterJump(*qwp_extra):
    start = Vector(0, 0, 0)
    end = Vector(0, 0, 0)
    #  check for a jump-out-of-water
    qc.makevectors(qc.self.angles)
    start = qc.self.origin
    start %= Vector(None, None, start.z + 8)
    qc.v_forward %= Vector(None, None, 0)
    qc.v_forward.normalize()
    end = start + qc.v_forward * 24
    qc.traceline(start, end, defs.TRUE, qc.self)
    if qc.trace_fraction < 1:
        #  solid at waist
        start %= Vector(None, None, start.z + qc.self.maxs.z - 8)
        end = start + qc.v_forward * 24
        qc.self.movedir = qc.trace_plane_normal * -50
        qc.traceline(start, end, defs.TRUE, qc.self)
        if qc.trace_fraction == 1:
            #  open at eye level
            qc.self.flags |= defs.FL_WATERJUMP
            qc.self.velocity %= Vector(None, None, 225)
            qc.self.flags -= qc.self.flags & defs.FL_JUMPRELEASED
            qc.self.teleport_time = qc.time + 2 #  safety net
            return 
예제 #14
0
def CheckWaterJump(*qwp_extra):
    start = Vector(0, 0, 0)
    end = Vector(0, 0, 0)
    #  check for a jump-out-of-water
    qc.makevectors(qc.self.angles)
    start = qc.self.origin
    start %= Vector(None, None, start.z + 8)
    qc.v_forward %= Vector(None, None, 0)
    qc.v_forward.normalize()
    end = start + qc.v_forward * 24
    qc.traceline(start, end, defs.TRUE, qc.self)
    if qc.trace_fraction < 1:
        #  solid at waist
        start %= Vector(None, None, start.z + qc.self.maxs.z - 8)
        end = start + qc.v_forward * 24
        qc.self.movedir = qc.trace_plane_normal * -50
        qc.traceline(start, end, defs.TRUE, qc.self)
        if qc.trace_fraction == 1:
            #  open at eye level
            qc.self.flags |= defs.FL_WATERJUMP
            qc.self.velocity %= Vector(None, None, 225)
            qc.self.flags -= qc.self.flags & defs.FL_JUMPRELEASED
            qc.self.teleport_time = qc.time + 2  #  safety net
            return
예제 #15
0
파일: combat.py 프로젝트: barryp/qwpython
def CanDamage(targ, inflictor, *qwp_extra):
    #  bmodels need special checking because their origin is 0,0,0
    if targ.movetype == defs.MOVETYPE_PUSH:
        qc.traceline(inflictor.origin, 0.5 * (targ.absmin + targ.absmax), defs.TRUE, qc.self)
        if qc.trace_fraction == 1:
            return defs.TRUE
        if qc.trace_ent == targ:
            return defs.TRUE
        return defs.FALSE
        
    qc.traceline(inflictor.origin, targ.origin, defs.TRUE, qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    qc.traceline(inflictor.origin, targ.origin + Vector(15, 15, 0), defs.TRUE, qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    qc.traceline(inflictor.origin, targ.origin + Vector(-15, -15, 0), defs.TRUE, qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    qc.traceline(inflictor.origin, targ.origin + Vector(-15, 15, 0), defs.TRUE, qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    qc.traceline(inflictor.origin, targ.origin + Vector(15, -15, 0), defs.TRUE, qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    return defs.FALSE
예제 #16
0
파일: combat.py 프로젝트: angeld29/qwpy
def CanDamage(targ, inflictor, *qwp_extra):
    #  bmodels need special checking because their origin is 0,0,0
    if targ.movetype == defs.MOVETYPE_PUSH:
        qc.traceline(inflictor.origin, 0.5 * (targ.absmin + targ.absmax),
                     defs.TRUE, qc.self)
        if qc.trace_fraction == 1:
            return defs.TRUE
        if qc.trace_ent == targ:
            return defs.TRUE
        return defs.FALSE

    qc.traceline(inflictor.origin, targ.origin, defs.TRUE, qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    qc.traceline(inflictor.origin, targ.origin + Vector(15, 15, 0), defs.TRUE,
                 qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    qc.traceline(inflictor.origin, targ.origin + Vector(-15, -15, 0),
                 defs.TRUE, qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    qc.traceline(inflictor.origin, targ.origin + Vector(-15, 15, 0), defs.TRUE,
                 qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    qc.traceline(inflictor.origin, targ.origin + Vector(15, -15, 0), defs.TRUE,
                 qc.self)
    if qc.trace_fraction == 1:
        return defs.TRUE
    return defs.FALSE