the cutting room mirror

Tetris Worlds (Windows)

This article has a talk page!
view on tcrf.net

This page contains notes for the game Tetris Worlds (Windows).

TWS (Tetris Worlds Script) files#

CASCADE.TWS#

//   FILE: Cascade Tetris v7.2DP.tws
// SOURCE: Cascade Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:36:11 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Marathon
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "J"
    Tags 0,1
}

Mino
{
    Name "T"
    Tags 0,2
}

Mino
{
    Name "S"
    Tags 0,3
}

Mino
{
    Name "Z"
    Tags 0,4
}

Mino
{
    Name "L"
    Tags 0,5
}

Mino
{
    Name "O"
    Tags 0,6
}

Mino
{
    Name "I"
    Tags 0,7
}

Tetramino
{
    Name "T"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T" (0,1)
        "T" (-1,0)
        "T" (0,0)
        "T" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J" (-1,1)
        "J" (-1,0)
        "J" (0,0)
        "J" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L" (1,1)
        "L" (-1,0)
        "L" (0,0)
        "L" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S" (0,1)
        "S" (1,1)
        "S" (-1,0)
        "S" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z" (-1,1)
        "Z" (0,1)
        "Z" (0,0)
        "Z" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I" (-1,0)
        "I" (0,0)
        "I" (1,0)
        "I" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O" (0,1)
        "O" (1,1)
        "O" (0,0)
        "O" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

Shape
{
    Name "tspin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "tspin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
        sound "FX_CLR01"
    }
    PatternEndScript
    {
        set st1.d3 to st1.d3 + 1
    }
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed 0.05
    EliminateBeginScript
    {
        set ph.d0 to 0
        set ph.d1 to 0
    }
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
        set ph.d1 to ph.d1 + 1
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        if ph.d0 >= 1
            set goal to goal - (ph.d0 + (ph.d0 - 1))
        end
        if ph.d0>0
            if cascades>1
                set goal to goal - ((cascades-1)*2)
            end
        end
        if ph.d0 > st1.d6
            set st1.d6 to ph.d0
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    GravityEnabled
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if pl.d8 - goal
          set pl.d7 to (((pl.d9-goal)/pl.d9)-(level time/120)) * 20
                    if pl.d7 > 4
                        set pl.d7 to 4
                    end
         mino mood pl.d7
         set pl.d8 to goal
        end
        if cascades > 0
            set st1.d4 to st1.d4 + cascades
        end
        if st1.d4 > 0
            if (cascades - 1) > st1.d5
                set st1.d5 to (cascades - 1)
            end
        end
        if cascades = 2
        message "2 Cascade"
        line color (109,0,23)
         sound "FX_MTRS1"
         sound "VO_CAS02"
        end
        if cascades = 3
        message "3 Cascades"
        line color (39,0,87)
         sound "FX_MTRS2"
         sound "VO_CAS03"
        end
        if cascades = 4
        message "4 Cascades"
        line color (39,0,87)
         sound "FX_MTRS3"
         sound "VO_CAS04"
        end
        if cascades = 5
        message "5 Cascades"
        line color (116,55,0)
         sound "FX_MTRS4"
         sound "VO_CAS05"
        end
        if cascades = 6
        message "6 Cascades"
        line color (116,55,0)
         sound "FX_MTRS5"
         sound "VO_CAS06"
        end
        if cascades = 7
        message "7 Cascades"
        line color (0,91,56)
         sound "FX_MTRS6"
         sound "VO_CAS07"
        end
        if cascades = 8
            message "8 Cascades"
        line color (0,91,56)
         sound "FX_MTRS6"
         sound "VO_CAS08"
        end
        if cascades = 9
            message "9 Cascades"
        line color (118,119,0)
         sound "FX_MTRS6"
         sound "VO_CAS09"
        end
        if cascades = 10
            message "10 Cascades"
        line color (118,119,0)
         sound "FX_MTRS6"
         sound "VO_CAS10"
        end
        if cascades >= 11
            message "Super Cascade!!!"
        line color (0,36,154)
            sound "VO_AMAZING"
         sound "FX_MTRS6"
        end
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
         message "LEVEL UP!"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        set st2.d7 to rank
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st1.d3 to 0
        set st1.d4 to 0
        set st1.d5 to 0
        set st1.d6 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        set goal to (5*level)
        set st2.d8 to goal
        if level < 5
         mino intensity low
         else
         if level < 10
          mino intensity medium
          else
           mino intensity high
         end
        end
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end
           set goal to goal -1 
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
            set goal to goal -1 
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Cascade Intro"
    TriggerType LevelTime 3
    Script
    {
        if level < 4
         sound "VO_INT02"
        end
    }
}

CustomEvent
{
    Name "30sec"
    TriggerType LevelTime 90
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_30TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "20sec"
    TriggerType LevelTime 100
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_20TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "10sec"
    TriggerType LevelTime 110
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_10TIC"
                end
            end
        end
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9sec"
    TriggerType LevelTime 111
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_09TIC"
                end
            end
        end
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8sec"
    TriggerType LevelTime 112
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_08TIC"
                end
            end
        end
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7sec"
    TriggerType LevelTime 113
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_07TIC"
                end
            end
        end
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6sec"
    TriggerType LevelTime 114
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_06TIC"
                end
            end
        end
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5sec"
    TriggerType LevelTime 115
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_05TIC"
                end
            end
        end
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4sec"
    TriggerType LevelTime 116
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_04TIC"
                end
            end
        end
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3sec"
    TriggerType LevelTime 117
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_03TIC"
                end
            end
        end
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2sec"
    TriggerType LevelTime 118
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_02TIC"
                end
            end
        end
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1sec"
    TriggerType LevelTime 119
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_01TIC"
                end
            end
        end
        sound "FX_TIC01"
    }
}

CustomEvent
{
    Name "Time Up"
    TriggerType LevelTime 120
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_OVRTIME"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 108
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_COUNTDWN"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Go for a Rank Up"
    TriggerType LevelTime 1
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    message "GO FOR A RANK UP!!!"
                end
            end
        end
    }
}

CONNECT.TWS#

//   FILE: Fusion Tetris v7.2DP.tws
// SOURCE: Fusion Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:36:25 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Marathon
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "J"
    Tags 0,1
    MutateMino "Solo Blue"
}

Mino
{
    Name "S"
    Tags 0,2
    MutateMino "Solo Green"
}

Mino
{
    Name "O"
    Tags 0,3
    MutateMino "Solo Yellow"
}

Mino
{
    Name "L"
    Tags 0,4
    MutateMino "Solo Orange"
}

Mino
{
    Name "T"
    Tags 0,5
    MutateMino "Solo Cyan"
}

Mino
{
    Name "I"
    Tags 0,6
    MutateMino "Solo Purple"
}

Mino
{
    Name "Z"
    Tags 0,7
    MutateMino "Solo Red"
}

Mino
{
    Name "Gold"
    Tags 0,10
    MutateMino "Red"
    D0 1
    D1 1
}

Mino
{
    Name "Red"
    Tags 0,11
    D0 1
}

Mino
{
    Name "Garbage"
    Antigravity
    Tags 0,31
}

Mino
{
    Name "Solo Blue"
    Tags 0,20
}

Mino
{
    Name "Solo Green"
    Tags 0,21
}

Mino
{
    Name "Solo Yellow"
    Tags 0,22
}

Mino
{
    Name "Solo Orange"
    Tags 0,23
}

Mino
{
    Name "Solo Cyan"
    Tags 0,24
}

Mino
{
    Name "Solo Purple"
    Tags 0,25
}

Mino
{
    Name "Solo Red"
    Tags 0,26
}

Tetramino
{
    Name "T"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T" (0,1)
        "T" (-1,0)
        "T" (0,0)
        "T" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J" (-1,1)
        "J" (-1,0)
        "J" (0,0)
        "J" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L" (1,1)
        "L" (-1,0)
        "L" (0,0)
        "L" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S" (0,1)
        "S" (1,1)
        "S" (-1,0)
        "S" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z" (-1,1)
        "Z" (0,1)
        "Z" (0,0)
        "Z" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I" (-1,0)
        "I" (0,0)
        "I" (1,0)
        "I" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O" (0,1)
        "O" (1,1)
        "O" (0,0)
        "O" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

Tetramino
{
    Name "One"
    NumberInBag 3
    ID 8
    MinoList
    {
        "Gold" (0,0)
    }
    Rot0CWOffsetList (0,0)
    Rot90CWOffsetList (0,0)
    Rot180CWOffsetList (0,0)
    Rot270CWOffsetList (0,0)
}

GarbageInfo
{
    NormalMino "Garbage"
    NormalCount 6
}

Shape
{
    Name "tspin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "tspin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        if mino.d0 = 0
            kill mino
            sound "FX_CLR01"
        else
            set gravity to 1
        line color (136,147,181)
        end
    }
    PatternEndScript
    {
        sound"FX_SLVRF"
        set st1.d3 to st1.d3 + 1
        set pf.d8 to pf.d8 + 1
        set ph.d0 to 1
    }
}

Pattern
{
    Name "disease"
    Tags 11
    Method Search
    SearchType FloodFill4D
    SearchCount 1
    PatternMinoScript
    {
        pattern "infection" at mino.x, mino.y
    }
}

Pattern
{
    Name "infection"
    Triggered
    Tags 10,11
    Method Search
    SearchType FloodFill4D
    SearchCount 2
    PatternMinoScript
    {
        set st2.d8 to goal
        if mino.d1 = 1
            mutate mino
            sound "FX_FUS02"
         sound "FX_MTRS4"
            set goal to goal -1
        set st2.d9 to st2.d8 - goal
            set st2.d4 to st2.d4 + 1
            message "Fusion!"
            sound "VO_FUSION"
            if goal <= 0
                set pf.d0 to 1
            end
        end
    }
}

Trash
{
    Name "left"
    Height 1
    MinoList
    {
        "Red" (0,0)
        "Garbage" (2,0)
        "Garbage" (4,0)
        "Garbage" (6,0)
        "Garbage" (8,0)
    }
}

Trash
{
    Name "right"
    Height 1
    MinoList
    {
        "Garbage" (1,0)
        "Garbage" (3,0)
        "Garbage" (5,0)
        "Garbage" (7,0)
        "Red" (9,0)
    }
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d9 to 0
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
    PatternBeginScript
    {
        set pf.d8 to 0
        set pf.d0 to 0
        set ph.d0 to 0
    }
    PatternEndScript
    {
        if ph.d0 = 1
            set pf.d9 to pf.d9 + 1
        end
    }
}

IteratePhase
{
    IterateBeginScript
    {
        set st2.d5 to 0
    }
    PrimaryIterator
    {
        IteratorExpression pf.d0 = 1
        MinoIteratorScript
        {
            kill mino
            sound "FX_LOCK"
            sound "VO_LEVELUP"
        }
    }
    SecondaryIterator
    {
        MinoIteratorScript
        {
            if mino.d1 = 1
             set st2.d5 to st2.d5 + 1
            end
        }
    }
}

EliminatePhase
{
    FallSpeed 0.05
    EliminateBeginScript
    {
        set ph.d0 to pf.d8
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        if ph.d0 > st1.d6
            set st1.d6 to ph.d0
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
    GravityEndScript
    {
        set gravity to 0
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if pl.d8 - goal
          set pl.d7 to (((pl.d9-goal)/pl.d9)-(level time/120)) * 20
                    if pl.d7 > 4
                        set pl.d7 to 4
                    end
         mino mood pl.d7
         set pl.d8 to goal
        end
            set st1.d4 to st1.d4 + pf.d9
        if st1.d4 > 0
            if pf.d9 > st1.d5
                set st1.d5 to pf.d9
            end
        end
        if pf.d9 = 2
        message "2 Cascades"
        line color (109,0,23)
        end
        if pf.d9 = 3
        message "3 Cascades"
        line color (39,0,87)
        end
        if pf.d9 = 4
        message "4 Cascades"
        line color (39,0,87)
        end
        if pf.d9 = 5
        message "5 Cascades"
        line color (116,55,0)
        end
        if pf.d9 = 6
        message "6 Cascades"
        line color (116,55,0)
        end
        if pf.d9 = 7
        message "7 Cascades"
        line color (0,91,56)
        end
        if pf.d9 = 8
            message "8 Cascades"
        line color (0,91,56)
        end
        if pf.d9 = 9
            message "9 Cascades"
        line color (118,119,0)
        end
        if pf.d9 = 10
            message "10 Cascades"
        line color (118,119,0)
        end
        if pf.d9 >= 11
            message "Super Cascade!!!"
        line color (0,36,154)
        end
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        set st2.d7 to rank
        sound "FX_LEVEL"
        set ghost to 1
        set st2.d4 to 0
        set st2.d5 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st1.d3 to 0
        set st1.d4 to 0
        set st1.d5 to 0
        set st1.d6 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        set st2.d4 to 0
        if level < 5
         mino intensity low
         else
         if level < 10
          mino intensity medium
          else
           mino intensity high
         end
        end
        mixed garbage level
        if ((level/2) - (level\2)) = 0
            trash "left"
        else
            trash "right"
        end
        set pf.d6 to level * 2
        set goal to pf.d6
        set pf.d7 to 0
        set pl.d9 to goal
        set pl.d8 to goal
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound"FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end 
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end 
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "30sec"
    TriggerType LevelTime 90
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_30TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "20sec"
    TriggerType LevelTime 100
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_20TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "10sec"
    TriggerType LevelTime 110
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_10TIC"
                end
            end
        end
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9sec"
    TriggerType LevelTime 111
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_09TIC"
                end
            end
        end
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8sec"
    TriggerType LevelTime 112
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_08TIC"
                end
            end
        end
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7sec"
    TriggerType LevelTime 113
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_07TIC"
                end
            end
        end
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6sec"
    TriggerType LevelTime 114
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_06TIC"
                end
            end
        end
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5sec"
    TriggerType LevelTime 115
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_05TIC"
                end
            end
        end
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4sec"
    TriggerType LevelTime 116
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_04TIC"
                end
            end
        end
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3sec"
    TriggerType LevelTime 117
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_03TIC"
                end
            end
        end
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2sec"
    TriggerType LevelTime 118
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_02TIC"
                end
            end
        end
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1sec"
    TriggerType LevelTime 119
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_01TIC"
                end
            end
        end
        sound "FX_TIC01"
    }
}

CustomEvent
{
    Name "Time Up"
    TriggerType LevelTime 120
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_OVRTIME"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Intro"
    TriggerType LevelTime 3
    Script
    {
        if level < 4
            sound "VO_INT04"
        end
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 108
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_COUNTDWN"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Go for a Rank Up"
    TriggerType LevelTime 1
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    message "GO FOR A RANK UP!!!"
                end
            end
        end
    }
}

ENDURE.TWS#

//   FILE: TET2001.TWS
// SOURCE: Tetris v4.8DP
//   DATE: Thu, Aug 9, 2001  1:11:21 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 10
    MaxRotationsPerSecond 5
    GameType Marathon
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    1: 20
    2: 20
    3: 20
    4: 20
    5: 20
    6: 20
    7: 7
}

Mino
{
    Name "J color"
    Tags 0,1
}

Mino
{
    Name "L color"
    Tags 0,2
}

Mino
{
    Name "S color"
    Tags 0,3
}

Mino
{
    Name "Z color"
    Tags 0,4
}

Mino
{
    Name "O color"
    Tags 0,5
}

Mino
{
    Name "T color"
    Tags 0,6
}

Mino
{
    Name "I color"
    Tags 0,7
}

Mino
{
    Name "Garbage"
    Tags 0,31
}

Tetramino
{
    Name "T Tetrimino"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T color" (0,1)
        "T color" (-1,0)
        "T color" (0,0)
        "T color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J Tetrimino"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J color" (-1,1)
        "J color" (-1,0)
        "J color" (0,0)
        "J color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L Tetrimino"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L color" (1,1)
        "L color" (-1,0)
        "L color" (0,0)
        "L color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S Tetrimino"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S color" (0,1)
        "S color" (1,1)
        "S color" (-1,0)
        "S color" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z Tetrimino"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z color" (-1,1)
        "Z color" (0,1)
        "Z color" (0,0)
        "Z color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I Tetrimino"
    NumberInBag 6
    ID 6
    MinoList
    {
        "I color" (-1,0)
        "I color" (0,0)
        "I color" (1,0)
        "I color" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O Tetrimino"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O color" (0,1)
        "O color" (1,1)
        "O color" (0,0)
        "O color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

GarbageInfo
{
    NormalMino "Garbage"
    NormalCount 9
}

Shape
{
    Name "T-spin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "T-spin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "Line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 1
    PatternMinoScript
    {

        if (pl.d3)

            if (mino.y < 8)
                kill mino
                set ph.d0 to 2
            end

            if (mino.id = pl.d4)
                kill mino
            end

            set ph.d0 to 3

        end

    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
}

FallingPhase
{
    FallSpeed   0.05
                                // original fall speed (.8-((level-1)*.007))^(level-1)

    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

//Increase intensity as well fills up
IteratePhase
{
    IterateBeginScript      
    {
        set pl.d7 to 30
    }

    PrimaryIterator                 
    {
        MinoIteratorScript  
        {
            if (mino.y < pl.d7)
                set pl.d7 to mino.y     
            end
        }
    }

    IterateEndScript
    {
        // pl.d2 stores old height
        // pl.d7 is new height

        if (pl.d2 - pl.d7)
            if (pl.d7 < 6)
            
                //Activate endurance clear
                set pl.d3 to 1

                set ph.d0 to 1

                set goal to goal - 4

                set pl.d4 to pl.d4 + 1

                if (pl.d4 > 6)
                    set pl.d4 to 0
                end

                if (goal < 10)
                    set pl.d4 to 7
                end

                if (pl.d1 = 0)
                    mino intensity high
                    set pl.d1 to 1

                end
            else

                set pl.d3 to 0

            end
            set pl.d2 to pl.d7
        end
    }
}

EliminatePhase
{
    FallSpeed 0.05
    LineCollapsedScript
    {
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        if ph.d0 = 1
         if level < 6
          sound "VO_LINE01"
         end
         sound "FX_LNE01"
            sound "FX_MTRS1"
         set goal to goal -1
         set pf.d3 to 0
         if pf.d4
          set goal to goal -1
         end
        end
        if ph.d0 = 2
         if level < 6
          sound "VO_LINE02"
         end
            sound "FX_LNE02"
            sound "FX_MTRS2"
            set goal to goal -3 
         set pf.d3 to 0
         if pf.d4
          set goal to goal -3
         end
            send "Attack1"
        end
        if ph.d0 = 3
         if level < 6
          sound "VO_LINE03"
         end
            sound "FX_LNE03"
            sound "FX_MTRS3"
            set goal to goal -5
         set pf.d3 to 0
            send "Attack2"
        end
        if ph.d0 = 4
         if level < 11
          sound "VO_TETRS"
         end
            sound "FX_LNE04"
            sound "FX_MTRS4"
         if pf.d3
          set goal to goal -4
            sound "FX_MTRS5"
         end
         set pf.d3 to 1
         set goal to goal -8
            send "Attack3"
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    GravityEnabled              
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        //Calc Mino Mood

        //pl.d7 is only used in this phase - feel free to re-use it
        //pl.d8 is the last goal

        if pl.d8 - goal
          set pl.d7 to pl.d8 - goal
          if (pl.d7 > 5)
            set pl.d7 to 5
          end
          if (pl.d7 < -5)
            set pl.d7 to -5
          end
          mino mood pl.d7
          set pl.d8 to goal
        end

        //LEVEL UP
        if goal <= 0
            next level
            if (level < 5)
                mino mood level
            else 
                mino mood 5
            end

            message "Level up"
        end
    }
}

EventScripts
{
    GameStartScript
    {
        set ghost to 1
    }
    LevelStartScript
    {
        set pf.d3 to 0
        set pf.d1 to (5*level)
        set goal to pf.d1
        set pf.d7 to 0          // nothing - used in mood calculations and height calculations
        set pl.d8 to goal       // last goal
        set pl.d1 to 0          // Intensity based on time
        set pl.d2 to 50         // Last well height
        set pl.d3 to 0      //Endurance - will eliminate everything if true

        set pl.d4 to 0
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         mino mood 5
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
    }
    MoveFailedScript
    {
        sound "FX_LND01"
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
    }
    RotateFailedScript
    {
        sound "FX_LND01"
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end
           set goal to goal -1 
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
            set goal to goal -1 
                        set pf.d4 to 1
                    end
                end
            end
        end

    }

    GameSecondScript
    {
        if pl.d0 > 0
            mix garbage
            garbage pl.d0
            set pl.d0 to 0
        end

        message pl.d9 "Tick "
        set pl.d9 to pl.d9 + 1
    }
}

CustomEvent
{
    //10 seconds into game set intensity to low 
    // Doing it at level start will interrupt victory win
    Name "110 seconds"
    TriggerType LevelTime 10
    Script
    {
        mino intensity low
    }
}

CustomEvent
{
    Name "60 seconds"
    TriggerType LevelTime 60
    Script
    {
        mino intensity medium
    }
}

CustomEvent
{
    Name "30 seconds"
    TriggerType LevelTime 90
    Script
    {
        sound "VO_30TIC"
    }
}

CustomEvent
{
    Name "20 seconds"
    TriggerType LevelTime 100
    Script
    {
        sound "VO_20TIC"
    }
}

CustomEvent
{
    Name "10 seconds"
    TriggerType LevelTime 110
    Script
    {
        sound "VO_10TIC"
        mino mood -2
        mino intensity high
    }
}

CustomEvent
{
    Name "9 seconds"
    TriggerType LevelTime 111
    Script
    {
        sound "VO_09TIC"
    }
}

CustomEvent
{
    Name "8 seconds"
    TriggerType LevelTime 112
    Script
    {
        sound "VO_08TIC"
    }
}

CustomEvent
{
    Name "7 seconds"
    TriggerType LevelTime 113
    Script
    {
        sound "VO_07TIC"
    }
}

CustomEvent
{
    Name "6 seconds"
    TriggerType LevelTime 114
    Script
    {
        sound "VO_06TIC"
    }
}

CustomEvent
{
    Name "5 seconds"
    TriggerType LevelTime 115
    Script
    {
        sound "VO_05TIC"
    }
}

CustomEvent
{
    Name "4 seconds"
    TriggerType LevelTime 116
    Script
    {
        sound "VO_04TIC"
    }
}

CustomEvent
{
    Name "3 seconds"
    TriggerType LevelTime 117
    Script
    {
        sound "VO_03TIC"
    }
}

CustomEvent
{
    Name "2 seconds"
    TriggerType LevelTime 118
    Script
    {
        sound "VO_02TIC"
    }
}

CustomEvent
{
    Name "1 second"
    TriggerType LevelTime 119
    Script
    {
        sound "VO_01TIC"
    }
}

CustomEvent
{
    Name "Time up"
    TriggerType LevelTime 120
    Script
    {
        sound "VO_TIME"
        mino mood -5
    }
}

CustomEvent
{
    Name "Go for a Tetris"
    TriggerType GameTime 3
    Script
    {
        sound "VO_INT01"
    }
}

CustomEvent
{
    Name "Attack1"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 1
    }
}

CustomEvent
{
    Name "Attack2"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 2
    }
}

CustomEvent
{
    Name "Attack3"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 4
    }
}

HOTLINE.TWS#

//   FILE: Hot-Line Tetris v7.2DP.tws
// SOURCE: Hot-Line Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:36:35 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Marathon
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "J"
    Tags 0,1
    AltMino "T"
    AltChance 10
    MutateMino "Solo Blue"
}

