예제 #1
0
파일: misc.py 프로젝트: angeld29/qwpy
def bubble_bob(*qwp_extra):
    rnd1 = 0
    rnd2 = 0
    rnd3 = 0
    vtmp1 = Vector(0, 0, 0)
    modi = Vector(0, 0, 0)
    qc.self.cnt += 1
    if qc.self.cnt == 4:
        bubble_split()
    if qc.self.cnt == 20:
        qc.self.remove()
    rnd1 = qc.self.velocity.x + (-10 + (random.random() * 20))
    rnd2 = qc.self.velocity.y + (-10 + (random.random() * 20))
    rnd3 = qc.self.velocity.z + 10 + random.random() * 10
    if rnd1 > 10:
        rnd1 = 5
    if rnd1 < -10:
        rnd1 = -5
    if rnd2 > 10:
        rnd2 = 5
    if rnd2 < -10:
        rnd2 = -5
    if rnd3 < 10:
        rnd3 = 15
    if rnd3 > 30:
        rnd3 = 25
    qc.self.velocity %= Vector(rnd1, None, None)
    qc.self.velocity %= Vector(None, rnd2, None)
    qc.self.velocity %= Vector(None, None, rnd3)
    qc.self.nextthink = qc.time + 0.5
    qc.self.think = bubble_bob
예제 #2
0
def PlayerPreThink(*qwp_extra):
    mspeed = 0
    aspeed = 0
    r = 0
    if intermission_running:
        IntermissionThink()  #  otherwise a button could be missed between
        return  #  the think tics

    if qc.self.view_ofs == Vector(0, 0, 0):
        return  #  intermission or finale
    qc.makevectors(qc.self.v_angle)  #  is this still used
    qc.self.deathtype = None
    CheckRules()
    WaterMove()
    #
    # 	if (self.waterlevel == 2)
    # 		CheckWaterJump ();
    #
    if qc.self.deadflag >= defs.DEAD_DEAD:
        PlayerDeathThink()
        return

    if qc.self.deadflag == defs.DEAD_DYING:
        return  #  dying, so do nothing
    if qc.self.button2:
        PlayerJump()

    else:
        qc.self.flags |= defs.FL_JUMPRELEASED
    #  teleporters can force a non-moving pause time
    if qc.time < qc.self.pausetime:
        qc.self.velocity = Vector(0, 0, 0)
    if qc.time > qc.self.attack_finished and qc.self.currentammo == 0 and qc.self.weapon != defs.IT_AXE:
        qc.self.weapon = weapons.W_BestWeapon()
        weapons.W_SetCurrentAmmo()
예제 #3
0
파일: plats.py 프로젝트: angeld29/qwpython
def plat_spawn_inside_trigger(*qwp_extra):
    trigger = engine.world
    tmin = Vector(0, 0, 0)
    tmax = Vector(0, 0, 0)
    # 
    #  middle trigger
    # 	
    trigger = qc.spawn()
    trigger.touch = plat_center_touch
    trigger.movetype = defs.MOVETYPE_NONE
    trigger.solid = defs.SOLID_TRIGGER
    trigger.enemy = qc.self
    tmin = qc.self.mins + Vector(25, 25, 0)
    tmax = qc.self.maxs - Vector(25, 25, -8)
    tmin %= Vector(None, None, tmax.z - (qc.self.pos1.z - qc.self.pos2.z + 8))
    if qc.self.spawnflags & PLAT_LOW_TRIGGER:
        tmax %= Vector(None, None, tmin.z + 8)
    if qc.self.size.x <= 50:
        tmin %= Vector((qc.self.mins.x + qc.self.maxs.x) / 2, None, None)
        tmax %= Vector(tmin.x + 1, None, None)
        
    if qc.self.size.y <= 50:
        tmin %= Vector(None, (qc.self.mins.y + qc.self.maxs.y) / 2, None)
        tmax %= Vector(None, tmin.y + 1, None)
        
    qc.setsize(trigger, tmin, tmax)
예제 #4
0
def PlayerJump(*qwp_extra):
    start = Vector(0, 0, 0)
    end = Vector(0, 0, 0)
    if qc.self.flags & defs.FL_WATERJUMP:
        return
    if qc.self.waterlevel >= 2:
        #  play swiming sound
        if qc.self.swim_flag < qc.time:
            qc.self.swim_flag = qc.time + 1
            if random.random() < 0.5:
                qc.self.sound(defs.CHAN_BODY, 'misc/water1.wav', 1,
                              defs.ATTN_NORM)
            else:
                qc.self.sound(defs.CHAN_BODY, 'misc/water2.wav', 1,
                              defs.ATTN_NORM)

        return

    if not (qc.self.flags & defs.FL_ONGROUND):
        return
    if not (qc.self.flags & defs.FL_JUMPRELEASED):
        return  #  don't pogo stick
    qc.self.flags -= qc.self.flags & defs.FL_JUMPRELEASED
    qc.self.button2 = 0
    #  player jumping sound
    qc.self.sound(defs.CHAN_BODY, 'player/plyrjmp8.wav', 1, defs.ATTN_NORM)
