Discussion Board for the Collection of Graphic Programs by TheBOB.
#4
"CHOPPER" revisited:

Code: (Select All)
'                                                                  °°      '
'                    °°                                          °°°      '
'            °°°°°° °°°                                          °°°      '
'          °°°°°°° °°°                                          °°°      '
'          °°°  °°  °°°              °°    °°                  °°°      '
'        °°°  °°  °°  °°      °° °°°°  °°°°      °°°    °° °° °°        '
'      °°°°        °° °°°  °°°°°° °°°°  °°°°    °°°°  °°°°°°° °°        '
'      °°°°      °° °°°°  °°° °°°°°°°°° °°°°°°  °° °°  °°°°°°  °°        '
'      ²²²        ²²²²²²²  ²²  ²² ²²²²²²²²²²²²²² ²²²²²  ²²²²    ²²        '
'        ²²  ²²² ²²² ²²² ²²²  ²²  ²² ²²² ²² ²²²²²²²² ²²²²²²    ²²        '
'        ²²  ²²²  ²²²  ²²  ²²² ²²  ²²² ²² ²²² ²² ²²² ²² ²²²²    ²²²        '
'        ²²²²²²  ²²  ²²  ²²²²²  ²²²²²  ²²²²²  ²²²²²²  ²²    ²²²²      '
'                      ²²          ²²²²  ²²²²                    ²²        '
'                                  ²²    ²²                                '
'                                ²²²    ²²²                                '
'                                ²²    ²²                                '
'                                                                          '
'        CHOPPER.BAS - Copyright (C) 2005 by Bob Seguin (Freeware)        '
'                                                                          '
'***************************************************************************'

DEFINT A-Z

'----------------------------------------------------------------------------
'$DYNAMIC

DIM SHARED Box(26000)
DIM SHARED MenuBOX(500)
DIM SHARED MenuBOX2(500)
DIM SHARED MenuBOX3(4000)
DIM SHARED CustomCOLORS(9, 20)
DIM SHARED FChar(1 TO 124)

DIM SHARED LB, RB, MouseX, MouseY
DIM SHARED TopMENU, Phase, Item, BarBOX, PaintITEM
DIM SHARED BikeCOLOR, FlameSTYLE, MenuITEM

CONST Degree! = 3.14159 / 180

i& = _LOADIMAGE("chopper.ico", 32)
IF i& < -1 THEN
    _ICON i&
    _FREEIMAGE i& ' release image handle after setting icon
END IF

_TITLE "Chopper by Bob Seguin"

DEF SEG = VARSEG(CustomCOLORS(0, 0))
BLOAD CheckFile$("CHColors.BSV"), VARPTR(CustomCOLORS(0, 0))
DEF SEG

SCREEN 12

BikeCOLOR = 3
FlameSTYLE = 1
SetPALETTE

ChopperIDE

DO
    MouseSTATUS LB, RB, MouseX, MouseY

    SELECT CASE MenuITEM
        CASE 1: ProjectMENU
        CASE 2: HelpMENU
    END SELECT

    SELECT CASE MouseY
        CASE 32 TO 46: MenuBAR 1
        CASE 294 TO 479
            SELECT CASE Phase
                CASE IS < 8: Assembly1
                CASE 8 TO 20: Assembly2
                CASE 21: HandleBARS 1
                CASE 22 TO 24: Assembly3
                CASE 25: PaintSHOP 1
            END SELECT
        CASE ELSE
            IF TopMENU THEN MenuBAR 0
            IF Item THEN DeLIGHT
            IF BarBOX THEN HandleBARS 0
            IF PaintITEM THEN PaintSHOP 0
    END SELECT

    IF Splash = 0 AND MouseY < 60 THEN
        LINE (146, 154)-(493, 356), 0, BF
        LINE (146, 288)-(493, 293), 1, BF
        LINE (146, 288)-(493, 288), 2, BF
        LINE (146, 293)-(493, 293), 5, BF
        LINE (146, 252)-(493, 280), 2, BF
        SetPALETTE
        Splash = 1
    END IF

    ClearMOUSE
    LoadPHASE
LOOP

END '************************** PALETTE DATA ********************************

PaletteDATA:
DATA 4,2,12,6,4,14,12,12,20
DATA 31,31,38,46,46,50,0,0,0

CustomCOLORS:
DATA 6,7,8,10,12,13,14

FlameCOLOR:
DATA 63,63,63,63,32,12,63,52,0
SilverCOLOR:
DATA 63,63,63,38,38,35,53,53,48
GoldCOLOR:
DATA 63,63,42,63,42,21,63,52,32
WhiteCOLOR:
DATA 63,63,63,48,48,53,53,53,58