Mino
{
    Name "S"
    Tags 0,2
    AltMino "J"
    AltChance 10
    MutateMino "Solo Green"
}

Mino
{
    Name "T"
    Tags 0,3
    AltMino "L"
    AltChance 10
    MutateMino "Solo Cyan"
}

Mino
{
    Name "Z"
    Tags 0,4
    AltMino "O"
    AltChance 10
    MutateMino "Solo Red"
}

Mino
{
    Name "O"
    Tags 0,5
    AltMino "I"
    AltChance 10
    MutateMino "Solo Yellow"
}

Mino
{
    Name "I"
    Tags 0,6
    AltMino "S"
    AltChance 10
    MutateMino "Solo Purple"
}

Mino
{
    Name "L"
    Tags 0,7
    AltMino "Z"
    AltChance 10
    MutateMino "Solo Orange"
}

Mino
{
    Name "Solo Blue"
    Tags 0,20
}

Mino
{
    Name "Solo Green"
    Tags 0,21
}

Mino
{
    Name "Solo Cyan"
    Tags 0,22
}

Mino
{
    Name "Solo Red"
    Tags 0,23
}

Mino
{
    Name "Solo Yellow"
    Tags 0,24
}

Mino
{
    Name "Solo Purple"
    Tags 0,25
}

Mino
{
    Name "Solo Orange"
    Tags 0,26
}

Tetramino
{
    Name "T"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T" (0,1)
        "T" (-1,0)
        "T" (0,0)
        "T" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 1
    ID 2
    MinoList
    {
        "S" (0,1)
        "S" (1,1)
        "S" (-1,0)
        "S" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 1
    ID 3
    MinoList
    {
        "Z" (-1,1)
        "Z" (0,1)
        "Z" (0,0)
        "Z" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 1
    ID 4
    MinoList
    {
        "L" (1,1)
        "L" (-1,0)
        "L" (0,0)
        "L" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 1
    ID 5
    MinoList
    {
        "J" (-1,1)
        "J" (-1,0)
        "J" (0,0)
        "J" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I" (-1,0)
        "I" (0,0)
        "I" (1,0)
        "I" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O" (0,1)
        "O" (1,1)
        "O" (0,0)
        "O" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

Shape
{
    Name "tspin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "tspin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
        sound "FX_CLR01"
        set ph.d0 to mino.y
    }
    PatternEndScript
    {
        set st2.d8 to goal
        if pf.d0 < 2
            if ph.d0 = 2
                set goal to goal - 6
        set st2.d9 to st2.d8 - goal
        set st2.d3 to st2.d3 + 1
        message "Hotline!!"
                sound "FX_HTLN6"
                sound "FX_MTRS6"
            else
                if ph.d0 = 3
                set goal to goal - 5
        set st2.d9 to st2.d8 - goal
        set st2.d2 to st2.d2 + 1
        message "Hotline!"
                sound "FX_HTLN5"
                sound "FX_MTRS5"
                else
                    if ph.d0 = 5
                    set goal to goal - 4
        set st2.d9 to st2.d8 - goal
        set st2.d1 to st2.d1 + 1
        message "Hotline"
                    sound "FX_HTLN4"
                    sound "FX_MTRS4"
                    else
                        if ph.d0 = 8
                        set goal to goal - 3
        set st2.d9 to st2.d8 - goal
        set st2.d0 to st2.d0 + 1
        message "Hotline"
                        sound "FX_HTLN3"
                        sound "FX_MTRS3"
                        else
                            if ph.d0 = 12
                            set goal to goal - 2
        set st2.d9 to st2.d8 - goal
        set st1.d9 to st1.d9 + 1
        message "Hotline"
                            sound "FX_HTLN2"
                            sound "FX_MTRS2"
                            else
                                if ph.d0 = 17
                                set goal to goal - 1
        set st2.d9 to st2.d8 - goal
        set st1.d8 to st1.d8 + 1
        message "Hotline"
                                sound "FX_HTLN1"
                                sound "FX_MTRS1"
                                end
                            end
                        end
                    end
                end
            end
            if score >= goal
                set pf.d0 to 1
            end
        end
    }
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d0 to 0
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

IteratePhase
{
    PrimaryIterator
    {
        IteratorExpression pf.d0 = 1
        IteratorTags 1,2,3,4,5,6,7
        MinoIteratorScript
        {
            mutate mino
            sound "FX_LOCK"
        }
    }
    IterateEndScript
    {
        if pf.d0 = 1
            set pf.d0 to 2
        end
    }
}

EliminatePhase
{
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    GravityEnabled
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if pl.d8 - goal
          set pl.d7 to (((pl.d9-goal)/pl.d9)-(level time/120)) * 20
                    if pl.d7 > 4
                        set pl.d7 to 4
                    end
         mino mood pl.d7
         set pl.d8 to goal
        end
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
         message "LEVEL UP!"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        set st2.d7 to rank
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st1.d8 to 0
        set st1.d9 to 0
        set st2.d0 to 0
        set st2.d1 to 0
        set st2.d2 to 0
        set st2.d3 to 0
        line color (30,30,30)
        line color 2 (0,36,154)
        line color 3 (39,0,87)
        line color 5 (109,0,23)
        line color 8 (116,55,0)
        line color 12 (118,119,0)
        line color 17 (0,91,56)
    }
    LevelStartScript
    {
        set pf.d1 to (5*level)
        set goal to pf.d1
        if level < 5
         mino intensity low
         else
         if level < 10
          mino intensity medium
          else
           mino intensity high
         end
        end
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end 
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Hot Line Intro"
    TriggerType LevelTime 3
    Script
    {
        if level < 4
            sound "VO_INT03"
        end
    }
}

CustomEvent
{
    Name "30sec"
    TriggerType LevelTime 90
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_30TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "20sec"
    TriggerType LevelTime 100
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_20TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "10sec"
    TriggerType LevelTime 110
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_10TIC"
                end
            end
        end
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9sec"
    TriggerType LevelTime 111
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_09TIC"
                end
            end
        end
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8sec"
    TriggerType LevelTime 112
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_08TIC"
                end
            end
        end
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7sec"
    TriggerType LevelTime 113
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_07TIC"
                end
            end
        end
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6sec"
    TriggerType LevelTime 114
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_06TIC"
                end
            end
        end
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5sec"
    TriggerType LevelTime 115
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_05TIC"
                end
            end
        end
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4sec"
    TriggerType LevelTime 116
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_04TIC"
                end
            end
        end
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3sec"
    TriggerType LevelTime 117
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_03TIC"
                end
            end
        end
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2sec"
    TriggerType LevelTime 118
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_02TIC"
                end
            end
        end
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1sec"
    TriggerType LevelTime 119
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_01TIC"
                end
            end
        end
        sound "FX_TIC01"
    }
}

CustomEvent
{
    Name "Time Up"
    TriggerType LevelTime 120
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                sound "VO_OVRTIME"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 108
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                 sound "VO_COUNTDWN"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Go for a Rank Up"
    TriggerType LevelTime 1
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                 message "GO FOR A RANK UP!!!"
                end
            end
        end
    }
}

LEARNING.TWS#

//   FILE: Learning Tetris v7.2DP.tws
// SOURCE: Learning Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:36:46 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Levels
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "J color"
    Tags 0,1
}

Mino
{
    Name "L color"
    Tags 0,2
}

Mino
{
    Name "S color"
    Tags 0,3
}

Mino
{
    Name "Z color"
    Tags 0,4
}

Mino
{
    Name "O color"
    Tags 0,5
}

Mino
{
    Name "T color"
    Tags 0,6
}

Mino
{
    Name "I color"
    Tags 0,7
}

Mino
{
    Name "Garbage"
    Tags 0,31
}

Tetramino
{
    Name "T"
    NumberInBag 0
    ID 1
    MinoList
    {
        "T color" (0,1)
        "T color" (-1,0)
        "T color" (0,0)
        "T color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 0
    ID 2
    MinoList
    {
        "J color" (-1,1)
        "J color" (-1,0)
        "J color" (0,0)
        "J color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 0
    ID 3
    MinoList
    {
        "L color" (1,1)
        "L color" (-1,0)
        "L color" (0,0)
        "L color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 0
    ID 4
    MinoList
    {
        "S color" (0,1)
        "S color" (1,1)
        "S color" (-1,0)
        "S color" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 0
    ID 5
    MinoList
    {
        "Z color" (-1,1)
        "Z color" (0,1)
        "Z color" (0,0)
        "Z color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I color" (-1,0)
        "I color" (0,0)
        "I color" (1,0)
        "I color" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 0
    ID 7
    MinoList
    {
        "O color" (0,1)
        "O color" (1,1)
        "O color" (0,0)
        "O color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

GarbageInfo
{
    NormalMino "Garbage"
    NormalCount 9
}

Shape
{
    Name "T-spin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "T-spin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "Line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
    }
    PatternEndScript
    {
        sound "FX_CLR01"
    }
}

Level
{
    Name "Level #1"
    LevelStartScript
    {
        set bag "I" to 4
        shuffle 0
        set pf.d9 to 2
    }
}

Level
{
    Name "Level #2"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 1
        shuffle 0
        set pf.d9 to 2
    }
}

Level
{
    Name "Level #3"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 2
        set bag "L" to 1
        shuffle 0
        set pf.d9 to 2
    }
}

Level
{
    Name "Level #4"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 4
        set bag "L" to 2
        set bag "J" to 1
        shuffle 0
        set pf.d9 to 1.8
    }
}

Level
{
    Name "Level #5"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 4
        set bag "L" to 4
        set bag "J" to 2
        set bag "S" to 1
        shuffle 0
        set pf.d9 to 1.6
    }
}

Level
{
    Name "Level #6"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 4
        set bag "L" to 4
        set bag "J" to 4
        set bag "S" to 2
        set bag "Z" to 1
        shuffle 0
        set pf.d9 to 1.4
    }
}

Level
{
    Name "Level #7"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 4
        set bag "L" to 4
        set bag "J" to 4
        set bag "S" to 4
        set bag "Z" to 2
        set bag "T" to 1
        shuffle 0
        set pf.d9 to 1.2
    }
}

Level
{
    Name "Level #8"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 4
        set bag "L" to 4
        set bag "J" to 4
        set bag "S" to 4
        set bag "Z" to 4
        set bag "T" to 2
        shuffle 0
        set pf.d9 to 1
    }
}

Level
{
    Name "Level #9"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 4
        set bag "L" to 4
        set bag "J" to 4
        set bag "S" to 4
        set bag "Z" to 4
        set bag "T" to 4
        shuffle 0
        set pf.d9 to 0.8
    }
}

Level
{
    Name "Level #10"
    LevelStartScript
    {
        set bag "I" to 4
        set bag "O" to 4
        set bag "L" to 4
        set bag "J" to 4
        set bag "S" to 4
        set bag "Z" to 4
        set bag "T" to 4
        shuffle 0
        set pf.d9 to 0.6
    }
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed pf.d9
    SoftDropSpeed pf.d9/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed 0.1
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
    }
    StartFallingScript
    {
        if ph.d0 = 1
        line color (109,0,23)
        end
        if ph.d0 = 2
        line color (39,0,87)
        end
        if ph.d0 = 3
        line color (116,55,0)
        end
        if ph.d0 = 4
            line color (0,91,56)
         if pf.d3
                line color (118,119,0)
         else
            set pf.d3 to 1
            end
        end
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        set st2.d8 to goal
        if ph.d0 = 1
         sound "VO_LINE01"
            sound "FX_MTRS1"
         set goal to goal -1
        set st2.d9  to st2.d8  - goal
            set st0.d0 to st0.d0 + 1
            message st2.d9 "Single +"
         set pf.d3 to 0
         if pf.d4
          set goal to goal -1
        set st2.d9  to st2.d8  - goal
                message st2.d9 "T-spin +"
         end
        end
        if ph.d0 = 2
         sound "VO_LINE02"
            sound "FX_MTRS2"
            set goal to goal -3
        set st2.d9  to st2.d8  - goal
            set st0.d1 to st0.d1 + 1
            message st2.d9 "Double +" 
         set pf.d3 to 0
         if pf.d4
          set goal to goal -3
        set st2.d9  to st2.d8  - goal
                message st2.d9 "T-spin +"
         end
        end
        if ph.d0 = 3
         sound "VO_LINE03"
            sound "FX_MTRS3"
            set goal to goal -5
        set st2.d9  to st2.d8  - goal
            set st0.d2 to st0.d2 + 1
            message st2.d9 "Triple +"
         set pf.d3 to 0
        end
        if ph.d0 = 4
         sound "VO_TETRS"
            sound "FX_MTRS4"
         if pf.d3
          set goal to goal -4
        set st2.d9  to st2.d8  - goal
                set st0.d9 to st0.d9 + 1
                message st2.d9 "B2B Tetris!!! +"
          sound "FX_MTRS5"
         else
            set pf.d3 to 1
                message st2.d9 "Tetris! +"
                end
         set goal to goal -8
        set st2.d9  to st2.d8  - goal
            set st0.d3 to st0.d3 + 1
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    FallSpeed 0.1
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if pl.d8 - goal
          set pl.d7 to (((pl.d9-goal)/pl.d9)-(level time/120)) * 20
                    if pl.d7 > 4
                        set pl.d7 to 4
                    end
         mino mood pl.d7
         set pl.d8 to goal
        end
        if goal <= 0
            next level
            sound "FX_LEVEL"
         message "LEVEL UP!"
        end
    }
}

EventScripts
{
    GameStartScript
    {
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d0 to 0
        set st0.d1 to 0
        set st0.d2 to 0
        set st0.d3 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st0.d9 to 0
        set st1.d0 to 0
    }
    LevelStartScript
    {
        if level < 5
         mino intensity low
         else
         if level < 10
          mino intensity medium
          else
           mino intensity high
         end
        end
        set goal to 10
        set pl.d9 to goal
        set pl.d8 to goal
    }
    LevelEndScript
    {
        if level > 10
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d7 to st0.d7 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d7 to st0.d7 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
            sound "FX_LCK01"
        end
        if piece.id = 1
         if spin
          shape "T-spin1" at piece.x, piece.y
           if result = 1
            if level < 10
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
           set goal to goal -1 
           set pf.d4 to 1
                set st1.d0 to st1.d0 + 1
                    else
            shape "T-spin2" at piece.x, piece.y
                                if result = 1
                        if level < 10
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
                        set goal to goal -1 
                        set pf.d4 to 1
                    set st1.d0 to st1.d0 + 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Goal of game"
    TriggerType LevelTime 3
    Script
    {
        if level < 6 
         sound "VO_INT01"
        end
    }
}

MCASCADE.TWS#

//   FILE: Ultra Cascade Tetris v7.2DP.tws
// SOURCE: Ultra Cascade Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:37:51 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Levels
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "J"
    Tags 0,1
}

Mino
{
    Name "T"
    Tags 0,2
}

Mino
{
    Name "S"
    Tags 0,3
}

Mino
{
    Name "Z"
    Tags 0,4
}

Mino
{
    Name "L"
    Tags 0,5
}

Mino
{
    Name "O"
    Tags 0,6
}

Mino
{
    Name "I"
    Tags 0,7
}

