ROOM ID 251 NAME "Foxy's Fireworks" PICT "sbny.gif" PICTURE ID 1 NAME "arrowll.gif" TRANSCOLOR 0 ENDPICTURE PICTURE ID 2 NAME "arrowrr.gif" TRANSCOLOR 0 ENDPICTURE DOOR ID 1 OUTLINE 461,12 497,12 498,46 460,46 LOC 369,108 SCRIPT ON ENTER { { "Foxy's Fireworks script" LOCALMSG } 20 ALARMEXEC { "Say start to start and stop to stop" LOCALMSG } 120 ALARMEXEC } ;types: ;1. random number of arms and size of star, drooping ;2. spreading fall, gets wider and thinner as it falls at random ;3. globular burst, random position within an expanding globe ;4. towering fountain, shooting higher and higher, with falls down sides ON OUTCHAT { fw GLOBAL stp GLOBAL opt1 GLOBAL { 8 PENSIZE 0 0 0 PENCOLOR PENBACK { 0 cr 511 cr LINE 8 cr += } { cr 384 < } WHILE 1 fw = 0 stp = 0 opt1 = 60 ME SETALARM } CHATSTR "start" == IF { PAINTCLEAR CLEARLOOSEPROPS 0 fw = } CHATSTR "stop" == IF } ON ALARM { fw GLOBAL ;fireworks status variable typ GLOBAL stp GLOBAL ;step you are at in current drawing opt1 GLOBAL opt2 GLOBAL opt3 GLOBAL prp1 GLOBAL ;atomlist containing prop selection data [ 917505986 917505969 917411934 929841736 917505977 929841690 ; last two same 917444766 917444747 917444758 917411946 917505950 917505959 ] prps = { { 4 RANDOM typ = } opt1 NOT IF [ { ;star routine ;opt1- number of arms opt2- atomlist containing center ;opt3- current radius being drawn { opt2 EXEC r = c = opt3 poldis = prps stp prp1 EXEC GET prn = { 360 cst * opt1 / poldir = polar EXEC poldir SINE poldis * 1000 / ssx = poldir COSINE poldis * 1000 / ccx = prn c ssx + r ccx + ADDLOOSEPROP cst ++ } { cst opt1 < } WHILE stp -- opt3 12 + stp 2 * + opt3 = c ITOA " " & r 7 stp - 2 * + ITOA & STRTOATOM opt2 = 40 ME SETALARM } { { 0 opt1 = 180 ME SETALARM } ;clear up and set for next star { 6 RANDOM 3 + opt1 = CLEARLOOSEPROPS ;set for current star 8 RANDOM 4 + stp = 0 opt3 = ")boom" SAY 512 stp 44 * - RANDOM stp 22 * + ITOA " " 384 stp 44 * - RANDOM stp 22 * + ITOA & & STRTOATOM opt2 = " 3 % " 4 RANDOM 3 * ITOA & " + " & STRTOATOM prp1 = 20 ME SETALARM } opt1 IFELSE } stp IFELSE } { ;falling bar routine ;opt1- current width ;opt2- current row ;opt3- column { 32 stp 8 * + hgt = opt1 25 / hgt 16 / + nmbr = CLEARLOOSEPROPS stp -- { nmbr -- prps 3 RANDOM prp1 EXEC GET opt1 RANDOM opt1 2 / - opt3 + opt2 hgt RANDOM + ADDLOOSEPROP } { nmbr } WHILE 32 opt2 += 32 opt1 += 80 ME SETALARM } { { 0 opt1 = 180 ME SETALARM } ;clear up and set for next firework { CLEARLOOSEPROPS ;set initial fall variables 20 opt1 = 9 RANDOM 4 + stp = 480 stp 32 * - RANDOM stp 16 * 5 + + opt3 = 350 stp 32 * - RANDOM opt2 = 4 RANDOM 3 * ITOA " + " & STRTOATOM prp1 = ")boom" SAY 20 ME SETALARM } opt1 IFELSE } stp IFELSE } { ;expanding cloud routine ;opt1 current diameter ;opt2 center x ;opt3 center y { 0 nmb = CLEARLOOSEPROPS { nmb ++ prps prp1 EXEC GET opt1 mx = opt1 my = { opt1 RANDOM opt1 2 / - mx = opt1 RANDOM opt1 2 / - my = } { mx mx * my my * + opt1 2 / DUP * > } WHILE opt2 mx + opt3 my + ADDLOOSEPROP } { nmb 12 < } WHILE stp -- 30 opt1 += 80 ME SETALARM } { { 0 opt1 = 180 ME SETALARM } { CLEARLOOSEPROPS ;set initial burst variables 10 opt1 = 9 RANDOM 4 + stp = 485 stp 30 * - RANDOM stp 15 * 5 + + opt2 = 357 stp 30 * - RANDOM stp 15 * 5 + + opt3 = "4 RANDOM 2 + " 12 RANDOM ITOA & " + 12 % " & STRTOATOM prp1 = ")boom" SAY 20 ME SETALARM } opt1 IFELSE } stp IFELSE } { ;fountain routine ;opt1 center column ;opt2 bottom row ;opt3 height { opt3 30 / -1 * 2 + nmbr = prps prp1 EXEC GET prd = prd opt1 opt2 opt3 + ADDLOOSEPROP { nmbr -- opt3 -1 * RANDOM nh = 15 RANDOM nh opt3 + 2 / + ofs = { -1 ofs *= } 2 RANDOM IF prd opt1 ofs + opt2 nh - ADDLOOSEPROP } { nmbr } WHILE 30 opt3 -= stp -- 80 ME SETALARM } { { 0 opt1 = 180 ME SETALARM } { CLEARLOOSEPROPS ;set up fountain variables 9 RANDOM 4 + stp = -10 opt3 = 490 stp 14 * - RANDOM stp 7 * + opt1 = 384 stp 30 * - RANDOM stp 30 * + 12 + opt2 = 12 RANDOM ITOA " stp + 12 % " & STRTOATOM prp1 = ")applause" SAY 20 ME SETALARM } opt1 IFELSE } stp IFELSE } ] typ GET EXEC } fw IF } ENDSCRIPT ENDDOOR DOOR ID 2 DONTMOVEHERE DEST 252 OUTLINE 4,354 62,354 62,380 4,380 LOC 33,366 PICTS 1,0,0 ENDPICTS ENDDOOR DOOR ID 3 DONTMOVEHERE DEST 334 OUTLINE 448,354 508,354 508,379 448,379 LOC 480,368 PICTS 2,0,0 ENDPICTS SCRIPT ON INCHAT { nDoIt GLOBAL nDoIt EXEC } ON ENTER { { CLEARLOOSEPROPS PAINTCLEAR } NBRROOMUSERS 2 < IF } ENDSCRIPT ENDDOOR ENDROOM