REM $STATIC
SUB Assembly1
    SHARED ItemX, ItemY, Frame, Extension, FrameCOLOR
    SHARED ForkX, ForkY, WheelFX, WheelFY, WheelRX, WheelRY, BarX, BarY
    SHARED OuterRADIUS, InnerRADIUS, FrontINDEX, RearINDEX, FrameX, FrameY

    SELECT CASE Phase
        CASE 1
            SELECT CASE MouseX
                CASE 116 TO 310
                    IF Item <> 1 THEN
                        DeLIGHT
                        ItemX = 156: ItemY = 452
                        HiLIGHT
                        Item = 1
                    END IF
                CASE 330 TO 523
                    IF Item <> 2 THEN
                        DeLIGHT
                        ItemX = 390: ItemY = 452
                        HiLIGHT
                        Item = 2
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 2
            SELECT CASE MouseX
                CASE 20 TO 234
                    IF Item <> 3 THEN
                        DeLIGHT
                        ItemX = 90: ItemY = 430
                        HiLIGHT
                        Item = 3
                    END IF
                CASE 255 TO 384
                    IF Item <> 4 THEN
                        DeLIGHT
                        ItemX = 271: ItemY = 430
                        HiLIGHT
                        Item = 4
                    END IF
                CASE 405 TO 560
                    IF Item <> 5 THEN
                        DeLIGHT
                        ItemX = 431: ItemY = 430
                        HiLIGHT
                        Item = 5
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 3
            SELECT CASE MouseX
                CASE 110 TO 240
                    IF Item <> 6 THEN
                        DeLIGHT
                        ItemX = 112: ItemY = 440
                        HiLIGHT
                        Item = 6
                    END IF
                CASE 260 TO 390
                    IF Item <> 7 THEN
                        DeLIGHT
                        ItemX = 270: ItemY = 440
                        HiLIGHT
                        Item = 7
                    END IF
                CASE 410 TO 540
                    IF Item <> 8 THEN
                        DeLIGHT
                        ItemX = 420: ItemY = 440
                        HiLIGHT
                        Item = 8
                    END IF
            END SELECT
        CASE 4
            IF Extension = 1 OR Extension = 2 THEN
                SELECT CASE MouseX
                    CASE 40 TO 150
                        IF Item <> 9 THEN
                            DeLIGHT
                            ItemX = 40: ItemY = 445
                            HiLIGHT
                            Item = 9
                        END IF
                    CASE 170 TO 280
                        IF Item <> 10 THEN
                            DeLIGHT
                            ItemX = 180: ItemY = 445
                            HiLIGHT
                            Item = 10
                        END IF
                    CASE 340 TO 450
                        IF Item <> 11 THEN
                            DeLIGHT
                            ItemX = 330: ItemY = 445
                            HiLIGHT
                            Item = 11
                        END IF
                    CASE 470 TO 600
                        IF Item <> 12 THEN
                            DeLIGHT
                            ItemX = 470: ItemY = 445
                            HiLIGHT
                            Item = 12
                        END IF
                    CASE ELSE
                        DeLIGHT
                END SELECT
            ELSE
                SELECT CASE MouseX
                    CASE 20 TO 138
                        IF Item <> 13 THEN
                            DeLIGHT
                            ItemX = 12: ItemY = 445
                            HiLIGHT
                            Item = 13
                        END IF
                    CASE 139 TO 232
                        IF Item <> 14 THEN
                            DeLIGHT
                            ItemX = 140: ItemY = 445
                            HiLIGHT
                            Item = 14
                        END IF
                    CASE 264 TO 386
                        IF Item <> 15 THEN
                            DeLIGHT
                            ItemX = 250: ItemY = 445
                            HiLIGHT
                            Item = 15
                        END IF
                    CASE 387 TO 490
                        IF Item <> 16 THEN
                            DeLIGHT
                            ItemX = 372: ItemY = 445
                            HiLIGHT
                            Item = 16
                        END IF
                    CASE 491 TO 600
                        IF Item <> 17 THEN
                            DeLIGHT
                            ItemX = 490: ItemY = 445
                            HiLIGHT
                            Item = 17
                        END IF
                    CASE ELSE
                        DeLIGHT
                END SELECT
            END IF
        CASE 5
            SELECT CASE MouseX
                CASE 80 TO 198
                    IF Item <> 18 THEN
                        DeLIGHT
                        ItemX = 70: ItemY = 440
                        HiLIGHT
                        Item = 18
                    END IF
                CASE 199 TO 318
                    IF Item <> 19 THEN
                        DeLIGHT
                        ItemX = 190: ItemY = 440
                        HiLIGHT
                        Item = 19
                    END IF
                CASE 319 TO 438
                    IF Item <> 20 THEN
                        DeLIGHT
                        ItemX = 320: ItemY = 440
                        HiLIGHT
                        Item = 20
                    END IF
                CASE 439 TO 560
                    IF Item <> 21 THEN
                        DeLIGHT
                        ItemX = 440: ItemY = 440
                        HiLIGHT
                        Item = 21
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 6
            SELECT CASE MouseX
                CASE 80 TO 198
                    IF Item <> 22 THEN
                        DeLIGHT
                        ItemX = 70: ItemY = 440
                        HiLIGHT
                        Item = 22
                    END IF
                CASE 199 TO 318
                    IF Item <> 23 THEN
                        DeLIGHT
                        ItemX = 190: ItemY = 440
                        HiLIGHT
                        Item = 23
                    END IF
                CASE 319 TO 438
                    IF Item <> 24 THEN
                        DeLIGHT
                        ItemX = 320: ItemY = 440
                        HiLIGHT
                        Item = 24
                    END IF
                CASE 439 TO 560
                    IF Item <> 25 THEN
                        DeLIGHT
                        ItemX = 440: ItemY = 440
                        HiLIGHT
                        Item = 25
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 7
            SELECT CASE MouseX
                CASE 70 TO 169
                    IF Item <> 26 THEN
                        DeLIGHT
                        ItemX = 50: ItemY = 442
                        HiLIGHT
                        Item = 26
                    END IF
                CASE 170 TO 269
                    IF Item <> 27 THEN
                        DeLIGHT
                        ItemX = 150: ItemY = 442
                        HiLIGHT
                        Item = 27
                    END IF
                CASE 270 TO 369
                    IF Item <> 28 THEN
                        DeLIGHT
                        ItemX = 250: ItemY = 442
                        HiLIGHT
                        Item = 28
                    END IF
                CASE 370 TO 469
                    IF Item <> 29 THEN
                        DeLIGHT
                        ItemX = 350: ItemY = 442
                        HiLIGHT
                        Item = 29
                    END IF
                CASE 470 TO 569
                    IF Item <> 30 THEN
                        DeLIGHT
                        ItemX = 450: ItemY = 442
                        HiLIGHT
                        Item = 30
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
    END SELECT

    IF LB = -1 AND Item <> 0 THEN
        SELECT CASE Item
            CASE 1, 2
                Frame = Item
                DeLIGHT
                Phase = 2
            CASE 3, 4, 5
                FrameCOLOR = Item - 2
                DeLIGHT
                Phase = 3
            CASE 6, 7, 8
                Extension = Item - 5
                DeLIGHT
                GOSUB SetFRAME
                DeLIGHT
            CASE 9 TO 17
                GOSUB SetFORK
            CASE 18 TO 21
                GOSUB SetTIREF
                Phase = 6
            CASE 22 TO 25
                GOSUB SetTIRER
                Phase = 7
            CASE 26 TO 30
                GOSUB SetWHEELS
                Phase = 8
        END SELECT
    END IF

    EXIT SUB

    '************************* SUBROUTINE SECTION BEGINS ************************

    SetFRAME:
    SELECT CASE Frame
        CASE 1
            SELECT CASE Extension
                CASE 1
                    IF FrameCOLOR = 1 THEN LoadIMAGE 255, 130, CheckFile$("CHFrmRP.BSV"): loadfile CheckFile$("CHNkRP.BSV")
                    IF FrameCOLOR = 2 THEN LoadIMAGE 255, 130, CheckFile$("CHFrmRB.BSV"): loadfile CheckFile$("CHNkRB.BSV")
                    IF FrameCOLOR = 3 THEN LoadIMAGE 255, 130, CheckFile$("CHFrmRC.BSV"): loadfile CheckFile$("CHNkRC.BSV")
                    FrameX = 245: FrameY = 115
                    PUT (247, 125), Box(), AND
                    PUT (247, 125), Box(150)
                    CIRCLE (270, 262), 6, 5, , , .3
                    PAINT STEP(0, 0), 5
                    DRAW "U nR40 D R40 D L40"
                    PSET (316, 258), 5: DRAW "R120 F L121"
                    PSET (316, 266), 5: DRAW "R126 F L127"
                    LINE (310, 258)-(318, 262), 5, BF
                    LINE (311, 263)-(319, 267), 5, BF
                    LINE (380, 258)-(388, 262), 5, BF
                    LINE (382, 263)-(390, 267), 5, BF
                CASE 2
                    IF FrameCOLOR = 1 THEN LoadIMAGE 261, 130, CheckFile$("CHFrmRP.BSV"): loadfile CheckFile$("CHNkXP.BSV")
                    IF FrameCOLOR = 2 THEN LoadIMAGE 261, 130, CheckFile$("CHFrmRB.BSV"): loadfile CheckFile$("CHNkXB.BSV")
                    IF FrameCOLOR = 3 THEN LoadIMAGE 261, 130, CheckFile$("CHFrmRC.BSV"): loadfile CheckFile$("CHNkXC.BSV")
                    FrameX = 251: FrameY = 115
                    PUT (252, 124), Box(), AND
                    PUT (252, 124), Box(150)
                    CIRCLE (270, 262), 6, 5, , , .3
                    PAINT STEP(0, 0), 5
                    DRAW "U nR47 D R47 D L47"
                    PSET (324, 258), 5: DRAW "R120 F L121"
                    PSET (324, 266), 5: DRAW "R126 F L127"
                    LINE (316, 258)-(324, 262), 5, BF
                    LINE (318, 263)-(326, 267), 5, BF
                    LINE (386, 258)-(394, 262), 5, BF
                    LINE (389, 263)-(396, 267), 5, BF
                CASE 3
                    IF FrameCOLOR = 1 THEN LoadIMAGE 275, 130, CheckFile$("CHFrmRP.BSV"): loadfile CheckFile$("CHNkXXP.BSV")
                    IF FrameCOLOR = 2 THEN LoadIMAGE 275, 130, CheckFile$("CHFrmRB.BSV"): loadfile CheckFile$("CHNkXXB.BSV")
                    IF FrameCOLOR = 3 THEN LoadIMAGE 275, 130, CheckFile$("CHFrmRC.BSV"): loadfile CheckFile$("CHNkXXC.BSV")
                    FrameX = 265: FrameY = 115
                    PUT (267, 125), Box(), AND
                    PUT (267, 125), Box(150)
                    CIRCLE (270, 262), 6, 5, , , .3
                    PAINT STEP(0, 0), 5
                    DRAW "U nR65 D R65 D L65"
                    PSET (339, 258), 5: DRAW "R120 F L121"
                    PSET (339, 266), 5: DRAW "R126 F L127"
                    LINE (331, 258)-(339, 262), 5, BF
                    LINE (333, 263)-(341, 267), 5, BF
                    LINE (401, 258)-(409, 262), 5, BF
                    LINE (404, 263)-(411, 267), 5, BF
            END SELECT
        CASE 2
            SELECT CASE Extension
                CASE 1
                    IF FrameCOLOR = 1 THEN LoadIMAGE 250, 126, CheckFile$("CHFrmXP.BSV"): loadfile CheckFile$("CHNkRP.BSV")
                    IF FrameCOLOR = 2 THEN LoadIMAGE 250, 126, CheckFile$("CHFrmXB.BSV"): loadfile CheckFile$("CHNkRB.BSV")
                    IF FrameCOLOR = 3 THEN LoadIMAGE 250, 126, CheckFile$("CHFrmXC.BSV"): loadfile CheckFile$("CHNkRC.BSV")
                    FrameX = 250: FrameY = 126: DropSHADOW = 0
                    PUT (245, 124), Box(), AND
                    PUT (245, 124), Box(150)
                    CIRCLE (270, 262), 6, 5, , , .3
                    PAINT STEP(0, 0), 5
                    DRAW "U nR50 D R50 D L50"
                    PSET (324, 258), 5: DRAW "R130 F L131"
                    PSET (324, 266), 5: DRAW "R136 F L137"
                    LINE (316, 258)-(324, 262), 5, BF
                    LINE (317, 263)-(325, 267), 5, BF
                    LINE (360, 258)-(396, 262), 5, BF
                    LINE (362, 263)-(398, 267), 5, BF
                CASE 2
                    IF FrameCOLOR = 1 THEN LoadIMAGE 256, 126, CheckFile$("CHFrmXP.BSV"): loadfile CheckFile$("CHNkXP.BSV")
                    IF FrameCOLOR = 2 THEN LoadIMAGE 256, 126, CheckFile$("CHFrmXB.BSV"): loadfile CheckFile$("CHNkXB.BSV")
                    IF FrameCOLOR = 3 THEN LoadIMAGE 256, 126, CheckFile$("CHFrmXC.BSV"): loadfile CheckFile$("CHNkXC.BSV")
                    FrameX = 256: FrameY = 126: DropSHADOW = 0
                    PUT (251, 124), Box(), AND
                    PUT (251, 124), Box(150)
                    CIRCLE (276, 262), 6, 5, , , .3
                    PAINT STEP(0, 0), 5
                    DRAW "U nR50 D R50 D L50"
                    PSET (328, 258), 5: DRAW "R130 F L131"
                    PSET (328, 266), 5: DRAW "R136 F L137"
                    LINE (324, 258)-(332, 262), 5, BF
                    LINE (325, 263)-(333, 267), 5, BF
                    LINE (368, 258)-(404, 262), 5, BF
                    LINE (370, 263)-(406, 267), 5, BF
                CASE 3
                    IF FrameCOLOR = 1 THEN LoadIMAGE 270, 126, CheckFile$("CHFrmXP.BSV"): loadfile CheckFile$("CHNkXXP.BSV")
                    IF FrameCOLOR = 2 THEN LoadIMAGE 270, 126, CheckFile$("CHFrmXB.BSV"): loadfile CheckFile$("CHNkXXB.BSV")
                    IF FrameCOLOR = 3 THEN LoadIMAGE 270, 126, CheckFile$("CHFrmXC.BSV"): loadfile CheckFile$("CHNkXXC.BSV")
                    FrameX = 270: FrameY = 126: DropSHADOW = 0
                    PUT (265, 126), Box(), AND
                    PUT (265, 126), Box(150)
                    CIRCLE (278, 262), 6, 5, , , .3
                    PAINT STEP(0, 0), 5
                    DRAW "U nR58 D R58 D L58"
                    PSET (338, 258), 5: DRAW "R130 F L131"
                    PSET (338, 266), 5: DRAW "R138 F L139"
                    LINE (333, 258)-(341, 262), 5, BF
                    LINE (335, 263)-(343, 267), 5, BF
                    LINE (380, 258)-(416, 262), 5, BF
                    LINE (383, 263)-(419, 267), 5, BF
            END SELECT
    END SELECT
    Phase = 4
    RETURN

    SetFORK:
    IF Frame = 1 THEN
        SELECT CASE Extension
            CASE 1
                SELECT CASE Item
                    CASE 9: loadfile CheckFile$("CHSprRP.BSI"): ForkX = 194: ForkY = 108
                    CASE 10: loadfile CheckFile$("CHSprRC.BSI"): ForkX = 194: ForkY = 108
                    CASE 11: loadfile CheckFile$("CHFrkGRP.BSI"): ForkX = 203: ForkY = 114
                    CASE 12: loadfile CheckFile$("CHFrkGRC.BSI"): ForkX = 203: ForkY = 114
                END SELECT
            CASE 2
                SELECT CASE Item
                    CASE 9: loadfile CheckFile$("CHSprXP.BSI"): ForkX = 184: ForkY = 108
                    CASE 10: loadfile CheckFile$("CHSprXC.BSI"): ForkX = 184: ForkY = 108
                    CASE 11: loadfile CheckFile$("CHFrkGXP.BSI"): ForkX = 193: ForkY = 113
                    CASE 12: loadfile CheckFile$("CHFrkGXC.BSI"): ForkX = 193: ForkY = 113
                END SELECT
            CASE 3
                SELECT CASE Item
                    CASE 13: loadfile CheckFile$("CHSprXXP.BSI"): ForkX = 176: ForkY = 113
                    CASE 14: loadfile CheckFile$("CHSprXXC.BSI"): ForkX = 176: ForkY = 113
                    CASE 15: loadfile CheckFile$("CHFrkXXP.BSI"): ForkX = 183: ForkY = 116
                    CASE 16: loadfile CheckFile$("CHFrkXXM.BSI"): ForkX = 183: ForkY = 116
                    CASE 17: loadfile CheckFile$("CHFrkXXC.BSI"): ForkX = 183: ForkY = 116
                END SELECT
        END SELECT
    ELSE
        SELECT CASE Extension
            CASE 1
                SELECT CASE Item
                    CASE 9: loadfile CheckFile$("CHSprRP.BSI"): ForkX = 192: ForkY = 108
                    CASE 10: loadfile CheckFile$("CHSprRC.BSI"): ForkX = 192: ForkY = 108
                    CASE 11: loadfile CheckFile$("CHFrkGRP.BSI"): ForkX = 203: ForkY = 114
                    CASE 12: loadfile CheckFile$("CHFrkGRC.BSI"): ForkX = 203: ForkY = 114
                END SELECT
            CASE 2
                SELECT CASE Item
                    CASE 9: loadfile CheckFile$("CHSprXP.BSI"): ForkX = 182: ForkY = 108
                    CASE 10: loadfile CheckFile$("CHSprXC.BSI"): ForkX = 182: ForkY = 108
                    CASE 11: loadfile CheckFile$("CHFrkGXP.BSI"): ForkX = 190: ForkY = 113
                    CASE 12: loadfile CheckFile$("CHFrkGXC.BSI"): ForkX = 190: ForkY = 113
                END SELECT
            CASE 3
                SELECT CASE Item
                    CASE 13: loadfile CheckFile$("CHSprXXP.BSI"): ForkX = 175: ForkY = 113
                    CASE 14: loadfile CheckFile$("CHSprXXC.BSI"): ForkX = 175: ForkY = 113
                    CASE 15: loadfile CheckFile$("CHFrkXXP.BSI"): ForkX = 181: ForkY = 116
                    CASE 16: loadfile CheckFile$("CHFrkXXM.BSI"): ForkX = 181: ForkY = 116
                    CASE 17: loadfile CheckFile$("CHFrkXXC.BSI"): ForkX = 181: ForkY = 116
                END SELECT
        END SELECT
    END IF
    PUT (ForkX + Box(0), ForkY + Box(1)), Box(3), AND
    PUT (ForkX, ForkY), Box(Box(2))
    PSET (ForkX + 12, 258), 5
    SELECT CASE Extension
        CASE 1
            DRAW "R78 d9 L84 E R82 u7 L76 R64"
            LINE STEP(-10, 0)-STEP(24, 7), 5, BF
        CASE 2
            DRAW "R88 d9 L94 E R92 u7 L86 R74"
            LINE STEP(-10, 0)-STEP(24, 7), 5, BF
        CASE 3
            DRAW "R98 d9 L104 E R102 u7 L96 R84"
            LINE STEP(-10, 0)-STEP(24, 7), 5, BF
    END SELECT
    DeLIGHT
    Phase = 5
    FOR x = 254 TO 300
        FOR y = 110 TO 130
            IF POINT(x, y) = 11 THEN
                BarX = x: BarY = y
                RETURN
            END IF
        NEXT y
    NEXT x
    RETURN

    SetTIREF:
    SELECT CASE ForkX
        CASE 176: WheelFX = 179: WheelFY = 217
        CASE 183: WheelFX = 188: WheelFY = 217
        CASE 184: WheelFX = 188: WheelFY = 217
        CASE 175: WheelFX = 178: WheelFY = 217 '
        CASE 181: WheelFX = 186: WheelFY = 217 '
        CASE 182: WheelFX = 186: WheelFY = 217 '
        CASE 193: WheelFX = 199: WheelFY = 217
        CASE 194: WheelFX = 197: WheelFY = 217
        CASE 190: WheelFX = 196: WheelFY = 217 '
        CASE 192: WheelFX = 195: WheelFY = 217 '
        CASE 203: WheelFX = 208: WheelFY = 217
        CASE 203: WheelFX = 208: WheelFY = 217 '
    END SELECT
    SELECT CASE Item
        CASE 18: InnerRADIUS = 38: FrontINDEX = 0
        CASE 19: InnerRADIUS = 35: FrontINDEX = 1800
        CASE 20: InnerRADIUS = 33: FrontINDEX = 3600
        CASE 21: InnerRADIUS = 30: FrontINDEX = 5400
    END SELECT
    Tire WheelFX - 100, WheelFY - 100, 48, InnerRADIUS
    DeLIGHT
    RETURN

    SetTIRER:
    IF Frame = 1 THEN
        SELECT CASE Extension
            CASE 1: WheelRX = 435: WheelRY = 217
            CASE 2: WheelRX = 441: WheelRY = 217
            CASE 3: WheelRX = 455: WheelRY = 217
        END SELECT
        OuterRADIUS = 48
        SELECT CASE Item
            CASE 22: InnerRADIUS = 33: RearINDEX = 3600
            CASE 23: InnerRADIUS = 30: RearINDEX = 5400
            CASE 24: InnerRADIUS = 27: RearINDEX = 7200
            CASE 25: InnerRADIUS = 24: RearINDEX = 9000
        END SELECT
    ELSE
        SELECT CASE Extension
            CASE 1: WheelRX = 440: WheelRY = 223
            CASE 2: WheelRX = 446: WheelRY = 223
            CASE 3: WheelRX = 460: WheelRY = 223
        END SELECT
        OuterRADIUS = 42
        SELECT CASE Item
            CASE 22: InnerRADIUS = 27: RearINDEX = 10800
            CASE 23: InnerRADIUS = 25: RearINDEX = 12600
            CASE 24: InnerRADIUS = 23: RearINDEX = 14400
            CASE 25: InnerRADIUS = 21: RearINDEX = 16200
        END SELECT
    END IF
    Tire WheelRX + 100, WheelRY - 100, OuterRADIUS, InnerRADIUS
    DeLIGHT
    RETURN

    SetWHEELS:
    SELECT CASE Item
        CASE 26: File$ = "CHSpokes.BSV"
        CASE 27: File$ = "CHMag1.BSV"
        CASE 28: File$ = "CHMag2.BSV"
        CASE 29: File$ = "CHMag3.BSV"
        CASE 30: File$ = "CHMag4.BSV"
    END SELECT
    LoadFILE CheckFile$(File$)
    PUT (WheelFX - 140, WheelFY - 140), Box(FrontINDEX), PSET
    PUT (WheelRX + 60, WheelRY - 140), Box(RearINDEX), PSET
    DeLIGHT
    RETURN

END SUB

