Home » Archimedes archive » Acorn User » AU 1995-09.adf » !Plantwise » PlantWise/!Plantwise/!runimage
PlantWise/!Plantwise/!runimage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
| Tape/disk: | Home » Archimedes archive » Acorn User » AU 1995-09.adf » !Plantwise |
| Filename: | PlantWise/!Plantwise/!runimage |
| Read OK: | ✔ |
| File size: | 1000A bytes |
| Load address: | 0000 |
| Exec address: | 0000 |
File contents
10*FX220,27
20*FX229,1
30
40REMminsizz1%=100000:minsizz2%=100000:minsizz3%=100000
50
60PROCsortmemory
70SYS "Wimp_Initialise",200,&4B534154,"Plantwise" TO wimpver%,taskh%
80IF NOT FNalreadyrunning THEN
90 OSCLI"Set PlantWise$isrunning 1"
100ELSE
110 PROCerror("Plantwise is already running",0):SYS "Wimp_CloseDown",,&4B534154:END
120ENDIF
130ONERROR PROCerror(REPORT$+" (Internal error code "+STR$ERL+")"+CHR$0,ERR):SYS "Wimp_CloseDown",taskh%,&4B534154:END
140OSCLI"LOAD <PlantWise$Dir>.code "+STR$~mc%
150PROCmc_starts
160PROCsortsprites
170*Set PlantWise$chaindir <PlantWise$Dir>
180PROCloadunsquash(menuarea%,33*1024,"spfiles.menu")
190PROCinitiallise
200PROCmodechange
210PROCbaricon
220ON ERROR PROCerror(REPORT$+" (Internal error code "+STR$ERL+")"+CHR$0,ERR)
230REPEAT PROCevent:UNTIL quit%
240SYS "Wimp_CloseDown",taskh%,&4B534154
250OSCLI"Set PlantWise$isrunning 0"
260
270*FX229,0
280REMPRINT QUIT
290*QUIT
300REMSYS"OS_Exit",errblk%
310END
320REMSTOP
330
340DEFPROCsortmemory
350indbase%=&9000:iptr%=indbase%
360totindsize%=11920:totwinsize%=13520
370winbase%=indbase%+totindsize%:wptr%=winbase%
380indstarts%=winbase%+totwinsize%:winstarts%=indstarts%+80
390mc%=&F400:animarea%=&FC00:menuarea%=&19000:sqbuffer%=&21400
400detfile%=&25800:detarea%=&2D000:bgarea%=&4B000:sparea%=&53400
410DIM blk% 256,errblk% 256
420ENDPROC
430
440DEFPROCloadunsquash(area%,areasiz%,file$)
450LOCAL len%
460OSCLI"LOAD <PlantWise$chaindir>."+file$+" "+STR$~detfile%
470SYS "OS_File",5,"<PlantWise$Dir>."+file$ TO ,,,,len%
480PROCunsquash(detfile%+20,len%-20,sqbuffer%,17*1024,area%+4,areasiz%-4)
490ENDPROC
500
510DEFPROCsortsprites
520!sparea%=6*1024:sparea%!8=16
530SYS "OS_SpriteOp",&109,sparea%
540SYS "OS_SpriteOp",&10A,sparea%,"<PlantWise$Dir>.sprites"
550!detarea%=120*1024:detarea%!8=16
560SYS "OS_SpriteOp",&109,detarea%
570!animarea%=37*1024:animarea%!8=16
580SYS "OS_SpriteOp",&109,animarea%
590SYS "OS_SpriteOp",&10F,animarea%,"anim",1,405,161,12
600!menuarea%=33*1024:menuarea%!8=16
610SYS "OS_SpriteOp",&109,menuarea%
620!bgarea%=33*1024:bgarea%!8=16
630SYS "OS_SpriteOp",&109,bgarea%
640DIM scale% 16:!scale%=1:scale%!4=1:scale%!8=1:scale%!12=1
650DIM coltrans% 16,sppalet% 128,sysbut$(15)
660RESTORE +0
670DATA &FFFFFF00,&FFFFFF00,&DDDDDD00,&DDDDDD00,&BBBBBB00,&BBBBBB00,&99999900,&99999900,&77777700,&77777700,&55555500,&55555500,&33333300,&33333300,&0,&0
680DATA &99440000,&99440000,&EEEE00,&EEEE00,&CC0000,&CC0000,&DD00,&DD00,&BBEEEE00,&BBEEEE00,&885500,&885500,&BBFF00,&BBFF00,&FFBB0000,&FFBB0000
690FORk%=0TO31:READ a%:sppalet%!(4*k%)=a%:NEXT
700PROCaddpalet(animarea%,"anim")
710ENDPROC
720
730DEFPROCaddpalet(area%,spn$)
740SYS"OS_SpriteOp",&118,area%,spn$ TO ,,r2%
750f%=(r2%+44):t%=sppalet%:FORs%=0TO31:!f%=!t%:t%+=4:f%+=4:NEXT
760ENDPROC
770
780DEFPROCinitiallise
790DIM ibname% 20,menu% 1024,blk2% 256,input_disk_name% 12,txtbuff% 1024
800DIM pdrect% 16,pdrect2% 16,pdtrans% 16,pdplot% 8
810DIM ctrans% 256,paltab% 64,SCALE% 16,inb% 20,outb% 20
820DIM wdefn%(48,6),anmewlines$(5),anmewtitle$(5),findaa%(28),bg%(48),animwtitle$(48)
830maxlabs%=11:maxstops%=13:maxsp%=28
840DIM lines$(1),nolabs%(48,1),words$(1,maxlabs%,3),animsp$(maxsp%-1),animsp%(maxsp%-1,1),nostops%(48),animwords$(1,maxstops%-1)
850totgloss%=26
860DIM gloss$(totgloss%-1,1)
870REM arrays specific to actanim%
880DIM photo$(51),carr%(3,1),root%(5,1),st1%(5,1),st2%(5,1),wood%(10,1),fert%(13,1),fru%(3,5,1),gra$(3),disp1%(9,1),disp2%(7,1),disp3%(2,1),se%(7),sland%(7),cbex%(2),lupex%(1),bean%(12,4,1),syc%(13,1),dand%(6),dse%(7,1),do%(15,2),mlxy%(2,1),coc%(4)
890DIM pea%(8),sunf%(8),whe%(8),ger$(8),corm%(6,1),bulb%(5,1),run%(4,1),rhi%(5,1)
900REMDIM menuwtitle%(3,1),menutype%(14),menuwords$(13,5),menuroute%(13,4)
910!inb%=4:inb%!4=5:inb%!8=11:inb%!12=12:inb%!16=-1
920RESTORE:quit%=FALSE:winctr%=1
930SYS "Wimp_OpenTemplate",,"<PlantWise$Dir>.Templates"
940PROCload_template("menu")
950PROCload_template("animate")
960PROCload_template("animmenu")
970PROCload_template("fastfind")
980PROCload_template("worddefn")
990PROCload_template("whatword")
1000PROCload_template("setup")
1010PROCload_template("proginfo")
1020PROCload_template("demosyst")
1030PROCload_template("demo1")
1040SYS "Wimp_CloseTemplate"
1050a$=FNconverttolower(FNreadsysvar("PlantWise$Dir"))
1060IFINSTR(a$,"adfs::plantwise")<>0 Y%=0 ELSEY%=1
1070SYS "Wimp_CreateWindow",,winstarts%!0 TO menuw%
1080SYS "Wimp_CreateWindow",,winstarts%!4 TO animw%
1090SYS "Wimp_CreateWindow",,winstarts%!8 TO anmew%
1100SYS "Wimp_CreateWindow",,winstarts%!12 TO findw%
1110SYS "Wimp_CreateWindow",,winstarts%!16 TO defnw%
1120SYS "Wimp_CreateWindow",,winstarts%!20 TO wordw%
1130SYS "Wimp_CreateWindow",,winstarts%!24 TO setupw%
1140SYS "Wimp_CreateWindow",,winstarts%!28 TO infow%
1150SYS "Wimp_CreateWindow",,winstarts%!32 TO demow%
1160SYS "Wimp_CreateWindow",,winstarts%!36 TO demo1w%
1170SYS"Sound_Configure",0,0,0,0,0 TO r0%,r1%,r2%,r3%,r4%
1180IFr0%=1:SYS"Sound_Configure",2,r1%,r2%,r3%,r4%
1190PROCloadunsquash(detarea%,100*1024,"spfiles.animmenu0")
1200PROCfill_arrays
1210actmenu%=0:actanim%=-1:wlev%=0:firsttime%=-1:shrunkanme%=0
1220doingmove%=0:firstmove%=0:acttxticn%=0:texton%=0:textnewoff%=0
1230PROChideicn(findw%,41,TRUE):PROChideicn(findw%,59,TRUE):PROChideicn(findw%,77,TRUE):PROChideicn(findw%,22,TRUE):PROChideicn(findw%,89,TRUE)
1240PROCinitwordw
1250simp%=0:PROCselecticn(setupw%,2,TRUE):PROCselecticn(setupw%,3,FALSE)
1260PROCmakeanim(0,-1,0):PROCsetextent(animw%,732)
1270ENDPROC
1280
1290DEFPROCinitwordw
1300glossicn%=-1:wide%=260+252
1310IF(totgloss%MOD2)=0:high%=(totgloss%/2)*56:ELSE:high%=56*(INT(totgloss%/2)+1)
1320!blk%=0:blk%!4=-high%:blk%!8=wide%:blk%!12=0:SYS"Wimp_SetExtent",wordw%,blk%
1330FORj%=0TOtotgloss%-1:PROCputicnstring(wordw%,j%,gloss$(j%,0)):PROCselecticn(wordw%,j%,FALSE):NEXT
1340ENDPROC
1350glossicn%=-1
1360!blk%=0:blk%!4=-(56*totgloss%):blk%!8=252:blk%!12=0:SYS"Wimp_SetExtent",wordw%,blk%
1370FORj%=0TOtotgloss%-1:PROCputicnstring(wordw%,j%,gloss$(j%,0)):PROCselecticn(wordw%,j%,FALSE):NEXT
1380
1390DEFPROCfill_arrays
1400LOCAL j%,k%,l%
1410RESTORE +0
1420DATA "Plant cells","","Types of flowers","The parts of a flower","Plant leaves"
1430DATA "Photosynthesis - making food","The leaf in close-up","Plant stems","Non-woody stems","Woody stems"
1440DATA "Plant roots","A root in close-up","Pollination","Pollination by insects","Pollination by the wind"
1450DATA "Pollination by animals","Pollination by water","Fertilization","Fruits",""
1460DATA "Seed dispersal","'Exploding' fruits","Seed dispersal by the wind","Seed dispersal by animals","Seed dispersal by water"
1470DATA "Seed germination","Seed structure","Seed dormancy","Corms and bulbs","Runners and rhizomes"
1480DATA "","","","",""
1490DATA "","","","",""
1500DATA "","","","",""
1510DATA "","","",""
1520FORj%=0TO48:READ animwtitle$(j%):NEXT
1530RESTORE +0
1540DATA 5,5,0,0,4,4,9,11,6,6,4,4,9,9,5,5,4,5,7,7
1550DATA 2,2,6,7,2,2,6,6,6,6,4,4,1,1,10,10,4,4,0,0
1560DATA 1,1,4,4,3,3,5,5,1,1,8,8,6,7,5,5,5,5,3,3
1570DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1580DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1590FORj%=0TO48:FORk%=0TO1:READ nolabs%(j%,k%):NEXT:NEXT
1600RESTORE +0
1610DATA 0,0,0,0,0,6,1,0,2,5
1620DATA 1,4,3,9,2,1,1,4,9,0
1630DATA 1,2,2,5,1,13,0,8,8,5
1640DATA 0,0,0,0,0,0,0,0,0,0
1650DATA 0,0,0,0,0,0,0,0,0
1660FORj%=0TO48:READ nostops%(j%):NEXT
1670RESTORE +0
1680DATA 0,0,4,0,8,0,0,7,0,0
1690DATA 4,0,8,3,7,0,4,0,0,0
1700DATA 8,6,1,7,0,3,0,0,0,3
1710DATA 0,0,0,0,0,0,0,0,0,0
1720DATA 0,0,0,0,0,0,0,0,0
1730FORj%=0TO48:READ bg%(j%):NEXT
1740RESTORE +0
1750DATA 0,2,4,7,10,12,17,20,25,28,29,30,31,32,33,34,35,36,38,39,40,41,42,43,44,45,46,47,48
1760FORj%=0TO28:READ findaa%(j%):NEXT
1770RESTORE +0
1780DATA "bracts","A modified leaf below or surrounding a flower."
1790DATA "bur","A spikey ball containing seeds."
1800DATA "cellulose","A tough fibrous substance that makes plant cell walls."
1810DATA "chlorophyll","The green pigment in plants which can trap the energy from sunlight for photosynthesis."
1820DATA "chloroplast","A tiny structure in plant cells which contains chlorophyll."
1830DATA "cotyledon","A modified leaf in a seed, often swollen with stored food for the seed to grow."
1840DATA "dehiscent","Fruits that throw out their seeds (explode)."
1850DATA "dicotyledon","Flowering plants with two cotyledons (also called dicot). A typical dicot has broad leaves with branching veins and petals and sepals in multiples of 4 or 5."
1860DATA "epidermis","An outer layer of cells (eg. of leaf or stem)."
1870DATA "fruit","The ovary or ovaries of a flowering plant after fertilization."
1880DATA "glucose","A simple sugar made by photosynthesis."
1890DATA "leaf veins","Tiny tubes in leaves."
1900DATA "mesophyll","Loosely packed cells in a leaf."
1910DATA "midrib","The strong central vein of a leaf."
1920DATA "mineral salts","Simple chemicals that plants take from the soil to help them live."
1930DATA "monocotyledon","Flowering plants with one cotyledon (also called monocot). A typical monocot has a fibrous root system, narrow leaves with parallel veins and petals and sepals in multiples of 3."
1940DATA "palisade cells","The layer of leaf cells which carries out most photosynthesis."
1950DATA "phloem","A network of tubes throughout the plant which carries food and water."
1960DATA "photosynthesis","The process by which green plants make food."
1970DATA "samara","A fruit with wings (eg. Sycamore)."
1980DATA "seed","The fertilized ovule of a flowering plant."
1990DATA "starch","Plants store sugars in long chains which makes starch."
2000DATA "stoma","A tiny hole in the leaf surface."
2010DATA "stomata","More than one stoma."
2020DATA "sucrose","A simple sugar."
2030DATA "xylem","A network of tubes throughout the plant which carries water and salts."
2040FORj%=0TOtotgloss%-1:FORk%=0TO1:READ gloss$(j%,k%):NEXT:NEXT
2050RESTORE +0
2060DATA "Plantwise"
2070DATA "The structure of flowering plants"
2080DATA "The reproduction of flowering plants"
2090DATA "What plants need to live and grow"
2100DATA "How plants survive"
2110DATA "The classification of plants"
2120FORj%=0TO5:READ anmewtitle$(j%):NEXT
2130RESTORE +0
2140DATA "04,07,440,640,368,604,07,548,448,494,340,07,424,232,360,248,07,460,092,394,092"
2150DATA "06,07,262,624,342,532,07,564,640,516,604,07,148,444,124,400,07,138,000,122,108,07,426,128,486,104,07,690,000,654,064"
2160DATA "00,"
2170DATA "02,07,138,000,148,044,07,576,000,526,088"
2180DATA "06,07,426,624,462,448,07,462,448,608,392,07,462,448,386,344,07,462,448,484,344,07,080,596,104,492,00,082,376,184,332"
2190DATA "07,07,160,000,136,116,07,160,000,094,096,07,440,000,376,040,07,532,100,586,112,07,514,080,544,048,07,752,152,680,092,07,752,152,788,100"
2200FORj%=0TO5:READ anmewlines$(j%):NEXT
2210RESTORE +0
2220REM STRUCTURE
2230REM plant cells
2240DATA 0,0,0,0,0,0,0
2250DATA 0,0,0,0,0,0,0
2260REM flower
2270DATA 0,1,0,0,0,0,0
2280DATA 0,2,0,0,0,0,0
2290REM leaf
2300DATA 0,1,1,0,0,0,0
2310DATA 1,2,1,0,0,0,0
2320DATA 1,1,2,0,0,0,0
2330REM stem
2340DATA 0,1,1,0,0,0,0
2350DATA 1,2,1,0,0,0,0
2360DATA 1,1,2,0,0,0,0
2370REM root
2380DATA 1,1,0,0,0,0,0
2390DATA 1,2,0,0,0,0,0
2400
2410REM REPRODUCTION
2420REM pollination
2430DATA 1,0,0,1,1,1,1
2440DATA 1,0,0,2,1,1,1
2450DATA 1,0,0,1,2,1,1
2460DATA 1,0,0,1,1,2,1
2470DATA 1,0,0,1,1,1,2
2480REM fertilization
2490DATA 1,1,0,0,0,0,0
2500DATA 1,2,0,0,0,0,0
2510DATA 0,0,0,0,0,0,0
2520REM seed dispersal
2530DATA 1,0,0,1,1,1,1
2540DATA 1,0,0,2,1,1,1
2550DATA 1,0,0,1,2,1,1
2560DATA 1,0,0,1,1,2,1
2570DATA 1,0,0,1,1,1,2
2580REM seed germination
2590DATA 1,1,1,0,0,0,0
2600DATA 0,2,1,0,0,0,0
2610DATA 1,1,2,0,0,0,0
2620REM corms & bulbs
2630DATA 1,0,0,0,0,0,0
2640REM runners and rhizomes
2650DATA 1,0,0,0,0,0,0
2660
2670REM NEEDS
2680REM need water
2690DATA 0,0,0,0,0,0,0
2700REM need light
2710DATA 0,0,0,0,0,0,0
2720REM need air
2730DATA 0,0,0,0,0,0,0
2740REM need warmth
2750DATA 0,0,0,0,0,0,0
2760REM need soil minerals
2770DATA 0,0,0,0,0,0,0
2780
2790REM SURVIVAL
2800REM daily cycles
2810DATA 0,0,0,0,0,0,0
2820REM seasonal cycles
2830DATA 0,0,0,0,0,0,0
2840DATA 0,0,0,0,0,0,0
2850REM protection
2860DATA 0,0,0,0,0,0,0
2870REM competition
2880DATA 0,0,0,0,0,0,0
2890
2900REM CLASSIFICATION
2910REM evolution
2920DATA 0,0,0,0,0,0,0
2930REM flowering plants
2940DATA 0,0,0,0,0,0,0
2950REM conifers
2960DATA 0,0,0,0,0,0,0
2970REM ferns
2980DATA 0,0,0,0,0,0,0
2990REM clubmosses & horsetails
3000DATA 0,0,0,0,0,0,0
3010REM mosses & liverworts
3020DATA 0,0,0,0,0,0,0
3030REM fungi
3040DATA 0,0,0,0,0,0,0
3050REM algae
3060DATA 0,0,0,0,0,0,0
3070REM lichens
3080DATA 0,0,0,0,0,0,0
3090FORj%=0TO48:FORk%=0TO6:READ wdefn%(j%,k%):NEXT:NEXT
3100REM data specific to actanim% (usually animation data)
3110RESTORE +0
3120DATA "02,00,01"
3130DATA "01,04"
3140DATA "01,01"
3150DATA "01,04"
3160DATA "01,01"
3170DATA "01,04"
3180DATA "01,01"
3190REM stop 6
3200REM expand box for 10 so next line is 17
3210DATA "","","","","","","","","",""
3220DATA "02,05,06"
3230DATA "01,07"
3240DATA "01,08"
3250DATA "01,09"
3260DATA "01,10"
3270DATA "01,11"
3280DATA "01,12"
3290DATA "01,11"
3300DATA "01,12"
3310DATA "01,11"
3320DATA "01,12"
3330DATA "01,11"
3340DATA "01,12"
3350REM stop 29
3360DATA "03,05,10,13"
3370DATA "01,14"
3380DATA "01,13"
3390DATA "01,14"
3400DATA "01,13"
3410DATA "02,14,15"
3420DATA "02,13,16"
3430DATA "02,14,17"
3440DATA "02,13,17"
3450DATA "02,14,17"
3460DATA "02,13,17"
3470REM stop 40
3480DATA "02,00,03"
3490DATA "01,18"
3500DATA "01,19"
3510DATA "01,20"
3520REM stop 44
3530DATA "01,21"
3540DATA "01,22"
3550REM stop 46
3560DATA "01,23"
3570DATA "01,24"
3580DATA "01,25"
3590DATA "01,26"
3600DATA "01,27"
3610FORk%=0TO51:READ photo$(k%):NEXT
3620RESTORE +0
3630DATA 138,64,122,40,124,20,128,4
3640FORj%=0TO3:FORk%=0TO1:READ carr%(j%,k%):NEXT:NEXT
3650RESTORE +0
3660DATA 214,164,92,56,194,152,214,124,96,12,196,108
3670FORj%=0TO5:FORk%=0TO1:READ root%(j%,k%):NEXT:NEXT
3680RESTORE +0
3690DATA 118,116,220,116,568,116,674,116,598,128,646,128
3700FORj%=0TO5:FORk%=0TO1:READ st1%(j%,k%):NEXT:NEXT
3710RESTORE +0
3720DATA 106,112,234,112,558,112,686,112,590,124,654,124
3730FORj%=0TO5:FORk%=0TO1:READ st2%(j%,k%):NEXT:NEXT
3740RESTORE +0
3750DATA 232,148,280,192,280,192,280,192,272,180,258,168,244,160,206,150,176,92,148,64,120,36
3760FORj%=0TO10:FORk%=0TO1:READ wood%(j%,k%):NEXT:NEXT
3770RESTORE +0
3780DATA 470,464,456,412,444,364,432,308,426,248,416,196,374,160,314,144,284,144,284,144,284,144,284,144,284,144,284,144
3790FORj%=0TO13:FORk%=0TO1:READ fert%(j%,k%):NEXT:NEXT
3800RESTORE +0
3810DATA 54,432,50,500,50,432,36,384,24,352,24,352,582,512,588,512,506,444,418,384,394,348,0,0,134,156,130,168,136,84,134,48,132,28,130,28,680,160,692,180,642,144,570,108,504,80,0,0
3820FORj%=0TO3:FORk%=0TO5:FORl%=0TO1:READ fru%(j%,k%,l%):NEXT:NEXT:NEXT
3830RESTORE +0
3840DATA "4,350,3,700,1,590,4,600,3,520,0,480"
3850DATA "3,430,0,768,2,594,3,680,0,588,1,504"
3860DATA "0,498,1,792,2,594,0,748,1,612,2,508"
3870DATA "3,430,0,768,2,594,3,680,0,588,1,504"
3880FORj%=0TO3:READ gra$(j%):NEXT
3890RESTORE +0
3900DATA 216,528,274,632,164,572,44,532,40,552,116,632,268,616,98,616,26,536,206,512
3910FORj%=0TO9:FORk%=0TO1:READ disp1%(j%,k%):NEXT:NEXT
3920RESTORE +0
3930DATA 574,556,582,520,752,528,516,628,534,620,748,544,690,608,596,508
3940FORj%=0TO7:FORk%=0TO1:READ disp2%(j%,k%):NEXT:NEXT
3950RESTORE +0
3960DATA 436,628,456,616,442,612
3970FORj%=0TO2:FORk%=0TO1:READ disp3%(j%,k%):NEXT:NEXT
3980RESTORE +0
3990DATA 72,76,36,32,72,96,68,88
4000FORj%=0TO7:READ sland%(j%):NEXT
4010RESTORE +0
4020DATA 264,232,240
4030FORj%=0TO2:READ cbex%(j%):NEXT
4040RESTORE +0
4050DATA 460,376
4060FORj%=0TO1:READ lupex%(j%):NEXT
4070RESTORE +0
4080DATA 258,348,198,364,140,324,100,216,82,60
4090DATA 310,340,372,332,434,248,480,140,536,60
4100DATA 288,328,378,352,532,332,708,284,820,0
4110DATA 240,324,158,336,30,316,-100,0,-100,0
4120DATA 268,304,214,332,162,312,140,244,138,112
4130DATA 366,356,272,392,158,388,74,340,-100,0
4140DATA 358,320,264,340,146,304,74,216,32,88
4150DATA 434,312,406,356,346,340,288,248,254,96
4160DATA 474,284,466,336,442,352,416,276,404,140
4170DATA 574,288,662,336,784,348,820,0,820,0
4180DATA 518,268,562,248,596,196,632,92,820,0
4190DATA 614,252,734,292,820,0,820,0,820,0
4200DATA 594,220,648,228,710,192,764,112,820,0
4210FORj%=0TO12:FORk%=0TO4:FORl%=0TO1:READ bean%(j%,k%,l%):NEXT:NEXT:NEXT
4220RESTORE +0
4230DATA 84,444,126,436,218,396,356,376,490,356,628,324,530,288,418,256,308,232,202,212,80,184,150,156,224,120,318,72
4240FORj%=0TO13:FORk%=0TO1:READ syc%(j%,k%):NEXT:NEXT
4250RESTORE +0
4260DATA 538,490,446,338,258,148,80
4270FORj%=0TO6:READ dand%(j%):NEXT
4280RESTORE +0
4290DATA 508,332,462,312,408,284,352,256,300,232,218,184,142,136,62,80
4300FORj%=0TO7:FORk%=0TO1:READ dse%(j%,k%):NEXT:NEXT
4310RESTORE +0
4320DATA 0,164,596,1,162,560,1,172,524,1,182,484,1,196,436,2,210,420,3,226,432,3,242,480,3,254,536,3,268,596,3,0,650,4,222,560,4,222,456,4,222,336,4,222,188,5,172,4
4330FORj%=0TO15:FORk%=0TO2:READ do%(j%,k%):NEXT:NEXT
4340RESTORE +0
4350DATA 212,4,198,52,170,32
4360FORj%=0TO2:FORk%=0TO1:READ mlxy%(j%,k%):NEXT:NEXT
4370RESTORE +0
4380DATA 392,352,300,224,136
4390FORj%=0TO4:READ coc%(j%):NEXT
4400RESTORE +0
4410DATA 172,172,136,80,68,60,48,40,32
4420FORj%=0TO8:READ pea%(j%):NEXT
4430RESTORE +0
4440DATA 196,196,152,92,72,56,44,36,28
4450FORj%=0TO8:READ sunf%(j%):NEXT
4460RESTORE +0
4470DATA 192,188,156,140,112,88,76,72,64
4480FORj%=0TO8:READ whe%(j%):NEXT
4490RESTORE +0
4500DATA "110,pea","332,sun","634,whe"
4510DATA "070,hyp","348,epi","570,mon"
4520DATA "060,peb","284,sub","586,whb"
4530FORj%=0TO8:READ ger$(j%):NEXT
4540RESTORE +0
4550DATA 26,180,26,180,46,180,46,180,30,72,148,344,130,344
4560FORj%=0TO6:FORk%=0TO1:READ corm%(j%,k%):NEXT:NEXT
4570RESTORE +0
4580DATA 498,160,498,160,498,160,482,160,438,44,428,44
4590FORj%=0TO5:FORk%=0TO1:READ bulb%(j%,k%):NEXT:NEXT
4600RESTORE +0
4610DATA 148,244,234,288,392,212,392,160,372,136
4620FORj%=0TO4:FORk%=0TO1:READ run%(j%,k%):NEXT:NEXT
4630RESTORE +0
4640DATA 362,112,274,112,88,96,0,84,186,184,150,176
4650FORj%=0TO5:FORk%=0TO1:READ rhi%(j%,k%):NEXT:NEXT
4660ENDPROC
4670
4680DEFPROCmodechange
4690SYS"OS_ReadVduVariables",inb%,outb%
4700xmaxec%=(((outb%!8)+1)<<(outb%!0))-1:ymaxec%=(((outb%!12)+1)<<(outb%!4))-1
4710SYS"Wimp_ReadPixTrans",&100,animarea%,"anim",,,,scale%,coltrans%
4720ENDPROC
4730
4740DEFPROCerror(msg$,errno%)
4750!errblk%=99:$(errblk%+4)=msg$
4760SYS "Wimp_ReportError",errblk%,0,"Plantwise"
4770ENDPROC
4780
4790DEFPROCdiscmess(msg$,errno%)
4800!errblk%=99:$(errblk%+4)=msg$
4810SYS "Wimp_ReportError",errblk%,%10000,"Plantwise"
4820ENDPROC
4830
4840DEFPROCselecticn(w%,i%,f%)
4850!blk%=w%:blk%!4=i%:blk%!12=(1<<21):IFf%=0 blk%!8=0:ELSE blk%!8=blk%!12
4860SYS "Wimp_SetIconState",,blk%
4870ENDPROC
4880
4890DEFPROCgeticonstate(w%,i%)
4900!blk%=w%:blk%!4=i%:SYS "Wimp_GetIconState",,blk%
4910ENDPROC
4920
4930DEFFNisselected(w%,i%)
4940PROCgeticonstate(w%,i%)
4950=((blk%!24)AND(1<<21))=(1<<21)
4960
4970DEFFNisopen(w%)
4980!blk%=w%:SYS "Wimp_GetWindowState",,blk%
4990=((blk%!32)AND(1<<16))=(1<<16)
5000
5010DEFPROCwintoscrn(b%)
5020!blk2%=!b%:SYS "Wimp_GetWindowState",,blk2%
5030b%!8+=(blk2%!4)-(blk2%!20)
5040b%!12+=(blk2%!16)-(blk2%!24)
5050b%!16+=(blk2%!4)-(blk2%!20)
5060b%!20+=(blk2%!16)-(blk2%!24)
5070ENDPROC
5080
5090DEFFNleaf(f$) I%=LENf$:WHILEI%>1ANDMID$(f$,I%,1)<>"."I%-=1:ENDWHILE
5100IFMID$(f$,I%,1)="."I%+=1
5110=MID$(f$,I%)
5120
5130DEFFNconverttolower(a$)
5140LOCAL l%,b$,ch%:b$=""
5150IFLEN(a$)>0THEN
5160FORl%=1TOLENa$
5170ch%=ASC(MID$(a$,l%,1))
5180IF(ch%>&40)AND(ch%<&5B):ch%+=&20
5190b$+=CHR$ch%
5200NEXT
5210ENDIF
5220=b$
5230
5240DEFFNgeticnstring(w%,i%)
5250!blk%=w%:blk%!4=i%:SYS "Wimp_GetIconState",,blk%
5260=FNreadstring(blk%!28)
5270
5280DEFPROCputicnstring(w%,i%,a$)
5290!blk%=w%:blk%!4=i%:SYS "Wimp_GetIconState",,blk%
5300$(blk%!28)=a$:?((blk%!28)+LENa$)=0
5310blk%!8=0:blk%!12=0:SYS "Wimp_SetIconState",,blk%
5320ENDPROC
5330
5340DEFFNreadstring(p%)
5350LOCALa$:a$="":WHILE (LEN(a$)<255)AND(?p%>31):a$+=CHR$(?p%):p%+=1:ENDWHILE
5360=a$
5370
5380DEFPROCload_template(winname$)
5390LOCAL j%
5400winstarts%!((winctr%-1)*4)=wptr%:indstarts%!((winctr%-1)*4)=iptr%
5410SYS "Wimp_LoadTemplate",,wptr%,iptr%,indbase%+totindsize%,-1,winname$,0 TO ,,iptr%
5420IFwinname$="animate" animwtitle%=wptr%!72:animwtitlesiz%=wptr%+80
5430IFwinname$="animmenu" anmewtitle%=wptr%!72:anmewtitlesiz%=wptr%+80
5440noicns%=wptr%!84
5450FORj%=0TO(noicns%-1)*32STEP32
5460 PROCcheckicons
5470NEXT
5480IFwinname$="whatword":PROCcreatewordw
5490wptr%+=88+((wptr%!84)*32):winctr%+=1
5500ENDPROC
5510
5520DEFPROCcreatewordw
5530LOCAL ic%,wo%,ico%,row%,col%
5540ic%=0
5550FORcol%=0TO1
5560 FORrow%=0TO12
5570 IF(ic%<totgloss%)AND((col%<>0)OR(row%<>0)) THEN
5580 FORwo%=0TO7:wptr%!(88+(32*ic%)+(4*wo%))=wptr%!(88+(4*wo%)):NEXT
5590 ico%=wptr%+(88+(32*ic%))
5600 !ico%=(wptr%!88)+(260*col%):ico%!8=(wptr%!(88+8))+(260*col%)
5610 IFrow%>0:ico%!4=!(ico%-32+4)-56:ico%!12=!(ico%-32+12)-56
5620 ico%!20=iptr%:$iptr%="123455678901234":iptr%+=15
5630 ico%!28=15
5640 ENDIF
5650 ic%+=1
5660 NEXT
5670NEXT
5680FORj%=32TO((totgloss%-1)*32)STEP32
5690 PROCcheckicons
5700NEXT
5710wptr%!84=totgloss%
5720ENDPROC
5730
5740DEFPROCcheckicons
5750 icnblk%=wptr%+88+j%:icnf%=(icnblk%!16)
5760 IF FNindirected(icnf%)ANDNOTFNsprite(icnf%)ANDFNtext(icnf%)AND(icnblk%!24<>-1) THEN:IFINSTR(FNreadstring(icnblk%!24),"b0")<>0 icnf%=icnf%AND&FFFF0FFF
5770 IF NOTFNindirected(icnf%)ANDNOTFNsprite(icnf%)ANDFNtext(icnf%) THEN:icnf%=icnf%AND&FFFF3FFF
5780 IF FNindirected(icnf%)ANDFNsprite(icnf%)ANDNOTFNtext(icnf%) THEN
5790 IFwinname$="menu"THEN
5800 icnblk%!24=menuarea%:icnf%=(icnf%AND&FFFF0FFF)OR&00003000
5810 ELSE
5820 IF(winname$="proginfo")OR(winname$="fastfind")THEN
5830 icnblk%!24=sparea%:icnf%=(icnf%AND&FFFF0FFF)OR&00003000
5840 ELSE
5850 icnblk%!24=detarea%:icnf%=(icnf%AND&FFFF0FFF)OR&00003000
5860 ENDIF
5870 ENDIF
5880 ENDIF
5890 IF FNindirected(icnf%)ANDFNsprite(icnf%)ANDFNtext(icnf%) THEN
5900 IF(winname$="animmenu")OR(winname$="animate"):icnf%=(icnf%AND&FFFF0FFF)OR&00003000
5910 IF(winname$="fastfind")OR(winname$="whatword"):icnf%=(icnf%AND&FFFF0FFF)OR&00003000
5920 ENDIF
5930REM IF NOTFNindirected(icnf%)ANDFNsprite(icnf%) THEN
5940REM sprn$=FNreadstring(icnblk%+20)
5950REM SYS "XWimp_SpriteOp",40,,sprn$ TO ,,,w%,h%
5960REM IF(w%ORh%)=0:icnf%=icnf%OR256:$iptr%=sprn$:?(iptr%+(LENsprn$))=0:icnblk%!20=iptr%:icnblk%!24=sparea%:icnblk%!28=LENsprn$:iptr%+=LEN(sprn$)+1
5970REM ENDIF
5980 icnblk%!16=icnf%
5990ENDPROC
6000
6010DEFFNindirected(f%)
6020=((f%AND256)=256)
6030
6040DEFFNsprite(f%)
6050=((f%AND2)=2)
6060
6070DEFFNtext(f%)
6080=((f%AND1)=1)
6090
6100DEFPROCbaricon
6110$ibname%="frame1"
6120!blk%=-1:blk%!4=0:blk%!8=0:blk%!12=84:blk%!16=72
6130blk%!20=&1000313A:blk%!24=ibname%:blk%!28=sparea%:blk%!32=LEN$ibname%
6140SYS "Wimp_CreateIcon",,blk% TO ibh%
6150ENDPROC
6160
6170DEFPROCmakemenusprites(m%)
6180SYS "OS_SpriteOp",&109,menuarea%
6190PROCunsquash(menufile%(m%,0),menufile%(m%,1),sqbuffer%,17*1024,menuarea%+4,(27*1024)-4)
6200ENDPROC
6210
6220DEFPROCunsquash(inptr%,insiz%,bufptr%,bufsiz%,outptr%,outsiz%)
6230REM first call with input size to see how big workspace should be
6240REMSYS "Squash_Decompress",%1000,insiz%,0,0,0,0 TO r0%
6250REMIFr0%<=bufsiz%:fast%=%100:ELSE:fast%=0
6260REMsomeleft%=insiz%
6270REM done%=0
6280REMr2%=inptr%:r4%=outptr%:r5%=outsiz%
6290REMWHILE someleft%
6300SYS "Squash_Decompress",%100,bufptr%,inptr%,insiz%,outptr%,outsiz% TO r0%,r1%,r2%,r3%,r4%,r5%
6310IFr0%=1:PROCerror("Squash_Decompress ran out of input data",0):SYS "Wimp_CloseDown",,&4B534154:END
6320IFr0%=2:PROCerror("Squash_Decompress ran out of output space",0):SYS "Wimp_CloseDown",,&4B534154:END
6330REMPROCerror(STR$~(r0%)+" "+STR$~(r1%)+" "+STR$~(r2%)+" "+STR$~(r3%)+" "+STR$~(r4%)+" "+STR$~(r5%),0)
6340REMENDWHILE
6350ENDPROC
6360
6370DEFPROCopen_menuw(am%,aa%)
6380LOCAL j%
6390IFFNisopen(menuw%):PROCclosewind(blk%)
6400IFam%>0THEN
6410 FORj%=6TO18STEP3
6420 IFam%=((j%/3)-1):PROCselecticn(menuw%,j%,TRUE):ELSE:PROCselecticn(menuw%,j%,FALSE)
6430 NEXT
6440ENDIF
6450!blk%=menuw%:SYS "Wimp_GetWindowState",,blk%
6460IFfirsttime%THEN
6470 IFxmaxec%>1280:blk%!4=INT((xmaxec%-1280)/2):ELSE:blk%!4=0
6480 IFymaxec%>1024:blk%!8=INT((ymaxec%-1024)/2):ELSE:blk%!8=0
6490 blk%!12=(blk%!4)+352:blk%!16=(blk%!8)+1024:blk%!20=0:blk%!24=0
6500ENDIF
6510!blk%=menuw%:blk%!28=-1
6520PROCopenwind(blk%)
6530PROCopen_animw(am%,aa%)
6540ENDPROC
6550
6560DEFPROCopen_findw
6570LOCAL j%
6580FORj%=35TO88:PROCselecticn(findw%,j%,FALSE):NEXT
6590findicn%=0
6600IF(actmenu%>0)AND(actanim%=-1):PROCselecticn(findw%,34+actmenu%,TRUE):findicn%=34+actmenu%
6610IFactanim%>=0:PROCselecticn(findw%,40+actanim%,TRUE):findicn%=40+actanim%
6620!blk%=findw%:SYS "Wimp_GetWindowState",,blk%
6630IFxmaxec%>1280:blk%!4=INT((xmaxec%-1280)/2):ELSE:blk%!4=0
6640IFymaxec%>960:blk%!8=INT((ymaxec%-960)/2):ELSE:blk%!8=0
6650blk%!12=(blk%!4)+1280:blk%!16=(blk%!8)+960:blk%!20=0:blk%!24=0
6660blk%!28=-1:PROCopenwind(blk%)
6670ENDPROC
6680
6690DEFPROCopen_mess(m$)
6700PROCputicnstring(demow%,0,m$)
6710!blk2%=anmew%:SYS "Wimp_GetWindowState",,blk2%
6720blk%!4=blk2%!4:blk%!12=(blk%!4)+882
6730IF(blk2%!8)<132:blk%!16=132:ELSE:blk%!16=blk2%!8-44
6740blk%!8=(blk%!16)-132
6750!blk%=demow%:blk%!20=0:blk%!24=0:blk%!28=-1
6760PROCopenwind(blk%)
6770ENDPROC
6780
6790DEFPROCopen_messff
6800PROCputicnstring(demow%,0,"Only topics with an orange background are available in this demonstration system.")
6810!blk2%=findw%:SYS "Wimp_GetWindowState",,blk2%
6820blk%!4=(blk2%!4)+200:blk%!12=(blk%!4)+882
6830IF(blk2%!8)<132:blk%!16=132:ELSE:blk%!16=(blk2%!8)-44
6840blk%!8=(blk%!16)-132
6850!blk%=demow%:blk%!20=0:blk%!24=0:blk%!28=-1
6860PROCopenwind(blk%)
6870ENDPROC
6880
6890DEFPROCopen_messww
6900PROCputicnstring(demow%,0,"This is only a part of the What Word facility.")
6910!blk2%=wordw%:SYS "Wimp_GetWindowState",,blk2%
6920REMblk%!4=(blk2%!4)+200:blk%!12=(blk%!4)+882
6930IFxmaxec%>882:blk%!4=INT((xmaxec%-882)/2):ELSE:blk%!4=0
6940blk%!12=(blk%!4)+882
6950IF(blk2%!8)<132:blk%!16=132:ELSE:blk%!16=(blk2%!8)-44
6960blk%!8=(blk%!16)-132
6970!blk%=demow%:blk%!20=0:blk%!24=0:blk%!28=-1
6980PROCopenwind(blk%)
6990ENDPROC
7000
7010DEFPROCopen_mess1
7020!blk%=demo1w%:SYS "Wimp_GetWindowState",,blk%
7030IFxmaxec%>1040:blk%!4=INT((xmaxec%-1040)/2):ELSE:blk%!4=0
7040IFymaxec%>740:blk%!8=INT((ymaxec%-740)/2):ELSE:blk%!8=0
7050blk%!12=(blk%!4)+1040:blk%!16=(blk%!8)+740:blk%!20=0:blk%!24=0
7060blk%!28=-1:PROCopenwind(blk%)
7070ENDPROC
7080
7090DEFPROCopen_wordw
7100LOCAL j%
7110FORj%=0TOtotgloss%-1:PROCselecticn(wordw%,j%,FALSE):NEXT
7120!blk%=wordw%:SYS "Wimp_GetWindowState",,blk%
7130IFxmaxec%>wide%:blk%!4=INT((xmaxec%-wide%)/2):ELSE:blk%!4=0
7140IFymaxec%>high%:blk%!8=INT((ymaxec%-high%)/2):ELSE:blk%!8=0
7150blk%!12=(blk%!4)+wide%:blk%!16=(blk%!8)+high%:blk%!20=0:blk%!24=0
7160blk%!28=-1:PROCopenwind(blk%)
7170ENDPROC
7180
7190DEFPROCopen_defnw(i%)
7200LOCAL j%
7210PROCputicnstring(defnw%,0,gloss$(i%,0)):PROCputicnstring(defnw%,1,gloss$(i%,1))
7220IFNOTFNisopen(defnw%)THEN
7230 !blk%=defnw%:SYS "Wimp_GetWindowState",,blk%
7240 IFxmaxec%>842:blk%!4=INT((xmaxec%-842)/2):ELSE:blk%!4=0
7250 IFymaxec%>244:blk%!8=INT((ymaxec%-244)/2):ELSE:blk%!8=0
7260 blk%!12=(blk%!4)+842:blk%!16=(blk%!8)+244:blk%!20=0:blk%!24=0
7270 blk%!28=-1:PROCopenwind(blk%)
7280ENDIF
7290ENDPROC
7300
7310DEFPROCopen_animw(am%,aa%)
7320LOCAL j%,detsiz%,k%
7330IFfirsttime%THEN
7340 firsttime%=0
7350 !blk%=anmew%:SYS "Wimp_DeleteWindow",,blk%
7360 !((winstarts%!8)+52)=-56
7370 SYS "Wimp_CreateWindow",,winstarts%!8 TO anmew%
7380 PROCinitanmewlabs(0)
7390 !anmewtitlesiz%=LEN(anmewtitle$(0))+1:$anmewtitle%=anmewtitle$(0)
7400 !blk%=anmew%:SYS "Wimp_GetWindowState",,blk%
7410 IFxmaxec%>1280:blk%!4=INT((xmaxec%-1280)/2)+396:ELSE:blk%!4=396
7420 IFymaxec%>1024:blk%!8=INT((ymaxec%-1024)/2):ELSE:blk%!8=0
7430 blk%!12=(blk%!4)+842:blk%!16=(blk%!8)+1024:blk%!20=0:blk%!24=0
7440 blk%!28=-1:PROCopenwind(blk%)
7450 actmenu%=am%:actanim%=aa%
7460 ENDPROC
7470ENDIF
7480IFFNisopen(animw%):PROCclosewind(blk%)
7490IFFNisopen(anmew%):PROCclosewind(blk%)
7500IFam%<>0 THEN
7510 IFNOTshrunkanme%THEN
7520 IFam%>0:PROCresizeanmew:PROCsetextent(anmew%,800):shrunkanme%=-1
7530 ENDIF
7540ENDIF
7550IFaa%=-1THEN
7560 PROCinitanmewlabs(am%)
7570 !anmewtitlesiz%=LEN(anmewtitle$(am%))+1:$anmewtitle%=anmewtitle$(am%)
7580 *Set PlantWise$chaindir <PlantWise$Dir>
7590 IFY%=0:test%=0:REPEAT:PROCfloppy_disk("Plantwise","$.!Plantwise.spfiles.anim20"):UNTILerror%=0
7600 IF(actmenu%<>am%)OR(actanim%<>aa%):PROCloadunsquash(detarea%,100*1024,"spfiles.animmenu"+STR$(am%))
7610 PROCmakeanim(am%,aa%,0):IFam%>0:PROCaddanmewlines(am%)
7620ELSE
7630 PROCinitanimw(aa%)
7640 !animwtitlesiz%=LEN(animwtitle$(aa%))+1:$animwtitle%=animwtitle$(aa%)
7650 IFactanim%<>aa%THEN
7660 *Set PlantWise$chaindir <PlantWise$Dir>
7670 IFY%=0:test%=0:REPEAT:PROCfloppy_disk("Plantwise","$.!Plantwise.spfiles.anim20"):UNTILerror%=0
7680 IFbg%(aa%)THEN
7690 !detarea%=120*1024:detarea%!8=16:SYS "OS_SpriteOp",&109,detarea%
7700 !bgarea%=33*1024:bgarea%!8=16:SYS "OS_SpriteOp",&109,bgarea%
7710 PROCgetbg(aa%):PROCloadunsquash(detarea%,120*1024,"spfiles.anim"+STR$(aa%))
7720 PROCspecialbg(aa%)
7730 ELSE
7740 !detarea%=153*1024:detarea%!8=16:SYS "OS_SpriteOp",&109,detarea%
7750 PROCloadunsquash(detarea%,153*1024,"spfiles.anim"+STR$(aa%))
7760 ENDIF
7770 PROCgetwordfile(aa%):PROCgetnumbfile(aa%)
7780 ENDIF
7790 PROCmakeanim(am%,aa%,bg%(aa%))
7800 IFtexton%:PROCremovetext(aa%):acttxticn%=0:PROCselecticn(animw%,1,TRUE):PROCaddtext(aa%)
7810ENDIF
7820IFactanim%=-1:!blk%=anmew%:ELSE:!blk%=animw%
7830IF(actmenu%=0)AND(am%<>0) THEN
7840 FORj%=4TO20STEP4:blk%!j%=blk2%!j%:NEXT
7850 blk%!24=(blk2%!24)+56
7860 IF((blk2%!32)AND&40000)=&40000:blk%!12=(blk%!4)+842:blk%!8=(blk%!16)-1024
7870ELSE
7880 SYS "Wimp_GetWindowState",,blk%
7890 IF((blk%!32)AND&40000)=&40000:blk%!12=(blk%!4)+842:blk%!8=(blk%!16)-1024
7900ENDIF
7910IFaa%=-1:!blk%=anmew%:ELSE:!blk%=animw%
7920blk%!28=-1:PROCopenwind(blk%)
7930actmenu%=am%:actanim%=aa%
7940ENDPROC
7950
7960DEFPROCspecialbg(aa%)
7970CASE aa% OF
7980 WHEN 14: SYS"OS_SpriteOp",&13C,bgarea%,"bg7",0:SCALE%!0=12:SCALE%!4=12:SCALE%!8=16:SCALE%!12=16
7990 FORj%=0TO7:SYS"OS_SpriteOp",&134,detarea%,"gr"+STR$(j%MOD3),420+(j%*50),0,&08,SCALE%,0:PROCflip(2,"gr"+STR$(j%MOD3)):NEXT
8000 PROCflip(2,"gr0"):PROCflip(2,"gr1"):SCALE%!0=1:SCALE%!4=1:SCALE%!8=1:SCALE%!12=1:SYS"OS_SpriteOp",&13C,bgarea%,0,1
8010 WHEN 16:SYS"OS_SpriteOp",&13C,bgarea%,"bg4",0
8020 FOR j%=0TO3:SYS"OS_SpriteOp",&122,detarea%,"bg",0+(408*(j%MOD2)),0+(336*INT(j%/2)),8:NEXT
8030 SYS"OS_SpriteOp",&13C,bgarea%,0,1
8040ENDCASE
8050ENDPROC
8060
8070DEFPROCopen_setupw
8080LOCAL j%
8090!blk%=setupw%
8100IFxmaxec%>1104:blk%!4=INT((xmaxec%-1104)/2):ELSE:blk%!4=0
8110IFymaxec%>156:blk%!8=INT((ymaxec%-156)/2):ELSE:blk%!8=0
8120blk%!12=(blk%!4)+1104:blk%!16=(blk%!8)+156
8130blk%!20=0:blk%!24=0:blk%!28=-1
8140PROCopenwind(blk%)
8150ENDPROC
8160
8170DEFPROCgetbg(aa%)
8180CASE aa% OF
8190 WHEN 10:PROCmakebg(aa%,4,-1,332,-1,364,11,13)
8200 WHEN 12:PROCmakebg(aa%,8,-1,124,0,122,1,13)
8210 WHEN 14,23:PROCmakebg(aa%,7,-1,0,0,0,0,0)
8220 WHEN 20:PROCmakebg(aa%,8,0,80,0,78,1,13)
8230 WHEN 22:PROCloadunsquash(detarea%,120*1024,"spfiles.bgs.bg"+STR$(bg%(aa%)))
8240 SYS "OS_SpriteOp",&109,bgarea%:SYS "OS_SpriteOp",&10F,bgarea%,"bg1",1,405,161,12:PROCaddpalet(bgarea%,"bg1")
8250 SYS"OS_SpriteOp",&13C,bgarea%,"bg1",0
8260 VDU18,0,15:VDU25,4,0;0;:VDU25,101,810;644;
8270 SYS "OS_SpriteOp",&122,detarea%,"horiz",0,360,8
8280 VDU18,0,10:VDU25,4,0;200;:VDU25,101,810;360;
8290 VDU23,12,11,10,10,11,11,10,10,11:VDU18,16,0:VDU25,4,0;80;:VDU25,101,810;200;
8300 VDU23,12,11,13,13,11,11,13,13,11:VDU18,16,0:VDU25,4,0;0;:VDU25,101,810;80;
8310 VDU18,0,7:VDU25,4,0;80;:VDU25,101,810;80;
8320 SYS "OS_SpriteOp",&122,detarea%,"cow",186,220,8:SYS "OS_SpriteOp",&122,detarea%,"fence",0,220,8
8330 SYS "OS_SpriteOp",&122,detarea%,"verge",0,184,8:SYS "OS_SpriteOp",&122,detarea%,"verge",404,184,8
8340 SYS"OS_SpriteOp",&13C,bgarea%,0,1
8350 SYS "OS_SpriteOp",&119,detarea%,"horiz":SYS "OS_SpriteOp",&119,detarea%,"cow":SYS "OS_SpriteOp",&119,detarea%,"fence":SYS "OS_SpriteOp",&119,detarea%,"verge"
8360 WHEN 25:PROCmakebg(aa%,3,0,240,0,298,11,13)
8370 WHEN 29:PROCmakebg(aa%,3,-1,188,-1,208,11,13)
8380 OTHERWISE:PROCmakebg(aa%,0,0,0,0,0,0,0)
8390ENDCASE
8400ENDPROC
8410
8420DEFPROCmakebg(aa%,bgno%,flip%,up%,line%,ecfup%,ecf1%,ecf2%)
8430PROCloadunsquash(bgarea%,33*1024,"spfiles.bgs.bg"+STR$(bg%(aa%)))
8440IFbgno%>0 THEN
8450 IFflip%:SYS "OS_SpriteOp",&12F,bgarea%,"bg"+STR$(bgno%)
8460 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
8470 SYS"OS_SpriteOp",&122,bgarea%,"bg"+STR$(bgno%),0,0,0
8480 SYS"OS_SpriteOp",&13C,animarea%,0,1
8490 SYS"OS_SpriteOp",&13C,bgarea%,"bg"+STR$(bgno%),0
8500 SYS"OS_SpriteOp",&122,animarea%,"anim",0,up%,0
8510 IFecfup%>0:VDU23,12,ecf1%,ecf2%,ecf2%,ecf1%,ecf1%,ecf2%,ecf2%,ecf1%:VDU18,16,0:VDU25,4,0;0;:VDU25,101,810;ecfup%;
8520 IFline%:SYS"Wimp_SetColour",7:VDU25,4,0;ecfup%;:VDU25,101,810;ecfup%+2;
8530 SYS"OS_SpriteOp",&13C,bgarea%,0,1
8540ENDIF
8550ENDPROC
8560
8570DEFPROCmakeanim(am%,aa%,bg%)
8580IFaa%=-1THEN
8590 PROCcopysp("men"+STR$(am%),"anim")
8600ELSE
8610 IFbg%ANDNOTtexton% THEN
8620 PROCcopysp("bg"+STR$(bg%),"anim")
8630 ELSE
8640 PROCcl_anim(15)
8650 CASE aa% OF
8660 WHEN 10,16:PROCcopysp("bg4","anim")
8670 WHEN 18:IFNOTtexton% THEN:SYS"OS_SpriteOp",&13C,animarea%,"anim",0:PROCfruitbg:SYS"OS_SpriteOp",&13C,animarea%,0,1
8680 ENDCASE
8690 ENDIF
8700 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
8710 CASE aa% OF
8720 WHEN 4: PROCmakeleaf
8730 WHEN 5: PROCmakephoto
8740 WHEN 6: PROCmakeleafcl
8750 WHEN 20: se%()=0:PROCmakedisp(0,se%())
8760 WHEN 21: PROCmakedispexp(0,0)
8770 WHEN 22: PROCmakedispwind(0,0,0,-1,0)
8780 WHEN 23: PROCmakedispani(0,-1,0,0,0)
8790 WHEN 24: PROCmakedispwat
8800 ENDCASE
8810 SYS"OS_SpriteOp",&13C,animarea%,0,1
8820ENDIF
8830ENDPROC
8840
8850DEFPROCmakeleaf
8860SYS"OS_SpriteOp",&122,detarea%,"hww",16,0,8:SYS"OS_SpriteOp",&122,detarea%,"ss",276,0,8:SYS"OS_SpriteOp",&122,detarea%,"sw",590,0,8
8870ENDPROC
8880
8890DEFPROCmakephoto
8900SYS"OS_SpriteOp",&122,detarea%,"phbg",0,0,8
8910SYS"OS_SpriteOp",&122,detarea%,"ar30",0,88,8:SYS"OS_SpriteOp",&122,detarea%,"ar20",180,316,8
8920IFsimp%=1:SYS"OS_SpriteOp",&122,detarea%,"equn",0,492,8
8930ENDPROC
8940
8950DEFPROCmakeleafcl
8960SYS"OS_SpriteOp",&122,detarea%,"lecl",58,52,8
8970ENDPROC
8980
8990
9000DEFPROCmakedisp(s%,se%())
9010LOCAL j%,k%
9020SYS"OS_SpriteOp",&122,detarea%,"tree",336-(8*s%),536,8:SYS"OS_SpriteOp",&122,detarea%,"tree",470+(16*s%),448,8:PROCflip(2,"tree"):SYS"OS_SpriteOp",&122,detarea%,"tree",-16*s%,448,8:PROCflip(2,"tree")
9030IFtexton%:VDU23,12,1,13,13,1,1,13,13,1:VDU18,16,0:VDU25,4,0;0;:VDU25,101,810;160;
9040FORj%=0TO9
9050 IFj%>=6THEN
9060 IFse%(j%-6)=0:SYS"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-(16*s%),disp1%(j%,1),8
9070 IFse%(j%-6)=1:SYS"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-16,disp1%(j%,1)-52,8
9080 IFse%(j%-6)=2:SYS"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-16,disp1%(j%,1)-156,8
9090 IFse%(j%-6)=3:SYS"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-16,disp1%(j%,1)-312,8
9100 IFse%(j%-6)>=4:SYS"OS_SpriteOp",&122,detarea%,"seed2"+STR$(j%-5),disp1%(j%,0)-16-20,sland%(j%-6),8
9110 ELSE
9120 SYS"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-(16*s%),disp1%(j%,1),8
9130 ENDIF
9140NEXT
9150FORj%=1TO4:PROCflip(2,"seed2"+STR$(j%)):NEXT
9160FORj%=0TO7
9170 IFj%>=5THEN
9180 IFse%(j%-1)=0:SYS"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+(16*s%),disp2%(j%,1),8
9190 IFse%(j%-1)=1:SYS"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+16,disp2%(j%,1)-52,8
9200 IFse%(j%-1)=2:SYS"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+16,disp2%(j%,1)-156,8
9210 IFse%(j%-1)=3:SYS"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+16,disp2%(j%,1)-312,8
9220 IFse%(j%-1)>=4:SYS"OS_SpriteOp",&122,detarea%,"seed2"+STR$(j%-4),disp2%(j%,0)+16-20,sland%(j%-1),8
9230 ELSE
9240 SYS"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+(16*s%),disp2%(j%,1),8
9250 ENDIF
9260NEXT
9270FORj%=0TO2
9280 IFj%=2THEN
9290 IFse%(7)=0:SYS"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-(8*s%),disp3%(j%,1),8
9300 IFse%(7)=1:SYS"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-8,disp3%(j%,1)-52,8
9310 IFse%(7)=2:SYS"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-8,disp3%(j%,1)-156,8
9320 IFse%(7)=3:SYS"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-8,disp3%(j%,1)-312,8
9330 IFse%(7)>=4:SYS"OS_SpriteOp",&122,detarea%,"seed24",disp3%(j%,0)-8-20,sland%(7),8
9340 ELSE
9350 SYS"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-(8*s%),disp3%(j%,1),8
9360 ENDIF
9370NEXT
9380FORj%=1TO4:PROCflip(2,"seed2"+STR$(j%)):NEXT
9390SYS"OS_SpriteOp",&122,detarea%,"seed21",520,24,8:SYS"OS_SpriteOp",&122,detarea%,"seed22",352,44,8
9400ENDPROC
9410
9420DEFPROCmakedispexp(cb%,lup%)
9430SYS"OS_SpriteOp",&122,detarea%,"cb",4,0,8:SYS"OS_SpriteOp",&122,detarea%,"lup",446,0,8
9440SYS"OS_SpriteOp",&122,detarea%,"cbex"+STR$(cb%),cbex%(cb%),140,8:SYS"OS_SpriteOp",&122,detarea%,"lupex"+STR$(lup%),lupex%(lup%),168,8
9450ENDPROC
9460
9470DEFPROCmakedispwind(fru%,dan%,dax%,ds%,ds2%)
9480IFtexton% THEN
9490 VDU23,12,11,10,10,11,11,10,10,11:VDU18,16,0:VDU25,4,0;80;:VDU25,101,810;200;
9500 VDU23,12,11,13,13,11,11,13,13,11:VDU18,16,0:VDU25,4,0;0;:VDU25,101,810;80;
9510 VDU18,0,7:VDU25,4,0;80;:VDU25,101,810;80;
9520ENDIF
9530SYS"OS_SpriteOp",&122,detarea%,"leaf",0,344,8:SYS"OS_SpriteOp",&122,detarea%,"fru",0,468,8:SYS"OS_SpriteOp",&122,detarea%,"dan",464,80,8
9540IFdan%>=0THEN
9550 IFdan%<=6:SYS"OS_SpriteOp",&122,detarea%,"dan"+STR$(dan%),dand%(dan%),292,8:ELSE:SYS"OS_SpriteOp",&122,detarea%,"dan6",dax%,292,8
9560ENDIF
9570IFfru%>=0THEN
9580 IFfru%<=4:SYS"OS_SpriteOp",&122,detarea%,"fru"+STR$(fru%),syc%(fru%,0),syc%(fru%,1),8:ELSE:SYS"OS_SpriteOp",&122,detarea%,"fru"+STR$(((fru%-5)MOD4)+1),syc%(fru%,0),syc%(fru%,1),8
9590ENDIF
9600IFds%>=0THEN
9610 SCALE%!0=ds%+1:SCALE%!4=ds%+1:SCALE%!8=8:SCALE%!12=8
9620 SYS"OS_SpriteOp",&134,detarea%,"ds",dse%(ds%,0),dse%(ds%,1),&08,SCALE%,0
9630 SCALE%!0=1:SCALE%!4=1:SCALE%!8=1:SCALE%!12=1
9640ENDIF
9650IFds2%:SYS"OS_SpriteOp",&122,detarea%,"ds2",32,80,8
9660ENDPROC
9670
9680DEFPROCmakedispani(dov%,mou%,mox%,ml%,bur%)
9690SYS"OS_SpriteOp",&122,detarea%,"bsw",0,0,8:SYS"OS_SpriteOp",&122,detarea%,"burd",452,0,8:SYS"OS_SpriteOp",&122,detarea%,"berry",0,544,8
9700IFmou%>=0 THEN
9710 SYS"OS_SpriteOp",&122,detarea%,"mrun"+STR$(mou%),mox%,12,8
9720 IFbur%=1:SYS"OS_SpriteOp",&122,detarea%,"bur",mox%+156+(14*(mou%MOD2)),88,8
9730 IFbur%=2:SYS"OS_SpriteOp",&122,detarea%,"bur",214,4,8
9740 IFmou%=2:SYS"OS_SpriteOp",&122,detarea%,"ml"+STR$(ml%),mox%+mlxy%(ml%,0),12+mlxy%(ml%,1),8
9750ENDIF
9760SYS"OS_SpriteOp",&122,detarea%,"bswl",328,12,8:SYS"OS_SpriteOp",&122,detarea%,"burdl",664,0,8
9770SYS"OS_SpriteOp",&122,detarea%,"dov"+STR$(do%(dov%,0)),do%(dov%,1),do%(dov%,2),8
9780ENDPROC
9790
9800DEFPROCmakedispwat
9810VDU23,12,15,0,0,15,15,0,0,15:VDU18,16,0:VDU25,4,0;0;:VDU25,101,810;644;
9820SYS"OS_SpriteOp",&122,detarea%,"land",0,0,8:SYS"OS_SpriteOp",&122,detarea%,"palm",40,68,8:SYS"OS_SpriteOp",&122,detarea%,"coc0",266,392,8
9830ENDPROC
9840
9850
9860DEFPROCcheckanimtext(noof%,lin$)
9870LOCAL j%,k%,stops%():DIM stops%(maxstops%)
9880stops%(0)=-1:FORj%=1TOnoof%:stops%(j%)=VAL(lin$):lin$=RIGHT$(lin$,LEN(lin$)-4):NEXT
9890IFtextnewon%THEN
9900 PROCputicnstring(animw%,9,"")
9910 FORj%=1TOnoof%
9920 IF(sub%>=stops%(j%-1)+1)AND(sub%<=stops%(j%)):PROCputicnstring(animw%,10,animwords$(simp%,j%-1))
9930 NEXT
9940ENDIF
9950textnewon%=0
9960FORj%=1TOnoof%
9970 IFsub%=stops%(j%-1)+1:PROCputicnstring(animw%,10,animwords$(simp%,j%-1)):PROCputicnstring(animw%,9,""):ENDPROC
9980NEXT
9990ENDPROC
10000
10010DEFPROCmovephoto
10020LOCAL lin$,noa%,k%
10030IFfirstmove%THEN
10040sub%=0:firstmove%=FALSE:elaps%=0
10050ELSE
10060IF(sub%<=7)OR((sub%>=23)AND(sub%<=35))OR((sub%>=39)AND(sub%<=41))THEN:IFTIME<lasttime%+60-elaps%:ENDPROC
10070IF(sub%>=8)AND(sub%<=17)THEN:IFTIME<lasttime%+20-elaps%:ENDPROC
10080IF((sub%>=18)AND(sub%<=22))OR((sub%>=36)AND(sub%<=38))OR((sub%>=42)AND(sub%<=52))THEN:IFTIME<lasttime%+120-elaps%:ENDPROC
10090ENDIF
10100elaps%=TIME
10110IFtexton%:PROCcheckanimtext(6,"006,029,040,044,046,051")
10120IFsub%<52THEN
10130 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
10140 IF(sub%>=7)AND(sub%<=17)THEN
10150 SYS"OS_SpriteOp",&122,detarea%,"phbg",0,0,8:SYS"OS_SpriteOp",&122,detarea%,"ar30",0,88,8
10160 PROCboxexp(sub%-7,10,188,292,-20,-16,40,32,40,32)
10170 ENDIF
10180 IF(sub%<=6)OR(sub%>=17)THEN
10190 lin$=photo$(sub%):noa%=VAL(lin$)
10200 lin$=RIGHT$(lin$,LEN(lin$)-3)
10210 FORk%=1TOnoa%
10220 SYS"OS_SpriteOp",&122,detarea%,animsp$(VAL(lin$)),animsp%(VAL(lin$),0),animsp%(VAL(lin$),1),8
10230 lin$=RIGHT$(lin$,LEN(lin$)-3)
10240 NEXT
10250 ENDIF
10260 PROCmoveendloop(6,"006,029,040,044,046,051",0,32,604,484)
10270ENDIF
10280sub%+=1
10290IFsub%=53:PROCmakeanim(actmenu%,actanim%,bg%(actanim%)):PROCanimateend:PROCplotanim(actanim%)
10300ENDPROC
10310
10320DEFPROCmoveleafcl
10330LOCAL lin$,noa%,k%
10340IFfirstmove%THEN
10350sub%=0:firstmove%=FALSE:elaps%=0
10360ELSE
10370IFsub%=1 THEN:IFTIME<lasttime%+120-elaps%:ENDPROC
10380IF(sub%>=2)AND(sub%<=9)THEN:IFTIME<lasttime%+20-elaps%:ENDPROC
10390IFsub%>=10 THEN:IFTIME<lasttime%+80-elaps%:ENDPROC
10400ENDIF
10410elaps%=TIME
10420IFtexton%:PROCcheckanimtext(1,"015")
10430IFsub%<16THEN
10440 IFsub%<=9:PROCcl_anim(15)
10450 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
10460 IFsub%<=9:SYS"OS_SpriteOp",&122,detarea%,"lecl",58,52,8
10470 PROCboxexp(sub%,9,550,128,-20,-4,80,64,40,32)
10480 CASE sub% OF
10490 WHEN 9,15:SYS"OS_SpriteOp",&122,detarea%,"st00",402,108,8
10500 WHEN 10,14:SYS"OS_SpriteOp",&122,detarea%,"st01",442,144,8
10510 WHEN 11,13:SYS"OS_SpriteOp",&122,detarea%,"st02",442,144,8
10520 WHEN 12:SYS"OS_SpriteOp",&122,detarea%,"st03",442,144,8
10530 ENDCASE
10540 PROCmoveendloop(1,"015",390,96,792,420)
10550ENDIF
10560sub%+=1
10570IFsub%=17:PROCmakeanim(actmenu%,actanim%,bg%(actanim%)):PROCanimateend:PROCplotanim(actanim%)
10580ENDPROC
10590
10600DEFPROCmovedisp
10610IFfirstmove%THEN
10620 sub%=0:firstmove%=FALSE:elaps%=0:se%()=0
10630ELSE
10640 IFTIME<lasttime%+30-elaps%:ENDPROC
10650ENDIF
10660elaps%=TIME
10670IFtexton%:PROCcheckanimtext(1,"023")
10680IFsub%<24THEN
10690 IFtexton% THEN:PROCcl_anim(15):ELSE:PROCcopysp("bg8","anim")
10700 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
10710 IFsub%>=5:se%(0)+=1
10720 IFsub%>=6:se%(1)+=1
10730 IFsub%>=8:se%(2)+=1
10740 IFsub%>=9:se%(3)+=1
10750 IFsub%>=10:se%(4)+=1
10760 IFsub%>=13:se%(5)+=1
10770 IFsub%>=15:se%(6)+=1
10780 IFsub%>=18:se%(7)+=1
10790 IF((sub%+1)MOD4)=3:PROCmakedisp(1,se%()):ELSE:PROCmakedisp((sub%+1)MOD4,se%())
10800 PROCmoveendloop(1,"023",0,0,810,644)
10810ENDIF
10820sub%+=1
10830IFsub%=25:PROCmakeanim(actmenu%,actanim%,bg%(actanim%)):PROCanimateend:PROCplotanim(actanim%)
10840ENDPROC
10850
10860DEFPROCmovedispexp
10870LOCAL j%,cb%,lup%
10880IFfirstmove%THEN
10890 sub%=0:firstmove%=FALSE:elaps%=0
10900ELSE
10910 IF(sub%=8)OR(sub%=15) THEN
10920 IFTIME<lasttime%+100-elaps%:ENDPROC
10930 ELSE
10940 IFTIME<lasttime%+30-elaps%:ENDPROC
10950 ENDIF
10960ENDIF
10970elaps%=TIME
10980IFtexton%:PROCcheckanimtext(2,"007,014")
10990IFsub%<15THEN
11000 IFtexton% THEN:PROCcl_anim(15):ELSE:PROCcopysp("bg6","anim")
11010 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
11020 IFsub%=0:cb%=0
11030 IFsub%=1:cb%=1
11040 IFsub%>=2:cb%=2
11050 IFsub%<=8:lup%=0:ELSE:lup%=1
11060 PROCmakedispexp(cb%,lup%)
11070 IF(sub%>=2)AND(sub%<=6) THEN:FORj%=0TO4:SYS"OS_SpriteOp",&122,detarea%,"bean"+STR$(RND(3)-1),bean%(j%,sub%-2,0),bean%(j%,sub%-2,1),8:NEXT
11080 IF(sub%>=9)AND(sub%<=13) THEN:FORj%=5TO12:SYS"OS_SpriteOp",&122,detarea%,"bean"+STR$(RND(3)-1),bean%(j%,sub%-9,0),bean%(j%,sub%-9,1),8:NEXT
11090 PROCmoveendloop(2,"004,011",0,60,810,440)
11100ENDIF
11110sub%+=1
11120IFsub%=16:PROCmakeanim(actmenu%,actanim%,bg%(actanim%)):PROCanimateend:PROCplotanim(actanim%)
11130ENDPROC
11140
11150DEFPROCmovedispwind
11160LOCAL fru%,dan%,dax%,ds%,ds2%
11170IFfirstmove%THEN
11180 sub%=0:firstmove%=FALSE:elaps%=0
11190ELSE
11200 IF(sub%=13)OR(sub%=31) THEN
11210 IFTIME<lasttime%+180-elaps%:ENDPROC
11220 ELSE
11230 IFTIME<lasttime%+30-elaps%:ENDPROC
11240 ENDIF
11250ENDIF
11260elaps%=TIME
11270IFtexton%:PROCcheckanimtext(2,"012,030")
11280IFsub%<31THEN
11290 IFtexton% THEN:PROCcl_anim(15):ELSE:PROCcopysp("bg1","anim")
11300 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
11310 IFsub%<=12:fru%=sub%+1:ELSE:fru%=-1
11320 IFsub%>=14:dan%=sub%-14:ELSE:dan%=0
11330 IFsub%>=21:dax%=20-((sub%-21)*60):ELSE:dax%=0
11340 IF(sub%>=17)AND(sub%<=24):ds%=sub%-17:ELSE:ds%=-1
11350 IFsub%>=25:ds2%=-1:ELSE:ds2%=0
11360 PROCmakedispwind(fru%,dan%,dax%,ds%,ds2%)
11370 IFsub%<=12:PROCmoveendloop(2,"012,030",54,60,794,564):ELSE:PROCmoveendloop(2,"012,030",0,60,668,508)
11380ENDIF
11390sub%+=1
11400IFsub%=32:PROCmakeanim(actmenu%,actanim%,bg%(actanim%)):PROCanimateend:PROCplotanim(actanim%)
11410ENDPROC
11420
11430DEFPROCmovedispani
11440LOCAL dov%,mou%,mox%,ml%,bur%
11450IFfirstmove%THEN
11460 sub%=0:firstmove%=FALSE:elaps%=0
11470ELSE
11480 IF(sub%=13)OR(sub%=22)OR(sub%=34)OR(sub%=44)OR(sub%=49) THEN
11490 IFTIME<lasttime%+130-elaps%:ENDPROC
11500 ELSE
11510 IFTIME<lasttime%+30-elaps%:ENDPROC
11520 ENDIF
11530ENDIF
11540elaps%=TIME
11550IFtexton%:PROCcheckanimtext(5,"012,021,032,033,048")
11560IFsub%<49THEN
11570 IFtexton% THEN:PROCcl_anim(15):ELSE:PROCcopysp("bg7","anim")
11580 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
11590 IFsub%<=11:mox%=776-(sub%*64):mou%=sub%MOD2:bur%=1
11600 IFsub%=12:mox%=72:mou%=2:ml%=0:bur%=1
11610 IF(sub%>=13)AND(sub%<=19):mox%=72:mou%=2:ml%=2-(sub%MOD2):bur%=1
11620 IFsub%=20:mox%=72:mou%=2:ml%=2:bur%=2
11630 IFsub%=21:mox%=72:mou%=2:ml%=0:bur%=2
11640 IF(sub%>=22)AND(sub%<=32):mox%=72-((sub%-21)*64):mou%=sub%MOD2:bur%=2
11650 IFsub%>=33:mou%=-1:dov%=sub%-33
11660 PROCmakedispani(dov%,mou%,mox%,ml%,bur%)
11670 IFsub%<=33:PROCmoveendloop(5,"012,021,032,033,048",0,0,810,176):ELSE:PROCmoveendloop(5,"012,021,032,033,048",140,4,330,644)
11680ENDIF
11690sub%+=1
11700IFsub%=50:PROCmakeanim(actmenu%,actanim%,bg%(actanim%)):PROCanimateend:PROCplotanim(actanim%)
11710ENDPROC
11720
11730DEFPROCmovedispwat
11740IFfirstmove%THEN
11750 sub%=0:firstmove%=FALSE:elaps%=0
11760ELSE
11770 IFsub%=65 THEN
11780 IFTIME<lasttime%+200-elaps%:ENDPROC
11790 ELSE
11800 IFTIME<lasttime%+40-elaps%:ENDPROC
11810 ENDIF
11820ENDIF
11830elaps%=TIME
11840IFtexton%:PROCcheckanimtext(1,"064")
11850IFsub%<65THEN
11860 SYS"OS_SpriteOp",&13C,animarea%,"anim",0
11870 VDU23,12,15,0,0,15,15,0,0,15:VDU18,16,0:VDU25,4,0;0;:VDU25,101,810;644;
11880 VDU18,0,15:VDU25,4,0;0;:VDU25,101,810;274;
11890 IFsub%>=33:PROCflip(2,"land")
11900 IF(sub%<=15)OR(sub%>=50):SYS"OS_SpriteOp",&122,detarea%,"land",0,0,8
11910 IF(sub%>=16)AND(sub%<=32):SYS"OS_SpriteOp",&122,detarea%,"land",-50*(sub%-15),0,8
11920 IF(sub%>=33)AND(sub%<=49):SYS"OS_SpriteOp",&122,detarea%,"land",800-(50*(sub%-33)),0,8
11930 IFsub%>=33:PROCflip(2,"land")
11940 IFsub%<=15:SYS"OS_SpriteOp",&122,detarea%,"palm",40,68,8
11950 IF(sub%>=16)AND(sub%<=25):SYS"OS_SpriteOp",&122,detarea%,"palm",40-(50*(sub%-15)),68,8
11960 IFsub%<=4:SYS"OS_SpriteOp",&122,detarea%,"coc0",266,coc%(sub%),8
11970 IF(sub%>=5)AND(sub%<=8):SYS"OS_SpriteOp",&122,detarea%,"coc"+STR$(sub%-4),224,80,8
11980 IF(sub%>=9)AND(sub%<=15):SYS"OS_SpriteOp",&122,detarea%,"coc"+STR$(5+(sub%MOD2)),266+(20*(sub%-9)),88,8
11990 IF(sub%>=16)AND(sub%<=49):SYS"OS_SpriteOp",&122,detarea%,"coc"+STR$(5+(sub%MOD2)),386,88,8
12000 IF(sub%>=50)AND(sub%<=60):SYS"OS_SpriteOp",&122,detarea%,"coc"+STR$(5+(sub%MOD2)),386+(20*(sub%-49)),88,8
12010 IF(sub%>=61)AND(sub%<=64):SYS"OS_SpriteOp",&122,detarea%,"coc7",626+(20*(sub%-61)),88,8
12020 IFsub%<=15:PROCmoveendloop(1,"064",224,80,440,480)
12030 IF(sub%>=16)AND(sub%<=49):PROCmoveendloop(1,"064",0,0,810,644)
12040 IFsub%>=50:PROCmoveendloop(1,"064",380,88,740,140)
12050ENDIF
12060sub%+=1
12070IFsub%=66:PROCmakeanim(actmenu%,actanim%,bg%(actanim%)):PROCanimateend:PROCplotanim(actanim%)
12080ENDPROC
12090
12100
12110DEFPROCboxexp(s%,noof%,x%,y%,dx%,dy%,sizx%,sizy%,dsizx%,dsizy%)
12120REM s% goes from 0 to noof%:x,y orig leftbot corner:dx,dy how leftbot corner moves
12130REM sizx,sizy ec size of orig box:dsizx,dsizy incr in box size
12140IFs%>noof%:ENDPROC
12150IFs%=noof%THEN
12160 s%-=1
12170 SYS"Wimp_SetColour",7
12180 VDU25,4,x%+(dx%*s%);y%+(dy%*s%);:VDU25,101,x%+(dx%*s%)+sizx%+(dsizx%*s%)-2;y%+(dy%*s%)+sizy%+(dsizy%*s%)-2;
12190 SYS"Wimp_SetColour",9
12200 VDU25,4,x%+(dx%*s%)+4;y%+(dy%*s%)+4;:VDU25,101,x%+(dx%*s%)+sizx%+(dsizx%*s%)-6;y%+(dy%*s%)+sizy%+(dsizy%*s%)-6;
12210 SYS"Wimp_SetColour",7
12220 VDU25,4,x%+(dx%*s%)+8;y%+(dy%*s%)+8;:VDU25,101,x%+(dx%*s%)+sizx%+(dsizx%*s%)-10;y%+(dy%*s%)+sizy%+(dsizy%*s%)-10;
12230 s%+=1
12240ENDIF
12250IFs%<noof%THEN
12260 SYS"Wimp_SetColour",9
12270 PROCbox(x%+(dx%*s%),y%+(dy%*s%),sizx%+(dsizx%*s%),sizy%+(dsizy%*s%))
12280ENDIF
12290ENDPROC
12300
12310DEFPROCbox(x%,y%,sx%,sy%)
12320VDU25,4,x%;y%;:VDU25,101,x%+2;y%+sy%-2;
12330VDU25,4,x%;y%+sy%-4;:VDU25,101,x%+sx%-2;y%+sy%-2;
12340VDU25,4,x%+sx%-4;y%+sy%-2;:VDU25,101,x%+sx%-2;y%;
12350VDU25,4,x%+sx%-2;y%+2;:VDU25,101,x%;y%;
12360ENDPROC
12370
12380DEFPROCplotanim(aa%)
12390IFaa%=-1:!blk%=anmew%:ELSE:!blk%=animw%
12400SYS"Wimp_GetWindowState",,blk%
12410spx%=blk%!4-blk%!20+16:spy%=(blk%!16-blk%!24)-76-644
12420blk%!4=0:blk%!8=-720:blk%!12=830:blk%!16=-72
12430SYS "Wimp_UpdateWindow",,blk% TO more%
12440WHILE more%
12450SYS "OS_SpriteOp",&134,animarea%,"anim",spx%,spy%,0,scale%,coltrans%
12460SYS "Wimp_GetRectangle",,blk% TO more%
12470ENDWHILE
12480ENDPROC
12490
12500DEFPROCplotanimmove(le%,lo%,ri%,hi%)
12510!blk%=animw%:SYS"Wimp_GetWindowState",,blk%
12520spx%=blk%!4-blk%!20+16:spy%=(blk%!16-blk%!24)-76-644
12530!blk%=animw%:blk%!4=16+le%:blk%!8=lo%-720:blk%!12=16+ri%:blk%!16=hi%-720
12540SYS "Wimp_UpdateWindow",,blk% TO more%
12550WHILE more%
12560SYS "OS_SpriteOp",&134,animarea%,"anim",spx%,spy%,0,scale%,coltrans%
12570SYS "Wimp_GetRectangle",,blk% TO more%
12580ENDWHILE
12590ENDPROC
12600
12610DEFPROCcopysp(fromsp$,tosp$)
12620IFfromsp$="anim" THEN
12630 fromarea%=animarea%:toarea%=detarea%
12640ELSE
12650 IFLEFT$(fromsp$,2)="bg":fromarea%=bgarea%:toarea%=animarea%:ELSE:fromarea%=detarea%:toarea%=animarea%
12660ENDIF
12670SYS"OS_SpriteOp",&13C,toarea%,tosp$,0
12680SYS"OS_SpriteOp",&122,fromarea%,fromsp$,0,0,0
12690SYS"OS_SpriteOp",&13C,toarea%,0,1
12700ENDPROC
12710
12720DEFPROCinitanmewlabs(m%)
12730LOCAL j%
12740IFm%>0:PROChideicn(anmew%,0,TRUE):ELSE:PROChideicn(anmew%,0,FALSE)
12750CASE m% OF
12760 WHEN 0: FORj%=5TO33:PROChideicn(anmew%,j%,TRUE):NEXT
12770 WHEN 1: FORj%=5TO9:PROChideicn(anmew%,j%,FALSE):PROCselecticn(anmew%,j%,FALSE):NEXT
12780 FORj%=10TO33:PROChideicn(anmew%,j%,TRUE):NEXT
12790 WHEN 2: FORj%=5TO9:PROChideicn(anmew%,j%,TRUE):NEXT
12800 FORj%=10TO15:PROChideicn(anmew%,j%,FALSE):PROCselecticn(anmew%,j%,FALSE):NEXT
12810 FORj%=16TO33:PROChideicn(anmew%,j%,TRUE):NEXT
12820 WHEN 3: FORj%=5TO15:PROChideicn(anmew%,j%,TRUE):NEXT
12830 FORj%=16TO20:PROChideicn(anmew%,j%,FALSE):PROCselecticn(anmew%,j%,FALSE):NEXT
12840 FORj%=21TO33:PROChideicn(anmew%,j%,TRUE):NEXT
12850 WHEN 4: FORj%=5TO20:PROChideicn(anmew%,j%,TRUE):NEXT
12860 FORj%=21TO24:PROChideicn(anmew%,j%,FALSE):PROCselecticn(anmew%,j%,FALSE):NEXT
12870 FORj%=25TO33:PROChideicn(anmew%,j%,TRUE):NEXT
12880 WHEN 5: FORj%=5TO24:PROChideicn(anmew%,j%,TRUE):NEXT
12890 FORj%=25TO33:PROChideicn(anmew%,j%,FALSE):PROCselecticn(anmew%,j%,FALSE):NEXT
12900ENDCASE
12910ENDPROC
12920
12930DEFPROCsetextent(w%,siz%)
12940!blk%=0:blk%!4=-siz%:blk%!8=842:blk%!12=0
12950SYS"Wimp_SetExtent",w%,blk%
12960ENDPROC
12970
12980DEFPROCresizeanmew
12990!blk2%=anmew%:SYS "Wimp_GetWindowState",,blk2%
13000!blk%=anmew%:SYS "Wimp_DeleteWindow",,blk%
13010!((winstarts%!8)+52)=0
13020SYS "Wimp_CreateWindow",,winstarts%!8 TO anmew%
13030ENDPROC
13040
13050DEFPROCclosewind(b%)
13060SYS "Wimp_CloseWindow",,b%
13070ENDPROC
13080
13090DEFPROCopenwind(b%)
13100SYS "Wimp_OpenWindow",,b%
13110ENDPROC
13120
13130DEFPROCclick(mx%,my%,but%,w%,i%)
13140CASE w% OF
13150 WHEN -2:
13160 CASE but% OF
13170 WHEN 2: PROCmaster_menu("Plantwise","Info,Setup...,7Quit,",!eb%,216)
13180 WHEN 4: PROCstartgame:PROCopen_mess1
13190 ENDCASE
13200 WHEN menuw%: PROCmenuwclick(but%,w%,i%)
13210 WHEN anmew%: PROCanmewclick(but%,w%,i%)
13220 WHEN animw%: PROCanimwclick(mx%,my%,but%,i%)
13230 WHEN findw%: PROCfindwclick(mx%,my%,but%,i%)
13240 WHEN defnw%: PROCdefnwclick(mx%,my%,but%,i%)
13250 WHEN wordw%: PROCwordwclick(mx%,my%,but%,i%)
13260 WHEN setupw%: PROCsetupwclick(but%,i%)
13270ENDCASE
13280ENDPROC
13290
13300DEFPROCmenuwclick(b%,w%,i%)
13310LOCAL j%,k%
13320IFb%=2:ENDPROC
13330IFi%=-1:ENDPROC
13340!blk%=demow%:PROCclosewind(blk%)
13350IFi%<6:PROCcheckindex(i%):ENDPROC
13360j%=INT(i%/3)-1
13370FORk%=6TO18STEP3
13380 IFk%=3+(3*j%):PROCselecticn(w%,k%,TRUE):ELSE:PROCselecticn(w%,k%,FALSE)
13390NEXT
13400PROCopen_animw(j%,-1)
13410IFj%=1:PROCopen_mess("Only 'leaf' is available in the Structure section.")
13420IFj%=2:PROCopen_mess("Only 'seed dispersal' is available in the Reproduction section.")
13430IFj%=3:PROCopen_mess("None of the What Plants Need section is available in this demonstration.")
13440IFj%=4:PROCopen_mess("None of the Survival section is available in this demonstration.")
13450IFj%=5:PROCopen_mess("None of the Classification section is available in this demonstration.")
13460ENDPROC
13470
13480DEFPROCcheckindex(i%)
13490IFi%<3THEN
13500 PROCtoggleicnsel(menuw%,0)
13510 IFFNisselected(menuw%,0)THEN
13520 PROCopen_findw:PROCopen_messff
13530 ELSE
13540 !blk%=findw%:PROCclosewinds(blk%)
13550 ENDIF
13560ELSE
13570 PROCtoggleicnsel(menuw%,3)
13580 IFFNisselected(menuw%,3)THEN
13590 PROCopen_wordw:PROCopen_messww
13600 ELSE
13610 !blk%=defnw%:PROCclosewind(blk%):!blk%=wordw%:PROCclosewind(blk%)
13620 ENDIF
13630ENDIF
13640ENDPROC
13650
13660DEFPROCanmewclick(b%,w%,i%)
13670LOCAL j%,k%
13680REMIFb%=2:PROCanmew_menu(mx%,my%):ENDPROC
13690!blk%=demow%:PROCclosewind(blk%)
13700IF(i%=7)OR(i%=12) THEN
13710 PROCkilltext
13720 PROCtoggleicnsel(anmew%,i%)
13730 wlev%=0:PROCopen_animw(actmenu%,wlev%+findaa%(i%-5))
13740ELSE
13750 IF(i%>=5)AND(i%<=9):PROCopen_mess("Only 'leaf' is available in the Structure section.")
13760 IF(i%>=10)AND(i%<=15):PROCopen_mess("Only 'seed dispersal' is available in the Reproduction section.")
13770 IF(i%>=16)AND(i%<=20):PROCopen_mess("None of the What Plants Need section is available in this demonstration.")
13780 IF(i%>=21)AND(i%<=24):PROCopen_mess("None of the Survival section is available in this demonstration.")
13790 IF(i%>=25)AND(i%<=33):PROCopen_mess("None of the Classification section is available in this demonstration.")
13800ENDIF
13810ENDPROC
13820
13830DEFPROCanimwclick(mx%,my%,b%,i%)
13840LOCAL j%,k%
13850REMIFb%=2:PROCanimw_menu(mx%,my%):ENDPROC
13860!blk%=demow%:PROCclosewind(blk%)
13870PROCtoggleicnsel(animw%,i%)
13880CASE i% OF
13890 WHEN 0: PROCkilltext
13900 IFwlev%=0:PROCopen_animw(actmenu%,-1):ELSE:j%=wlev%:wlev%=0:PROCopen_animw(actmenu%,actanim%-j%)
13910 WHEN 1: IFFNisselected(animw%,1)THEN
13920 texton%=-1:textnewon%=-1
13930 IFNOTdoingmove%:PROCmakeanim(actmenu%,actanim%,bg%(actanim%))
13940 PROCaddtext(actanim%)
13950 ELSE
13960 texton%=0:textnewoff%=-1:acttxticn%=0:PROCremovetext(actanim%)
13970 ENDIF
13980 WHEN 2: IFFNisselected(animw%,2)THEN
13990 doingmove%=-1:firstmove%=-1:PROCanimate
14000 ELSE
14010 PROCanimateend:PROCmakeanim(actmenu%,actanim%,bg%(actanim%))
14020 IFtexton%:PROCaddtext(actanim%):ELSE:PROCplotanim(actanim%)
14030 ENDIF
14040 WHEN 3,4: j%=wlev%:PROCkilltext
14050 IFFNisselected(animw%,i%):wlev%=i%-2:PROCselecticn(animw%,7-i%,FALSE):ELSE:wlev%=0
14060 PROCopen_animw(actmenu%,actanim%-j%+wlev%)
14070 WHEN 5,6,7,8: j%=wlev%:PROCkilltext
14080 IFFNisselected(animw%,i%) THEN
14090 wlev%=i%-4:FORk%=5TO8
14100 IFk%<>i%:PROCselecticn(animw%,k%,FALSE)
14110 NEXT
14120 ELSE
14130 wlev%=0
14140 ENDIF
14150 PROCopen_animw(actmenu%,actanim%-j%+wlev%)
14160 WHEN 12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56:
14170 IFacttxticn%>11 PROCselecticn(animw%,acttxticn%,FALSE)
14180 IFacttxticn%=i% acttxticn%=0:ELSE:acttxticn%=i%
14190 PROCaddwords(actanim%)
14200ENDCASE
14210ENDPROC
14220
14230DEFPROCkilltext
14240PROCselecticn(animw%,1,FALSE):texton%=0:textnewon%=0
14250!blk2%=0:blk2%!4=-732:blk2%!8=842:blk2%!12=0:SYS"Wimp_SetExtent",animw%,blk2%
14260ENDPROC
14270
14280DEFPROCfindwclick(mx%,my%,b%,i%)
14290LOCAL j%,am%,aa%
14300IFb%=2:ENDPROC
14310IF(i%<=34)OR((i%>=40)AND(i%<=43))OR((i%>=47)AND(i%<=59))OR(i%>=65):PROCopen_messff:ENDPROC
14320!blk%=demow%:PROCclosewind(blk%)
14330IF(i%>=35)AND(i%<=39):am%=i%-34:aa%=-1:wlev%=0
14340IF(i%>=44)AND(i%<=46):am%=1:aa%=i%-40:wlev%=i%-44
14350IF(i%>=60)AND(i%<=64):am%=2:aa%=i%-40:wlev%=i%-60
14360IF(actmenu%<>am%)OR(actanim%<>aa%):PROCselecticn(findw%,findicn%,FALSE)
14370findicn%=0
14380IF(am%>0)AND(aa%=-1):PROCselecticn(findw%,34+am%,TRUE):findicn%=34+am%
14390IFaa%>=0:PROCselecticn(findw%,40+aa%,TRUE):findicn%=40+aa%
14400!blk%=findw%:PROCclosewind(blk%):PROCselecticn(menuw%,0,FALSE)
14410PROCkilltext:PROCopen_menuw(am%,aa%)
14420ENDPROC
14430
14440DEFPROCwordwclick(mx%,my%,b%,i%)
14450LOCAL j%
14460IFb%=2:ENDPROC
14470!blk%=demow%:PROCclosewind(blk%)
14480IFglossicn%<>i%:PROCtoggleicnsel(wordw%,i%):PROCselecticn(wordw%,glossicn%,FALSE):glossicn%=i%
14490PROCopen_defnw(i%)
14500ENDPROC
14510
14520DEFPROCsetupwclick(b%,i%)
14530LOCAL j%,k%
14540CASE i% OF
14550 WHEN 2,3:IFFNisselected(setupw%,2):simp%=0:ELSE:simp%=1
14560 PROCstartgame
14570ENDCASE
14580ENDPROC
14590
14600DEFPROCinitanimw(aa%)
14610LOCAL j%,k%
14620PROCselecticn(animw%,0,FALSE)
14630FORk%=2TO56:PROChideicn(animw%,k%,TRUE):PROCselecticn(animw%,k%,FALSE):NEXT
14640FORj%=0TO6
14650 IFwdefn%(aa%,j%)>0:PROChideicn(animw%,j%+2,FALSE):ELSE:PROChideicn(animw%,j%+2,TRUE)
14660 IFwdefn%(aa%,j%)=2:PROCselecticn(animw%,j%+2,TRUE):ELSE:PROCselecticn(animw%,j%+2,FALSE)
14670NEXT
14680CASE aa% OF
14690 WHEN 0,1 : PROCputicnstring(animw%,3,"animal cells")
14700 WHEN 2,3 : PROCputicnstring(animw%,3,"flower parts")
14710 WHEN 10,11 : PROCputicnstring(animw%,3,"root close-up")
14720 WHEN 4,5,6 : PROCputicnstring(animw%,3,"photosynthesis"):PROCputicnstring(animw%,4,"leaf close-up")
14730 WHEN 7,8,9 : PROCputicnstring(animw%,3,"non-woody stem"):PROCputicnstring(animw%,4,"woody stem")
14740 WHEN 12,13,14,15,16 : PROCputicnstring(animw%,5,"insects")
14750 WHEN 17,18,19 : PROCputicnstring(animw%,3,"fruits & seeds"):PROCputicnstring(animw%,4,"fruit examples")
14760 WHEN 20,21,22,23,24 : PROCputicnstring(animw%,5,"explode")
14770 WHEN 25,26,27 : PROCputicnstring(animw%,3,"seed structure"):PROCputicnstring(animw%,4,"dormancy")
14780 WHEN 36,37 : PROCputicnstring(animw%,3,"extremes")
14790ENDCASE
14800doingmove%=0:firstmove%=0:acttxticn%=0:doingmove%=0:firstmove%=-1:textnewon%=0
14810ENDPROC
14820
14830DEFPROCevent
14840SYS "Wimp_Poll",0,blk% TO e%,eb%
14850CASE e% OF
14860 WHEN 0: IFdoingmove%:PROCanimate
14870REM IFdoingcloser% PROCcloser
14880REM IFdoingpinpart% PROCmovepinpart
14890REM sizz1%=(!detarea%)-(detarea%!12):IFsizz1%<minsizz1%:minsizz1%=sizz1%
14900REM sizz2%=HIMEM-END:IFsizz2%<minsizz2%:minsizz2%=sizz2%
14910REM sizz3%=END-LOMEM:IFsizz3%<minsizz3%:minsizz3%=sizz3%
14920 WHEN 1: PROCredraw(!eb%)
14930 WHEN 2: PROCopenwind(blk%)
14940 WHEN 3: PROCclosewinds(blk%)
14950 WHEN 6: PROCclick(eb%!0,eb%!4,eb%!8,eb%!12,eb%!16)
14960 WHEN 9: PROCmenuselect
14970 WHEN 17,18: PROCreceive
14980ENDCASE
14990ENDPROC
15000
15010DEFPROCreceive
15020CASE eb%!16 OF
15030 WHEN 0: quit% = TRUE
15040 WHEN 9: PROCmodechange:SYS"Wimp_ForceRedraw",-1,0,0,xmaxec%,ymaxec%
15050 WHEN &400C1: PROCmodechange
15060ENDCASE
15070ENDPROC
15080
15090DEFPROCredraw(w%)
15100CASE w% OF
15110REM WHEN systw%: PROCredrawsystw
15120REM WHEN bodyw%: PROCredrawbodyw
15130 WHEN animw%,anmew%: PROCredrawanimw
15140REM WHEN pinoutlw%: PROCredrawpinoutlw
15150 OTHERWISE : PROCredrawother
15160ENDCASE
15170ENDPROC
15180
15190DEFPROCredrawother
15200SYS "Wimp_RedrawWindow",,blk% TO more%
15210WHILE more%
15220SYS "Wimp_GetRectangle",,blk% TO more%:
15230ENDWHILE
15240ENDPROC
15250
15260DEFPROCredrawanimw
15270SYS "Wimp_RedrawWindow",,blk% TO more%
15280spx%=blk%!4-blk%!20+16:spy%=(blk%!16-blk%!24)-76-644
15290WHILE more%
15300SYS "OS_SpriteOp",&134,animarea%,"anim",spx%,spy%,0,scale%,coltrans%
15310SYS "Wimp_GetRectangle",,blk% TO more%:
15320ENDWHILE
15330ENDPROC
15340
15350DEFPROCaddanmewlines(am%)
15360LOCAL k%
15370SYS"OS_SpriteOp",&13C,animarea%,"anim",0
15380lin$=anmewlines$(am%-1):nolines%=VAL(lin$)
15390lin$=RIGHT$(lin$,LEN(lin$)-3)
15400IFnolines%>0THEN
15410 FORk%=1TOnolines%
15420 SYS"Wimp_SetColour",VAL(lin$)
15430 VDU25,4,VAL(MID$(lin$,4,3));VAL(MID$(lin$,8,3));:VDU25,5,VAL(MID$(lin$,12,3));VAL(MID$(lin$,16,3));
15440 VDU25,4,VAL(MID$(lin$,4,3))+2;VAL(MID$(lin$,8,3));:VDU25,5,VAL(MID$(lin$,12,3))+2;VAL(MID$(lin$,16,3));
15450 lin$=RIGHT$(lin$,LEN(lin$)-19)
15460 NEXT
15470 IFam%=5 THEN
15480 lin$=anmewlines$(5):nolines%=VAL(lin$)
15490 lin$=RIGHT$(lin$,LEN(lin$)-3)
15500 FORk%=1TOnolines%
15510 SYS"Wimp_SetColour",VAL(lin$)
15520 VDU25,4,VAL(MID$(lin$,4,3));VAL(MID$(lin$,8,3));:VDU25,5,VAL(MID$(lin$,12,3));VAL(MID$(lin$,16,3));
15530 VDU25,4,VAL(MID$(lin$,4,3))+2;VAL(MID$(lin$,8,3));:VDU25,5,VAL(MID$(lin$,12,3))+2;VAL(MID$(lin$,16,3));
15540 lin$=RIGHT$(lin$,LEN(lin$)-19)
15550 NEXT
15560 ENDIF
15570ENDIF
15580SYS"OS_SpriteOp",&13C,animarea%,0,1
15590ENDPROC
15600
15610DEFPROCcl_anim(D%)
15620SYS "OS_SpriteOp",&118,animarea%,"anim" TO ,,A%:A%+=A%!32
15630REMSYS "OS_SpriteOp",&128,animarea%,"anim" TO ,,,B%,C%:B%=B%/2
15640FORs%=2TO4:D%=D%OR(D%<<(2^s%)):NEXT
15650CALL animcl%
15660ENDPROC
15670
15680DEFPROCdullanim(D%)
15690SYS "OS_SpriteOp",&118,animarea%,"anim" TO ,,A%:A%+=A%!32
15700CALL animdull%
15710ENDPROC
15720
15730DEFPROCaddtext(aa%)
15740!blk2%=animw%:SYS"Wimp_GetWindowState",,blk2%:windpos%=blk2%!28
15750!blk2%=animw%:PROCclosewind(blk2%)
15760!blk2%=0:blk2%!4=-976:blk2%!8=842:blk2%!12=0:SYS"Wimp_SetExtent",animw%,blk2%
15770PROChideicn(animw%,9,FALSE):PROChideicn(animw%,10,FALSE)
15780IFNOTdoingmove%THEN
15790 CASE aa% OF
15800 WHEN 14:SYS"OS_SpriteOp",&13C,animarea%,"anim",0:SYS"OS_SpriteOp",&122,detarea%,"grfl",94,56,8:SYS"Wimp_SetColour",7:PROCbox(416,188,16,16):SYS"OS_SpriteOp",&13C,animarea%,0,1
15810 WHEN 22:SYS"OS_SpriteOp",&13C,animarea%,"anim",0:SYS"OS_SpriteOp",&122,detarea%,"dsbox",100,116,8:SYS"OS_SpriteOp",&122,detarea%,"ds2",144,168,8:SYS"Wimp_SetColour",7:PROCbox(668,276,16,16):SYS"OS_SpriteOp",&13C,animarea%,0,1
15820 WHEN 23:SYS"OS_SpriteOp",&13C,animarea%,"anim",0:
15830 SYS"OS_SpriteOp",&122,detarea%,"cherry",116,388,8:SYS"OS_SpriteOp",&122,detarea%,"hooks",500,204,8:SYS"Wimp_SetColour",7:PROCbox(216,576,16,16):PROCbox(626,444,16,16)
15840 SYS"OS_SpriteOp",&13C,animarea%,0,1
15850 ENDCASE
15860 PROCaddlines(aa%,0):PROCplotanim(aa%):PROCaddlabels(aa%):PROCaddwords(aa%)
15870ELSE
15880 PROCputicnstring(animw%,9,""):PROCputicnstring(animw%,10,"")
15890ENDIF
15900!blk%=animw%:SYS"Wimp_GetWindowState",,blk%
15910IFblk%!16<976 blk%!16=976:blk%!8=0:ELSE:blk%!8=blk%!16-976
15920blk%!24=0:blk%!28=windpos%
15930PROCopenwind(blk%)
15940ENDPROC
15950
15960DEFPROCaddlines(aa%,fromsaveprint%)
15970SYS"OS_SpriteOp",&13C,animarea%,"anim",0
15980CASE aa% OF
15990 WHEN 10:SYS"Wimp_SetColour",0
16000 OTHERWISE:SYS"Wimp_SetColour",7
16010ENDCASE
16020REMIFNOTfromsaveprint%THEN
16030REM IF((activeicn%=4)AND(activew%=1))OR((activeicn%=17)AND(activew%>0)):SYS"Wimp_SetColour",0
16040REM IF((activeicn%=6)AND(activew%=2))OR((activeicn%=17)AND(activew%=0))OR((activeicn%=19)AND(activew%=0))OR((activeicn%=20)AND(activew%=0))OR((activeicn%=20)AND(activew%=2)):SYS"Wimp_SetColour",11
16050REMENDIF
16060lin$=lines$(simp%):nolines%=VAL(lin$)
16070lin$=RIGHT$(lin$,LEN(lin$)-3)
16080IFnolines%>0THEN
16090 FORk%=1TOnolines%
16100 VDU25,4,VAL(MID$(lin$,1,3));VAL(MID$(lin$,5,3));:VDU25,5,VAL(MID$(lin$,9,3));VAL(MID$(lin$,13,3));
16110 VDU25,4,VAL(MID$(lin$,1,3))+2;VAL(MID$(lin$,5,3));:VDU25,5,VAL(MID$(lin$,9,3))+2;VAL(MID$(lin$,13,3));
16120 lin$=RIGHT$(lin$,LEN(lin$)-16)
16130 NEXT
16140ENDIF
16150CASE aa% OF
16160 WHEN 3: PROCbox(4,272,158,280)
16170 VDU25,4,550;272;:VDU25,101,552;346;
16180 VDU25,4,658;452;:VDU25,101,802;454;
16190 VDU25,4,800;454;:VDU25,101,802;272;
16200 VDU25,4,802;274;:VDU25,101,550;272;
16210 VDU25,4,550;344;:VDU25,5,658;452;
16220 VDU25,4,552;344;:VDU25,5,660;452;
16230 WHEN 26: PROCbox(550,268,256,288)
16240ENDCASE
16250SYS"OS_SpriteOp",&13C,animarea%,0,1
16260ENDPROC
16270
16280DEFPROCaddlabels(aa%)
16290LOCAL k%
16300IFnolabs%(aa%,simp%)>0THEN
16310 FORk%=1TOnolabs%(aa%,simp%)
16320 PROCputicnstring(animw%,VAL(words$(simp%,k%,0)),words$(simp%,k%,1)):PROChideicn(animw%,VAL(words$(simp%,k%,0)),FALSE)
16330 NEXT
16340ENDIF
16350ENDPROC
16360
16370DEFPROCaddwords(aa%)
16380IFacttxticn%=0THEN
16390 titl$=words$(simp%,0,1):IFwords$(simp%,0,2)<>"":titl$+=" ":titl$+=words$(simp%,0,2)
16400 PROCputicnstring(animw%,9,titl$):PROCputicnstring(animw%,10,words$(simp%,0,3))
16410 ENDPROC
16420ENDIF
16430IFnolabs%(aa%,simp%)>0THEN
16440 FORk%=1TOnolabs%(aa%,simp%)
16450 IFVAL(words$(simp%,k%,0))=acttxticn% THEN
16460 titl$=words$(simp%,k%,1)
16470 IF(ASC(titl$)>&60)AND(ASC(titl$)<&7B):LEFT$(titl$,1)=CHR$(ASC(titl$)-&20)
16480 IF(ASC(titl$)>&30)AND(ASC(titl$)<&3A)AND(ASC(MID$(titl$,4,1))>&60)AND(ASC(MID$(titl$,4,1))<&7B):MID$(titl$,4)=CHR$(ASC(MID$(titl$,4,1))-&20)
16490 IF(acttxticn%<>18)OR(aa%<>25):titl$+=" "
16500 titl$+=words$(simp%,k%,2)
16510 PROCputicnstring(animw%,9,titl$):PROCputicnstring(animw%,10,words$(simp%,k%,3))
16520 ENDIF
16530 NEXT
16540ENDIF
16550ENDPROC
16560
16570DEFPROCremovetext(aa%)
16580!blk2%=animw%:SYS"Wimp_GetWindowState",,blk2%:windpos%=blk2%!28
16590!blk2%=animw%:PROCclosewind(blk2%)
16600IFdoingmove%:blk2%!4=-784:ELSE:blk2%!4=-732
16610!blk2%=0:blk2%!8=842:blk2%!12=0:SYS"Wimp_SetExtent",animw%,blk2%
16620IFNOTdoingmove%THEN
16630 PROCremovelabels(aa%)
16640 PROCplotanim(aa%)
16650ENDIF
16660!blk%=animw%:SYS"Wimp_GetWindowState",,blk%
16670IFdoingmove%:blk%!8=blk%!16-784:ELSE:blk%!8=blk%!16-732
16680blk%!28=windpos%
16690PROCopenwind(blk%)
16700ENDPROC
16710
16720DEFPROCremovelabels(aa%)
16730IFnolabs%(aa%,simp%)>0THEN
16740 FORk%=1TOnolabs%(aa%,simp%):PROChideicn(animw%,VAL(words$(simp%,k%,0)),TRUE):PROCselecticn(animw%,VAL(words$(simp%,k%,0)),FALSE):NEXT
16750ENDIF
16760IFNOTdoingmove%:PROCmakeanim(actmenu%,aa%,bg%(aa%))
16770ENDPROC
16780
16790DEFPROCgetwordfile(aa%)
16800LOCAL t%,s%,u%,a$,b$
16810wfile$="<PlantWise$chaindir>.wordfiles.words"+STR$(aa%)
16820X=OPENIN wfile$
16830FORs%=0TO1:FORt%=0TOnolabs%(aa%,s%):FORu%=0TO3
16840INPUT#X, words$(s%,t%,u%)
16850NEXT:NEXT:NEXT
16860IFnostops%(aa%)>0THEN
16870 FORs%=0TO1:FORt%=0TOnostops%(aa%)-1
16880 INPUT#X, animwords$(s%,t%)
16890 NEXT:NEXT
16900ENDIF
16910CASE aa% OF
16920 WHEN 5:FORs%=0TO27
16930 INPUT#X, animsp$(s%)
16940 INPUT#X, a$
16950 INPUT#X, b$
16960 animsp%(s%,0)=VAL(a$):animsp%(s%,1)=VAL(b$)
16970 NEXT
16980ENDCASE
16990CLOSE#X
17000ENDPROC
17010
17020DEFPROCgetnumbfile(aa%)
17030LOCAL t%,s%
17040nfile$="<PlantWise$chaindir>.numbfiles.numbs"+STR$(aa%)
17050X=OPENIN nfile$
17060FORt%=0TO1
17070INPUT#X, lines$(t%)
17080NEXT
17090CLOSE#X
17100ENDPROC
17110
17120DEFPROCfloppy_disk(diskn$,sprpath$)
17130LOCAL g%
17140g%=0
17150REMh%=0:m%=0
17160LOCALERROR
17170ONERRORLOCAL:RESTORE ERROR:error%=1:test%=1:ENDPROC
17180REPEAT
17190 error%=0
17200REMno_h%=0:no_m%=0
17210 IFtest%=1 THEN
17220 PROCdiscmess("Please place the "+diskn$+" disc in drive 0",0)
17230 ENDIF
17240 *ADFS
17250 *MOUNT 0
17260 SYS"OS_GBPB",5,,input_disk_name%
17270 len_d_n%=?input_disk_name%:name$=""
17280 FORdn%=1TOlen_d_n%
17290 IF?(input_disk_name%+dn%)>31:name$=name$+CHR$(?(input_disk_name%+dn%))
17300 NEXT
17310 IFname$<>diskn$:error%=1
17320 test%=1
17330 OSCLI"SET PlantWise$chaindir $.!Plantwise"
17340 SYS "XOS_Find",&40,sprpath$ TO g%
17350REM IFworpath$<>"":SYS "XOS_Find",&40,worpath$ TO h%:ELSE:no_h%=-1
17360REM IFnumpath$<>"":SYS "XOS_Find",&40,numpath$ TO m%:ELSE:no_m%=-1
17370UNTILg%AND(error%=0):CLOSE#g%
17380REMUNTILg%AND(h%ORno_h%)AND(m%ORno_m%)AND(error%=0):CLOSE#g%
17390REMIFNOTno_h%:CLOSE#h%
17400REMIFNOTno_m%:CLOSE#m%
17410RESTORE ERROR
17420ENDPROC
17430
17440DEFPROCanimate
17450IFfirstmove% THEN
17460 IFtexton% THEN
17470 PROCremovelabels(actanim%):PROCmakeanim(actmenu%,actanim%,0):PROCaddtext(actanim%)
17480 ELSE
17490 !blk2%=animw%:PROCclosewind(blk2%)
17500 !blk2%=0:blk2%!4=-784:blk2%!8=842:blk2%!12=0:SYS"Wimp_SetExtent",animw%,blk2%
17510 PROCputicnstring(animw%,9,"")
17520 !blk%=animw%:SYS"Wimp_GetWindowState",,blk%
17530 IFblk%!16<784 blk%!16=784:blk%!8=0:ELSE:blk%!8=blk%!16-784
17540 PROCopenwind(blk%)
17550 ENDIF
17560 PROChideicn(animw%,11,FALSE):PROCselecticn(animw%,11,FALSE)
17570ENDIF
17580IFNOTFNisselected(animw%,11):PROCmoveanim
17590ENDPROC
17600
17610DEFPROCmoveanim
17620newtext%=0
17630IFtextnewon%:newtext%=-1
17640CASE actanim% OF
17650 WHEN 5: PROCmovephoto
17660 WHEN 6: PROCmoveleafcl
17670 WHEN 8: PROCmovestemcl1
17680 WHEN 9: PROCmovestemcl2
17690 WHEN 10: PROCmoveroot
17700 WHEN 11: PROCmoverootcl
17710 WHEN 12: PROCmovepollin
17720 WHEN 13: PROCmovepollins
17730 WHEN 14: PROCmovepollwind
17740 WHEN 15: PROCmovepollanimal
17750 WHEN 16: PROCmovepollwater
17760 WHEN 17: PROCmovefertil
17770 WHEN 18: PROCmovefruit
17780 WHEN 20: PROCmovedisp
17790 WHEN 21: PROCmovedispexp
17800 WHEN 22: PROCmovedispwind
17810 WHEN 23: PROCmovedispani
17820 WHEN 24: PROCmovedispwat
17830 WHEN 25: PROCmovegerm
17840 WHEN 27: PROCmovedorm
17850 WHEN 28: PROCmovecorm
17860 WHEN 29: PROCmoverunner
17870ENDCASE
17880ENDPROC
17890
17900DEFPROCmoveendloop(nost%,st$,le%,lo%,ri%,hi%)
17910SYS"OS_SpriteOp",&13C,animarea%,0,1
17920elaps%=TIME-elaps%
17930IFtexton%THEN
17940 FORj%=1TOnost%
17950 IFsub%=VAL(st$):PROCselecticn(animw%,11,TRUE)
17960 st$=RIGHT$(st$,LEN(st$)-4)
17970 NEXT
17980ENDIF
17990IFnewtext%ORtextnewoff%:PROCplotanim(actanim%):textnewoff%=0:ELSE:PROCplotanimmove(le%,lo%,ri%,hi%)
18000lasttime%=TIME
18010ENDPROC
18020
18030DEFPROCanimateend
18040PROCselecticn(animw%,2,FALSE):doingmove%=FALSE:PROChideicn(animw%,11,TRUE)
18050IFtexton% THEN
18060 acttxticn%=0:PROCaddtext(actanim%)
18070ELSE
18080 !blk2%=animw%:PROCclosewind(blk2%)
18090 !blk2%=0:blk2%!4=-732:blk2%!8=842:blk2%!12=0:SYS"Wimp_SetExtent",animw%,blk2%
18100 !blk%=animw%:SYS"Wimp_GetWindowState",,blk%
18110 PROCopenwind(blk%)
18120ENDIF
18130ENDPROC
18140
18150DEFPROCclosewinds(b%)
18160SYS "Wimp_GetPointerInfo",,blk2%
18170currclosebut%=blk2%!8
18180PROCclosewind(b%)
18190CASE !b% OF
18200 WHEN menuw%:IFFNisopen(anmew%):PROCclosewind(blk%)
18210 IFFNisopen(animw%):PROCclosewind(blk%)
18220 WHEN anmew%,animw%:!blk%=menuw%:PROCclosewind(blk%)
18230 WHEN findw%:PROCselecticn(menuw%,0,FALSE)
18240 WHEN defnw%:PROCselecticn(wordw%,glossicn%,FALSE):glossicn%=-1:IFNOTFNisopen(wordw%):PROCselecticn(menuw%,3,FALSE)
18250 WHEN wordw%:IFNOTFNisopen(defnw%):PROCselecticn(menuw%,3,FALSE)
18260ENDCASE
18270!blk%=demow%:PROCclosewind(blk%)
18280ENDPROC
18290
18300DEFPROCmc_starts
18310animcl%=!mc%
18320animdull%=mc%!&04
18330ENDPROC
18340
18350DEFFNalreadyrunning
18360LOCAL ERROR
18370ONERRORLOCAL:RESTORE ERROR:=0
18380SYS "OS_ReadVarVal","PlantWise$isrunning",blk%,256,0,0 TO ,,a%
18390a$="":FORA%=0TOa%-1:a$+=CHR$(blk%?A%):NEXT
18400RESTORE ERROR
18410IFa$="1":=-1
18420=0
18430
18440
18450DEFPROChideicn(w%,i%,f%)
18460!blk%=w%:blk%!4=i%:blk%!12=1<<23
18470IFf% blk%!8=1<<23:ELSE:blk%!8=0
18480SYS "Wimp_SetIconState",,blk%
18490ENDPROC
18500
18510DEFPROCshadeicn(w%,i%,f%)
18520!blk%=w%:blk%!4=i%:blk%!12=1<<22
18530IFf% blk%!8=1<<22:ELSE:blk%!8=0
18540SYS "Wimp_SetIconState",,blk%
18550ENDPROC
18560
18570DEFPROCkeyevent
18580REM temp to stop anim bug loops hanging machine
18590REMIF(blk%!24)=13:quit%=-1
18600ENDPROC
18610
18620DEFFNreadsysvar(a$)
18630SYS "OS_ReadVarVal",a$,blk%,256,0,0 TO ,,a%:a$="":FORA%=0TOa%-1:a$+=CHR$(blk%?A%):NEXT
18640=a$
18650
18660DEFFNfiletype(a$)
18670SYS "XOS_File",5,a$ TO a%
18680=a%
18690
18700DEFPROCstringtotxtbuff(s$)
18710$(txtbuff%+begtxt%)=s$
18720begtxt%+=LEN(s$):txtbuff%?begtxt%=10:begtxt%+=1
18730ENDPROC
18740
18750
18760DEFPROCstartdrag(w%,i%,n$)
18770proposedfname$=n$
18780!blk%=w%:blk%!4=i%:SYS "Wimp_GetIconState",,blk%
18790PROCwintoscrn(blk%):blk%!8-=4:blk%!12-=4:blk%!16+=4:blk%!20+=4
18800blk%!4=5:blk%!24=0:blk%!28=0:blk%!32=xmaxec%:blk%!36=ymaxec%:SYS "Wimp_DragBox",,blk%
18810ENDPROC
18820
18830
18840DEFPROCdefnwclick(mx%,my%,b%)
18850IFb%=2:PROCdefnw_menu(mx%,my%):ENDPROC
18860ENDPROC
18870
18880
18890DEFPROCtoggleicnsel(w%,i%)
18900IF FNisselected(w%,i%) PROCselecticn(w%,i%,FALSE):ELSE:PROCselecticn(w%,i%,TRUE)
18910ENDPROC
18920
18930
18940DEFPROCsubmenu(m%,i%,h%)
18950m%+=28+((i%-1)*24)
18960m%!4=h%
18970ENDPROC
18980
18990
19000DEFPROCanimw_menu(mx%,my%)
19010!blk%=saanimw%:SYS "Wimp_DeleteWindow",,blk%
19020SYS "Wimp_CreateWindow",,wptrlist%!52 TO saanimw%
19030!blk%=pranimw%:SYS "Wimp_DeleteWindow",,blk%
19040SYS "Wimp_CreateWindow",,wptrlist%!56 TO pranimw%
19050PROCgetprtitle(pranimwtitle%,pranimwtitlesiz%)
19060PROCsetanimsprname:PROCsetanimtxtname
19070IFNOTdoingmove%THEN
19080 IFFNisselected(animw%,0):PROCchangesaprextent(pranimw%,176):PROCchangesaprextent(saanimw%,292):ELSE:PROCchangesaprextent(pranimw%,124):PROCchangesaprextent(saanimw%,240)
19090ELSE
19100 PROCchangesaprextent(saanimw%,176):PROCchangesaprextent(pranimw%,72)
19110ENDIF
19120IFFNisselected(animw%,0):PROCcreate_menu(menu%,"Plantwise","Save,1Print,7Save text,"):ELSE:PROCcreate_menu(menu%,"Plantwise","Save,1Print,78Save text,")
19130PROCsubmenu(menu%,1,saanimw%):PROCsubmenu(menu%,3,edboxw%):PROCsubmenu(menu%,2,pranimw%)
19140SYS "Wimp_CreateMenu",,menu%,mx%-64,my%
19150currmenu%=-3
19160ENDPROC
19170
19180DEFPROCmaster_menu(title$,m$,x%,y%)
19190PROCcreate_menu(menu%,title$,m$)
19200PROCsubmenu(menu%,1,infow%)
19210SYS "Wimp_CreateMenu",,menu%,x%-menu%!16 / 2,y%
19220currmenu%=-1
19230ENDPROC
19240
19250DEFPROCcreate_menu(m%,title$,m$)
19260LOCAL i%,max%
19270$m%=title$
19280m%?12=7:m%?13=2:m%?14=7:m%?15=0:m%!20=40:m%!24=0
19290i%=m%+28:max%=LEN(title$)-2
19300REPEAT
19310 a%=INSTR(m$,",")
19320 i$=LEFT$(m$,a%-1):!i%=0
19330 REPEAT:morecodes%=FALSE
19340 IFLEFT$(i$,1)="0" !i%=(!i%)OR%0001:morecodes%=TRUE
19350 IFLEFT$(i$,1)="1" !i%=(!i%)OR%0010:morecodes%=TRUE
19360 IFLEFT$(i$,1)="2" !i%=(!i%)OR%0100:morecodes%=TRUE
19370 IFLEFT$(i$,1)="3" !i%=(!i%)OR%1000:morecodes%=TRUE
19380 IFLEFT$(i$,1)="7" !i%=(!i%)OR%10000000:morecodes%=TRUE
19390 IFLEFT$(i$,1)="8" i%!8=&07400021:i$=RIGHT$(i$,LEN(i$)-1):ELSE:i%!8=&07000021
19400 IF morecodes% i$=RIGHT$(i$,LEN(i$)-1)
19410 UNTIL NOT morecodes%:$(i%+12)=i$
19420 IF (LEN(i$)+1)>max% max%=LEN(i$)+1
19430 i%!4=-1
19440 m$ = MID$(m$,a%+1)
19450 i% = i% + 24
19460UNTIL m$ = ""
19470m%!16 = max%*16
19480ENDPROC
19490
19500DEFPROCmenuselect
19510SYS "Wimp_GetPointerInfo",,blk2%
19520currmenubut%=blk2%!8
19530CASE currmenu% OF
19540 WHEN -1:
19550 CASE !eb% OF
19560 WHEN 0: PROCcheckadjust
19570 WHEN 1: PROCopen_setupw:PROCcheckadjust
19580 WHEN 2: quit%=TRUE
19590 ENDCASE
19600 WHEN -2:
19610 CASE !eb% OF
19620 WHEN 0: PROCcheckadjust
19630 WHEN 1: PROCcheckadjust
19640 ENDCASE
19650 WHEN -3:
19660 CASE !eb% OF
19670 WHEN 0: PROCcheckadjust
19680 WHEN 1: PROCcheckadjust
19690 WHEN 2: PROCcheckadjust
19700 ENDCASE
19710 WHEN -4,-5:
19720 CASE !eb% OF
19730 WHEN 0: PROCcheckadjust
19740 ENDCASE
19750ENDCASE
19760ENDPROC
19770
19780DEFPROCcheckadjust
19790IFcurrmenubut%=1:SYS "Wimp_CreateMenu",,menu%,100,100
19800ENDPROC
19810
19820DEFFNreadvduvar(a%)
19830!blk%=a%:blk%!4=-1:SYS "OS_ReadVduVariables",blk%,blk%
19840=!blk%
19850
19860DEFPROCstartgame
19870PROCopen_menuw(actmenu%,actanim%)
19880ENDPROC
19890
19900DEFPROCflip(fliptype%,spn$)
19910IFfliptype%=1:SYS "OS_SpriteOp",&121,detarea%,spn$
19920IFfliptype%=2:SYS "OS_SpriteOp",&12F,detarea%,spn$
19930IFfliptype%=3:SYS "OS_SpriteOp",&121,detarea%,spn$:SYS "OS_SpriteOp",&12F,detarea%,spn$
19940ENDPROC
*FX220,27
*FX229,1
(7�minsizz1%=100000:minsizz2%=100000:minsizz3%=100000
2
<�sortmemory
FDș "Wimp_Initialise",200,&4B534154,"Plantwise" � wimpver%,taskh%
P� � �alreadyrunning �
Z! �"Set PlantWise$isrunning 1"
d�
nN �error("Plantwise is already running",0):ș "Wimp_CloseDown",,&4B534154:�
x�
�]� �error(�$+" (Internal error code "+Þ+")"+�0,�):È™ "Wimp_CloseDown",taskh%,&4B534154:�
�'�"LOAD <PlantWise$Dir>.code "+�~mc%
��mc_starts
��sortsprites
�+*Set PlantWise$chaindir <PlantWise$Dir>
�3�loadunsquash(menuarea%,33*1024,"spfiles.menu")
��initiallise
��modechange
��baricon
�7� � �error(�$+" (Internal error code "+Þ+")"+�0,�)
�� �event:� quit%
�(ș "Wimp_CloseDown",taskh%,&4B534154
� �"Set PlantWise$isrunning 0"
*FX229,0
�PRINT QUIT
" *QUIT
,�SYS"OS_Exit",errblk%
6�
@ �STOP
J
T��sortmemory
^!indbase%=&9000:iptr%=indbase%
h'totindsize%=11920:totwinsize%=13520
r0winbase%=indbase%+totindsize%:wptr%=winbase%
|<indstarts%=winbase%+totwinsize%:winstarts%=indstarts%+80
�?mc%=&F400:animarea%=&FC00:menuarea%=&19000:sqbuffer%=&21400
�Adetfile%=&25800:detarea%=&2D000:bgarea%=&4B000:sparea%=&53400
�� blk% 256,errblk% 256
��
�
�(��loadunsquash(area%,areasiz%,file$)
�
� len%
�6�"LOAD <PlantWise$chaindir>."+file$+" "+�~detfile%
�6ș "OS_File",5,"<PlantWise$Dir>."+file$ � ,,,,len%
�G�unsquash(detfile%+20,len%-20,sqbuffer%,17*1024,area%+4,areasiz%-4)
��
�
���sortsprites
!sparea%=6*1024:sparea%!8=16
!È™ "OS_SpriteOp",&109,sparea%
;È™ "OS_SpriteOp",&10A,sparea%,"<PlantWise$Dir>.sprites"
&$!detarea%=120*1024:detarea%!8=16
0"È™ "OS_SpriteOp",&109,detarea%
:%!animarea%=37*1024:animarea%!8=16
D#È™ "OS_SpriteOp",&109,animarea%
N7È™ "OS_SpriteOp",&10F,animarea%,"anim",1,405,161,12
X%!menuarea%=33*1024:menuarea%!8=16
b#È™ "OS_SpriteOp",&109,menuarea%
l!!bgarea%=33*1024:bgarea%!8=16
v!È™ "OS_SpriteOp",&109,bgarea%
�;� scale% 16:!scale%=1:scale%!4=1:scale%!8=1:scale%!12=1
�+� coltrans% 16,sppalet% 128,sysbut$(15)
�� +0
��� &FFFFFF00,&FFFFFF00,&DDDDDD00,&DDDDDD00,&BBBBBB00,&BBBBBB00,&99999900,&99999900,&77777700,&77777700,&55555500,&55555500,&33333300,&33333300,&0,&0
��� &99440000,&99440000,&EEEE00,&EEEE00,&CC0000,&CC0000,&DD00,&DD00,&BBEEEE00,&BBEEEE00,&885500,&885500,&BBFF00,&BBFF00,&FFBB0000,&FFBB0000
�&�k%=0�31:� a%:sppalet%!(4*k%)=a%:�
��addpalet(animarea%,"anim")
��
�
���addpalet(area%,spn$)
�+ș"OS_SpriteOp",&118,area%,spn$ � ,,r2%
�:f%=(r2%+44):t%=sppalet%:�s%=0�31:!f%=!t%:t%+=4:f%+=4:�
��
��initiallise
G� ibname% 20,menu% 1024,blk2% 256,input_disk_name% 12,txtbuff% 1024
2� pdrect% 16,pdrect2% 16,pdtrans% 16,pdplot% 8
*7� ctrans% 256,paltab% 64,SCALE% 16,inb% 20,outb% 20
4T� wdefn%(48,6),anmewlines$(5),anmewtitle$(5),findaa%(28),bg%(48),animwtitle$(48)
>&maxlabs%=11:maxstops%=13:maxsp%=28
H� lines$(1),nolabs%(48,1),words$(1,maxlabs%,3),animsp$(maxsp%-1),animsp%(maxsp%-1,1),nostops%(48),animwords$(1,maxstops%-1)
Rtotgloss%=26
\� gloss$(totgloss%-1,1)
f!� arrays specific to actanim%
p�� photo$(51),carr%(3,1),root%(5,1),st1%(5,1),st2%(5,1),wood%(10,1),fert%(13,1),fru%(3,5,1),gra$(3),disp1%(9,1),disp2%(7,1),disp3%(2,1),se%(7),sland%(7),cbex%(2),lupex%(1),bean%(12,4,1),syc%(13,1),dand%(6),dse%(7,1),do%(15,2),mlxy%(2,1),coc%(4)
zP� pea%(8),sunf%(8),whe%(8),ger$(8),corm%(6,1),bulb%(5,1),run%(4,1),rhi%(5,1)
�I�DIM menuwtitle%(3,1),menutype%(14),menuwords$(13,5),menuroute%(13,4)
�4!inb%=4:inb%!4=5:inb%!8=11:inb%!12=12:inb%!16=-1
��:quit%=�:winctr%=1
�7ș "Wimp_OpenTemplate",,"<PlantWise$Dir>.Templates"
��load_template("menu")
��load_template("animate")
��load_template("animmenu")
��load_template("fastfind")
��load_template("worddefn")
��load_template("whatword")
��load_template("setup")
��load_template("proginfo")
��load_template("demosyst")
�load_template("demo1")
È™ "Wimp_CloseTemplate"
4a$=�converttolower(�readsysvar("PlantWise$Dir"))
$)�a$,"adfs::plantwise")<>0 Y%=0 �Y%=1
.1ș "Wimp_CreateWindow",,winstarts%!0 � menuw%
81ș "Wimp_CreateWindow",,winstarts%!4 � animw%
B1ș "Wimp_CreateWindow",,winstarts%!8 � anmew%
L2ș "Wimp_CreateWindow",,winstarts%!12 � findw%
V2ș "Wimp_CreateWindow",,winstarts%!16 � defnw%
`2ș "Wimp_CreateWindow",,winstarts%!20 � wordw%
j3ș "Wimp_CreateWindow",,winstarts%!24 � setupw%
t2ș "Wimp_CreateWindow",,winstarts%!28 � infow%
~2ș "Wimp_CreateWindow",,winstarts%!32 � demow%
�3ș "Wimp_CreateWindow",,winstarts%!36 � demo1w%
�7ș"Sound_Configure",0,0,0,0,0 � r0%,r1%,r2%,r3%,r4%
�0�r0%=1:ș"Sound_Configure",2,r1%,r2%,r3%,r4%
�8�loadunsquash(detarea%,100*1024,"spfiles.animmenu0")
��fill_arrays
�>actmenu%=0:actanim%=-1:wlev%=0:firsttime%=-1:shrunkanme%=0
�Bdoingmove%=0:firstmove%=0:acttxticn%=0:texton%=0:textnewoff%=0
�q�hideicn(findw%,41,�):�hideicn(findw%,59,�):�hideicn(findw%,77,�):�hideicn(findw%,22,�):�hideicn(findw%,89,�)
��initwordw
�;simp%=0:�selecticn(setupw%,2,�):�selecticn(setupw%,3,�)
�,�makeanim(0,-1,0):�setextent(animw%,732)
��
��initwordw
glossicn%=-1:wide%=260+252
I�(totgloss%�2)=0:high%=(totgloss%/2)*56:�:high%=56*(�(totgloss%/2)+1)
(O!blk%=0:blk%!4=-high%:blk%!8=wide%:blk%!12=0:È™"Wimp_SetExtent",wordw%,blk%
2U�j%=0�totgloss%-1:�puticnstring(wordw%,j%,gloss$(j%,0)):�selecticn(wordw%,j%,�):�
<�
Fglossicn%=-1
PV!blk%=0:blk%!4=-(56*totgloss%):blk%!8=252:blk%!12=0:È™"Wimp_SetExtent",wordw%,blk%
ZU�j%=0�totgloss%-1:�puticnstring(wordw%,j%,gloss$(j%,0)):�selecticn(wordw%,j%,�):�
d
n��fill_arrays
x� j%,k%,l%
�� +0
�P� "Plant cells","","Types of flowers","The parts of a flower","Plant leaves"
�i� "Photosynthesis - making food","The leaf in close-up","Plant stems","Non-woody stems","Woody stems"
�i� "Plant roots","A root in close-up","Pollination","Pollination by insects","Pollination by the wind"
�Q� "Pollination by animals","Pollination by water","Fertilization","Fruits",""
�~� "Seed dispersal","'Exploding' fruits","Seed dispersal by the wind","Seed dispersal by animals","Seed dispersal by water"
�b� "Seed germination","Seed structure","Seed dormancy","Corms and bulbs","Runners and rhizomes"
�� "","","","",""
�� "","","","",""
�� "","","","",""
�� "","","",""
� �j%=0�48:� animwtitle$(j%):�
�� +0
.� 5,5,0,0,4,4,9,11,6,6,4,4,9,9,5,5,4,5,7,7
/� 2,2,6,7,2,2,6,6,6,6,4,4,1,1,10,10,4,4,0,0
-� 1,1,4,4,3,3,5,5,1,1,8,8,6,7,5,5,5,5,3,3
"-� 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,)� 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
6)�j%=0�48:�k%=0�1:� nolabs%(j%,k%):�:�
@� +0
J� 0,0,0,0,0,6,1,0,2,5
T� 1,4,3,9,2,1,1,4,9,0
^� 1,2,2,5,1,13,0,8,8,5
h� 0,0,0,0,0,0,0,0,0,0
r� 0,0,0,0,0,0,0,0,0
|�j%=0�48:� nostops%(j%):�
�� +0
�� 0,0,4,0,8,0,0,7,0,0
�� 4,0,8,3,7,0,4,0,0,0
�� 8,6,1,7,0,3,0,0,0,3
�� 0,0,0,0,0,0,0,0,0,0
�� 0,0,0,0,0,0,0,0,0
��j%=0�48:� bg%(j%):�
�� +0
�X� 0,2,4,7,10,12,17,20,25,28,29,30,31,32,33,34,35,36,38,39,40,41,42,43,44,45,46,47,48
��j%=0�28:� findaa%(j%):�
�� +0
�?� "bracts","A modified leaf below or surrounding a flower."
�-� "bur","A spikey ball containing seeds."
J� "cellulose","A tough fibrous substance that makes plant cell walls."
m� "chlorophyll","The green pigment in plants which can trap the energy from sunlight for photosynthesis."
Q� "chloroplast","A tiny structure in plant cells which contains chlorophyll."
&c� "cotyledon","A modified leaf in a seed, often swollen with stored food for the seed to grow."
0@� "dehiscent","Fruits that throw out their seeds (explode)."
:�� "dicotyledon","Flowering plants with two cotyledons (also called dicot). A typical dicot has broad leaves with branching veins and petals and sepals in multiples of 4 or 5."
DB� "epidermis","An outer layer of cells (eg. of leaf or stem)."
NN� "fruit","The ovary or ovaries of a flowering plant after fertilization."
X8� "glucose","A simple sugar made by photosynthesis."
b*� "leaf veins","Tiny tubes in leaves."
l3� "mesophyll","Loosely packed cells in a leaf."
v3� "midrib","The strong central vein of a leaf."
�Z� "mineral salts","Simple chemicals that plants take from the soil to help them live."
��� "monocotyledon","Flowering plants with one cotyledon (also called monocot). A typical monocot has a fibrous root system, narrow leaves with parallel veins and petals and sepals in multiples of 3."
�W� "palisade cells","The layer of leaf cells which carries out most photosynthesis."
�V� "phloem","A network of tubes throughout the plant which carries food and water."
�E� "photosynthesis","The process by which green plants make food."
�3� "samara","A fruit with wings (eg. Sycamore)."
�9� "seed","The fertilized ovule of a flowering plant."
�G� "starch","Plants store sugars in long chains which makes starch."
�0� "stoma","A tiny hole in the leaf surface."
�&� "stomata","More than one stoma."
�!� "sucrose","A simple sugar."
�V� "xylem","A network of tubes throughout the plant which carries water and salts."
�1�j%=0�totgloss%-1:�k%=0�1:� gloss$(j%,k%):�:�
� +0
� "Plantwise"
)� "The structure of flowering plants"
,� "The reproduction of flowering plants"
*)� "What plants need to live and grow"
4� "How plants survive"
>$� "The classification of plants"
H�j%=0�5:� anmewtitle$(j%):�
R� +0
\V� "04,07,440,640,368,604,07,548,448,494,340,07,424,232,360,248,07,460,092,394,092"
f|� "06,07,262,624,342,532,07,564,640,516,604,07,148,444,124,400,07,138,000,122,108,07,426,128,486,104,07,690,000,654,064"
p� "00,"
z0� "02,07,138,000,148,044,07,576,000,526,088"
�|� "06,07,426,624,462,448,07,462,448,608,392,07,462,448,386,344,07,462,448,484,344,07,080,596,104,492,00,082,376,184,332"
��� "07,07,160,000,136,116,07,160,000,094,096,07,440,000,376,040,07,532,100,586,112,07,514,080,544,048,07,752,152,680,092,07,752,152,788,100"
��j%=0�5:� anmewlines$(j%):�
�� +0
�� STRUCTURE
�� plant cells
�� 0,0,0,0,0,0,0
�� 0,0,0,0,0,0,0
�� flower
�� 0,1,0,0,0,0,0
�� 0,2,0,0,0,0,0
�
� leaf
�� 0,1,1,0,0,0,0
� 1,2,1,0,0,0,0
� 1,1,2,0,0,0,0
� stem
$� 0,1,1,0,0,0,0
.� 1,2,1,0,0,0,0
8� 1,1,2,0,0,0,0
B
� root
L� 1,1,0,0,0,0,0
V� 1,2,0,0,0,0,0
`
j� REPRODUCTION
t� pollination
~� 1,0,0,1,1,1,1
�� 1,0,0,2,1,1,1
�� 1,0,0,1,2,1,1
�� 1,0,0,1,1,2,1
�� 1,0,0,1,1,1,2
�� fertilization
�� 1,1,0,0,0,0,0
�� 1,2,0,0,0,0,0
�� 0,0,0,0,0,0,0
�� seed dispersal
�� 1,0,0,1,1,1,1
�� 1,0,0,2,1,1,1
�� 1,0,0,1,2,1,1
� 1,0,0,1,1,2,1
� 1,0,0,1,1,1,2
� seed germination
� 1,1,1,0,0,0,0
(� 0,2,1,0,0,0,0
2� 1,1,2,0,0,0,0
<� corms & bulbs
F� 1,0,0,0,0,0,0
P� runners and rhizomes
Z� 1,0,0,0,0,0,0
d
n� NEEDS
x� need water
�� 0,0,0,0,0,0,0
�� need light
�� 0,0,0,0,0,0,0
�� need air
�� 0,0,0,0,0,0,0
�� need warmth
�� 0,0,0,0,0,0,0
�� need soil minerals
�� 0,0,0,0,0,0,0
�
�� SURVIVAL
�� daily cycles
�� 0,0,0,0,0,0,0
� seasonal cycles
� 0,0,0,0,0,0,0
� 0,0,0,0,0,0,0
"� protection
,� 0,0,0,0,0,0,0
6� competition
@� 0,0,0,0,0,0,0
J
T� CLASSIFICATION
^� evolution
h� 0,0,0,0,0,0,0
r� flowering plants
|� 0,0,0,0,0,0,0
�� conifers
�� 0,0,0,0,0,0,0
�� ferns
�� 0,0,0,0,0,0,0
�� clubmosses & horsetails
�� 0,0,0,0,0,0,0
�� mosses & liverworts
�� 0,0,0,0,0,0,0
�� fungi
�� 0,0,0,0,0,0,0
�� algae
�� 0,0,0,0,0,0,0
�
� lichens
� 0,0,0,0,0,0,0
(�j%=0�48:�k%=0�6:� wdefn%(j%,k%):�:�
8� data specific to actanim% (usually animation data)
&� +0
0� "02,00,01"
:
� "01,04"
D
� "01,01"
N
� "01,04"
X
� "01,01"
b
� "01,04"
l
� "01,01"
v� stop 6
�*� expand box for 10 so next line is 17
�#� "","","","","","","","","",""
�� "02,05,06"
�
� "01,07"
�
� "01,08"
�
� "01,09"
�
� "01,10"
�
� "01,11"
�
� "01,12"
�
� "01,11"
�
� "01,12"
�
� "01,11"
�
� "01,12"
� "01,11"
� "01,12"
� stop 29
� "03,05,10,13"
*
� "01,14"
4
� "01,13"
>
� "01,14"
H
� "01,13"
R� "02,14,15"
\� "02,13,16"
f� "02,14,17"
p� "02,13,17"
z� "02,14,17"
�� "02,13,17"
�
� stop 40
�� "02,00,03"
�
� "01,18"
�
� "01,19"
�
� "01,20"
�
� stop 44
�
� "01,21"
�
� "01,22"
�
� stop 46
�
� "01,23"
�
� "01,24"
�
� "01,25"
� "01,26"
� "01,27"
�k%=0�51:� photo$(k%):�
$� +0
. � 138,64,122,40,124,20,128,4
8&�j%=0�3:�k%=0�1:� carr%(j%,k%):�:�
B� +0
L1� 214,164,92,56,194,152,214,124,96,12,196,108
V&�j%=0�5:�k%=0�1:� root%(j%,k%):�:�
`� +0
j5� 118,116,220,116,568,116,674,116,598,128,646,128
t%�j%=0�5:�k%=0�1:� st1%(j%,k%):�:�
~� +0
�5� 106,112,234,112,558,112,686,112,590,124,654,124
�%�j%=0�5:�k%=0�1:� st2%(j%,k%):�:�
�� +0
�Z� 232,148,280,192,280,192,280,192,272,180,258,168,244,160,206,150,176,92,148,64,120,36
�'�j%=0�10:�k%=0�1:� wood%(j%,k%):�:�
�� +0
�u� 470,464,456,412,444,364,432,308,426,248,416,196,374,160,314,144,284,144,284,144,284,144,284,144,284,144,284,144
�'�j%=0�13:�k%=0�1:� fert%(j%,k%):�:�
�� +0
�� 54,432,50,500,50,432,36,384,24,352,24,352,582,512,588,512,506,444,418,384,394,348,0,0,134,156,130,168,136,84,134,48,132,28,130,28,680,160,692,180,642,144,570,108,504,80,0,0
�2�j%=0�3:�k%=0�5:�l%=0�1:� fru%(j%,k%,l%):�:�:�
�� +0
+� "4,350,3,700,1,590,4,600,3,520,0,480"
+� "3,430,0,768,2,594,3,680,0,588,1,504"
+� "0,498,1,792,2,594,0,748,1,612,2,508"
+� "3,430,0,768,2,594,3,680,0,588,1,504"
(�j%=0�3:� gra$(j%):�
2� +0
<Q� 216,528,274,632,164,572,44,532,40,552,116,632,268,616,98,616,26,536,206,512
F'�j%=0�9:�k%=0�1:� disp1%(j%,k%):�:�
P� +0
ZE� 574,556,582,520,752,528,516,628,534,620,748,544,690,608,596,508
d'�j%=0�7:�k%=0�1:� disp2%(j%,k%):�:�
n� +0
x� 436,628,456,616,442,612
�'�j%=0�2:�k%=0�1:� disp3%(j%,k%):�:�
�� +0
�� 72,76,36,32,72,96,68,88
��j%=0�7:� sland%(j%):�
�� +0
�� 264,232,240
��j%=0�2:� cbex%(j%):�
�� +0
�
� 460,376
��j%=0�1:� lupex%(j%):�
�� +0
�+� 258,348,198,364,140,324,100,216,82,60
�,� 310,340,372,332,434,248,480,140,536,60
+� 288,328,378,352,532,332,708,284,820,0
*� 240,324,158,336,30,316,-100,0,-100,0
-� 268,304,214,332,162,312,140,244,138,112
"+� 366,356,272,392,158,388,74,340,-100,0
,*� 358,320,264,340,146,304,74,216,32,88
6,� 434,312,406,356,346,340,288,248,254,96
@-� 474,284,466,336,442,352,416,276,404,140
J)� 574,288,662,336,784,348,820,0,820,0
T*� 518,268,562,248,596,196,632,92,820,0
^'� 614,252,734,292,820,0,820,0,820,0
h+� 594,220,648,228,710,192,764,112,820,0
r4�j%=0�12:�k%=0�4:�l%=0�1:� bean%(j%,k%,l%):�:�:�
|� +0
�r� 84,444,126,436,218,396,356,376,490,356,628,324,530,288,418,256,308,232,202,212,80,184,150,156,224,120,318,72
�&�j%=0�13:�k%=0�1:� syc%(j%,k%):�:�
�� +0
� � 538,490,446,338,258,148,80
��j%=0�6:� dand%(j%):�
�� +0
�C� 508,332,462,312,408,284,352,256,300,232,218,184,142,136,62,80
�%�j%=0�7:�k%=0�1:� dse%(j%,k%):�:�
�� +0
�� 0,164,596,1,162,560,1,172,524,1,182,484,1,196,436,2,210,420,3,226,432,3,242,480,3,254,536,3,268,596,3,0,650,4,222,560,4,222,456,4,222,336,4,222,188,5,172,4
�%�j%=0�15:�k%=0�2:� do%(j%,k%):�:�
�� +0
�� 212,4,198,52,170,32
&�j%=0�2:�k%=0�1:� mlxy%(j%,k%):�:�
� +0
� 392,352,300,224,136
&�j%=0�4:� coc%(j%):�
0� +0
:#� 172,172,136,80,68,60,48,40,32
D�j%=0�8:� pea%(j%):�
N� +0
X#� 196,196,152,92,72,56,44,36,28
b�j%=0�8:� sunf%(j%):�
l� +0
v%� 192,188,156,140,112,88,76,72,64
��j%=0�8:� whe%(j%):�
�� +0
�#� "110,pea","332,sun","634,whe"
�#� "070,hyp","348,epi","570,mon"
�#� "060,peb","284,sub","586,whb"
��j%=0�8:� ger$(j%):�
�� +0
�7� 26,180,26,180,46,180,46,180,30,72,148,344,130,344
�&�j%=0�6:�k%=0�1:� corm%(j%,k%):�:�
�� +0
�3� 498,160,498,160,498,160,482,160,438,44,428,44
�&�j%=0�5:�k%=0�1:� bulb%(j%,k%):�:�
�� +0
-� 148,244,234,288,392,212,392,160,372,136
%�j%=0�4:�k%=0�1:� run%(j%,k%):�:�
� +0
0� 362,112,274,112,88,96,0,84,186,184,150,176
*%�j%=0�5:�k%=0�1:� rhi%(j%,k%):�:�
4�
>
H��modechange
R&È™"OS_ReadVduVariables",inb%,outb%
\Nxmaxec%=(((outb%!8)+1)<<(outb%!0))-1:ymaxec%=(((outb%!12)+1)<<(outb%!4))-1
fCÈ™"Wimp_ReadPixTrans",&100,animarea%,"anim",,,,scale%,coltrans%
p�
z
���error(msg$,errno%)
�!!errblk%=99:$(errblk%+4)=msg$
�/ș "Wimp_ReportError",errblk%,0,"Plantwise"
��
�
���discmess(msg$,errno%)
�!!errblk%=99:$(errblk%+4)=msg$
�4ș "Wimp_ReportError",errblk%,%10000,"Plantwise"
��
�
���selecticn(w%,i%,f%)
�F!blk%=w%:blk%!4=i%:blk%!12=(1<<21):�f%=0 blk%!8=0:� blk%!8=blk%!12
� ș "Wimp_SetIconState",,blk%
�
��geticonstate(w%,i%)
$3!blk%=w%:blk%!4=i%:È™ "Wimp_GetIconState",,blk%
.�
8
Bݤisselected(w%,i%)
L�geticonstate(w%,i%)
V =((blk%!24)�(1<<21))=(1<<21)
`
jݤisopen(w%)
t+!blk%=w%:È™ "Wimp_GetWindowState",,blk%
~ =((blk%!32)�(1<<16))=(1<<16)
�
���wintoscrn(b%)
�.!blk2%=!b%:ș "Wimp_GetWindowState",,blk2%
�b%!8+=(blk2%!4)-(blk2%!20)
� b%!12+=(blk2%!16)-(blk2%!24)
�b%!16+=(blk2%!4)-(blk2%!20)
� b%!20+=(blk2%!16)-(blk2%!24)
��
�
�2ݤleaf(f$) I%=�f$:ȕI%>1��f$,I%,1)<>"."I%-=1:�
��f$,I%,1)="."I%+=1
�=�f$,I%)
ݤconverttolower(a$)
� l%,b$,ch%:b$=""
�(a$)>0�
(
�l%=1��a$
2ch%=�(�a$,l%,1))
<!�(ch%>&40)�(ch%<&5B):ch%+=&20
Fb$+=�ch%
P�
Z�
d=b$
n
xݤgeticnstring(w%,i%)
�3!blk%=w%:blk%!4=i%:ș "Wimp_GetIconState",,blk%
�=�readstring(blk%!28)
�
���puticnstring(w%,i%,a$)
�3!blk%=w%:blk%!4=i%:ș "Wimp_GetIconState",,blk%
�$$(blk%!28)=a$:?((blk%!28)+�a$)=0
�3blk%!8=0:blk%!12=0:ș "Wimp_SetIconState",,blk%
��
�
�ݤreadstring(p%)
�8�a$:a$="":ȕ (�(a$)<255)�(?p%>31):a$+=�(?p%):p%+=1:�
�=a$
�
��load_template(winname$)
� j%
Ewinstarts%!((winctr%-1)*4)=wptr%:indstarts%!((winctr%-1)*4)=iptr%
"Tș "Wimp_LoadTemplate",,wptr%,iptr%,indbase%+totindsize%,-1,winname$,0 � ,,iptr%
,D�winname$="animate" animwtitle%=wptr%!72:animwtitlesiz%=wptr%+80
6E�winname$="animmenu" anmewtitle%=wptr%!72:anmewtitlesiz%=wptr%+80
@noicns%=wptr%!84
J�j%=0�(noicns%-1)*32�32
T �checkicons
^�
h%�winname$="whatword":�createwordw
r(wptr%+=88+((wptr%!84)*32):winctr%+=1
|�
�
���createwordw
�� ic%,wo%,ico%,row%,col%
� ic%=0
�
�col%=0�1
� �row%=0�12
�. �(ic%<totgloss%)�((col%<>0)�(row%<>0)) �
�@ �wo%=0�7:wptr%!(88+(32*ic%)+(4*wo%))=wptr%!(88+(4*wo%)):�
� ico%=wptr%+(88+(32*ic%))
�C !ico%=(wptr%!88)+(260*col%):ico%!8=(wptr%!(88+8))+(260*col%)
�> �row%>0:ico%!4=!(ico%-32+4)-56:ico%!12=!(ico%-32+12)-56
�7 ico%!20=iptr%:$iptr%="123455678901234":iptr%+=15
� ico%!28=15
�
ic%+=1
�
&�
0 �j%=32�((totgloss%-1)*32)�32
: �checkicons
D�
Nwptr%!84=totgloss%
X�
b
l��checkicons
v+ icnblk%=wptr%+88+j%:icnf%=(icnblk%!16)
�� � �indirected(icnf%)���sprite(icnf%)��text(icnf%)�(icnblk%!24<>-1) �:秤readstring(icnblk%!24),"b0")<>0 icnf%=icnf%�&FFFF0FFF
�O � ��indirected(icnf%)���sprite(icnf%)��text(icnf%) �:icnf%=icnf%�&FFFF3FFF
�8 � �indirected(icnf%)��sprite(icnf%)���text(icnf%) �
� �winname$="menu"�
�= icnblk%!24=menuarea%:icnf%=(icnf%�&FFFF0FFF)�&00003000
� �
�4 �(winname$="proginfo")�(winname$="fastfind")�
�< icnblk%!24=sparea%:icnf%=(icnf%�&FFFF0FFF)�&00003000
� �
�= icnblk%!24=detarea%:icnf%=(icnf%�&FFFF0FFF)�&00003000
� �
� �
� �
7 � �indirected(icnf%)��sprite(icnf%)��text(icnf%) �
S �(winname$="animmenu")�(winname$="animate"):icnf%=(icnf%�&FFFF0FFF)�&00003000
T �(winname$="fastfind")�(winname$="whatword"):icnf%=(icnf%�&FFFF0FFF)�&00003000
�
*6� IF NOTFNindirected(icnf%)ANDFNsprite(icnf%) THEN
4%� sprn$=FNreadstring(icnblk%+20)
>1� SYS "XWimp_SpriteOp",40,,sprn$ TO ,,,w%,h%
H�� IF(w%ORh%)=0:icnf%=icnf%OR256:$iptr%=sprn$:?(iptr%+(LENsprn$))=0:icnblk%!20=iptr%:icnblk%!24=sparea%:icnblk%!28=LENsprn$:iptr%+=LEN(sprn$)+1
R� ENDIF
\ icnblk%!16=icnf%
f�
p
zݤindirected(f%)
�=((f%�256)=256)
�
�ݤsprite(f%)
�=((f%�2)=2)
�
�ݤtext(f%)
�=((f%�1)=1)
�
�
��baricon
�$ibname%="frame1"
�4!blk%=-1:blk%!4=0:blk%!8=0:blk%!12=84:blk%!16=72
�Gblk%!20=&1000313A:blk%!24=ibname%:blk%!28=sparea%:blk%!32=�$ibname%
�%ș "Wimp_CreateIcon",,blk% � ibh%
�
��makemenusprites(m%)
$#È™ "OS_SpriteOp",&109,menuarea%
.X�unsquash(menufile%(m%,0),menufile%(m%,1),sqbuffer%,17*1024,menuarea%+4,(27*1024)-4)
8�
B
L=��unsquash(inptr%,insiz%,bufptr%,bufsiz%,outptr%,outsiz%)
VC� first call with input size to see how big workspace should be
`8�SYS "Squash_Decompress",%1000,insiz%,0,0,0,0 TO r0%
j+�IFr0%<=bufsiz%:fast%=%100:ELSE:fast%=0
t�someleft%=insiz%
~
� done%=0
�'�r2%=inptr%:r4%=outptr%:r5%=outsiz%
��WHILE someleft%
�_ș "Squash_Decompress",%100,bufptr%,inptr%,insiz%,outptr%,outsiz% � r0%,r1%,r2%,r3%,r4%,r5%
�_�r0%=1:�error("Squash_Decompress ran out of input data",0):ș "Wimp_CloseDown",,&4B534154:�
�a�r0%=2:�error("Squash_Decompress ran out of output space",0):ș "Wimp_CloseDown",,&4B534154:�
�g�PROCerror(STR$~(r0%)+" "+STR$~(r1%)+" "+STR$~(r2%)+" "+STR$~(r3%)+" "+STR$~(r4%)+" "+STR$~(r5%),0)
�
�ENDWHILE
��
�
���open_menuw(am%,aa%)
�� j%
�%�isopen(menuw%):�closewind(blk%)
�am%>0�
�j%=6�18�3
G �am%=((j%/3)-1):�selecticn(menuw%,j%,�):�:�selecticn(menuw%,j%,�)
�
(�
2/!blk%=menuw%:È™ "Wimp_GetWindowState",,blk%
<�firsttime%�
F8 �xmaxec%>1280:blk%!4=�((xmaxec%-1280)/2):�:blk%!4=0
P8 �ymaxec%>1024:blk%!8=�((ymaxec%-1024)/2):�:blk%!8=0
ZC blk%!12=(blk%!4)+352:blk%!16=(blk%!8)+1024:blk%!20=0:blk%!24=0
d�
n!blk%=menuw%:blk%!28=-1
x�openwind(blk%)
��open_animw(am%,aa%)
��
�
���open_findw
�� j%
�'�j%=35�88:�selecticn(findw%,j%,�):�
�findicn%=0
�U�(actmenu%>0)�(actanim%=-1):�selecticn(findw%,34+actmenu%,�):findicn%=34+actmenu%
�F�actanim%>=0:�selecticn(findw%,40+actanim%,�):findicn%=40+actanim%
�/!blk%=findw%:ș "Wimp_GetWindowState",,blk%
�7�xmaxec%>1280:blk%!4=�((xmaxec%-1280)/2):�:blk%!4=0
�5�ymaxec%>960:blk%!8=�((ymaxec%-960)/2):�:blk%!8=0
�Bblk%!12=(blk%!4)+1280:blk%!16=(blk%!8)+960:blk%!20=0:blk%!24=0
blk%!28=-1:�openwind(blk%)
�
"��open_mess(m$)
,�puticnstring(demow%,0,m$)
61!blk2%=anmew%:È™ "Wimp_GetWindowState",,blk2%
@'blk%!4=blk2%!4:blk%!12=(blk%!4)+882
J3�(blk2%!8)<132:blk%!16=132:�:blk%!16=blk2%!8-44
Tblk%!8=(blk%!16)-132
^/!blk%=demow%:blk%!20=0:blk%!24=0:blk%!28=-1
h�openwind(blk%)
r�
|
���open_messff
�o�puticnstring(demow%,0,"Only topics with an orange background are available in this demonstration system.")
�1!blk2%=findw%:ș "Wimp_GetWindowState",,blk2%
�-blk%!4=(blk2%!4)+200:blk%!12=(blk%!4)+882
�5�(blk2%!8)<132:blk%!16=132:�:blk%!16=(blk2%!8)-44
�blk%!8=(blk%!16)-132
�/!blk%=demow%:blk%!20=0:blk%!24=0:blk%!28=-1
��openwind(blk%)
��
�
���open_messww
�L�puticnstring(demow%,0,"This is only a part of the What Word facility.")
�1!blk2%=wordw%:ș "Wimp_GetWindowState",,blk2%
.�blk%!4=(blk2%!4)+200:blk%!12=(blk%!4)+882
5�xmaxec%>882:blk%!4=�((xmaxec%-882)/2):�:blk%!4=0
blk%!12=(blk%!4)+882
&5�(blk2%!8)<132:blk%!16=132:�:blk%!16=(blk2%!8)-44
0blk%!8=(blk%!16)-132
:/!blk%=demow%:blk%!20=0:blk%!24=0:blk%!28=-1
D�openwind(blk%)
N�
X
b��open_mess1
l0!blk%=demo1w%:È™ "Wimp_GetWindowState",,blk%
v7�xmaxec%>1040:blk%!4=�((xmaxec%-1040)/2):�:blk%!4=0
�5�ymaxec%>740:blk%!8=�((ymaxec%-740)/2):�:blk%!8=0
�Bblk%!12=(blk%!4)+1040:blk%!16=(blk%!8)+740:blk%!20=0:blk%!24=0
�blk%!28=-1:�openwind(blk%)
��
�
���open_wordw
�� j%
�/�j%=0�totgloss%-1:�selecticn(wordw%,j%,�):�
�/!blk%=wordw%:ș "Wimp_GetWindowState",,blk%
�9�xmaxec%>wide%:blk%!4=�((xmaxec%-wide%)/2):�:blk%!4=0
�9�ymaxec%>high%:blk%!8=�((ymaxec%-high%)/2):�:blk%!8=0
�Eblk%!12=(blk%!4)+wide%:blk%!16=(blk%!8)+high%:blk%!20=0:blk%!24=0
�blk%!28=-1:�openwind(blk%)
�
��open_defnw(i%)
� j%
*M�puticnstring(defnw%,0,gloss$(i%,0)):�puticnstring(defnw%,1,gloss$(i%,1))
4笤isopen(defnw%)�
>0 !blk%=defnw%:È™ "Wimp_GetWindowState",,blk%
H6 �xmaxec%>842:blk%!4=�((xmaxec%-842)/2):�:blk%!4=0
R6 �ymaxec%>244:blk%!8=�((ymaxec%-244)/2):�:blk%!8=0
\B blk%!12=(blk%!4)+842:blk%!16=(blk%!8)+244:blk%!20=0:blk%!24=0
f blk%!28=-1:�openwind(blk%)
p�
z�
�
���open_animw(am%,aa%)
�� j%,detsiz%,k%
��firsttime%�
� firsttime%=0
�. !blk%=anmew%:ș "Wimp_DeleteWindow",,blk%
� !((winstarts%!8)+52)=-56
�2 ș "Wimp_CreateWindow",,winstarts%!8 � anmew%
� �initanmewlabs(0)
�D !anmewtitlesiz%=�(anmewtitle$(0))+1:$anmewtitle%=anmewtitle$(0)
�0 !blk%=anmew%:ș "Wimp_GetWindowState",,blk%
�> �xmaxec%>1280:blk%!4=�((xmaxec%-1280)/2)+396:�:blk%!4=396
�8 �ymaxec%>1024:blk%!8=�((ymaxec%-1024)/2):�:blk%!8=0
C blk%!12=(blk%!4)+842:blk%!16=(blk%!8)+1024:blk%!20=0:blk%!24=0
blk%!28=-1:�openwind(blk%)
actmenu%=am%:actanim%=aa%
$ �
.�
8%�isopen(animw%):�closewind(blk%)
B%�isopen(anmew%):�closewind(blk%)
L
�am%<>0 �
V �shrunkanme%�
`? �am%>0:�resizeanmew:�setextent(anmew%,800):shrunkanme%=-1
j �
t�
~�aa%=-1�
� �initanmewlabs(am%)
�H !anmewtitlesiz%=�(anmewtitle$(am%))+1:$anmewtitle%=anmewtitle$(am%)
�, *Set PlantWise$chaindir <PlantWise$Dir>
�V �Y%=0:test%=0:�:�floppy_disk("Plantwise","$.!Plantwise.spfiles.anim20"):�error%=0
�` �(actmenu%<>am%)�(actanim%<>aa%):�loadunsquash(detarea%,100*1024,"spfiles.animmenu"+�(am%))
�4 �makeanim(am%,aa%,0):�am%>0:�addanmewlines(am%)
��
� �initanimw(aa%)
�H !animwtitlesiz%=�(animwtitle$(aa%))+1:$animwtitle%=animwtitle$(aa%)
� �actanim%<>aa%�
�- *Set PlantWise$chaindir <PlantWise$Dir>
�W �Y%=0:test%=0:�:�floppy_disk("Plantwise","$.!Plantwise.spfiles.anim20"):�error%=0
�bg%(aa%)�
F !detarea%=120*1024:detarea%!8=16:È™ "OS_SpriteOp",&109,detarea%
B !bgarea%=33*1024:bgarea%!8=16:È™ "OS_SpriteOp",&109,bgarea%
I �getbg(aa%):�loadunsquash(detarea%,120*1024,"spfiles.anim"+�(aa%))
( �specialbg(aa%)
2 �
<F !detarea%=153*1024:detarea%!8=16:È™ "OS_SpriteOp",&109,detarea%
F= �loadunsquash(detarea%,153*1024,"spfiles.anim"+�(aa%))
P �
Z) �getwordfile(aa%):�getnumbfile(aa%)
d �
n �makeanim(am%,aa%,bg%(aa%))
xP �texton%:�removetext(aa%):acttxticn%=0:�selecticn(animw%,1,�):�addtext(aa%)
��
�,�actanim%=-1:!blk%=anmew%:�:!blk%=animw%
��(actmenu%=0)�(am%<>0) �
�" �j%=4�20�4:blk%!j%=blk2%!j%:�
� blk%!24=(blk2%!24)+56
�K �((blk2%!32)�&40000)=&40000:blk%!12=(blk%!4)+842:blk%!8=(blk%!16)-1024
��
�# ș "Wimp_GetWindowState",,blk%
�J �((blk%!32)�&40000)=&40000:blk%!12=(blk%!4)+842:blk%!8=(blk%!16)-1024
��
�'�aa%=-1:!blk%=anmew%:�:!blk%=animw%
�blk%!28=-1:�openwind(blk%)
�actmenu%=am%:actanim%=aa%
�
��specialbg(aa%)
"Ȏ aa% �
,` � 14: ș"OS_SpriteOp",&13C,bgarea%,"bg7",0:SCALE%!0=12:SCALE%!4=12:SCALE%!8=16:SCALE%!12=16
6o �j%=0�7:ș"OS_SpriteOp",&134,detarea%,"gr"+�(j%�3),420+(j%*50),0,&08,SCALE%,0:�flip(2,"gr"+�(j%�3)):�
@u �flip(2,"gr0"):�flip(2,"gr1"):SCALE%!0=1:SCALE%!4=1:SCALE%!8=1:SCALE%!12=1:ș"OS_SpriteOp",&13C,bgarea%,0,1
J. � 16:ș"OS_SpriteOp",&13C,bgarea%,"bg4",0
TX � j%=0�3:ș"OS_SpriteOp",&122,detarea%,"bg",0+(408*(j%�2)),0+(336*�(j%/2)),8:�
^* È™"OS_SpriteOp",&13C,bgarea%,0,1
h�
r�
|
���open_setupw
�� j%
�!blk%=setupw%
�7�xmaxec%>1104:blk%!4=�((xmaxec%-1104)/2):�:blk%!4=0
�5�ymaxec%>156:blk%!8=�((ymaxec%-156)/2):�:blk%!8=0
�.blk%!12=(blk%!4)+1104:blk%!16=(blk%!8)+156
�"blk%!20=0:blk%!24=0:blk%!28=-1
��openwind(blk%)
��
�
���getbg(aa%)
�Ȏ aa% �
�, � 10:�makebg(aa%,4,-1,332,-1,364,11,13)
* � 12:�makebg(aa%,8,-1,124,0,122,1,13)
( � 14,23:�makebg(aa%,7,-1,0,0,0,0,0)
' � 20:�makebg(aa%,8,0,80,0,78,1,13)
&G � 22:�loadunsquash(detarea%,120*1024,"spfiles.bgs.bg"+�(bg%(aa%)))
0t ș "OS_SpriteOp",&109,bgarea%:ș "OS_SpriteOp",&10F,bgarea%,"bg1",1,405,161,12:�addpalet(bgarea%,"bg1")
:1 È™"OS_SpriteOp",&13C,bgarea%,"bg1",0
D1 �18,0,15:�25,4,0;0;:�25,101,810;644;
N; È™ "OS_SpriteOp",&122,detarea%,"horiz",0,360,8
X3 �18,0,10:�25,4,0;200;:�25,101,810;360;
bQ �23,12,11,10,10,11,11,10,10,11:�18,16,0:�25,4,0;80;:�25,101,810;200;
lO �23,12,11,13,13,11,11,13,13,11:�18,16,0:�25,4,0;0;:�25,101,810;80;
v0 �18,0,7:�25,4,0;80;:�25,101,810;80;
�j ș "OS_SpriteOp",&122,detarea%,"cow",186,220,8:ș "OS_SpriteOp",&122,detarea%,"fence",0,220,8
�l ș "OS_SpriteOp",&122,detarea%,"verge",0,184,8:ș "OS_SpriteOp",&122,detarea%,"verge",404,184,8
�- ș"OS_SpriteOp",&13C,bgarea%,0,1
�� ș "OS_SpriteOp",&119,detarea%,"horiz":ș "OS_SpriteOp",&119,detarea%,"cow":ș "OS_SpriteOp",&119,detarea%,"fence":ș "OS_SpriteOp",&119,detarea%,"verge"
�* � 25:�makebg(aa%,3,0,240,0,298,11,13)
�, � 29:�makebg(aa%,3,-1,188,-1,208,11,13)
�! :�makebg(aa%,0,0,0,0,0,0,0)
��
��
�
�:��makebg(aa%,bgno%,flip%,up%,line%,ecfup%,ecf1%,ecf2%)
�?�loadunsquash(bgarea%,33*1024,"spfiles.bgs.bg"+�(bg%(aa%)))
��bgno%>0 �
!7 �flip%:ș "OS_SpriteOp",&12F,bgarea%,"bg"+�(bgno%)
!, È™"OS_SpriteOp",&13C,animarea%,"anim",0
!5 ș"OS_SpriteOp",&122,bgarea%,"bg"+�(bgno%),0,0,0
! ' È™"OS_SpriteOp",&13C,animarea%,0,1
!*1 ș"OS_SpriteOp",&13C,bgarea%,"bg"+�(bgno%),0
!42 È™"OS_SpriteOp",&122,animarea%,"anim",0,up%,0
!>m �ecfup%>0:�23,12,ecf1%,ecf2%,ecf2%,ecf1%,ecf1%,ecf2%,ecf2%,ecf1%:�18,16,0:�25,4,0;0;:�25,101,810;ecfup%;
!HF �line%:ș"Wimp_SetColour",7:�25,4,0;ecfup%;:�25,101,810;ecfup%+2;
!R% È™"OS_SpriteOp",&13C,bgarea%,0,1
!\�
!f�
!p
!z��makeanim(am%,aa%,bg%)
!��aa%=-1�
!�! �copysp("men"+�(am%),"anim")
!��
!� �bg%��texton% �
!�! �copysp("bg"+�(bg%),"anim")
!� �
!� �cl_anim(15)
!� Ȏ aa% �
!�$ � 10,16:�copysp("bg4","anim")
!�k � 18:�texton% �:ș"OS_SpriteOp",&13C,animarea%,"anim",0:�fruitbg:ș"OS_SpriteOp",&13C,animarea%,0,1
!� �
!� �
!�, ș"OS_SpriteOp",&13C,animarea%,"anim",0
"
Ȏ aa% �
" � 4: �makeleaf
" � 5: �makephoto
"$ � 6: �makeleafcl
".& � 20: se%()=0:�makedisp(0,se%())
"8 � 21: �makedispexp(0,0)
"B% � 22: �makedispwind(0,0,0,-1,0)
"L$ � 23: �makedispani(0,-1,0,0,0)
"V � 24: �makedispwat
"` �
"j' È™"OS_SpriteOp",&13C,animarea%,0,1
"t�
"~�
"�
"���makeleaf
"��ș"OS_SpriteOp",&122,detarea%,"hww",16,0,8:ș"OS_SpriteOp",&122,detarea%,"ss",276,0,8:ș"OS_SpriteOp",&122,detarea%,"sw",590,0,8
"��
"�
"���makephoto
"�.ș"OS_SpriteOp",&122,detarea%,"phbg",0,0,8
"�^ș"OS_SpriteOp",&122,detarea%,"ar30",0,88,8:ș"OS_SpriteOp",&122,detarea%,"ar20",180,316,8
"�9�simp%=1:ș"OS_SpriteOp",&122,detarea%,"equn",0,492,8
"��
"�
"���makeleafcl
# 0È™"OS_SpriteOp",&122,detarea%,"lecl",58,52,8
#
�
#
#
#(��makedisp(s%,se%())
#2� j%,k%
#<�ș"OS_SpriteOp",&122,detarea%,"tree",336-(8*s%),536,8:ș"OS_SpriteOp",&122,detarea%,"tree",470+(16*s%),448,8:�flip(2,"tree"):ș"OS_SpriteOp",&122,detarea%,"tree",-16*s%,448,8:�flip(2,"tree")
#FL�texton%:�23,12,1,13,13,1,1,13,13,1:�18,16,0:�25,4,0;0;:�25,101,810;160;
#P�j%=0�9
#Z �j%>=6�
#d[ �se%(j%-6)=0:ș"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-(16*s%),disp1%(j%,1),8
#nY �se%(j%-6)=1:ș"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-16,disp1%(j%,1)-52,8
#xZ �se%(j%-6)=2:ș"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-16,disp1%(j%,1)-156,8
#�Z �se%(j%-6)=3:ș"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-16,disp1%(j%,1)-312,8
#�c �se%(j%-6)>=4:ș"OS_SpriteOp",&122,detarea%,"seed2"+�(j%-5),disp1%(j%,0)-16-20,sland%(j%-6),8
#� �
#�N ș"OS_SpriteOp",&122,detarea%,"seed",disp1%(j%,0)-(16*s%),disp1%(j%,1),8
#� �
#��
#�$�j%=1�4:�flip(2,"seed2"+�(j%)):�
#��j%=0�7
#� �j%>=5�
#�[ �se%(j%-1)=0:ș"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+(16*s%),disp2%(j%,1),8
#�Y �se%(j%-1)=1:ș"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+16,disp2%(j%,1)-52,8
#�Z �se%(j%-1)=2:ș"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+16,disp2%(j%,1)-156,8
#�Z �se%(j%-1)=3:ș"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+16,disp2%(j%,1)-312,8
$c �se%(j%-1)>=4:ș"OS_SpriteOp",&122,detarea%,"seed2"+�(j%-4),disp2%(j%,0)+16-20,sland%(j%-1),8
$ �
$N È™"OS_SpriteOp",&122,detarea%,"seed",disp2%(j%,0)+(16*s%),disp2%(j%,1),8
$" �
$,�
$6�j%=0�2
$@ �j%=2�
$JW �se%(7)=0:ș"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-(8*s%),disp3%(j%,1),8
$TU �se%(7)=1:ș"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-8,disp3%(j%,1)-52,8
$^V �se%(7)=2:ș"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-8,disp3%(j%,1)-156,8
$hV �se%(7)=3:ș"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-8,disp3%(j%,1)-312,8
$rU �se%(7)>=4:ș"OS_SpriteOp",&122,detarea%,"seed24",disp3%(j%,0)-8-20,sland%(7),8
$| �
$�M ș"OS_SpriteOp",&122,detarea%,"seed",disp3%(j%,0)-(8*s%),disp3%(j%,1),8
$� �
$��
$�$�j%=1�4:�flip(2,"seed2"+�(j%)):�
$�cș"OS_SpriteOp",&122,detarea%,"seed21",520,24,8:ș"OS_SpriteOp",&122,detarea%,"seed22",352,44,8
$��
$�
$���makedispexp(cb%,lup%)
$�Xș"OS_SpriteOp",&122,detarea%,"cb",4,0,8:ș"OS_SpriteOp",&122,detarea%,"lup",446,0,8
$�ș"OS_SpriteOp",&122,detarea%,"cbex"+�(cb%),cbex%(cb%),140,8:ș"OS_SpriteOp",&122,detarea%,"lupex"+�(lup%),lupex%(lup%),168,8
$��
$�
$�+��makedispwind(fru%,dan%,dax%,ds%,ds2%)
%�texton% �
%I �23,12,11,10,10,11,11,10,10,11:�18,16,0:�25,4,0;80;:�25,101,810;200;
%G �23,12,11,13,13,11,11,13,13,11:�18,16,0:�25,4,0;0;:�25,101,810;80;
%&( �18,0,7:�25,4,0;80;:�25,101,810;80;
%0�
%:�ș"OS_SpriteOp",&122,detarea%,"leaf",0,344,8:ș"OS_SpriteOp",&122,detarea%,"fru",0,468,8:ș"OS_SpriteOp",&122,detarea%,"dan",464,80,8
%D
�dan%>=0�
%N} �dan%<=6:ș"OS_SpriteOp",&122,detarea%,"dan"+�(dan%),dand%(dan%),292,8:�:ș"OS_SpriteOp",&122,detarea%,"dan6",dax%,292,8
%X�
%b
�fru%>=0�
%l� �fru%<=4:ș"OS_SpriteOp",&122,detarea%,"fru"+�(fru%),syc%(fru%,0),syc%(fru%,1),8:�:ș"OS_SpriteOp",&122,detarea%,"fru"+�(((fru%-5)�4)+1),syc%(fru%,0),syc%(fru%,1),8
%v�
%��ds%>=0�
%�9 SCALE%!0=ds%+1:SCALE%!4=ds%+1:SCALE%!8=8:SCALE%!12=8
%�L ș"OS_SpriteOp",&134,detarea%,"ds",dse%(ds%,0),dse%(ds%,1),&08,SCALE%,0
%�1 SCALE%!0=1:SCALE%!4=1:SCALE%!8=1:SCALE%!12=1
%��
%�5�ds2%:ș"OS_SpriteOp",&122,detarea%,"ds2",32,80,8
%��
%�
%�*��makedispani(dov%,mou%,mox%,ml%,bur%)
%ڈș"OS_SpriteOp",&122,detarea%,"bsw",0,0,8:ș"OS_SpriteOp",&122,detarea%,"burd",452,0,8:ș"OS_SpriteOp",&122,detarea%,"berry",0,544,8
%��mou%>=0 �
%�; ș"OS_SpriteOp",&122,detarea%,"mrun"+�(mou%),mox%,12,8
%�L �bur%=1:ș"OS_SpriteOp",&122,detarea%,"bur",mox%+156+(14*(mou%�2)),88,8
&8 �bur%=2:ș"OS_SpriteOp",&122,detarea%,"bur",214,4,8
&Z �mou%=2:ș"OS_SpriteOp",&122,detarea%,"ml"+�(ml%),mox%+mlxy%(ml%,0),12+mlxy%(ml%,1),8
&�
& _È™"OS_SpriteOp",&122,detarea%,"bswl",328,12,8:È™"OS_SpriteOp",&122,detarea%,"burdl",664,0,8
&*Pș"OS_SpriteOp",&122,detarea%,"dov"+�(do%(dov%,0)),do%(dov%,1),do%(dov%,2),8
&4�
&>
&H��makedispwat
&RC�23,12,15,0,0,15,15,0,0,15:�18,16,0:�25,4,0;0;:�25,101,810;644;
&\�ș"OS_SpriteOp",&122,detarea%,"land",0,0,8:ș"OS_SpriteOp",&122,detarea%,"palm",40,68,8:ș"OS_SpriteOp",&122,detarea%,"coc0",266,392,8
&f�
&p
&z
&���checkanimtext(noof%,lin$)
&�(� j%,k%,stops%():� stops%(maxstops%)
&�Gstops%(0)=-1:�j%=1�noof%:stops%(j%)=�(lin$):lin$=�lin$,�(lin$)-4):�
&��textnewon%�
&� �puticnstring(animw%,9,"")
&� �j%=1�noof%
&�` �(sub%>=stops%(j%-1)+1)�(sub%<=stops%(j%)):�puticnstring(animw%,10,animwords$(simp%,j%-1))
&� �
&��
&�textnewon%=0
&��j%=1�noof%
&�f �sub%=stops%(j%-1)+1:�puticnstring(animw%,10,animwords$(simp%,j%-1)):�puticnstring(animw%,9,""):�
&��
'�
'
'��movephoto
'$� lin$,noa%,k%
'.�firstmove%�
'8 sub%=0:firstmove%=�:elaps%=0
'B�
'LX�(sub%<=7)�((sub%>=23)�(sub%<=35))�((sub%>=39)�(sub%<=41))�:�<lasttime%+60-elaps%:�
'V3�(sub%>=8)�(sub%<=17)�:�<lasttime%+20-elaps%:�
'`g�((sub%>=18)�(sub%<=22))�((sub%>=36)�(sub%<=38))�((sub%>=42)�(sub%<=52))�:�<lasttime%+120-elaps%:�
'j�
'telaps%=�
'~8�texton%:�checkanimtext(6,"006,029,040,044,046,051")
'�
�sub%<52�
'�, ș"OS_SpriteOp",&13C,animarea%,"anim",0
'� �(sub%>=7)�(sub%<=17)�
'�\ ș"OS_SpriteOp",&122,detarea%,"phbg",0,0,8:ș"OS_SpriteOp",&122,detarea%,"ar30",0,88,8
'�4 �boxexp(sub%-7,10,188,292,-20,-16,40,32,40,32)
'� �
'� �(sub%<=6)�(sub%>=17)�
'�$ lin$=photo$(sub%):noa%=�(lin$)
'� lin$=�lin$,�(lin$)-3)
'� �k%=1�noa%
'�] ș"OS_SpriteOp",&122,detarea%,animsp$(�(lin$)),animsp%(�(lin$),0),animsp%(�(lin$),1),8
'� lin$=�lin$,�(lin$)-3)
( �
(
�
(; �moveendloop(6,"006,029,040,044,046,051",0,32,604,484)
(�
((sub%+=1
(2W�sub%=53:�makeanim(actmenu%,actanim%,bg%(actanim%)):�animateend:�plotanim(actanim%)
(<�
(F
(P��moveleafcl
(Z� lin$,noa%,k%
(d�firstmove%�
(n sub%=0:firstmove%=�:elaps%=0
(x�
(�'�sub%=1 �:�<lasttime%+120-elaps%:�
(�2�(sub%>=2)�(sub%<=9)�:�<lasttime%+20-elaps%:�
(�(�sub%>=10 �:�<lasttime%+80-elaps%:�
(��
(�elaps%=�
(�$�texton%:�checkanimtext(1,"015")
(�
�sub%<16�
(� �sub%<=9:�cl_anim(15)
(�, ș"OS_SpriteOp",&13C,animarea%,"anim",0
(�: �sub%<=9:ș"OS_SpriteOp",&122,detarea%,"lecl",58,52,8
(�/ �boxexp(sub%,9,550,128,-20,-4,80,64,40,32)
(� Ȏ sub% �
(�; � 9,15:ș"OS_SpriteOp",&122,detarea%,"st00",402,108,8
)< � 10,14:ș"OS_SpriteOp",&122,detarea%,"st01",442,144,8
)< � 11,13:ș"OS_SpriteOp",&122,detarea%,"st02",442,144,8
)9 � 12:ș"OS_SpriteOp",&122,detarea%,"st03",442,144,8
)" �
),) �moveendloop(1,"015",390,96,792,420)
)6�
)@sub%+=1
)JW�sub%=17:�makeanim(actmenu%,actanim%,bg%(actanim%)):�animateend:�plotanim(actanim%)
)T�
)^
)h��movedisp
)r�firstmove%�
)|) sub%=0:firstmove%=�:elaps%=0:se%()=0
)��
)� �<lasttime%+30-elaps%:�
)��
)�elaps%=�
)�$�texton%:�checkanimtext(1,"023")
)�
�sub%<24�
)�4 �texton% �:�cl_anim(15):�:�copysp("bg8","anim")
)�, ș"OS_SpriteOp",&13C,animarea%,"anim",0
)� �sub%>=5:se%(0)+=1
)� �sub%>=6:se%(1)+=1
)� �sub%>=8:se%(2)+=1
)� �sub%>=9:se%(3)+=1
)� �sub%>=10:se%(4)+=1
* �sub%>=13:se%(5)+=1
* �sub%>=15:se%(6)+=1
* �sub%>=18:se%(7)+=1
*&E �((sub%+1)�4)=3:�makedisp(1,se%()):�:�makedisp((sub%+1)�4,se%())
*0& �moveendloop(1,"023",0,0,810,644)
*:�
*Dsub%+=1
*NW�sub%=25:�makeanim(actmenu%,actanim%,bg%(actanim%)):�animateend:�plotanim(actanim%)
*X�
*b
*l��movedispexp
*v� j%,cb%,lup%
*��firstmove%�
*�! sub%=0:firstmove%=�:elaps%=0
*��
*� �(sub%=8)�(sub%=15) �
*� �<lasttime%+100-elaps%:�
*� �
*� �<lasttime%+30-elaps%:�
*� �
*��
*�elaps%=�
*�(�texton%:�checkanimtext(2,"007,014")
*�
�sub%<15�
*�4 �texton% �:�cl_anim(15):�:�copysp("bg6","anim")
+, È™"OS_SpriteOp",&13C,animarea%,"anim",0
+ �sub%=0:cb%=0
+ �sub%=1:cb%=1
+ �sub%>=2:cb%=2
+* �sub%<=8:lup%=0:�:lup%=1
+4 �makedispexp(cb%,lup%)
+>| �(sub%>=2)�(sub%<=6) �:�j%=0�4:ș"OS_SpriteOp",&122,detarea%,"bean"+�(�(3)-1),bean%(j%,sub%-2,0),bean%(j%,sub%-2,1),8:�
+H~ �(sub%>=9)�(sub%<=13) �:�j%=5�12:ș"OS_SpriteOp",&122,detarea%,"bean"+�(�(3)-1),bean%(j%,sub%-9,0),bean%(j%,sub%-9,1),8:�
+R+ �moveendloop(2,"004,011",0,60,810,440)
+\�
+fsub%+=1
+pW�sub%=16:�makeanim(actmenu%,actanim%,bg%(actanim%)):�animateend:�plotanim(actanim%)
+z�
+�
+���movedispwind
+�� fru%,dan%,dax%,ds%,ds2%
+��firstmove%�
+�! sub%=0:firstmove%=�:elaps%=0
+��
+� �(sub%=13)�(sub%=31) �
+� �<lasttime%+180-elaps%:�
+� �
+� �<lasttime%+30-elaps%:�
+� �
+��
+�elaps%=�
,(�texton%:�checkanimtext(2,"012,030")
,
�sub%<31�
,4 �texton% �:�cl_anim(15):�:�copysp("bg1","anim")
,$, È™"OS_SpriteOp",&13C,animarea%,"anim",0
,.$ �sub%<=12:fru%=sub%+1:�:fru%=-1
,8$ �sub%>=14:dan%=sub%-14:�:dan%=0
,B. �sub%>=21:dax%=20-((sub%-21)*60):�:dax%=0
,L0 �(sub%>=17)�(sub%<=24):ds%=sub%-17:�:ds%=-1
,V �sub%>=25:ds2%=-1:�:ds2%=0
,`+ �makedispwind(fru%,dan%,dax%,ds%,ds2%)
,j_ �sub%<=12:�moveendloop(2,"012,030",54,60,794,564):�:�moveendloop(2,"012,030",0,60,668,508)
,t�
,~sub%+=1
,�W�sub%=32:�makeanim(actmenu%,actanim%,bg%(actanim%)):�animateend:�plotanim(actanim%)
,��
,�
,���movedispani
,�� dov%,mou%,mox%,ml%,bur%
,��firstmove%�
,�! sub%=0:firstmove%=�:elaps%=0
,��
,�9 �(sub%=13)�(sub%=22)�(sub%=34)�(sub%=44)�(sub%=49) �
,� �<lasttime%+130-elaps%:�
,� �
,� �<lasttime%+30-elaps%:�
- �
-
�
-elaps%=�
-4�texton%:�checkanimtext(5,"012,021,032,033,048")
-(
�sub%<49�
-24 �texton% �:�cl_anim(15):�:�copysp("bg7","anim")
-<, È™"OS_SpriteOp",&13C,animarea%,"anim",0
-F4 �sub%<=11:mox%=776-(sub%*64):mou%=sub%�2:bur%=1
-P) �sub%=12:mox%=72:mou%=2:ml%=0:bur%=1
-Z@ �(sub%>=13)�(sub%<=19):mox%=72:mou%=2:ml%=2-(sub%�2):bur%=1
-d) �sub%=20:mox%=72:mou%=2:ml%=2:bur%=2
-n) �sub%=21:mox%=72:mou%=2:ml%=0:bur%=2
-xE �(sub%>=22)�(sub%<=32):mox%=72-((sub%-21)*64):mou%=sub%�2:bur%=2
-�# �sub%>=33:mou%=-1:dov%=sub%-33
-�* �makedispani(dov%,mou%,mox%,ml%,bur%)
-�v �sub%<=33:�moveendloop(5,"012,021,032,033,048",0,0,810,176):�:�moveendloop(5,"012,021,032,033,048",140,4,330,644)
-��
-�sub%+=1
-�W�sub%=50:�makeanim(actmenu%,actanim%,bg%(actanim%)):�animateend:�plotanim(actanim%)
-��
-�
-���movedispwat
-��firstmove%�
-�! sub%=0:firstmove%=�:elaps%=0
-��
-� �sub%=65 �
. �<lasttime%+200-elaps%:�
. �
. �<lasttime%+40-elaps%:�
." �
.,�
.6elaps%=�
.@$�texton%:�checkanimtext(1,"064")
.J
�sub%<65�
.T, È™"OS_SpriteOp",&13C,animarea%,"anim",0
.^D �23,12,15,0,0,15,15,0,0,15:�18,16,0:�25,4,0;0;:�25,101,810;644;
.h) �18,0,15:�25,4,0;0;:�25,101,810;274;
.r �sub%>=33:�flip(2,"land")
.|F �(sub%<=15)�(sub%>=50):ș"OS_SpriteOp",&122,detarea%,"land",0,0,8
.�R �(sub%>=16)�(sub%<=32):ș"OS_SpriteOp",&122,detarea%,"land",-50*(sub%-15),0,8
.�W �(sub%>=33)�(sub%<=49):ș"OS_SpriteOp",&122,detarea%,"land",800-(50*(sub%-33)),0,8
.� �sub%>=33:�flip(2,"land")
.�; �sub%<=15:ș"OS_SpriteOp",&122,detarea%,"palm",40,68,8
.�W �(sub%>=16)�(sub%<=25):ș"OS_SpriteOp",&122,detarea%,"palm",40-(50*(sub%-15)),68,8
.�C �sub%<=4:ș"OS_SpriteOp",&122,detarea%,"coc0",266,coc%(sub%),8
.�P �(sub%>=5)�(sub%<=8):ș"OS_SpriteOp",&122,detarea%,"coc"+�(sub%-4),224,80,8
.�c �(sub%>=9)�(sub%<=15):ș"OS_SpriteOp",&122,detarea%,"coc"+�(5+(sub%�2)),266+(20*(sub%-9)),88,8
.�V �(sub%>=16)�(sub%<=49):ș"OS_SpriteOp",&122,detarea%,"coc"+�(5+(sub%�2)),386,88,8
.�e �(sub%>=50)�(sub%<=60):ș"OS_SpriteOp",&122,detarea%,"coc"+�(5+(sub%�2)),386+(20*(sub%-49)),88,8
.�X �(sub%>=61)�(sub%<=64):ș"OS_SpriteOp",&122,detarea%,"coc7",626+(20*(sub%-61)),88,8
.�3 �sub%<=15:�moveendloop(1,"064",224,80,440,480)
.�= �(sub%>=16)�(sub%<=49):�moveendloop(1,"064",0,0,810,644)
/3 �sub%>=50:�moveendloop(1,"064",380,88,740,140)
/�
/sub%+=1
/&W�sub%=66:�makeanim(actmenu%,actanim%,bg%(actanim%)):�animateend:�plotanim(actanim%)
/0�
/:
/D
/N>��boxexp(s%,noof%,x%,y%,dx%,dy%,sizx%,sizy%,dsizx%,dsizy%)
/XT� s% goes from 0 to noof%:x,y orig leftbot corner:dx,dy how leftbot corner moves
/b@� sizx,sizy ec size of orig box:dsizx,dsizy incr in box size
/l�s%>noof%:�
/v�s%=noof%�
/�
s%-=1
/� ș"Wimp_SetColour",7
/�l �25,4,x%+(dx%*s%);y%+(dy%*s%);:�25,101,x%+(dx%*s%)+sizx%+(dsizx%*s%)-2;y%+(dy%*s%)+sizy%+(dsizy%*s%)-2;
/� ș"Wimp_SetColour",9
/�p �25,4,x%+(dx%*s%)+4;y%+(dy%*s%)+4;:�25,101,x%+(dx%*s%)+sizx%+(dsizx%*s%)-6;y%+(dy%*s%)+sizy%+(dsizy%*s%)-6;
/� ș"Wimp_SetColour",7
/�r �25,4,x%+(dx%*s%)+8;y%+(dy%*s%)+8;:�25,101,x%+(dx%*s%)+sizx%+(dsizx%*s%)-10;y%+(dy%*s%)+sizy%+(dsizy%*s%)-10;
/�
s%+=1
/��
/��s%<noof%�
/� ș"Wimp_SetColour",9
/�F �box(x%+(dx%*s%),y%+(dy%*s%),sizx%+(dsizx%*s%),sizy%+(dsizy%*s%))
/��
0�
0
0��box(x%,y%,sx%,sy%)
0 '�25,4,x%;y%;:�25,101,x%+2;y%+sy%-2;
0*1�25,4,x%;y%+sy%-4;:�25,101,x%+sx%-2;y%+sy%-2;
041�25,4,x%+sx%-4;y%+sy%-2;:�25,101,x%+sx%-2;y%;
0>'�25,4,x%+sx%-2;y%+2;:�25,101,x%;y%;
0H�
0R
0\��plotanim(aa%)
0f'�aa%=-1:!blk%=anmew%:�:!blk%=animw%
0p!È™"Wimp_GetWindowState",,blk%
0z8spx%=blk%!4-blk%!20+16:spy%=(blk%!16-blk%!24)-76-644
0�0blk%!4=0:blk%!8=-720:blk%!12=830:blk%!16=-72
0�(ș "Wimp_UpdateWindow",,blk% � more%
0�ȕ more%
0�Gș "OS_SpriteOp",&134,animarea%,"anim",spx%,spy%,0,scale%,coltrans%
0�(ș "Wimp_GetRectangle",,blk% � more%
0��
0��
0�
0�#��plotanimmove(le%,lo%,ri%,hi%)
0�.!blk%=animw%:ș"Wimp_GetWindowState",,blk%
0�8spx%=blk%!4-blk%!20+16:spy%=(blk%!16-blk%!24)-76-644
0�L!blk%=animw%:blk%!4=16+le%:blk%!8=lo%-720:blk%!12=16+ri%:blk%!16=hi%-720
0�(ș "Wimp_UpdateWindow",,blk% � more%
1È• more%
1GÈ™ "OS_SpriteOp",&134,animarea%,"anim",spx%,spy%,0,scale%,coltrans%
1(ș "Wimp_GetRectangle",,blk% � more%
1$�
1.�
18
1B��copysp(fromsp$,tosp$)
1L�fromsp$="anim" �
1V) fromarea%=animarea%:toarea%=detarea%
1`�
1ja �fromsp$,2)="bg":fromarea%=bgarea%:toarea%=animarea%:�:fromarea%=detarea%:toarea%=animarea%
1t�
1~(È™"OS_SpriteOp",&13C,toarea%,tosp$,0
1�0ș"OS_SpriteOp",&122,fromarea%,fromsp$,0,0,0
1�$ș"OS_SpriteOp",&13C,toarea%,0,1
1��
1�
1���initanmewlabs(m%)
1�� j%
1�5�m%>0:�hideicn(anmew%,0,�):�:�hideicn(anmew%,0,�)
1�Ȏ m% �
1�* � 0: �j%=5�33:�hideicn(anmew%,j%,�):�
1�A � 1: �j%=5�9:�hideicn(anmew%,j%,�):�selecticn(anmew%,j%,�):�
1�. �j%=10�33:�hideicn(anmew%,j%,�):�
1�) � 2: �j%=5�9:�hideicn(anmew%,j%,�):�
2 F �j%=10�15:�hideicn(anmew%,j%,�):�selecticn(anmew%,j%,�):�
2
. �j%=16�33:�hideicn(anmew%,j%,�):�
2* � 3: �j%=5�15:�hideicn(anmew%,j%,�):�
2F �j%=16�20:�hideicn(anmew%,j%,�):�selecticn(anmew%,j%,�):�
2(. �j%=21�33:�hideicn(anmew%,j%,�):�
22* � 4: �j%=5�20:�hideicn(anmew%,j%,�):�
2<F �j%=21�24:�hideicn(anmew%,j%,�):�selecticn(anmew%,j%,�):�
2F. �j%=25�33:�hideicn(anmew%,j%,�):�
2P* � 5: �j%=5�24:�hideicn(anmew%,j%,�):�
2ZF �j%=25�33:�hideicn(anmew%,j%,�):�selecticn(anmew%,j%,�):�
2d�
2n�
2x
2���setextent(w%,siz%)
2�-!blk%=0:blk%!4=-siz%:blk%!8=842:blk%!12=0
2�ș"Wimp_SetExtent",w%,blk%
2��
2�
2���resizeanmew
2�1!blk2%=anmew%:ș "Wimp_GetWindowState",,blk2%
2�-!blk%=anmew%:ș "Wimp_DeleteWindow",,blk%
2�!((winstarts%!8)+52)=0
2�1ș "Wimp_CreateWindow",,winstarts%!8 � anmew%
2��
2�
2���closewind(b%)
3È™ "Wimp_CloseWindow",,b%
3�
3
3"��openwind(b%)
3,È™ "Wimp_OpenWindow",,b%
36�
3@
3J��click(mx%,my%,but%,w%,i%)
3TȎ w% �
3^ � -2:
3h Ȏ but% �
3rH � 2: �master_menu("Plantwise","Info,Setup...,7Quit,",!eb%,216)
3|% � 4: �startgame:�open_mess1
3� �
3�' � menuw%: �menuwclick(but%,w%,i%)
3�' � anmew%: �anmewclick(but%,w%,i%)
3�, � animw%: �animwclick(mx%,my%,but%,i%)
3�, � findw%: �findwclick(mx%,my%,but%,i%)
3�, � defnw%: �defnwclick(mx%,my%,but%,i%)
3�, � wordw%: �wordwclick(mx%,my%,but%,i%)
3�& � setupw%: �setupwclick(but%,i%)
3��
3��
3�
3���menuwclick(b%,w%,i%)
3�� j%,k%
4�b%=2:�
4�i%=-1:�
4!!blk%=demow%:�closewind(blk%)
4&�i%<6:�checkindex(i%):�
40j%=�(i%/3)-1
4:�k%=6�18�3
4D; �k%=3+(3*j%):�selecticn(w%,k%,�):�:�selecticn(w%,k%,�)
4N�
4X�open_animw(j%,-1)
4bJ�j%=1:�open_mess("Only 'leaf' is available in the Structure section.")
4lW�j%=2:�open_mess("Only 'seed dispersal' is available in the Reproduction section.")
4v`�j%=3:�open_mess("None of the What Plants Need section is available in this demonstration.")
4�X�j%=4:�open_mess("None of the Survival section is available in this demonstration.")
4�^�j%=5:�open_mess("None of the Classification section is available in this demonstration.")
4��
4�
4���checkindex(i%)
4�
�i%<3�
4� �toggleicnsel(menuw%,0)
4� �isselected(menuw%,0)�
4� �open_findw:�open_messff
4� �
4�$ !blk%=findw%:�closewinds(blk%)
4� �
4��
5 �toggleicnsel(menuw%,3)
5 �isselected(menuw%,3)�
5 �open_wordw:�open_messww
5 �
5*A !blk%=defnw%:�closewind(blk%):!blk%=wordw%:�closewind(blk%)
54 �
5>�
5H�
5R
5\��anmewclick(b%,w%,i%)
5f� j%,k%
5p+�IFb%=2:PROCanmew_menu(mx%,my%):ENDPROC
5z!!blk%=demow%:�closewind(blk%)
5��(i%=7)�(i%=12) �
5� �killtext
5� �toggleicnsel(anmew%,i%)
5�6 wlev%=0:�open_animw(actmenu%,wlev%+findaa%(i%-5))
5��
5�V �(i%>=5)�(i%<=9):�open_mess("Only 'leaf' is available in the Structure section.")
5�e �(i%>=10)�(i%<=15):�open_mess("Only 'seed dispersal' is available in the Reproduction section.")
5�n �(i%>=16)�(i%<=20):�open_mess("None of the What Plants Need section is available in this demonstration.")
5�f �(i%>=21)�(i%<=24):�open_mess("None of the Survival section is available in this demonstration.")
5�l �(i%>=25)�(i%<=33):�open_mess("None of the Classification section is available in this demonstration.")
5��
5��
5�
6��animwclick(mx%,my%,b%,i%)
6� j%,k%
6+�IFb%=2:PROCanimw_menu(mx%,my%):ENDPROC
6$!!blk%=demow%:�closewind(blk%)
6.�toggleicnsel(animw%,i%)
68Ȏ i% �
6B � 0: �killtext
6Ld �wlev%=0:�open_animw(actmenu%,-1):�:j%=wlev%:wlev%=0:�open_animw(actmenu%,actanim%-j%)
6V" � 1: �isselected(animw%,1)�
6`' texton%=-1:textnewon%=-1
6jF �doingmove%:�makeanim(actmenu%,actanim%,bg%(actanim%))
6t! �addtext(actanim%)
6~ �
6�J texton%=0:textnewoff%=-1:acttxticn%=0:�removetext(actanim%)
6� �
6�" � 2: �isselected(animw%,2)�
6�3 doingmove%=-1:firstmove%=-1:�animate
6� �
6�E �animateend:�makeanim(actmenu%,actanim%,bg%(actanim%))
6�@ �texton%:�addtext(actanim%):�:�plotanim(actanim%)
6� �
6� � 3,4: j%=wlev%:�killtext
6�V �isselected(animw%,i%):wlev%=i%-2:�selecticn(animw%,7-i%,�):�:wlev%=0
6�7 �open_animw(actmenu%,actanim%-j%+wlev%)
6�# � 5,6,7,8: j%=wlev%:�killtext
7 - �isselected(animw%,i%) �
7
' wlev%=i%-4:�k%=5�8
75 �k%<>i%:�selecticn(animw%,k%,�)
7 �
7( �
72 wlev%=0
7< �
7F; �open_animw(actmenu%,actanim%-j%+wlev%)
7P� � 12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56:
7Z: �acttxticn%>11 �selecticn(animw%,acttxticn%,�)
7d7 �acttxticn%=i% acttxticn%=0:�:acttxticn%=i%
7n �addwords(actanim%)
7x�
7��
7�
7���killtext
7�1�selecticn(animw%,1,�):texton%=0:textnewon%=0
7�P!blk2%=0:blk2%!4=-732:blk2%!8=842:blk2%!12=0:ș"Wimp_SetExtent",animw%,blk2%
7��
7�
7���findwclick(mx%,my%,b%,i%)
7�� j%,am%,aa%
7��b%=2:�
7�M�(i%<=34)�((i%>=40)�(i%<=43))�((i%>=47)�(i%<=59))�(i%>=65):�open_messff:�
7�!!blk%=demow%:�closewind(blk%)
7�/�(i%>=35)�(i%<=39):am%=i%-34:aa%=-1:wlev%=0
82�(i%>=44)�(i%<=46):am%=1:aa%=i%-40:wlev%=i%-44
82�(i%>=60)�(i%<=64):am%=2:aa%=i%-40:wlev%=i%-60
8B�(actmenu%<>am%)�(actanim%<>aa%):�selecticn(findw%,findicn%,�)
8"findicn%=0
8,A�(am%>0)�(aa%=-1):�selecticn(findw%,34+am%,�):findicn%=34+am%
867�aa%>=0:�selecticn(findw%,40+aa%,�):findicn%=40+aa%
8@8!blk%=findw%:�closewind(blk%):�selecticn(menuw%,0,�)
8J"�killtext:�open_menuw(am%,aa%)
8T�
8^
8h��wordwclick(mx%,my%,b%,i%)
8r� j%
8|�b%=2:�
8�!!blk%=demow%:�closewind(blk%)
8�W�glossicn%<>i%:�toggleicnsel(wordw%,i%):�selecticn(wordw%,glossicn%,�):glossicn%=i%
8��open_defnw(i%)
8��
8�
8���setupwclick(b%,i%)
8�� j%,k%
8�Ȏ i% �
8�5 � 2,3:�isselected(setupw%,2):simp%=0:�:simp%=1
8� �startgame
8��
8��
8�
9��initanimw(aa%)
9� j%,k%
9�selecticn(animw%,0,�)
9&<�k%=2�56:�hideicn(animw%,k%,�):�selecticn(animw%,k%,�):�
90�j%=0�6
9:H �wdefn%(aa%,j%)>0:�hideicn(animw%,j%+2,�):�:�hideicn(animw%,j%+2,�)
9DL �wdefn%(aa%,j%)=2:�selecticn(animw%,j%+2,�):�:�selecticn(animw%,j%+2,�)
9N�
9XȎ aa% �
9b3 � 0,1 : �puticnstring(animw%,3,"animal cells")
9l3 � 2,3 : �puticnstring(animw%,3,"flower parts")
9v6 � 10,11 : �puticnstring(animw%,3,"root close-up")
9�_ � 4,5,6 : �puticnstring(animw%,3,"photosynthesis"):�puticnstring(animw%,4,"leaf close-up")
9�\ � 7,8,9 : �puticnstring(animw%,3,"non-woody stem"):�puticnstring(animw%,4,"woody stem")
9�9 � 12,13,14,15,16 : �puticnstring(animw%,5,"insects")
9�c � 17,18,19 : �puticnstring(animw%,3,"fruits & seeds"):�puticnstring(animw%,4,"fruit examples")
9�9 � 20,21,22,23,24 : �puticnstring(animw%,5,"explode")
9�] � 25,26,27 : �puticnstring(animw%,3,"seed structure"):�puticnstring(animw%,4,"dormancy")
9�1 � 36,37 : �puticnstring(animw%,3,"extremes")
9��
9�Rdoingmove%=0:firstmove%=0:acttxticn%=0:doingmove%=0:firstmove%=-1:textnewon%=0
9��
9�
9���event
9�"ș "Wimp_Poll",0,blk% � e%,eb%
:Ȏ e% �
: � 0: �doingmove%:�animate
:(� IFdoingcloser% PROCcloser
: .� IFdoingpinpart% PROCmovepinpart
:*S� sizz1%=(!detarea%)-(detarea%!12):IFsizz1%<minsizz1%:minsizz1%=sizz1%
:4C� sizz2%=HIMEM-END:IFsizz2%<minsizz2%:minsizz2%=sizz2%
:>C� sizz3%=END-LOMEM:IFsizz3%<minsizz3%:minsizz3%=sizz3%
:H � 1: �redraw(!eb%)
:R � 2: �openwind(blk%)
:\ � 3: �closewinds(blk%)
:f2 � 6: �click(eb%!0,eb%!4,eb%!8,eb%!12,eb%!16)
:p � 9: �menuselect
:z � 17,18: �receive
:��
:��
:�
:�
��receive
:�Ȏ eb%!16 �
:� � 0: quit% = �
:�B � 9: �modechange:ș"Wimp_ForceRedraw",-1,0,0,xmaxec%,ymaxec%
:� � &400C1: �modechange
:��
:��
:�
:���redraw(w%)
:�Ȏ w% �
;#� WHEN systw%: PROCredrawsystw
;#� WHEN bodyw%: PROCredrawbodyw
;# � animw%,anmew%: �redrawanimw
;$)� WHEN pinoutlw%: PROCredrawpinoutlw
;. : �redrawother
;8�
;B�
;L
;V��redrawother
;`(ș "Wimp_RedrawWindow",,blk% � more%
;jȕ more%
;t)ș "Wimp_GetRectangle",,blk% � more%:
;~�
;��
;�
;���redrawanimw
;�(ș "Wimp_RedrawWindow",,blk% � more%
;�8spx%=blk%!4-blk%!20+16:spy%=(blk%!16-blk%!24)-76-644
;�ȕ more%
;�Gș "OS_SpriteOp",&134,animarea%,"anim",spx%,spy%,0,scale%,coltrans%
;�)ș "Wimp_GetRectangle",,blk% � more%:
;��
;��
;�
;���addanmewlines(am%)
<