Ejemplo n.º 1
0
script GRAPPLE_REEL (int grappleTid, int strength, int firetype)
{
    int nX;   int nY;   int nZ;
    int plX;  int plY;  int plZ;
    int vX;   int vY;   int vZ;
    int velX; int velY; int velZ;

    int breakLoop = false;

    int magnitude;

    int pln = PlayerNumber();
    int playerTid = ActivatorTID();

    if (playerTid == 0) // can we give him a TID without breaking anything?
    {
        playerTid = unusedTID(TIDSTART, -1);
        Thing_ChangeTID(0, playerTid);
    }

    // if not, then okay, just use the one he has already

    int grX = GetActorX(grappleTid);
    int grY = GetActorY(grappleTid);
    int grZ = GetActorZ(grappleTid);

    while (!breakLoop)
    {
        if (ThingCount(0, grappleTID) != 1)
        {
            break;
        }
        
        plX  = GetActorX(0);    plY  = GetActorY(0);    plZ  = GetActorZ(0);
        vX   = grX - plX;       vY   = grY - plY;       vZ   = grZ - plZ;

        // NOTE: I had to drop precision here in exchange for not overflowing
        magnitude = magnitudeThree(vX >> 16, vY >> 16, vZ >> 16);

        if (magnitude != 0)
        {
            nX = vX / magnitude; nY = vY / magnitude; nZ = vZ / magnitude;
            ACS_ExecuteAlways(GRAPPLE_DRAWLINE, 0, grappleTid, playerTid, 16);
        }
        else
        {
            nX = 0; nY = 0; nZ = 0;
        }

        SetActorVelocity(0, nX*strength, nY*strength, nZ*strength, true, true);

        if (CheckInventory("Grappling") == 0)
            { breakLoop = true; }

        Delay(1);
    }

    Thing_Remove(grappleTid);
}
Ejemplo n.º 2
0
script GRAPPLE_DRAWLINE (int grappleTid, int playerTid, int density)
{
    int plX; int plY;  int plZ;
    int grX; int grY;  int grZ;
    int vX;  int vY;   int vZ;
    int nX;  int nY;   int nZ;
    int bX;  int bY;   int bZ;
    int magnitude;
    int pointCount;
    int pointOffset;

    if (ThingCount(0, grappleTid) != 1)
    {
        terminate;
    }

    if (ThingCount(0, playerTid) != 1)
    {
        terminate;
    }

    plX = GetActorX(playerTid); grX = GetActorX(grappleTid);
    plY = GetActorY(playerTid); grY  = GetActorY(grappleTid);
    plZ = GetActorZ(playerTid) + 2400000; grZ  = GetActorZ(grappleTid);
    vX   = grX - plX;       vY   = grY - plY;       vZ   = grZ - plZ;

    // NOTE: More precision bullshit
    magnitude = magnitudeThree(vX >> 16, vY >> 16, vZ >> 16);

    pointCount  = magnitude / density;
    pointOffset = magnitude - (pointCount * density);

    if (magnitude != 0)
    {
        nX = vX / magnitude; nY = vY / magnitude; nZ = vZ / magnitude;

        int i; int j;
        for (i = 0; i < pointCount; i++)
        {
            j = (i * density) + pointOffset;

            bX = (nX * j) + plX;
            bY = (nY * j) + plY;
            bZ = (nZ * j) + plZ;

            Spawn("GrapplePoint", bX, bY, bZ);
        }
    }

}
Ejemplo n.º 3
0
// Keeps current level and XP updated
void CheckLevel()
{
    if (Player.Level < MAX_LEVEL)
        Player.XPNext = XPTable[Player.Level];
    
    if (Player.Level >= MAX_LEVEL)
    {
        Player.XP = XPTable[MAX_LEVEL - 1];
        Player.XPNext = XPTable[MAX_LEVEL - 1];
    }
    
    // Now check for a level up
    if (Player.XP >= XPTable[Player.Level] && Player.Level < MAX_LEVEL)
    {
        int Modules = (int)((((fixed)Player.Level + 1) * 100.0) * GetCVarFixed("drpg_module_levelfactor"));
        
        // Level Up
        Player.Level++;
        Player.Payout.Levels++;
        GiveInventory("DRPGModule", Modules);
        
        if (GetCVar("drpg_levelup_heal"))
        {
            HealThing(SHIELD_HEALTH);
            
            if (Player.EP < 0)
                Player.EP = 0;
            else
                Player.EP = Player.EPMax;
        }
        
        FadeRange(255, 255, 255, 0.5, 255, 255, 255, 0, 2.0);
        PrintMessage(StrParam("You have reached level %d", Player.Level), LEVELUP_ID, -32);
        
        ActivatorSound("misc/levelup", 96);
        SpawnForced("DRPGLevelUpArrow", GetActorX(0), GetActorY(0), GetActorZ(0) + GetActorPropertyFixed(Player.TID, APROP_Height), 0, 0);
    }
}
Ejemplo n.º 4
0
script GRAPPLE_HOOK (int strength, int firetype)
{
    int playerInput;
    int myX; int myY; int myZ;

    int firerPln = ACS_ExecuteWithResult(GETFIRERPLN, 0,0,0);
    int projTid = PROJOFFSET+firerPln;

    while (ThingCount(0, projTid) > 0)
    {
        projTid++;
    }

    Thing_ChangeTID(0, projTid);

    SetActivatorToTarget(0);

    while (ThingCount(0, projTid) > 0)
    {
        myX = GetActorX(projTid);
        myY = GetActorY(projTid);
        myZ = GetActorZ(projTid);
        playerInput = GetPlayerInput(-1, MODINPUT_BUTTONS);

        switch (firetype)
        {
        case 0:
            if (!(GetPlayerInput(-1, MODINPUT_BUTTONS) & BT_ALTATTACK))
            {
                Thing_Remove(projTid);
                Spawn("GuaranteedTeleportFog", myX, myY, myZ-20.0);
                terminate;
            }
            break;

        case 1:
            if (!(GetPlayerInput(-1, MODINPUT_BUTTONS) & BT_ATTACK))
            {
                Thing_Remove(projTid);
                Spawn("GuaranteedTeleportFog", myX, myY, myZ-20.0);
                terminate;
            }
            break;

        case 2:
            if (CheckInventory("InventoryToggle"))
            {
                Thing_Remove(projTid);
                Spawn("GuaranteedTeleportFog", myX, myY, myZ-20.0);
                terminate;
            }
            break;
        }

        Delay(1);
    }

    Spawn("GrappleSpot", myX, myY, myZ, projTid);

    ACS_ExecuteAlways(GRAPPLE_REEL, 0, projTid, strength, firetype);
}