ROOM ID 601 NOCYBORGS HIDDEN NAME "hole one" PICT "hole01.jpg" ARTIST "lion hisself" DOOR ID 88 NAME "putting area" DONTMOVEHERE SHOWFRAME OUTLINE 30,21 489,21 489,256 30,256 LOC 259,138 SCRIPT ON SELECT { ;spot 88 ; values for "teed" 0= initial, 1= place ball on tee, 2= line up putt, 3= putt delay 4 = putting ; 5= end putt 6 = in the hole 7= next putt 8= prevent double-click ; globes GLOBAL globes EXEC ; ; wait for spot 88 alarms to die down then hit shot ; { setputt EXEC 3 teed = 30 89 SETALARM } teed 2 == IF ; next putt ; { 8 teed = 40 88 SETALARM } teed 7 == IF } ;____________________________________________________________________________________________________________________ ON ALARM { globes GLOBAL globes EXEC ; { lineup EXEC } 1 teed == 2 teed == OR 8 teed == OR IF ; ; tee shot and onward until hole ; { impact EXEC findevent EXEC paintball EXEC paintflite EXEC bounce EXEC 40 88 SETALARM } teed 4 == IF ; next putt ; { 7 teed = setputt EXEC paintball EXEC } teed 5 == IF } ;___________________________________________________________________________ ON ENTER { globes GLOBAL globes EXEC ; { ; inputs deltaX, deltaY, currentX, currentY ; outputs Xx Xy Xy Yyshort, xhit, yhit, verb ; ; [ [ 119 ] [ 78 196 1] [ 186 ] [ 78 126 -1 ] [ 186 ] [ 151 196 -1 ] [ 331 ] [ 79 126 1 ] [ 331 ] [ 151 197 1 ] [ 347 ] [ 95 101 0 ] [ 397 ] [ 79 197 -1 ] ] Xarray = ; [ [ 81 ] [ 116 189 1 ] [ 82 ] [ 328 400 1 ] [ 98 ] [ 344 350 0 ] [ 126 ] [ 186 331 1 ] [ 151 ] [ 186 331 -1 ] [ 195 ] [ 116 189 -1 ] [ 195 ] [ 328 400 -1 ] ] Yarray = ; ; for each X calc where hit Xarray LENGTH len = len -- 0 xhit = 2 oldyside = currentX oldXpos = 0 Xaction = ;-6001 oldXpos = { 6001 oldXpos = } deltaX 0 < IF 0 Xhshort = 0 Yhshort = 6002 Xxshort = 6003 Yxshort = 6004 curXside = 0 verb = 0 tvar = { len -- Xarray len GET 0 GET currentX - Xdelta = { print exec " ouch" say exit } Xdelta 1000 > Xdelta -1000 < OR IF deltaY Xdelta * deltaX / Ydelta = currentY Ydelta + Ypos = ; left Xarray 1 len + GET 0 GET tvar0 = ; right Xarray 1 len + GET 1 GET tvar1 = Xarray 1 len + GET 2 GET tvar3 = { Xarray 1 len + GET 3 GET tvar3 = } tvar3 1 > IF ; determine vertical collisions { currentX Xdelta + Xpos = ; if cup { { 1 Xhit = Xpos Xhshort = Ypos Yhshort = Xpos oldXpos = 3 verb = ; set action if any and pack it { tvar Xaction = 1000 Xaction *= } Xarray 1 len + GET 2 GET tvar = tvar 1 > IF ; } ; if wall ; at wall to start putt { { 5 verb = } Xpos currentX == IF 1 Xhit = Xpos Xxshort = Ypos Yxshort = Xpos oldXpos = tvar3 curXside = ; set action if any and pack it { tvar Xaction = 1000 Xaction += } Xarray 1 len + GET 2 GET tvar = tvar 1 > IF { 8000 Xxshort = } 1 tvar3 == deltaX 0 >= AND 1 xhit <> AND -1 tvar3 == deltaX 0 < AND 1 xhit <> AND OR IF { 8001 Yxshort = print EXEC } Ypos currentY < 1 oldYside == AND Ypos currentY > 0 oldYside == AND Ypos currentY == AND OR IF } 0 tvar3 == IFELSE } ; putt left deltaX 0 < Xpos currentX <= AND 0 xhit == AND tvar3 0 >= AND tvar0 = deltaX 0 < Xpos currentX <= AND Xpos oldXpos > AND 1 xhit == AND tvar3 0 >= AND tvar1 = tvar0 tvar1 OR tvar0 = ; putt right deltaX 0 > Xpos currentX >= AND 0 xhit == AND tvar3 0 <= AND tvar1 = deltaX 0 > Xpos currentX >= AND Xpos oldXpos < AND 1 xhit == AND tvar3 0 <= AND tvar2 = tvar1 tvar2 OR tvar1 = tvar0 tvar1 OR IF ; if not a gate } Ypos tvar0 >= Ypos tvar1 <= AND IF len -- } { -1 len <> } WHILE { 1 xhit = } 0 xhit == 3 verb == AND IF ;____________________________________________________________________________________________________________________ ; for each Y calc where hit Yarray LENGTH len = len -- 0 yhit = 2 oldXside = currentY oldYpos = 0 Yaction = 7002 Xyshort = 7003 Yyshort = 7004 curYside = { len -- Yarray len GET 0 GET currentY - Ydelta = deltaX Ydelta * deltaY / Xdelta = Xdelta currentX Xdelta + Xpos = ; get top Yarray 1 len + GET 0 GET tvar0 = ; get bottom Yarray 1 len + GET 1 GET tvar1 = Yarray 1 len + GET 2 GET tvar3 = { Yarray 1 len + GET 3 GET tvar3 = } tvar3 1 > IF ; determine horizontal collisions { currentY Ydelta + Ypos = ; if cup { { 1 Yhit = Xpos Xhshort = Ypos Yhshort = Ypos oldYpos = 3 verb = ; set action if any and pack it { tvar Yaction = 1000 Yaction *= } Yarray 1 len + GET 2 GET tvar = tvar 1 > IF ; } ; if wall { ; hit both, an outside corner { { 2 verb = } ; at wall to start putt { 6 verb = } 5 verb == IFELSE } Ypos currentY == IF 1 Yhit = Xpos Xyshort = Ypos Yyshort = Ypos oldYpos = tvar3 curYside = ; set action if any and pack it { tvar Yaction = 1000 Yaction += } Yarray 1 len + GET 2 GET tvar = tvar 1 > IF { 9000 Yyshort = } 1 tvar3 == deltaY 0 >= AND 1 yhit <> AND -1 tvar3 == deltaY 0 < AND 1 yhit <> AND OR IF { 9001 Xyshort = print EXEC } Xpos currentX < 1 oldXside == AND Xpos currentX > 0 oldXside == AND Xpos currentX == AND OR IF } tvar3 0 == IFELSE } ; putt up deltaY 0 < Ypos currentY <= AND 0 yhit == AND tvar3 0 >= AND tvar0 = deltaY 0 < Ypos currentY <= AND Ypos oldYpos > AND 1 yhit == AND tvar3 0 >= AND tvar1 = tvar0 tvar1 OR tvar0 = ; putt down deltaY 0 > Ypos currentY >= AND 0 yhit == AND tvar3 0 <= AND tvar1 = deltaY 0 > Ypos currentY >= AND Ypos oldYpos < AND 1 yhit == AND tvar3 0 <= AND tvar2 = tvar1 tvar2 OR tvar1 = tvar0 tvar1 OR IF ; if not a gate } Xpos tvar0 >= Xpos tvar1 <= AND IF len -- } { -1 len <> } WHILE { 1 yhit = } 0 yhit == 3 verb == AND IF } impact DEF } ENDSCRIPT ENDDOOR DOOR ID 5 NAME "next hole" DONTMOVEHERE DEST 602 OUTLINE 411,348 468,348 468,363 411,363 LOC 439,355 SCRIPT ON ENTER { globes GLOBAL globes EXEC ; ; position avs ; { tvar0 tvar1 SETPOS } 0 tvar0 <> 0 tvar1 <> AND IF inits EXEC { " You've already played this hole..." STATUSMSG } playd ROOMID >= IF { " pssst...no skipping holes....." STATUSMSG } playd ROOMID 1 - < IF } ON LEAVE { globes GLOBAL globes EXEC ; POSX tvar0 = POSY tvar1 = { PAINTCLEAR } NBRROOMUSERS 1 == IF } ENDSCRIPT ENDDOOR DOOR ID 89 NAME "tee" DONTMOVEHERE DEST 3 OUTLINE 121,116 149,116 149,163 121,163 LOC 135,139 SCRIPT ON SELECT ; spot 89 { globes GLOBAL globes EXEC ; ; tee up/paint ball for first putt ; inputs teed, stroke ; outputs currentX, currentY ; { MOUSEPOS currentY = currentX = PAINTUNDO paintball EXEC 1 teed = 40 88 setalarm } 0 teed == 0 stroke == AND IF ; ; hit shot ; { setputt EXEC 3 teed = 30 89 SETALARM } teed 2 == IF ; next putt { 8 teed = 40 88 setalarm } 7 teed == IF } ;___________________________________________________________________________ ON ALARM { globes GLOBAL globes EXEC ; wait for spot 88 alarms to die down then hit shot { setputt EXEC 4 teed = 30 88 SETALARM } 3 teed == IF ; next putt { 2 teed = 40 88 setalarm } 7 teed == IF } ENDSCRIPT ENDDOOR DOOR ID 6 OUTLINE 10,355 43,355 43,377 10,377 LOC 26,366 SCRIPT ON ENTER { globes GLOBAL globes EXEC ;____________________________________________________________________________________________________________________ { ; update score { " " stroke ITOA & tvar = } { " " stroke ITOA & tvar = } stroke 10 < IFELSE tstroke tvar & tstroke = tscore stroke + score = score tscore = score ITOA score = ROOMID 618 - tvar = { tvar ++ " " score & score = } { tvar 0 < } WHILE { WHOME WHONAME "'s score is " + tscore ITOA + ROOMMSG } tscore 0 <> ROOMID 600 - 19 <> AND IF ROOMID tvar3 = { 0 90 SETSPOTSTATE } ROOMID 607 == IF " ___________________________________________________________" LOGMSG " Hole 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Total" LOGMSG " Par 3 3 2 3 2 3 2 4 2 3 3 2 3 2 3 2 4 2 48" LOGMSG " ___________________________________________________________" LOGMSG "My score " tstroke & { " " & score & } { " " & score & } score ATOI 10 < IFELSE LOGMSG " ___________________________________________________________" LOGMSG ; { "I shot " tscore ITOA & " for the round..." & SAY } tscore 0 <> ROOMID 600 - 19 == AND IF } update DEF ;____________________________________________________________________________________________________________________ { PAINTUNDO PAINTUNDO paintline EXEC currentX cursX - deltaX = currentY cursY - deltaY = } setputt DEF ;____________________________________________________________________________________________________________________ ; trace flight of ball ; { 2 PENSIZE currentX currentY PENPOS 255 255 255 PENCOLOR currentX currentY oldcurX oldcurY LINE PAINTUNDO } paintflite DEF ;____________________________________________________________________________________________________________________ { { PAINTUNDO PAINTUNDO PAINTUNDO PENFRONT 4 pensize 255 255 255 pencolor currentX 3 - currentY 2 - PENPOS 2 0 LINETO currentX 2 - currentY 3 - PENPOS 0 2 LINETO } 1 1 == IF currentX Xeshort - tvar0 = currentY Yeshort - tvar1 = } paintball DEF ;____________________________________________________________________________________________________________________ { ; draw putt line and ball ; ; if first time thru (teed =1) and first stroke, ball and cursor are at same place ; { currentX cursX = currentY cursY = 8 teed = 20 88 setalarm } 1 teed == IF ; if cursor hasn't moved { { 40 88 setalarm } ; if cursor has moved { ;putt length multiplier ***************** 6 tvar2 = 2 teed = PAINTUNDO PAINTUNDO paintball EXEC 1 PENSIZE currentX currentY PENPOS 255 0 0 PENCOLOR MOUSEPOS currentX currentY LINE MOUSEPOS Yeshort = Xeshort = currentY Yeshort - Yeshort = Yeshort tvar2 * Yeshort = currentX Xeshort - Xeshort = Xeshort tvar2 * Xeshort = MOUSEPOS cursY = cursX = 40 88 setalarm } MOUSEPOS cursY - tvar = cursX - tvar1 = 0 tvar == 0 tvar1 == AND IFELSE } 2 teed == 8 teed == OR IF } lineup DEF } ENDSCRIPT ENDDOOR ENDROOM