예제 #5
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
예제 #6
0
def W_FireGrenade(*qwp_extra):
    qc.self.currentammo = qc.self.ammo_rockets = qc.self.ammo_rockets - 1
    qc.self.sound(defs.CHAN_WEAPON, 'weapons/grenade.wav', 1, defs.ATTN_NORM)
    qc.msg_entity = qc.self
    qc.WriteByte(defs.MSG_ONE, defs.SVC_SMALLKICK)
    qc.newmis = qc.spawn()
    qc.newmis.owner = qc.self
    qc.newmis.movetype = defs.MOVETYPE_BOUNCE
    qc.newmis.solid = defs.SOLID_BBOX
    qc.newmis.classname = 'grenade'
    qc.newmis.cnt = 0
    #  set newmis speed
    qc.makevectors(qc.self.v_angle)
    if qc.self.v_angle.x:
        qc.newmis.velocity = qc.v_forward * 600 + qc.v_up * 200 + crandom(
        ) * qc.v_right * 10 + crandom() * qc.v_up * 10
    else:
        qc.newmis.velocity = qc.self.aim(10000)
        qc.newmis.velocity *= 600
        qc.newmis.velocity %= Vector(None, None, 200)

    qc.newmis.avelocity = Vector(300, 300, 300)
    qc.newmis.angles = qc.vectoangles(qc.newmis.velocity)
    qc.newmis.touch = GrenadeTouch
    #  set newmis duration
    qc.newmis.nextthink = qc.time + 2.5
    qc.newmis.think = GrenadeExplode
    qc.newmis.setmodel('progs/grenade.mdl')
    qc.setsize(qc.newmis, Vector(0, 0, 0), Vector(0, 0, 0))
    qc.setorigin(qc.newmis, qc.self.origin)
예제 #7
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)
예제 #8
0
def SUB_CalcMove(tdest, tspeed, func, *qwp_extra):
    vdestdelta = Vector(0, 0, 0)
    len = 0
    traveltime = 0
    if not tspeed:
        qc.objerror('No speed is defined!')
    qc.self.think1 = func
    qc.self.finaldest = tdest
    qc.self.think = SUB_CalcMoveDone
    if tdest == qc.self.origin:
        qc.self.velocity = Vector(0, 0, 0)
        qc.self.nextthink = qc.self.ltime + 0.1
        return 
        
    #  set destdelta to the vector needed to move
    vdestdelta = tdest - qc.self.origin
    #  calculate length of vector
    len = vdestdelta.length()
    #  divide by speed to get time to reach dest
    traveltime = len / tspeed
    if traveltime < 0.03:
        traveltime = 0.03
    #  set nextthink to trigger a think when dest is reached
    qc.self.nextthink = qc.self.ltime + traveltime
    #  scale the destdelta vector by the time spent traveling to get velocity
    qc.self.velocity = vdestdelta * (1 / traveltime) #  qcc won't take vec/float	
예제 #9
0
파일: items.py 프로젝트: angeld29/qwpy
def item_armorInv(*qwp_extra):
    qc.self.touch = armor_touch
    engine.precache_model('progs/armor.mdl')
    qc.self.setmodel('progs/armor.mdl')
    qc.self.skin = 2
    qc.setsize(qc.self, Vector(-16, -16, 0), Vector(16, 16, 56))
    StartItem()
예제 #10
0
파일: items.py 프로젝트: angeld29/qwpy
def item_health(*qwp_extra):
    qc.self.touch = health_touch
    if qc.self.spawnflags & H_ROTTEN:
        engine.precache_model('maps/b_bh10.bsp')
        engine.precache_sound('items/r_item1.wav')
        qc.self.setmodel('maps/b_bh10.bsp')
        qc.self.noise = 'items/r_item1.wav'
        qc.self.healamount = 15
        qc.self.healtype = 0        
    elif qc.self.spawnflags & H_MEGA:
        engine.precache_model('maps/b_bh100.bsp')
        engine.precache_sound('items/r_item2.wav')
        qc.self.setmodel('maps/b_bh100.bsp')
        qc.self.noise = 'items/r_item2.wav'
        qc.self.healamount = 100
        qc.self.healtype = 2        
    else:
        engine.precache_model('maps/b_bh25.bsp')
        engine.precache_sound('items/health1.wav')
        qc.self.setmodel('maps/b_bh25.bsp')
        qc.self.noise = 'items/health1.wav'
        qc.self.healamount = 25
        qc.self.healtype = 1
        
    qc.setsize(qc.self, Vector(0, 0, 0), Vector(32, 32, 56))
    StartItem()