SUB Assembly2
    SHARED ItemX, ItemY, Frame, Extension, FrameCOLOR, Cover, Tank
    SHARED ForkX, ForkY, WheelFX, WheelFY, WheelRX, WheelRY, BarX, BarY
    SHARED OuterRADIUS, InnerRADIUS, FrontINDEX, RearINDEX, FrameX, FrameY
    SHARED MotorSTYLE, HighMEG, HighPIPE, OT, LightX, LightY, FenderSTYLE
    SHARED FFLX, FFRX, FFTY, FFBY, RFLX, RFRX, RFTY, RFBY, GPaint, TX, TY, TTY

    SELECT CASE Phase
        CASE 8
            SELECT CASE MouseX
                CASE 95 TO 225
                    IF Item <> 31 THEN
                        DeLIGHT
                        ItemX = 95: ItemY = 445
                        HiLIGHT
                        Item = 31
                    END IF
                CASE 255 TO 385
                    IF Item <> 32 THEN
                        DeLIGHT
                        ItemX = 255: ItemY = 445
                        HiLIGHT
                        Item = 32
                    END IF
                CASE 415 TO 545
                    IF Item <> 33 THEN
                        DeLIGHT
                        ItemX = 415: ItemY = 445
                        HiLIGHT
                        Item = 33
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 9
            SELECT CASE MouseX
                CASE 135 TO 235
                    IF Item <> 34 THEN
                        DeLIGHT
                        ItemX = 110: ItemY = 420
                        HiLIGHT
                        Item = 34
                    END IF
                CASE 268 TO 368
                    IF Item <> 35 THEN
                        DeLIGHT
                        ItemX = 246: ItemY = 420
                        HiLIGHT
                        Item = 35
                    END IF
                CASE 400 TO 500
                    IF Item <> 36 THEN
                        DeLIGHT
                        ItemX = 382: ItemY = 420
                        HiLIGHT
                        Item = 36
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 10
            SELECT CASE MouseX
                CASE 124 TO 234
                    IF Item <> 37 THEN
                        DeLIGHT
                        ItemX = 114: ItemY = 424
                        HiLIGHT
                        Item = 37
                    END IF
                CASE 278 TO 358
                    IF Item <> 38 THEN
                        DeLIGHT
                        ItemX = 268: ItemY = 424
                        HiLIGHT
                        Item = 38
                    END IF
                CASE 406 TO 516
                    IF Item <> 39 THEN
                        DeLIGHT
                        ItemX = 396: ItemY = 424
                        HiLIGHT
                        Item = 39
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 11
            SELECT CASE MouseX
                CASE 120 TO 219
                    IF Item <> 40 THEN
                        DeLIGHT
                        ItemX = 100: ItemY = 398
                        HiLIGHT
                        Item = 40
                    END IF
                CASE 220 TO 319
                    IF Item <> 41 THEN
                        DeLIGHT
                        ItemX = 210: ItemY = 398
                        HiLIGHT
                        Item = 41
                    END IF
                CASE 320 TO 419
                    IF Item <> 42 THEN
                        DeLIGHT
                        ItemX = 310: ItemY = 398
                        HiLIGHT
                        Item = 42
                    END IF
                CASE 420 TO 519
                    IF Item <> 43 THEN
                        DeLIGHT
                        ItemX = 420: ItemY = 398
                        HiLIGHT
                        Item = 43
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 12
            SELECT CASE MouseX
                CASE 120 TO 219
                    IF Item <> 44 THEN
                        DeLIGHT
                        ItemX = 100: ItemY = 398
                        HiLIGHT
                        Item = 44
                    END IF
                CASE 220 TO 319
                    IF Item <> 45 THEN
                        DeLIGHT
                        ItemX = 200: ItemY = 398
                        HiLIGHT
                        Item = 45
                    END IF
                CASE 320 TO 419
                    IF Item <> 46 THEN
                        DeLIGHT
                        ItemX = 300: ItemY = 398
                        HiLIGHT
                        Item = 46
                    END IF
                CASE 420 TO 519
                    IF Item <> 146 THEN
                        DeLIGHT
                        ItemX = 400: ItemY = 398
                        HiLIGHT
                        Item = 146
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 13
            SELECT CASE MouseX
                CASE 110 TO 219
                    IF Item <> 47 THEN
                        DeLIGHT
                        ItemX = 100: ItemY = 390
                        HiLIGHT
                        Item = 47
                    END IF
                CASE 220 TO 329
                    IF Item <> 48 THEN
                        DeLIGHT
                        ItemX = 220: ItemY = 390
                        HiLIGHT
                        Item = 48
                    END IF
                CASE 330 TO 439
                    IF Item <> 49 THEN
                        DeLIGHT
                        ItemX = 330: ItemY = 390
                        HiLIGHT
                        Item = 49
                    END IF
                CASE 440 TO 549
                    IF Item <> 50 THEN
                        DeLIGHT
                        ItemX = 430: ItemY = 390
                        HiLIGHT
                        Item = 50
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 14
            SELECT CASE MouseX
                CASE 178 TO 308
                    IF Item <> 51 THEN
                        DeLIGHT
                        ItemX = 178: ItemY = 408
                        HiLIGHT
                        Item = 51
                    END IF
                CASE 338 TO 468
                    IF Item <> 52 THEN
                        DeLIGHT
                        ItemX = 338: ItemY = 408
                        HiLIGHT
                        Item = 52
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 15
            SELECT CASE MouseX
                CASE 90 TO 220
                    IF Item <> 53 THEN
                        DeLIGHT
                        ItemX = 90: ItemY = 411
                        HiLIGHT
                        Item = 53
                    END IF
                CASE 250 TO 380
                    IF Item <> 54 THEN
                        DeLIGHT
                        ItemX = 250: ItemY = 411
                        HiLIGHT
                        Item = 54
                    END IF
                CASE 412 TO 542
                    IF Item <> 55 THEN
                        DeLIGHT
                        ItemX = 412: ItemY = 411
                        HiLIGHT
                        Item = 55
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 16
            SELECT CASE MouseX
                CASE 40 TO 223
                    IF Item <> 56 THEN
                        DeLIGHT
                        ItemX = 70: ItemY = 410
                        HiLIGHT
                        Item = 56
                    END IF
                CASE 224 TO 409
                    IF Item <> 57 THEN
                        DeLIGHT
                        ItemX = 250: ItemY = 410
                        HiLIGHT
                        Item = 57
                    END IF
                CASE 410 TO 600
                    IF Item <> 58 THEN
                        DeLIGHT
                        ItemX = 430: ItemY = 410
                        HiLIGHT
                        Item = 58
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 17
            SELECT CASE MouseX
                CASE 50 TO 200
                    IF Item <> 59 THEN
                        DeLIGHT
                        ItemX = 60: ItemY = 428
                        HiLIGHT
                        Item = 59
                    END IF
                CASE 230 TO 380
                    IF Item <> 60 THEN
                        DeLIGHT
                        ItemX = 240: ItemY = 428
                        HiLIGHT
                        Item = 60
                    END IF
                CASE 410 TO 560
                    IF Item <> 61 THEN
                        DeLIGHT
                        ItemX = 420: ItemY = 428
                        HiLIGHT
                        Item = 61
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 18
            SELECT CASE MouseX
                CASE 65 TO 164
                    IF Item <> 62 THEN
                        DeLIGHT
                        ItemX = 50: ItemY = 412
                        HiLIGHT
                        Item = 62
                    END IF
                CASE 165 TO 264
                    IF Item <> 63 THEN
                        DeLIGHT
                        ItemX = 150: ItemY = 412
                        HiLIGHT
                        Item = 63
                    END IF
                CASE 265 TO 364
                    IF Item <> 64 THEN
                        DeLIGHT
                        ItemX = 250: ItemY = 412
                        HiLIGHT
                        Item = 64
                    END IF
                CASE 365 TO 464
                    IF Item <> 65 THEN
                        DeLIGHT
                        ItemX = 350: ItemY = 412
                        HiLIGHT
                        Item = 65
                    END IF
                CASE 465 TO 564
                    IF Item <> 66 THEN
                        DeLIGHT
                        ItemX = 450: ItemY = 412
                        HiLIGHT
                        Item = 66
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 19
            SELECT CASE MouseX
                CASE 60 TO 139
                    IF Item <> 67 THEN
                        DeLIGHT
                        ItemX = 20: ItemY = 396
                        HiLIGHT
                        Item = 67
                    END IF
                CASE 140 TO 219
                    IF Item <> 68 THEN
                        DeLIGHT
                        ItemX = 125: ItemY = 396
                        HiLIGHT
                        Item = 68
                    END IF
                CASE 240 TO 319
                    IF Item <> 69 THEN
                        DeLIGHT
                        ItemX = 202: ItemY = 396
                        HiLIGHT
                        Item = 69
                    END IF
                CASE 320 TO 399
                    IF Item <> 70 THEN
                        DeLIGHT
                        ItemX = 304: ItemY = 396
                        HiLIGHT
                        Item = 70
                    END IF
                CASE 420 TO 499
                    IF Item <> 71 THEN
                        DeLIGHT
                        ItemX = 384: ItemY = 396
                        HiLIGHT
                        Item = 71
                    END IF
                CASE 500 TO 579
                    IF Item <> 72 THEN
                        DeLIGHT
                        ItemX = 490: ItemY = 396
                        HiLIGHT
                        Item = 72
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 20
            SELECT CASE MouseX
                CASE 140 TO 219
                    IF Item <> 67 THEN
                        DeLIGHT
                        ItemX = 100: ItemY = 396
                        HiLIGHT
                        Item = 67
                    END IF
                CASE 220 TO 299
                    IF Item <> 68 THEN
                        DeLIGHT
                        ItemX = 210: ItemY = 396
                        HiLIGHT
                        Item = 68
                    END IF
                CASE 340 TO 419
                    IF Item <> 69 THEN
                        DeLIGHT
                        ItemX = 290: ItemY = 396
                        HiLIGHT
                        Item = 69
                    END IF
                CASE 420 TO 499
                    IF Item <> 70 THEN
                        DeLIGHT
                        ItemX = 420: ItemY = 396
                        HiLIGHT
                        Item = 70
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
    END SELECT

    IF LB = -1 AND Item <> 0 THEN
        SELECT CASE Item
            CASE 31
                loadfile CheckFile$("CHFndrFS.BSV"): GOSUB FrontWHEEL
                loadfile CheckFile$("CHFndrRS.BSV"): GOSUB RearWHEEL
                FenderSTYLE = 1
                GOSUB Transfer
            CASE 32
                loadfile CheckFile$("CHFndrFC.BSV"): GOSUB FrontWHEEL
                loadfile CheckFile$("CHFndrRC.BSV"): GOSUB RearWHEEL
                FenderSTYLE = 2
                GOSUB Transfer
            CASE 33
                loadfile CheckFile$("CHFndrFF.BSV"): GOSUB FrontWHEEL
                loadfile CheckFile$("CHFndrRF.BSV"): GOSUB RearWHEEL
                FenderSTYLE = 3
                GOSUB Transfer
            CASE 34
                IF Frame = 2 THEN
                    GET (FrameX + 100, FrameY + 40)-STEP(20, 30), Box()
                    PUT (FrameX + 70, FrameY + 25), Box(), PSET
                    LINE (FrameX + 90, FrameY + 110)-STEP(40, 2), 0, BF
                    CIRCLE (FrameX + 53, FrameY + 108), 3, 2
                    PAINT STEP(0, 0), 4, 2
                    CIRCLE (FrameX + 53, FrameY + 108), 2, 15, 0, 3
                    LINE (FrameX + 50, FrameY + 101)-STEP(1, 1), 4, B
                    CIRCLE (FrameX + 53, FrameY + 108), 3, 5, 3, 0
                    LINE STEP(-2, 0)-STEP(4, 0), 3
                END IF
                loadfile CheckFile$("CHMtr750.BSI")
                MotorSTYLE = 1
                GOSUB InstallMOTOR
                DeLIGHT
                Phase = 15
            CASE 35
                DeLIGHT
                MotorSTYLE = 2
                Phase = 10
            CASE 36
                DeLIGHT
                MotorSTYLE = 3
                Phase = 10
            CASE 37
                IF MotorSTYLE = 2 THEN
                    loadfile CheckFile$("CHMtrVKP.BSI")
                ELSE
                    loadfile CheckFile$("CHMtrVBP.BSI")
                END IF
                GOSUB InstallMOTOR
            CASE 38
                IF MotorSTYLE = 2 THEN
                    loadfile CheckFile$("CHMtrVKB.BSI")
                ELSE
                    loadfile CheckFile$("CHMtrVBB.BSI")
                END IF
                GOSUB InstallMOTOR
            CASE 39
                IF MotorSTYLE = 2 THEN
                    loadfile CheckFile$("CHMtrVKC.BSI")
                ELSE
                    loadfile CheckFile$("CHMtrVBC.BSI")
                END IF
                GOSUB InstallMOTOR
            CASE 40
                LoadBSI FrameX, FrameY, CheckFile$("CHDrvCH.BSI")
                loadfile CheckFile$("CHShdowD.BSI")
                PUT (FrameX + Box(0), 268), Box(3), AND
                PUT (FrameX + Box(0), 268), Box(Box(2))
                DeLIGHT
                Phase = 13
            CASE 41 TO 43
                IF Item = 41 THEN LoadBSI FrameX, FrameY, CheckFile$("CHDrvBP.BSI")
                IF Item = 42 THEN LoadBSI FrameX, FrameY, CheckFile$("CHDrvBB.BSI")
                IF Item = 43 THEN LoadBSI FrameX, FrameY, CheckFile$("CHDrvBC.BSI")
                loadfile CheckFile$("CHShdowD.BSI")
                PUT (FrameX + Box(0), 268), Box(3), AND
                PUT (FrameX + Box(0), 268), Box(Box(2))
                DeLIGHT
                Phase = 12
            CASE 44, 45, 46, 146
                IF Item = 44 THEN LoadBSI FrameX, FrameY, CheckFile$("CHDrvCP.BSI"): Cover = 1
                IF Item = 45 THEN LoadBSI FrameX, FrameY, CheckFile$("CHDrvCB.BSI")
                IF Item = 46 THEN LoadBSI FrameX, FrameY, CheckFile$("CHDrvCC.BSI")
                DeLIGHT
                Phase = 13
            CASE 47 TO 50
                IF Item = 47 THEN LoadBSI FrameX, FrameY, CheckFile$("CHBrthr3.BSI")
                IF Item = 48 THEN LoadBSI FrameX, FrameY, CheckFile$("CHBrthr4.BSI")
                IF Item = 49 THEN LoadBSI FrameX, FrameY, CheckFile$("CHBrthr1.BSI")
                IF Item = 50 THEN LoadBSI FrameX, FrameY, CheckFile$("CHBrthr2.BSI")
                DeLIGHT
                Phase = 14
            CASE 51, 52
                IF Frame = 1 THEN
                    IF Item = 51 THEN FileNAME$ = "CHRDrRVC.BSI"
                    IF Item = 52 THEN FileNAME$ = "CHRDrRVB.BSI"
                ELSE
                    IF Item = 51 THEN FileNAME$ = "CHRDrXVC.BSI"
                    IF Item = 52 THEN FileNAME$ = "CHRDrXVB.BSI"
                END IF
                LoadBSI FrameX, FrameY, CheckFile$(FileNAME$)
                DeLIGHT
                Phase = 17
            CASE 53 TO 55
                IF Frame = 1 THEN
                    IF Item = 53 THEN FileNAME$ = "CHRDrR7O.BSI"
                    IF Item = 54 THEN FileNAME$ = "CHRDrR7P.BSI": GPaint = 1
                    IF Item = 55 THEN FileNAME$ = "CHRDrR7C.BSI"
                ELSE
                    IF Item = 53 THEN FileNAME$ = "CHRDrX7O.BSI"
                    IF Item = 54 THEN FileNAME$ = "CHRDrX7P.BSI": GPaint = 1
                    IF Item = 55 THEN FileNAME$ = "CHRDrX7C.BSI"
                END IF
                LoadBSI FrameX, FrameY, CheckFile$(FileNAME$)
                DeLIGHT
                Phase = 16
            CASE 56 TO 58
                IF Item = 56 THEN LoadBSI FrameX, FrameY, CheckFile$("CHExBLST.BSI")
                IF Item = 57 THEN LoadBSI FrameX, FrameY, CheckFile$("CHExBHMG.BSI"): HighMEG = 1
                IF Item = 58 THEN LoadBSI FrameX, FrameY, CheckFile$("CHExBLMG.BSI")
                IF Frame = 1 THEN ShadowDROP = 11 ELSE ShadowDROP = 0
                LoadBSI FrameX, FrameY + ShadowDROP, CheckFile$("CHShdo7X.BSI")
                DeLIGHT
                Phase = 18
            CASE 59 TO 61
                IF Item = 59 THEN LoadBSI FrameX, FrameY, CheckFile$("CHExVLMG.BSI"): Extend = 0
                IF Item = 60 THEN LoadBSI FrameX, FrameY, CheckFile$("CHExVLSH.BSI"): Extend = -20
                IF Item = 61 THEN LoadBSI FrameX, FrameY, CheckFile$("CHExVHOS.BSI"): Extend = 60: HighPIPE = 1
                IF Frame = 1 THEN ShadowDROP = 11 ELSE ShadowDROP = 0
                LoadBSI FrameX + 12, FrameY + 44 + ShadowDROP, CheckFile$("CHShdoVX.BSI")
                LINE (FrameX + 120, FrameY + 143 + ShadowDROP)-(FrameX + 200 + Extend, FrameY + 147 + ShadowDROP), 5, BF
                DRAW "R5 H5 D5 R bU p5,5"
                DeLIGHT
                Phase = 18
            CASE 62 TO 66
                IF Frame = 1 THEN TankY = 5 ELSE TankY = 0
                IF Item = 62 THEN
                    LoadBSI FrameX, FrameY + TankY, CheckFile$("CHFTnkTD.BSI")
                    Tank = 1: TX = 2: TY = 2 + TankY
                    IF Frame = 1 THEN TTY = 5 ELSE TTY = 0
                END IF
                IF Item = 63 THEN
                    LoadBSI FrameX, FrameY, CheckFile$("CHFTnkSC.BSI")
                    TX = 4: Tank = 2: TY = 6 + TankY
                    TTY = 0
                END IF
                IF Item = 64 THEN
                    LoadBSI FrameX, FrameY + TankY, CheckFile$("CHFTnkOS.BSI")
                    Tank = 3: TX = 0: TY = TankY
                    IF Frame = 1 THEN TTY = 4 ELSE TTY = 0
                END IF
                IF Item = 65 THEN
                    LoadBSI FrameX, FrameY + TankY, CheckFile$("CHFTnkCB.BSI")
                    Tank = 4: TX = 10: TY = 3 + TankY
                    IF Frame = 1 THEN TTY = 4 ELSE TTY = 0
                END IF
                IF Item = 66 THEN
                    LoadBSI FrameX, FrameY + TankY, CheckFile$("CHFTnkBR.BSI")
                    Tank = 5
                    TX = 2
                    TTY = 4
                    IF Frame = 1 THEN TY = 12 ELSE TY = 7
                    IF Frame = 1 THEN TTY = 4 ELSE TTY = 0
                END IF
                DeLIGHT
                ClearBOX
                IF MotorSTYLE = 1 AND Frame = 1 THEN
                    Phase = 19
                ELSE
                    Phase = 20
                END IF
            CASE 67 TO 72
                IF Item = 67 THEN LoadBSI FrameX, FrameY, CheckFile$("CHOTnkHP.BSI"): OT = 1
                IF Item = 68 THEN LoadBSI FrameX, FrameY, CheckFile$("CHOTnkHC.BSI"): OT = 2
                IF Item = 69 THEN LoadBSI FrameX, FrameY, CheckFile$("CHOTnkCP.BSI"): OT = 3
                IF Item = 70 THEN LoadBSI FrameX, FrameY, CheckFile$("CHOTnkCC.BSI"): OT = 4
                IF Item = 71 THEN LoadBSI FrameX, FrameY, CheckFile$("CHOTnkBP.BSI"): OT = 5
                IF Item = 72 THEN LoadBSI FrameX, FrameY, CheckFile$("CHOTnkBC.BSI"): OT = 6
                IF HighMEG = 1 THEN
                    LoadBSI FrameX, FrameY, CheckFile$("CHExBHMG.BSI")
                    HighMEG = 0
                END IF
                DeLIGHT
                FOR x = BarX - 40 TO BarX - 10
                    FOR y = BarY + 10 TO BarY + 40
                        IF POINT(x, y) = 14 THEN
                            LightX = x
                            LightY = y
                            PSET (x, y), 15
                            GOTO Continue
                        END IF
                    NEXT y
                NEXT x
                Continue:
                Phase = 21
        END SELECT
    END IF

    EXIT SUB

    '************************* SUBROUTINE SECTION BEGINS ************************

    FrontWHEEL:
    PUT (WheelFX - 153, WheelFY - 157), Box(3200), AND
    PUT (WheelFX - 153, WheelFY - 157), Box()
    RETURN

    RearWHEEL:
    PUT (WheelRX + 45, WheelRY - 155), Box(3200), AND
    PUT (WheelRX + 45, WheelRY - 155), Box()
    DeLIGHT
    RETURN

    Transfer:
    LoadIMAGE 170, 80, CheckFile$("CHPrepAR.BSV")
    LoadIMAGE 170, 80, CheckFile$("CHInstW.BSV")
    FFLX = Seeker(WheelFX - 153, WheelFY - 157, 0)
    FFRX = Seeker(WheelFX - 153, WheelFY - 157, 1)
    FFTY = Seeker(WheelFX - 153, WheelFY - 157, 2)
    FFBY = Seeker(WheelFX - 153, WheelFY - 157, 3)
    OPEN "FF.DAT" FOR OUTPUT AS #1
    WRITE #1, FFLX + 100, FFRX - FFLX, FFTY + 100, FFBY - FFTY
    FOR x = FFLX TO FFRX
        FOR y = FFTY TO FFBY
            IF POINT(x + 100, y + 100) = 0 THEN WRITE #1, 1 ELSE WRITE #1, 0
        NEXT y
    NEXT x
    CLOSE #1
    PSET (WheelFX - 43, WheelFY + 48), 5
    DRAW "R91 M+2,-5 L85 M-8,+5 R10 BU2 P5,5"
    FOR x = WheelFX - 153 TO WheelFX - 43
        FOR y = WheelFY - 157 TO WheelFY - 47
            IF POINT(x, y) <> 0 THEN
                IF y < WheelFY - 72 THEN
                    IF POINT(x + 100, y + 100) = 0 THEN
                        PSET (x + 100, y + 100), POINT(x, y)
                    END IF
                ELSE
                    PSET (x + 100, y + 100), POINT(x, y)
                END IF
                PSET (x, y), 0
            END IF
        NEXT y
    NEXT x
    RFLX = Seeker(WheelRX + 45, WheelRY - 157, 0)
    RFRX = Seeker(WheelRX + 45, WheelRY - 157, 1)
    RFTY = Seeker(WheelRX + 45, WheelRY - 157, 2)
    RFBY = Seeker(WheelRX + 45, WheelRY - 157, 3)
    OPEN "RF.DAT" FOR OUTPUT AS #1
    WRITE #1, RFLX - 100, RFRX - RFLX, RFTY + 100, RFBY - RFTY
    FOR x = RFLX TO RFRX
        FOR y = RFTY TO RFBY
            IF POINT(x - 100, y + 100) = 0 THEN WRITE #1, 1 ELSE WRITE #1, 0
        NEXT y
    NEXT x
    CLOSE #1
    IF Frame = 2 THEN
        PSET (WheelRX - 43, WheelRY + 42), 5
    ELSE
        PSET (WheelRX - 43, WheelRY + 48), 5
    END IF
    DRAW "R91 M-8,-5 L88 F5 R20 BU3 P5,5"
    FOR x = WheelRX + 45 TO WheelRX + 155
        FOR y = WheelRY - 155 TO WheelRY - 45
            IF POINT(x, y) <> 0 THEN
                IF y < WheelRY - 72 THEN
                    IF POINT(x - 100, y + 100) = 0 THEN
                        PSET (x - 100, y + 100), POINT(x, y)
                    END IF
                ELSE
                    PSET (x - 100, y + 100), POINT(x, y)
                END IF
                PSET (x, y), 0
            END IF
        NEXT y
    NEXT x
    LoadIMAGE 170, 80, CheckFile$("CHInstW.BSV")
    Phase = 9
    RETURN

    InstallMOTOR:
    PUT (FrameX + Box(0), FrameY + Box(1)), Box(3), AND
    PUT (FrameX + Box(0), FrameY + Box(1)), Box(Box(2))
    IF MotorSTYLE = 1 THEN
        loadfile CheckFile$("CHShdow7.BSI")
        PUT (FrameX + Box(0), 251), Box(3), AND
        PUT (FrameX + Box(0), 251), Box(Box(2))
    ELSE
        IF Frame = 1 THEN
            SELECT CASE FrameCOLOR
                CASE 1: Colr1 = 6: Colr2 = 13
                CASE 2: Colr1 = 5: Colr2 = 2
                CASE 3: Colr1 = 4: Colr2 = 15
            END SELECT
            PSET (FrameX + Box(0) + 32, FrameY + Box(1)), Colr1
            DRAW "U8 M+4,+2 D6 L4 BE2 P" + LTRIM$(STR$(Colr1)) + "," + LTRIM$(STR$(Colr1))
            PSET (FrameX + Box(0) + 32, FrameY + Box(1)), Colr2
            DRAW "U7"
        END IF
        LoadBSI FrameX, FrameY, CheckFile$("CHLnkage.BSI")
        loadfile CheckFile$("CHShdowP.BSI")
        PUT (FrameX + Box(0), 254), Box(3), AND
        PUT (FrameX + Box(0), 254), Box(Box(2))
        loadfile CheckFile$("CHShdowV.BSI")
        PUT (FrameX + Box(0), 254), Box(3), AND
        PUT (FrameX + Box(0), 254), Box(Box(2))
    END IF
    DeLIGHT
    IF MotorSTYLE > 1 THEN
    END IF
    Phase = 11
    RETURN