Tetramino
{
    Name "T"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T" (0,1)
        "T" (-1,0)
        "T" (0,0)
        "T" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J" (-1,1)
        "J" (-1,0)
        "J" (0,0)
        "J" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L" (1,1)
        "L" (-1,0)
        "L" (0,0)
        "L" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S" (0,1)
        "S" (1,1)
        "S" (-1,0)
        "S" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z" (-1,1)
        "Z" (0,1)
        "Z" (0,0)
        "Z" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I" (-1,0)
        "I" (0,0)
        "I" (1,0)
        "I" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O" (0,1)
        "O" (1,1)
        "O" (0,0)
        "O" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

Shape
{
    Name "tspin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "tspin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
        sound "FX_CLR01"
    }
    PatternEndScript
    {
        set st1.d3 to st1.d3 + 1
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed 0.05
    EliminateBeginScript
    {
        set ph.d0 to 0
        set ph.d1 to 0
    }
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
        set ph.d1 to ph.d1 + 1
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        set st2.d8 to goal
        if ph.d0 >= 1
            set goal to goal - (ph.d0 + (ph.d0 - 1))
        end
        if ph.d0>0
            if cascades>1
                set goal to goal - ((cascades-1)*2)
            end
        end
        set st2.d9 to st2.d8 - goal
        if ph.d0 > st1.d6
            set st1.d6 to ph.d0
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    GravityEnabled
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if cascades > 0
            set st1.d4 to st1.d4 + (cascades - 1)
        end
        if st1.d4 > 0
            if (cascades - 1) > st1.d5
                set st1.d5 to (cascades - 1)
            end
        end
        if cascades = 2
        message "2 Cascades"
        line color (109,0,23)
         sound "FX_MTRS1"
        end
        if cascades = 3
        message "3 Cascades"
        line color (39,0,87)
         sound "FX_MTRS2"
        end
        if cascades = 4
        message "4 Cascades"
        line color (39,0,87)
         sound "FX_MTRS3"
        end
        if cascades = 5
        message "5 Cascades"
        line color (116,55,0)
         sound "FX_MTRS4"
        end
        if cascades = 6
        message "6 Cascades"
        line color (116,55,0)
         sound "FX_MTRS5"
        end
        if cascades = 7
        message "7 Cascades"
        line color (0,91,56)
         sound "FX_MTRS6"
        end
        if cascades = 8
            message "8 Cascades"
        line color (0,91,56)
         sound "FX_MTRS6"
        end
        if cascades = 9
            message "9 Cascades"
        line color (118,119,0)
         sound "FX_MTRS6"
        end
        if cascades = 10
            message "10 Cascades"
        line color (118,119,0)
         sound "FX_MTRS6"
        end
        if cascades >= 11
            message "Super Cascade!!!"
        line color (0,36,154)
         sound "FX_MTRS6"
        end
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        set st2.d7 to rank
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st1.d3 to 0
        set st1.d4 to 0
        set st1.d5 to 0
        set st1.d6 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        mino intensity high
        set pf.d1 to (5*level)
        set goal to pf.d1
        set st2.d8 to goal
        set pf.d7 to 0
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end
           set goal to goal -1 
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
            set goal to goal -1 
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 109
    Script
    {
        message "COUNTDOWN!"
    }
}

CustomEvent
{
    Name "10"
    TriggerType LevelTime 110
    Script
    {
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9"
    TriggerType LevelTime 111
    Script
    {
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8"
    TriggerType LevelTime 112
    Script
    {
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7"
    TriggerType LevelTime 113
    Script
    {
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6"
    TriggerType LevelTime 114
    Script
    {
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5"
    TriggerType LevelTime 115
    Script
    {
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4"
    TriggerType LevelTime 116
    Script
    {
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3"
    TriggerType LevelTime 117
    Script
    {
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2"
    TriggerType LevelTime 118
    Script
    {
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1"
    TriggerType LevelTime 119
    Script
    {
        sound "FX_TIC01"
    }
}

MCONNECT.TWS#

//   FILE: Ultra Fusion Tetris v7.2DP.tws
// SOURCE: Ultra Fusion Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:38:02 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Levels
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "J"
    Tags 0,1
    MutateMino "Solo Blue"
}

Mino
{
    Name "S"
    Tags 0,2
    MutateMino "Solo Green"
}

Mino
{
    Name "O"
    Tags 0,3
    MutateMino "Solo Yellow"
}

Mino
{
    Name "L"
    Tags 0,4
    MutateMino "Solo Orange"
}

Mino
{
    Name "T"
    Tags 0,5
    MutateMino "Solo Cyan"
}

Mino
{
    Name "I"
    Tags 0,6
    MutateMino "Solo Purple"
}

Mino
{
    Name "Z"
    Tags 0,7
    MutateMino "Solo Red"
}

Mino
{
    Name "Gold"
    Tags 0,10
    MutateMino "Red"
    D0 1
    D1 1
}

Mino
{
    Name "Red"
    Tags 0,11
    D0 1
}

Mino
{
    Name "Garbage"
    Antigravity
    Tags 0,31
}

Mino
{
    Name "Solo Blue"
    Tags 0,20
}

Mino
{
    Name "Solo Green"
    Tags 0,21
}

Mino
{
    Name "Solo Yellow"
    Tags 0,22
}

Mino
{
    Name "Solo Orange"
    Tags 0,23
}

Mino
{
    Name "Solo Cyan"
    Tags 0,24
}

Mino
{
    Name "Solo Purple"
    Tags 0,25
}

Mino
{
    Name "Solo Red"
    Tags 0,26
}

Tetramino
{
    Name "T"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T" (0,1)
        "T" (-1,0)
        "T" (0,0)
        "T" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J" (-1,1)
        "J" (-1,0)
        "J" (0,0)
        "J" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L" (1,1)
        "L" (-1,0)
        "L" (0,0)
        "L" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S" (0,1)
        "S" (1,1)
        "S" (-1,0)
        "S" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z" (-1,1)
        "Z" (0,1)
        "Z" (0,0)
        "Z" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I" (-1,0)
        "I" (0,0)
        "I" (1,0)
        "I" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O" (0,1)
        "O" (1,1)
        "O" (0,0)
        "O" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

Tetramino
{
    Name "One"
    NumberInBag 3
    ID 8
    MinoList
    {
        "Gold" (0,0)
    }
    Rot0CWOffsetList (0,0)
    Rot90CWOffsetList (0,0)
    Rot180CWOffsetList (0,0)
    Rot270CWOffsetList (0,0)
}

GarbageInfo
{
    NormalMino "Garbage"
    NormalCount 6
}

Shape
{
    Name "tspin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "tspin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        if mino.d0 = 0
            kill mino
            sound "FX_CLR01"
        else
            set gravity to 1
        line color (136,147,181)
        end
    }
    PatternEndScript
    {
        set st1.d3 to st1.d3 + 1
        set pf.d8 to pf.d8 + 1
        set ph.d0 to 1
    }
}

Pattern
{
    Name "disease"
    Tags 11
    Method Search
    SearchType FloodFill4D
    SearchCount 1
    PatternMinoScript
    {
        pattern "infection" at mino.x, mino.y
    }
}

Pattern
{
    Name "infection"
    Triggered
    Tags 10,11
    Method Search
    SearchType FloodFill4D
    SearchCount 2
    PatternMinoScript
    {
        set st2.d8 to goal
        if mino.d1 = 1
            mutate mino
            sound "FX_FUS02"
         sound "FX_MTRS4"
            set goal to goal -1
        set st2.d9 to st2.d8 - goal
            set st2.d4 to st2.d4 + 1
            message "Fusion!"
            if level < 6
                sound "VO_FUSION"
            end
            if goal <= 0
                set pf.d0 to 1
            end
        end
    }
}

Pattern
{
    Name "level end"
    Tags 11
    Method Search
    SearchType FloodFill4D
    SearchCount pf.d6 + 1
    PatternMinoScript
    {
    }
    PatternEndScript
    {
        next level
    }
}

Trash
{
    Name "left"
    Height 1
    MinoList
    {
        "Red" (0,0)
        "Garbage" (2,0)
        "Garbage" (4,0)
        "Garbage" (6,0)
        "Garbage" (8,0)
    }
}

Trash
{
    Name "right"
    Height 1
    MinoList
    {
        "Garbage" (1,0)
        "Garbage" (3,0)
        "Garbage" (5,0)
        "Garbage" (7,0)
        "Red" (9,0)
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
        set pf.d9 to 0
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
    PatternBeginScript
    {
        set pf.d8 to 0
        set pf.d0 to 0
        set ph.d0 to 0
    }
    PatternEndScript
    {
        if ph.d0 = 1
            set pf.d9 to pf.d9 + 1
        end
    }
}

IteratePhase
{
    IterateBeginScript
    {
        set st2.d5 to 0
    }
    SecondaryIterator
    {
        MinoIteratorScript
        {
            if mino.d1 = 1
             set st2.d5 to st2.d5 + 1
            end
        }
    }
}

EliminatePhase
{
    FallSpeed 0.05
    EliminateBeginScript
    {
        set ph.d0 to pf.d8
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        if ph.d0 > st1.d6
            set st1.d6 to ph.d0
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
    GravityEndScript
    {
        set gravity to 0
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
            set st1.d4 to st1.d4 + pf.d9
        if st1.d4 > 0
            if pf.d9 > st1.d5
                set st1.d5 to pf.d9
            end
        end
        if pf.d9 > st1.d5
            set st1.d5 to pf.d9
        end
        if pf.d9 = 2
        message "2 Cascades"
        line color (109,0,23)
        end
        if pf.d9 = 3
        message "3 Cascades"
        line color (39,0,87)
        end
        if pf.d9 = 4
        message "4 Cascades"
        line color (39,0,87)
        end
        if pf.d9 = 5
        message "5 Cascades"
        line color (116,55,0)
        end
        if pf.d9 = 6
        message "6 Cascades"
        line color (116,55,0)
        end
        if pf.d9 = 7
        message "7 Cascades"
        line color (0,91,56)
        end
        if pf.d9 = 8
            message "8 Cascades"
        line color (0,91,56)
        end
        if pf.d9 = 9
            message "9 Cascades"
        line color (118,119,0)
        end
        if pf.d9 = 10
            message "10 Cascades"
        line color (118,119,0)
        end
        if pf.d9 >= 11
            message "Super Cascade!!!"
        line color (0,36,154)
        end
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        sound "FX_LEVEL"
        set ghost to 1
        set st2.d4 to 0
        set st2.d5 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st1.d3 to 0
        set st1.d4 to 0
        set st1.d5 to 0
        set st1.d6 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        mino intensity high
        mixed garbage level
        if ((level/2) - (level\2)) = 0
            trash "left"
        else
            trash "right"
        end
        set pf.d6 to level * 2
        set goal to pf.d6
        set pf.d7 to 0
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end 
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end 
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 109
    Script
    {
        message "COUNTDOWN!"
    }
}

CustomEvent
{
    Name "10"
    TriggerType LevelTime 110
    Script
    {
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9"
    TriggerType LevelTime 111
    Script
    {
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8"
    TriggerType LevelTime 112
    Script
    {
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7"
    TriggerType LevelTime 113
    Script
    {
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6"
    TriggerType LevelTime 114
    Script
    {
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5"
    TriggerType LevelTime 115
    Script
    {
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4"
    TriggerType LevelTime 116
    Script
    {
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3"
    TriggerType LevelTime 117
    Script
    {
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2"
    TriggerType LevelTime 118
    Script
    {
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1"
    TriggerType LevelTime 119
    Script
    {
        sound "FX_TIC01"
    }
}

MHOTLINE.TWS#

//   FILE: Ultra Hot-Line Tetris v7.2DP.tw
// SOURCE: Ultra Hot-Line Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:38:13 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Levels
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "J"
    Tags 0,1
    AltMino "T"
    AltChance 10
}

Mino
{
    Name "S"
    Tags 0,2
    AltMino "J"
    AltChance 10
}

Mino
{
    Name "T"
    Tags 0,3
    AltMino "L"
    AltChance 10
}

Mino
{
    Name "Z"
    Tags 0,4
    AltMino "O"
    AltChance 10
}

Mino
{
    Name "O"
    Tags 0,5
    AltMino "I"
    AltChance 10
}

Mino
{
    Name "I"
    Tags 0,6
    AltMino "S"
    AltChance 10
}

Mino
{
    Name "L"
    Tags 0,7
    AltMino "Z"
    AltChance 10
}

Tetramino
{
    Name "T"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T" (0,1)
        "T" (-1,0)
        "T" (0,0)
        "T" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 1
    ID 2
    MinoList
    {
        "S" (0,1)
        "S" (1,1)
        "S" (-1,0)
        "S" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 1
    ID 3
    MinoList
    {
        "Z" (-1,1)
        "Z" (0,1)
        "Z" (0,0)
        "Z" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 1
    ID 4
    MinoList
    {
        "L" (1,1)
        "L" (-1,0)
        "L" (0,0)
        "L" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 1
    ID 5
    MinoList
    {
        "J" (-1,1)
        "J" (-1,0)
        "J" (0,0)
        "J" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I" (-1,0)
        "I" (0,0)
        "I" (1,0)
        "I" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O" (0,1)
        "O" (1,1)
        "O" (0,0)
        "O" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

Shape
{
    Name "tspin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "tspin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
        sound "FX_CLR01"
        set ph.d0 to mino.y
    }
    PatternEndScript
    {
        set st2.d8 to goal
        if pf.d0 < 2
            if ph.d0 = 2
                set goal to goal - 6
        set st2.d9 to st2.d8 - goal
        set st2.d3 to st2.d3 + 1
        message "Hotline!!"
                sound "FX_HTLN6"
                sound "FX_MTRS6"
            else
                if ph.d0 = 3
                set goal to goal - 5
        set st2.d9 to st2.d8 - goal
        set st2.d2 to st2.d2 + 1
        message "Hotline!"
                sound "FX_HTLN5"
                sound "FX_MTRS5"
                else
                    if ph.d0 = 5
                    set goal to goal - 4
        set st2.d9 to st2.d8 - goal
        set st2.d1 to st2.d1 + 1
        message "Hotline"
                    sound "FX_HTLN4"
                    sound "FX_MTRS4"
                    else
                        if ph.d0 = 8
                        set goal to goal - 3
        set st2.d9 to st2.d8 - goal
        set st2.d0 to st2.d0 + 1
        message "Hotline"
                        sound "FX_HTLN3"
                        sound "FX_MTRS3"
                        else
                            if ph.d0 = 12
                            set goal to goal - 2
        set st2.d9 to st2.d8 - goal
        set st1.d9 to st1.d9 + 1
        message "Hotline"
                            sound "FX_HTLN2"
                            sound "FX_MTRS2"
                            else
                                if ph.d0 = 17
                                set goal to goal - 1
        set st2.d9 to st2.d8 - goal
        set st1.d8 to st1.d8 + 1
        message "Hotline"
                                sound "FX_HTLN1"
                                sound "FX_MTRS1"
                                end
                            end
                        end
                    end
                end
            end
            if score >= goal
                set pf.d0 to 1
            end
        end
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d0 to 0
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

IteratePhase
{
    PrimaryIterator
    {
        IteratorExpression pf.d0 = 1
        IteratorTags 1,2,3,4,5,6,7
        MinoIteratorScript
        {
        }
    }
    IterateEndScript
    {
        if pf.d0 = 1
            set pf.d0 to 2
        end
    }
}

EliminatePhase
{
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    GravityEnabled
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
         message "LEVEL UP!"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st1.d8 to 0
        set st1.d9 to 0
        set st2.d0 to 0
        set st2.d1 to 0
        set st2.d2 to 0
        set st2.d3 to 0
        line color (30,30,30)
        line color 2 (0,36,154)
        line color 3 (39,0,87)
        line color 5 (109,0,23)
        line color 8 (116,55,0)
        line color 12 (118,119,0)
        line color 17 (0,91,56)
    }
    LevelStartScript
    {
        mino intensity high
        set pf.d1 to (5*level)
        set goal to pf.d1
        set pf.d7 to 0
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end 
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 109
    Script
    {
        message "COUNTDOWN!"
    }
}

CustomEvent
{
    Name "10"
    TriggerType LevelTime 110
    Script
    {
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9"
    TriggerType LevelTime 111
    Script
    {
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8"
    TriggerType LevelTime 112
    Script
    {
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7"
    TriggerType LevelTime 113
    Script
    {
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6"
    TriggerType LevelTime 114
    Script
    {
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5"
    TriggerType LevelTime 115
    Script
    {
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4"
    TriggerType LevelTime 116
    Script
    {
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3"
    TriggerType LevelTime 117
    Script
    {
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2"
    TriggerType LevelTime 118
    Script
    {
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1"
    TriggerType LevelTime 119
    Script
    {
        sound "FX_TIC01"
    }
}

MSQUARE.TWS#

//   FILE: Ultra Square Tetris v7.2DP.tws
// SOURCE: Ultra Square Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:38:22 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Levels
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    0: 0
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
    20: 20
    31: 31
}

Mino
{
    Name "J color"
    Tags 0
    MutateMino "Result J color"
}

Mino
{
    Name "L color"
    Tags 1
    MutateMino "Result L color"
}

Mino
{
    Name "S color"
    Tags 2
    MutateMino "Result S color"
}

Mino
{
    Name "Z color"
    Tags 3
    MutateMino "Result Z color"
}

Mino
{
    Name "O color"
    Tags 4
    MutateMino "Result O color"
}

Mino
{
    Name "T color"
    Tags 5
    MutateMino "Result T color"
}

Mino
{
    Name "I color"
    Tags 6
    MutateMino "Result I color"
}

Mino
{
    Name "Pure Square"
    Tags 31
    MutateMino "Result Pure Square"
    D9 2.5
}

Mino
{
    Name "Combo Square"
    Tags 31
    MutateMino "Result Combo Square"
    D9 1.25
}

Mino
{
    Name "Result J color"
    Tags 24
}

Mino
{
    Name "Result L color"
    Tags 25
}

Mino
{
    Name "Result S color"
    Tags 26
}

Mino
{
    Name "Result Z color"
    Tags 27
}

Mino
{
    Name "Result O color"
    Tags 28
}

Mino
{
    Name "Result T color"
    Tags 29
}

Mino
{
    Name "Result I color"
    Tags 30
}

Mino
{
    Name "Result Pure Square"
    Tags 23
}

Mino
{
    Name "Result Combo Square"
    Tags 22
}

Mino
{
    Name "Garbage"
    Tags 20
}

Tetramino
{
    Name "J Tetrimino"
    NumberInBag 1
    ID 1
    MinoList
    {
        "J color" (-1,1)
        "J color" (-1,0)
        "J color" (0,0)
        "J color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I Tetrimino"
    NumberInBag 1
    ID 2
    MinoList
    {
        "I color" (-1,0)
        "I color" (0,0)
        "I color" (1,0)
        "I color" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O Tetrimino"
    NumberInBag 1
    ID 3
    MinoList
    {
        "O color" (-1,1)
        "O color" (0,1)
        "O color" (-1,0)
        "O color" (0,0)
    }
    Rot0CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
    Rot90CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot180CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot270CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
}

Tetramino
{
    Name "S Tetrimino"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S color" (0,1)
        "S color" (1,1)
        "S color" (-1,0)
        "S color" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L Tetrimino"
    NumberInBag 1
    ID 5
    MinoList
    {
        "L color" (1,1)
        "L color" (-1,0)
        "L color" (0,0)
        "L color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z Tetrimino"
    NumberInBag 1
    ID 6
    MinoList
    {
        "Z color" (-1,1)
        "Z color" (0,1)
        "Z color" (0,0)
        "Z color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "T Tetrimino"
    NumberInBag 1
    ID 7
    MinoList
    {
        "T color" (0,1)
        "T color" (-1,0)
        "T color" (0,0)
        "T color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

GarbageInfo
{
    NormalMino "Garbage"
    NormalCount 9
}

Shape
{
    Name "Perfect Square"
    Hotspot (7,8)
    ShapeCoords (4,11),(4,10),(4,9),(4,8),(5,11),(5,10),(5,9),(5,8),(6,11),(6,10),(6,9),(6,8),(7,11),(7,10),(7,9),(7,8)
}

Shape
{
    Name "T-spin 1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "T-spin 2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Shape
{
    Name "Spin S 1"
    Hotspot (7,8)
    ShapeCoords (5,6),(6,8),(6,7),(8,6),(9,8),(9,7)
}

Shape
{
    Name "Spin S 2"
    Hotspot (7,8)
    ShapeCoords (4,6),(5,8),(5,7),(7,6),(8,8),(8,7)
}

Shape
{
    Name "Spin Z 1"
    Hotspot (7,8)
    ShapeCoords (5,8),(5,7),(6,6),(8,8),(8,7),(9,6)
}

Shape
{
    Name "Spin Z 2"
    Hotspot (7,8)
    ShapeCoords (6,8),(6,7),(7,6),(9,8),(9,7),(10,6)
}

Pattern
{
    Name "t-spin top"
    Triggered
    Tags 0,1,2,3,4,5,6,24,25,26,27,28,29,30,31
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternBeginScript
    {
        sound "FX_RWD02"
        set pl.d4 to 0
    }
    PatternMinoScript
    {
        set pl.d5 to mino.y
    }
}

Pattern
{
    Name "t-spin bottom"
    Triggered
    Tags 0,1,2,3,4,5,6,24,25,26,27,28,29,30,31
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternBeginScript
    {
        sound "FX_RWD01"
        set pl.d5 to 21
    }
    PatternMinoScript
    {
        if pl.d4 = -1
            set pl.d4 to mino.y
        end
    }
}

Pattern
{
    Name "J Square"
    Tags 0
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "FX_GOLDF"
    }
}

Pattern
{
    Name "I Square"
    Tags 6
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "FX_GOLDF"
    }
}

Pattern
{
    Name "O Square"
    Tags 4
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "FX_GOLDF"
    }
}

Pattern
{
    Name "T Square"
    Tags 5
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "FX_GOLDF"
    }
}

Pattern
{
    Name "L Square"
    Tags 1
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "FX_GOLDF"
    }
}

Pattern
{
    Name "Combo Square"
    Tags 0,1,2,3,4,5,6
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternMinoScript
    {
        set mino to "Combo Square"
        message "Combo Square!"
    }
    PatternEndScript
    {
        solidify
        set st1.d1 to st1.d1 + 1
        sound "FX_SLVRF"
    }
}

Pattern
{
    Name "Line clear"
    Tags 0,1,2,3,4,5,6,20,22,23,24,25,26,27,28,29,30,31
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternBeginScript
    {
        if mino.d9 = 2.5
            line color (0,36,154)
        end
        if mino.d9 = 1.25
            line color (118,119,0)
        end
    }
    PatternMinoScript
    {
        set pf.d0 to pf.d0 + mino.d9
        kill mino
        sound "FX_CLR01"
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
    PatternBeginScript
    {
        set pl.d4 to -1
        set pl.d5 to -1
    }
}

IteratePhase
{
    PrimaryIterator
    {
        IteratorExpression pl.d4 != -1
        MinoIteratorScript
        {
            if mino.y > pl.d5
                exit
            end
            if mino.y < pl.d4
                exit
            end
            mutate mino
            sound "FX_LOCK"
        }
    }
    IterateEndScript
    {
        if pl.d4 != -1
            set gravity to 1
        end
        set pl.d6 to 0
    }
}

EliminatePhase
{
    FallSpeed 0.05
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
    }
    StartFallingScript
    {
        set goal to goal - pf.d0
        set pf.d0 to 0
        if ph.d0 = 1
        line color (109,0,23)
        end
        if ph.d0 = 2
        line color (39,0,87)
        end
        if ph.d0 = 3
        line color (116,55,0)
        end
        if ph.d0 >= 4
        line color (0,91,56)
        end
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        set st2.d8 to goal
        if ph.d0 = 1
         if pf.d4
          set goal to goal - 1
        set st2.d9 to st2.d8 - goal
                message "T-spin"
         end
            sound "FX_MTRS1"
         set goal to goal -1
        set st2.d9 to st2.d8 - goal
        set st0.d0 to st0.d0 + 1
        message "Single"
        end
        if ph.d0 = 2
         if pf.d4
          set goal to goal - 3
        set st2.d9 to st2.d8 - goal
                message "T-spin"
         end
            sound "FX_MTRS2"
            set goal to goal -3
        set st2.d9 to st2.d8 - goal
        set st0.d1 to st0.d1 + 1
        message "Double"
            send "Attack1"
        end
        if ph.d0 = 3
            sound "FX_MTRS3"
            set goal to goal -5
        set st2.d9 to st2.d8 - goal
        set st0.d2 to st0.d2 + 1
        message "Triple"
            send "Attack2"
        end
        if ph.d0 >= 4
            sound "FX_MTRS4"
         set goal to goal -8
        set st2.d9 to st2.d8 - goal
        set st0.d3 to st0.d3 + 1
        message "Tetris!"
            send "Attack3"
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
    GravityEndScript
    {
        set gravity to 0
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
         message "LEVEL UP!"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d0 to 0
        set st0.d1 to 0
        set st0.d2 to 0
        set st0.d3 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st1.d1 to 0
        set st1.d2 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        mino intensity high
        set pf.d3 to 0
        set goal to (10*level)
        set pf.d7 to 0
    }
    LevelEndScript
    {
        if level >= 15
            win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 7
            if spin
                shape "T-spin 1" at piece.x, piece.y
                if result = 1
            if piece.dir = 3
                pattern "t-spin top" at piece.x,piece.y-1
                  pattern "t-spin bottom" at piece.x,piece.y
              else
                  pattern "t-spin top" at piece.x,piece.y
                  pattern "t-spin bottom" at piece.x,piece.y+1
              end
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end
           set goal to goal -1 
                    set pf.d4 to 1
                else
                    shape "T-spin 2" at piece.x, piece.y
                    if result = 1
            if piece.dir = 3
                pattern "t-spin top" at piece.x,piece.y-1
                  pattern "t-spin bottom" at piece.x,piece.y
              else
                  pattern "t-spin top" at piece.x,piece.y
                  pattern "t-spin bottom" at piece.x,piece.y+1
              end
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
            set goal to goal -1 
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Attack1"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 4
        mix garbage
        garbage 1
        sound "FX_GAR01"
    }
}

CustomEvent
{
    Name "Attack2"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 4
        mix garbage
        garbage 2
        sound "FX_GAR02"
    }
}

CustomEvent
{
    Name "Attack3"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 4
        mix garbage
        garbage 4
        sound "FX_GAR03"
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 109
    Script
    {
        message "COUNTDOWN!"
    }
}

CustomEvent
{
    Name "10"
    TriggerType LevelTime 110
    Script
    {
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9"
    TriggerType LevelTime 111
    Script
    {
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8"
    TriggerType LevelTime 112
    Script
    {
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7"
    TriggerType LevelTime 113
    Script
    {
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6"
    TriggerType LevelTime 114
    Script
    {
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5"
    TriggerType LevelTime 115
    Script
    {
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4"
    TriggerType LevelTime 116
    Script
    {
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3"
    TriggerType LevelTime 117
    Script
    {
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2"
    TriggerType LevelTime 118
    Script
    {
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1"
    TriggerType LevelTime 119
    Script
    {
        sound "FX_TIC01"
    }
}

MTET2001.TWS#

//   FILE: Ultra Tetris v7.2DP.tws
// SOURCE: Ultra Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:38:42 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Levels
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
    31: 31
}

Mino
{
    Name "J color"
    Tags 0,1
}

Mino
{
    Name "L color"
    Tags 0,2
}

Mino
{
    Name "S color"
    Tags 0,3
}

Mino
{
    Name "Z color"
    Tags 0,4
}

Mino
{
    Name "O color"
    Tags 0,5
}

Mino
{
    Name "T color"
    Tags 0,6
}

Mino
{
    Name "I color"
    Tags 0,7
}

Mino
{
    Name "Garbage"
    Tags 0,31
}

Tetramino
{
    Name "T Tetrimino"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T color" (0,1)
        "T color" (-1,0)
        "T color" (0,0)
        "T color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J Tetrimino"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J color" (-1,1)
        "J color" (-1,0)
        "J color" (0,0)
        "J color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L Tetrimino"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L color" (1,1)
        "L color" (-1,0)
        "L color" (0,0)
        "L color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S Tetrimino"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S color" (0,1)
        "S color" (1,1)
        "S color" (-1,0)
        "S color" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z Tetrimino"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z color" (-1,1)
        "Z color" (0,1)
        "Z color" (0,0)
        "Z color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I Tetrimino"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I color" (-1,0)
        "I color" (0,0)
        "I color" (1,0)
        "I color" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O Tetrimino"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O color" (0,1)
        "O color" (1,1)
        "O color" (0,0)
        "O color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

GarbageInfo
{
    NormalMino "Garbage"
    NormalCount 9
}

Shape
{
    Name "T-spin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "T-spin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "Line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
    }
    PatternEndScript
    {
        sound "FX_CLR01"
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed 0.1
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
    }
    StartFallingScript
    {
        if ph.d0 = 1
        line color (109,0,23)
        end
        if ph.d0 = 2
        line color (39,0,87)
        end
        if ph.d0 = 3
        line color (116,55,0)
        end
        if ph.d0 = 4
            line color (0,91,56)
         if pf.d3
                line color (118,119,0)
         else
            set pf.d3 to 1
            end
        end
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        set st2.d8 to goal
        if ph.d0 = 1
            sound "FX_MTRS1"
         set goal to goal -1
        set st2.d9 to st2.d8 - goal
            set st0.d0 to st0.d0 + 1
            message "Single"
         set pf.d3 to 0
         if pf.d4
          set goal to goal -1
        set st2.d9 to st2.d8 - goal
                message "T-spin"
         end
        end
        if ph.d0 = 2
            sound "FX_MTRS2"
            set goal to goal -3
        set st2.d9 to st2.d8 - goal
            set st0.d1 to st0.d1 + 1
            message "Double"
         set pf.d3 to 0
         if pf.d4
          set goal to goal -3
        set st2.d9 to st2.d8 - goal
                message "T-spin"
         end
        send "attack1"
        end
        if ph.d0 = 3
            sound "FX_MTRS3"
            set goal to goal -5
        set st2.d9 to st2.d8 - goal
            set st0.d2 to st0.d2 + 1
            message "Triple"
         set pf.d3 to 0
        send "attack2"
        end
        if ph.d0 = 4
            sound "FX_MTRS4"
         if pf.d3
          set goal to goal -4
        set st2.d9 to st2.d8 - goal
        set st0.d9 to st0.d9 + 1
        message "B2B Tetris!!!"
            sound "FX_MTRS5"
         else
         set pf.d3 to 1
        message "Tetris!"
            end
         set goal to goal -8
        set st2.d9 to st2.d8 - goal
        set st0.d3 to st0.d3 + 1
        send "attack3"
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    FallSpeed 0.1
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
         message "LEVEL UP!"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d0 to 0
        set st0.d1 to 0
        set st0.d2 to 0
        set st0.d3 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st0.d9 to 0
        set st1.d0 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        mino intensity high
        set pf.d3 to 0
        set goal to (5*level)
        set pf.d7 to 0
        set pl.d9 to goal
        set pl.d8 to goal
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "FX_RWD02"
           else
            sound "FX_RWD02"
           end
           set goal to goal -1 
                    set pf.d4 to 1
                    set st1.d0 to st1.d0 + 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "FX_RWD02"
            else
             sound "FX_RWD02"
            end
            set goal to goal -1 
                        set pf.d4 to 1
                        set st1.d0 to st1.d0 + 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Attack1"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 1
        mix garbage
        garbage 1
        sound "FX_GAR01"
    }
}

CustomEvent
{
    Name "Attack2"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 2
        mix garbage
        garbage 2
        sound "FX_GAR02"
    }
}

CustomEvent
{
    Name "Attack3"
    TriggerType Manual
    Script
    {
        set pl.d0 to pl.d0 + 4
        mix garbage
        garbage 4
        sound "FX_GAR03"
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 109
    Script
    {
        message "COUNTDOWN!"
    }
}

CustomEvent
{
    Name "10"
    TriggerType LevelTime 110
    Script
    {
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9"
    TriggerType LevelTime 111
    Script
    {
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8"
    TriggerType LevelTime 112
    Script
    {
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7"
    TriggerType LevelTime 113
    Script
    {
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6"
    TriggerType LevelTime 114
    Script
    {
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5"
    TriggerType LevelTime 115
    Script
    {
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4"
    TriggerType LevelTime 116
    Script
    {
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3"
    TriggerType LevelTime 117
    Script
    {
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2"
    TriggerType LevelTime 118
    Script
    {
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1"
    TriggerType LevelTime 119
    Script
    {
        sound "FX_TIC01"
    }
}

MTNT.TWS#

//   FILE: Ultra Sticky Tetris v7.2DP.tws
// SOURCE: Ultra Sticky Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:38:32 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Levels
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "T"
    Tags 0,1
    AltMino "L"
    AltChance 20
}

Mino
{
    Name "S"
    Tags 0,2
    AltMino "J"
    AltChance 20
}

Mino
{
    Name "Z"
    Tags 0,3
    AltMino "O"
    AltChance 20
}

Mino
{
    Name "O"
    Tags 0,4
    AltMino "I"
    AltChance 20
}

Mino
{
    Name "L"
    Tags 0,5
    AltMino "Z"
    AltChance 20
}

Mino
{
    Name "J"
    Tags 0,6
    AltMino "T"
    AltChance 20
}

Mino
{
    Name "I"
    Tags 0,7
    AltMino "S"
    AltChance 20
}

Mino
{
    Name "special garbage"
    Antigravity
    Tags 0,30
}

Mino
{
    Name "garbage"
    Antigravity
    Tags 31
}

Tetramino
{
    Name "T"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T" (0,1)
        "T" (-1,0)
        "T" (0,0)
        "T" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J" (-1,1)
        "J" (-1,0)
        "J" (0,0)
        "J" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L" (1,1)
        "L" (-1,0)
        "L" (0,0)
        "L" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S" (0,1)
        "S" (1,1)
        "S" (-1,0)
        "S" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z" (-1,1)
        "Z" (0,1)
        "Z" (0,0)
        "Z" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I" (-1,0)
        "I" (0,0)
        "I" (1,0)
        "I" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O" (0,1)
        "O" (1,1)
        "O" (0,0)
        "O" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

GarbageInfo
{
    NormalMino "garbage"
    NormalCount pf.d9
    SpecialMino "special garbage"
    SpecialCount pf.d8
}

Shape
{
    Name "tspin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "tspin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "line clear"
    Tags 0,1,2,3,4,5,6,7,30,31
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
        sound "FX_CLR01"
    }
    PatternEndScript
    {
        set st1.d3 to st1.d3 + 1
    }
}

Pattern
{
    Name "Critical Mass Blue"
    Tags 1
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
    }
}

Pattern
{
    Name "Critical Mass Cyan"
    Tags 2
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
    }
}

Pattern
{
    Name "Critical Mass Green"
    Tags 3
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
    }
}

Pattern
{
    Name "Critical Mass Red"
    Tags 4
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
    }
}

Pattern
{
    Name "Critical Mass Maroon"
    Tags 5
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
    }
}

Pattern
{
    Name "Critical Mass Yellow"
    Tags 6
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
    }
}

Pattern
{
    Name "Critical Mass Purple"
    Tags 7
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed 0.05
    EliminateBeginScript
    {
        set ph.d0 to 0
    }
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        if ph.d0 > 0
         if cascades = 2
         set st1.d4 to st1.d4 + 2
         end
            if cascades > 2
            set st1.d4 to st1.d4 + 1
            end
        end
        if ph.d0 >= st1.d6
            set st1.d6 to ph.d0
        end
    }
}

SolidifyPhase
{
    IteratorTags 30
    MinoIteratorScript
    {
        set ph.d7 to ph.d7+ 1
    }
    SolidifyEndScript
    {
        If ph.d7 = 0
            sound "FX_LEVEL"
            next level
        end
    }
}

GravityPhase
{
    GravityEnabled
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionEndScript
    {
        if cascades > st1.d5
            set st1.d5 to cascades
        end
        if cascades = 2
        message "2 Cascade"
        line color (109,0,23)
         sound "FX_MTRS1"
        end
        if cascades = 3
        message "3 Cascades"
        line color (39,0,87)
         sound "FX_MTRS2"
        end
        if cascades = 4
        message "4 Cascades"
        line color (39,0,87)
         sound "FX_MTRS3"
        end
        if cascades = 5
        message "5 Cascades"
        line color (116,55,0)
         sound "FX_MTRS4"
        end
        if cascades = 6
        message "6 Cascades"
        line color (116,55,0)
         sound "FX_MTRS5"
        end
        if cascades = 7
        message "7 Cascades"
        line color (0,91,56)
         sound "FX_MTRS6"
        end
        if cascades = 8
            message "8 Cascades"
        line color (0,91,56)
         sound "FX_MTRS6"
        end
        if cascades = 9
            message "9 Cascades"
        line color (118,119,0)
         sound "FX_MTRS6"
        end
        if cascades = 10
            message "10 Cascades"
        line color (118,119,0)
         sound "FX_MTRS6"
        end
        if cascades >= 11
            message "Super Cascade!!!"
        line color (0,36,154)
         sound "FX_MTRS6"
        end
    }
}

EventScripts
{
    GameStartScript
    {
        sound "FX_LEVEL"
        set ghost to 1
        set st1.d3 to 0
        set st1.d4 to 0
        set st1.d5 to 0
        set st1.d6 to 0
        set st1.d7 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        mino intensity high
        set pf.d0 to 0
        set pf.d8 to 0
        set pf.d9 to 5
        mixed garbage level
        set pf.d9 to 0
        set pf.d8 to 5
        mixed garbage 1
        set pf.d7 to 0
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 109
    Script
    {
        message "COUNTDOWN!"
    }
}

CustomEvent
{
    Name "10"
    TriggerType LevelTime 110
    Script
    {
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9"
    TriggerType LevelTime 111
    Script
    {
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8"
    TriggerType LevelTime 112
    Script
    {
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7"
    TriggerType LevelTime 113
    Script
    {
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6"
    TriggerType LevelTime 114
    Script
    {
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5"
    TriggerType LevelTime 115
    Script
    {
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4"
    TriggerType LevelTime 116
    Script
    {
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3"
    TriggerType LevelTime 117
    Script
    {
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2"
    TriggerType LevelTime 118
    Script
    {
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1"
    TriggerType LevelTime 119
    Script
    {
        sound "FX_TIC01"
    }
}

ORIGINAL.TWS#

//   FILE: Original Tetris v7.2DP.tws
// SOURCE: Original Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:37:05 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 20
    MaxMovementsPerSecond 10
    MaxRotationsPerSecond 5
    GameType Marathon
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "Brackets"
    Tags 0,1
}

Tetramino
{
    Name "T Tetrimino"
    NumberInBag 1
    ID 1
    MinoList
    {
        "Brackets" (-1,0)
        "Brackets" (0,0)
        "Brackets" (1,0)
        "Brackets" (0,-1)
    }
    Rot0CWOffsetList (0,0)
    Rot90CWOffsetList (0,0)
    Rot180CWOffsetList (0,0)
    Rot270CWOffsetList (0,0)
}

Tetramino
{
    Name "J Tetrimino"
    NumberInBag 1
    ID 2
    MinoList
    {
        "Brackets" (-1,0)
        "Brackets" (0,0)
        "Brackets" (1,0)
        "Brackets" (1,-1)
    }
    Rot0CWOffsetList (0,0)
    Rot90CWOffsetList (0,0)
    Rot180CWOffsetList (0,0)
    Rot270CWOffsetList (0,0)
}

Tetramino
{
    Name "L Tetrimino"
    NumberInBag 1
    ID 3
    MinoList
    {
        "Brackets" (-1,0)
        "Brackets" (0,0)
        "Brackets" (1,0)
        "Brackets" (-1,-1)
    }
    Rot0CWOffsetList (0,0)
    Rot90CWOffsetList (0,0)
    Rot180CWOffsetList (0,0)
    Rot270CWOffsetList (0,0)
}

Tetramino
{
    Name "S Tetrimino"
    NumberInBag 1
    ID 4
    MinoList
    {
        "Brackets" (0,1)
        "Brackets" (1,1)
        "Brackets" (-1,0)
        "Brackets" (0,0)
    }
    Rot0CWOffsetList (0,1)
    Rot90CWOffsetList (1,0)
    Rot180CWOffsetList (0,0)
    Rot270CWOffsetList (0,0)
}

Tetramino
{
    Name "Z Tetrimino"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Brackets" (-1,1)
        "Brackets" (0,1)
        "Brackets" (0,0)
        "Brackets" (1,0)
    }
    Rot0CWOffsetList (0,1)
    Rot90CWOffsetList (0,0)
    Rot180CWOffsetList (0,0)
    Rot270CWOffsetList (-1,0)
}

Tetramino
{
    Name "I Tetrimino"
    NumberInBag 1
    ID 6
    MinoList
    {
        "Brackets" (-1,0)
        "Brackets" (0,0)
        "Brackets" (1,0)
        "Brackets" (2,0)
    }
    Rot0CWOffsetList (0,0)
    Rot90CWOffsetList (0,0)
    Rot180CWOffsetList (0,0)
    Rot270CWOffsetList (0,0)
}

Tetramino
{
    Name "O Tetrimino"
    NumberInBag 1
    ID 7
    MinoList
    {
        "Brackets" (0,0)
        "Brackets" (1,0)
        "Brackets" (0,-1)
        "Brackets" (1,-1)
    }
    Rot0CWOffsetList (0,0)
    Rot90CWOffsetList (-1,0)
    Rot180CWOffsetList (-1,1)
    Rot270CWOffsetList (0,1)
}

Pattern
{
    Name "Line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime 0.22 - (level-1) *.017
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d0 to 24 + (level -1) * 3
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed 0.22 - (level-1) *.017
    SoftDropSpeed 0
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    Duration .5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed 0
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
    }
    EliminateEndScript
    {
        if ph.d0 = 1
            set st0.d0 to st0.d0 + 1
        end
        if ph.d0 = 2
            set st0.d1 to st0.d1 + 1
        end
        if ph.d0 = 3
            set st0.d2 to st0.d2 + 1
        end
        if ph.d0 = 4
            set st0.d3 to st0.d3 + 1
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    FallSpeed 0
}

CompletionPhase
{
    CompletionBeginScript
    {
        score pf.d0
        if lines >= goal
            next level
        end
    }
    CompletionEndScript
    {
        set st0.d6 to score
    }
}

EventScripts
{
    GameStartScript
    {
        set st0.d0 to 0
        set st0.d1 to 0
        set st0.d2 to 0
        set st0.d3 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d6 to 0
        set st0.d8 to 0
    }
    LevelStartScript
    {
        set pf.d3 to 0
        set goal to goal + 10
    }
    LevelEndScript
    {
        if level >= 11
         win
        end
    }
    MoveSuccessfulScript
    {
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        set st0.d5 to st0.d5 + 1
    }
    SoftDropStepScript
    {
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        set pf.d0 to pf.d0 - 1
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
}

RIBBON.TWS#

//////////////////////////////////////////////////////////////////////
// FILE NAME   : TET2001.TWS
// AUTHOR      : $Author: Cstewart $
// VERSION     : $Revision: 3 $
// DATE        : $Date: 10/26/01 6:41p $
// DESCRIPTION : Tetris WRATH
//               
//               
// (c) 2000-2001 Blue Planet Software.  All rights reserved.
//////////////////////////////////////////////////////////////////////


//
// Possible solutions
//
// - piece acceleration
// - multicolored pieces
// - garbage on sides
// - prevent overhangs by 'severing' centre
// - 

GeneralInfo
{
    PlayfieldColumns        10
    PlayfieldRows           22
    MaxMovementsPerSecond   10
    MaxRotationsPerSecond   5
    GameType                Levels
    RemoveFromBagAfterUse
    NextPieceQueueSize      8
}

MinoSticky
{
    0:  0
    1:  1
    2:  2
    3:  3
    4:  4
    5:  5
    6:  6
}

Mino
{
    Name    "Blue"
    Tags    0
}

Mino
{
    Name    "Turquoise"
    Tags    1
}

Mino
{
    Name    "Gray"
    Tags    2
}

Mino
{
    Name    "Green"
    Tags    3
}

Mino
{
    Name    "Orange"
    Tags    4
}

Mino
{
    Name    "Purple"
    Tags    5
}

Mino
{
    Name    "Red"
    Tags    6
}

Tetramino
{
    Name "T_BLUE"
    NumberInBag 1
    ID 1
    MinoList
    {
        "Blue"          (-1,0)
        "Blue"          (0,0)
        "Blue"          (1,0)
        "Blue"          (0,-1)
    }
    Rot0CWOffsetList    (0,0),(-1,0),(1,0),(0,-1)
    Rot90CWOffsetList   (0,0),(0,1),(0,-1),(-1,0)
    Rot180CWOffsetList  (0,0),(1,0),(-1,0),(0,1)
    Rot270CWOffsetList  (0,0),(0,-1),(0,1),(1,0)
}

Tetramino
{
    Name "T_Orange"
    NumberInBag 1
    ID 2
    MinoList
    {
        "Orange"            (-1,0)
        "Orange"            (0,0)
        "Orange"            (1,0)
        "Orange"            (0,-1)
    }
    Rot0CWOffsetList    (0,0),(-1,0),(1,0),(0,-1)
    Rot90CWOffsetList   (0,0),(0,1),(0,-1),(-1,0)
    Rot180CWOffsetList  (0,0),(1,0),(-1,0),(0,1)
    Rot270CWOffsetList  (0,0),(0,-1),(0,1),(1,0)
}

Tetramino
{
    Name "T_GRAY"
    NumberInBag 1
    ID 3
    MinoList
    {
        "Gray"          (-1,0)
        "Gray"          (0,0)
        "Gray"          (1,0)
        "Gray"          (0,-1)
    }
    Rot0CWOffsetList    (0,0),(-1,0),(1,0),(0,-1)
    Rot90CWOffsetList   (0,0),(0,1),(0,-1),(-1,0)
    Rot180CWOffsetList  (0,0),(1,0),(-1,0),(0,1)
    Rot270CWOffsetList  (0,0),(0,-1),(0,1),(1,0)
}

Tetramino
{
    Name "T_RED"
    NumberInBag 1
    ID 4
    MinoList
    {
        "Red"           (-1,0)
        "Red"           (0,0)
        "Red"           (1,0)
        "Red"           (0,-1)
    }
    Rot0CWOffsetList    (0,0),(-1,0),(1,0),(0,-1)
    Rot90CWOffsetList   (0,0),(0,1),(0,-1),(-1,0)
    Rot180CWOffsetList  (0,0),(1,0),(-1,0),(0,1)
    Rot270CWOffsetList  (0,0),(0,-1),(0,1),(1,0)
}





Tetramino
{
    Name "S_BLUE"
    NumberInBag 1
    ID 8
    MinoList
    {
        "Blue"      (0,0)
        "Blue"      (1,0)
        "Blue"      (-1,-1)
        "Blue"      (0,-1)
    }
    Rot0CWOffsetList    (0,0),(1,0),(-1,-1),(0,-1)
    Rot90CWOffsetList   (0,0),(0,-1),(-1,1),(-1,0)
    Rot180CWOffsetList  (0,0),(-1,0),(1,1),(0,1)
    Rot270CWOffsetList  (0,0),(0,1),(1,-1),(1,0)
}

Tetramino
{
    Name "S_Orange"
    NumberInBag 1
    ID 9
    MinoList
    {
        "Orange"        (0,0)
        "Orange"        (1,0)
        "Orange"        (-1,-1)
        "Orange"        (0,-1)
    }
    Rot0CWOffsetList    (0,0),(1,0),(-1,-1),(0,-1)
    Rot90CWOffsetList   (0,0),(0,-1),(-1,1),(-1,0)
    Rot180CWOffsetList  (0,0),(-1,0),(1,1),(0,1)
    Rot270CWOffsetList  (0,0),(0,1),(1,-1),(1,0)
}

Tetramino
{
    Name "S_GRAY"
    NumberInBag 1
    ID 10
    MinoList
    {
        "Gray"      (0,0)
        "Gray"      (1,0)
        "Gray"      (-1,-1)
        "Gray"      (0,-1)
    }
    Rot0CWOffsetList    (0,0),(1,0),(-1,-1),(0,-1)
    Rot90CWOffsetList   (0,0),(0,-1),(-1,1),(-1,0)
    Rot180CWOffsetList  (0,0),(-1,0),(1,1),(0,1)
    Rot270CWOffsetList  (0,0),(0,1),(1,-1),(1,0)
}

Tetramino
{
    Name "S_RED"
    NumberInBag 1
    ID 11
    MinoList
    {
        "Red"       (0,0)
        "Red"       (1,0)
        "Red"       (-1,-1)
        "Red"       (0,-1)
    }
    Rot0CWOffsetList    (0,0),(1,0),(-1,-1),(0,-1)
    Rot90CWOffsetList   (0,0),(0,-1),(-1,1),(-1,0)
    Rot180CWOffsetList  (0,0),(-1,0),(1,1),(0,1)
    Rot270CWOffsetList  (0,0),(0,1),(1,-1),(1,0)
}


Tetramino
{
    Name "Z_BLUE"
    NumberInBag 1
    ID 12
    MinoList
    {
        "Blue"      (-1,0)
        "Blue"      (0,0)
        "Blue"      (0,-1)
        "Blue"      (1,-1)
    }
    Rot0CWOffsetList    (0,0),(-1,0),(0,-1),(1,-1)
    Rot90CWOffsetList   (0,0),(0,1),(-1,0),(-1,-1)
    Rot180CWOffsetList  (0,0),(1,0),(0,1),(-1,1)
    Rot270CWOffsetList  (0,0),(0,-1),(1,0),(1,1)
}
Tetramino
{
    Name "Z_Orange"
    NumberInBag 1
    ID 13
    MinoList
    {
        "Orange"        (-1,0)
        "Orange"        (0,0)
        "Orange"        (0,-1)
        "Orange"        (1,-1)
    }
    Rot0CWOffsetList    (0,0),(-1,0),(0,-1),(1,-1)
    Rot90CWOffsetList   (0,0),(0,1),(-1,0),(-1,-1)
    Rot180CWOffsetList  (0,0),(1,0),(0,1),(-1,1)
    Rot270CWOffsetList  (0,0),(0,-1),(1,0),(1,1)
}
Tetramino
{
    Name "Z_GRAY"
    NumberInBag 1
    ID 14
    MinoList
    {
        "Gray"      (-1,0)
        "Gray"      (0,0)
        "Gray"      (0,-1)
        "Gray"      (1,-1)
    }
    Rot0CWOffsetList    (0,0),(-1,0),(0,-1),(1,-1)
    Rot90CWOffsetList   (0,0),(0,1),(-1,0),(-1,-1)
    Rot180CWOffsetList  (0,0),(1,0),(0,1),(-1,1)
    Rot270CWOffsetList  (0,0),(0,-1),(1,0),(1,1)
}

Tetramino
{
    Name "Z_RED"
    NumberInBag 1
    ID 15
    MinoList
    {
        "Red"       (-1,0)
        "Red"       (0,0)
        "Red"       (0,-1)
        "Red"       (1,-1)
    }
    Rot0CWOffsetList    (0,0),(-1,0),(0,-1),(1,-1)
    Rot90CWOffsetList   (0,0),(0,1),(-1,0),(-1,-1)
    Rot180CWOffsetList  (0,0),(1,0),(0,1),(-1,1)
    Rot270CWOffsetList  (0,0),(0,-1),(1,0),(1,1)
}


Tetramino
{
    Name "L_Blue"
    NumberInBag 1
    ID 16
    MinoList
    {
        "Blue"  (0,1)
        "Blue"  (0,0)
        "Blue"  (0,-1)
        "Blue"  (1,-1)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(1,-1)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-1,-1)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(-1,1)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(1,1)
}
Tetramino
{
    Name "L_Orange"
    NumberInBag 1
    ID 17
    MinoList
    {
        "Orange"    (0,1)
        "Orange"    (0,0)
        "Orange"    (0,-1)
        "Orange"    (1,-1)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(1,-1)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-1,-1)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(-1,1)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(1,1)
}
Tetramino
{
    Name "L_Gray"
    NumberInBag 1
    ID 18
    MinoList
    {
        "Gray"  (0,1)
        "Gray"  (0,0)
        "Gray"  (0,-1)
        "Gray"  (1,-1)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(1,-1)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-1,-1)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(-1,1)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(1,1)
}
Tetramino
{
    Name "L_RED"
    NumberInBag 1
    ID 19
    MinoList
    {
        "Red"   (0,1)
        "Red"   (0,0)
        "Red"   (0,-1)
        "Red"   (1,-1)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(1,-1)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-1,-1)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(-1,1)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(1,1)
}


Tetramino
{
    Name "J_BLUE"
    NumberInBag 1
    ID 20
    MinoList
    {
        "Blue"  (0,1)
        "Blue"  (0,0)
        "Blue"  (0,-1)
        "Blue"  (-1,-1)
    }
    Rot0CWOffsetList    (0,0),(0,1),(-1,-1),(0,-1)
    Rot90CWOffsetList   (0,0),(1,0),(-1,1),(-1,0)
    Rot180CWOffsetList  (0,0),(0,-1),(1,1),(0,1)
    Rot270CWOffsetList  (0,0),(-1,0),(1,-1),(1,0)
}
Tetramino
{
    Name "J_Orange"
    NumberInBag 1
    ID 21
    MinoList
    {
        "Orange"    (0,1)
        "Orange"    (0,0)
        "Orange"    (0,-1)
        "Orange"    (-1,-1)
    }
    Rot0CWOffsetList    (0,0),(0,1),(-1,-1),(0,-1)
    Rot90CWOffsetList   (0,0),(1,0),(-1,1),(-1,0)
    Rot180CWOffsetList  (0,0),(0,-1),(1,1),(0,1)
    Rot270CWOffsetList  (0,0),(-1,0),(1,-1),(1,0)
}
Tetramino
{
    Name "J_Gray"
    NumberInBag 1
    ID 22
    MinoList
    {
        "Gray"  (0,1)
        "Gray"  (0,0)
        "Gray"  (0,-1)
        "Gray"  (-1,-1)
    }
    Rot0CWOffsetList    (0,0),(0,1),(-1,-1),(0,-1)
    Rot90CWOffsetList   (0,0),(1,0),(-1,1),(-1,0)
    Rot180CWOffsetList  (0,0),(0,-1),(1,1),(0,1)
    Rot270CWOffsetList  (0,0),(-1,0),(1,-1),(1,0)
}
Tetramino
{
    Name "J_RED"
    NumberInBag 1
    ID 23
    MinoList
    {
        "Red"   (0,1)
        "Red"   (0,0)
        "Red"   (0,-1)
        "Red"   (-1,-1)
    }
    Rot0CWOffsetList    (0,0),(0,1),(-1,-1),(0,-1)
    Rot90CWOffsetList   (0,0),(1,0),(-1,1),(-1,0)
    Rot180CWOffsetList  (0,0),(0,-1),(1,1),(0,1)
    Rot270CWOffsetList  (0,0),(-1,0),(1,-1),(1,0)
}


Tetramino
{
    Name "O_BLUE"
    NumberInBag 1
    ID 24
    MinoList
    {
        "Blue"      (0,0)
        "Blue"      (1,0)
        "Blue"      (0,-1)
        "Blue"      (1,-1)
    }
    Rot0CWOffsetList    (0,0)
    Rot90CWOffsetList   (-1,0)
    Rot180CWOffsetList  (-1,1)
    Rot270CWOffsetList  (0,1)
}
Tetramino
{
    Name "O_Orange"
    NumberInBag 1
    ID 25
    MinoList
    {
        "Orange"        (0,0)
        "Orange"        (1,0)
        "Orange"        (0,-1)
        "Orange"        (1,-1)
    }
    Rot0CWOffsetList    (0,0)
    Rot90CWOffsetList   (-1,0)
    Rot180CWOffsetList  (-1,1)
    Rot270CWOffsetList  (0,1)
}
Tetramino
{
    Name "O_Gray"
    NumberInBag 1
    ID 26
    MinoList
    {
        "Gray"      (0,0)
        "Gray"      (1,0)
        "Gray"      (0,-1)
        "Gray"      (1,-1)
    }
    Rot0CWOffsetList    (0,0)
    Rot90CWOffsetList   (-1,0)
    Rot180CWOffsetList  (-1,1)
    Rot270CWOffsetList  (0,1)
}

Tetramino
{
    Name "O_Red"
    NumberInBag 1
    ID 27
    MinoList
    {
        "Red"       (0,0)
        "Red"       (1,0)
        "Red"       (0,-1)
        "Red"       (1,-1)
    }
    Rot0CWOffsetList    (0,0)
    Rot90CWOffsetList   (-1,0)
    Rot180CWOffsetList  (-1,1)
    Rot270CWOffsetList  (0,1)
}



Tetramino
{
    Name "I_Blue"
    NumberInBag 1
    ID 28
    MinoList
    {
        "Blue"  (0,1)
        "Blue"  (0,0)
        "Blue"  (0,-1)
        "Blue"  (0,-2)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(0,-2)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-2,0)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(0,2)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(2,0)
}
Tetramino
{
    Name "I_Orange"
    NumberInBag 1
    ID 29
    MinoList
    {
        "Orange"    (0,1)
        "Orange"    (0,0)
        "Orange"    (0,-1)
        "Orange"    (0,-2)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(0,-2)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-2,0)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(0,2)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(2,0)
}
Tetramino
{
    Name "I_Gray"
    NumberInBag 1
    ID 30
    MinoList
    {
        "Gray"  (0,1)
        "Gray"  (0,0)
        "Gray"  (0,-1)
        "Gray"  (0,-2)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(0,-2)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-2,0)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(0,2)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(2,0)
}
Tetramino
{
    Name "I_RED"
    NumberInBag 1
    ID 31
    MinoList
    {
        "Red"   (0,1)
        "Red"   (0,0)
        "Red"   (0,-1)
        "Red"   (0,-2)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(0,-2)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-2,0)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(0,2)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(2,0)
}



Pattern
{
    Name            "BlueClear"
    Tags            0
    Method          Search
    SearchType      Ribbon
    SearchCount     3
    PatternMinoScript
    {
        * Patterns: line clear: Mino
        kill mino
    }
}

Pattern
{
    Name            "OrangeClear"
    Tags            4
    Method          Search
    SearchType      Ribbon
    SearchCount     3
    PatternMinoScript
    {
        * Patterns: line clear: Mino
        kill mino
    }
}

Pattern
{
    Name            "GrayClear"
    Tags            2
    Method          Search
    SearchType      Ribbon
    SearchCount     3
    PatternMinoScript
    {
        * Patterns: line clear: Mino
        kill mino
    }
}

Pattern
{
    Name            "RedClear"
    Tags            6
    Method          Search
    SearchType      Ribbon
    SearchCount     3
    PatternMinoScript
    {
        * Patterns: line clear: Mino
        kill mino
    }
}

Pattern
{
    Name            "GoalClear"
    Tags            1
    Method          Search
    SearchType      FloodFill4D
    SearchCount     12
    PatternMinoScript
    {
        * Patterns: line clear: Mino
        kill mino
        set pl.d9 to 1
    }
}




Trash
{
    Name    "OneTrash"  
    Height  5
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Red" (0,1)
        "Red" (0,2)
        "Red" (0,3)

        "Turquoise" (0,4)
        "Turquoise" (9,1)

    }
}


Trash
{
    Name    "TwoTrash"  
    Height  5
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Blue" (9,1)
        "Blue" (9,2)
        "Blue" (9,3)

        "Turquoise" (0,1)
        "Turquoise" (9,4)

    }
}



Trash
{
    Name    "ThreeTrash"    
    Height  4       
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Orange" (0,1)
        "Orange" (0,2)
        "Orange" (9,1)
        "Orange" (9,2)

        "Turquoise" (0,3)
        "Turquoise" (9,3)

    }
}


    
Trash
{
    Name    "FourTrash" 
    Height  4
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Gray" (0,1)
        "Gray" (0,2)
        "Blue" (9,1)
        "Blue" (9,2)

        "Turquoise" (0,3)
        "Turquoise" (9,3)

    }
}


Trash
{
    Name    "FiveTrash" 
    Height  5
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Red" (0,1)
        "Red" (0,2)
        "Orange" (0,3)
        "Orange" (0,4)

        "Red" (9,1)
        "Red" (9,2)
        "Orange" (9,3)
        "Orange" (9,4)

        "Turquoise" (0,4)
        "Turquoise" (9,4)

    }
}


Trash
{
    Name    "SixTrash"  
    Height  3       
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Blue" (0,1)
        "Gray" (0,2)

        "Gray" (9,1)
        "Blue" (9,2)

        "Turquoise" (0,3)
        "Turquoise" (9,3)

    }
}


Trash
{
    Name    "SevenTrash"    
    Height  4       
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Orange" (0,1)
        "Red"   (0,2)

        "Red"  (9,1)
        "Gray"  (9,2)

        "Turquoise" (0,3)
        "Turquoise" (9,3)

    }
}


Trash
{
    Name    "EightTrash"    
    Height  5
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Gray" (0,1)
        "Orange" (0,2)
        "Gray" (0,3)

        "Orange" (9,1)
        "Gray" (9,2)
        "Orange" (9,3)

        "Turquoise" (0,4)
        "Turquoise" (9,4)

    }
}

Trash
{
    Name    "NineTrash" 
    Height  5
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Red" (0,1)
        "Orange" (0,2)
        "Orange" (0,3)

        "Gray" (9,1)
        "Blue" (9,2)
        "Red" (9,3)

        "Turquoise" (0,4)
        "Turquoise" (9,4)

    }
}


Trash
{
    Name    "TenTrash"  
    Height  5
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Red"  (0,1)
        "Gray"  (0,2)
        "Orange" (0,3)

        "Orange" (9,1)
        "Blue"  (9,2)
        "Red"   (9,3)

        "Turquoise" (0,4)
        "Turquoise" (9,4)

    }
}


Trash
{
    Name    "ElevenTrash"   
    Height  6
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Gray"  (0,1)
        "Orange"  (0,2)
        "Orange" (0,3)
        "Red" (0,4)

        "Orange" (9,1)
        "Blue"  (9,2)
        "Red"   (9,3)
        "Gray"   (9,4)

        "Turquoise" (0,5)
        "Turquoise" (9,5)

    }
}


Trash
{
    Name    "TwelveTrash"   
    Height  6
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Red"  (0,1)
        "Gray"  (0,2)
        "Orange" (0,3)
        "Red" (0,4)

        "Gray" (9,1)
        "Blue"  (9,2)
        "Orange"   (9,3)
        "Red"   (9,4)

        "Turquoise" (0,5)
        "Turquoise" (9,5)

    }
}


Trash
{
    Name    "ThirteenTrash" 
    Height  6
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Blue"  (0,1)
        "Orange"  (0,2)
        "Gray" (0,3)
        "Red" (0,4)

        "Gray" (9,1)
        "Blue"  (9,2)
        "Orange"   (9,3)
        "Red"   (9,4)

        "Turquoise" (0,5)
        "Turquoise" (9,5)

    }
}



Trash
{
    Name    "FourteenTrash" 
    Height  7
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Blue"  (0,1)
        "Red"  (0,2)
        "Blue" (0,3)
        "Orange" (0,4)
        "Gray" (0,5)

        "Orange" (9,1)
        "Red"  (9,2)
        "Gray"   (9,3)
        "Gray"   (9,4)
        "Blue"   (9,5)

        "Turquoise" (0,6)
        "Turquoise" (9,6)

    }
}


Trash
{
    Name    "FifteenTrash"  
    Height  7
    MinoList        
    {
        "Turquoise" (0,0)
        "Turquoise" (1,0)
        "Turquoise" (2,0)
        "Turquoise" (3,0)
        "Turquoise" (4,0)
        "Turquoise" (5,0)
        "Turquoise" (6,0)
        "Turquoise" (7,0)
        "Turquoise" (8,0)
        "Turquoise" (9,0)

        "Gray"  (0,1)
        "Orange"  (0,2)
        "Red" (0,3)
        "Blue" (0,4)
        "Gray" (0,5)

        "Blue" (9,1)
        "Orange"  (9,2)
        "Red"   (9,3)
        "Gray"   (9,4)
        "Blue"   (9,5)

        "Turquoise" (0,6)
        "Turquoise" (9,6)

    }
}


Level
{
    Name "Level #1"
    LevelTrash "OneTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #2"
    LevelTrash "TwoTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #3"
    LevelTrash "ThreeTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #4"
    LevelTrash "FourTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #5"
    LevelTrash "FiveTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #6"
    LevelTrash "SixTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #7"
    LevelTrash "SevenTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #8"
    LevelTrash "EightTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #9"
    LevelTrash "NineTrash"
    LevelEndScript
    {
        sound "EVOLMT09"
    }
}

Level
{
    Name "Level #10"
    LevelTrash "TenTrash"
    LevelEndScript
    {
        sound "EVOLMT10"
    }
}

Level
{
    Name "Level #11"
    LevelTrash "ElevenTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #12"
    LevelTrash "TwelveTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #13"
    LevelTrash "ThirteenTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #14"
    LevelTrash "FourteenTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

Level
{
    Name "Level #15"
    LevelTrash "FifteenTrash"
    LevelEndScript
    {
        sound "EVOLMT01"
    }
}

GenerationPhase
{
    GenerationTime          0.0
    PieceStartingLocation   (4,0)
    GenerationBeginScript
    {
        * Phase: Generation Begin

        set pf.d3 to 0

        set pf.d6 to pf.d9 * 120 / level time

        if pf.d6 > pf.d5
          set pf.d5 to pf.d6
        end

        if pf.d5 > pf.d4
          set pf.d4 to pf.d5
          set pf.d3 to 1
        end


    }
}

FallingPhase
{
    FallSpeed       1/(pf.d9/10 + 1) - 1/15
    SoftDropSpeed   0.05
    HardDropSpeed   0.0001
    MoveTolerance   0.2
}

LockPhase
{
    MovementRestartsClock
    Duration        0.5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed       0.05
    EliminateBeginScript
    {
        * Phase: Eliminate Begin

        * Reset the line clear counter for this phase

        set phase.d0 to 0

        * Reset level win script

        * set pl.d9 to 0
    }
    LineCollapsedScript
    {
        * Phase: Eliminate Line Collapsed

        * "Clear line" counter for this phase
        set phase.d0 to phase.d0 + 1
    }
    EliminateEndScript
    {
        * Phase: Eliminate End

        * if you find a single, add it to the score and flag single

        if phase.d0 = 1
          set pf.d9 to pf.d9 + 1
          set pf.d0 to pf.d8 - pf.d9
          set pl.d5 to 1
          sound "FX_LNE01"
          mino mood 2
        end

        * if you find a double, add it to the score and flag double

        if phase.d0 = 2
          set pf.d9 to pf.d9 + 1
          set pf.d0 to pf.d8 - pf.d9
          set pl.d5 to 1
          sound "FX_LNE02"
          mino mood 3
        end

        * if you find a triple, add it to the score and flag triple

        if phase.d0 = 3
          set pf.d9 to pf.d9 + 1
          set pf.d0 to pf.d8 - pf.d9
          set pl.d5 to 1
          sound "FX_LNE03"
          mino mood 5
        end

        * if you find a tetris, add it to the score and flag tetris

        if phase.d0 = 4
          set pf.d9 to pf.d9 + 8
          set pf.d9 to pf.d9 + pl.d5 - 1
          set pf.d0 to pf.d8 - pf.d9
          sound "FX_MTRIS"
          sound "FX_LNE04"
          set pl.d5 to pl.d5 * 2
          mino mood 5
        end

        * check if reached goal conditions

        if pl.d9 = 1
          set pl.d9 to 0
          mino mood 5
          next level
        end

    }
}

SolidifyPhase
{
}

GravityPhase
{
    // Gravity is enabled
    GravityEnabled              
    FallSpeed       0.1
}

CompletionPhase
{
}

EventScripts
{
    GameStartScript
    {
        * Game Events: Game Start

        set pf.d4 to 30
    }

    LevelStartScript
    {
        * Level Scripts: Level Start

        sound "TWM_BGIN"

        * set ghost to 1
        score 0
        set pf.d9 to 0
        set pf.d8 to level * 5
        set pf.d0 to pf.d8
        set pf.d6 to 0
        set pf.d5 to 0

        * if level is less than three say "go for a tetris"
        * else just play the one minute music
        
        if level < 3
          set pl.d0 to 115
        else
          set pl.d0 to 60
        end

        set pl.d5 to 1

        mino intensity high
    }

    LevelEndScript
    {
        * Level Scripts: Level End

        sound "TWM_END"
    }

    PieceGenerationScript
    {
        * Generation: Generated

        set pf.d2 to 0

        set pl.d6 to 0.1
    }

    MoveSuccessfulScript
    {
        * Move: Success

        * This clears the rotate flag.

        set pf.d1 to 0

        sound "FX_SLDEL"

    }

    MoveFailedScript
    {
        * Move: Fail

        sound "FX_UNMVE"
    }

    RotateSuccessfulScript
    {
        * Rotate: Success

        * This sets the rotate flag.

        set pf.d1 to 1

        sound "FX_RTATL"
    }

    RotateFailedScript
    {
        * Rotate: Fail

        sound "FX_UNMVE"
    }

    HardDropStartScript
    {
        * Hard Drop: Start

        set pf.d2 to 9
    }

    HardDropStepScript
    {
        * Hard Drop: Step

        * This clears the rotate flag.

        set pf.d1 to 0
    }

    SoftDropStepScript
    {
        * Soft Drop: Step

        * This clears the rotate flag.

        set pf.d1 to 0

        sound "FX_SFTDP"
    }

    FallStepScript
    {
        * Fall: Step

        * This clears the rotate flag.

        set pf.d1 to 0

        sound "FX_FALL"
    }

    TouchdownScript
    {
        * Touch: Touchdown

        * Clear the rotate flag (pf.d1)

        set pf.d1 to 0

    }

    LockdownScript
    {
        * Touch: Lock

        * Checks for a spin.

        if pf.d2 = 1 & pf.d1 = 1
          set pf.d7 to 1
          * add a 1 bonus for a t-spin
          set pf.d9 to pf.d9 + 1
          set pf.d0 to pf.d8 - pf.d9
          sound "VO_TSPIN"
        end

        if pf.d2 = 9
          sound "FX_HRDDP"
        else
          sound "FX_LOCK"
        end
    }

    LevelSecondScript
    {
        * Time Events: Level Second

        if level time >= 3 & phase.d0 = 115
          sound "VO_INT01"
          set player.d0 to 60
        end

        if level time >= 60 & player.d0 = 60
          sound "TWM_MIDL"
          set player.d0 to 30
          mino intensity high
        end

        if level time >= 90 & player.d0 = 30
          sound "VO_30TIC"
          set player.d0 to 20
        end

        if level time >= 100 & player.d0 = 20
          sound "VO_20TIC"
          set player.d0 to 10
          mino intensity high
        end

        if level time >= 290 & player.d0 = 10
          sound "VO_10TIC"
          set player.d0 to 9
        end

        if level time >= 291 & player.d0 = 9
          sound "VO_09TIC"
          set player.d0 to 8
        end

        if level time >= 292 & player.d0 = 8
          sound "VO_08TIC"
          set player.d0 to 7
        end

        if level time >= 293 & player.d0 = 7
          sound "VO_07TIC"
          set player.d0 to 6
        end

        if level time >= 294 & player.d0 = 6
          sound "VO_06TIC"
          set player.d0 to 5
        end

        if level time >= 295 & player.d0 = 5
          sound "VO_05TIC"
          set player.d0 to 4
        end

        if level time >= 296 & player.d0 = 4
          sound "VO_04TIC"
          set player.d0 to 3
        end

        if level time >= 297 & player.d0 = 3
          sound "VO_03TIC"
          set player.d0 to 2
        end

        if level time >= 298 & player.d0 = 2
          sound "VO_02TIC"
          set player.d0 to 1
        end

        if level time >= 299 & player.d0 = 1
          sound "VO_01TIC"
          set player.d0 to 0
        end

        if level time >= 300 & player.d0 = 0
          sound "VO_TIME"
          * CJG change: game does not stop running upon loss, gotta do this to kill the VO.
          set player.d0 to -1
          lose
        end
    }
}

SAMPLE.TWS#

//////////////////////////////////////////////////////////////////////
// FILE NAME   : SAMPLE.TWS
// AUTHOR      : Chris J. Gullette
// VERSION     : $Revision: 15 $
// DATE        : $Date: 8/23/01 7:01p $
// DESCRIPTION : This is a sample TWS (Tetris Worlds Script) game
//               definition file.  Note that each section is heavily
//               commented, and all sections must appear in the order
//               given in this file.
//               
//               
// (c) 2000-2001 Blue Planet Software.  All rights reserved.
//////////////////////////////////////////////////////////////////////

// As the name implies, this section contains general information about the game and is mandatory.
GeneralInfo
{
    PlayfieldColumns        10      // range 1-32 columns
    PlayfieldRows           20      // range 1-48 rows
    MaxMovementsPerSecond   10      // How many times can a Tetrimino move per second? Integer only!
    MaxRotationsPerSecond   5       // How many times can a Tetrimino rotate per second? Integer only!
    GameType                Levels  // Game type can be Marathon or Levels
    RemoveFromBagAfterUse           // OPTIONAL: Set this flag to remove a Tetrimino from the "bag" after
                                    // it has been used.  When the bag count for all Tetriminos reaches
                                    // zero, they will be reset to their starting values.
    NextPieceQueueSize      8       // How large is the next piece queue?
}

// The MinoSticky section defines which mino tags stick to each other.  Note that this defines
// LOGICAL stickiness.  The TWS format does not currently support visual stickiness, this may be
// added later.  This section is mandatory.
MinoSticky
{
    NotStickyBetweenPieces      // OPTIONAL: This flag prevents stickiness between tetriminos.
    0:  0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
    1:  1
    2:  2,3,4,5
    3:  3
    4:  4,5
    5:  5
    6:  6
    7:  7
    8:  8
    9:  9
    10: 10
    11: 11
    12: 12
    13: 13
    14: 14
    15: 15
}

// The Mino section defines each mino type.  At least one Mino is required, but you
// may define any number as long as each has a Name unique among Minos.
Mino
{
    Name        "Mino0"     // Name can be any string, should be unique
    Antigravity             // OPTIONAL: Set this flag to turn gravity off for this mino type.
    Tags        0           // The mino ID number ("tags") can be 0-31.  Multiple tags can be used
                            // in the same Mino definition.
    AltMino     "Mino1"     // OPTIONAL: Each mino can have an alternate mino type.
    AltChance   50          // OPTIONAL: If AltMino is defined, you must also define a % chance from 0-50.
    MutateMino  "Mino1"     // OPTIONAL: Each mino can have a "mutate" mino type, switched by the "mutate
                            // mino" script command.
    D0  20                  // OPTIONAL: Datafields D0-D9 can be any integer (0 by default)
    D1  50
    D2  70
    D3  25
    D6  15
    D7  100
}

Mino
{
    Name "Mino1"
    Tags    1,2,3
    D1  50
    D4  75
}

// The Tetramino section defines a single tetramino type.  At least one Tetramino is required,
// but you may define any number as long as each has a Name unique among Tetraminos.
Tetramino
{
    Name "Tetramino0"   // Name can be any string, must be unique.
    NumberInBag 20      // Number in bag defines probability of appearance, range 0-25.
    ID 0                // This value is returned by the PIECE.ID property.

    // List each mino by name with its location on the 7x7 grid.
    // The center square of the grid is (0,0) by definition.
    MinoList
    {
        "Mino0" (0,0)
        "Mino0" (0,1)
        "Mino0" (0,2)
        "Mino1" (1,2)
    }
    Rot0CWOffsetList        (0,0)           // List offsets for 0 degree CW rotation
    Rot90CWOffsetList       (0,0)           // List offsets for 90 degree CW rotation
    Rot180CWOffsetList      (0,0),(1,1)     // List offsets for 180 degree CW rotation
    Rot270CWOffsetList      (0,0)           // List offsets for 270 degree CW rotation
}

// The GarbageInfo section defines both normal and special garbage.  This section is OPTIONAL.
GarbageInfo
{
    NormalMino      "Mino0"         // Which Mino is used for normal garbage?
    NormalCount     7               // How many Minos for a row of normal garbage?  Expression OK.
    SpecialMino     "Mino1"         // Which Mino is used for special garbage?      
    SpecialCount    pf.d8           // How many Minos for a row of special garbage?  Expression OK.
}

// A Sequence section defines a single sequence of Tetraminos.  Sequences are OPTIONAL,
// but you may define any number as long as each has a Name unique among Sequences.
Sequence
{
    Name            "Sequence0"                             // Name of the sequence.
    TetraminoList   "Tetramino0","Tetramino0","Tetramino0"  // A list of Tetramino names.
}

// A Shape section contains a user-defined shape, up to 16x16 in size.  Shapes are OPTIONAL,
// but you may define any number as long as each has a Name unique among Shapes.  Note that
// the points in a Shape are in a 16x16 grid where the lower left corner of the grid is (0,0)
// and the upper right is (15,15).
Shape
{
    Name        "Shape0"                // Name of the shape, any string.
    Hotspot     (7,7)                   // Location of the shape hotspot (which is not part of the
                                        // shape unless included in the ShapeCoords list).
    ShapeCoords (7,7),(8,7),(9,7),(9,8) // ShapeCoords contains a list of x,y coordinates for each
                                        // mino in a shape.
}

// A Pattern section is used to define a matchable pattern based on either pre-defined search
// types or user-defined shapes.  Examples for each follow.  You must have at least one Pattern,
// but you may define as many as you like as long as each has a Name unique among Patterns.  Also
// note that you should not use Search-specific fields in a Shape-based Pattern, and vice versa.
Pattern     // Search pattern
{
    Name                "Pattern0"      // Name of the pattern, any string.
    Triggered                           // OPTIONAL:  Patterns execute automatically during the
                                        // Pattern phase by default.  Set this flag if the Pattern
                                        // should only execute when triggered by a run-time script.
    Tags                0,1,2,3         // OPTIONAL: Which Mino tags can match in this pattern?  If
                                        // this list is not present, all tags can match this pattern.
                                        // If "Tags" is present, you must list at least one tag value.
    Method              Search          // For a search pattern, set Method to Search.
    SearchType          Horizontal      // SEARCH-SPECIFIC: SearchType can be Horizontal, Vertical,
                                        // DiagNESW, DiagNWSE, Square, FloodFill4D, FloodFill8D, or
                                        // Ribbon.
    SearchCount         10              // SEARCH-SPECIFIC: Defines the minimum number of Minos required
                                        // for a successful match.  Any expression is OK.
    PatternPieceCount   5               // OPTIONAL: PatternPieceCount must be a positive integer.  When
                                        // a potential match is found, the number of unique piece IDs
                                        // in that pattern is counted.  If it matches this number, then
                                        // (and only then) the pattern is a match.
    PatternBeginScript  {}              // OPTIONAL: This script runs when a pattern is matched.
    PatternMinoScript   {}              // OPTIONAL: This script runs on each Mino after the BeginScript.
    PatternEndScript    {}              // OPTIONAL: This script runs after all MinoScripts have finished.
}

// This is an example of a shape pattern.  Note: no "Triggered" keyword means automatic execution,
// and no "Tags" list means ALL tags may be part of this pattern.
Pattern
{
    Name                "Pattern1"
    Method              Shape           // For a shape pattern, set Method to Shape.
    ShapeName           "Shape0"        // SHAPE-SPECIFIC: What Shape should be used for this pattern?
    PatternPieceCount   3               // OPTIONAL
    PatternBeginScript  {}              // OPTIONAL
    PatternMinoScript   {}              // OPTIONAL
    PatternEndScript    {}              // OPTIONAL
}

// A Trash section contains an instance of user-defined trash.  Trash is OPTIONAL, but you may define
// any number of Trash sections as long as each has a name unique among Trash.
Trash
{
    Name    "Trash0"                    // The name of this Trash, any string.
    Height  2                           // How tall is the trash?  Must be an integer > 0.
    MinoList                            // A list of minos in the trash.  We need coords and type.
    {                                   // For each coordinate pair, X < Height (trash height) and
        "Mino0" (0,0)                   // Y < well width.
        "Mino0" (0,1)
        "Mino0" (0,2)
        "Mino1" (1,2)
    }
}

// A Level section contains script and trash info for a single level.  Levels are OPTIONAL, but you
// may define any number of them as long as each has a unique Name among Levels.  Note that Levels
// will be used in the order that you define them here, no matter what the name.
Level
{
    Name                "Level #1"  // The name of this Level, any string.
    LevelTrash          "Trash0"    // OPTIONAL: What Trash should be inserted at level start?
    LevelStartScript    {}          // OPTIONAL: Execute this script at level start.
    LevelEndScript      {}          // OPTIONAL: Execute this script at level end.
}

// All info for the Generation Phase.  Mandatory, only one instance of this section.
GenerationPhase
{
    GenerationTime          1       // Generation time in seconds, expression OK.
    PieceStartingLocation   (0,0)   // Where is a new piece placed on the playfield?
    GenerationBeginScript   {}      // OPTIONAL: Begin phase script.
    GenerationEndScript     {}      // OPTIONAL: End phase script.
}

// All info for the Falling Phase.  Mandatory, only one instance of this section.
FallingPhase
{
    PiecesFallSmoothly              // OPTIONAL: If set, pieces fall smoothly (visually).
    FallSpeed               1       // Normal fall speed in sec/line, expression OK
    SoftDropSpeed           1       // Soft drop speed in sec/line, expression OK
    HardDropSpeed           1       // Hard drop speed in sec/line, expression OK
    MoveTolerance           0       // Expression OK, not currently in use!
    FallingBeginScript      {}      // OPTIONAL: Begin phase script.
    FallingEndScript        {}      // OPTIONAL: End phase script.
}

// All info for the Lock Phase.  Mandatory, only one instance of this section.
LockPhase
{
    MovementRestartsClock           // OPTIONAL: Set this flag to restart the lock phase
                                    // if the active piece moves.
    Duration                5       // Seconds before lockdown occurs, expression OK
    LockBeginScript         {}      // OPTIONAL: Begin phase script.
    LockEndScript           {}      // OPTIONAL: End phase script.
}

// All info for the Pattern Phase.  Mandatory, only one instance of this section.
PatternPhase
{
    PatternBeginScript      {}      // OPTIONAL: Begin phase script.
    PatternEndScript        {}      // OPTIONAL: End phase script.
}

// All info for the Iterate Phase.  Mandatory, only one instance of this section.
IteratePhase
{
    IterateBeginScript      {}      // OPTIONAL: Begin phase script.
    PrimaryIterator                 // OPTIONAL: Defines the primary iterator.
    {
        IteratorExpression  pf.d1   // OPTIONAL: If this expression exists, it must evaluate
                                    // to non-zero in order to execute this iterator.
        IteratorTags        0,1,2,3 // OPTIONAL: Only Minos that match this tag list are iterated.
        MinoIteratorScript  {}      // The iteration script run for each matching Mino.
    }
    SecondaryIterator               // OPTIONAL: Defines the secondary iterator.
    {
        IteratorExpression  3
        IteratorTags        0,1,2,3
        MinoIteratorScript  {}
    }
    IterateEndScript        {}      // OPTIONAL: End phase script.
}

// All info for the Eliminate Phase.  Mandatory, only one instance of this section.
EliminatePhase
{
    FallSpeed               1       // Seconds per line, expression OK
    DontCollapseEmptyLines          // OPTIONAL: If this tag is set, empty lines will not be collapsed.
    EliminateBeginScript    {}      // OPTIONAL: Begin phase script.
    LineCollapsedScript     {}      // OPTIONAL: Execute this script after a line is collapsed.
    StartFallingScript      {}      // OPTIONAL: Executed when pieces start falling due to a line collapse.
    GroupLandedScript       {}      // OPTIONAL: Fired when a group of pieces lands.
    EliminateEndScript      {}      // OPTIONAL: End phase script.
}

// All info for the Solidify Phase.  Mandatory, only one instance of this section.
SolidifyPhase
{
    IteratorTags            0,1,2   // OPTIONAL: The MinoIteratorScript will be executed for each mino
                                    // with a tag that is in this list.  If you leave out IteratorTags,
                                    // the script will be run on ALL minos.
    SolidifyBeginScript     {}      // OPTIONAL: Begin phase script.
    MinoIteratorScript      {}      // OPTIONAL: This script is run on each Mino that matches the
                                    // IteratorTags (or all Minos if IteratorTags does not exist).
    SolidifyEndScript       {}      // OPTIONAL: End phase script.
}

// All info for the Gravity Phase.  Mandatory, only one instance of this section.
GravityPhase
{
    GravityEnabled                  // OPTIONAL: Set this flag to turn gravity on by default.
    FallSpeed               1.0     // Seconds per line, expression OK.
    GravityBeginScript      {}      // OPTIONAL: Begin phase script.
    GroupLandedScript       {}      // OPTIONAL: Fired when a group of pieces lands.
    GravityEndScript        {}      // OPTIONAL: End phase script.
}

// All info for the Completion Phase.  Mandatory, only one instance of this section.
CompletionPhase
{
    CompletionBeginScript   {}      // OPTIONAL: Begin phase script.
    CompletionEndScript     {}      // OPTIONAL: End phase script.
}

// This section contains a number of scripts that are executed when certain events occur on the
// active piece.  All scripts are optional (though the EventScripts section itself is not), and
// scripts may appear in any order within the section.  The name of each script should be self-
// explanatory.
EventScripts
{
    GameStartScript         {}
    MinosPushedOffTopScript {}
    LevelStartScript        {}
    LevelEndScript          {}
    PieceGenerationScript   {}
    MoveSuccessfulScript    {}
    MoveFailedScript        {}
    RotateSuccessfulScript  {}
    RotateFailedScript      {}
    HardDropStartScript     {}
    HardDropStepScript      {}
    SoftDropStartScript     {}
    SoftDropStepScript      {}
    FallStepScript          {}
    TouchdownScript         {}
    LockdownScript          {}
    GameSecondScript        {}
    LevelSecondScript
    {
        * this is a comment

        score level+5
        kill mino

        if playfield.d1 = 0
            if phase.d1 = 2
                exit
            end
            next level
            game win
            reset bag "tetramino0"
        end

        set playfield.d2 to phase.d0

        if phase.d0 = 1
            score level+2
            game lose
        else
            set phase.d0 to phase.d0 + 1
            kill mino
            set bag "tetramino0" to 0
            set playfield.d0 to playfield.d0 + 1
        end

        reset bag "tetramino0"
        send "BigGarbage"
        game win
    }

    // I've used the last script to show you what a run-time script looks like.  This isn't a
    // real script that you would use, and it probably doesn't do anything useful, it just shows
    // script syntax.  For a complete listing of all commands that are available, start with the
    // Tetrion Editor documentation.  Note the following differences apply when writing run-time
    // scripts in the TWS format:
    //
    // - All strings (e.g. names) must be quoted.
    // - C++ style comments (such as this one) or *-type comments may be used anywhere in the file,
    //   not just within run-time scripts.
    // - All run-time script commands as listed in version 2.0d58 (4/27/01) of the Editor document
    //   have been implemented with the following exceptions: HEIGHT, TOUCH, PHASE TIME, ITERATE,
    //   MINO.MARK, MINO.MARK2, MINO.FRESH, MINO.ID, SET MINO USING STICKY, SET MINO USING "shape",
    //   KILL MINO USING STICKY, KILL MINO USING "shape", MARK MINO USING STICKY, MARK MINO USING
    //   "shape", MARK MINO2 USING STICKY, MARK MINO2 USING "shape", SET BAG, RESET BAG.  I will
    //   implement these as time permits and on an as-needed basis.
    // - I have added the following run-time script commands to the TWS format:
    //     stop sound "name"    -   If the named sound is playing, this command stops it.
    //     stop all sounds      -   Stop all currently playing sounds.
    //     preload sound "name" -   Preload the named sound, but don't start playing it.
    //     unload sound "name"  -   Unload the named sound, let it finish playing if needed.
    //     unload all sounds    -   Unload all preloaded sounds.
    //     mino mood <exp>      -   Set the mino character mood to the value of the expression.
    //     mino intensity X     -   Set the mino character intensity to X ("low", "medium" or "high").
    //     trace "string"       -   Print any string to the debug output.
    //     trace <exp> "string" -   Print the value of the given expression, followed by the string,
    //                              to debug output.
}

// The CustomEvent section contains (you guessed it) a custom game event.  This section is OPTIONAL,
// but you may define as many custom events as you like, provided each has a name unique among custom
// events.
CustomEvent
{
    Name        "BigGarbage"            // What is the name of the custom event?
    TriggerType GameTime    30          // Custom events can be triggered in three ways:
                                        // Manual - fires by manual trigger only
                                        // GameTime <exp> - fires once when the game time equals the expression
                                        // LevelTime <exp> - fires once when the level time equals the expression
    Script                              // This is the script triggered when the event occurs.
    {
        mix garbage 3*level
    }
}

SQUARE.TWS#

//   FILE: Square Tetris v7.2DP.tws
// SOURCE: Square Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:37:16 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Marathon
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    0: 0
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
    31: 31
}

Mino
{
    Name "J color"
    Tags 0
    MutateMino "Result J color"
}

Mino
{
    Name "L color"
    Tags 1
    MutateMino "Result L color"
}

Mino
{
    Name "S color"
    Tags 2
    MutateMino "Result S color"
}

Mino
{
    Name "Z color"
    Tags 3
    MutateMino "Result Z color"
}

Mino
{
    Name "O color"
    Tags 4
    MutateMino "Result O color"
}

Mino
{
    Name "T color"
    Tags 5
    MutateMino "Result T color"
}

Mino
{
    Name "I color"
    Tags 6
    MutateMino "Result I color"
}

Mino
{
    Name "Pure Square"
    Tags 31
    MutateMino "Result Pure Square"
    D9 2.5
}

Mino
{
    Name "Combo Square"
    Tags 31
    MutateMino "Result Combo Square"
    D9 1.25
}

Mino
{
    Name "Result J color"
    Tags 24
}

Mino
{
    Name "Result L color"
    Tags 25
}

Mino
{
    Name "Result S color"
    Tags 26
}

Mino
{
    Name "Result Z color"
    Tags 27
}

Mino
{
    Name "Result O color"
    Tags 28
}

Mino
{
    Name "Result T color"
    Tags 29
}

Mino
{
    Name "Result I color"
    Tags 30
}

Mino
{
    Name "Result Pure Square"
    Tags 23
}

Mino
{
    Name "Result Combo Square"
    Tags 22
}

Mino
{
    Name "Garbage"
    Antigravity
    Tags 20
}

Tetramino
{
    Name "J Tetrimino"
    NumberInBag 3
    ID 1
    MinoList
    {
        "J color" (-1,1)
        "J color" (-1,0)
        "J color" (0,0)
        "J color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I Tetrimino"
    NumberInBag 3
    ID 2
    MinoList
    {
        "I color" (-1,0)
        "I color" (0,0)
        "I color" (1,0)
        "I color" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O Tetrimino"
    NumberInBag 3
    ID 3
    MinoList
    {
        "O color" (-1,1)
        "O color" (0,1)
        "O color" (-1,0)
        "O color" (0,0)
    }
    Rot0CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
    Rot90CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot180CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot270CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
}

Tetramino
{
    Name "S Tetrimino"
    NumberInBag 2
    ID 4
    MinoList
    {
        "S color" (0,1)
        "S color" (1,1)
        "S color" (-1,0)
        "S color" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L Tetrimino"
    NumberInBag 3
    ID 5
    MinoList
    {
        "L color" (1,1)
        "L color" (-1,0)
        "L color" (0,0)
        "L color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z Tetrimino"
    NumberInBag 2
    ID 6
    MinoList
    {
        "Z color" (-1,1)
        "Z color" (0,1)
        "Z color" (0,0)
        "Z color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "T Tetrimino"
    NumberInBag 3
    ID 7
    MinoList
    {
        "T color" (0,1)
        "T color" (-1,0)
        "T color" (0,0)
        "T color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

GarbageInfo
{
    NormalMino "Garbage"
    NormalCount 9
}

Shape
{
    Name "Perfect Square"
    Hotspot (7,8)
    ShapeCoords (4,11),(4,10),(4,9),(4,8),(5,11),(5,10),(5,9),(5,8),(6,11),(6,10),(6,9),(6,8),(7,11),(7,10),(7,9),(7,8)
}

Shape
{
    Name "T-spin 1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "T-spin 2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Shape
{
    Name "Spin S 1"
    Hotspot (7,8)
    ShapeCoords (5,6),(6,8),(6,7),(8,6),(9,8),(9,7)
}

Shape
{
    Name "Spin S 2"
    Hotspot (7,8)
    ShapeCoords (4,6),(5,8),(5,7),(7,6),(8,8),(8,7)
}

Shape
{
    Name "Spin Z 1"
    Hotspot (7,8)
    ShapeCoords (5,8),(5,7),(6,6),(8,8),(8,7),(9,6)
}

Shape
{
    Name "Spin Z 2"
    Hotspot (7,8)
    ShapeCoords (6,8),(6,7),(7,6),(9,8),(9,7),(10,6)
}

Pattern
{
    Name "t-spin top"
    Triggered
    Tags 0,1,2,3,4,5,6,24,25,26,27,28,29,30,31
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternBeginScript
    {
        sound "FX_RWD02"
        set pl.d4 to 0
    }
    PatternMinoScript
    {
        set pl.d5 to mino.y
    }
}

Pattern
{
    Name "t-spin bottom"
    Triggered
    Tags 0,1,2,3,4,5,6,24,25,26,27,28,29,30,31
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternBeginScript
    {
        sound "FX_RWD01"
        set pl.d5 to 21
    }
    PatternMinoScript
    {
        if pl.d4 = -1
            set pl.d4 to mino.y
        end
    }
}

Pattern
{
    Name "J Square"
    Tags 0
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternBeginScript
    {
        sound "FX_GOLDF"
    }
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "VO_PURE"
    }
}

Pattern
{
    Name "I Square"
    Tags 6
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternBeginScript
    {
        sound "FX_GOLDF"
    }
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "VO_PURE"
    }
}

Pattern
{
    Name "O Square"
    Tags 4
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternBeginScript
    {
        sound "FX_GOLDF"
    }
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "VO_PURE"
    }
}

Pattern
{
    Name "T Square"
    Tags 5
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternBeginScript
    {
        sound "FX_GOLDF"
    }
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "VO_PURE"
    }
}

Pattern
{
    Name "L Square"
    Tags 1
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternBeginScript
    {
        sound "FX_GOLDF"
    }
    PatternMinoScript
    {
        set mino to "Pure Square"
        message "Pure Square!!!"
    }
    PatternEndScript
    {
        solidify
        set st1.d2 to st1.d2 + 1
        sound "VO_PURE"
    }
}

Pattern
{
    Name "Combo Square"
    Tags 0,1,2,3,4,5,6
    Method Shape
    ShapeName "Perfect Square"
    PatternPieceCount 4
    PatternBeginScript
    {
        sound "FX_SLVRF"
    }
    PatternMinoScript
    {
        set mino to "Combo Square"
        message "Combo Square!"
    }
    PatternEndScript
    {
        solidify
        set st1.d1 to st1.d1 + 1
        sound "VO_COMBO"
    }
}

Pattern
{
    Name "Line clear"
    Tags 0,1,2,3,4,5,6,22,23,24,25,26,27,28,29,30,31
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternBeginScript
    {
        if mino.d9 = 2.5
            line color (0,36,154)
        end
        if mino.d9 = 1.25
            line color (118,119,0)
        end
    }
    PatternMinoScript
    {
        set pf.d0 to pf.d0 + mino.d9
        kill mino
        sound "FX_CLR01"
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
    PatternBeginScript
    {
        set pl.d4 to -1
        set pl.d5 to -1
    }
}

IteratePhase
{
    PrimaryIterator
    {
        IteratorExpression pl.d4 != -1
        MinoIteratorScript
        {
            if mino.y > pl.d5
                exit
            end
            if mino.y < pl.d4
                exit
            end
            mutate mino
            sound "FX_LOCK"
        }
    }
    IterateEndScript
    {
        if pl.d4 != -1
            set gravity to 1
        end
        set pl.d6 to 0
    }
}

EliminatePhase
{
    FallSpeed 0.05
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
    }
    StartFallingScript
    {
        set goal to goal - pf.d0
        set pf.d0 to 0
        if ph.d0 = 1
        line color (109,0,23)
        end
        if ph.d0 = 2
        line color (39,0,87)
        end
        if ph.d0 = 3
        line color (116,55,0)
        end
        if ph.d0 >= 4
        line color (0,91,56)
        end
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        set st2.d8 to goal
        if ph.d0 = 1
         sound "VO_LINE01"
         if pf.d4
          set goal to goal - 1
        set st2.d9 to st2.d8 - goal
                message "T-spin"
         end
            sound "FX_MTRS1"
         set goal to goal -1
        set st2.d9 to st2.d8 - goal
        set st0.d0 to st0.d0 + 1
        message "Single"
        end
        if ph.d0 = 2
         sound "VO_LINE02"
         if pf.d4
          set goal to goal - 3
        set st2.d9 to st2.d8 - goal
                message "T-spin"
         end
            sound "FX_MTRS2"
            set goal to goal -3
        set st2.d9 to st2.d8 - goal
        set st0.d1 to st0.d1 + 1
        message "Double"
        end
        if ph.d0 = 3
         sound "VO_LINE03"
            sound "FX_MTRS3"
            set goal to goal -5
        set st2.d9 to st2.d8 - goal
        set st0.d2 to st0.d2 + 1
        message "Triple"
        end
        if ph.d0 >= 4
         sound "VO_TETRS"
            sound "FX_MTRS4"
         set goal to goal -8
        set st2.d9 to st2.d8 - goal
        set st0.d3 to st0.d3 + 1
        message "Tetris!"
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
    GravityEndScript
    {
        set gravity to 0
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if pl.d8 - goal
          set pl.d7 to (((pl.d9-goal)/pl.d9)-(level time/120)) * 20
                    if pl.d7 > 4
                        set pl.d7 to 4
                    end
         mino mood pl.d7
         set pl.d8 to goal
        end
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
         message "LEVEL UP!"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        set st2.d7 to rank
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d0 to 0
        set st0.d1 to 0
        set st0.d2 to 0
        set st0.d3 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st1.d1 to 0
        set st1.d2 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        if level < 5
         mino intensity low
         else
         if level < 10
          mino intensity medium
          else
           mino intensity high
         end
        end
        set pf.d3 to 0
        set goal to (10*level)
        set pf.d7 to 0
        set pl.d9 to goal
        set pl.d8 to goal
    }
    LevelEndScript
    {
        if level >= 15
            win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 7
            if spin
                shape "T-spin 1" at piece.x, piece.y
                if result = 1
            if piece.dir = 3
                pattern "t-spin top" at piece.x,piece.y-1
                  pattern "t-spin bottom" at piece.x,piece.y
              else
                  pattern "t-spin top" at piece.x,piece.y
                  pattern "t-spin bottom" at piece.x,piece.y+1
              end
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end
           set goal to goal -1 
                    set pf.d4 to 1
                else
                    shape "T-spin 2" at piece.x, piece.y
                    if result = 1
            if piece.dir = 3
                pattern "t-spin top" at piece.x,piece.y-1
                  pattern "t-spin bottom" at piece.x,piece.y
              else
                  pattern "t-spin top" at piece.x,piece.y
                  pattern "t-spin bottom" at piece.x,piece.y+1
              end
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
            set goal to goal -1 
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        if pl.d0 > 0
            mix garbage
            garbage pl.d0
            set pl.d0 to 0
        end
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "30 seconds"
    TriggerType LevelTime 90
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_30TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "20 seconds"
    TriggerType LevelTime 100
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_20TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "10 seconds"
    TriggerType LevelTime 110
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_10TIC"
                end
            end
        end
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9 seconds"
    TriggerType LevelTime 111
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_09TIC"
                end
            end
        end
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8 seconds"
    TriggerType LevelTime 112
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_08TIC"
                end
            end
        end
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7 seconds"
    TriggerType LevelTime 113
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_07TIC"
                end
            end
        end
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6 seconds"
    TriggerType LevelTime 114
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_06TIC"
                end
            end
        end
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5 seconds"
    TriggerType LevelTime 115
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_05TIC"
                end
            end
        end
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4 seconds"
    TriggerType LevelTime 116
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_04TIC"
                end
            end
        end
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3 seoncds"
    TriggerType LevelTime 117
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_03TIC"
                end
            end
        end
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2 seconds"
    TriggerType LevelTime 118
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_02TIC"
                end
            end
        end
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1 second"
    TriggerType LevelTime 119
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_01TIC"
                end
            end
        end
        sound "FX_TIC01"
    }
}

CustomEvent
{
    Name "Time up"
    TriggerType LevelTime 120
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                sound "VO_OVRTIME"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Intro"
    TriggerType LevelTime 3
    Script
    {
        if level < 4
            sound "VO_INT05"
        end
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 108
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                sound "VO_COUNTDWN"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Go for a Rank Up"
    TriggerType LevelTime 1
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                message "GO FOR A RANK UP!!!"
                end
            end
        end
    }
}

TEST.TWS#

// Tetris game definition file
//
// By Chris J. Gullette
// Last Modified $Date: 10/27/01 8:22p $
//
// This is a test game for development purposes.
// It is a VERY easy version of tetris, I pieces only, clear one line to level up,
// no time out.

GeneralInfo
{
    PlayfieldColumns        10
    PlayfieldRows           22
    MaxMovementsPerSecond   10
    MaxRotationsPerSecond   5
    GameType                Marathon
    RemoveFromBagAfterUse
    NextPieceQueueSize      8
}

MinoSticky
{
    NotStickyBetweenPieces
    0:  0
}

Mino
{
    Name    "Gray"
    Tags    0
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 0
    MinoList
    {
        "Gray"  (0,1)
        "Gray"  (0,0)
        "Gray"  (0,-1)
        "Gray"  (0,-2)
    }
    Rot0CWOffsetList    (0,0),(0,1),(0,-1),(0,-2)
    Rot90CWOffsetList   (0,0),(1,0),(-1,0),(-2,0)
    Rot180CWOffsetList  (0,0),(0,-1),(0,1),(0,2)
    Rot270CWOffsetList  (0,0),(-1,0),(1,0),(2,0)
}

Pattern
{
    Name            "line clear"
    Tags            0
    Method          Search
    SearchType      Horizontal
    SearchCount     10
    PatternMinoScript
    {
        kill mino
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime          0.0
    PieceStartingLocation   (4,0)
}

FallingPhase
{
    FallSpeed       1
    SoftDropSpeed   0.05
    HardDropSpeed   0.0001
    MoveTolerance   0.2
}

LockPhase
{
    MovementRestartsClock
    Duration        0.5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed       0.05
    LineCollapsedScript
    {
        * Count total lines cleared
        set playfield.d0 to playfield.d0 + 1
    }
    EliminateEndScript
    {
        if playfield.d0 >= 1
          next level
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    // No gravity
    FallSpeed       0
}

CompletionPhase
{
}

EventScripts
{
    LevelStartScript
    {
        set playfield.d0 to 0
    }

    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }

    HardDropStartScript
    {
        next level
    }
}

TET2001.TWS#

//   FILE: Tetris v7.2DP.tws
// SOURCE: Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:37:41 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Marathon
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    NotStickyBetweenPieces
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "J color"
    Tags 0,1
}

Mino
{
    Name "L color"
    Tags 0,2
}

Mino
{
    Name "S color"
    Tags 0,3
}

Mino
{
    Name "Z color"
    Tags 0,4
}

Mino
{
    Name "O color"
    Tags 0,5
}

Mino
{
    Name "T color"
    Tags 0,6
}

Mino
{
    Name "I color"
    Tags 0,7
}

Mino
{
    Name "Garbage"
    Tags 0,31
}

Tetramino
{
    Name "T Tetrimino"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T color" (0,1)
        "T color" (-1,0)
        "T color" (0,0)
        "T color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J Tetrimino"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J color" (-1,1)
        "J color" (-1,0)
        "J color" (0,0)
        "J color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L Tetrimino"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L color" (1,1)
        "L color" (-1,0)
        "L color" (0,0)
        "L color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S Tetrimino"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S color" (0,1)
        "S color" (1,1)
        "S color" (-1,0)
        "S color" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z Tetrimino"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z color" (-1,1)
        "Z color" (0,1)
        "Z color" (0,0)
        "Z color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I Tetrimino"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I color" (-1,0)
        "I color" (0,0)
        "I color" (1,0)
        "I color" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O Tetrimino"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O color" (0,1)
        "O color" (1,1)
        "O color" (0,0)
        "O color" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

GarbageInfo
{
    NormalMino "Garbage"
    NormalCount 9
}

Shape
{
    Name "T-spin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "T-spin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "Line clear"
    Tags 0
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
        sound "FX_CLR01"
    }
}

Level
{
    Name "Level #1"
}

Level
{
    Name "Level #2"
}

Level
{
    Name "Level #3"
}

Level
{
    Name "Level #4"
}

Level
{
    Name "Level #5"
}

Level
{
    Name "Level #6"
}

Level
{
    Name "Level #7"
}

Level
{
    Name "Level #8"
}

Level
{
    Name "Level #9"
}

Level
{
    Name "Level #10"
}

Level
{
    Name "Level #11"
}

Level
{
    Name "Level #12"
}

Level
{
    Name "Level #13"
}

Level
{
    Name "Level #14"
}

Level
{
    Name "Level #15"
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
}

IteratePhase
{
}

EliminatePhase
{
    FallSpeed 0.05
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
    }
    StartFallingScript
    {
        if ph.d0 = 1
        line color (109,0,23)
        end
        if ph.d0 = 2
        line color (39,0,87)
        end
        if ph.d0 = 3
        line color (116,55,0)
        end
        if ph.d0 = 4
            line color (0,91,56)
         if pf.d3
                line color (118,119,0)
         else
            set pf.d3 to 1
            end
        end
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        set st2.d8 to goal
        if ph.d0 = 1
         sound "VO_LINE01"
            sound "FX_MTRS1"
         set goal to goal -1
        set st2.d9 to st2.d8 - goal
            set st0.d0 to st0.d0 + 1
            message "Single"
         set pf.d3 to 0
         if pf.d4
          set goal to goal -1
        set st2.d9 to st2.d8 - goal
                message "T-spin"
         end
        end
        if ph.d0 = 2
         sound "VO_LINE02"
            sound "FX_MTRS2"
            set goal to goal -3
        set st2.d9 to st2.d8 - goal
            set st0.d1 to st0.d1 + 1
            message "Double" 
         set pf.d3 to 0
         if pf.d4
          set goal to goal -3
        set st2.d9 to st2.d8 - goal
                message "T-spin"
         end
        end
        if ph.d0 = 3
         sound "VO_LINE03"
            sound "FX_MTRS3"
            set goal to goal -5
        set st2.d9 to st2.d8 - goal
            set st0.d2 to st0.d2 + 1
            message "Triple"
         set pf.d3 to 0
        end
        if ph.d0 = 4
         sound "VO_TETRS"
            sound "FX_MTRS5"
         if pf.d3
          set goal to goal -4
        set st2.d9 to st2.d8 - goal
        set st0.d9 to st0.d9 + 1
        message "B2B Tetris!!!"
          sound "FX_MTRS6"
                sound "VO_B2B"
         else
         set pf.d3 to 1
        message "Tetris!"
            end
         set goal to goal -8
        set st2.d9 to st2.d8 - goal
        set st0.d3 to st0.d3 + 1
        end
        if goal < 0
         set goal to 0
        end
    }
}

SolidifyPhase
{
}

GravityPhase
{
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if pl.d8 - goal
          set pl.d7 to (((pl.d9-goal)/pl.d9)-(level time/120)) * 20
                    if pl.d7 > 4
                        set pl.d7 to 4
                    end
         mino mood pl.d7
         set pl.d8 to goal
        end
        if goal <= 0
            next level
            if level < 15
                sound "FX_LEVEL"
         message "LEVEL UP!"
            end
        end
    }
}

EventScripts
{
    GameStartScript
    {
        set st2.d7 to rank
        sound "FX_LEVEL"
        set ghost to 1
        set st0.d0 to 0
        set st0.d1 to 0
        set st0.d2 to 0
        set st0.d3 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        set st0.d9 to 0
        set st1.d0 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        if level < 5
         mino intensity low
         else
         if level < 10
          mino intensity medium
          else
           mino intensity high
         end
        end
        set pf.d1 to (5*level)
        set goal to pf.d1
        set pf.d7 to 0
        set pl.d9 to goal
        set pl.d8 to goal
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
            sound "FX_LCK01"
        end
        if piece.id = 1
         if spin
          shape "T-spin1" at piece.x, piece.y
           if result = 1
            if level < 10
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
           set goal to goal -1 
           set pf.d4 to 1
                set st1.d0 to st1.d0 + 1
                    else
            shape "T-spin2" at piece.x, piece.y
                                if result = 1
                        if level < 10
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
                        set goal to goal -1 
                        set pf.d4 to 1
                    set st1.d0 to st1.d0 + 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        if pl.d0 > 0
            mix garbage
            garbage pl.d0
            set pl.d0 to 0
        end
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "30 seconds"
    TriggerType LevelTime 90
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_30TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "20 seconds"
    TriggerType LevelTime 100
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_20TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "10 seconds"
    TriggerType LevelTime 110
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_10TIC"
                end
            end
        end
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9 seconds"
    TriggerType LevelTime 111
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_09TIC"
                end
            end
        end
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8 seconds"
    TriggerType LevelTime 112
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_08TIC"
                end
            end
        end
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7 seconds"
    TriggerType LevelTime 113
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_07TIC"
                end
            end
        end
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6 seconds"
    TriggerType LevelTime 114
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_06TIC"
                end
            end
        end
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5 seconds"
    TriggerType LevelTime 115
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_05TIC"
                end
            end
        end
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4 seconds"
    TriggerType LevelTime 116
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_04TIC"
                end
            end
        end
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3 seconds"
    TriggerType LevelTime 117
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_03TIC"
                end
            end
        end
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2 seconds"
    TriggerType LevelTime 118
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_02TIC"
                end
            end
        end
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1 second"
    TriggerType LevelTime 119
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_01TIC"
                end
            end
        end
        sound "FX_TIC01"
    }
}

CustomEvent
{
    Name "Time up"
    TriggerType LevelTime 120
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                sound "VO_OVRTIME"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Go for a Tetris"
    TriggerType GameTime 3
    Script
    {
        if level < 4
            sound "VO_INT01"
        end
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 108
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                 sound "VO_COUNTDWN"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Go for a Rank Up"
    TriggerType LevelTime 1
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                message "GO FOR A RANK UP!!!"
                end
            end
        end
    }
}

TNT.TWS#

//   FILE: Sticky Tetris v7.2DP.tws
// SOURCE: Sticky Tetris v7.2DP
//   DATE: Wed, Oct 31, 2001  12:37:27 PM


GeneralInfo
{
    PlayfieldColumns 10
    PlayfieldRows 22
    MaxMovementsPerSecond 15
    MaxRotationsPerSecond 5
    GameType Marathon
    RemoveFromBagAfterUse
    NextPieceQueueSize 8
}

MinoSticky
{
    1: 1
    2: 2
    3: 3
    4: 4
    5: 5
    6: 6
    7: 7
}

Mino
{
    Name "T"
    Tags 0,1
    AltMino "L"
    AltChance 20
}

Mino
{
    Name "S"
    Tags 0,2
    AltMino "J"
    AltChance 20
}

Mino
{
    Name "Z"
    Tags 0,3
    AltMino "O"
    AltChance 20
}

Mino
{
    Name "L"
    Tags 0,4
    AltMino "Z"
    AltChance 20
}

Mino
{
    Name "O"
    Tags 0,5
    AltMino "I"
    AltChance 20
}

Mino
{
    Name "I"
    Tags 0,6
    AltMino "S"
    AltChance 20
}

Mino
{
    Name "J"
    Tags 0,7
    AltMino "T"
    AltChance 20
}

Mino
{
    Name "garbage"
    Antigravity
    Tags 0,30
}

Mino
{
    Name "special garbage"
    Antigravity
    Tags 31
}

Tetramino
{
    Name "T"
    NumberInBag 1
    ID 1
    MinoList
    {
        "T" (0,1)
        "T" (-1,0)
        "T" (0,0)
        "T" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "J"
    NumberInBag 1
    ID 2
    MinoList
    {
        "J" (-1,1)
        "J" (-1,0)
        "J" (0,0)
        "J" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "L"
    NumberInBag 1
    ID 3
    MinoList
    {
        "L" (1,1)
        "L" (-1,0)
        "L" (0,0)
        "L" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "S"
    NumberInBag 1
    ID 4
    MinoList
    {
        "S" (0,1)
        "S" (1,1)
        "S" (-1,0)
        "S" (0,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "Z"
    NumberInBag 1
    ID 5
    MinoList
    {
        "Z" (-1,1)
        "Z" (0,1)
        "Z" (0,0)
        "Z" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,0),(1,0),(1,-1),(0,2),(1,2)
    Rot180CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot270CWOffsetList (0,0),(-1,0),(-1,-1),(0,2),(-1,2)
}

Tetramino
{
    Name "I"
    NumberInBag 1
    ID 6
    MinoList
    {
        "I" (-1,0)
        "I" (0,0)
        "I" (1,0)
        "I" (2,0)
    }
    Rot0CWOffsetList (0,0),(-1,0),(2,0),(-1,0),(2,0)
    Rot90CWOffsetList (-1,0),(0,0),(0,0),(0,1),(0,-2)
    Rot180CWOffsetList (-1,1),(1,1),(-2,1),(1,0),(-2,0)
    Rot270CWOffsetList (0,1),(0,1),(0,1),(0,-1),(0,2)
}

Tetramino
{
    Name "O"
    NumberInBag 1
    ID 7
    MinoList
    {
        "O" (0,1)
        "O" (1,1)
        "O" (0,0)
        "O" (1,0)
    }
    Rot0CWOffsetList (0,0),(0,0),(0,0),(0,0),(0,0)
    Rot90CWOffsetList (0,-1),(0,-1),(0,-1),(0,-1),(0,-1)
    Rot180CWOffsetList (-1,-1),(-1,-1),(-1,-1),(-1,-1),(-1,-1)
    Rot270CWOffsetList (-1,0),(-1,0),(-1,0),(-1,0),(-1,0)
}

GarbageInfo
{
    NormalMino "garbage"
    NormalCount pf.d9
    SpecialMino "special garbage"
    SpecialCount pf.d8
}

Shape
{
    Name "tspin1"
    Hotspot (7,8)
    ShapeCoords (6,9),(6,7),(8,7)
}

Shape
{
    Name "tspin2"
    Hotspot (7,8)
    ShapeCoords (6,7),(8,9),(8,7)
}

Pattern
{
    Name "line clear"
    Tags 0,30,31
    Method Search
    SearchType Horizontal
    SearchCount 10
    PatternMinoScript
    {
        kill mino
        sound "FX_CLR01"
    }
    PatternEndScript
    {
        set st1.d3 to st1.d3 + 1
    }
}

Pattern
{
    Name "Critical Mass Blue"
    Tags 1
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
        if level < 6
            sound "VO_MASS"
        end
    }
}

Pattern
{
    Name "Critical Mass Cyan"
    Tags 2
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
        if level < 6
            sound "VO_MASS"
        end
    }
}

Pattern
{
    Name "Critical Mass Green"
    Tags 3
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
        if level < 6
            sound "VO_MASS"
        end
    }
}

Pattern
{
    Name "Critical Mass Red"
    Tags 4
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
        if level < 6
            sound "VO_MASS"
        end
    }
}

Pattern
{
    Name "Critical Mass Maroon"
    Tags 5
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
        if level < 6
            sound "VO_MASS"
        end
    }
}

Pattern
{
    Name "Critical Mass Yellow"
    Tags 6
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
        if level < 6
            sound "VO_MASS"
        end
    }
}

Pattern
{
    Name "Critical Mass Purple"
    Tags 7
    Method Search
    SearchType FloodFill4D
    SearchCount 24
    PatternMinoScript
    {
        kill mino
        message "Critical Mass!"
        sound "FX_MASS1"
    }
    PatternEndScript
    {
        set st1.d7 to ((st1.d7 / 24) + 1)
        if level < 6
            sound "VO_MASS"
        end
    }
}

GenerationPhase
{
    GenerationTime ((.8-((level-1)*.007))^(level-1))/20
    PieceStartingLocation (4,0)
    GenerationBeginScript
    {
        set pf.d2 to 1
        set pf.d4 to 0
    }
    GenerationEndScript
    {
        set st0.d4 to st0.d4 + 1
    }
}

FallingPhase
{
    FallSpeed (.8-((level-1)*.007))^(level-1)
    SoftDropSpeed ((.8-((level-1)*.007))^(level-1))/20
    HardDropSpeed 0.0001
    MoveTolerance 1
}

LockPhase
{
    MovementRestartsClock
    Duration 0.5
}

PatternPhase
{
    PatternBeginScript
    {
        set ph.d0 to 0
    }
    PatternEndScript
    {
        if ph.d0 = 1
            set pf.d6 to pf.d6 + 1
        end
    }
}

IteratePhase
{
    PrimaryIterator
    {
        IteratorExpression pf.d3=1
        MinoIteratorScript
        {
            kill mino
            if level < 15
                sound "FX_LEVEL"
            message "LEVEL UP!"
            end
            set pf.d3 to pf.d3+1
        }
    }
}

EliminatePhase
{
    FallSpeed 0.05
    EliminateBeginScript
    {
        set ph.d0 to 0
    }
    LineCollapsedScript
    {
        set ph.d0 to ph.d0 + 1
    }
    GroupLandedScript
    {
        sound "FX_LNE01"
    }
    EliminateEndScript
    {
        if ph.d0 > 0
         if cascades = 2
         set st1.d4 to st1.d4 + 2
         end
            if cascades > 2
            set st1.d4 to st1.d4 + 1
            end
        end
        if ph.d0 >= st1.d6
            set st1.d6 to ph.d0
        end
    }
}

SolidifyPhase
{
    IteratorTags 31
    MinoIteratorScript
    {
        set ph.d0 to ph.d0+ 1
    }
    SolidifyEndScript
    {
        if ph.d0 = 0
            set pf.d3 to pf.d3 + 1
            if pf.d3 = 1
                touch
            end
            next level
        end
    }
}

GravityPhase
{
    GravityEnabled
    FallSpeed 0.05
    GroupLandedScript
    {
        sound "FX_LOCK"
    }
}

CompletionPhase
{
    CompletionBeginScript
    {
        if pl.d8 - goal
          set pl.d7 to (((pl.d9-goal)/pl.d9)-(level time/120)) * 20
                    if pl.d7 > 4
                        set pl.d7 to 4
                    end
         mino mood pl.d7
         set pl.d8 to goal
        end
    }
    CompletionEndScript
    {
        if cascades > st1.d5
            set st1.d5 to cascades
        end
        if cascades = 2
        message "2 Cascade"
        line color (109,0,23)
         sound "FX_MTRS1"
         sound "VO_CAS02"
        end
        if cascades = 3
        message "3 Cascades"
        line color (39,0,87)
         sound "FX_MTRS2"
         sound "VO_CAS03"
        end
        if cascades = 4
        message "4 Cascades"
        line color (39,0,87)
         sound "FX_MTRS3"
         sound "VO_CAS04"
        end
        if cascades = 5
        message "5 Cascades"
        line color (116,55,0)
         sound "FX_MTRS4"
         sound "VO_CAS05"
        end
        if cascades = 6
        message "6 Cascades"
        line color (116,55,0)
         sound "FX_MTRS5"
         sound "VO_CAS06"
        end
        if cascades = 7
        message "7 Cascades"
        line color (0,91,56)
         sound "FX_MTRS6"
         sound "VO_CAS07"
        end
        if cascades = 8
            message "8 Cascades"
        line color (0,91,56)
         sound "FX_MTRS6"
         sound "VO_CAS08"
        end
        if cascades = 9
            message "9 Cascades"
        line color (118,119,0)
         sound "FX_MTRS6"
         sound "VO_CAS09"
        end
        if cascades = 10
            message "10 Cascades"
        line color (118,119,0)
         sound "FX_MTRS6"
         sound "VO_CAS10"
        end
        if cascades >= 11
            message "Super Cascade!!!"
        line color (0,36,154)
            sound "VO_AMAZING"
         sound "FX_MTRS6"
        end
    }
}

EventScripts
{
    GameStartScript
    {
        set st2.d7 to rank
        sound "FX_LEVEL"
        set ghost to 1
        set st1.d3 to 0
        set st1.d4 to 0
        set st1.d5 to 0
        set st1.d6 to 0
        set st1.d7 to 0
        set st0.d4 to 0
        set st0.d5 to 0
        set st0.d7 to 0
        set st0.d8 to 0
        line color (30,30,30)
    }
    LevelStartScript
    {
        if level < 5
         mino intensity low
         else
         if level < 10
          mino intensity medium
          else
           mino intensity high
         end
        end
        set pf.d0 to 0
        set pf.d8 to 0
        set pf.d9 to 5
        mixed garbage level
        set pf.d9 to 0
        set pf.d8 to 5
        mixed garbage 1
        set pf.d3 to 0
        set pf.d7 to 0
        set pl.d9 to goal
        set pl.d8 to goal
    }
    LevelEndScript
    {
        if level >= 15
         sound "VO_EXLNT"
         win
        end
    }
    MoveSuccessfulScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    MoveFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    RotateSuccessfulScript
    {
        sound "FX_RTA01"
        set st0.d5 to st0.d5 + 1
    }
    RotateFailedScript
    {
        sound "FX_LND01"
        set st0.d5 to st0.d5 + 1
    }
    HardDropStartScript
    {
        sound "FX_HRDDP"
        set st0.d5 to st0.d5 + 1
        set pf.d2 to 0
    }
    SoftDropStepScript
    {
        sound "FX_FALL"
        set st0.d5 to st0.d5 + 1
    }
    FallStepScript
    {
        sound "FX_FALL"
    }
    TouchdownScript
    {
        if pf.d2
         sound "FX_LND01"
        end
    }
    LockdownScript
    {
        if pf.d2
         sound "FX_LCK01"
        end
        if piece.id = 1
            if spin
                shape "T-spin1" at piece.x, piece.y
                if result = 1
           if level < 6
            sound "VO_TSPIN"
           else
            sound "FX_RWD01"
           end
                    set pf.d4 to 1
                else
                    shape "T-spin2" at piece.x, piece.y
                    if result = 1
            if level < 6
             sound "VO_TSPIN"
            else
             sound "FX_RWD01"
            end
                        set pf.d4 to 1
                    end
                end
            end
        end
    }
    GameSecondScript
    {
        set st0.d8 to game time
    }
    LevelSecondScript
    {
        set st0.d7 to level time
    }
}

CustomEvent
{
    Name "Intro"
    TriggerType LevelTime 3
    Script
    {
        if level < 4
            sound "VO_INT06"
        end
    }
}

CustomEvent
{
    Name "Time Up"
    TriggerType LevelTime 120
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                sound "VO_OVRTIME"
                end
            end
        end
    }
}

CustomEvent
{
    Name "30"
    TriggerType LevelTime 90
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_30TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "20"
    TriggerType LevelTime 100
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_20TIC"
                end
            end
        end
    }
}

CustomEvent
{
    Name "10"
    TriggerType LevelTime 110
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_10TIC"
                end
            end
        end
        sound "FX_TIC10"
    }
}

CustomEvent
{
    Name "9"
    TriggerType LevelTime 111
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_09TIC"
                end
            end
        end
        sound "FX_TIC09"
    }
}

CustomEvent
{
    Name "8"
    TriggerType LevelTime 112
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_08TIC"
                end
            end
        end
        sound "FX_TIC08"
    }
}

CustomEvent
{
    Name "7"
    TriggerType LevelTime 113
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_07TIC"
                end
            end
        end
        sound "FX_TIC07"
    }
}

CustomEvent
{
    Name "6"
    TriggerType LevelTime 114
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_06TIC"
                end
            end
        end
        sound "FX_TIC06"
    }
}

CustomEvent
{
    Name "5"
    TriggerType LevelTime 115
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_05TIC"
                end
            end
        end
        sound "FX_TIC05"
    }
}

CustomEvent
{
    Name "4"
    TriggerType LevelTime 116
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_04TIC"
                end
            end
        end
        sound "FX_TIC04"
    }
}

CustomEvent
{
    Name "3"
    TriggerType LevelTime 117
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_03TIC"
                end
            end
        end
        sound "FX_TIC03"
    }
}

CustomEvent
{
    Name "2"
    TriggerType LevelTime 118
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_02TIC"
                end
            end
        end
        sound "FX_TIC02"
    }
}

CustomEvent
{
    Name "1"
    TriggerType LevelTime 119
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                    sound "VO_01TIC"
                end
            end
        end
        sound "FX_TIC01"
    }
}

CustomEvent
{
    Name "Countdown"
    TriggerType LevelTime 108
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                sound "VO_COUNTDWN"
                end
            end
        end
    }
}

CustomEvent
{
    Name "Go for a Rank Up"
    TriggerType LevelTime 1
    Script
    {
        if rank = st2.d7
            if level >= rank
                if rank < 15
                 message "GO FOR A RANK UP!!!"
                end
            end
        end
    }
}