예제 #11
0
파일: items.py 프로젝트: angeld29/qwpy
def weapon_supershotgun(*qwp_extra):
    engine.precache_model('progs/g_shot.mdl')
    qc.self.setmodel('progs/g_shot.mdl')
    qc.self.weapon = defs.IT_SUPER_SHOTGUN
    qc.self.netname = 'Double-barrelled Shotgun'
    qc.self.touch = weapon_touch
    qc.setsize(qc.self, Vector(-16, -16, 0), Vector(16, 16, 56))
    StartItem()
예제 #12
0
파일: items.py 프로젝트: angeld29/qwpy
def weapon_supernailgun(*qwp_extra):
    engine.precache_model('progs/g_nail2.mdl')
    qc.self.setmodel('progs/g_nail2.mdl')
    qc.self.weapon = defs.IT_SUPER_NAILGUN
    qc.self.netname = 'Super Nailgun'
    qc.self.touch = weapon_touch
    qc.setsize(qc.self, Vector(-16, -16, 0), Vector(16, 16, 56))
    StartItem()
예제 #13
0
파일: items.py 프로젝트: angeld29/qwpy
def weapon_rocketlauncher(*qwp_extra):
    engine.precache_model('progs/g_rock2.mdl')
    qc.self.setmodel('progs/g_rock2.mdl')
    qc.self.weapon = 3
    qc.self.netname = 'Rocket Launcher'
    qc.self.touch = weapon_touch
    qc.setsize(qc.self, Vector(-16, -16, 0), Vector(16, 16, 56))
    StartItem()
예제 #14
0
파일: triggers.py 프로젝트: angeld29/qwpy
def info_teleport_destination(*qwp_extra):
    #  this does nothing, just serves as a target spot
    qc.self.mangle = qc.self.angles
    qc.self.angles = Vector(0, 0, 0)
    qc.self.model = None
    qc.self.origin += Vector(0, 0, 27)
    if not qc.self.targetname:
        qc.objerror('no targetname')
예제 #15
0
파일: items.py 프로젝트: angeld29/qwpy
def weapon_lightning(*qwp_extra):
    engine.precache_model('progs/g_light.mdl')
    qc.self.setmodel('progs/g_light.mdl')
    qc.self.weapon = 3
    qc.self.netname = 'Thunderbolt'
    qc.self.touch = weapon_touch
    qc.setsize(qc.self, Vector(-16, -16, 0), Vector(16, 16, 56))
    StartItem()
예제 #16
0
파일: items.py 프로젝트: angeld29/qwpy
def weapon_grenadelauncher(*qwp_extra):
    if defs.deathmatch <= 3:
        engine.precache_model('progs/g_rock.mdl')
        qc.self.setmodel('progs/g_rock.mdl')
        qc.self.weapon = 3
        qc.self.netname = 'Grenade Launcher'
        qc.self.touch = weapon_touch
        qc.setsize(qc.self, Vector(-16, -16, 0), Vector(16, 16, 56))
        StartItem()
예제 #17
0
파일: triggers.py 프로젝트: angeld29/qwpy
def trigger_monsterjump(*qwp_extra):
    if not qc.self.speed:
        qc.self.speed = 200
    if not qc.self.height:
        qc.self.height = 200
    if qc.self.angles == Vector(0, 0, 0):
        qc.self.angles = Vector(0, 360, 0)
    subs.InitTrigger()
    qc.self.touch = trigger_monsterjump_touch
예제 #18
0
파일: items.py 프로젝트: angeld29/qwpy
def weapon_nailgun(*qwp_extra):
    if defs.deathmatch <= 3:
        engine.precache_model('progs/g_nail.mdl')
        qc.self.setmodel('progs/g_nail.mdl')
        qc.self.weapon = defs.IT_NAILGUN
        qc.self.netname = 'nailgun'
        qc.self.touch = weapon_touch
        qc.setsize(qc.self, Vector(-16, -16, 0), Vector(16, 16, 56))
        StartItem()