END SUB

SUB Assembly3
    SHARED ItemX, ItemY, Frame, Extension, FrameCOLOR
    SHARED ForkX, ForkY, WheelFX, WheelFY, WheelRX, WheelRY, BarX, BarY
    SHARED OuterRADIUS, InnerRADIUS, FrontINDEX, RearINDEX, FrameX, FrameY
    SHARED MotorSTYLE, HighMEG, HighPIPE, OT, LightX, LightY, FenderSTYLE
    SHARED FFLX, FFRX, FFTY, FFBY, RFLX, RFRX, RFTY, RFBY

    SELECT CASE Phase
        CASE 22
            SELECT CASE MouseX
                CASE 15 TO 114
                    IF Item <> 73 THEN
                        DeLIGHT
                        ItemX = 12: ItemY = 406
                        HiLIGHT
                        Item = 73
                    END IF
                CASE 115 TO 214
                    IF Item <> 74 THEN
                        DeLIGHT
                        ItemX = 98: ItemY = 406
                        HiLIGHT
                        Item = 74
                    END IF
                CASE 215 TO 314
                    IF Item <> 75 THEN
                        DeLIGHT
                        ItemX = 200: ItemY = 406
                        HiLIGHT
                        Item = 75
                    END IF
                CASE 315 TO 409
                    IF Item <> 76 THEN
                        DeLIGHT
                        ItemX = 300: ItemY = 406
                        HiLIGHT
                        Item = 76
                    END IF
                CASE 410 TO 519
                    IF Item <> 77 THEN
                        DeLIGHT
                        ItemX = 400: ItemY = 406
                        HiLIGHT
                        Item = 77
                    END IF
                CASE 520 TO 624
                    IF Item <> 78 THEN
                        DeLIGHT
                        ItemX = 497: ItemY = 406
                        HiLIGHT
                        Item = 78
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 23
            SELECT CASE MouseX
                CASE 60 TO 139
                    IF Item <> 79 THEN
                        DeLIGHT
                        ItemX = 20: ItemY = 394
                        HiLIGHT
                        Item = 79
                    END IF
                CASE 140 TO 219
                    IF Item <> 80 THEN
                        DeLIGHT
                        ItemX = 126: ItemY = 394
                        HiLIGHT
                        Item = 80
                    END IF
                CASE 240 TO 319
                    IF Item <> 81 THEN
                        DeLIGHT
                        ItemX = 204: ItemY = 394
                        HiLIGHT
                        Item = 81
                    END IF
                CASE 320 TO 399
                    IF Item <> 82 THEN
                        DeLIGHT
                        ItemX = 306: ItemY = 394
                        HiLIGHT
                        Item = 82
                    END IF
                CASE 420 TO 499
                    IF Item <> 83 THEN
                        DeLIGHT
                        ItemX = 386: ItemY = 394
                        HiLIGHT
                        Item = 83
                    END IF
                CASE 500 TO 580
                    IF Item <> 84 THEN
                        DeLIGHT
                        ItemX = 486: ItemY = 394
                        HiLIGHT
                        Item = 84
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
        CASE 24
            SELECT CASE MouseX
                CASE 125 TO 235
                    IF Item <> 85 THEN
                        DeLIGHT
                        ItemX = 115: ItemY = 420
                        HiLIGHT
                        Item = 85
                    END IF
                CASE 265 TO 375
                    IF Item <> 86 THEN
                        DeLIGHT
                        ItemX = 255: ItemY = 420
                        HiLIGHT
                        Item = 86
                    END IF
                CASE 405 TO 515
                    IF Item <> 87 THEN
                        DeLIGHT
                        ItemX = 395: ItemY = 420
                        HiLIGHT
                        Item = 87
                    END IF
                CASE ELSE
                    DeLIGHT
            END SELECT
    END SELECT

    IF LB = -1 AND Item <> 0 THEN
        SELECT CASE Item
            CASE 73 TO 78
                IF Frame = 1 THEN SeatUP = -2 ELSE SeatUP = 0
                IF Item = 73 THEN LoadBSI FrameX, FrameY + SeatUP, CheckFile$("CHStOSHP.BSI")
                IF Item = 74 THEN LoadBSI FrameX, FrameY + SeatUP, CheckFile$("CHStOSHS.BSI")
                IF Item = 75 THEN LoadBSI FrameX, FrameY + SeatUP, CheckFile$("CHStOSLP.BSI")
                IF Item = 76 THEN LoadBSI FrameX, FrameY + SeatUP, CheckFile$("CHStOSLS.BSI")
                IF Item = 77 THEN
                    IF Frame = 1 THEN
                        LoadBSI FrameX + 10, FrameY + 15, CheckFile$("CHStBNAR.BSI")
                        CIRCLE (FrameX + 156, FrameY + 64), 4, 15, 1, 3
                        PSET STEP(2, -4), 3
                        PSET STEP(-4, 0), 3
                    ELSE
                        SELECT CASE FrameCOLOR
                            CASE 1: LoadBSI FrameX + 4, FrameY + 2, CheckFile$("CHStBNAP.BSI")
                            CASE 2: LoadBSI FrameX + 4, FrameY + 2, CheckFile$("CHStBNAB.BSI")
                            CASE 3: LoadBSI FrameX + 4, FrameY + 2, CheckFile$("CHStBNAC.BSI")
                        END SELECT
                    END IF
                END IF
                IF Item = 78 THEN
                    IF Frame = 1 THEN
                        SELECT CASE FrameCOLOR
                            CASE 1: LoadBSI FrameX + 8, FrameY + 4, CheckFile$("CHStCHPP.BSI")
                            CASE 2: LoadBSI FrameX + 8, FrameY + 4, CheckFile$("CHStCHPB.BSI")
                            CASE 3: LoadBSI FrameX + 8, FrameY + 4, CheckFile$("CHStCHPC.BSI")
                        END SELECT
                        IF OT > 4 THEN
                            IF OT = 5 THEN LoadBSI FrameX, FrameY, CheckFile$("CHOTnkBP.BSI")
                            IF OT = 6 THEN LoadBSI FrameX, FrameY, CheckFile$("CHOTnkBC.BSI")
                            IF HighMEG THEN LoadBSI FrameX, FrameY, CheckFile$("CHExBHMG.BSI")
                        END IF
                    ELSE
                        LoadBSI FrameX + 8, FrameY + 4, CheckFile$("CHStCHPE.BSI")
                    END IF
                END IF
                DeLIGHT
                Phase = 23
            CASE 79 TO 84
                IF Item = 79 THEN LoadBSI LightX, LightY, CheckFile$("CHHDLTLP.BSI")
                IF Item = 80 THEN LoadBSI LightX, LightY, CheckFile$("CHHDLTLC.BSI")
                IF Item = 81 THEN LoadBSI LightX, LightY, CheckFile$("CHHDLTSP.BSI")
                IF Item = 82 THEN LoadBSI LightX, LightY, CheckFile$("CHHDLTSC.BSI")
                IF Item = 83 THEN LoadBSI LightX, LightY, CheckFile$("CHHDLTCP.BSI")
                IF Item = 84 THEN LoadBSI LightX, LightY, CheckFile$("CHHDLTCC.BSI")
                DeLIGHT
                Phase = 24
            CASE 85 TO 87
                SELECT CASE FenderSTYLE
                    CASE 1
                        IF Item = 85 THEN LoadBSI WheelRX, WheelRY, CheckFile$("CHTLLTSP.BSI")
                        IF Item = 86 THEN LoadBSI WheelRX, WheelRY, CheckFile$("CHTLLTSC.BSI")
                        IF HighPIPE = 1 THEN LoadBSI FrameX, FrameY, CheckFile$("CHExVHOS.BSI")
                    CASE 2
                        IF Item = 85 THEN LoadBSI WheelRX, WheelRY, CheckFile$("CHTLLTCP.BSI")
                        IF Item = 86 THEN LoadBSI WheelRX, WheelRY, CheckFile$("CHTLLTCC.BSI")
                    CASE 3
                        IF Item = 85 THEN LoadBSI WheelRX, WheelRY, CheckFile$("CHTLLTFP.BSI")
                        IF Item = 86 THEN LoadBSI WheelRX, WheelRY, CheckFile$("CHTLLTFC.BSI")
                END SELECT
                DeLIGHT
                Phase = 25
        END SELECT
    END IF