예제 #19
0
def MakeLink(*qwp_extra):
    qc.newmis = qc.spawn()
    qc.newmis.movetype = defs.MOVETYPE_FLYMISSILE
    qc.newmis.solid = defs.SOLID_NOT
    qc.newmis.owner = qc.self  #  SELF is the hook!
    qc.newmis.avelocity = Vector(200, 200, 200)
    qc.newmis.setmodel('progs/bit.mdl')
    qc.setorigin(qc.newmis, qc.self.origin)
    qc.setsize(qc.newmis, Vector(0, 0, 0), Vector(0, 0, 0))
    return qc.newmis
예제 #20
0
def SetMovedir(*qwp_extra):
    if qc.self.angles == Vector(0, -1, 0):
        qc.self.movedir = Vector(0, 0, 1)
    elif qc.self.angles == Vector(0, -2, 0):
        qc.self.movedir = Vector(0, 0, -1)
    else:
        qc.makevectors(qc.self.angles)
        qc.self.movedir = qc.v_forward
        
    qc.self.angles = Vector(0, 0, 0)
예제 #21
0
def spawn_field(fmins, fmaxs, *qwp_extra):
    trigger = qc.spawn()
    trigger.movetype = defs.MOVETYPE_NONE
    trigger.solid = defs.SOLID_TRIGGER
    trigger.owner = qc.self
    trigger.touch = door_trigger_touch
    t1 = fmins
    t2 = fmaxs
    qc.setsize(trigger, t1 - Vector(60, 60, 8), t2 + Vector(60, 60, 8))
    return (trigger)
예제 #22
0
파일: items.py 프로젝트: angeld29/qwpy
def item_artifact_envirosuit(*qwp_extra):
    qc.self.touch = powerup_touch
    engine.precache_model('progs/suit.mdl')
    engine.precache_sound('items/suit.wav')
    engine.precache_sound('items/suit2.wav')
    qc.self.noise = 'items/suit.wav'
    qc.self.setmodel('progs/suit.mdl')
    qc.self.netname = 'Biosuit'
    qc.self.items = defs.IT_SUIT
    qc.setsize(qc.self, Vector(-16, -16, -24), Vector(16, 16, 32))
    StartItem()
예제 #23
0
파일: triggers.py 프로젝트: angeld29/qwpy
def trigger_monsterjump_touch(*qwp_extra):
    if qc.other.flags & (defs.FL_MONSTER | defs.FL_FLY
                         | defs.FL_SWIM) != defs.FL_MONSTER:
        return
    #  set XY even if not on ground, so the jump will clear lips
    qc.other.velocity %= Vector(qc.self.movedir.x * qc.self.speed, None, None)
    qc.other.velocity %= Vector(None, qc.self.movedir.y * qc.self.speed, None)
    if not (qc.other.flags & defs.FL_ONGROUND):
        return
    qc.other.flags -= defs.FL_ONGROUND
    qc.other.velocity %= Vector(None, None, qc.self.height)
예제 #24
0
파일: player.py 프로젝트: angeld29/qwpy
def PlayerDie(*qwp_extra):
    #  make dead guy release hook (wedge)
    if qc.self.hook_out:
        grapple.Reset_Grapple(qc.self.hook)
        qc.self.attack_finished = qc.time + 0.75
        qc.self.hook_out = defs.TRUE  #  PutClientInServer will reset this

    qc.self.items -= qc.self.items & defs.IT_INVISIBILITY
    qc.self.invisible_finished = 0  #  don't die as eyes
    qc.self.invincible_finished = 0
    qc.self.super_damage_finished = 0
    qc.self.radsuit_finished = 0
    qc.self.modelindex = client.modelindex_player  #  don't use eyes
    items.DropBackpack()
    items.DropRune()
    teamplay.TeamCaptureDropFlagOfPlayer(qc.self)
    if qc.self.killed == 2:
        qc.self.killed = 0
    else:
        qc.self.killed = 1
    qc.self.weaponmodel = None
    qc.self.view_ofs = Vector(0, 0, -8)
    qc.self.deadflag = defs.DEAD_DYING
    qc.self.solid = defs.SOLID_NOT
    qc.self.flags -= qc.self.flags & defs.FL_ONGROUND
    qc.self.movetype = defs.MOVETYPE_TOSS
    if qc.self.velocity.z < 10:
        qc.self.velocity %= Vector(None, None,
                                   qc.self.velocity.z + random.random() * 300)
    if qc.self.health < -40:
        GibPlayer()
        return

    DeathSound()
    qc.self.angles %= Vector(0, None, None)
    qc.self.angles %= Vector(None, None, 0)
    if qc.self.weapon == defs.IT_AXE:
        player_die_ax1()
        return

    i = engine.cvar('temp1')
    if not i:
        i = 1 + math.floor(random.random() * 6)
    if i == 1:
        player_diea1()
    elif i == 2:
        player_dieb1()
    elif i == 3:
        player_diec1()
    elif i == 4:
        player_died1()
    else:
        player_diee1()