END SUB

SUB ChopperIDE

    FOR Colr = 8 TO 14
        OUT &H3C8, Colr
        OUT &H3C9, 63 - nn / 4
        OUT &H3C9, 24 - nn
        OUT &H3C9, 0
        nn = nn + 4
    NEXT Colr

    DEF SEG = VARSEG(Box(0))
    FOR y = 0 TO 320 STEP 160
        FileCOUNT = FileCOUNT + 1
        FileNAME$ = CheckFile$("CHIDE" + LTRIM$(STR$(FileCOUNT)) + ".BSV")
        BLOAD FileNAME$, VARPTR(Box(0))
        PUT (0, y), Box()
    NEXT y
    DEF SEG

END SUB

SUB ClearBOX

    LINE (11, 295)-(628, 469), 0, BF

END SUB

SUB ClearMOUSE

    WHILE LB OR RB
        MouseSTATUS LB, RB, MouseX, MouseY
    WEND

END SUB

SUB DeLIGHT
    SHARED ItemX, ItemY

    IF Item THEN
        PUT (ItemX, ItemY), MenuBOX(), PSET
        Item = 0
    END IF

END SUB

SUB FourBIT (x1%, y1%, x2%, y2%, FileNAME$)

    DIM FileCOLORS%(1 TO 48)
    DIM Colors4%(15)
    GraphX = 314

    FOR x = x1% TO x2%
        FOR y = y1% TO y2%
            Colors4%(POINT(x, y)) = 1
        NEXT y
        LINE (GraphX, 323)-(GraphX, 331), 11
        IF x MOD 11 = 0 THEN GraphX = GraphX + 1
    NEXT x
    FOR n = 0 TO 15
        IF Colors4%(n) = 1 THEN SigCOLORS& = SigCOLORS& + 1
    NEXT n

    FileTYPE$ = "BM"
    Reserved1% = 0
    Reserved2% = 0
    OffsetBITS& = 118
    InfoHEADER& = 40
    PictureWIDTH& = x2% - x1% + 1
    PictureDEPTH& = y2% - y1% + 1
    NumPLANES% = 1
    BPP% = 4
    Compression& = 0
    WidthPELS& = 3780
    DepthPELS& = 3780
    NumCOLORS& = 16

    IF PictureWIDTH& MOD 8 <> 0 THEN
        ZeroPAD$ = SPACE$((8 - PictureWIDTH& MOD 8) \ 2)
    END IF

    ImageSIZE& = (((ImageWIDTH& + LEN(ZeroPAD$)) * ImageDEPTH&) + .1) / 2
    FileSIZE& = ImageSIZE& + OffsetBITS&

    Colr = 0
    FOR n = 1 TO 48 STEP 3
        OUT &H3C7, Colr
        FileCOLORS%(n) = INP(&H3C9)
        FileCOLORS%(n + 1) = INP(&H3C9)
        FileCOLORS%(n + 2) = INP(&H3C9)
        Colr = Colr + 1
    NEXT n

    if _fileexists(FileNAME$) then kill FileNAME$
    OPEN FileNAME$ FOR BINARY AS #1

    PUT #1, , FileTYPE$
    PUT #1, , FileSIZE&
    PUT #1, , Reserved1% 'should be zero
    PUT #1, , Reserved2% 'should be zero
    PUT #1, , OffsetBITS&
    PUT #1, , InfoHEADER&
    PUT #1, , PictureWIDTH&
    PUT #1, , PictureDEPTH&
    PUT #1, , NumPLANES%
    PUT #1, , BPP%
    PUT #1, , Compression&
    PUT #1, , ImageSIZE&
    PUT #1, , WidthPELS&
    PUT #1, , DepthPELS&
    PUT #1, , NumCOLORS&
    PUT #1, , SigCOLORS&

    u$ = " "
    FOR n% = 1 TO 46 STEP 3
        Colr$ = CHR$(FileCOLORS%(n% + 2) * 4)
        PUT #1, , Colr$
        Colr$ = CHR$(FileCOLORS%(n% + 1) * 4)
        PUT #1, , Colr$
        Colr$ = CHR$(FileCOLORS%(n%) * 4)
        PUT #1, , Colr$
        PUT #1, , u$ 'Unused byte
    NEXT n%

    FOR y = y2% TO y1% STEP -1
        FOR x = x1% TO x2% STEP 2
            HiX = POINT(x, y)
            LoX = POINT(x + 1, y)
            HiNIBBLE$ = HEX$(HiX)
            LoNIBBLE$ = HEX$(LoX)
            HexVAL$ = "&H" + HiNIBBLE$ + LoNIBBLE$
            a$ = CHR$(VAL(HexVAL$))
            PUT #1, , a$
        NEXT x

        PUT #1, , ZeroPAD$

        IF y MOD 3 = 0 THEN
            LINE (GraphX, 323)-(GraphX, 331), 11
            GraphX = GraphX + 1
        END IF

    NEXT y

    CLOSE #1

END SUB

SUB HandleBARS (InOUT)
    SHARED BarX, BarY, GotBOX

    IF InOUT = 0 THEN GOSUB DeBOX: EXIT SUB

    SELECT CASE MouseY
        CASE 332 TO 414
            SELECT CASE MouseX
                CASE 12 TO 87
                    IF BarBOX <> 1 THEN
                        GOSUB DeBOX
                        BarBOX = 1
                        GOSUB BoxIT
                    END IF
                CASE 89 TO 164
                    IF BarBOX <> 2 THEN
                        GOSUB DeBOX
                        BarBOX = 2
                        GOSUB BoxIT
                    END IF
                CASE 166 TO 241
                    IF BarBOX <> 3 THEN
                        GOSUB DeBOX
                        BarBOX = 3
                        GOSUB BoxIT
                    END IF
                CASE 243 TO 318
                    IF MouseY < 374 THEN
                        IF BarBOX <> 4 THEN
                            GOSUB DeBOX
                            BarBOX = 4
                            GOSUB BoxIT
                        END IF
                    ELSE
                        IF BarBOX <> 5 THEN
                            GOSUB DeBOX
                            BarBOX = 5
                            GOSUB BoxIT
                        END IF
                    END IF
                CASE 320 TO 395
                    IF BarBOX <> 6 THEN
                        GOSUB DeBOX
                        BarBOX = 6
                        GOSUB BoxIT
                    END IF
                CASE 397 TO 472
                    IF BarBOX <> 7 THEN
                        GOSUB DeBOX
                        BarBOX = 7
                        GOSUB BoxIT
                    END IF
                CASE 474 TO 549
                    IF BarBOX <> 8 THEN
                        GOSUB DeBOX
                        BarBOX = 8
                        GOSUB BoxIT
                    END IF
                CASE 551 TO 626
                    IF BarBOX <> 9 THEN
                        GOSUB DeBOX
                        BarBOX = 9
                        GOSUB BoxIT
                    END IF
            END SELECT
        CASE 423 TO 439
            IF MouseX > 277 AND MouseX < 349 THEN
                IF LB = -1 THEN
                    GET (278, 423)-(358, 439), MenuBOX()
                    LINE (278, 423)-(358, 439), 4, BF
                    LINE (278, 423)-(278, 439), 3
                    LINE (278, 423)-(358, 423), 3
                    PrintSTRING 302, 426, "Accept"
                    Interval .1
                    PUT (278, 423), MenuBOX(), PSET
                    IF GotBOX = 1 THEN
                        DeLIGHT
                        GOSUB DeBOX
                        OPEN CheckFile$("CHCable.DAT") FOR INPUT AS #1
                        INPUT #1, xx, yy
                        FOR x = 0 TO xx
                            FOR y = 0 TO yy
                                INPUT #1, Colr
                                IF Colr <> 0 THEN
                                    IF POINT(x + BarX - 16, y + BarY + 24) = 0 THEN
                                        PSET (x + BarX - 16, y + BarY + 24), Colr
                                    END IF
                                END IF
                            NEXT y
                        NEXT x
                        CLOSE #1
                        Phase = 22
                        EXIT SUB
                    END IF
                END IF
            END IF
        CASE ELSE
            GOSUB DeBOX
    END SELECT

    IF BarBOX <> 0 AND LB = -1 THEN
        IF GotBOX = 1 THEN PUT (BarX - 10, BarY - 45), Box(24000), PSET: GotBOX = 0
        GET (BarX - 10, BarY - 45)-(BarX + 66, BarY + 30), Box(24000): GotBOX = 1
        SELECT CASE BarBOX
            CASE 1: loadfile CheckFile$("CHBar1.BSI")
            CASE 2: loadfile CheckFile$("CHBar2.BSI")
            CASE 3: loadfile CheckFile$("CHBar3.BSI")
            CASE 4: loadfile CheckFile$("CHBar4.BSI")
            CASE 5: loadfile CheckFile$("CHBar5.BSI")
            CASE 6: loadfile CheckFile$("CHBar6.BSI")
            CASE 7: loadfile CheckFile$("CHBar7.BSI")
            CASE 8: loadfile CheckFile$("CHBar8.BSI")
            CASE 9: loadfile CheckFile$("CHBar9.BSI")
        END SELECT
        PUT (BarX - Box(0), BarY - Box(1)), Box(3), AND
        PUT (BarX - Box(0), BarY - Box(1)), Box(Box(2))
    END IF

    EXIT SUB

    DeBOX:
    IF BarBOX THEN
        SELECT CASE BarBOX
            CASE 1: LINE (12, 332)-(87, 414), 3, B
            CASE 2: LINE (89, 332)-(164, 414), 3, B
            CASE 3: LINE (166, 332)-(241, 414), 3, B
            CASE 4: LINE (243, 332)-(318, 372), 3, B
            CASE 5: LINE (243, 374)-(318, 414), 3, B
            CASE 6: LINE (320, 332)-(395, 414), 3, B
            CASE 7: LINE (397, 332)-(472, 414), 3, B
            CASE 8: LINE (474, 332)-(549, 414), 3, B
            CASE 9: LINE (551, 332)-(626, 414), 3, B
        END SELECT
        BarBOX = 0
    END IF
    RETURN

    BoxIT:
    SELECT CASE BarBOX
        CASE 1: LINE (12, 332)-(87, 414), 15, B
        CASE 2: LINE (89, 332)-(164, 414), 15, B
        CASE 3: LINE (166, 332)-(241, 414), 15, B
        CASE 4: LINE (243, 332)-(318, 372), 15, B
        CASE 5: LINE (243, 374)-(318, 414), 15, B
        CASE 6: LINE (320, 332)-(395, 414), 15, B
        CASE 7: LINE (397, 332)-(472, 414), 15, B
        CASE 8: LINE (474, 332)-(549, 414), 15, B
        CASE 9: LINE (551, 332)-(626, 414), 15, B
    END SELECT
    RETURN

END SUB

SUB HelpMENU
    STATIC HelpITEM, HelpY, Instructions, CornerON

    DO
        MouseSTATUS LB, RB, MouseX, MouseY
        IF Instructions THEN
            SELECT CASE MouseX
                CASE 428 TO 456
                    SELECT CASE MouseY
                        CASE 104 TO 118
                            IF CornerON <> 1 THEN
                                GOSUB LightINSTR
                                CornerON = 1
                            END IF
                        CASE ELSE
                            GOSUB DarkINSTR
                    END SELECT
                CASE ELSE
                    GOSUB DarkINSTR
            END SELECT
            IF CornerON AND LB = -1 THEN
                SELECT CASE Instructions
                    CASE 1
                        loadfile CheckFile$("CHInstr2.BSV")
                        Instructions = 2
                        PUT (180, 100), Box(), PSET
                        ClearMOUSE
                        CornerON = 0
                    CASE 2
                        PUT (180, 100), Box(13000), PSET
                        Instructions = 0
                END SELECT
            END IF
        ELSE
            SELECT CASE MouseX
                CASE 492 TO 584
                    SELECT CASE MouseY
                        CASE 34 TO 55
                            GOSUB DarkHELP
                            IF MouseX < 500 OR MouseX > 544 THEN GOSUB CloseHELP
                        CASE 56 TO 71
                            IF HelpITEM <> 1 THEN
                                GOSUB DarkHELP
                                HelpY = 59
                                GOSUB LightHELP
                                HelpITEM = 1
                            END IF
                        CASE 72 TO 87
                            IF HelpITEM <> 2 THEN
                                GOSUB DarkHELP
                                HelpY = 75
                                GOSUB LightHELP
                                HelpITEM = 2
                            END IF
                        CASE ELSE: GOSUB CloseHELP
                    END SELECT
                CASE ELSE: GOSUB CloseHELP
            END SELECT
            IF HelpITEM > 0 AND LB = -1 THEN
                SELECT CASE HelpITEM
                    CASE 1
                        GOSUB DarkHELP
                        MenuITEM = 0
                        MenuBAR 0
                        GET (180, 100)-(460, 272), Box(13000)
                        loadfile CheckFile$("CHInstr1.BSV")
                        PUT (180, 100), Box(), PSET
                        Instructions = 1
                    CASE 2
                        GOSUB DarkHELP
                        MenuITEM = 0
                        MenuBAR 0
                        GET (180, 100)-(460, 272), Box(13000)
                        loadfile CheckFile$("CHAbout.BSV")
                        PUT (180, 100), Box(), PSET
                        Instructions = 2
                END SELECT
            END IF
        END IF
    LOOP

    EXIT SUB

    LightHELP:
    GET (498, HelpY)-(598, HelpY + 10), MenuBOX2()
    FOR x = 498 TO 598
        FOR y = HelpY TO HelpY + 10
            IF POINT(x, y) = 3 THEN PSET (x, y), 15
        NEXT y
    NEXT x
    RETURN

    DarkHELP:
    IF HelpITEM THEN
        PUT (498, HelpY), MenuBOX2(), PSET
        HelpITEM = 0
    END IF
    RETURN

    LightINSTR:
    FOR x = 428 TO 456
        FOR y = 104 TO 118
            IF POINT(x, y) = 3 THEN PSET (x, y), 15
        NEXT y
    NEXT x
    RETURN

    DarkINSTR:
    IF CornerON <> 0 THEN
        FOR x = 428 TO 456
            FOR y = 104 TO 118
                IF POINT(x, y) = 15 THEN PSET (x, y), 3
            NEXT y
        NEXT x
        CornerON = 0
    END IF
    RETURN

    CloseHELP:
    GOSUB DarkHELP
    MenuITEM = 0
    MenuBAR 0
    EXIT SUB
    RETURN

END SUB

SUB HiLIGHT
    SHARED ItemX, ItemY

    GET (ItemX, ItemY)-(ItemX + 130, ItemY + 10), MenuBOX()
    FOR x = ItemX TO ItemX + 130
        FOR y = ItemY TO ItemY + 10
            IF POINT(x, y) <> 0 THEN PSET (x, y), 15
        NEXT y
    NEXT x

END SUB

DEFSNG A-Z
SUB Interval (Length!)

    OldTimer# = TIMER
    DO: LOOP UNTIL TIMER > OldTimer# + Length!
    WAIT &H3DA, 8

END SUB

DEFINT A-Z
SUB LoadBSI (x, y, FileNAME$)

    ''FileNAME$ = FileNAME$ + ".BSI"
    LoadFILE FileNAME$
    WAIT &H3DA, 8
    PUT (x + Box(0), y + Box(1)), Box(3), AND
    PUT (x + Box(0), y + Box(1)), Box(Box(2))

END SUB

SUB LoadFILE (FileNAME$)

    ''IF INSTR(FileNAME$, ".") = 0 THEN FileNAME$ = FileNAME$ + ".BSV"
    DEF SEG = VARSEG(Box(0))
    BLOAD FileNAME$, VARPTR(Box(0))
    DEF SEG

END SUB

SUB LoadIMAGE (x, y, FileNAME$)

    ''IF INSTR(FileNAME$, ".") = 0 THEN FileNAME$ = FileNAME$ + ".BSV"
    DEF SEG = VARSEG(Box(0))
    BLOAD FileNAME$, VARPTR(Box(0))
    DEF SEG
    WAIT &H3DA, 8
    PUT (x, y), Box()

END SUB

SUB LoadPHASE
    STATIC ExPHASE
    SHARED PX, PY, Trimmed, Style, MotorSTYLE
    SHARED Frame, FrameCOLOR, Extension, FenderSTYLE, BarBOX, GotBOX

    IF Phase <> ExPHASE THEN
        IF Phase = 1 THEN
            LINE (20, 56)-(620, 200), 0, BF
            LINE (90, 201)-(549, 280), 0, BF
            LINE (90, 252)-(549, 280), 2, BF
        END IF
        ClearBOX
        SELECT CASE Phase
            CASE 1
                BarBOX = 0: GotBOX = 0: ImageLOADED = 0
                PX = 0: PY = 0: Trimmed = 0: Style = 0
                BikeCOLOR = 3: FlameSTYLE = 1: SetPALETTE
                LoadIMAGE 116, 300, CheckFile$("CHFrames.BSV")
            CASE 2
                IF Frame = 1 THEN
                    LoadIMAGE 18, 300, CheckFile$("CHFrmCLR.BSV")
                ELSE
                    LoadIMAGE 18, 300, CheckFile$("CHFrmCLX.BSV")
                END IF
            CASE 3
                SELECT CASE FrameCOLOR
                    CASE 1
                        IF Frame = 1 THEN
                            LoadIMAGE 112, 300, CheckFile$("CHExtRP.BSV")
                        ELSE
                            LoadIMAGE 112, 300, CheckFile$("CHExtXP.BSV")
                        END IF
                    CASE 2
                        IF Frame = 1 THEN
                            LoadIMAGE 112, 300, CheckFile$("CHExtRB.BSV")
                        ELSE
                            LoadIMAGE 112, 300, CheckFile$("CHExtXB.BSV")
                        END IF
                    CASE 3
                        IF Frame = 1 THEN
                            LoadIMAGE 112, 300, CheckFile$("CHExtRC.BSV")
                        ELSE
                            LoadIMAGE 112, 300, CheckFile$("CHExtXC.BSV")
                        END IF
                END SELECT
            CASE 4
                SELECT CASE Extension
                    CASE 1: LoadIMAGE 53, 300, CheckFile$("CHFrksR.BSV")
                    CASE 2: LoadIMAGE 53, 300, CheckFile$("CHFrksX.BSV")
                    CASE 3: LoadIMAGE 20, 300, CheckFile$("CHFrksXX.BSV")
                END SELECT
            CASE 5
                LoadIMAGE 89, 312, CheckFile$("CHTiresF.BSV")
            CASE 6
                LoadIMAGE 170, 80, CheckFile$("CHPrepAR.BSV")
                IF Frame = 1 THEN
                    LoadIMAGE 89, 312, CheckFile$("CHTireRR.BSV")
                ELSE
                    LoadIMAGE 89, 312, CheckFile$("CHTireRX.BSV")
                END IF
            CASE 7
                LoadIMAGE 70, 310, CheckFile$("CHWheels.BSV")
            CASE 8
                LoadIMAGE 88, 305, CheckFile$("CHFndrs.BSV")
            CASE 9
                LoadIMAGE 140, 320, CheckFile$("CHMotors.BSV")
            CASE 10
                IF MotorSTYLE = 2 THEN
                    LoadIMAGE 144, 320, CheckFile$("CHMtrKCL.BSV")
                ELSE
                    LoadIMAGE 144, 320, CheckFile$("CHMtrBCL.BSV")
                END IF
            CASE 11
                LoadIMAGE 137, 320, CheckFile$("CHDrives.BSV")
            CASE 12
                LoadIMAGE 142, 330, CheckFile$("CHBDCvrs.BSV")
            CASE 13
                LoadIMAGE 118, 330, CheckFile$("CHIntaks.BSV")
            CASE 14
                LoadIMAGE 190, 320, CheckFile$("CHRDrvV.BSV")
            CASE 15
                LoadIMAGE 102, 320, CheckFile$("CHRDrv7.BSV")
            CASE 16
                LoadIMAGE 60, 310, CheckFile$("CHExBR.BSV")
            CASE 17
                LoadIMAGE 42, 310, CheckFile$("CHExVs.BSV")
            CASE 18
                LoadIMAGE 88, 320, CheckFile$("CHFTanks.BSV")
            CASE 19
                LoadIMAGE 76, 330, CheckFile$("CHOTnksR.BSV")
            CASE 20
                LoadIMAGE 167, 330, CheckFile$("CHOTnksX.BSV")
            CASE 21
                LoadIMAGE 12, 310, CheckFile$("CHHBars.BSV")
            CASE 22
                LoadIMAGE 38, 320, CheckFile$("CHSeats.BSV")
            CASE 23
                LoadIMAGE 80, 324, CheckFile$("CHHDLts.BSV")
            CASE 24
                SELECT CASE FenderSTYLE
                    CASE 1: LoadIMAGE 122, 320, CheckFile$("CHTLLTSS.BSV")
                    CASE 2: LoadIMAGE 122, 320, CheckFile$("CHTLLTSC.BSV")
                    CASE 3: LoadIMAGE 122, 320, CheckFile$("CHTLLTSF.BSV")
                END SELECT
            CASE 25
                LoadIMAGE 20, 300, CheckFile$("CHPaint.BSV")
        END SELECT

        ExPHASE = Phase
    END IF

END SUB

SUB MenuBAR (InOUT)
    STATIC MenuX, BoxX
    SHARED FFLX, FFRX, FFTY, FFBY, RFLX, RFRX, RFTY, RFBY, TX, TY
    SHARED FrameX, FrameY, FenderSTYLE, HighPIPE, OT, GPaint, Frame

    IF BoxX <> 0 THEN GOSUB CloseBOX
    IF InOUT = 0 THEN GOSUB MenuDARK: EXIT SUB

    SELECT CASE MouseX
        CASE 431 TO 464
            IF TopMENU <> 1 THEN
                GOSUB MenuDARK
                MenuX = 432
                GOSUB MenuLIGHT
                TopMENU = 1
            END IF
        CASE 513 TO 532
            IF TopMENU <> 2 THEN
                GOSUB MenuDARK
                MenuX = 513
                GOSUB MenuLIGHT
                TopMENU = 2
            END IF
        CASE 582 TO 602
            IF TopMENU <> 3 THEN
                GOSUB MenuDARK
                MenuX = 582
                GOSUB MenuLIGHT
                TopMENU = 3
            END IF
        CASE ELSE
            GOSUB MenuDARK
    END SELECT

    IF TopMENU AND LB = -1 THEN
        SELECT CASE TopMENU
            CASE 1
                GET (416, 46)-(563, 148), MenuBOX3()
                loadfile CheckFile$("CHProMNU.BSV")
                WAIT &H3DA, 8
                PUT (416, 46), Box(), PSET
                BoxX = 416
                MenuITEM = 1
            CASE 2
                GET (472, 46)-(598, 100), MenuBOX3()
                loadfile CheckFile$("CHHlpMNU.BSV")
                WAIT &H3DA, 8
                PUT (492, 46), Box(), PSET
                BoxX = 472
                MenuITEM = 2
            CASE 3: GOSUB MenuDARK: SYSTEM
        END SELECT
    END IF

    EXIT SUB

    MenuLIGHT:
    GET (MenuX, 34)-(MenuX + 31, 44), MenuBOX()
    FOR x = MenuX TO MenuX + 31
        FOR y = 34 TO 44
            IF POINT(x, y) <> 1 THEN PSET (x, y), 15
        NEXT y
    NEXT x
    RETURN

    MenuDARK:
    IF TopMENU THEN
        PUT (MenuX, 34), MenuBOX(), PSET
        TopMENU = 0
    END IF
    RETURN

    CloseBOX:
    IF BoxX THEN
        PUT (BoxX, 46), MenuBOX3(), PSET
        BoxX = 0
    END IF
    RETURN

END SUB

SUB MouseSTATUS (LB, RB, MouseX, MouseY)

    WHILE _MOUSEINPUT: WEND
    LB = _MOUSEBUTTON(1)
    RB = _MOUSEBUTTON(2)
    MouseX = _MOUSEX
    MouseY = _MOUSEY

END SUB