예제 #25
0
파일: items.py 프로젝트: angeld29/qwpy
def item_artifact_super_damage(*qwp_extra):
    qc.self.touch = powerup_touch
    engine.precache_model('progs/quaddama.mdl')
    engine.precache_sound('items/damage.wav')
    engine.precache_sound('items/damage2.wav')
    engine.precache_sound('items/damage3.wav')
    qc.self.noise = 'items/damage.wav'
    qc.self.setmodel('progs/quaddama.mdl')
    qc.self.netname = 'Quad Damage'
    qc.self.items = defs.IT_QUAD
    qc.setsize(qc.self, Vector(-16, -16, -24), Vector(16, 16, 32))
    StartItem()
예제 #26
0
파일: items.py 프로젝트: angeld29/qwpy
def item_artifact_invisibility(*qwp_extra):
    qc.self.touch = powerup_touch
    engine.precache_model('progs/invisibl.mdl')
    engine.precache_sound('items/inv1.wav')
    engine.precache_sound('items/inv2.wav')
    engine.precache_sound('items/inv3.wav')
    qc.self.noise = 'items/inv1.wav'
    qc.self.setmodel('progs/invisibl.mdl')
    qc.self.netname = 'Ring of Shadows'
    qc.self.items = defs.IT_INVISIBILITY
    qc.setsize(qc.self, Vector(-16, -16, -24), Vector(16, 16, 32))
    StartItem()
예제 #27
0
파일: items.py 프로젝트: angeld29/qwpy
def item_artifact_invulnerability(*qwp_extra):
    qc.self.touch = powerup_touch
    engine.precache_model('progs/invulner.mdl')
    engine.precache_sound('items/protect.wav')
    engine.precache_sound('items/protect2.wav')
    engine.precache_sound('items/protect3.wav')
    qc.self.noise = 'items/protect.wav'
    qc.self.setmodel('progs/invulner.mdl')
    qc.self.netname = 'Pentagram of Protection'
    qc.self.items = defs.IT_INVULNERABILITY
    qc.setsize(qc.self, Vector(-16, -16, -24), Vector(16, 16, 32))
    StartItem()
예제 #28
0
파일: player.py 프로젝트: angeld29/qwpy
def ThrowHead(gibname, dm, *qwp_extra):
    qc.self.setmodel(gibname)
    qc.self.frame = 0
    qc.self.nextthink = -1
    qc.self.movetype = defs.MOVETYPE_BOUNCE
    qc.self.takedamage = defs.DAMAGE_NO
    qc.self.solid = defs.SOLID_NOT
    qc.self.view_ofs = Vector(0, 0, 8)
    qc.setsize(qc.self, Vector(-16, -16, 0), Vector(16, 16, 56))
    qc.self.velocity = VelocityForDamage(dm)
    qc.self.origin %= Vector(None, None, qc.self.origin.z - 24)
    qc.self.flags -= qc.self.flags & defs.FL_ONGROUND
    qc.self.avelocity = weapons.crandom() * Vector(0, 600, 0)
예제 #29
0
def GrenadeTouch(*qwp_extra):
    if qc.other == qc.self.owner:
        return  #  don't explode on owner
    if qc.self.cnt:
        return
    if qc.other.takedamage == defs.DAMAGE_AIM:
        qc.self.cnt = 1
        GrenadeExplode()
        return

    qc.self.sound(defs.CHAN_WEAPON, 'weapons/bounce.wav', 1,
                  defs.ATTN_NORM)  #  bounce sound
    if qc.self.velocity == Vector(0, 0, 0):
        qc.self.avelocity = Vector(0, 0, 0)
예제 #30
0
파일: items.py 프로젝트: angeld29/qwpy
def PlaceItem(*qwp_extra):
    qc.self.mdl = qc.self.model #  so it can be restored on respawn
    qc.self.flags = defs.FL_ITEM #  make extra wide
    qc.self.solid = defs.SOLID_TRIGGER
    qc.self.movetype = defs.MOVETYPE_TOSS
    qc.self.velocity = Vector(0, 0, 0)
    qc.self.origin %= Vector(None, None, qc.self.origin.z + 6)
    oldz = qc.self.origin.z
    if not qc.droptofloor():
        engine.dprint('Bonus item fell out of level at ')
        engine.dprint(str(qc.self.origin))
        engine.dprint('\012')
        qc.self.remove()
        return