SUB PaintSHOP (Mode)
    SHARED PX, PY, Trimmed, Style
    SHARED FFLX, FFRX, FFTY, FFBY, RFLX, RFRX, RFTY, RFBY, TX, TY
    SHARED FrameX, FrameY, FenderSTYLE, HighPIPE, OT, GPaint, Frame
    SHARED WheelFX, WheelFY, WheelRX, WheelRY, Cover, Tank, TTY, TTTY

    IF Mode = 0 THEN GOSUB UnLIGHT: EXIT SUB

    SELECT CASE MouseX
        CASE 82 TO 106
            SELECT CASE MouseY
                CASE 353 TO 364
                    IF PaintITEM <> 1 THEN
                        GOSUB UnLIGHT
                        PX = 85: PY = 356
                        GOSUB LIGHT
                        PaintITEM = 1
                    END IF
                CASE 367 TO 378
                    IF PaintITEM <> 2 THEN
                        GOSUB UnLIGHT
                        PX = 85: PY = 370
                        GOSUB LIGHT
                        PaintITEM = 2
                    END IF
                CASE 381 TO 392
                    IF PaintITEM <> 3 THEN
                        GOSUB UnLIGHT
                        PX = 85: PY = 384
                        GOSUB LIGHT
                        PaintITEM = 3
                    END IF
                CASE 395 TO 406
                    IF PaintITEM <> 4 THEN
                        GOSUB UnLIGHT
                        PX = 85: PY = 398
                        GOSUB LIGHT
                        PaintITEM = 4
                    END IF
                CASE 409 TO 420
                    IF PaintITEM <> 5 THEN
                        GOSUB UnLIGHT
                        PX = 85: PY = 412
                        GOSUB LIGHT
                        PaintITEM = 5
                    END IF
                CASE ELSE
                    GOSUB UnLIGHT
            END SELECT
        CASE 172 TO 196
            SELECT CASE MouseY
                CASE 353 TO 364
                    IF PaintITEM <> 6 THEN
                        GOSUB UnLIGHT
                        PX = 175: PY = 356
                        GOSUB LIGHT
                        PaintITEM = 6
                    END IF
                CASE 367 TO 378
                    IF PaintITEM <> 7 THEN
                        GOSUB UnLIGHT
                        PX = 175: PY = 370
                        GOSUB LIGHT
                        PaintITEM = 7
                    END IF
                CASE 381 TO 392
                    IF PaintITEM <> 8 THEN
                        GOSUB UnLIGHT
                        PX = 175: PY = 384
                        GOSUB LIGHT
                        PaintITEM = 8
                    END IF
                CASE 395 TO 406
                    IF PaintITEM <> 9 THEN
                        GOSUB UnLIGHT
                        PX = 175: PY = 398
                        GOSUB LIGHT
                        PaintITEM = 9
                    END IF
                CASE 409 TO 420
                    IF PaintITEM <> 10 THEN
                        GOSUB UnLIGHT
                        PX = 175: PY = 412
                        GOSUB LIGHT
                        PaintITEM = 10
                    END IF
                CASE ELSE
                    GOSUB UnLIGHT
            END SELECT
        CASE 304 TO 328
            SELECT CASE MouseY
                CASE 353 TO 364
                    IF PaintITEM <> 11 THEN
                        GOSUB UnLIGHT
                        PX = 307: PY = 356
                        GOSUB LIGHT
                        PaintITEM = 11
                    END IF
                CASE 367 TO 378
                    IF PaintITEM <> 12 THEN
                        GOSUB UnLIGHT
                        PX = 307: PY = 370
                        GOSUB LIGHT
                        PaintITEM = 12
                    END IF
                CASE 381 TO 392
                    IF PaintITEM <> 13 THEN
                        GOSUB UnLIGHT
                        PX = 307: PY = 384
                        GOSUB LIGHT
                        PaintITEM = 13
                    END IF
                CASE 409 TO 420
                    IF PaintITEM <> 14 THEN
                        GOSUB UnLIGHT
                        PX = 307: PY = 412
                        GOSUB LIGHT
                        PaintITEM = 14
                    END IF
                CASE ELSE
                    GOSUB UnLIGHT
            END SELECT
        CASE 420 TO 444
            SELECT CASE MouseY
                CASE 353 TO 364
                    IF PaintITEM <> 15 THEN
                        GOSUB UnLIGHT
                        PX = 423: PY = 356
                        GOSUB LIGHT
                        PaintITEM = 15
                    END IF
                CASE 367 TO 378
                    IF PaintITEM <> 16 THEN
                        GOSUB UnLIGHT
                        PX = 423: PY = 370
                        GOSUB LIGHT
                        PaintITEM = 16
                    END IF
                CASE 381 TO 392
                    IF PaintITEM <> 17 THEN
                        GOSUB UnLIGHT
                        PX = 423: PY = 384
                        GOSUB LIGHT
                        PaintITEM = 17
                    END IF
                CASE 395 TO 406
                    IF PaintITEM <> 18 THEN
                        GOSUB UnLIGHT
                        PX = 423: PY = 398
                        GOSUB LIGHT
                        PaintITEM = 18
                    END IF
                CASE 409 TO 420
                    IF PaintITEM <> 19 THEN
                        GOSUB UnLIGHT
                        PX = 423: PY = 412
                        GOSUB LIGHT
                        PaintITEM = 19
                    END IF
                CASE ELSE
                    GOSUB UnLIGHT
            END SELECT
        CASE ELSE
            GOSUB UnLIGHT
    END SELECT

    IF PaintITEM AND LB = -1 THEN
        SELECT CASE PaintITEM
            CASE 1 TO 10: BikeCOLOR = PaintITEM - 1: SetPALETTE
            CASE 11
                IF Style <> 1 THEN
                    IF Frame = 1 AND Tank = 2 THEN TTTY = -6
                    GOSUB NoTRIM
                    OPEN CheckFile$("FF.DAT") FOR INPUT AS #1
                    SELECT CASE FenderSTYLE
                        CASE 1: OPEN CheckFile$("FFSF.DAT") FOR INPUT AS #2
                        CASE 2: OPEN CheckFile$("FFCF.DAT") FOR INPUT AS #2
                        CASE 3: OPEN CheckFile$("FFFF.DAT") FOR INPUT AS #2
                    END SELECT
                    OPEN "FFW.DAT" FOR OUTPUT AS #3
                    INPUT #1, x1, xx, y1, yy
                    WRITE #3, x1, xx, y1, yy
                    FOR x = x1 TO x1 + xx
                        FOR y = y1 TO y1 + yy
                            INPUT #1, Value
                            INPUT #2, Colr
                            WRITE #3, POINT(x, y)
                            IF Value = 1 AND Colr <> 0 THEN PSET (x, y), Colr
                        NEXT y
                    NEXT x
                    CLOSE #1, #2, #3
                    OPEN CheckFile$("FTnkF.DTI") FOR INPUT AS #1
                    OPEN "TNKW.DAT" FOR OUTPUT AS #2
                    INPUT #1, x1, xx, y1, yy
                    x1 = FrameX + x1 + TX
                    y1 = FrameY + y1 + TY + TTTY
                    WRITE #2, x1, xx, y1, yy
                    FOR x = x1 TO x1 + xx
                        FOR y = y1 TO y1 + yy
                            WRITE #2, POINT(x, y)
                            INPUT #1, Colr
                            IF Colr <> 0 THEN
                                IF POINT(x, y) = 6 OR POINT(x, y) = 7 OR POINT(x, y) = 13 THEN PSET (x, y), Colr
                            END IF
                        NEXT y
                    NEXT x
                    CLOSE #1, #2
                    IF Cover THEN
                        OPEN CheckFile$("DCPB.DAT") FOR INPUT AS #1
                        OPEN "DCW.DAT" FOR OUTPUT AS #2
                        INPUT #1, x1, xx, y1, yy
                        x1 = FrameX + x1
                        y1 = FrameY + y1
                        WRITE #2, x1, xx, y1, yy
                        FOR x = x1 TO x1 + xx
                            FOR y = y1 TO y1 + yy
                                WRITE #2, POINT(x, y)
                                INPUT #1, Colr
                                IF Colr <> 0 THEN
                                    IF POINT(x, y) = 6 OR POINT(x, y) = 7 OR POINT(x, y) = 10 THEN PSET (x, y), Colr
                                END IF
                            NEXT y
                        NEXT x
                        CLOSE #1, #2
                    END IF
                    GOSUB OilTANK
                    OPEN CheckFile$("RF.DAT") FOR INPUT AS #1
                    SELECT CASE FenderSTYLE
                        CASE 1
                            IF OT = 5 THEN
                                OPEN CheckFile$("RFSRFB.DAT") FOR INPUT AS #2
                            ELSE
                                IF GPaint = 1 OR FenderSTYLE = 1 THEN
                                    IF Frame = 1 THEN
                                        OPEN CheckFile$("RFSRCG.DAT") FOR INPUT AS #2
                                    ELSE
                                        OPEN CheckFile$("RFSXCG.DAT") FOR INPUT AS #2
                                    END IF
                                ELSE
                                    OPEN CheckFile$("RFS.DAT") FOR INPUT AS #2
                                END IF
                            END IF
                        CASE 2
                            IF OT = 5 THEN
                                OPEN CheckFile$("RFCRFB.DAT") FOR INPUT AS #2
                            ELSE
                                IF GPaint = 1 THEN
                                    IF Frame = 1 THEN
                                        OPEN CheckFile$("RFCRCG.DAT") FOR INPUT AS #2
                                    ELSE
                                        OPEN CheckFile$("RFCXCG.DAT") FOR INPUT AS #2
                                    END IF
                                ELSE
                                    OPEN CheckFile$("RFC.DAT") FOR INPUT AS #2
                                END IF
                            END IF
                        CASE 3: OPEN CheckFile$("RFF.DAT") FOR INPUT AS #2
                    END SELECT
                    OPEN "RFW.DAT" FOR OUTPUT AS #3
                    INPUT #1, x1, xx, y1, yy
                    WRITE #3, x1, xx, y1, yy
                    FOR x = x1 TO x1 + xx
                        FOR y = y1 TO y1 + yy
                            INPUT #1, Value
                            INPUT #2, Colr
                            IF POINT(x, y) = 8 OR POINT(x, y) = 12 OR POINT(x, y) = 14 THEN
                                WRITE #3, 7
                            ELSE
                                WRITE #3, POINT(x, y)
                            END IF
                            IF POINT(x, y) = 7 OR POINT(x, y) = 6 THEN
                                IF Value = 1 AND Colr <> 0 THEN PSET (x, y), Colr
                            END IF
                        NEXT y
                    NEXT x
                    CLOSE #1, #2, #3
                    Trimmed = 1
                    Style = 1
                END IF
            CASE 12
                IF Style <> 2 THEN
                    IF Frame = 1 AND Tank = 2 THEN TTTY = -6
                    GOSUB NoTRIM
                    OPEN CheckFile$("FTnkF2.DTI") FOR INPUT AS #1
                    OPEN "TNKW.DAT" FOR OUTPUT AS #2
                    INPUT #1, xx, yy
                    x1 = FrameX + 30 + TX
                    y1 = FrameY + 12 + TY + TTTY
                    WRITE #2, x1, xx, y1, yy
                    FOR x = 0 TO xx
                        FOR y = 0 TO yy
                            WRITE #2, POINT(x + x1, y + y1)
                            INPUT #1, Colr
                            IF Colr <> 0 THEN
                                IF POINT(x + x1, y + y1) = 6 OR POINT(x + x1, y + y1) = 7 OR POINT(x + x1, y + y1) = 13 THEN PSET (x + x1, y + y1), Colr
                            END IF
                        NEXT y
                    NEXT x
                    CLOSE #1, #2
                    IF Cover THEN
                        OPEN CheckFile$("DrCvrF2.DTI") FOR INPUT AS #1
                        OPEN "CVRW.DAT" FOR OUTPUT AS #2
                        INPUT #1, xx, yy
                        x1 = FrameX + 74
                        y1 = FrameY + 101
                        WRITE #2, x1, xx, y1, yy
                        FOR x = 0 TO xx
                            FOR y = 0 TO yy
                                WRITE #2, POINT(x + x1, y + y1)
                                INPUT #1, Colr
                                IF Colr <> 0 THEN
                                    IF POINT(x + x1, y + y1) > 5 AND POINT(x + x1, y + y1) < 11 THEN PSET (x + x1, y + y1), Colr
                                END IF
                            NEXT y
                        NEXT x
                        CLOSE #1, #2
                    END IF
                    Style = 2
                    Trimmed = 1
                END IF
            CASE 13
                IF Style <> 3 THEN
                    GOSUB NoTRIM
                    SELECT CASE FenderSTYLE
                        CASE 1: OPEN CheckFile$("FFSP.DAT") FOR INPUT AS #1
                        CASE 2: OPEN CheckFile$("FFCP.DAT") FOR INPUT AS #1
                        CASE 3: OPEN CheckFile$("FFFP.DAT") FOR INPUT AS #1
                    END SELECT
                    OPEN CheckFile$("FF.DAT") FOR INPUT AS #2
                    OPEN "FFW.DAT" FOR OUTPUT AS #3
                    INPUT #2, x1, xx, y1, yy
                    WRITE #3, x1, xx, y1, yy
                    FOR x = x1 TO x1 + xx
                        FOR y = y1 TO y1 + yy
                            WRITE #3, POINT(x, y)
                            INPUT #1, Colr
                            INPUT #2, Value
                            IF Value = 1 THEN
                                IF Colr <> 0 THEN PSET (x, y), Colr
                            END IF
                        NEXT y
                    NEXT x
                    CLOSE #1, #2, #3
                    IF Frame = 1 THEN
                        OPEN CheckFile$("DTR.DAT") FOR INPUT AS #1
                    ELSE
                        OPEN CheckFile$("DTX.DAT") FOR INPUT AS #1
                    END IF
                    OPEN "DTW.DAT" FOR OUTPUT AS #2
                    INPUT #1, x1, xx, y1, yy
                    x1 = FrameX + x1
                    y1 = FrameY + y1
                    WRITE #2, x1, xx, y1, yy
                    FOR x = x1 TO x1 + xx
                        FOR y = y1 TO y1 + yy
                            WRITE #2, POINT(x, y)
                            INPUT #1, Colr
                            IF Colr <> 0 THEN
                                IF POINT(x, y) = 6 OR POINT(x, y) = 7 OR POINT(x, y) = 13 THEN PSET (x, y), Colr
                            END IF
                        NEXT y
                    NEXT x
                    CLOSE #1, #2
                    SELECT CASE Tank
                        CASE 1: OPEN CheckFile$("FTnkTDP.DAT") FOR INPUT AS #1
                        CASE 2: OPEN CheckFile$("FTnkSCP.DAT") FOR INPUT AS #1
                        CASE 3: OPEN CheckFile$("FTnkOSP.DAT") FOR INPUT AS #1
                        CASE 4: OPEN CheckFile$("FTnkCBP.DAT") FOR INPUT AS #1
                        CASE 5: OPEN CheckFile$("FTnkBRP.DAT") FOR INPUT AS #1
                    END SELECT
                    OPEN "TNKW.DAT" FOR OUTPUT AS #2
                    INPUT #1, x1, xx, y1, yy
                    x1 = x1 + FrameX
                    y1 = y1 + FrameY + TTY
                    WRITE #2, x1, xx, y1, yy
                    FOR x = x1 TO x1 + xx
                        FOR y = y1 TO y1 + yy
                            WRITE #2, POINT(x, y)
                            INPUT #1, Colr
                            IF Colr <> 0 THEN
                                IF POINT(x, y) = 6 OR POINT(x, y) = 7 OR POINT(x, y) = 13 THEN PSET (x, y), Colr
                            END IF
                        NEXT y
                    NEXT x
                    CLOSE #1, #2
                    IF Cover THEN
                        OPEN CheckFile$("DCPB.DAT") FOR INPUT AS #1
                        OPEN "DCW.DAT" FOR OUTPUT AS #2
                        INPUT #1, x1, xx, y1, yy
                        x1 = FrameX + x1
                        y1 = FrameY + y1
                        WRITE #2, x1, xx, y1, yy
                        FOR x = x1 TO x1 + xx
                            FOR y = y1 TO y1 + yy
                                WRITE #2, POINT(x, y)
                                INPUT #1, Colr
                                IF Colr <> 0 THEN
                                    IF POINT(x, y) = 6 OR POINT(x, y) = 7 OR POINT(x, y) = 10 THEN PSET (x, y), Colr
                                END IF
                            NEXT y
                        NEXT x
                        CLOSE #1, #2
                    END IF
                    GOSUB OilTANK
                    SELECT CASE FenderSTYLE
                        CASE 1: OPEN CheckFile$("RFSP.DAT") FOR INPUT AS #1
                        CASE 2: OPEN CheckFile$("RFCP.DAT") FOR INPUT AS #1
                        CASE 3: OPEN CheckFile$("RFFP.DAT") FOR INPUT AS #1
                    END SELECT
                    OPEN CheckFile$("RF.DAT") FOR INPUT AS #2
                    OPEN "RFW.DAT" FOR OUTPUT AS #3
                    INPUT #2, x1, xx, y1, yy
                    WRITE #3, x1, xx, y1, yy
                    FOR x = x1 TO x1 + xx
                        FOR y = y1 TO y1 + yy
                            IF POINT(x, y) = 8 OR POINT(x, y) = 12 OR POINT(x, y) = 14 THEN
                                WRITE #3, 7
                            ELSE
                                WRITE #3, POINT(x, y)
                            END IF
                            INPUT #1, Colr
                            INPUT #2, Value
                            IF Value = 1 THEN
                                IF Colr <> 0 THEN
                                    IF POINT(x, y) = 6 OR POINT(x, y) = 7 OR POINT(x, y) = 13 THEN PSET (x, y), Colr
                                END IF
                            END IF
                        NEXT y
                    NEXT x
                    CLOSE #1, #2, #3
                    Style = 3
                    Trimmed = 1
                END IF
            CASE 14
                GOSUB NoTRIM
            CASE 15: FlameSTYLE = 1: SetPALETTE
            CASE 16: FlameSTYLE = 0: SetPALETTE
            CASE 17: FlameSTYLE = 2: SetPALETTE
            CASE 18: FlameSTYLE = 3: SetPALETTE
            CASE 19: FlameSTYLE = 4: SetPALETTE
        END SELECT
    END IF

    EXIT SUB

    UnLIGHT:
    IF PaintITEM THEN
        PUT (PX, PY), MenuBOX(), PSET
        PaintITEM = 0
    END IF
    RETURN

    LIGHT:
    GET (PX, PY)-(PX + 18, PY + 5), MenuBOX()
    LINE (PX + 1, PY + 1)-(PX + 17, PY + 4), 15, BF
    RETURN

    NoTRIM:
    IF Trimmed THEN
        SELECT CASE Style
            CASE 1
                OPEN CheckFile$("FFW.DAT") FOR INPUT AS #1
                GOSUB FileDAT
                CLOSE #1
                OPEN CheckFile$("TnkW.DAT") FOR INPUT AS #1
                GOSUB FileDAT
                CLOSE #1
                IF Cover THEN
                    OPEN CheckFile$("DCW.DAT") FOR INPUT AS #1
                    GOSUB FileDAT
                    CLOSE #1
                END IF
                IF OT = 1 OR OT = 3 OR OT = 5 THEN
                    OPEN CheckFile$("OTW.DAT") FOR INPUT AS #1
                    GOSUB FileDAT
                    CLOSE #1
                END IF
                OPEN CheckFile$("RFW.DAT") FOR INPUT AS #1
                GOSUB FileDAT
                CLOSE #1
            CASE 2
                OPEN CheckFile$("TnkW.DAT") FOR INPUT AS #1
                GOSUB FileDAT
                CLOSE #1
                IF Cover THEN
                    OPEN CheckFile$("DCW.DAT") FOR INPUT AS #1
                    GOSUB FileDAT
                    CLOSE #1
                END IF
                IF OT = 1 OR OT = 3 OR OT = 5 THEN
                    OPEN CheckFile$("OTW.DAT") FOR INPUT AS #1
                    GOSUB FileDAT
                    CLOSE #1
                END IF
            CASE 3
                OPEN CheckFile$("FFW.DAT") FOR INPUT AS #1
                GOSUB FileDAT
                CLOSE #1
                OPEN CheckFile$("DTW.DAT") FOR INPUT AS #1
                GOSUB FileDAT
                CLOSE #1
                OPEN CheckFile$("TnkW.DAT") FOR INPUT AS #1
                GOSUB FileDAT
                CLOSE #1
                IF Cover THEN
                    OPEN CheckFile$("DCW.DAT") FOR INPUT AS #1
                    GOSUB FileDAT
                    CLOSE #1
                END IF
                IF OT = 1 OR OT = 3 OR OT = 5 THEN
                    OPEN CheckFile$("OTW.DAT") FOR INPUT AS #1
                    GOSUB FileDAT
                    CLOSE #1
                END IF
                OPEN CheckFile$("RFW.DAT") FOR INPUT AS #1
                GOSUB FileDAT
                CLOSE #1
        END SELECT
        Trimmed = 0
        Style = 0
    END IF
    RETURN

    OilTANK:
    IF OT = 1 OR OT = 3 OR OT = 5 THEN
        IF OT = 1 THEN
            OPEN CheckFile$("OTH.DAT") FOR INPUT AS #1
            INPUT #1, x1, xx, y1, yy
        END IF
        IF OT = 3 THEN
            OPEN CheckFile$("OTC.DAT") FOR INPUT AS #1
            INPUT #1, x1, xx, y1, yy
        END IF
        IF OT = 5 THEN
            OPEN CheckFile$("OTBP.DAT") FOR INPUT AS #1
            INPUT #1, x1, xx, y1, yy
        END IF
        OPEN "OTW.DAT" FOR OUTPUT AS #2
        x1 = FrameX + x1
        y1 = FrameY + y1
        WRITE #2, x1, xx, y1, yy
        FOR x = x1 TO x1 + xx
            FOR y = y1 TO y1 + yy
                WRITE #2, POINT(x, y)
                INPUT #1, Colr
                IF Colr <> 0 THEN
                    IF POINT(x, y) = 6 OR POINT(x, y) = 7 OR POINT(x, y) = 13 THEN PSET (x, y), Colr
                END IF
            NEXT y
        NEXT x
        CLOSE #1, #2
    END IF
    RETURN

    FileDAT:
    INPUT #1, x1, xx, y1, yy
    FOR x = x1 TO x1 + xx
        FOR y = y1 TO y1 + yy
            INPUT #1, Colr
            PSET (x, y), Colr
        NEXT y
    NEXT x
    RETURN

END SUB

SUB PauseMOUSE (OldLB, OldRB, OldMX, OldMY)


    SHARED Key$

    DO
        Key$ = UCASE$(INKEY$)
        MouseSTATUS LB, RB, MouseX, MouseY
    LOOP UNTIL LB <> OldLB OR RB <> OldRB OR MouseX <> OldMX OR MouseY <> OldMY OR Key$ <> ""

END SUB

SUB PrintSTRING (x, y, Prnt$)

    DEF SEG = VARSEG(Box(0))
    BLOAD CheckFile$("CHMSSR.FBS"), VARPTR(Box(0))
    DEF SEG

    FOR i = 1 TO LEN(Prnt$)
        Char$ = MID$(Prnt$, i, 1)
        IF Char$ = " " THEN
            x = x + Box(1)
        ELSE
            Index = (ASC(Char$) - 33) * Box(0) + 2
            PUT (x, y), Box(Index)
            x = x + Box(Index)
        END IF
    NEXT i

END SUB

SUB ProjectMENU
    STATIC ProITEM, ProY

    DO
        MouseSTATUS LB, RB, MouseX, MouseY
        SELECT CASE MouseX
            CASE 423 TO 552
                SELECT CASE MouseY
                    CASE 34 TO 55
                        GOSUB DarkPRO
                        IF MouseX > 464 THEN GOSUB ClosePRO
                    CASE 56 TO 71
                        IF ProITEM <> 1 THEN
                            GOSUB DarkPRO
                            ProY = 59
                            GOSUB LightPRO
                            ProITEM = 1
                        END IF
                    CASE 72 TO 87
                        IF ProITEM <> 2 THEN
                            GOSUB DarkPRO
                            ProY = 75
                            GOSUB LightPRO
                            ProITEM = 2
                        END IF
                    CASE ELSE: GOSUB ClosePRO
                END SELECT
            CASE ELSE: GOSUB ClosePRO
        END SELECT

        IF ProITEM <> 0 AND LB = -1 THEN
            SELECT CASE ProITEM
                CASE 1
                    Phase = 1
                    GOSUB ClosePRO
                CASE 2
                    GOSUB DarkPRO
                    MenuITEM = 0
                    MenuBAR 0
                    GET (178, 60)-(460, 152), Box(10000)
                    loadfile CheckFile$("CHSaveBM.BSV")
                    PUT (178, 60), Box(), PSET
                    GOSUB GetNAME
                    PUT (178, 60), Box(10000), PSET
                    IF LEN(FileNAME$) THEN
                        FileNAME$ = LTRIM$(RTRIM$(FileNAME$))
                        IF INSTR(FileNAME$, " ") OR LEN(FileNAME$) > 8 THEN
                            LongNAME = 1
                            LongFILENAME$ = FileNAME$ + ".BMP"
                            FOR n = 1 TO LEN(FileNAME$)
                                Char$ = MID$(FileNAME$, n, 1)
                                IF Char$ <> " " THEN NewFILENAME$ = NewFILENAME$ + Char$
                            NEXT n
                            FileNAME$ = RTRIM$(LEFT$(NewFILENAME$, 6)) + "~1"
                            FileNAME$ = FileNAME$ + ".TBM"
                        ELSE
                            FileNAME$ = FileNAME$ + ".BMP"
                        END IF
                        GET (90, 250)-(549, 348), Box(5000)
                        LINE (90, 250)-(100, 310), 0, BF
                        LINE (539, 250)-(549, 310), 0, BF
                        LINE (90, 285)-(549, 310), 0, BF
                        LINE (95, 55)-(544, 305), 3, B
                        LINE (115, 310)-(524, 348), 0, BF
                        loadfile CheckFile$("CHGenBMP.BSV")
                        PUT (90, 310), Box(), PSET

                        FILENAME$ = lcase$(FILENAME$)
                        LongFILENAME$ = lcase$(LongFILENAME$)
                        FourBIT 90, 50, 549, 310, FileNAME$

                        LINE (95, 55)-(544, 305), 0, B
                        PUT (90, 250), Box(5000), PSET
                        IF LongNAME = 1 THEN
$IF WIN THEN
                            SHELL "REN " + FileNAME$ + " TMP.TBM"
                            SHELL "REN TMP.TBM " + CHR$(34) + LongFILENAME$ + CHR$(34)
$ELSE
                            SHELL "mv " + CheckFile$(FileNAME$) + " TMP.TBM"
                            SHELL "mv TMP.TBM " + CHR$(34) + LongFILENAME$ + CHR$(34)
$END IF
                            LongNAME = 0
                        END IF
                    END IF
                    EXIT SUB
            END SELECT
        END IF

    LOOP

    EXIT SUB

    LightPRO:
    GET (430, ProY)-(560, ProY + 10), MenuBOX2()
    FOR x = 430 TO 560
        FOR y = ProY TO ProY + 10
            IF POINT(x, y) = 3 THEN PSET (x, y), 15
        NEXT y
    NEXT x
    RETURN

    DarkPRO:
    IF ProITEM THEN
        PUT (430, ProY), MenuBOX2(), PSET
        ProITEM = 0
    END IF
    RETURN

    ClosePRO:
    GOSUB DarkPRO
    MenuITEM = 0
    MenuBAR 0
    EXIT SUB
    RETURN

    GetNAME:
    CheckCHAR$ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "
    n$ = "": ky$ = "": PrintX = 242: CharNUM = 1

    DO
        MouseSTATUS LB, RB, MouseX, MouseY
        ky$ = INKEY$
        LINE (PrintX + 2, 118)-(PrintX + 2, 128), 5
        IF LEN(ky$) THEN
            SELECT CASE ASC(ky$)
                CASE 8
                    IF LEN(n$) > 0 THEN
                        CharNUM = CharNUM - 1
                        LINE (FChar(CharNUM), 118)-(PrintX + 2, 129), 15, BF
                        PrintX = FChar(CharNUM)
                        n$ = MID$(n$, 1, LEN(n$) - 1)
                        LINE (PrintX + 2, 118)-(PrintX + 2, 128), 5
                    END IF
                CASE 13
                    FileNAME$ = n$
                    n$ = ""
                    ky$ = ""
                    RETURN
                CASE ELSE
                    IF INSTR(CheckCHAR$, ky$) THEN
                        IF PrintX < 390 THEN
                            FChar(CharNUM) = PrintX
                            CharNUM = CharNUM + 1
                            LINE (PrintX + 2, 118)-(PrintX + 2, 128), 15
                            PrintSTRING PrintX, 118, ky$
                            LINE (PrintX + 2, 118)-(PrintX + 2, 128), 5
                            n$ = n$ + ky$
                        END IF
                    END IF
            END SELECT
        END IF
    LOOP
    RETURN

END SUB

FUNCTION Seeker (x, y, Mode)

    SELECT CASE Mode
        CASE 0 'left side
            FOR xx = x TO x + 140
                FOR yy = y TO y + 100
                    IF POINT(xx, yy) = 6 OR POINT(xx, yy) = 7 THEN Seeker = xx: EXIT FUNCTION
                NEXT yy
            NEXT xx
        CASE 1 'right side
            FOR xx = x + 140 TO x STEP -1
                FOR yy = y TO y + 100
                    IF POINT(xx, yy) = 6 OR POINT(xx, yy) = 7 THEN Seeker = xx: EXIT FUNCTION
                NEXT yy
            NEXT xx
        CASE 2 'top
            FOR yy = y TO y + 100
                FOR xx = x TO x + 140
                    IF POINT(xx, yy) = 6 OR POINT(xx, yy) = 7 THEN Seeker = yy: EXIT FUNCTION
                NEXT xx
            NEXT yy
        CASE 3 'bottom
            FOR yy = y + 100 TO y STEP -1
                FOR xx = x TO x + 140
                    IF POINT(xx, yy) = 6 OR POINT(xx, yy) = 7 THEN Seeker = yy: EXIT FUNCTION
                NEXT xx
            NEXT yy
    END SELECT

END FUNCTION

SUB SetPALETTE

    RESTORE PaletteDATA
    OUT &H3C8, 0
    FOR n = 1 TO 18
        READ Colr
        OUT &H3C9, Colr
    NEXT n

    RESTORE CustomCOLORS
    REDIM Colors(6)
    FOR n = 0 TO 6
        READ Colors(n)
    NEXT n

    CColor = 0
    FOR n = 0 TO 6
        OUT &H3C8, Colors(n)
        FOR i = 1 TO 3
            OUT &H3C9, CustomCOLORS(BikeCOLOR, CColor)
            CColor = CColor + 1
        NEXT i
    NEXT n

    IF FlameSTYLE THEN
        SELECT CASE FlameSTYLE
            CASE 1: RESTORE FlameCOLOR
            CASE 2: RESTORE SilverCOLOR
            CASE 3: RESTORE GoldCOLOR
            CASE 4: RESTORE WhiteCOLOR
        END SELECT
        OUT &H3C8, 8
        FOR i = 1 TO 3
            READ Colr: OUT &H3C9, Colr
        NEXT i
        OUT &H3C8, 12
        FOR i = 1 TO 3
            READ Colr: OUT &H3C9, Colr
        NEXT i
        OUT &H3C8, 14
        FOR i = 1 TO 3
            READ Colr: OUT &H3C9, Colr
        NEXT i
    END IF

    OUT &H3C8, 9: OUT &H3C9, 21: OUT &H3C9, 21: OUT &H3C9, 63
    OUT &H3C8, 11: OUT &H3C9, 63: OUT &H3C9, 0: OUT &H3C9, 0

END SUB

SUB Tire (x, y, Outer, Inner)

    CIRCLE (x, y), Outer, 2
    CIRCLE STEP(0, 0), Inner, 2
    PaintSPOT = Outer - 4
    PAINT (x, y - PaintSPOT), 1, 2
    CIRCLE (x, y), Outer, 1
    CIRCLE (x, y), Outer - 1, 2, 30 * Degree!, 210 * Degree!
    CIRCLE (x, y), Outer - 3, 2, 30 * Degree!, 210 * Degree!
    Tread x, y, Outer - 1, 120, 300, 5
    Tread x, y, Outer - 3, 120, 300, 5
    Tread x, y, Outer - 1, 300, 475, 2
    Tread x, y, Outer - 3, 300, 475, 2
    IF Outer - Inner > 14 THEN
        CIRCLE (x, y), Outer - 6, 2, 30 * Degree!, 210 * Degree!
        Tread x, y, Outer - 6, 120, 300, 5
        Tread x, y, Outer - 6, 300, 475, 2
    END IF

END SUB

SUB Tread (x, y, Radius, StartDEG, StopDEG, Colr)

    FOR n = StartDEG TO StopDEG STEP 5
        Adj = Radius * SIN(n * Degree!)
        Opp = Radius * COS(n * Degree!)
        PSET (x + Adj, y + Opp), Colr
    NEXT n

END SUB

FUNCTION CheckFile$ (a$)
$IF WIN THEN
    CheckFile$ = a$
$ELSE
    STATIC b$
    b$ = lcase$(a$)
    if not _fileexists(b$) then
        b$ = ucase$(a$)
        if not _fileexists(b$) then
            print "There is an error in the program with requested file:"
            print a$
            end
        end if
    end if
    CheckFile$ = b$
$END IF
END FUNCTION

Boy was this a read-end hurting for about an hour, modifying it so it works on Linux.

The following files will have to be renamed to lowercase as shown or it will not work:
chfndrfc.bsv
chfndrff.bsv
chfndrfs.bsv
chfndrrc.bsv
chfndrrf.bsv
chfndrrs.bsv
chotnkbc.bsi
chotnkbp.bsi
chotnkcc.bsi
chotnkcp.bsi
chotnkhc.bsi
chotnkhp.bsi
chstoshp.bsi
chstoshs.bsi
chstoslp.bsi
chstosls.bsi

I discovered "chops.dat" isn't even used by this program.

Basically what I did was force a "CheckFile$()" function that looks for a file whose name is either all in lowercase or all in uppercase. So a data filename that had mixed letter case was renamed as I've already explained (except a few like "chopper.ico" because somebody else did that already), while the rest including the DAT files saved by the program are in uppercase. There is a portion which does a "SHELL" to change from DOS 8-dot-3 to Windows.LFN which might have to be tested. For me as the program stands it creates a BMP file successfully. This program seems to have a bug in which it ignores mouse button presses for the coloring options, like "pinstriped", on the right-hand side at the bottom.
Reply


Messages In This Thread
RE: Preview of Coming Attractions - by johnno56 - 04-20-2022, 12:01 PM
RE: Discussion Board for the Collection of Graphic Programs by TheBOB. - by mnrvovrfc - 08-03-2022, 04:56 AM



Users browsing this thread: 2 Guest(s)