chiark / gitweb /
initial checkin master origin/HEAD origin/master
authorThomas Thurman <thomas@thurman.org.uk>
Tue, 17 Jan 2012 15:10:19 +0000 (15:10 +0000)
committerThomas Thurman <thomas@thurman.org.uk>
Tue, 17 Jan 2012 15:10:19 +0000 (15:10 +0000)
658 files changed:
README.txt [new file with mode: 0644]
avalot/! [new file with mode: 0644]
avalot/1stoff.pas [new file with mode: 0644]
avalot/_sound.raw [new file with mode: 0644]
avalot/about.avd [new file with mode: 0644]
avalot/access.pas [new file with mode: 0644]
avalot/acci.pas [new file with mode: 0644]
avalot/also.pas [new file with mode: 0644]
avalot/also1.avd [new file with mode: 0644]
avalot/also10.avd [new file with mode: 0644]
avalot/also11.avd [new file with mode: 0644]
avalot/also12.avd [new file with mode: 0644]
avalot/also13.avd [new file with mode: 0644]
avalot/also14.avd [new file with mode: 0644]
avalot/also15.avd [new file with mode: 0644]
avalot/also16.avd [new file with mode: 0644]
avalot/also19.avd [new file with mode: 0644]
avalot/also2.avd [new file with mode: 0644]
avalot/also20.avd [new file with mode: 0644]
avalot/also21.avd [new file with mode: 0644]
avalot/also22.avd [new file with mode: 0644]
avalot/also23.avd [new file with mode: 0644]
avalot/also25.avd [new file with mode: 0644]
avalot/also26.avd [new file with mode: 0644]
avalot/also27.avd [new file with mode: 0644]
avalot/also28.avd [new file with mode: 0644]
avalot/also29.avd [new file with mode: 0644]
avalot/also3.avd [new file with mode: 0644]
avalot/also40.avd [new file with mode: 0644]
avalot/also42.avd [new file with mode: 0644]
avalot/also46.avd [new file with mode: 0644]
avalot/also47.avd [new file with mode: 0644]
avalot/also5.avd [new file with mode: 0644]
avalot/also50.avd [new file with mode: 0644]
avalot/also51.avd [new file with mode: 0644]
avalot/also7.avd [new file with mode: 0644]
avalot/also70.avd [new file with mode: 0644]
avalot/also71.avd [new file with mode: 0644]
avalot/also80.avd [new file with mode: 0644]
avalot/also9.avd [new file with mode: 0644]
avalot/also99.avd [new file with mode: 0644]
avalot/andexor.pas [new file with mode: 0644]
avalot/andexor2.pas [new file with mode: 0644]
avalot/andextst.pas [new file with mode: 0644]
avalot/arch.pas [new file with mode: 0644]
avalot/ask2.raw [new file with mode: 0644]
avalot/ask5.raw [new file with mode: 0644]
avalot/avadocs.ico [new file with mode: 0644]
avalot/avagame.avd [new file with mode: 0644]
avalot/avalot!.pas [new file with mode: 0644]
avalot/avalot.ans [new file with mode: 0644]
avalot/avalot.doc [new file with mode: 0644]
avalot/avalot.fnt [new file with mode: 0644]
avalot/avalot.ico [new file with mode: 0644]
avalot/avalot.idx [new file with mode: 0644]
avalot/avalot.ini [new file with mode: 0644]
avalot/avalot.pif [new file with mode: 0644]
avalot/avalot.sez [new file with mode: 0644]
avalot/avalot.txt [new file with mode: 0644]
avalot/avalot9.map [new file with mode: 0644]
avalot/avalot9.pas [new file with mode: 0644]
avalot/avasetup.ico [new file with mode: 0644]
avalot/avbkgrnd.pas [new file with mode: 0644]
avalot/avitalic.fnt [new file with mode: 0644]
avalot/avmenu.pas [new file with mode: 0644]
avalot/avvyans.pas [new file with mode: 0644]
avalot/avvyans2.pas [new file with mode: 0644]
avalot/avvymonk.pas [new file with mode: 0644]
avalot/bakchunk.pas [new file with mode: 0644]
avalot/basher.pas [new file with mode: 0644]
avalot/bootstrp.map [new file with mode: 0644]
avalot/bootstrp.pas [new file with mode: 0644]
avalot/butnraw.avd [new file with mode: 0644]
avalot/buttons.avd [new file with mode: 0644]
avalot/cadburys.pas [new file with mode: 0644]
avalot/celer.pas [new file with mode: 0644]
avalot/ch_egats.pas [new file with mode: 0644]
avalot/charmap.pas [new file with mode: 0644]
avalot/chunk1.avd [new file with mode: 0644]
avalot/chunk13.avd [new file with mode: 0644]
avalot/chunk15.avd [new file with mode: 0644]
avalot/chunk16.avd [new file with mode: 0644]
avalot/chunk19.avd [new file with mode: 0644]
avalot/chunk2.avd [new file with mode: 0644]
avalot/chunk20.avd [new file with mode: 0644]
avalot/chunk21.avd [new file with mode: 0644]
avalot/chunk22.avd [new file with mode: 0644]
avalot/chunk23.avd [new file with mode: 0644]
avalot/chunk25.avd [new file with mode: 0644]
avalot/chunk29.avd [new file with mode: 0644]
avalot/chunk42.avd [new file with mode: 0644]
avalot/chunk46.avd [new file with mode: 0644]
avalot/chunk47.avd [new file with mode: 0644]
avalot/chunk5.avd [new file with mode: 0644]
avalot/chunk50.avd [new file with mode: 0644]
avalot/chunk51.avd [new file with mode: 0644]
avalot/chunk7.avd [new file with mode: 0644]
avalot/chunk71.avd [new file with mode: 0644]
avalot/chunk9.avd [new file with mode: 0644]
avalot/chunkbi2.avd [new file with mode: 0644]
avalot/chunkbi3.avd [new file with mode: 0644]
avalot/chunkbi4.avd [new file with mode: 0644]
avalot/chunkbi9.avd [new file with mode: 0644]
avalot/chunkbit.avd [new file with mode: 0644]
avalot/chunker.pas [new file with mode: 0644]
avalot/chunkxf1.pas [new file with mode: 0644]
avalot/chunkxf2.pas [new file with mode: 0644]
avalot/chunkxf3.pas [new file with mode: 0644]
avalot/chunkxf4.pas [new file with mode: 0644]
avalot/chunkxf5.pas [new file with mode: 0644]
avalot/chunkxf6.pas [new file with mode: 0644]
avalot/chunkxf7.pas [new file with mode: 0644]
avalot/chunkxf8.pas [new file with mode: 0644]
avalot/chunkxf9.pas [new file with mode: 0644]
avalot/chunkxfa.pas [new file with mode: 0644]
avalot/chunkxfb.pas [new file with mode: 0644]
avalot/chunkxfc.pas [new file with mode: 0644]
avalot/chunkxfd.pas [new file with mode: 0644]
avalot/chunkxfe.pas [new file with mode: 0644]
avalot/chunkxff.pas [new file with mode: 0644]
avalot/chunkxfg.pas [new file with mode: 0644]
avalot/chunkxfh.pas [new file with mode: 0644]
avalot/chunkxfi.pas [new file with mode: 0644]
avalot/chunkxfj.pas [new file with mode: 0644]
avalot/chunkxfk.pas [new file with mode: 0644]
avalot/chunkxfl.pas [new file with mode: 0644]
avalot/chunky.pas [new file with mode: 0644]
avalot/clock.pas [new file with mode: 0644]
avalot/closing.pas [new file with mode: 0644]
avalot/converse.avd [new file with mode: 0644]
avalot/convert.pas [new file with mode: 0644]
avalot/convmous.pas [new file with mode: 0644]
avalot/corr2tmp.avd [new file with mode: 0644]
avalot/corr3tmp.avd [new file with mode: 0644]
avalot/corr4tmp.avd [new file with mode: 0644]
avalot/credits.dat [new file with mode: 0644]
avalot/credits.pas [new file with mode: 0644]
avalot/dataprot.doc [new file with mode: 0644]
avalot/demo.avd [new file with mode: 0644]
avalot/digit.avd [new file with mode: 0644]
avalot/displays [new file with mode: 0644]
avalot/displtxt.pas [new file with mode: 0644]
avalot/distzdsc [new file with mode: 0644]
avalot/dropdown.pas [new file with mode: 0644]
avalot/dwidth.pas [new file with mode: 0644]
avalot/edhead.pas [new file with mode: 0644]
avalot/edna.dat [new file with mode: 0644]
avalot/edna.ico [new file with mode: 0644]
avalot/edna.pas [new file with mode: 0644]
avalot/enhanced.pas [new file with mode: 0644]
avalot/enid.pas [new file with mode: 0644]
avalot/file_id.diz [new file with mode: 0644]
avalot/filer.pas [new file with mode: 0644]
avalot/fileunit.pas [new file with mode: 0644]
avalot/filing.pas [new file with mode: 0644]
avalot/finale.avd [new file with mode: 0644]
avalot/folk.avd [new file with mode: 0644]
avalot/folktemp.pas [new file with mode: 0644]
avalot/fontslid.pas [new file with mode: 0644]
avalot/frere.pas [new file with mode: 0644]
avalot/g-room.pas [new file with mode: 0644]
avalot/gameover.avd [new file with mode: 0644]
avalot/geida.pcx [new file with mode: 0644]
avalot/golden.pas [new file with mode: 0644]
avalot/gyro.pas [new file with mode: 0644]
avalot/h0.raw [new file with mode: 0644]
avalot/h1.raw [new file with mode: 0644]
avalot/h10.raw [new file with mode: 0644]
avalot/h11.raw [new file with mode: 0644]
avalot/h12.raw [new file with mode: 0644]
avalot/h13.raw [new file with mode: 0644]
avalot/h14.raw [new file with mode: 0644]
avalot/h15.raw [new file with mode: 0644]
avalot/h16.raw [new file with mode: 0644]
avalot/h17.raw [new file with mode: 0644]
avalot/h18.raw [new file with mode: 0644]
avalot/h19.raw [new file with mode: 0644]
avalot/h2.raw [new file with mode: 0644]
avalot/h20.raw [new file with mode: 0644]
avalot/h21.raw [new file with mode: 0644]
avalot/h22.raw [new file with mode: 0644]
avalot/h23.raw [new file with mode: 0644]
avalot/h24.raw [new file with mode: 0644]
avalot/h25.raw [new file with mode: 0644]
avalot/h26.raw [new file with mode: 0644]
avalot/h27.raw [new file with mode: 0644]
avalot/h28.raw [new file with mode: 0644]
avalot/h29.raw [new file with mode: 0644]
avalot/h3.raw [new file with mode: 0644]
avalot/h30.raw [new file with mode: 0644]
avalot/h31.raw [new file with mode: 0644]
avalot/h32.raw [new file with mode: 0644]
avalot/h33.raw [new file with mode: 0644]
avalot/h34.raw [new file with mode: 0644]
avalot/h4.raw [new file with mode: 0644]
avalot/h5.raw [new file with mode: 0644]
avalot/h6.raw [new file with mode: 0644]
avalot/h7.raw [new file with mode: 0644]
avalot/h8.raw [new file with mode: 0644]
avalot/h9.raw [new file with mode: 0644]
avalot/help.avd [new file with mode: 0644]
avalot/help.pas [new file with mode: 0644]
avalot/help2.pas [new file with mode: 0644]
avalot/helpbak.pas [new file with mode: 0644]
avalot/helper.pas [new file with mode: 0644]
avalot/hibits.pas [new file with mode: 0644]
avalot/highs.pas [new file with mode: 0644]
avalot/hiz.pas [new file with mode: 0644]
avalot/icons.avd [new file with mode: 0644]
avalot/incline.pas [new file with mode: 0644]
avalot/init0.dat [new file with mode: 0644]
avalot/initxf.pas [new file with mode: 0644]
avalot/inputtes.pas [new file with mode: 0644]
avalot/intro.pas [new file with mode: 0644]
avalot/intro.txt [new file with mode: 0644]
avalot/ints.pas [new file with mode: 0644]
avalot/jobs.txt [new file with mode: 0644]
avalot/joysetup.pas [new file with mode: 0644]
avalot/joystick.pas [new file with mode: 0644]
avalot/joytmp.dat [new file with mode: 0644]
avalot/keystrip.doc [new file with mode: 0644]
avalot/loading.pas [new file with mode: 0644]
avalot/logger.pas [new file with mode: 0644]
avalot/logo.avd [new file with mode: 0644]
avalot/lucerna.pas [new file with mode: 0644]
avalot/magic2.avd [new file with mode: 0644]
avalot/magic2.pas [new file with mode: 0644]
avalot/magidraw.pas [new file with mode: 0644]
avalot/magishuf.pas [new file with mode: 0644]
avalot/mainmenu.avd [new file with mode: 0644]
avalot/maintemp.avd [new file with mode: 0644]
avalot/make!.pas [new file with mode: 0644]
avalot/makeregi.pas [new file with mode: 0644]
avalot/makesez.pas [new file with mode: 0644]
avalot/makevmou.pas [new file with mode: 0644]
avalot/menu.avd [new file with mode: 0644]
avalot/menuxf.pas [new file with mode: 0644]
avalot/mice.avd [new file with mode: 0644]
avalot/minstran.pas [new file with mode: 0644]
avalot/mv.bat [new file with mode: 0644]
avalot/newsprit.pas [new file with mode: 0644]
avalot/nim.avd [new file with mode: 0644]
avalot/nim.pas [new file with mode: 0644]
avalot/nimdraw.pas [new file with mode: 0644]
avalot/nimstone.avd [new file with mode: 0644]
avalot/nimunit.pas [new file with mode: 0644]
avalot/notts.avd [new file with mode: 0644]
avalot/oldfiler.pas [new file with mode: 0644]
avalot/oldhighs.pas [new file with mode: 0644]
avalot/oldicons.avd [new file with mode: 0644]
avalot/oldincln.pas [new file with mode: 0644]
avalot/oldtrip.pas [new file with mode: 0644]
avalot/omtest.pas [new file with mode: 0644]
avalot/oopmenu.pas [new file with mode: 0644]
avalot/overlap.pas [new file with mode: 0644]
avalot/overscro.pas [new file with mode: 0644]
avalot/paradise.doc [new file with mode: 0644]
avalot/particle.pas [new file with mode: 0644]
avalot/pedigree.doc [new file with mode: 0644]
avalot/pictemp.pas [new file with mode: 0644]
avalot/pictemp2.pas [new file with mode: 0644]
avalot/pingo.pas [new file with mode: 0644]
avalot/place1.avd [new file with mode: 0644]
avalot/place10.avd [new file with mode: 0644]
avalot/place11.avd [new file with mode: 0644]
avalot/place12.avd [new file with mode: 0644]
avalot/place13.avd [new file with mode: 0644]
avalot/place14.avd [new file with mode: 0644]
avalot/place15.avd [new file with mode: 0644]
avalot/place16.avd [new file with mode: 0644]
avalot/place19.avd [new file with mode: 0644]
avalot/place2.avd [new file with mode: 0644]
avalot/place20.avd [new file with mode: 0644]
avalot/place21.avd [new file with mode: 0644]
avalot/place22.avd [new file with mode: 0644]
avalot/place23.avd [new file with mode: 0644]
avalot/place25.avd [new file with mode: 0644]
avalot/place26.avd [new file with mode: 0644]
avalot/place27.avd [new file with mode: 0644]
avalot/place28.avd [new file with mode: 0644]
avalot/place29.avd [new file with mode: 0644]
avalot/place3.avd [new file with mode: 0644]
avalot/place40.avd [new file with mode: 0644]
avalot/place42.avd [new file with mode: 0644]
avalot/place46.avd [new file with mode: 0644]
avalot/place47.avd [new file with mode: 0644]
avalot/place5.avd [new file with mode: 0644]
avalot/place50.avd [new file with mode: 0644]
avalot/place51.avd [new file with mode: 0644]
avalot/place7.avd [new file with mode: 0644]
avalot/place70.avd [new file with mode: 0644]
avalot/place71.avd [new file with mode: 0644]
avalot/place80.avd [new file with mode: 0644]
avalot/place9.avd [new file with mode: 0644]
avalot/place98.avd [new file with mode: 0644]
avalot/place99.avd [new file with mode: 0644]
avalot/plottest.pas [new file with mode: 0644]
avalot/points.txt [new file with mode: 0644]
avalot/preview1.avd [new file with mode: 0644]
avalot/preview1.pas [new file with mode: 0644]
avalot/preview2.avd [new file with mode: 0644]
avalot/qintro.pas [new file with mode: 0644]
avalot/qstars.pas [new file with mode: 0644]
avalot/quiz.doc [new file with mode: 0644]
avalot/rawupd.pas [new file with mode: 0644]
avalot/readsez.pas [new file with mode: 0644]
avalot/regi.raw [new file with mode: 0644]
avalot/reginam.pas [new file with mode: 0644]
avalot/register.doc [new file with mode: 0644]
avalot/register.raw [new file with mode: 0644]
avalot/sackb1.pas [new file with mode: 0644]
avalot/sackb3.pas [new file with mode: 0644]
avalot/sackblas.pas [new file with mode: 0644]
avalot/saving.pas [new file with mode: 0644]
avalot/scr_1.pas [new file with mode: 0644]
avalot/scr_2.pas [new file with mode: 0644]
avalot/scr_3.pas [new file with mode: 0644]
avalot/scr_4.pas [new file with mode: 0644]
avalot/scr_5.pas [new file with mode: 0644]
avalot/scr_9.pas [new file with mode: 0644]
avalot/scrolls.pas [new file with mode: 0644]
avalot/sd0.raw [new file with mode: 0644]
avalot/sd1.raw [new file with mode: 0644]
avalot/sd10.raw [new file with mode: 0644]
avalot/sd11.raw [new file with mode: 0644]
avalot/sd12.raw [new file with mode: 0644]
avalot/sd13.raw [new file with mode: 0644]
avalot/sd14.raw [new file with mode: 0644]
avalot/sd15.raw [new file with mode: 0644]
avalot/sd2.raw [new file with mode: 0644]
avalot/sd3.raw [new file with mode: 0644]
avalot/sd4.raw [new file with mode: 0644]
avalot/sd5.raw [new file with mode: 0644]
avalot/sd50.raw [new file with mode: 0644]
avalot/sd51.raw [new file with mode: 0644]
avalot/sd53.raw [new file with mode: 0644]
avalot/sd54.raw [new file with mode: 0644]
avalot/sd58.raw [new file with mode: 0644]
avalot/sd6.raw [new file with mode: 0644]
avalot/sd7.raw [new file with mode: 0644]
avalot/sd8.raw [new file with mode: 0644]
avalot/sd9.raw [new file with mode: 0644]
avalot/sequence.pas [new file with mode: 0644]
avalot/setup.pas [new file with mode: 0644]
avalot/seu.pas [new file with mode: 0644]
avalot/seu_avvy.pas [new file with mode: 0644]
avalot/sez.pas [new file with mode: 0644]
avalot/sezedit.pas [new file with mode: 0644]
avalot/sezunit.pas [new file with mode: 0644]
avalot/sezxfr.pas [new file with mode: 0644]
avalot/shell1.pas [new file with mode: 0644]
avalot/shell2.pas [new file with mode: 0644]
avalot/shoot1.avd [new file with mode: 0644]
avalot/slope.pas [new file with mode: 0644]
avalot/sloping.txt [new file with mode: 0644]
avalot/sn1.raw [new file with mode: 0644]
avalot/sn10.raw [new file with mode: 0644]
avalot/sn11.raw [new file with mode: 0644]
avalot/sn12.raw [new file with mode: 0644]
avalot/sn13.raw [new file with mode: 0644]
avalot/sn14.raw [new file with mode: 0644]
avalot/sn15.raw [new file with mode: 0644]
avalot/sn16.raw [new file with mode: 0644]
avalot/sn17.raw [new file with mode: 0644]
avalot/sn2.raw [new file with mode: 0644]
avalot/sn26.raw [new file with mode: 0644]
avalot/sn27.raw [new file with mode: 0644]
avalot/sn29.raw [new file with mode: 0644]
avalot/sn3.raw [new file with mode: 0644]
avalot/sn4.raw [new file with mode: 0644]
avalot/sn5.raw [new file with mode: 0644]
avalot/sn6.raw [new file with mode: 0644]
avalot/sn7.raw [new file with mode: 0644]
avalot/sn8.raw [new file with mode: 0644]
avalot/sn9.raw [new file with mode: 0644]
avalot/sp1.raw [new file with mode: 0644]
avalot/sp10.raw [new file with mode: 0644]
avalot/sp11.raw [new file with mode: 0644]
avalot/sp12.raw [new file with mode: 0644]
avalot/sp13.raw [new file with mode: 0644]
avalot/sp14.raw [new file with mode: 0644]
avalot/sp15.raw [new file with mode: 0644]
avalot/sp16.raw [new file with mode: 0644]
avalot/sp17.raw [new file with mode: 0644]
avalot/sp2.raw [new file with mode: 0644]
avalot/sp26.raw [new file with mode: 0644]
avalot/sp27.raw [new file with mode: 0644]
avalot/sp29.raw [new file with mode: 0644]
avalot/sp3.raw [new file with mode: 0644]
avalot/sp4.raw [new file with mode: 0644]
avalot/sp5.raw [new file with mode: 0644]
avalot/sp6.raw [new file with mode: 0644]
avalot/sp7.raw [new file with mode: 0644]
avalot/sp8.raw [new file with mode: 0644]
avalot/sp9.raw [new file with mode: 0644]
avalot/spooky.avd [new file with mode: 0644]
avalot/spread.pas [new file with mode: 0644]
avalot/spread2.pas [new file with mode: 0644]
avalot/sprite0.avd [new file with mode: 0644]
avalot/sprite1.avd [new file with mode: 0644]
avalot/sprite10.avd [new file with mode: 0644]
avalot/sprite11.avd [new file with mode: 0644]
avalot/sprite12.avd [new file with mode: 0644]
avalot/sprite2.avd [new file with mode: 0644]
avalot/sprite3.avd [new file with mode: 0644]
avalot/sprite4.avd [new file with mode: 0644]
avalot/sprite5.avd [new file with mode: 0644]
avalot/sprite6.avd [new file with mode: 0644]
avalot/sprite7.avd [new file with mode: 0644]
avalot/sprite8.avd [new file with mode: 0644]
avalot/sprite9.avd [new file with mode: 0644]
avalot/sq1.raw [new file with mode: 0644]
avalot/sq10.raw [new file with mode: 0644]
avalot/sq11.raw [new file with mode: 0644]
avalot/sq12.raw [new file with mode: 0644]
avalot/sq13.raw [new file with mode: 0644]
avalot/sq14.raw [new file with mode: 0644]
avalot/sq15.raw [new file with mode: 0644]
avalot/sq16.raw [new file with mode: 0644]
avalot/sq17.raw [new file with mode: 0644]
avalot/sq18.raw [new file with mode: 0644]
avalot/sq19.raw [new file with mode: 0644]
avalot/sq2.raw [new file with mode: 0644]
avalot/sq20.raw [new file with mode: 0644]
avalot/sq21.raw [new file with mode: 0644]
avalot/sq22.raw [new file with mode: 0644]
avalot/sq23.raw [new file with mode: 0644]
avalot/sq24.raw [new file with mode: 0644]
avalot/sq25.raw [new file with mode: 0644]
avalot/sq26.raw [new file with mode: 0644]
avalot/sq27.raw [new file with mode: 0644]
avalot/sq28.raw [new file with mode: 0644]
avalot/sq29.raw [new file with mode: 0644]
avalot/sq3.raw [new file with mode: 0644]
avalot/sq30.raw [new file with mode: 0644]
avalot/sq31.raw [new file with mode: 0644]
avalot/sq32.raw [new file with mode: 0644]
avalot/sq33.raw [new file with mode: 0644]
avalot/sq34.raw [new file with mode: 0644]
avalot/sq35.raw [new file with mode: 0644]
avalot/sq36.raw [new file with mode: 0644]
avalot/sq37.raw [new file with mode: 0644]
avalot/sq38.raw [new file with mode: 0644]
avalot/sq39.raw [new file with mode: 0644]
avalot/sq4.raw [new file with mode: 0644]
avalot/sq40.raw [new file with mode: 0644]
avalot/sq41.raw [new file with mode: 0644]
avalot/sq42.raw [new file with mode: 0644]
avalot/sq43.raw [new file with mode: 0644]
avalot/sq44.raw [new file with mode: 0644]
avalot/sq45.raw [new file with mode: 0644]
avalot/sq46.raw [new file with mode: 0644]
avalot/sq47.raw [new file with mode: 0644]
avalot/sq48.raw [new file with mode: 0644]
avalot/sq49.raw [new file with mode: 0644]
avalot/sq5.raw [new file with mode: 0644]
avalot/sq50.raw [new file with mode: 0644]
avalot/sq51.raw [new file with mode: 0644]
avalot/sq52.raw [new file with mode: 0644]
avalot/sq53.raw [new file with mode: 0644]
avalot/sq54.raw [new file with mode: 0644]
avalot/sq55.raw [new file with mode: 0644]
avalot/sq56.raw [new file with mode: 0644]
avalot/sq57.raw [new file with mode: 0644]
avalot/sq58.raw [new file with mode: 0644]
avalot/sq59.raw [new file with mode: 0644]
avalot/sq6.raw [new file with mode: 0644]
avalot/sq60.raw [new file with mode: 0644]
avalot/sq61.raw [new file with mode: 0644]
avalot/sq62.raw [new file with mode: 0644]
avalot/sq63.raw [new file with mode: 0644]
avalot/sq64.raw [new file with mode: 0644]
avalot/sq65.raw [new file with mode: 0644]
avalot/sq66.raw [new file with mode: 0644]
avalot/sq67.raw [new file with mode: 0644]
avalot/sq68.raw [new file with mode: 0644]
avalot/sq69.raw [new file with mode: 0644]
avalot/sq7.raw [new file with mode: 0644]
avalot/sq70.raw [new file with mode: 0644]
avalot/sq71.raw [new file with mode: 0644]
avalot/sq72.raw [new file with mode: 0644]
avalot/sq73.raw [new file with mode: 0644]
avalot/sq74.raw [new file with mode: 0644]
avalot/sq75.raw [new file with mode: 0644]
avalot/sq76.raw [new file with mode: 0644]
avalot/sq77.raw [new file with mode: 0644]
avalot/sq78.raw [new file with mode: 0644]
avalot/sq79.raw [new file with mode: 0644]
avalot/sq8.raw [new file with mode: 0644]
avalot/sq80.raw [new file with mode: 0644]
avalot/sq81.raw [new file with mode: 0644]
avalot/sq82.raw [new file with mode: 0644]
avalot/sq83.raw [new file with mode: 0644]
avalot/sq84.raw [new file with mode: 0644]
avalot/sq85.raw [new file with mode: 0644]
avalot/sq86.raw [new file with mode: 0644]
avalot/sq9.raw [new file with mode: 0644]
avalot/squish.pas [new file with mode: 0644]
avalot/ss1-154.raw [new file with mode: 0644]
avalot/ss1.raw [new file with mode: 0644]
avalot/ss11-162.raw [new file with mode: 0644]
avalot/ss11.raw [new file with mode: 0644]
avalot/ss12-67.raw [new file with mode: 0644]
avalot/ss12.raw [new file with mode: 0644]
avalot/ss13-154.raw [new file with mode: 0644]
avalot/ss13-160.raw [new file with mode: 0644]
avalot/ss13-58.raw [new file with mode: 0644]
avalot/ss13-66.raw [new file with mode: 0644]
avalot/ss13.raw [new file with mode: 0644]
avalot/ss14-151.raw [new file with mode: 0644]
avalot/ss14-160.raw [new file with mode: 0644]
avalot/ss14-162.raw [new file with mode: 0644]
avalot/ss14-166.raw [new file with mode: 0644]
avalot/ss14.raw [new file with mode: 0644]
avalot/ss16.raw [new file with mode: 0644]
avalot/ss2-100.raw [new file with mode: 0644]
avalot/ss2-101.raw [new file with mode: 0644]
avalot/ss2-108.raw [new file with mode: 0644]
avalot/ss2-109.raw [new file with mode: 0644]
avalot/ss2-152.raw [new file with mode: 0644]
avalot/ss2-156.raw [new file with mode: 0644]
avalot/ss2-158.raw [new file with mode: 0644]
avalot/ss2-160.raw [new file with mode: 0644]
avalot/ss2-162.raw [new file with mode: 0644]
avalot/ss2-163.raw [new file with mode: 0644]
avalot/ss2-175.raw [new file with mode: 0644]
avalot/ss2-176.raw [new file with mode: 0644]
avalot/ss2-178.raw [new file with mode: 0644]
avalot/ss2-50.raw [new file with mode: 0644]
avalot/ss2-53.raw [new file with mode: 0644]
avalot/ss2-54.raw [new file with mode: 0644]
avalot/ss2-55.raw [new file with mode: 0644]
avalot/ss2-56.raw [new file with mode: 0644]
avalot/ss2-58.raw [new file with mode: 0644]
avalot/ss2-59.raw [new file with mode: 0644]
avalot/ss2-60.raw [new file with mode: 0644]
avalot/ss2-63.raw [new file with mode: 0644]
avalot/ss2-64.raw [new file with mode: 0644]
avalot/ss2-65.raw [new file with mode: 0644]
avalot/ss2-66.raw [new file with mode: 0644]
avalot/ss2.raw [new file with mode: 0644]
avalot/ss27.raw [new file with mode: 0644]
avalot/ss29.raw [new file with mode: 0644]
avalot/ss3-50.raw [new file with mode: 0644]
avalot/ss3-53.raw [new file with mode: 0644]
avalot/ss3-54.raw [new file with mode: 0644]
avalot/ss3-57.raw [new file with mode: 0644]
avalot/ss3-59.raw [new file with mode: 0644]
avalot/ss3-60.raw [new file with mode: 0644]
avalot/ss3-62.raw [new file with mode: 0644]
avalot/ss3-63.raw [new file with mode: 0644]
avalot/ss3-64.raw [new file with mode: 0644]
avalot/ss3-65.raw [new file with mode: 0644]
avalot/ss3.raw [new file with mode: 0644]
avalot/ss5-2.raw [new file with mode: 0644]
avalot/ss5.raw [new file with mode: 0644]
avalot/ss8-158.raw [new file with mode: 0644]
avalot/ss8.raw [new file with mode: 0644]
avalot/ss_blank.pas [new file with mode: 0644]
avalot/ss_clock.pas [new file with mode: 0644]
avalot/st1.raw [new file with mode: 0644]
avalot/st10.raw [new file with mode: 0644]
avalot/st11.raw [new file with mode: 0644]
avalot/st12.raw [new file with mode: 0644]
avalot/st13.raw [new file with mode: 0644]
avalot/st14.raw [new file with mode: 0644]
avalot/st15.raw [new file with mode: 0644]
avalot/st16.raw [new file with mode: 0644]
avalot/st17.raw [new file with mode: 0644]
avalot/st18.raw [new file with mode: 0644]
avalot/st2.raw [new file with mode: 0644]
avalot/st3.raw [new file with mode: 0644]
avalot/st4.raw [new file with mode: 0644]
avalot/st5.raw [new file with mode: 0644]
avalot/st6.raw [new file with mode: 0644]
avalot/st7.raw [new file with mode: 0644]
avalot/st8.raw [new file with mode: 0644]
avalot/st9.raw [new file with mode: 0644]
avalot/stars.pas [new file with mode: 0644]
avalot/status.pas [new file with mode: 0644]
avalot/sticks.pas [new file with mode: 0644]
avalot/su1.raw [new file with mode: 0644]
avalot/su10.raw [new file with mode: 0644]
avalot/su11.raw [new file with mode: 0644]
avalot/su12.raw [new file with mode: 0644]
avalot/su13.raw [new file with mode: 0644]
avalot/su14.raw [new file with mode: 0644]
avalot/su15.raw [new file with mode: 0644]
avalot/su16.raw [new file with mode: 0644]
avalot/su17.raw [new file with mode: 0644]
avalot/su2.raw [new file with mode: 0644]
avalot/su3.raw [new file with mode: 0644]
avalot/su4.raw [new file with mode: 0644]
avalot/su5.raw [new file with mode: 0644]
avalot/su6.raw [new file with mode: 0644]
avalot/su7.raw [new file with mode: 0644]
avalot/su8.raw [new file with mode: 0644]
avalot/su9.raw [new file with mode: 0644]
avalot/sunrise.pas [new file with mode: 0644]
avalot/sx1.raw [new file with mode: 0644]
avalot/sx10.raw [new file with mode: 0644]
avalot/sx11.raw [new file with mode: 0644]
avalot/sx12.raw [new file with mode: 0644]
avalot/sx13.raw [new file with mode: 0644]
avalot/sx14.raw [new file with mode: 0644]
avalot/sx2.raw [new file with mode: 0644]
avalot/sx3.raw [new file with mode: 0644]
avalot/sx4.raw [new file with mode: 0644]
avalot/sx5.raw [new file with mode: 0644]
avalot/sx6.raw [new file with mode: 0644]
avalot/sx7.raw [new file with mode: 0644]
avalot/sx8.raw [new file with mode: 0644]
avalot/sx9.raw [new file with mode: 0644]
avalot/sz1.raw [new file with mode: 0644]
avalot/sz2.raw [new file with mode: 0644]
avalot/sz3.raw [new file with mode: 0644]
avalot/sz4.raw [new file with mode: 0644]
avalot/sz5.raw [new file with mode: 0644]
avalot/t.txt [new file with mode: 0644]
avalot/tempo.pas [new file with mode: 0644]
avalot/test.pas [new file with mode: 0644]
avalot/test2.pas [new file with mode: 0644]
avalot/testblit.pas [new file with mode: 0644]
avalot/testcard.pas [new file with mode: 0644]
avalot/testenh.pas [new file with mode: 0644]
avalot/text1.scr [new file with mode: 0644]
avalot/text2.scr [new file with mode: 0644]
avalot/text3.scr [new file with mode: 0644]
avalot/thank.you [new file with mode: 0644]
avalot/things.txt [new file with mode: 0644]
avalot/thinks.avd [new file with mode: 0644]
avalot/timeout.pas [new file with mode: 0644]
avalot/travel.pas [new file with mode: 0644]
avalot/trip.pas [new file with mode: 0644]
avalot/trip3.pas [new file with mode: 0644]
avalot/trip42.pas [new file with mode: 0644]
avalot/trip5.pas [new file with mode: 0644]
avalot/trip5tst.pas [new file with mode: 0644]
avalot/trip5xf.pas [new file with mode: 0644]
avalot/tripoop.pas [new file with mode: 0644]
avalot/ttmenu.avd [new file with mode: 0644]
avalot/ttmenuxf.pas [new file with mode: 0644]
avalot/ttsmall.fnt [new file with mode: 0644]
avalot/unsquish.pas [new file with mode: 0644]
avalot/useful.avd [new file with mode: 0644]
avalot/viewdocs.pas [new file with mode: 0644]
avalot/visa.pas [new file with mode: 0644]
avalot/visatest.pas [new file with mode: 0644]
avalot/waver.pas [new file with mode: 0644]
avalot/writestr.com [new file with mode: 0644]
avalot/xf_gover.pas [new file with mode: 0644]
avalot/xf_help.pas [new file with mode: 0644]
avalot/xf_visa.pas [new file with mode: 0644]
avalot/xfbutton.pas [new file with mode: 0644]
avalot/xfghost.pas [new file with mode: 0644]
avalot/zapdraw.pas [new file with mode: 0644]
avalot/zipdesc [new file with mode: 0644]
avalot/zipout.txt [new file with mode: 0644]

diff --git a/README.txt b/README.txt
new file mode 100644 (file)
index 0000000..3d06e65
--- /dev/null
@@ -0,0 +1,9 @@
+This is the source code of Lord Avalot d'Argent version 1.3,
+copyright (c) 1994-1995 by Mike, Mark and Thomas Thurman.
+It is released under the GNU GPL version 2.
+
+Special thanks to Mark Thurman for finding this source dump.
+
+Contact address: thomas@thurman.org.uk
+
+I hope to produce a version with more explanation later.
diff --git a/avalot/! b/avalot/!
new file mode 100644 (file)
index 0000000..a2364f3
--- /dev/null
+++ b/avalot/!
@@ -0,0 +1,25 @@
+First there was Avaricius...   Then, over a thousand years later, there came...\r
+Lord ÄÄÄ-ÄÄ-Ä-Ä--Ä---ù--ù-ù ù  ù   ù        ÜÜÛßßßÛÜÜ\r
+°±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±°ÞÛÛݰ±±±°ÞÛÛ °±±±±±±±±±±±±±±±±±±±±±±°\r
+   ÜÜ         ÜÜÜÜÜÜ         ÜÜ           ÛÛÛ       ÞÛÝ\r
+  ßÛÛÛÜÜÛÛÜ ÛÛßßÛÛßÜÛÛÜÛÛÜ  ßÛÛÛÜÜÛÛÜ  ÜÜÜÛÛÜÜÜÜÜÜ   ÜÜÛÛßÛÛÜÜ    ÜÛÛßßÛÛßßÛÛÜ\r
+   ÜÛß  ßÛÛÝ  ÜÛÛ   ß ÛÛ ß   ÜÛß  ßÛÛÝ ÜÜÜÛÛÜÜÜÜÜÜ  ÛÛß     ßÛÛ   ÛÛ   ÛÛ   ÛÛ\r
+  ÛÛÝ    ÞÛÛ ÞÛÛÝ     ÛÛÜ   ÛÛ     ÞÛÛ    ÛÛÝ      ÛÛÛÛ     ÛÛÛÛ ÛÛÛ   ÛÛ   ÛÛÛ\r
+ ÞÛÛßßßÜÜÛÛÝ ÞÛÛÝ     ÛÛÛ  ÞÛÛßßßÜÜÛÛÝ    ÞÛÛ      ÛÛÛÛ     ÛÛÛÛ  ß    ÛÛ    ß\r
+  ßÛÜ  Ü ÛÛ   ßÛÛ     ÛÛ    ßÛÜ  Ü ÛÛ   ÜÜÜÛÛÝ      ÛÛÜ     ÜÛÛ        ÛÛ\r
+ßÛÜÛß ßÛÜßÛÜß   ßÛÜÜÜÛÛßÛÜßÛÜÛß ßÛÜßÛÜßÛÛ  ÜßÛÛÜÜÜ   ßßÛÛÜÛÛßß      ßÛÜßÛÜÜß\r
+°±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±° ßßß °±±° ßßßßßßßßß °±±±±±±±±±±±±±±±±±±°\r
+Version 1ú2 ÄÄ (c) April 1995     ù   ù  ù ù-ù--ù---Ä--Ä-Ä-ÄÄ-ÄÄÄ-ÄÄÄÄ d'Argent\r
+Mike, Mark and Thomas Thurman             (A Medi‘val Graphical Adventure Game)\r
+\r
+    Welcome  to  the game. If INSTALL.EXE didn't come with this archive, here's\r
+how to unpack the program so that you can begin playing:\r
+\r
+          i) Create a new directory to put Avalot into. (e.g. `MD \AVALOT')\r
+         ii) Move into that directory. (e.g. `CD \AVALOT')\r
+        iii) Run this program again from there, and press `Y'.\r
+\r
+    ONLY  if  you  are  at  stage  three  now,  press  `Y'  to start unpacking.\r
+Otherwise, press `N' now, and go through the steps above.\r
+\r
+    Good luck in the game!                                     Unpack?ÿ\r
diff --git a/avalot/1stoff.pas b/avalot/1stoff.pas
new file mode 100644 (file)
index 0000000..556c237
--- /dev/null
@@ -0,0 +1,52 @@
+program first_off;\r
+uses Crt,Dos;\r
+\r
+var\r
+ cols:array[1..7,1..3] of byte;\r
+ fv:byte;\r
+\r
+procedure adjust;\r
+var\r
+ r:registers;\r
+begin;\r
+ with r do\r
+ begin;\r
+  ax:=$1012;\r
+  bx:=1;\r
+  cx:=2;\r
+  es:=seg(cols);\r
+  dx:=ofs(cols);\r
+\r
+ end;\r
+\r
+ intr($10,r);\r
+end;\r
+\r
+begin;\r
+ textattr:=0;\r
+ clrscr;\r
+\r
+ fillchar(cols,sizeof(cols),#0);\r
+ adjust;\r
+\r
+ gotoxy(29,10); textattr:=1; write('Thorsoft of Letchworth');\r
+ gotoxy(36,12); textattr:=2; write('presents');\r
+\r
+ for fv:=1 to 77 do\r
+ begin;\r
+  delay(77);\r
+  if fv<64 then fillchar(cols[1],3,chr(fv));\r
+  if fv>14 then fillchar(cols[2],3,chr(fv-14));\r
+  adjust;\r
+ end;\r
+\r
+ delay(100);\r
+\r
+ for fv:=63 downto 1 do\r
+ begin;\r
+  fillchar(cols,sizeof(cols),chr(fv));\r
+  delay(37);\r
+  adjust;\r
+ end;\r
+\r
+end.
\ No newline at end of file
diff --git a/avalot/_sound.raw b/avalot/_sound.raw
new file mode 100644 (file)
index 0000000..465d70b
--- /dev/null
@@ -0,0 +1,30 @@
+SOUND\r
+\10 Avalot supports Pro AudioSpectrums, SoundBlasters and\r
+  other sound cards, but in the setup program, you'll need\r
+  to say that you have one and give technical information \r
+  about it before Avalot can use it. If you don't, then \r
+  Avalot will only use the plain PC speaker.\r
+\r
+\10 There are several pieces of music in the game, all\r
+  composed or transcribed by Thomas Thurman:\r
+\r
+Title                  Composer     When it is played\r
+"""""                  """"""""     """""""""""""""""\r
+"Go to Joan Glover"    Traditional  When you read "The story\r
+                                    so far" off the main \r
+                                    menu\r
+\r
+"Home Sweet home"      Traditional  When you return to your\r
+                                    castle\r
+\r
+"The Avalot theme"     T.Thurman    When the credits come up\r
+                                    after the game is\r
+                                    loaded, and the main \r
+                                    menu.\r
+\r
+"King of the Boetians"              When you die in the \r
+                                    game.\r
+\r
+\10 There are also several sound effects in the game.\r
+!\r
+Story\r
diff --git a/avalot/about.avd b/avalot/about.avd
new file mode 100644 (file)
index 0000000..d04897d
Binary files /dev/null and b/avalot/about.avd differ
diff --git a/avalot/access.pas b/avalot/access.pas
new file mode 100644 (file)
index 0000000..be4724a
--- /dev/null
@@ -0,0 +1,158 @@
+{\r
+  ÛßÜ ÛßÜ ÜßßÜ  ßÛß Ûßß  Üß ßÛß      ÜßÛßÜ  ßÛß ÛÜ  Û ÜÛßß  ßÛß ÛßÜ Ûßß Û\r
+  Ûß  ÛÛ  Û  Û Ü Û  Ûßß ßÜ   Û      Û  Û  Û  Û  Û ÛÜÛ  ßßßÜ  Û  ÛÛ  Ûßß Û\r
+  ß   ß ß  ßß   ßß  ßßß   ß  ß      ß  ß  ß ßßß ß  ßß  ßßß   ß  ß ß ßßß ßßß\r
+\r
+                 ACCESS           The temporary Sez handler. }\r
+\r
+unit Access;\r
+\r
+interface\r
+\r
+procedure dixi(p:char; n:byte);\r
+\r
+procedure talkto(whom:byte);\r
+\r
+implementation\r
+\r
+uses Gyro,Scrolls,Acci,Trip5,Lucerna;\r
+\r
+var int_say_went_OK:boolean;\r
+\r
+procedure int_say(filename:string; bubble:boolean);\r
+ { Internal use ONLY! }\r
+var f:file;\r
+begin;\r
+ {$I-}\r
+ assign(f,filename);\r
+ reset(f,1);\r
+ if ioresult<>0 then\r
+ begin;\r
+  int_say_went_OK:=false;\r
+  exit;\r
+ end;\r
+ bufsize:=filesize(f);\r
+ blockread(f,buffer,bufsize);\r
+ if bubble then\r
+ begin;\r
+  inc(bufsize);\r
+  buffer[bufsize]:=^B;\r
+ end;\r
+ close(f);\r
+ {$I+}\r
+\r
+ calldrivers;\r
+\r
+ int_say_went_OK:=true;\r
+end;\r
+\r
+procedure dixi(p:char; n:byte);\r
+begin; HALT(153);\r
+ int_say('s'+p+strf(n)+'.raw',false);\r
+end;\r
+\r
+procedure talkto(whom:byte);\r
+var\r
+ fv:byte;\r
+ no_matches:boolean;\r
+begin; HALT(153);\r
+ if person=pardon then\r
+ begin;\r
+  person:=chr(subjnumber);\r
+  subjnumber:=0;\r
+ end;\r
+\r
+ case chr(whom) of\r
+  pSpludwick:\r
+\r
+    if (dna.Lustie_is_asleep) and (not dna.obj[potion]) then\r
+    begin;\r
+     dixi('q',68);\r
+     dna.obj[potion]:=true;\r
+     objectlist; points(3); exit;\r
+    end else\r
+    begin;\r
+     if dna.Talked_To_Crapulus then\r
+      case dna.given2spludwick of { Spludwick - what does he need? }\r
+         { 0 - let it through to use normal routine. }\r
+         1..2: begin;\r
+                display('Can you get me '+\r
+                 get_better(spludwick_order[dna.given2spludwick])+', please?'+\r
+                  ^s'2'^b);\r
+                exit;\r
+               end;\r
+         3: begin;\r
+             dixi('q',30); { need any help with the game? }\r
+             exit;\r
+            end;\r
+       end\r
+     else dixi('q',42); { Haven't talked to Crapulus. Go and talk to him. }\r
+    end;\r
+\r
+  pIbythneth: if dna.GivenBadgeToIby then\r
+              begin;\r
+               dixi('q',33); { Thanks a lot! }\r
+               exit; { And leave the proc. }\r
+              end; { Or... just continue, 'cos he hasn't got it. }\r
+  pDogfood: if dna.WonNim then\r
+            begin; { We've won the game. }\r
+             dixi('q',6); { "I'm Not Playing!" }\r
+             exit; { Zap back. }\r
+            end;\r
+  pAyles: if not dna.Ayles_is_awake then\r
+          begin;\r
+           dixi('q',43); { He's fast asleep! }\r
+           exit;\r
+          end;\r
+  pGeida: if dna.Geida_given_potion then\r
+           dna.Geida_Follows:=true else\r
+          begin;\r
+           dixi('u',17);\r
+           exit;\r
+          end;\r
+ end;\r
+\r
+ if whom>149 then dec(whom,149);\r
+\r
+ no_matches:=true;\r
+ for fv:=1 to numtr do\r
+  if tr[fv].a.accinum=whom then\r
+  begin;\r
+   display(^S+chr(fv+48)+^D);\r
+   no_matches:=false;\r
+   break;\r
+  end;\r
+\r
+ if no_matches then display(^S^S^D);\r
+\r
+ if subjnumber=0 then { For the moment... later we'll parse "say". }\r
+  int_say('ss'+strf(whom)+'.raw',true)\r
+ else\r
+ begin;\r
+  int_say('ss'+strf(whom)+'-'+strf(subjnumber)+'.raw',true);\r
+  if not int_say_went_OK then { File not found! }\r
+   dixi('n',whom);\r
+ end;\r
+\r
+ case chr(whom+149) of\r
+  pCrapulus:\r
+     begin; { Crapulus: get the badge - first time only }\r
+      dna.obj[badge]:=true;\r
+      objectlist;\r
+      dixi('q',1); { Circular from Cardiff. }\r
+      dna.talked_to_Crapulus:=true;\r
+\r
+      whereis[pCrapulus]:=177; { Crapulus walks off. }\r
+\r
+      tr[2].VanishIfStill:=true;\r
+      tr[2].walkto(4); { Walks away. }\r
+\r
+      points(2);\r
+     end;\r
+\r
+  pAyles: dixi('q',44); { Can you get me a pen? }\r
+\r
+ end;\r
+end;\r
+\r
+end.\r
diff --git a/avalot/acci.pas b/avalot/acci.pas
new file mode 100644 (file)
index 0000000..5ce6be9
--- /dev/null
@@ -0,0 +1,1718 @@
+{  $D-}\r
+{\r
+  ÛßÜ ÛßÜ ÜßßÜ  ßÛß Ûßß  Üß ßÛß      ÜßÛßÜ  ßÛß ÛÜ  Û ÜÛßß  ßÛß ÛßÜ Ûßß Û\r
+  Ûß  ÛÛ  Û  Û Ü Û  Ûßß ßÜ   Û      Û  Û  Û  Û  Û ÛÜÛ  ßßßÜ  Û  ÛÛ  Ûßß Û\r
+  ß   ß ß  ßß   ßß  ßßß   ß  ß      ß  ß  ß ßßß ß  ßß  ßßß   ß  ß ß ßßß ßßß\r
+\r
+                 ACCIDENCE II     The parser. }\r
+unit acci;\r
+\r
+{$V-}\r
+\r
+interface\r
+\r
+const\r
+ { verb codes }\r
+  vb_exam = #1; vb_open = #2; vb_pause = #3; vb_get = #4; vb_drop = #5;\r
+  vb_inv = #6; vb_talk = #7; vb_give = #8; vb_drink = #9; vb_load = #10;\r
+  vb_save = #11; vb_pay = #12; vb_look = #13; vb_break = #14; vb_quit = #15;\r
+  vb_sit = #16; vb_stand = #17; vb_go = #18; vb_info = #19; vb_undress = #20;\r
+  vb_wear = #21; vb_play = #22; vb_ring = #23; vb_help = #24;\r
+  vb_larrypass = #25; vb_phaon = #26; vb_boss = #27; vb_pee = #28;\r
+  vb_cheat = #29; vb_magic = #30; vb_restart = #31; vb_eat = #32;\r
+  vb_listen = #33; vb_buy = #34; vb_attack = #35; vb_password = #36;\r
+  vb_dir = #37; vb_die = #38; vb_score = #39; vb_put = #40;\r
+  vb_kiss = #41; vb_climb = #42; vb_jump = #43; vb_highscores = #44;\r
+  vb_wake = #45; vb_hello = #46; vb_thanks = #47;\r
+\r
+  vb_smartalec = #249; vb_expletive = #253;\r
+\r
+ pardon = #254; { =didn't understand / wasn't given. }\r
+\r
+type\r
+ vocab = record\r
+          n:byte; w:string[11];\r
+         end;\r
+\r
+ ranktype = record\r
+             score:word; title:string[12];\r
+            end;\r
+\r
+\r
+const\r
+ nowords = 277; { how many words does the parser know? }\r
+ nowt = #250;\r
+ moved = #0; { This word was moved. (Usually because it was the subject of\r
+  conversation.) }\r
+\r
+ first_password = 89; { Words[first_password] should equal "TIROS". }\r
+\r
+ words : array[1..nowords] of vocab =\r
+\r
+{ Verbs, 1-49 }\r
+ ((n:  1; w:'EXAMINE'),   (n:  1; w:'READ'),      (n:  1; w:'XAM'), { short }\r
+  (n:  2; w:'OPEN'),      (n:  2; w:'LEAVE'),     (n:  2; w:'UNLOCK'),\r
+  (n:  3; w:'PAUSE'),     (n: 47; w:'TA'), { Early to avoid Take and Talk. }\r
+  (n:  4; w:'TAKE'),      (n:  4; w:'GET'),       (n:  4; w:'PICK'),\r
+  (n:  5; w:'DROP'),      (n:  6; w:'INVENTORY'), (n:  7; w:'TALK'),\r
+  (n:  7; w:'SAY'),       (n:  7; w:'ASK'),\r
+  (n:  8; w:'GIVE'),      (n:  9; w:'DRINK'),     (n:  9; w:'IMBIBE'),\r
+  (n:  9; w:'DRAIN'),     (n: 10; w:'LOAD'),      (n: 10; w:'RESTORE'),\r
+  (n: 11; w:'SAVE'),      (n: 12; w:'BRIBE'),     (n: 12; w:'PAY'),\r
+  (n: 13; w:'LOOK'),      (n: 14; w:'BREAK'),     (n: 15; w:'QUIT'),\r
+  (n: 15; w:'EXIT'),      (n: 16; w:'SIT'),       (n: 16; w:'SLEEP'),\r
+  (n: 17; w:'STAND'),\r
+\r
+  (n: 18; w:'GO'),        (n: 19; w:'INFO'),      (n: 20; w:'UNDRESS'),\r
+  (n: 20; w:'DOFF'),\r
+  (n: 21; w:'DRESS'),     (n: 21; w:'WEAR'),      (n: 21; w:'DON'),\r
+  (n: 22; w:'PLAY'),\r
+  (n: 22; w:'STRUM'),     (n: 23; w:'RING'),      (n: 24; w:'HELP'),\r
+  (n: 25; w:'KENDAL'),    (n: 26; w:'CAPYBARA'),  (n: 27; w:'BOSS'),\r
+  (n:255;w:'NINET'), { block for NINETY }\r
+  (n: 28; w:'URINATE'),   (n: 28; w:'MINGITE'),   (n: 29; w:'NINETY'),\r
+  (n: 30;w:'ABRACADABRA'),(n: 30; w:'PLUGH'),     (n: 30; w:'XYZZY'),\r
+  (n: 30; w:'HOCUS'),     (n: 30; w:'POCUS'),     (n: 30; w:'IZZY'),\r
+  (n: 30; w:'WIZZY'),     (n: 30; w:'PLOVER'),\r
+  (n: 30;w:'MELENKURION'),(n: 30; w:'ZORTON'),    (n: 30; w:'BLERBI'),\r
+  (n: 30; w:'THURB'),     (n: 30; w:'SNOEZE'),    (n: 30; w:'SAMOHT'),\r
+  (n: 30; w:'NOSIDE'),    (n: 30; w:'PHUGGG'),    (n: 30; w:'KNERL'),\r
+  (n: 30; w:'MAGIC'),     (n: 30; w:'KLAETU'),    (n: 30; w:'VODEL'),\r
+  (n: 30; w:'BONESCROLLS'),(n: 30; w:'RADOF'),\r
+\r
+  (n: 31; w:'RESTART'),\r
+  (n: 32; w:'SWALLOW'),   (n: 32; w:'EAT'),       (n: 33; w:'LISTEN'),\r
+  (n: 33; w:'HEAR'),      (n: 34; w:'BUY'),       (n: 34; w:'PURCHASE'),\r
+  (n: 34; w:'ORDER'),     (n: 34; w:'DEMAND'),\r
+  (n: 35; w:'ATTACK'),    (n: 35; w:'HIT'),       (n: 35; w:'KILL'),\r
+  (n: 35; w:'PUNCH'),     (n: 35; w:'KICK'),      (n: 35; w:'SHOOT'),\r
+  (n: 35; w:'FIRE'),\r
+\r
+  { Passwords, 36: }\r
+\r
+  (n: 36; w:'TIROS'),     (n: 36; w:'WORDY'),     (n: 36; w:'STACK'),\r
+  (n: 36; w:'SHADOW'),    (n: 36; w:'OWL'),       (n: 36; w:'ACORN'),\r
+  (n: 36; w:'DOMESDAY'),  (n: 36; w:'FLOPPY'),    (n: 36; w:'DIODE'),\r
+  (n: 36; w:'FIELD'),     (n: 36; w:'COWSLIP'),   (n: 36; w:'OSBYTE'),\r
+  (n: 36; w:'OSCLI'),     (n: 36; w:'TIMBER'),    (n: 36; w:'ADVAL'),\r
+  (n: 36; w:'NEUTRON'),   (n: 36; w:'POSITRON'),  (n: 36; w:'ELECTRON'),\r
+  (n: 36; w:'CIRCUIT'),   (n: 36; w:'AURUM'),     (n: 36; w:'PETRIFY'),\r
+  (n: 36; w:'EBBY'),      (n: 36; w:'CATAPULT'),  (n: 36; w:'GAMERS'),\r
+  (n: 36; w:'FUDGE'),     (n: 36; w:'CANDLE'),    (n: 36; w:'BEEB'),\r
+  (n: 36; w:'MICRO'),     (n: 36; w:'SESAME'),    (n: 36; w:'LORDSHIP'),\r
+\r
+  (n: 37; w:'DIR'),       (n: 37; w:'LS'),        (n: 38; w:'DIE'),\r
+  (n: 39; w:'SCORE'),\r
+  (n: 40; w:'PUT'),       (n: 40; w:'INSERT'),    (n: 41; w:'KISS'),\r
+  (n: 41; w:'SNOG'),      (n: 41; w:'CUDDLE'),    (n: 42; w:'CLIMB'),\r
+  (n: 42; w:'CLAMBER'),   (n: 43; w:'JUMP'),      (n: 44; w:'HIGHSCORES'),\r
+  (n: 44; w:'HISCORES'),  (n: 45; w:'WAKEN'),     (n: 45; w:'AWAKEN'),\r
+  (n: 46; w:'HELLO'),     (n: 46; w:'HI'),        (n: 46; w:'YO'),\r
+  (n: 47; w:'THANKS'),  { = 47, "ta", which was defined earlier. }\r
+\r
+\r
+{ Nouns - Objects: 50-100. }\r
+\r
+  (n: 50; w:'WINE'),      (n: 50; w:'BOOZE'),    (n: 50;w:'NASTY'),\r
+  (n: 50; w:'VINEGAR'),   (n: 51; w:'MONEYBAG'),\r
+  (n: 51; w:'BAG'),       (n: 51; w:'CASH'),     (n: 51;w:'DOSH'),\r
+  (n: 51; w:'WALLET'),\r
+  (n: 52; w:'BODKIN'),    (n: 52; w:'DAGGER'),   (n: 53;w:'POTION'),\r
+  (n: 54; w:'CHASTITY'),  (n: 54; w:'BELT'),     (n: 55;w:'BOLT'),\r
+  (n: 55; w:'ARROW'),     (n: 55; w:'DART'),\r
+  (n: 56; w:'CROSSBOW'),  (n: 56; w:'BOW'),      (n: 57;w:'LUTE'),\r
+  (n: 58; w:'PILGRIM'),   (n: 58; w:'BADGE'),    (n: 59;w:'MUSHROOMS'),\r
+  (n: 59; w:'TOADSTOOLS'),(n: 60; w:'KEY'),      (n: 61;w:'BELL'),\r
+  (n: 62; w:'PRESCRIPT'), (n: 62; w:'SCROLL'),   (n: 62;w:'MESSAGE'),\r
+  (n: 63; w:'PEN'),       (n: 63; w:'QUILL'),    (n: 64;w:'INK'),\r
+  (n: 64; w:'INKPOT'),    (n: 65; w:'CLOTHES'),  (n: 66;w:'HABIT'),\r
+  (n: 66; w:'DISGUISE'),  (n: 67; w:'ONION'),\r
+\r
+  (n: 99;w:'PASSWORD'),\r
+\r
+{ Objects from Also are placed between 101 and 131. }\r
+\r
+{ Nouns - People - Male, 150-174 }\r
+  (n:150; w:'AVVY'),      (n:150;w:'AVALOT'),    (n:150;w:'YOURSELF'),\r
+  (n:150; w:'ME'),        (n:150;w:'MYSELF'),    (n:151;w:'SPLUDWICK'),\r
+  (n:151; w:'THOMAS'),    (n:151;w:'ALCHEMIST'), (n:151;w:'CHEMIST'),\r
+  (n:152; w:'CRAPULUS'),  (n:152;w:'SERF'),      (n:152;w:'SLAVE'),\r
+  (n:158; w:'DU'),  { <<< Put in early for Baron DU Lustie to save confusion with Duck & Duke.}\r
+  (n:152; w:'CRAPPY'),    (n:153;w:'DUCK'),      (n:153;w:'DOCTOR'),\r
+  (n:154; w:'MALAGAUCHE'),\r
+  (n:155; w:'FRIAR'),     (n:155;w:'TUCK'),      (n:156;w:'ROBIN'),\r
+  (n:156; w:'HOOD'),      (n:157;w:'CWYTALOT'),  (n:157;w:'GUARD'),\r
+  (n:157; w:'BRIDGEKEEP'),(n:158;w:'BARON'),     (n:158;w:'LUSTIE'),\r
+  (n:159; w:'DUKE'),      (n:159;w:'GRACE'),     (n:160;w:'DOGFOOD'),\r
+  (n:160; w:'MINSTREL'),  (n:161;w:'TRADER'),    (n:161;w:'SHOPKEEPER'),\r
+  (n:161;w:'STALLHOLDER'),\r
+  (n:162; w:'PILGRIM'),   (n:162;w:'IBYTHNETH'), (n:163;w:'ABBOT'),\r
+  (n:163; w:'AYLES'),     (n:164;w:'PORT'),      (n:165;w:'SPURGE'),\r
+  (n:166; w:'JACQUES'),   (n:166;w:'SLEEPER'),   (n:166;w:'RINGER'),\r
+\r
+{ Nouns- People - Female: 175-199 }\r
+  (n:175; w:'WIFE'),      (n:175;w:'ARKATA'),    (n:176;w:'GEDALODAVA'),\r
+  (n:176; w:'GEIDA'),     (n:176;w:'PRINCESS'),  (n:178;w:'WISE'),\r
+  (n:178; w:'WITCH'),\r
+\r
+{ Pronouns, 200-224 }\r
+  (n:200; w:'HIM'),       (n:200;w:'MAN'),       (n:200;w:'GUY'),\r
+  (n:200; w:'DUDE'),      (n:200;w:'CHAP'),      (n:200;w:'FELLOW'),\r
+  (n:201; w:'HER'),       (n:201;w:'GIRL'),      (n:201;w:'WOMAN'),\r
+  (n:202; w:'IT'),        (n:202;w:'THING'),\r
+\r
+  (n:203;w:'MONK'),       (n:204;w:'BARMAN'),    (n:204;w:'BARTENDER'),\r
+\r
+{ Prepositions, 225-249 }\r
+  (n:225; w:'TO'),        (n:226;w:'AT'),        (n:227;w:'UP'),\r
+  (n:228; w:'INTO'),      (n:228;w:'INSIDE'),    (n:229;w:'OFF'),\r
+  (n:230; w:'UP'),        (n:231;w:'DOWN'),      (n:232;w:'ON'),\r
+\r
+\r
+{ Please, 251 }\r
+  (n:251; w:'PLEASE'),\r
+\r
+{ About, 252 }\r
+  (n:252; w:'ABOUT'), (n:252; w:'CONCERNING'),\r
+\r
+{ Swear words, 253 }\r
+        {              I M P O R T A N T    M E S S A G E\r
+\r
+          DO *NOT* READ THE LINES BELOW IF YOU ARE OF A SENSITIVE\r
+          DISPOSITION. THOMAS IS *NOT* RESPONSIBLE FOR THEM.\r
+          GOODNESS KNOWS WHO WROTE THEM.\r
+          READ THEM AT YOUR OWN RISK. BETTER STILL, DON'T READ THEM.\r
+          WHY ARE YOU SNOOPING AROUND IN MY PROGRAM, ANYWAY? }\r
+\r
+  (n:253; w:'SHIT'),      (n:28 ;w:'PISS'),    (n:28 ;w:'PEE'),\r
+  (n:253; w:'FART'),      (n:253;w:'FUCK'),    (n:253;w:'BALLS'),\r
+  (n:253; w:'BLAST'),     (n:253;w:'BUGGER'),  (n:253;w:'KNICKERS'),\r
+  (n:253; w:'BLOODY'),    (n:253;w:'HELL'),    (n:253;w:'DAMN'),\r
+  (n:253; w:'SMEG'),\r
+    { and other even ruder words. You didn't read them, did you? Good. }\r
+\r
+{ Answer-back smart-alec words, 249 }\r
+  (n:249; w:'YES'),       (n:249;w:'NO'),        (n:249;w:'BECAUSE'),\r
+\r
+{ Noise words, 255 }\r
+  (n:255; w:'THE'),       (n:255;w:'A'),         (n:255;w:'NOW'),\r
+  (n:255; w:'SOME'),      (n:255;w:'AND'),       (n:255;w:'THAT'),\r
+  (n:255; w:'POCUS'),     (n:255;w:'HIS'),       \r
+  (n:255; w:'THIS'),      (n:255;w:'SENTINEL')); { for "Ken SENT Me" }\r
+\r
+ what = 'That''s not possible!';\r
+\r
+ const ranks: array[1..9] of ranktype =\r
+   ((score:   0; title: 'Beginner'),    (score:  10; title: 'Novice'),\r
+    (score:  20; title: 'Improving'),   (score:  35; title: 'Not bad'),\r
+    (score:  50; title: 'Passable'),    (score:  65; title: 'Good'),\r
+    (score:  80; title: 'Experienced'), (score: 108; title: 'The BEST!'),\r
+    (score:maxint; title:'copyright''93'));\r
+\r
+var\r
+ thats:string[11];\r
+ unknown:string[20];\r
+ realwords:array[1..11] of string[20];\r
+ verb,person,thing,thing2:char;\r
+ polite:boolean;\r
+\r
+procedure clearwords;\r
+procedure parse;\r
+procedure lookaround;\r
+procedure opendoor;\r
+procedure do_that;\r
+procedure verbopt(n:char; var answer:string; var anskey:char);\r
+procedure have_a_drink;\r
+\r
+implementation\r
+uses Gyro,Lucerna,Scrolls,Pingo,Trip5,Visa,Enid,NimUnit,Timeout,Celer,\r
+      Highs,Helper,Sequence;\r
+\r
+var\r
+ fv:byte;\r
+\r
+function wordnum(x:string):string;\r
+var whatsit:char; fv:word; gotcha:boolean;\r
+\r
+  procedure checkword; { Checks word "fv". }\r
+  begin\r
+   with words[fv] do\r
+   begin\r
+    if (w=x) or ((copy(w,1,length(x))=x) and not gotcha)\r
+     then whatsit:=chr(n);\r
+    if w=x then gotcha:=true;\r
+   end;\r
+  end;\r
+\r
+begin\r
+ if x='' then begin wordnum:=''; exit; end;\r
+ whatsit:=pardon; gotcha:=false;\r
+ for fv:=nowords downto 1 do checkword;\r
+ wordnum:=whatsit;\r
+end;\r
+\r
+procedure replace(old1,new1:string);\r
+var q:byte;\r
+begin\r
+ q:=pos(old1,thats);\r
+ while q<>0 do\r
+ begin\r
+  thats:=copy(thats,1,q-1)+new1+copy(thats,q+length(old1),255);\r
+  q:=pos(old1,thats);\r
+ end;\r
+end;\r
+\r
+(*procedure ninetydump;\r
+var f:file; y:integer; bit:byte; a:byte absolute $A000:800;\r
+begin\r
+ off;\r
+ assign(f,'avvydump.avd');\r
+ rewrite(f,1);\r
+ blockwrite(f,dna,177); { just anything }\r
+ for bit:=0 to 3 do\r
+ begin\r
+  port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1 shl bit; port[$3CF]:=bit;\r
+  blockwrite(f,a,12080);\r
+ end;\r
+ close(f); on;\r
+ display('Dumped.');\r
+end;*)\r
+\r
+function rank:string;\r
+var fv:byte;\r
+begin\r
+ for fv:=1 to 8 do\r
+  if (dna.score>=ranks[fv].score)\r
+   and (dna.score<ranks[fv+1].score) then\r
+   begin\r
+    rank:=ranks[fv].title;\r
+    exit;\r
+   end;\r
+end;\r
+\r
+function totaltime:string;\r
+const ticks_in_1_sec = 65535/3600;\r
+var\r
+ h,m,s:word; a:string[70];\r
+begin\r
+  { There are 65535 clock ticks in a second,\r
+    1092.25 in a minute, and\r
+    65535 in an hour. }\r
+ h:=trunc(dna.total_time/ticks_in_1_sec); { No. of seconds. }\r
+ m:=h mod 3600; h:=h div 3600;\r
+ s:=m mod 60;   m:=m div 60;\r
+\r
+ a:='You''ve been playing for ';\r
+\r
+ if h>0 then a:=a+strf(h)+' hours, ';\r
+ if (m>0) or (h<>0) then a:=a+strf(m)+' minutes and ';\r
+ a:=a+strf(s)+' seconds.';\r
+\r
+ totaltime:=a;\r
+end;\r
+\r
+procedure cheatparse(codes:string);\r
+var cmd:char; num:word; se,sx,sy:integer; e:integer;\r
+  procedure number;\r
+  begin\r
+   val(codes,num,e);\r
+  end;\r
+begin\r
+ if not cheat then\r
+ begin { put them off the scent! }\r
+  display('Have you gone dotty??!');\r
+  exit;\r
+ end;\r
+ cmd:=upcase(codes[2]); delete(codes,1,2); { strip header }\r
+ display(^f'Ninety: '^r^d);\r
+ case cmd of\r
+  'R': begin\r
+        number; if e<>0 then exit;\r
+        display('room swap to '+codes+'.');\r
+        fliproom(num,1);\r
+       end;\r
+  'Z': begin zonk; display('Zonk OK!'); end;\r
+  'W': begin wobble; display('Ow my head!'); end;\r
+  'A': begin\r
+        tr[1].done;\r
+        tr[1].init(1,true);\r
+        dna.user_moves_avvy:=true;\r
+        alive:=true;\r
+        display('Reincat.');\r
+       end;\r
+  'B': begin\r
+        sx:=tr[1].x;\r
+        sy:=tr[1].y;\r
+        se:=tr[1].face;\r
+        delavvy;\r
+        number;\r
+        with tr[1] do\r
+        begin\r
+         Done;\r
+         Init(num,true);\r
+         display('Become '+codes+':'+^m^m+a.name+^m+a.comment);\r
+         appear(sx,sy,se);\r
+        end;\r
+       end;\r
+(*  'D': ninetydump;*)\r
+  'G': play_Nim;\r
+  '±': display(^s'2'^u);\r
+  else display('unknown code!');\r
+ end;\r
+end;\r
+\r
+procedure punctustrip(var x:string); { Strips punctuation from x. }\r
+const punct : string[32] = '~`!@#$%^&*()_+-={}[]:"|;''\,./<>?';\r
+var fv,p:byte;\r
+begin\r
+ for fv:=1 to 32 do\r
+  repeat\r
+   p:=pos(punct[fv],x);\r
+   if p=0 then break; { <<< The first time I've ever used it! }\r
+   delete(x,p,1);\r
+  until false;\r
+end;\r
+\r
+function do_pronouns:boolean;\r
+var fv:byte; ambiguous:boolean;\r
+  procedure displaywhat(ch:char; animate:boolean); { << it's an adjective! }\r
+  var ff:byte; z:string;\r
+  begin\r
+   if ch=pardon then\r
+   begin\r
+    ambiguous:=true;\r
+    if animate then display('Whom?') else display('What?');\r
+   end else\r
+   begin\r
+    if animate then display('{ '+getname(ch)+' }')\r
+     else\r
+     begin\r
+       z:=get_better(ch);\r
+       if z<>'' then display('{ '+z+' }');\r
+     end;\r
+   end;\r
+  end;\r
+begin\r
+ ambiguous:=false;\r
+ for fv:=1 to length(thats) do\r
+  case thats[fv] of\r
+   #200: begin\r
+          displaywhat(him,true);\r
+          thats[fv]:=him;\r
+         end;\r
+   #201: begin\r
+          displaywhat(her,true);\r
+          thats[fv]:=her;\r
+         end;\r
+   #202: begin\r
+          displaywhat(it,false);\r
+          thats[fv]:=it;\r
+         end;\r
+  end;\r
+ do_pronouns:=ambiguous;\r
+end;\r
+\r
+procedure store_interrogation(interrogation:byte);\r
+var fv:byte;\r
+\r
+  procedure lowercase;\r
+  var fv:byte;\r
+  begin\r
+   for fv:=1 to length(current) do\r
+    if current[fv] in ['A'..'Z'] then\r
+     inc(current[fv],32);\r
+  end;\r
+\r
+  procedure propernouns;\r
+  var fv:byte;\r
+  begin\r
+   lowercase;\r
+   for fv:=2 to length(current)-1 do\r
+    if current[fv]=' ' then\r
+     current[fv+1]:=upcase(current[fv+1]);\r
+   current[1]:=upcase(current[1]);\r
+  end;\r
+\r
+  procedure sayit; { This makes Avalot say the response. }\r
+  var x:string;\r
+  begin\r
+   x:=current; x[1]:=upcase(x[1]);\r
+   display(^s'1'+x+'.'+^b+^s+'2');\r
+  end;\r
+\r
+begin\r
+ if current='' then exit;\r
+\r
+ { Strip current: }\r
+ while (current[1]=' ') and (current<>'') do delete(current,1,1);\r
+ while (current[length(current)]=' ') and (current<>'') do dec(current[0]);\r
+\r
+ lose_timer(reason_CardiffSurvey); { if you want to use any other timer,\r
+  put this into the case statement. }\r
+ with dna do\r
+  case interrogation of\r
+   1: begin\r
+       lowercase; sayit;\r
+       like2drink:=current;\r
+       dna.cardiff_things:=2;\r
+      end;\r
+   2: begin\r
+       propernouns; sayit;\r
+       favourite_song:=current;\r
+       dna.cardiff_things:=3;\r
+      end;\r
+   3: begin\r
+       propernouns; sayit;\r
+       worst_place_on_earth:=current;\r
+       dna.cardiff_things:=4;\r
+      end;\r
+   4: begin\r
+       lowercase; sayit;\r
+       fillchar(spare_evening,sizeof(spare_evening),#177);\r
+       spare_evening:=current;\r
+       dixi('z',5); { His closing statement... }\r
+       tr[2].walkto(4); { The end of the drawbridge }\r
+       tr[2].VanishIfStill:=true; { Then go away! }\r
+       magics[2].op:=nix;\r
+       dna.cardiff_things:=5;\r
+      end;\r
+\r
+   99: store_high(current);\r
+  end;\r
+ if interrogation<4 then Cardiff_survey;\r
+end;\r
+\r
+procedure clearwords;\r
+begin\r
+ fillchar(realwords,sizeof(realwords),#0);\r
+end;\r
+\r
+procedure parse;\r
+var n,fv,ff:byte; c,cc,thisword:string; answer:string[1]; notfound:boolean;\r
+begin\r
+ { first parsing - word identification }\r
+\r
+ thats:=''; c:=current+#32; n:=1; polite:=false;\r
+ verb:=pardon; thing:=pardon; thing2:=pardon; person:=pardon;\r
+ clearwords;\r
+ if current[1]='.' then\r
+ begin { a cheat mode attempt }\r
+  cheatparse(current); thats:=nowt; exit;\r
+ end; { not our department! Otherwise... }\r
+\r
+ { Are we being interrogated right now? }\r
+\r
+ if interrogation>0 then\r
+ begin\r
+  store_interrogation(interrogation);\r
+  weirdword:=true;\r
+  exit;\r
+ end;\r
+\r
+ cc:=c; for fv:=1 to length(c) do c[fv]:=upcase(c[fv]);\r
+ while c<>'' do\r
+ begin\r
+   while (c[1]=#32) and (c<>'') do\r
+     begin delete(c,1,1); delete(cc,1,1); end;\r
+  thisword:=copy(c,1,pos(#32,c)-1);\r
+  realwords[n]:=copy(cc,1,pos(#32,cc)-1);\r
+  punctustrip(c);\r
+\r
+  notfound:=true;\r
+\r
+  if thisword<>'' then\r
+  begin\r
+   for ff:=1 to 30 do\r
+   begin { Check Also, FIRST! }\r
+    if pos(','+thisword,also[ff,0]^)>0 then\r
+    begin\r
+     thats:=thats+chr(99+ff);\r
+     notfound:=false;\r
+    end;\r
+   end;\r
+  end;\r
+\r
+  if notfound then\r
+  begin\r
+   answer:=wordnum(thisword);\r
+   if answer=pardon then\r
+   begin\r
+    notfound:=true;\r
+    thats:=thats+pardon;\r
+   end else\r
+    thats:=thats+wordnum(thisword);\r
+   inc(n);\r
+  end;\r
+  delete(c,1,pos(#32,c)); delete(cc,1,pos(#32,cc));\r
+ end;\r
+\r
+ if pos(#254,thats)>0 then unknown:=realwords[pos(#254,thats)] else unknown:=''; replace(#255,''); { zap noise words }\r
+ replace(#13+#226,#1); { "look at" = "examine" }\r
+ replace(#13+#228,#1); { "look in" = "examine" }\r
+ replace(#4+#227,#17); { "get up" = "stand" }\r
+ replace(#4+#231,#17); { "get down" = "stand"... well, why not? }\r
+ replace(#18+#228,#2); { "go in" = "open [door]" }\r
+ replace(#28+#229,#253); { "P' off" is a swear word }\r
+ replace(#4+#6,#6); { "Take inventory" (remember Colossal Adventure?) }\r
+ replace(#40+#232,#21); { "put on" = "don" }\r
+ replace(#4+#229,#20); { "take off" = "doff" }\r
+\r
+ with dna do { Words that could mean more than one person }\r
+ begin\r
+  if room=r__NottsPub then replace(#204,#164) { Barman = Port }\r
+   else replace(#204,#154);                   { Barman = Malagauche }\r
+  case room of\r
+   r__AylesOffice: replace(#203,#163);        { Monk = Ayles }\r
+   r__MusicRoom: replace(#203,#166);          { Monk = Jacques }\r
+   else replace(#203,#162);                   { Monk = Ibythneth }\r
+  end;\r
+ end;\r
+\r
+ if do_pronouns then\r
+ begin\r
+  weirdword:=true;\r
+  thats:=nowt;\r
+  exit;\r
+ end;\r
+\r
+ { second parsing - accidence }\r
+\r
+ subject:=''; subjnumber:=0; { Find subject of conversation. }\r
+ for fv:=1 to 11 do\r
+  if realwords[fv,1] in ['`',''''] then\r
+  begin\r
+   subjnumber:=ord(thats[fv]);\r
+   thats[fv]:=moved;\r
+   break; { Only the second time I've used that! }\r
+  end;\r
+ if subjnumber=0 then { Still not found. }\r
+  for fv:=1 to 10 do\r
+   if thats[fv]=#252 then { the word is "about", or something similar }\r
+   begin\r
+    subjnumber:=ord(thats[fv+1]);\r
+    thats[fv+1]:=#0;\r
+    break; { ...Third! }\r
+   end;\r
+ if subjnumber=0 then { STILL not found! Must be the word after "say". }\r
+  for fv:=1 to 10 do\r
+   if (thats[fv]=#7) and not (thats[fv+1] in [#0,#225..#229]) then\r
+   begin { SAY not followed by a preposition }\r
+    subjnumber:=ord(thats[fv+1]);\r
+    thats[fv+1]:=#0;\r
+    break; { ...Fourth! }\r
+   end;\r
+\r
+ for fv:=length(thats) downto 1 do { Reverse order- so first'll be used }\r
+  case thats[fv] of\r
+   #1..#49,#253,#249: verb:=thats[fv];\r
+   #50..#149: begin thing2:=thing; thing:=thats[fv]; end;\r
+   #150..#199: person:=thats[fv];\r
+   #251: polite:=true;\r
+  end;\r
+\r
+ if (unknown<>'') and not\r
+  (verb in [vb_exam,vb_talk,vb_save,vb_load,vb_dir]) then\r
+ begin\r
+  display('Sorry, but I have no idea what `'+unknown+\r
+    '" means. Can you rephrase it?');\r
+  weirdword:=true;\r
+ end else weirdword:=false;\r
+ if thats='' then thats:=nowt;\r
+\r
+ if thing<>pardon then it:=thing;\r
+ if person<>pardon then\r
+ begin\r
+  if person<#175 then him:=person else her:=person;\r
+ end;\r
+end;\r
+\r
+procedure examobj; { Examine a standard object-thing }\r
+begin\r
+ if thing<>thinks then thinkabout(thing,a_thing);\r
+ with dna do\r
+  case thing of\r
+   wine : case winestate of\r
+         { 4 is perfect wine. 0 is not holding the wine. }\r
+           1: dixi('t',1); { Normal examine wine scroll }\r
+           2: dixi('d',6); { Bad wine }\r
+           3: dixi('d',7); { Vinegar }\r
+          end;\r
+   onion: if rotten_onion then\r
+           dixi('q',21) { Yucky onion. }\r
+          else\r
+           dixi('t',18); { Normal onion scroll }\r
+  else\r
+   dixi('t',ord(thing)); { <<< Ordinarily }\r
+  end;\r
+end;\r
+\r
+function personshere:boolean; { Person equivalent of "holding" }\r
+begin\r
+ if (person=pardon) or (person=#0)\r
+   or (whereis[person]=dna.room) then personshere:=true\r
+ else begin\r
+  if person<#175 then display('H'^d) else display('Sh'^d);\r
+  display('e isn''t around at the moment.');\r
+  personshere:=false;\r
+ end;\r
+end;\r
+\r
+procedure exampers;\r
+begin\r
+ if personshere then\r
+ begin\r
+  if thing<>thinks then thinkabout(person,a_person);\r
+  dec(person,149);\r
+  with dna do\r
+   case person of { Special cases }\r
+    #11: if wonNim then\r
+         begin\r
+          dixi('Q',8); { "I'm Not Playing!" }\r
+          exit;\r
+         end;\r
+    #9: if Lustie_is_asleep then\r
+        begin dixi('Q',65); { He's asleep. (65! Wow!) } exit; end;\r
+   end;\r
+   { Otherwise... } dixi('p',ord(person));\r
+ end; { And afterwards... }\r
+ case person of\r
+  #14: if not dna.Ayles_is_awake then dixi('Q',13); { u.f.s.? }\r
+ end;\r
+end;\r
+\r
+function holding:boolean;\r
+begin\r
+ if thing in [#51..#99] then begin holding:=true; exit; end; { Also }\r
+ holding:=false;\r
+ if thing>#100 then display('Be reasonable!') else\r
+  if not dna.obj[thing] then { verbs that need "thing" to be in the inventory }\r
+   display('You''re not holding it, Avvy.') else\r
+    holding:=true;\r
+end;\r
+\r
+procedure examine;\r
+  procedure special(before:boolean);\r
+  begin\r
+   case dna.room of\r
+    r__Yours: case thing of\r
+               #54: if before then show_one(5) else show_one(6);\r
+              end;\r
+   end;\r
+  end;\r
+begin\r
+ { Examine. EITHER it's an object OR it's an Also OR it's a person OR\r
+    it's something else. }\r
+ if (person=pardon) and (thing<>pardon) then\r
+ begin\r
+  if holding then\r
+   case thing of { remember it's been Slipped- ie subtract 49 }\r
+       #1..#49 : examobj; { Standard object }\r
+     #50..#100 : begin\r
+                  special(true);\r
+                  display(also[ord(thing)-50,1]^); { Also thing }\r
+                  special(false);\r
+                 end;\r
+   end\r
+ end else\r
+  if (person<>pardon) then exampers\r
+   else display('It''s just as it looks on the picture.'); { don't know- guess }\r
+end;\r
+\r
+procedure inv; { the time-honoured command... }\r
+var fv:char; q:byte;\r
+begin\r
+ q:=0; display('You''re carrying '+^d);\r
+ with dna do\r
+ begin\r
+  for fv:=#1 to numobjs do\r
+   if obj[fv] then\r
+   begin\r
+    inc(q); if q=carrying then display('and '+^d);\r
+    display(get_better(fv)+^d);\r
+    if fv=wearing then display(', which you''re wearing'+^d);\r
+     if q<carrying then display(', '+^d);\r
+   end;\r
+  if wearing=nowt then display('...'^m^m'...and you''re stark naked!') else\r
+   display('.');\r
+ end;\r
+end;\r
+\r
+procedure swallow; { Eat something. }\r
+begin\r
+ case thing of\r
+  wine: case dna.winestate of\r
+         { 4 is perfect }\r
+          1: begin\r
+              if dna.teetotal then begin dixi('D',6); exit; end;\r
+              dixi('U',1); wobble; dixi('U',2);\r
+              dna.obj[wine]:=false; objectlist;\r
+              have_a_drink;\r
+             end;\r
+          2,3: dixi('d',8); { You can't drink it! }\r
+         end;\r
+  potion: begin background(4); dixi('U',3); gameover; background(0); end;\r
+  ink: dixi('U',4);\r
+  chastity: dixi('U',5);\r
+  mushroom: begin\r
+             dixi('U',6);\r
+             gameover;\r
+            end;\r
+  onion: if dna.rotten_onion then dixi('U',11)\r
+         else begin\r
+          dixi('U',8);\r
+          dna.obj[onion]:=false;\r
+          objectlist;\r
+         end;\r
+  else\r
+    if dna.room in [r__ArgentPub,r__NottsPub] then\r
+      display('Try BUYing things before you drink them!')\r
+    else\r
+      display('The taste of it makes you retch!');\r
+         { Constant- leave this one }\r
+ end;\r
+end;\r
+\r
+procedure others;\r
+ { This lists the other people in the room. }\r
+var\r
+ fv:char;\r
+ num_people,this_person,here:byte;\r
+begin\r
+\r
+ num_people:=0;\r
+ this_person:=0;\r
+ here:=dna.room;\r
+\r
+ for fv:=#151 to #178 do { Start at 151 so we don't list Avvy himself! }\r
+  if whereis[fv]=here then\r
+   inc(num_people);\r
+\r
+ { If nobody's here, we can cut out straight away. }\r
+\r
+ if num_people=0 then exit; { Leave the procedure. }\r
+\r
+ for fv:=#151 to #178 do\r
+  if whereis[fv]=here then\r
+  begin\r
+   inc(this_person);\r
+   if this_person=1 then { First on the list. }\r
+    display(getname(fv)+^d) else\r
+    if this_person<num_people then { The middle... }\r
+     display(', '+getname(fv)+^d) else\r
+      display(' and '+getname(fv)+^d); { The end. }\r
+  end;\r
+\r
+ if num_people=1 then display(' is'^d) else display(' are'^d);\r
+\r
+ display(' here.'); { End and display it. }\r
+end;\r
+\r
+procedure lookaround;\r
+{ This is called when you say "look." }\r
+begin\r
+ display(also[0,1]^);\r
+ case dna.room of\r
+  r__Spludwicks: if dna.Avaricius_talk>0 then dixi('q',23) else others;\r
+  r__Robins: begin\r
+              if dna.tied_up then dixi('q',38);\r
+              if dna.Mushroom_Growing then dixi('q',55);\r
+             end;\r
+  r__InsideCardiffCastle: if not dna.taken_pen then dixi('q',49);\r
+  r__LustiesRoom: if dna.Lustie_is_asleep then dixi('q',65);\r
+  r__Catacombs: case (dna.cat_y*256+dna.cat_x) of\r
+                 258 : dixi('q',80); { Inside art gallery }\r
+                 514 : dixi('q',81); { Outside ditto }\r
+                 260 : dixi('q',82); { Outside Geida's room. }\r
+                end;\r
+  else others;\r
+ end;\r
+end;\r
+\r
+procedure opendoor; { so whaddya THINK this does?! }\r
+var fv:byte;\r
+begin\r
+ case dna.room of   { Special cases. }\r
+   r__Yours: if infield(2) then\r
+             begin { Opening the box. }\r
+              thing:=#54; { The box. } person:=pardon;\r
+              examine;\r
+              exit;\r
+             end;\r
+   r__Spludwicks: if thing=#61 then begin\r
+                    dixi('q',85);\r
+                    exit;\r
+                  end;\r
+ end;\r
+\r
+\r
+ if (not dna.user_moves_Avvy) and (dna.room<>r__Lusties)\r
+   then exit; { No doors can open if you can't move Avvy. }\r
+ for fv:=9 to 15 do\r
+  if infield(fv) then\r
+  begin\r
+   with portals[fv] do\r
+    case op of\r
+     exclaim: begin tr[1].bounce; dixi('x',data); end;\r
+     transport: fliproom(hi(data),lo(data));\r
+     unfinished: begin\r
+                  tr[1].bounce;\r
+                  display(#7'Sorry.'^c^m'This place is not available yet!');\r
+                 end;\r
+     special: call_special(data);\r
+     Mopendoor: open_the_door(hi(data),lo(data),fv);\r
+    end;\r
+    exit;\r
+   end;\r
+ if dna.room=r__Map then\r
+  display('Avvy, you can complete the whole game without ever going '+\r
+                 'to anywhere other than Argent, Birmingham, Cardiff, '+\r
+                 'Nottingham and Norwich.')\r
+ else display('Door? What door?');\r
+end;\r
+\r
+procedure putproc; { Called when you call vb_put. }\r
+var temp:char;\r
+\r
+ procedure silly;\r
+ begin\r
+  display('Don''t be silly!');\r
+ end;\r
+\r
+begin\r
+ if not holding then exit;\r
+ dec(thing2,49); { Slip the second object }\r
+ temp:=thing; thing:=thing2; if not holding then exit;\r
+ thing:=temp;\r
+\r
+ { Thing is the thing which you're putting in. Thing2 is where you're\r
+   putting it. }\r
+ with dna do { Convenience thing. }\r
+  case thing2 of\r
+   wine: if thing=onion then\r
+         begin\r
+          if dna.rotten_onion then\r
+          display('That''s a bit like shutting the stable door after the '+\r
+                   'horse has bolted!')\r
+          else begin { Put onion into wine? }\r
+           if dna.winestate<>3 then\r
+            display(^f'Oignon au vin'^r' is a bit too strong for your tastes!')\r
+           else begin { Put onion into vinegar! Yes! }\r
+            onion_in_vinegar:=true;\r
+            points(7);\r
+            dixi('u',9);\r
+           end;\r
+          end;\r
+         end else silly;\r
+\r
+    #54: if (room=1) then { Put something into the box. }\r
+         begin\r
+          if box_contents<>nowt then\r
+           display('There''s something in the box already, Avvy. Try taking'+\r
+            ' that out first.')\r
+          else\r
+           case thing of\r
+            money: display('You''d better keep some ready cash on you!');\r
+            bell: display('That''s a silly place to keep a bell.');\r
+            bodkin: display('But you might need it!');\r
+            onion: display('Just give it to Spludwick, Avvy!');\r
+            else\r
+            begin { Put the object into the box... }\r
+             if wearing=thing then\r
+              display('You''d better take '+get_better(thing)+' off first!')\r
+             else\r
+             begin\r
+              show_one(5); { Open box. }\r
+              box_contents:=thing;\r
+              dna.obj[thing]:=false;\r
+              objectlist;\r
+              display('OK, it''s in the box.');\r
+              show_one(6); { Shut box. }\r
+             end;\r
+            end;\r
+           end;\r
+         end else silly;\r
+\r
+   else silly;\r
+  end;\r
+end;\r
+\r
+function give2spludwick:boolean;\r
+ { The result of this fn is whether or not he says "Hey, thanks!" }\r
+  procedure not_in_order;\r
+  begin\r
+   display('Sorry, I need the ingredients in the right order for this potion.'+\r
+    ' What I need next is '+\r
+     get_better(spludwick_order[dna.given2spludwick])+'.'^s'2'^b);\r
+  end;\r
+\r
+  procedure go_to_cauldron;\r
+  begin\r
+     tr[2].call_Eachstep:=false; { Stops Geida_Procs. }\r
+     set_up_timer(1,PROCSpludwick_goes_to_cauldron,reason_Spludwalk);\r
+     tr[2].walkto(2);\r
+  end;\r
+\r
+begin\r
+ with dna do\r
+ begin\r
+\r
+  give2spludwick:=false;\r
+\r
+  if spludwick_order[given2spludwick]<>thing then\r
+  begin\r
+   not_in_order;\r
+   exit;\r
+  end;\r
+\r
+  case thing of\r
+   onion:\r
+    begin\r
+     obj[onion]:=false;\r
+     if rotten_onion then\r
+      dixi('q',22)\r
+     else begin\r
+      inc(given2spludwick);\r
+      dixi('q',20);\r
+      go_to_cauldron;\r
+      points(3);\r
+     end;\r
+     objectlist;\r
+    end;\r
+   ink: begin\r
+         obj[ink]:=false;\r
+         objectlist;\r
+         inc(given2spludwick);\r
+         dixi('q',24);\r
+         go_to_cauldron;\r
+         points(3);\r
+        end;\r
+   mushroom: begin\r
+              obj[mushroom]:=false;\r
+              dixi('q',25);\r
+              points(5);\r
+              inc(given2spludwick);\r
+              go_to_cauldron;\r
+              obj[potion]:=true;\r
+              objectlist;\r
+             end;\r
+   else give2spludwick:=true;\r
+  end;\r
+ end;\r
+end;\r
+\r
+procedure have_a_drink;\r
+begin\r
+ with dna do\r
+ begin\r
+  inc(alcohol);\r
+  if alcohol=5 then\r
+  begin\r
+   obj[key]:=true; { Get the key. }\r
+   teetotal:=true;\r
+   Avvy_is_awake:=false;\r
+   Avvy_in_bed:=true;\r
+   objectlist;\r
+   dusk;\r
+   hang_around_for_a_while;\r
+   fliproom(1,1);\r
+   background(14);\r
+   new_game_for_trippancy; { Not really }\r
+  end;\r
+ end;\r
+end;\r
+\r
+procedure Cardiff_climbing;\r
+begin\r
+ if dna.Standing_On_Dais then\r
+ begin { Clamber up. }\r
+  display('You climb down, back onto the floor.');\r
+  dna.Standing_On_Dais:=false;\r
+  apped(1,3);\r
+ end else\r
+ begin { Clamber down. }\r
+  if infield(1) then\r
+  begin\r
+    display('You clamber up onto the dais.');\r
+    dna.Standing_On_Dais:=true;\r
+    apped(1,2);\r
+  end else\r
+    display('Get a bit closer, Avvy.');\r
+ end;\r
+end;\r
+\r
+procedure stand_up;\r
+  { Called when you ask Avvy to stand. }\r
+  procedure already;\r
+  begin\r
+   display('You''re already standing!');\r
+  end;\r
+begin\r
+ with dna do\r
+  case dna.room of\r
+   r__Yours: { Avvy isn't asleep. }\r
+              if Avvy_in_bed then { But he's in bed. }\r
+              begin\r
+               if teetotal then\r
+               begin\r
+                dixi('d',12);\r
+                background(0);\r
+                dixi('d',14);\r
+               end;\r
+               tr[1].visible:=true;\r
+               user_moves_Avvy:=true;\r
+               apped(1,2);\r
+               dna.rw:=left;\r
+               show_one(4); { Picture of empty pillow. }\r
+               points(1);\r
+               Avvy_in_bed:=false;\r
+               lose_timer(reason_Arkata_shouts);\r
+              end else already;\r
+\r
+    r__InsideCardiffCastle: Cardiff_climbing;\r
+\r
+    r__NottsPub: if sitting_in_pub then begin\r
+                  show_one(4); { Not sitting down. }\r
+                  tr[1].visible:=true; { But standing up. }\r
+                  apped(1,4); { And walking away. }\r
+                  sitting_in_pub:=false; { Really not sitting down. }\r
+                  user_moves_Avvy:=true; { And ambulant. }\r
+                 end else already;\r
+   else already;\r
+  end;\r
+end;\r
+\r
+procedure getproc(thing:char);\r
+begin\r
+ with dna do\r
+  case room of\r
+   r__Yours:\r
+     if infield(2) then\r
+     begin\r
+      if box_contents=thing then\r
+      begin\r
+       show_one(5);\r
+       display('OK, I''ve got it.');\r
+       obj[thing]:=true; objectlist;\r
+       box_contents:=nowt;\r
+       show_one(6);\r
+      end else\r
+       display('I can''t see '+get_better(thing)+' in the box.');\r
+     end else dixi('q',57);\r
+  r__InsideCardiffCastle:\r
+    case thing of\r
+     pen:\r
+     begin\r
+      if infield(2) then\r
+      begin { Standing on the dais. }\r
+\r
+       if dna.taken_pen then\r
+        display('It''s not there, Avvy.')\r
+       else\r
+       begin { OK: we're taking the pen, and it's there. }\r
+        show_one(4); { No pen there now. }\r
+        call_special(3); { Zap! }\r
+        dna.taken_pen:=true;\r
+        dna.obj[pen]:=true;\r
+        objectlist;\r
+        display('Taken.');\r
+       end;\r
+      end else if dna.Standing_on_dais then dixi('q',53) else dixi('q',51);\r
+     end;\r
+      bolt: dixi('q',52);\r
+     else dixi('q',57)\r
+    end;\r
+  r__Robins: if (thing=Mushroom) and (infield(1)) and (dna.Mushroom_Growing)\r
+             then begin\r
+              show_one(3);\r
+              display('Got it!');\r
+              dna.Mushroom_Growing:=false;\r
+              dna.Taken_Mushroom:=true;\r
+              dna.obj[mushroom]:=true;\r
+              objectlist;\r
+              points(3);\r
+             end else dixi('q',57)\r
+  else dixi('q',57)\r
+ end;\r
+end;\r
+\r
+procedure give_Geida_the_lute;\r
+begin\r
+ with dna do\r
+ begin\r
+  if room<>r__LustiesRoom then\r
+  begin\r
+   display('Not yet. Try later!'^s'2'^b);\r
+   exit;\r
+  end;\r
+  dna.obj[lute]:=false;\r
+  objectlist;\r
+  dixi('q',64); { She plays it. }\r
+\r
+   { And the rest has been moved to Timeout... under give_lute_to_Geida. }\r
+\r
+  set_up_timer(1,PROCgive_lute_to_Geida,reason_Geida_sings);\r
+  back_to_bootstrap(4);\r
+ end;\r
+end;\r
+\r
+procedure play_harp;\r
+begin\r
+ if infield(7) then\r
+  musical_scroll\r
+ else display('Get a bit closer to it, Avvy!');\r
+end;\r
+\r
+procedure winsequence;\r
+begin\r
+ dixi('q',78);\r
+ first_show(7); then_show(8); then_show(9);\r
+ start_to_close;\r
+ set_up_timer(30,PROCwinning,reason_winning);\r
+end;\r
+\r
+procedure person_speaks;\r
+var found:boolean; fv:byte; cfv:char;\r
+begin\r
+\r
+  if (person=pardon) or (person=#0) then\r
+  begin\r
+   if (him=pardon) or (whereis[him]<>dna.room) then person:=her\r
+    else person:=him;\r
+  end;\r
+\r
+  if (whereis[person]<>dna.room) then\r
+  begin\r
+   display(^s'1'^d); { Avvy himself! }\r
+   exit;\r
+  end;\r
+\r
+  found:=false; { The person we're looking for's code is in Person. }\r
+\r
+  for fv:=1 to numtr do\r
+   if tr[fv].quick and (chr(tr[fv].a.accinum+149)=person) then\r
+   begin\r
+    display(^s+chr(fv+48)+^d);\r
+    found:=true;\r
+   end;\r
+\r
+  if not found then\r
+    for fv:=10 to 25 do\r
+     with quasipeds[fv] do\r
+     if (who=person) and (room=dna.room) then\r
+     begin\r
+      display(^s+chr(fv+55)+^d);\r
+     end;\r
+end;\r
+\r
+procedure do_that;\r
+const booze: array[#51..#58] of string[6] = ('Bitter','GIED','Whisky','Cider','','','','Mead');\r
+var fv,ff:byte; sx,sy:integer; ok:boolean;\r
+  procedure heythanks;\r
+  begin\r
+    person_speaks;\r
+    display('Hey, thanks!'^b'(But now, you''ve lost it!)');\r
+    dna.obj[thing]:=false;\r
+  end;\r
+\r
+begin\r
+ if thats=nowt then begin thats:=''; exit; end;\r
+ if weirdword then exit;\r
+ if thing<#200 then dec(thing,49); { "Slip" }\r
+\r
+ if (not alive) and\r
+  not (verb in [vb_load,vb_save,vb_quit,vb_info,vb_help,vb_larrypass,\r
+     vb_phaon,vb_boss,vb_cheat,vb_restart,vb_dir,vb_score,\r
+     vb_highscores,vb_smartalec])\r
+  then begin\r
+        display('You''re dead, so don''t talk. What are you, a ghost '+\r
+         'or something? Try restarting, or restoring a saved game!'); exit;\r
+       end;\r
+\r
+ if (not dna.Avvy_is_awake) and\r
+  not (verb in [vb_load,vb_save,vb_quit,vb_info,vb_help,vb_larrypass,\r
+     vb_phaon,vb_boss,vb_cheat,vb_restart,vb_dir,vb_die,vb_score,\r
+     vb_highscores,vb_smartalec,vb_expletive,vb_wake])\r
+  then begin\r
+        display('Talking in your sleep? Try waking up!'); exit;\r
+       end;\r
+\r
+\r
+ case verb of\r
+  vb_exam: examine;\r
+  vb_open: opendoor;\r
+  vb_pause: display('Game paused.'+^c+^m+^m+'Press Enter, Esc, or click '+\r
+             'the mouse on the `O.K." box to continue.');\r
+  vb_get: begin\r
+           if thing<>pardon then\r
+           begin { Legitimate try to pick something up. }\r
+            if dna.carrying>=maxobjs then display('You can''t carry any more!')\r
+            else getproc(thing);\r
+             \r
+           end else\r
+           begin { Not... ditto. }\r
+            if person<>pardon then\r
+             display('You can''t sweep folk off their feet!') else\r
+            display('I assure you, you don''t need it.');\r
+           end;\r
+          end;\r
+  vb_drop: display('Two years ago you dropped a florin in the street. Three days '+\r
+       'later it was gone! So now you never leave ANYTHING lying around. OK?');\r
+(*       begin dna.obj[thing]:=false; objectlist; end;*)\r
+  vb_inv: inv;\r
+  vb_talk:  if person=pardon then\r
+            begin\r
+              if subjnumber=99 then { They typed "say password". }\r
+                display('Yes, but what '^f'is'^r' the password?')\r
+              else if (subjnumber in [1..49,253,249]) then\r
+              begin\r
+                delete(thats,1,1);\r
+                move(realwords[2],realwords[1],sizeof(realwords)-sizeof(realwords[1]));\r
+                verb:=chr(subjnumber);\r
+                do_that; exit;\r
+              end else\r
+              begin\r
+                person:=chr(subjnumber); subjnumber:=0;\r
+                if person in [pardon,#0] then display('Talk to whom?')\r
+                 else if (personshere) then talkto(ord(person));\r
+              end;\r
+            end else if person=pardon then display('Talk to whom?')\r
+            else if (personshere) then talkto(ord(person));\r
+\r
+  vb_give: if holding then\r
+           begin\r
+            if person=pardon then display('Give to whom?') else\r
+            if personshere then\r
+            begin\r
+             case thing of\r
+              money : display('You can''t bring yourself to give away your moneybag.');\r
+              bodkin,bell,clothes,habit :\r
+                    display('Don''t give it away, it might be useful!');\r
+              else case person of\r
+                      pCrapulus: case thing of\r
+                                 wine: begin\r
+                                        display('Crapulus grabs the wine and gulps it down.');\r
+                                        dna.obj[wine]:=false;\r
+                                       end;\r
+                                 else heythanks;\r
+                                end;\r
+                     pCwytalot: if thing in [crossbow,bolt] then\r
+                                 display('You might be able to influence '+\r
+                                 'Cwytalot more if you used it!')\r
+                                else heythanks;\r
+                     pSpludwick: if give2spludwick then heythanks;\r
+                     pIbythneth: if thing=badge then\r
+                                 begin\r
+                                  dixi('q',32); { Thanks! Wow! }\r
+                                  points(3);\r
+                                  dna.obj[badge]:=false;\r
+                                  dna.obj[habit]:=true;\r
+                                  dna.GivenBadgeToIby:=true;\r
+                                  show_one(8); show_one(9);\r
+                                 end else heythanks;\r
+                     pAyles: if dna.Ayles_is_awake then\r
+                             begin\r
+                               if thing=pen then\r
+                               begin\r
+                                dna.obj[pen]:=false;\r
+                                dixi('q',54);\r
+                                dna.obj[ink]:=true;\r
+                                dna.given_pen_to_ayles:=true;\r
+                                objectlist;\r
+                                points(2);\r
+                               end else heythanks;\r
+                             end else\r
+                               display('But he''s asleep!');\r
+                     pGeida: case thing of\r
+                              potion : begin\r
+                                        dna.obj[potion]:=false;\r
+                                        dixi('u',16); { She drinks it. }\r
+                                        points(2);\r
+                                        dna.Geida_given_potion:=true;\r
+                                        objectlist;\r
+                                       end;\r
+                              lute: give_Geida_the_lute;\r
+                              else heythanks;\r
+                             end;\r
+                     pArkata: case thing of\r
+                              potion: if dna.Geida_given_potion then\r
+                                       winsequence\r
+                                      else dixi('q',77); { That Geida woman! }\r
+                              else heythanks;\r
+                             end;\r
+                    else heythanks;\r
+                   end;\r
+             end;\r
+            end;\r
+            objectlist; { Just in case... }\r
+           end;\r
+\r
+  vb_eat,vb_drink: if holding then swallow;\r
+  vb_load: edna_load(realwords[2]);\r
+  vb_save: if alive then edna_save(realwords[2])\r
+           else display('It''s a bit late now to save your game!');\r
+  vb_pay: display('No money need change hands.');\r
+  vb_look: lookaround;\r
+  vb_break: display('Vandalism is prohibited within this game!');\r
+  vb_quit: begin { quit }\r
+            if demo then\r
+            begin\r
+             dixi('q',31);\r
+             close(demofile);\r
+             halt; { Change this later!!! }\r
+            end;\r
+        if not polite then display('How about a `please", Avvy?') else\r
+         if ask(^s'C'^v'Do you really want to quit?') then lmo:=true;\r
+       end;\r
+  vb_go: display('Just use the arrow keys to walk there.');\r
+  vb_info: begin\r
+            aboutscroll:=true;\r
+(*            display('Thorsoft of Letchworth presents:'+^c+^m+^m+\r
+             'The medi‘val descendant of'+^m+\r
+             'Denarius Avaricius Sextus'+^m+'in:'+\r
+             ^m+^m+'LORD AVALOT D''ARGENT'+\r
+             ^m+'version '+vernum+^m+^m+'Copyright ï '\r
+             +copyright+', Mark, Mike and Thomas Thurman.');*)\r
+             display(^m^m^m^m^m^m^m+'LORD AVALOT D''ARGENT'+^c^m+\r
+              'The medi‘val descendant of'+^m+\r
+              'Denarius Avaricius Sextus'+\r
+              ^m+^m+'version '+vernum+^m+^m+'Copyright ï '\r
+              +copyright+', Mark, Mike and Thomas Thurman.'+^s+'Y'+^v);\r
+             aboutscroll:=false;\r
+           end;\r
+  vb_undress: if dna.wearing=nowt then display('You''re already stark naked!')\r
+               else\r
+            if dna.Avvys_in_the_cupboard then\r
+            begin\r
+             display('You take off '+get_better(dna.wearing)+'.');\r
+             dna.wearing:=nowt; objectlist;\r
+            end else\r
+            display('Hadn''t you better find somewhere more private, Avvy?');\r
+  vb_wear: if holding then\r
+       begin { wear something }\r
+        case thing of\r
+         chastity: display('Hey, what kind of a weirdo are you??!');\r
+         clothes,habit: begin { Change this! }\r
+                         if dna.wearing<>nowt then\r
+                         begin\r
+                          if dna.wearing=thing then\r
+                            display('You''re already wearing that.')\r
+                          else\r
+                            display('You''ll be rather warm wearing two '+\r
+                           'sets of clothes!');\r
+                          exit;\r
+                         end else\r
+                         dna.wearing:=thing; objectlist;\r
+                         if thing=habit then fv:=3 else fv:=0;\r
+                         with tr[1] do\r
+                          if whichsprite<>fv then\r
+                          begin\r
+                           sx:=tr[1].x; sy:=tr[1].y;\r
+                           Done;\r
+                           Init(fv,true);\r
+                           appear(sx,sy,left);\r
+                           tr[1].visible:=false;\r
+                          end;\r
+                        end;\r
+         else display(what);\r
+        end;\r
+       end;\r
+  vb_play: if (thing=pardon) then\r
+            case dna.room of { They just typed "play"... }\r
+             r__ArgentPub: play_nim; { ...in the pub, => play Nim. }\r
+             r__MusicRoom: play_harp;\r
+            end\r
+           else if holding then\r
+           begin\r
+            case thing of\r
+             lute : begin\r
+                     dixi('U',7);\r
+                     if whereis[pCwytalot]=dna.room then dixi('U',10);\r
+                     if whereis[pduLustie]=dna.room then dixi('U',15);\r
+                    end;\r
+             #52 : if (dna.room=r__MusicRoom) then play_harp\r
+                    else display(what);\r
+             #55 : if (dna.room=r__ArgentPub) then play_Nim\r
+                    else display(what);\r
+             else display(what);\r
+            end;\r
+           end;\r
+  vb_ring: if holding then\r
+       begin\r
+        if thing=bell then\r
+        begin\r
+         display('Ding, dong, ding, dong, ding, dong, ding, dong...');\r
+         if (dna.ringing_bells) and (flagset('B')) then\r
+          display('(Are you trying to join in, Avvy??!)');\r
+        end else display(what);\r
+       end;\r
+  vb_help: boot_help;\r
+  vb_larrypass: display('Wrong game!');\r
+  vb_phaon: display('Hello, Phaon!');\r
+  vb_boss: bosskey;\r
+  vb_pee: if flagset('P') then\r
+          begin\r
+           display('Hmm, I don''t think anyone will notice...');\r
+           set_up_timer(4,PROCurinate,reason_GoToToilet);\r
+          end else display('It would be '^f'VERY'^r' unwise to do that here, Avvy!');\r
+  vb_cheat: begin\r
+             display(^F+'Cheat mode now enabled.');\r
+             cheat:=true;\r
+            end;\r
+  vb_magic: if dna.Avaricius_talk>0 then\r
+             dixi('q',19)\r
+            else begin\r
+             if (dna.room=12) and (infield(2)) then\r
+             begin { Avaricius appears! }\r
+              dixi('q',17);\r
+              if whereis[#151]=12 then\r
+               dixi('q',18)\r
+              else\r
+              begin\r
+               tr[2].init(1,false); { Avaricius }\r
+               apped(2,4);\r
+               tr[2].walkto(5);\r
+               tr[2].call_Eachstep:=true;\r
+               tr[2].Eachstep:=PROCback_and_forth;\r
+               dna.Avaricius_talk:=14;\r
+               set_up_timer(177,PROCAvaricius_talks,reason_AvariciusTalks);\r
+              end;\r
+             end else display('Nothing appears to happen...');\r
+            end;\r
+  vb_smartalec: display('Listen, smart alec, that was just rhetoric.');\r
+  vb_expletive: with dna do begin\r
+         case swore of\r
+          0: display('Avvy! Do you mind? There might be kids playing!'^M^M+\r
+              '(I shouldn''t say it again, if I were you!)');\r
+          1: display('You hear a distant rumble of thunder. Must you always '+\r
+              'do things I tell you not to?'^m^m'Don''t do it again!');\r
+         else\r
+          begin\r
+           zonk;\r
+           display('A crack of lightning shoots from the sky, '+\r
+            'and fries you.'^m^m'(`Such is the anger of the gods, Avvy!")');\r
+           gameover;\r
+          end;\r
+         end;\r
+         inc(swore);\r
+        end;\r
+  vb_listen: if (dna.ringing_bells) and (flagset('B')) then\r
+              display('All other noise is drowned out by the ringing of '+\r
+                       'the bells.')\r
+             else\r
+              if listen='' then\r
+               display('You can''t hear anything much at the moment, Avvy.')\r
+                else display(listen);\r
+  vb_buy: begin\r
+           { What are they trying to buy? }\r
+           case dna.room of\r
+            r__argentpub: if infield(6) then\r
+                begin { We're in a pub, and near the bar. }\r
+                 case thing of\r
+                  #51,#53,#54,#58: begin { Beer, whisky, cider or mead }\r
+                            if dna.malagauche=177 then { Already getting us one. }\r
+                              begin dixi('D',15); exit; end;\r
+                            if dna.teetotal then begin dixi('D',6); exit; end;\r
+                            if dna.alcohol=0 then points(3);\r
+                            show_one(12);\r
+                            display(booze[thing]+', please.'^s'1'^b);\r
+                            dna.drinking:=thing;\r
+\r
+                            show_one(10);\r
+                            dna.malagauche:=177;\r
+                            set_up_timer(27,PROCbuydrinks,reason_Drinks);\r
+                           end;\r
+                  #52: examine; { We have a right one here- buy Pepsi??! }\r
+                  wine: if dna.obj[wine] then { We've already got the wine! }\r
+                          dixi('D',2) { 1 bottle's shufishent! }\r
+                         else begin\r
+                          if dna.malagauche=177 then { Already getting us one. }\r
+                            begin dixi('D',15); exit; end;\r
+                          if dna.carrying>=maxobjs then\r
+                             begin display('Your hands are full.'); exit end;\r
+                          show_one(12); display('Wine, please.'^s'1'^b);\r
+                          if dna.alcohol=0 then points(3);\r
+                          show_one(10);\r
+                          dna.malagauche:=177;\r
+\r
+                          set_up_timer(27,PROCbuywine,reason_Drinks);\r
+                         end;\r
+                 end;\r
+                end else dixi('D',5); { Go to the bar! }\r
+\r
+            r__OutsideDucks: if infield(6) then\r
+             begin\r
+              if thing=onion then\r
+              begin\r
+               if dna.obj[onion] then\r
+                dixi('D',10) { not planning to juggle with the things! }\r
+               else\r
+               if dna.carrying>=maxobjs then\r
+                  display('Before you ask, you remember that your hands are full.')\r
+               else\r
+               begin\r
+                if dna.bought_onion then\r
+                 dixi('D',11) else\r
+                  begin dixi('D',9); points(3); end;\r
+                pennycheck(3); { It costs thruppence. }\r
+                dna.obj[onion]:=true;\r
+                objectlist;\r
+                dna.bought_onion:=true;\r
+                dna.rotten_onion:=false; { It's OK when it leaves the stall! }\r
+                dna.onion_in_vinegar:=false;\r
+               end;\r
+              end else dixi('D',0);\r
+             end else dixi('D',0);\r
+\r
+             r__NottsPub: dixi('n',15); { Can't sell to southerners. }\r
+            else dixi('D',0); { Can't buy that. }\r
+           end;\r
+          end;\r
+  vb_attack: begin\r
+              if (dna.room=r__BrummieRoad) and\r
+               ((person=#157) or (thing=crossbow) or (thing=bolt))\r
+               and (whereis[#157]=dna.room) then\r
+              begin\r
+               case ord(dna.obj[bolt])+ord(dna.obj[crossbow])*2 of\r
+                { 0 = neither, 1 = only bolt, 2 = only crossbow,\r
+                  3 = both. }\r
+                0: begin\r
+                    dixi('Q',10);\r
+                    display('(At the very least, don''t use your bare hands!)');\r
+                   end;\r
+                1: display('Attack him with only a crossbow bolt? Are you '+\r
+                    'planning on playing darts?!');\r
+                2: display('Come on, Avvy! You''re not going to get very far '+\r
+                     'with only a crossbow!');\r
+                3: begin\r
+                    dixi('Q',11);\r
+                    dna.cwytalot_gone:=true;\r
+                    dna.obj[bolt]:=false; dna.obj[crossbow]:=false;\r
+                    objectlist;\r
+                    magics[12].op:=nix;\r
+                    points(7);\r
+                    tr[2].walkto(2);\r
+                    tr[2].vanishifstill:=true;\r
+                    tr[2].call_Eachstep:=false;\r
+                    whereis[#157]:=177;\r
+                   end;\r
+                else dixi('Q',10); { Please try not to be so violent! }\r
+               end;\r
+              end else dixi('Q',10);\r
+             end;\r
+  vb_password: if dna.room<>r__Bridge then\r
+                dixi('Q',12) else\r
+               begin\r
+                ok:=true;\r
+                for ff:=1 to length(thats) do\r
+                 for fv:=1 to length(words[dna.pass_num+first_password].w) do\r
+                  if words[dna.pass_num+first_password].w[fv] <>\r
+                          upcase(realwords[ff,fv])\r
+                   then ok:=false;\r
+                if ok then\r
+                begin\r
+                 if dna.drawbridge_open<>0 then\r
+                   display('Contrary to your expectations, the drawbridge fails to close again.')\r
+                 else\r
+                 begin\r
+                    points(4);\r
+                    display('The drawbridge opens!');\r
+                    set_up_timer(7,PROCopen_drawbridge,Reason_DrawbridgeFalls);\r
+                    dna.drawbridge_open:=1;\r
+                 end;\r
+                end else dixi('Q',12);\r
+               end;\r
+   vb_dir: dir(realwords[2]);\r
+   vb_die: gameover;\r
+   vb_score: display('Your score is '+strf(dna.score)+','^c^m'out of a '+\r
+                      'possible 128.'^m^m'This gives you a rank of '+rank+\r
+                      '.'^m^m+totaltime);\r
+   vb_put: putproc;\r
+   vb_stand: stand_up;\r
+\r
+   vb_kiss: if (person=pardon)\r
+              then display('Kiss whom?')\r
+            else if personshere then\r
+            case person of\r
+             #150..#174: display('Hey, what kind of a weirdo are you??');\r
+             pArkata: dixi('U',12);\r
+             pGeida: dixi('U',13);\r
+             pWiseWoman: dixi('U',14);\r
+             else dixi('U',5); { You WHAT? }\r
+            end;\r
+\r
+   vb_climb: if (dna.room=r__InsideCardiffCastle) then Cardiff_climbing\r
+             else { In the wrong room! }\r
+              display('Not with your head for heights, Avvy!');\r
+\r
+   vb_jump: begin\r
+             set_up_timer(1,PROCjump,reason_Jumping);\r
+             dna.user_moves_Avvy:=false;\r
+            end;\r
+\r
+   vb_highscores: show_highs;\r
+\r
+   vb_wake: with dna do\r
+             if personshere then\r
+              case person of\r
+               pardon,pAvalot,#0: if not Avvy_is_awake then\r
+                    begin\r
+                     Avvy_is_awake:=true;\r
+                     points(1);\r
+                     Avvy_in_bed:=true;\r
+                     show_one(3); { Picture of Avvy, awake in bed. }\r
+                     if teetotal then dixi('d',13);\r
+                    end else display('You''re already awake, Avvy!');\r
+               pAyles: if not Ayles_is_awake then display('You can''t seem to wake him by yourself.');\r
+               pJacques: display('Brother Jacques, Brother Jacques, are you asleep?'^s'1'^b+\r
+                          'Hmmm... that doesn''t seem to do any good...');\r
+               else display('It''s difficult to awaken people who aren''t asleep...!');\r
+              end;\r
+\r
+   vb_sit: if dna.room=r__NottsPub then\r
+           begin\r
+            if dna.sitting_in_pub then\r
+             display('You''re already sitting!')\r
+            else\r
+            begin\r
+             tr[1].walkto(4); { Move Avvy to the place, and sit him down. }\r
+             set_up_timer(1,PROCAvvy_sit_down,reason_sitting_down);\r
+            end;\r
+           end else\r
+           begin { Default doodah. }\r
+            dusk;\r
+            hang_around_for_a_while;\r
+            dawn;\r
+            display('A few hours later...'^p'nothing much has happened...');\r
+           end;\r
+\r
+   vb_restart: if ask('Restart game and lose changes?') then begin\r
+                dusk;\r
+                newgame;\r
+                dawn;\r
+               end;\r
+\r
+  pardon: display('Hey, a verb would be helpful!');\r
+\r
+  vb_hello: begin person_speaks; display('Hello.'^b); end;\r
+  vb_thanks: begin person_speaks; display('That''s OK.'^b); end;\r
+  else display(^G+'Parser bug!');\r
+ end;\r
+end;\r
+\r
+procedure verbopt(n:char; var answer:string; var anskey:char);\r
+begin\r
+ case n of\r
+   vb_exam: begin answer:='Examine'; anskey:='x'; end; { the ubiqutous one }\r
+   { vb_give isn't dealt with by this procedure, but by ddm__with }\r
+  vb_drink: begin answer:='Drink';   anskey:='D'; end;\r
+  vb_wear:  begin answer:='Wear';    anskey:='W'; end;\r
+  vb_ring:  begin answer:='Ring';    anskey:='R'; end; { only the bell! }\r
+  vb_play:  begin answer:='Play';    anskey:='P'; end;\r
+  vb_eat:   begin answer:='Eat';     anskey:='E'; end;\r
+  else      begin answer:='? Unknown!'; anskey:='?'; end; { Bug! }\r
+ end;\r
+end;\r
+\r
+begin\r
+ weirdword:=false;\r
+end.\r
diff --git a/avalot/also.pas b/avalot/also.pas
new file mode 100644 (file)
index 0000000..b3a9600
--- /dev/null
@@ -0,0 +1,922 @@
+program Also;\r
+uses Graph,Rodent,Crt;\r
+{$R+,V-}\r
+\r
+type\r
+ fonttype = array[0..255,0..15] of byte;\r
+\r
+ fieldtype = object\r
+              x1,y1,x2,y2:integer;\r
+             end;\r
+\r
+ linetype = object(fieldtype)\r
+             col:byte;\r
+            end;\r
+\r
+ pedtype = record\r
+            x,y:integer; dir:byte;\r
+           end;\r
+\r
+ magictype = record\r
+              op:byte; { one of the operations }\r
+              data:word; { data for them }\r
+             end;\r
+\r
+const\r
+ numlines=50; up = 0; right = 1; down = 2; left = 3; ur=4; dr=5; dl=6; ul=7;\r
+ still = 8;\r
+\r
+ nay = maxint;\r
+\r
+ { Magic commands are }\r
+\r
+ {N} nix = 0; { ignore it if this line is touched }\r
+ {B} bounce = 1; { bounce off this line }\r
+ {E} exclaim = 2; { put up a chain of scrolls }\r
+ {T} transport = 3; { enter new room }\r
+ {U} unfinished = 4; { unfinished connection }\r
+ {S} special= 5; { special call }\r
+ {O} opendoor = 6; { slowly opening door. }\r
+\r
+var\r
+ gd,gm:integer;\r
+ lines:array[1..numlines] of linetype;\r
+ fields:array[1..numlines] of fieldtype;\r
+ do1:boolean;\r
+ current:byte;\r
+ n:string;\r
+ names:array[0..29,1..2] of string;\r
+ f:file of fonttype;\r
+ skinny:fonttype;\r
+ tx,ty:byte;\r
+ chars:array[0..79,0..22] of char;\r
+ cursorflash:byte;\r
+ peds:array[1..15] of pedtype;\r
+ magics:array[1..15] of magictype;\r
+ portals:array[9..15] of magictype;\r
+ flags:string[26];\r
+ listen:string;\r
+\r
+const\r
+ crosshairs : graphcursmasktype =\r
+ ( Mask:\r
+     ((63551,63807,63807,63807,61727,257,897,32765,897,257,61727,63807,63807,63807,63551,65535),\r
+      (4368,21140,8840,53910,640,640,31868,33026,31868,640,640,53910,8840,21140,4368,0));\r
+   Horzhotspot: 7;\r
+   Verthotspot: 7);\r
+\r
+ hook : graphcursmasktype =\r
+ ( Mask:\r
+     ((32831,32831,49279,49279,57599,61695,61471,61447,63491,57089,36801,32771,49159,57375,63743,65535),\r
+      (0,16256,7936,7936,3584,1536,1792,2016,248,28,8220,12344,8160,1792,0,0));\r
+   Horzhotspot: 2;\r
+   Verthotspot: 9);\r
+\r
+ tthand : graphcursmasktype =\r
+ ( Mask:\r
+     ((62463,57855,57855,57855,57471,49167,32769,0,0,0,0,32768,49152,57344,61441,61443),\r
+      (3072,4608,4608,4608,4992,12912,21070,36937,36873,36865,32769,16385,8193,4097,2050,4092));\r
+   Horzhotspot: 4;\r
+   Verthotspot: 0);\r
+\r
+function strf(x:longint):string;\r
+var q:string;\r
+begin;\r
+ str(x,q); strf:=q;\r
+end;\r
+\r
+procedure glimpse(ret:byte); { glimpse of screen 3 }\r
+var sink:char;\r
+begin;\r
+ hidemousecursor; setvisualpage(3); setcrtpagenumber(3); showmousecursor;\r
+ repeat until not anymousekeypressed;\r
+ repeat until anymousekeypressed;\r
+ hidemousecursor; setvisualpage(ret); setcrtpagenumber(ret); showmousecursor;\r
+ while keypressed do sink:=readkey;\r
+end;\r
+\r
+procedure newline(t:byte; p,q,r,s:integer; c:byte);\r
+begin;\r
+ with lines[t] do\r
+ begin;\r
+  x1:=p; y1:=q; x2:=r; y2:=s; col:=c;\r
+ end;\r
+end;\r
+\r
+procedure newfield(t:byte; p,q,r,s:integer);\r
+begin; with fields[t] do begin; x1:=p; y1:=q; x2:=r; y2:=s; end; end;\r
+\r
+procedure drawped(p:byte);\r
+begin;\r
+ with peds[p] do\r
+  if dir<177 then\r
+  begin;\r
+   setcolor(p); circle(x,y,5); moveto(x,y);\r
+   case dir of\r
+    up:   linerel(0,-5);  down:  linerel(0,5);\r
+    left: linerel(-7,0);  right: linerel(7,0);\r
+    ul:   linerel(-7,-5); dl:    linerel(-7, 5);\r
+    ur:   linerel( 7,-5); dr:    linerel( 7, 5);\r
+   end;\r
+  end;\r
+end;\r
+\r
+procedure drawup;\r
+var fv:byte;\r
+begin;\r
+ cleardevice;\r
+ for fv:=1 to numlines do\r
+  with lines[fv] do\r
+   if x1<>nay then\r
+   begin;\r
+    setcolor(col);\r
+    line(x1,y1,x2,y2);\r
+   end;\r
+ for fv:=1 to numlines do\r
+  with fields[fv] do\r
+   if x1<>nay then\r
+   begin;\r
+    setcolor(fv);\r
+    rectangle(x1,y1,x2,y2);\r
+   end;\r
+ for fv:=1 to 15 do drawped(fv);\r
+end;\r
+\r
+procedure addped;\r
+var n,fv:byte;\r
+begin;\r
+ n:=0; repeat inc(n) until (n=16) or (peds[n].dir=177);\r
+ setcrtpagenumber(0); setactivepage(0); setvisualpage(0);\r
+ drawup; setgraphicscursor(tthand); showmousecursor;\r
+ repeat\r
+  if rightmousekeypressed then exit;\r
+  if keypressed then glimpse(0);\r
+ until leftmousekeypressed;\r
+ hidemousecursor;\r
+ with peds[n] do\r
+ begin;\r
+  x:=mousex; y:=mousey;\r
+ end;\r
+ cleardevice; setfillstyle(6,9); for fv:=1 to 3 do bar(200*fv,0,200*fv,200);\r
+ for fv:=1 to 2 do bar(0,60*fv,640,60*fv);\r
+ showmousecursor;\r
+ repeat if rightmousekeypressed then exit; until leftmousekeypressed;\r
+ hidemousecursor;\r
+ with peds[n] do\r
+  case ((mousex div 200)*10)+(mousey div 60) of\r
+   00: dir:=ul;   10: dir:=up;    20: dir:=ur;\r
+   01: dir:=left; 11: dir:=still; 21: dir:=right;\r
+   02: dir:=dl;   12: dir:=down;  22: dir:=dr;\r
+  end;\r
+end;\r
+\r
+procedure addline(ccc:byte);\r
+var fv:byte;\r
+begin;\r
+ repeat\r
+  for fv:=1 to numlines do\r
+   with lines[fv] do\r
+    if x1=nay then\r
+    begin;\r
+     x1:=fv*17; x2:=x1; y1:=200; y2:=190; col:=ccc;\r
+     exit; { bad style! }\r
+    end;\r
+ until false;\r
+end;\r
+\r
+function colour:byte;\r
+var fv:byte;\r
+begin;\r
+ setactivepage(0); setvisualpage(0); setcrtpagenumber(0);\r
+ outtextxy(0,0,'Select a colour, please...');\r
+ for fv:=1 to 15 do\r
+ begin;\r
+  setfillstyle(1,fv);\r
+  bar(fv*40,27,39+fv*40,200);\r
+ end;\r
+ showmousecursor;\r
+ repeat\r
+  if rightmousekeypressed then begin; hidemousecursor; exit; end;\r
+  if keypressed then glimpse(2);\r
+ until leftmousekeypressed;\r
+ hidemousecursor;\r
+ colour:=getpixel(mousex,mousey); cleardevice;\r
+end;\r
+\r
+procedure addfield;\r
+var fv:byte; ok:boolean;\r
+begin;\r
+ repeat\r
+  fv:=colour;\r
+  ok:=fields[fv].x1=nay;\r
+  if not ok then write(#7);\r
+ until ok;\r
+ with fields[fv] do\r
+ begin;\r
+  x1:=300+fv*17; x2:=x1+1; y1:=200; y2:=177;\r
+ end;\r
+end;\r
+\r
+function checkline:byte;\r
+var fv,ans:byte;\r
+begin;\r
+ setgraphicscursor(crosshairs);\r
+ setcrtpagenumber(0); setactivepage(0); setvisualpage(0); drawup;\r
+ repeat\r
+  showmousecursor;\r
+  repeat\r
+   if rightmousekeypressed then begin; checkline:=255; exit; end;\r
+   if keypressed then glimpse(0);\r
+  until leftmousekeypressed;\r
+  hidemousecursor;\r
+  setactivepage(1); ans:=177;\r
+  for fv:=1 to numlines do {  }\r
+  begin;\r
+   with lines[fv] do\r
+    if x1<>nay then\r
+    begin;\r
+     setcolor( 9); line(x1,y1,x2,y2);\r
+     if getpixel(mousex,mousey)=9 then ans:=fv;\r
+     setcolor( 0); line(x1,y1,x2,y2);\r
+    end;\r
+   with fields[fv] do\r
+    if x1<>nay then\r
+    begin;\r
+     setcolor( 9); rectangle(x1,y1,x2,y2);\r
+     if getpixel(mousex,mousey)=9 then ans:=fv+100;\r
+     setcolor( 0); rectangle(x1,y1,x2,y2);\r
+    end;\r
+  end;\r
+  setactivepage(0);\r
+ until ans<>177;\r
+ checkline:=ans;\r
+end;\r
+\r
+procedure chooseside;\r
+var clicol,savelcol:byte; itsaline:boolean; current:fieldtype; temp:integer;\r
+  procedure plotline;\r
+  begin;\r
+   if itsaline then\r
+    with lines[gd] do\r
+     if do1 then line(mousex,mousey,x2,y2) else\r
+      line(x1,y1,mousex,mousey)\r
+   else\r
+    with fields[gd] do\r
+     if do1 then rectangle(mousex,mousey,x2,y2) else\r
+      rectangle(x1,y1,mousex,mousey);\r
+end;\r
+begin;\r
+ repeat\r
+  gd:=checkline; itsaline:=gd<100;\r
+  if gd=255 then begin; hidemousecursor; exit; end;\r
+  if not itsaline then dec(gd,100);\r
+  setactivepage(2); setvisualpage(2); cleardevice;\r
+  setgraphicscursor(tthand); setcrtpagenumber(2);\r
+  if itsaline then\r
+  begin;\r
+   current:=lines[gd];\r
+   savelcol:=lines[gd].col;\r
+  end else current:=fields[gd];\r
+  with current do\r
+  begin;\r
+   setcolor(9);\r
+   if itsaline then line(x1,y1,x2,y2) else rectangle(x1,y1,x2,y2);\r
+    setcolor(9);\r
+    setfillstyle(1,red);   bar(x1-3,y1-3,x1+3,y1+3);\r
+    setfillstyle(1,green); bar(x2-3,y2-3,x2+3,y2+3);\r
+   repeat until not anymousekeypressed;\r
+   clicol:=177; showmousecursor;\r
+  repeat\r
+   if anymousekeypressed then\r
+   begin;\r
+    hidemousecursor;\r
+    clicol:=getpixel(mousex,mousey);\r
+    showmousecursor;\r
+   end;\r
+   if rightmousekeypressed then\r
+    begin; hidemousecursor; exit; end;\r
+   if keypressed then glimpse(2);\r
+  until clicol in [red,green];\r
+  do1:=clicol=red; hidemousecursor;\r
+  setgraphicscursor(hook); setcrtpagenumber(0);\r
+  setactivepage(0); setvisualpage(0); setcolor(0);\r
+  if itsaline then\r
+  with  lines[gd] do begin; line(x1,y1,x2,y2); setcolor(col); end else\r
+  with fields[gd] do begin; rectangle(x1,y1,x2,y2); setcolor(gd); end;\r
+  setwritemode(xorput);\r
+  while not anymousekeypressed do\r
+  begin;\r
+   plotline;\r
+   showmousecursor; delay(1); hidemousecursor;\r
+   plotline;\r
+   if rightmousekeypressed then begin; hidemousecursor; exit; end;\r
+   if keypressed then glimpse(0);\r
+  end;\r
+  { update "current" rec }\r
+  if do1 then begin; x1:=mousex; y1:=mousey; end\r
+   else begin; x2:=mousex; y2:=mousey; end;\r
+  if not itsaline then\r
+  begin;\r
+   if x1>x2 then begin; temp:=x2; x2:=x1; x1:=temp; end;\r
+   if y1>y2 then begin; temp:=y2; y2:=y1; y1:=temp; end;\r
+  end;\r
+  { copy "current" to line/field }\r
+  if itsaline then\r
+   with lines[gd] do\r
+   begin;\r
+    x1:=current.x1; x2:=current.x2; y1:=current.y1; y2:=current.y2;\r
+    col:=savelcol;\r
+   end else fields[gd]:=current;\r
+ end;\r
+ setwritemode(0);\r
+ until false;\r
+end;\r
+\r
+procedure delped;\r
+begin;\r
+ setcrtpagenumber(0); setactivepage(0); setvisualpage(0);\r
+ drawup; setgraphicscursor(tthand); showmousecursor;\r
+ repeat until leftmousekeypressed; peds[colour].dir:=177;\r
+end;\r
+\r
+function menu:byte;\r
+var clicol:byte;\r
+  procedure say(y:byte; x:string);\r
+  begin;\r
+   setfillstyle(1,y);\r
+   bar(0,y*17,100,y*17+15); outtextxy(123,y*17,x);\r
+  end;\r
+begin;\r
+  setcolor(15); settextstyle(0,0,2); clicol:=0; setgraphicscursor(tthand);\r
+  setvisualpage(2); setactivepage(2); setcrtpagenumber(2); cleardevice;\r
+  say(3,'Move lines around');\r
+  say(4,'Add a new line');\r
+  say(5,'Delete a line');\r
+  say(6,'Add a ped');\r
+  say(7,'Delete a ped');\r
+  say(8,'Add a field');\r
+  say(10,'Return to Also.');\r
+  showmousecursor;\r
+  repeat\r
+   if leftmousekeypressed then\r
+   begin;\r
+    hidemousecursor;\r
+    clicol:=getpixel(mousex,mousey);\r
+    showmousecursor;\r
+   end;\r
+   if rightmousekeypressed then begin; hidemousecursor; exit; end;\r
+   if keypressed then glimpse(2);\r
+  until clicol>0;\r
+  repeat until not anymousekeypressed;\r
+  hidemousecursor;\r
+  menu:=clicol;\r
+end;\r
+\r
+procedure removeline;\r
+begin;\r
+ gd:=checkline; if gd=255 then begin; hidemousecursor; exit; end;\r
+ if gd>100 then\r
+  fields[gd-100].x1:=nay\r
+ else lines[gd].x1:=nay; { cancels it out }\r
+ cleardevice; drawup;\r
+end;\r
+\r
+procedure lino;\r
+begin;\r
+ resetmouse;\r
+ repeat\r
+  case menu of\r
+   3: chooseside;\r
+   4: addline(colour);\r
+   5: removeline;\r
+   6: addped;\r
+   7: delped;\r
+   8: addfield;\r
+  10: exit;\r
+  end;\r
+ until false;\r
+end;\r
+\r
+procedure loadscreen; { load2 }\r
+var\r
+ a:byte absolute $A000:246560;\r
+ bit:byte;\r
+ f:file;\r
+begin;\r
+ setactivepage(3); setvisualpage(3);\r
+ assign(f,'c:\avalot\place'+n+'.avd'); reset(f,1); seek(f,177);\r
+ for bit:=0 to 3 do\r
+ begin;\r
+  port[$3c4]:=2; port[$3ce]:=4; port[$3C5]:=1 shl bit; port[$3CF]:=bit;\r
+  blockread(f,a,12080);\r
+ end;\r
+ close(f);\r
+ setvisualpage(0);\r
+ outtextxy(0,190,'Look carefully, and then press any key...');\r
+ setactivepage(0);\r
+end;\r
+\r
+procedure ctrlsout(var x:string); { Replace real ctrls with caret codes }\r
+var fv:byte; xx:string;\r
+begin;\r
+ xx:='';\r
+ for fv:=1 to length(x) do\r
+  if x[fv]>#31 then xx:=xx+x[fv] else xx:=xx+'^'+chr(ord(x[fv])+64);\r
+ x:=xx;\r
+end;\r
+\r
+procedure ctrlsin(var x:string); { Opposite of ctrlsout }\r
+var fv:byte; xx:string; ctrlwas:boolean;\r
+begin;\r
+ xx:=''; ctrlwas:=false;\r
+ for fv:=1 to length(x) do\r
+  if ctrlwas then { last char was a caret }\r
+   begin;\r
+    xx:=xx+chr(ord(upcase(x[fv]))-64);\r
+    ctrlwas:=false;\r
+   end\r
+  else\r
+  begin; { last char wasn't a caret... }\r
+   if x[fv]='^' then ctrlwas:=true else { ...but this one is }\r
+    xx:=xx+x[fv]; { ...but this one isn't }\r
+  end;\r
+ x:=xx;\r
+end;\r
+\r
+procedure flipover; { temp view other screen }\r
+var r:char;\r
+begin;\r
+ setvisualpage(3); r:=readkey; setvisualpage(0);\r
+end;\r
+\r
+procedure plotchar(x,y:byte; n:char);\r
+var fv:byte;\r
+begin;\r
+ if chars[x,y]=n then exit;\r
+ for fv:=0 to 15 do\r
+  mem[$A000:y*1200+(fv+3)*80+x]:=skinny[ord(n),fv];\r
+ chars[x,y]:=n;\r
+end;\r
+\r
+procedure cursor;\r
+var fv:byte;\r
+begin;\r
+ inc(cursorflash);\r
+ case cursorflash of\r
+  1,127: for fv:=12 to 14 do\r
+          mem[$A000:ty*1200+(3+fv)*80+tx]:=not(mem[$A000:ty*1200+(3+fv)*80+tx]);\r
+  255: cursorflash:=0;\r
+ end;\r
+end;\r
+\r
+procedure losecursor;\r
+begin;\r
+ if cursorflash<127 then begin; cursorflash:=126; cursor; end;\r
+ cursorflash:=0;\r
+end;\r
+\r
+procedure gwrite(x:string);\r
+var fv:byte;\r
+begin;\r
+ for fv:=1 to length(x) do\r
+ begin;\r
+  plotchar(tx,ty,x[fv]);\r
+  inc(tx);\r
+  if tx=80 then begin; inc(ty); tx:=0; end;\r
+ end;\r
+end;\r
+\r
+function typein(x:string):string;\r
+const marker = #2;\r
+var p:byte; r:char;\r
+begin;\r
+ setvisualpage(0); setactivepage(0); cleardevice;\r
+ settextstyle(0,0,1); setcolor(15);\r
+ outtextxy( 0,  0,'Press TAB to see the room...');\r
+ outtextxy( 0, 20,'You may use any of these Control Codes:');\r
+ outtextxy(30, 30,'Anywhere: ^M = new line, ^P = new scroll, |1 fix to speaker 1.');\r
+ outtextxy(90, 40,'^B = new bubble');\r
+ outtextxy(30, 50,'At end of line: ^C = centre line, ^L = left justify.');\r
+ outtextxy(30, 60,'At end of scroll: ^D = Don''t add automatic ^P here.');\r
+ outtextxy( 0, 80,'(Use by typing in (eg for ^P) ^ then P, not Ctrl-P.)');\r
+ p:=0; ctrlsout(x); fillchar(chars,sizeof(chars),#32);\r
+ repeat\r
+  tx:=0; ty:=6; gwrite(x+#4+#32);\r
+  tx:=(p mod 80); ty:=(p div 80)+6;\r
+  while not keypressed do begin; delay(1); cursor; end; losecursor;\r
+  r:=readkey;\r
+  case r of\r
+   #8: if p>0 then begin; x:=copy(x,1,p-1)+copy(x,p+1,255); dec(p); end; { backspace }\r
+   #9: flipover;\r
+   #32..#255: begin; x:=copy(x,1,p)+r+copy(x,p+1,255); inc(p); end;\r
+   #0: case readkey of { extd. keystroke }\r
+        'G': p:=0; { Home }\r
+        'K': if p>0 then dec(p); { left }\r
+        'M': if p<length(x) then inc(p); { right }\r
+        'H': if p>80 then dec(p,80); { up }\r
+        'P': if p<length(x)-80 then inc(p,80); { down }\r
+        'O': p:=length(x); { End }\r
+        'S': x:=copy(x,1,p)+copy(x,p+2,255); { Del }\r
+       end;\r
+  end;\r
+ until r=#13;\r
+ ctrlsin(x); typein:=x;\r
+end;\r
+\r
+function typeno(title:string):byte;\r
+var\r
+ x:string[2]; r:char; e:integer; p:word;\r
+begin;\r
+ cleardevice; x:='000';\r
+ settextstyle(0,0,3); setcolor(9); outtextxy(0,0,title);\r
+ setfillstyle(1,0); setcolor(10); fillchar(chars,sizeof(chars),#32);\r
+ repeat\r
+  bar(100,100,150,125);\r
+  outtextxy(100,100,x);\r
+  repeat r:=readkey until r in ['0'..'9',#27,#13];\r
+  if r=#27 then begin; typeno:=255; exit; end;\r
+  if r<>#13 then x:=x[2]+r;\r
+ until r=#13;\r
+ val(x,p,e); typeno:=p;\r
+end;\r
+\r
+procedure showallnames;\r
+var fv:byte; s:string[2]; r:char;\r
+begin;\r
+ settextstyle(0,0,2); cleardevice; setcolor(13); outtextxy(0,0,'Descriptions start...');\r
+ settextstyle(0,0,1); setcolor(7);\r
+ for fv:=1 to 29 do\r
+ begin;\r
+  str(fv:2,s);\r
+  outtextxy((fv div 15)*320,((fv mod 15)*10)+30,s+'='+copy(names[fv,1],0,33));\r
+ end;\r
+ setcolor(15); outtextxy(500,190,'Press any key...');\r
+ r:=readkey;\r
+end;\r
+\r
+procedure showallassoc;\r
+var fv:byte; s:string[2]; r:char;\r
+\r
+  procedure saascreen;\r
+  begin;\r
+   settextstyle(0,0,2); cleardevice; setcolor(10); outtextxy(0,0,'Everything...');\r
+   settextstyle(0,0,1); setcolor(2);\r
+   outtextxy(17,20,'(Format: <number> : <start of names> : <start of desc.>)');\r
+  end;\r
+\r
+begin;\r
+ saascreen;\r
+ for fv:=1 to 30 do\r
+ begin;\r
+  str(fv-1:2,s);\r
+  outtextxy(0,(((fv-1) mod 10)*10)+30,\r
+   s+':'+copy(names[fv-1,1],1,7)+':'+copy(names[fv-1,2],1,70));\r
+  if (fv mod 10)=0 then begin; r:=readkey; saascreen; end;\r
+ end;\r
+ setcolor(15); outtextxy(500,190,'Press any key...');\r
+ r:=readkey;\r
+end;\r
+\r
+procedure clear;\r
+var fv:byte;\r
+begin;\r
+ fillchar(names ,sizeof(names ),  #0);\r
+ for fv:=1 to numlines do begin; lines[fv].x1:=nay; fields[fv].x1:=nay; end;\r
+ fillchar(peds  ,sizeof(peds  ),#177);\r
+end;\r
+\r
+procedure scramble; { Works both ways. }\r
+var fv,ff:byte;\r
+  procedure scram1(var x:string);\r
+  var fz:byte;\r
+  begin;\r
+   for fz:=1 to length(x) do\r
+    x[fz]:=chr(ord(x[fz]) xor 177);\r
+  end;\r
+begin;\r
+ for fv:=0 to 29 do\r
+  for ff:=1 to 2 do\r
+   scram1(names[fv,ff]);\r
+ scram1(listen);\r
+ scram1(flags);\r
+end;\r
+\r
+procedure save;\r
+var x:string; f:file; minnames,minlines,minpeds,minfields,fv,ff:byte;\r
+begin;\r
+ minnames :=0; for fv:=0 to 29 do if names[fv,1]<>''    then minnames :=fv;\r
+ minlines :=0; for fv:=1 to numlines do\r
+                if lines[fv].x1<>nay  then minlines :=fv;\r
+ minpeds  :=0; for fv:=1 to 15 do if peds[fv].dir<177   then minpeds  :=fv;\r
+ minfields:=0; for fv:=1 to 30 do if fields[fv].x1<>nay then minfields:=fv;\r
+ assign(f,'c:\avalot\also'+n+'.avd');\r
+ rewrite(f,1);\r
+ x:='This is an Also .AVD file, which belongs to AVALOT.EXE. Its contents'+\r
+ #13+#10+'are subject to copyright, so there. Have fun!'+#26+' *Minstrel* ';\r
+ blockwrite(f,x[1],128);\r
+ scramble;\r
+ blockwrite(f,minnames,1);\r
+ for fv:=0 to minnames do\r
+  for ff:=1 to 2 do\r
+   blockwrite(f,names[fv,ff],length(names[fv,ff])+1);\r
+ blockwrite(f,minlines,1);\r
+ blockwrite(f,lines,sizeof(lines[1])*minlines);\r
+ blockwrite(f,minpeds,1);\r
+ blockwrite(f,peds,sizeof(peds[1])*minpeds);\r
+ blockwrite(f,minfields,1);\r
+ blockwrite(f,fields,sizeof(fields[1])*minfields);\r
+ blockwrite(f,magics,sizeof(magics));\r
+ blockwrite(f,portals,sizeof(portals));\r
+ blockwrite(f,flags,sizeof(flags));\r
+ blockwrite(f,listen[0],1);\r
+ blockwrite(f,listen[1],length(listen));\r
+ close(f);\r
+ scramble;\r
+end;\r
+\r
+procedure load;\r
+var f:file; minnames,minlines,minpeds,minfields:byte; ff,fv:byte;\r
+\r
+  function nextstring:string;\r
+  var l:byte; x:string;\r
+  begin;\r
+   x:=''; blockread(f,l,1); blockread(f,x[1],l); x[0]:=chr(l); nextstring:=x;\r
+  end;\r
+\r
+begin;\r
+ clear;\r
+ assign(f,'c:\avalot\also'+n+'.avd');\r
+{$I-} reset(f,1); {$I+} if ioresult<>0 then exit; { no Also file }\r
+ seek(f,128); blockread(f,minnames,1);\r
+ for fv:=0 to minnames do\r
+  for ff:=1 to 2 do\r
+   names[fv,ff]:=nextstring;\r
+ blockread(f,minlines,1);\r
+ blockread(f,lines,sizeof(lines[1])*minlines);\r
+ blockread(f,minpeds,1);\r
+ blockread(f,peds,sizeof(peds[1])*minpeds);\r
+ blockread(f,minfields,1);\r
+ blockread(f,fields,sizeof(fields[1])*minfields);\r
+ blockread(f,magics,sizeof(magics));\r
+ blockread(f,portals,sizeof(portals));\r
+ blockread(f,flags,sizeof(flags));\r
+ blockread(f,listen[0],1);\r
+ blockread(f,listen[1],length(listen));\r
+ close(f);\r
+ scramble;\r
+end;\r
+\r
+procedure editmagics;\r
+const codes : array[1..15] of char = '123456789ABCDEF';\r
+var\r
+ y:integer;\r
+ r,rr:char; p:byte;\r
+\r
+  procedure display;\r
+  var fv:byte;\r
+  begin;\r
+   cleardevice;\r
+   settextstyle(0,0,2); setcolor(15); outtextxy(0,0,'Magics.');\r
+   settextstyle(0,0,1);\r
+   for fv:=1 to 15 do\r
+   begin;\r
+    y:=23+fv*10;\r
+    setcolor(fv); outtextxy(100,y,'$'+codes[fv]);\r
+    with magics[fv] do\r
+    begin;\r
+     case op of\r
+      nix: begin; setcolor(8); outtextxy(140,y,'Nix'); end;\r
+      bounce: begin; setcolor(10); outtextxy(143,y,'Bounce!'); end;\r
+      exclaim: begin;\r
+                setcolor(14); outtextxy(143,y,'Exclaim: '+strf(data));\r
+               end;\r
+      transport: begin;\r
+                  setcolor(12);\r
+                  outtextxy(143,y,'Transport to '+strf(hi(data))+\r
+                   ', ped '+strf(lo(data)));\r
+                 end;\r
+      unfinished: begin;\r
+                   setcolor(15); outtextxy(143,y,'*** UNFINISHED! ***');\r
+                  end;\r
+      special: begin;\r
+                setcolor(6); outtextxy(143,y,'Special call no. '+strf(data));\r
+               end;\r
+      opendoor: begin;\r
+                 setcolor(11);\r
+                 outtextxy(143,y,'Opening door to '+strf(hi(data))+\r
+                  ', ped '+strf(lo(data)));\r
+                end;\r
+     end;\r
+    end;\r
+   end;\r
+   outtextxy(177,190,'Which do you want to change? (Esc=Exit) $');\r
+  end;\r
+\r
+  function ask(x:string):word;\r
+  var q:string; thomaswashere:word; e:integer;\r
+  begin;\r
+   cleardevice;\r
+   setcolor(10); settextstyle(0,0,3); outtextxy(0,100,x);\r
+   repeat\r
+    readln(q); val(q,thomaswashere,e);\r
+   until e=0; ask:=thomaswashere;\r
+  end;\r
+\r
+begin;\r
+ repeat\r
+  display;\r
+  repeat\r
+   r:=upcase(readkey);\r
+   if r=#27 then exit;\r
+   p:=pos(r,codes); { which are we editing? }\r
+  until p>0; { it must BE there... }\r
+  setcolor(p); cleardevice;\r
+  outtextxy(177,17,'Editing magic $'+r+'.');\r
+  outtextxy(0,30,'New operation ( (N)ix, (B)ounce, (E)xclaim, (T)ransport, (U)nfinished),');\r
+  outtextxy(30,40,'(S)pecial, (O)pening Door?');\r
+  repeat rr:=upcase(readkey) until rr in ['N','B','E','T','U','S','O',#27];\r
+  with magics[p] do\r
+   case rr of\r
+    #27: exit; { cancelling code }\r
+    'N': op:=nix;\r
+    'B': op:=bounce;\r
+    'E': begin; op:=exclaim; data:=ask('Which scroll?'); end;\r
+    'T': begin; op:=transport; data:=ask('Ped no.?')+ask('Whither?')*256; end;\r
+    'U': op:=unfinished;\r
+    'S': begin; op:=special; data:=ask('Which call?'); end;\r
+    'O': begin; op:=opendoor; data:=ask('Ped no.?')+ask('Whither?')*256; end;\r
+   end;\r
+ until false;\r
+end;\r
+\r
+procedure editportals; { much t'same as editmagics }\r
+const codes : array[9..15] of char = '9ABCDEF';\r
+var\r
+ y:integer;\r
+ r,rr:char; p:byte;\r
+\r
+  procedure display;\r
+  var fv:byte;\r
+  begin;\r
+   cleardevice;\r
+   settextstyle(0,0,2); setcolor(15); outtextxy(0,0,'Portals.');\r
+   settextstyle(0,0,1);\r
+   for fv:=9 to 15 do\r
+   begin;\r
+    y:=fv*10-53;\r
+    setcolor(fv); outtextxy(100,y,'$'+codes[fv]);\r
+    with portals[fv] do\r
+    begin;\r
+     case op of\r
+      nix: begin; setcolor(8); outtextxy(140,y,'Nix'); end;\r
+      exclaim: begin;\r
+                setcolor(14); outtextxy(143,y,'Exclaim: '+strf(data));\r
+               end;\r
+      transport: begin;\r
+                  setcolor(12);\r
+                  outtextxy(143,y,'Transport to '+strf(hi(data))+\r
+                   ', ped '+strf(lo(data)));\r
+                 end;\r
+      unfinished: begin;\r
+                   setcolor(15); outtextxy(143,y,'*** UNFINISHED! ***');\r
+                  end;\r
+      special: begin;\r
+                setcolor(6); outtextxy(143,y,'Special call no. '+strf(data));\r
+               end;\r
+      opendoor: begin;\r
+                 setcolor(11);\r
+                 outtextxy(143,y,'Opening door to '+strf(hi(data))+\r
+                  ', ped '+strf(lo(data)));\r
+                end;\r
+     end;\r
+    end;\r
+   end;\r
+   outtextxy(177,190,'Which do you want to change? (Esc=Exit) $');\r
+  end;\r
+\r
+  function ask(x:string):word;\r
+  var q:string; thomaswashere:word; e:integer;\r
+  begin;\r
+   cleardevice;\r
+   setcolor(10); settextstyle(0,0,3); outtextxy(0,100,x);\r
+   repeat\r
+    readln(q); val(q,thomaswashere,e);\r
+   until e=0; ask:=thomaswashere;\r
+  end;\r
+\r
+begin;\r
+ repeat\r
+  display;\r
+  repeat\r
+   r:=upcase(readkey);\r
+   if r=#27 then exit;\r
+   p:=pos(r,codes); { which are we editing? }\r
+  until p>0; { it must BE there... }\r
+  inc(p,8); setcolor(p); cleardevice;\r
+  outtextxy(177,17,'Editing portal $'+r+'.');\r
+  outtextxy(0,30,'New operation ( (N)ix, (E)xclaim, (T)ransport, (U)nfinished),');\r
+  outtextxy(30,40,'(S)pecial, (O)pening Door?');\r
+  repeat rr:=upcase(readkey) until rr in ['N','E','T','U','S','O',#27];\r
+  with portals[p] do\r
+   case rr of\r
+    #27: exit; { cancelling code }\r
+    'N': op:=nix;\r
+    'E': begin; op:=exclaim; data:=ask('Which scroll?'); end;\r
+    'T': begin; op:=transport; data:=ask('Ped no.?')+ask('Whither?')*256; end;\r
+    'U': op:=unfinished;\r
+    'S': begin; op:=special; data:=ask('Which call?'); end;\r
+    'O': begin; op:=opendoor; data:=ask('Ped no.?')+ask('Whither?')*256; end;\r
+   end;\r
+ until false;\r
+end;\r
+\r
+procedure editflags;\r
+var r:char;\r
+begin;\r
+ cleardevice;\r
+ settextstyle(0,0,2); setcolor(15); outtextxy(0,0,'Flags.');\r
+ settextstyle(0,0,1); setcolor(10);\r
+ outtextxy(100,30,'Press the letter of the flag you want to toggle.');\r
+ outtextxy(100,40,'Tab = flip screens, Esc/Enter = return to menu.');\r
+ setcolor(14); setfillstyle(1,0);\r
+ for r:='A' to 'Z' do\r
+  if pos(r,flags)>0 then outtextxy(ord(r)*20-1223,77,r);\r
+ repeat\r
+  repeat r:=upcase(readkey) until r in ['A'..'Z',#27,#13,#9];\r
+  case r of\r
+   'A'..'Z': begin;\r
+              if pos(r,flags)>0 then\r
+              begin; { flag is on- switch it off }\r
+               delete(flags,pos(r,flags),1);\r
+               bar(ord(r)*20-1223,77,ord(r)*20-1213,87);\r
+               sound(1777); delay(7); nosound;\r
+              end else\r
+              begin; { flag is off- switch it on }\r
+               flags:=flags+r;\r
+               outtextxy(ord(r)*20-1223,77,r);\r
+               sound(177); delay(7); nosound;\r
+              end;\r
+             end;\r
+   #27,#13: exit;\r
+   #9: flipover;\r
+  end;\r
+ until false;\r
+end;\r
+\r
+procedure alsomenu;\r
+var r:char; t:byte;\r
+begin;\r
+ repeat\r
+  setactivepage(0); setvisualpage(0);\r
+  cleardevice; setcolor(15); settextstyle(0,0,2);\r
+  outtextxy(0,0,'Also... Main Menu');\r
+  settextstyle(0,0,1); setcolor(10);\r
+  outtextxy(100, 40,'1) Edit the names of an object');\r
+  outtextxy(100, 50,'2) View all names');\r
+  outtextxy(100, 60,'3) Edit the description of this object');\r
+  outtextxy(100, 70,'4) View all associations.');\r
+  outtextxy(100, 80,'5) Enter Lino mode.');\r
+  outtextxy(100, 90,'6) Edit magics.');\r
+  outtextxy(100,100,'7) Edit portals.');\r
+  outtextxy(100,110,'8) Edit flags.');\r
+  outtextxy(100,120,'9) Edit listen field.');\r
+  outtextxy(100,160,'S) Save');\r
+  outtextxy(100,170,'L) Load');\r
+  outtextxy( 80,180,'Tab) View other screen');\r
+  if current=0 then outtextxy(0,140,'< Main description of room >') else\r
+   outtextxy(0,140,'<'+names[current,1]+'>');\r
+  repeat\r
+   r:=upcase(readkey); if r=#9 then flipover;\r
+  until r in ['1'..'9','S','L',#0];\r
+  case r of\r
+   '1': begin;\r
+         repeat\r
+          t:=typeno('Which object? (0-30)');\r
+         until (t<30) or (t=255);\r
+         if (t<>255) and (t<>0) then names[t,1]:=typein(names[t,1]);\r
+         current:=t;\r
+        end;\r
+   '2': showallnames;\r
+   '3': names[current,2]:=typein(names[current,2]);\r
+   '4': showallassoc;\r
+   '5': lino;\r
+   '6': editmagics;\r
+   '7': editportals;\r
+   '8': editflags;\r
+   '9': listen:=typein(listen);\r
+   'S': save;\r
+   'L': load;\r
+   #0: if readkey=#45 then exit;\r
+  end;\r
+ until false;\r
+end;\r
+\r
+begin;\r
+ writeln('*** ALSO ***');\r
+ writeln;\r
+ write('No. of screen to edit?'); readln(n); load;\r
+ assign(f,'v:avalot.fnt'); reset(f); read(f,skinny); close(f);\r
+ gd:=3; gm:=0; initgraph(gd,gm,'c:\bp\bgi'); current:=0;\r
+ loadscreen;\r
+ alsomenu;\r
+end.\r
diff --git a/avalot/also1.avd b/avalot/also1.avd
new file mode 100644 (file)
index 0000000..0aebeb6
Binary files /dev/null and b/avalot/also1.avd differ
diff --git a/avalot/also10.avd b/avalot/also10.avd
new file mode 100644 (file)
index 0000000..7bec0ac
Binary files /dev/null and b/avalot/also10.avd differ
diff --git a/avalot/also11.avd b/avalot/also11.avd
new file mode 100644 (file)
index 0000000..8476e20
Binary files /dev/null and b/avalot/also11.avd differ
diff --git a/avalot/also12.avd b/avalot/also12.avd
new file mode 100644 (file)
index 0000000..bb3061b
Binary files /dev/null and b/avalot/also12.avd differ
diff --git a/avalot/also13.avd b/avalot/also13.avd
new file mode 100644 (file)
index 0000000..af256c6
Binary files /dev/null and b/avalot/also13.avd differ
diff --git a/avalot/also14.avd b/avalot/also14.avd
new file mode 100644 (file)
index 0000000..a27ad99
Binary files /dev/null and b/avalot/also14.avd differ
diff --git a/avalot/also15.avd b/avalot/also15.avd
new file mode 100644 (file)
index 0000000..fa5ad42
Binary files /dev/null and b/avalot/also15.avd differ
diff --git a/avalot/also16.avd b/avalot/also16.avd
new file mode 100644 (file)
index 0000000..e6b5f10
Binary files /dev/null and b/avalot/also16.avd differ
diff --git a/avalot/also19.avd b/avalot/also19.avd
new file mode 100644 (file)
index 0000000..132d4bb
Binary files /dev/null and b/avalot/also19.avd differ
diff --git a/avalot/also2.avd b/avalot/also2.avd
new file mode 100644 (file)
index 0000000..393c670
Binary files /dev/null and b/avalot/also2.avd differ
diff --git a/avalot/also20.avd b/avalot/also20.avd
new file mode 100644 (file)
index 0000000..fad7c45
Binary files /dev/null and b/avalot/also20.avd differ
diff --git a/avalot/also21.avd b/avalot/also21.avd
new file mode 100644 (file)
index 0000000..195692c
Binary files /dev/null and b/avalot/also21.avd differ
diff --git a/avalot/also22.avd b/avalot/also22.avd
new file mode 100644 (file)
index 0000000..e12c084
Binary files /dev/null and b/avalot/also22.avd differ
diff --git a/avalot/also23.avd b/avalot/also23.avd
new file mode 100644 (file)
index 0000000..4971281
Binary files /dev/null and b/avalot/also23.avd differ
diff --git a/avalot/also25.avd b/avalot/also25.avd
new file mode 100644 (file)
index 0000000..8bc70c7
Binary files /dev/null and b/avalot/also25.avd differ
diff --git a/avalot/also26.avd b/avalot/also26.avd
new file mode 100644 (file)
index 0000000..dfa26dd
Binary files /dev/null and b/avalot/also26.avd differ
diff --git a/avalot/also27.avd b/avalot/also27.avd
new file mode 100644 (file)
index 0000000..34a8d54
Binary files /dev/null and b/avalot/also27.avd differ
diff --git a/avalot/also28.avd b/avalot/also28.avd
new file mode 100644 (file)
index 0000000..cce00e2
Binary files /dev/null and b/avalot/also28.avd differ
diff --git a/avalot/also29.avd b/avalot/also29.avd
new file mode 100644 (file)
index 0000000..afd59c4
Binary files /dev/null and b/avalot/also29.avd differ
diff --git a/avalot/also3.avd b/avalot/also3.avd
new file mode 100644 (file)
index 0000000..77d44f1
Binary files /dev/null and b/avalot/also3.avd differ
diff --git a/avalot/also40.avd b/avalot/also40.avd
new file mode 100644 (file)
index 0000000..7ecd121
Binary files /dev/null and b/avalot/also40.avd differ
diff --git a/avalot/also42.avd b/avalot/also42.avd
new file mode 100644 (file)
index 0000000..de0ab9d
Binary files /dev/null and b/avalot/also42.avd differ
diff --git a/avalot/also46.avd b/avalot/also46.avd
new file mode 100644 (file)
index 0000000..e54c74b
Binary files /dev/null and b/avalot/also46.avd differ
diff --git a/avalot/also47.avd b/avalot/also47.avd
new file mode 100644 (file)
index 0000000..2051c9b
Binary files /dev/null and b/avalot/also47.avd differ
diff --git a/avalot/also5.avd b/avalot/also5.avd
new file mode 100644 (file)
index 0000000..f9b3413
Binary files /dev/null and b/avalot/also5.avd differ
diff --git a/avalot/also50.avd b/avalot/also50.avd
new file mode 100644 (file)
index 0000000..e62eff3
Binary files /dev/null and b/avalot/also50.avd differ
diff --git a/avalot/also51.avd b/avalot/also51.avd
new file mode 100644 (file)
index 0000000..687acb9
Binary files /dev/null and b/avalot/also51.avd differ
diff --git a/avalot/also7.avd b/avalot/also7.avd
new file mode 100644 (file)
index 0000000..86e5734
Binary files /dev/null and b/avalot/also7.avd differ
diff --git a/avalot/also70.avd b/avalot/also70.avd
new file mode 100644 (file)
index 0000000..e2706a3
Binary files /dev/null and b/avalot/also70.avd differ
diff --git a/avalot/also71.avd b/avalot/also71.avd
new file mode 100644 (file)
index 0000000..0dd12f2
Binary files /dev/null and b/avalot/also71.avd differ
diff --git a/avalot/also80.avd b/avalot/also80.avd
new file mode 100644 (file)
index 0000000..303110f
Binary files /dev/null and b/avalot/also80.avd differ
diff --git a/avalot/also9.avd b/avalot/also9.avd
new file mode 100644 (file)
index 0000000..2ab6d6c
Binary files /dev/null and b/avalot/also9.avd differ
diff --git a/avalot/also99.avd b/avalot/also99.avd
new file mode 100644 (file)
index 0000000..58703ec
Binary files /dev/null and b/avalot/also99.avd differ
diff --git a/avalot/andexor.pas b/avalot/andexor.pas
new file mode 100644 (file)
index 0000000..0226906
--- /dev/null
@@ -0,0 +1,117 @@
+program andexor; { Trippancy IV - original file }\r
+uses Graph;\r
+const\r
+ taboo=cyan;\r
+\r
+type\r
+ adxtype = record\r
+            name:string[12]; { name of character }\r
+            num:byte; { number of pictures }\r
+            xl,yl:byte; { x & y lengths of pictures }\r
+            seq:byte; { how many in one stride }\r
+            size:word; { the size of all the pictures }\r
+           end;\r
+\r
+\r
+var\r
+ gd,gm:integer;\r
+ adx:adxtype;\r
+ adxpic:array[1..24,0..1] of pointer; { the pictures themselves }\r
+ f:file; x:string; n:byte;\r
+\r
+procedure load(nam:string);\r
+var z:byte;\r
+ a:array[1..4] of pointer;\r
+ f:file; s:word;\r
+ xxx:string[40];\r
+ check:string;\r
+\r
+begin;\r
+ assign(f,nam);\r
+ reset(f,1);\r
+ blockread(f,xxx,41);\r
+ blockread(f,check,13);\r
+ blockread(f,check,31);\r
+ s:=imagesize(0,0,Getmaxx,75);\r
+ for z:=1 to 2 do\r
+ begin;\r
+  getmem(a[z],s);\r
+  blockread(f,a[z]^,s);\r
+  putimage(0,15+(z-1)*75,a[z]^,0);\r
+  freemem(a[z],s);\r
+ end;\r
+ close(f);\r
+end;\r
+\r
+procedure silhouette;\r
+var x,y,c:byte;\r
+begin;\r
+ setvisualpage(1); setactivepage(1); setfillstyle(1,15);\r
+ for gm:=0 to 3 do\r
+  for gd:=1 to 6 do\r
+  begin; { 26,15 }\r
+(*   bar((gm div 2)*320+gd*40,20+(gm mod 2)*40,(gm div 2)*320+gd*40+35,(gm mod 2)*40+60); *)\r
+   for y:=1 to adx.yl do\r
+    for x:=1 to adx.xl do\r
+    begin;\r
+     setactivepage(0);\r
+     c:=getpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y);\r
+     setactivepage(1);\r
+(*     if c<>taboo then putpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y,0); *)\r
+     if c=taboo then putpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y,15);\r
+    end;\r
+   getmem(adxpic[gm*6+gd,0],adx.size);\r
+   getimage((gm div 2)*320+gd*40+1,20+(gm mod 2)*40+1,\r
+     (gm div 2)*320+gd*40+adx.xl,20+(gm mod 2)*40+adx.yl,\r
+      adxpic[gm*6+gd,0]^);\r
+  end;\r
+end;\r
+\r
+procedure standard;\r
+var x,y,c:byte;\r
+begin;\r
+ setvisualpage(2); setactivepage(2);\r
+ for gm:=0 to 3 do\r
+  for gd:=1 to 6 do\r
+  begin; { 26,15 }\r
+   for y:=1 to adx.yl do\r
+    for x:=1 to adx.xl do\r
+    begin;\r
+     setactivepage(0);\r
+     c:=getpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y);\r
+     setactivepage(2);\r
+     if c<>taboo then putpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y,c);\r
+    end;\r
+   getmem(adxpic[gm*6+gd,1],adx.size);\r
+   getimage((gm div 2)*320+gd*40+1,20+(gm mod 2)*40+1,\r
+     (gm div 2)*320+gd*40+adx.xl,20+(gm mod 2)*40+adx.yl,\r
+      adxpic[gm*6+gd,1]^);\r
+  end;\r
+end;\r
+\r
+begin;\r
+ gd:=3; gm:=0; initgraph(gd,gm,''); fillchar(adxpic,sizeof(adxpic),#177);\r
+ load('v:avalots.avd');\r
+(* getmem(adxpic[1,1,1],adx.size); getimage(40,20,75,60,adxpic[1,1,1]^);\r
+ putimage(100,100,adxpic[1,1,1]^,0); *)\r
+ with adx do\r
+ begin;\r
+  name:='Avalot';\r
+  num:=24; seq:=6;\r
+  xl:=32; yl:=35; { 35,40 }\r
+\r
+  size:=imagesize(40,20,40+xl,60+yl);\r
+ end;\r
+ silhouette;\r
+ standard;\r
+ x:='Sprite file for Avvy - Trippancy IV. Subject to copyright.'+#26;\r
+ assign(f,'v:sprite1.avd');\r
+ rewrite(f,1);\r
+ blockwrite(f,x[1],59);\r
+ blockwrite(f,adx,sizeof(adx));\r
+ for gd:=1 to adx.num do\r
+  for gm:=0 to 1 do\r
+   blockwrite(f,adxpic[gd,gm]^,adx.size); { next image }\r
+ close(f);\r
+ closegraph;\r
+end.\1a
\ No newline at end of file
diff --git a/avalot/andexor2.pas b/avalot/andexor2.pas
new file mode 100644 (file)
index 0000000..fdddb2b
--- /dev/null
@@ -0,0 +1,130 @@
+program andexor2; { Trippancy IV - original file }\r
+uses Graph;\r
+const\r
+ taboo=cyan;\r
+\r
+type\r
+ adxtype = record\r
+            name:string[12]; { name of character }\r
+            num:byte; { number of pictures }\r
+            xl,yl:byte; { x & y lengths of pictures }\r
+            seq:byte; { how many in one stride }\r
+            size:word; { the size of all the pictures }\r
+            fgc,bgc:byte; { foreground & background bubble colours }\r
+           end;\r
+\r
+\r
+var\r
+ gd,gm:integer;\r
+ adx:adxtype;\r
+ adxpic:array[0..1] of pointer; { the pictures themselves }\r
+ f:file; x:string; n:byte; side2:integer; bigsize:word;\r
+\r
+procedure load(n:string);\r
+var z:byte;\r
+ a:array[1..4] of pointer;\r
+ f:file; s:word;\r
+ xxx:string[40];\r
+ check:string;\r
+\r
+begin;\r
+ assign(f,n);\r
+ reset(f,1);\r
+ blockread(f,xxx,41);\r
+ blockread(f,check,13);\r
+ blockread(f,check,31);\r
+ s:=imagesize(0,0,Getmaxx,75);\r
+ for z:=1 to 2 do\r
+ begin;\r
+  getmem(a[z],s);\r
+  blockread(f,a[z]^,s);\r
+  putimage(0,15+(z-1)*75,a[z]^,0);\r
+  freemem(a[z],s);\r
+ end;\r
+ close(f);\r
+end;\r
+\r
+procedure silhouette;\r
+var x,y,c:byte;\r
+begin;\r
+ setvisualpage(1); setactivepage(1); setfillstyle(1,15);\r
+ with adx do\r
+ begin;\r
+  for gm:=0 to 3 do\r
+   for gd:=1 to 6 do\r
+   begin; { 26,15 }\r
+    side2:=xl*6;\r
+    for y:=1 to yl do\r
+     for x:=1 to xl do\r
+     begin;\r
+      setactivepage(0);\r
+      c:=getpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y);\r
+      setactivepage(1);\r
+      if c=taboo then\r
+       putpixel((gm div 2)*side2+gd*xl+x,20+(gm mod 2)*yl+y,15);\r
+     end;\r
+   end;\r
+  bigsize:=imagesize(xl+1,21,xl*13,20+yl*2);\r
+  getmem(adxpic[0],bigsize);\r
+  getimage(xl+1,21,xl*13,20+yl*2,adxpic[0]^);\r
+  putimage(xl+1,21,adxpic[0]^,notput);\r
+ end;\r
+end;\r
+\r
+procedure standard;\r
+var x,y,c:byte;\r
+begin;\r
+ setvisualpage(2); setactivepage(2);\r
+ with adx do\r
+ begin;\r
+  for gm:=0 to 3 do\r
+   for gd:=1 to 6 do\r
+   begin; { 26,15 }\r
+    for y:=1 to yl do\r
+     for x:=1 to xl do\r
+     begin;\r
+      setactivepage(0);\r
+      c:=getpixel((gm div 2)*320+gd*40+x,20+(gm mod 2)*40+y);\r
+      setactivepage(2);\r
+      if c<>taboo then\r
+       putpixel((gm div 2)*side2+gd*xl+x,20+(gm mod 2)*yl+y,c);\r
+     end;\r
+(*    getmem(adxpic[gm*6+gd,1],adx.size);\r
+    getimage((gm div 2)*side2+gd*xl+x,20+(gm mod 2)*yl+y,\r
+       (gm div 2)*side2+gd*xl*2+x,20+(gm mod 2)*yl*2+y,\r
+       adxpic[gm*6+gd,1]^); *)\r
+  end;\r
+  getmem(adxpic[1],bigsize);\r
+  getimage(xl+1,21,xl*13,20+yl*2,adxpic[1]^);\r
+  putimage(xl+1,21,adxpic[1]^,notput);\r
+ end;\r
+end;\r
+\r
+begin;\r
+ gd:=3; gm:=0; initgraph(gd,gm,''); fillchar(adxpic,sizeof(adxpic),#177);\r
+ load('v:avalots.avd');\r
+ with adx do\r
+ begin;\r
+  name:='Avalot';\r
+  num:=24; seq:=6;\r
+  xl:=33; yl:=35; { 35,40 }\r
+  fgc:=yellow; bgc:=red;\r
+\r
+  size:=imagesize(40,20,40+xl,60+yl);\r
+ end;\r
+ silhouette;\r
+ standard;\r
+ x:='Sprite file for Avvy - Trippancy IV. Subject to copyright.'+#26;\r
+ assign(f,'v:sprite1.avd');\r
+ rewrite(f,1);\r
+ blockwrite(f,x[1],59);\r
+ blockwrite(f,adx,sizeof(adx));\r
+ blockwrite(f,bigsize,2);\r
+ for gm:=0 to 1 do\r
+ begin;\r
+  putimage(0,0,adxpic[gm]^,0);\r
+  blockwrite(f,adxpic[gm]^,bigsize); { next image }\r
+ end;\r
+ close(f);\r
+ closegraph;\r
+end.\1a
\ No newline at end of file
diff --git a/avalot/andextst.pas b/avalot/andextst.pas
new file mode 100644 (file)
index 0000000..fedee4e
--- /dev/null
@@ -0,0 +1,59 @@
+program andextest;\r
+uses Graph;\r
+\r
+type\r
+ adxtype = array[1..24,0..1] of pointer;\r
+\r
+var\r
+ gd,gm:integer;\r
+ s:word; f:file; n,anim,cp,t:byte;\r
+ adx:array[0..0] of adxtype;\r
+ back:array[0..1] of pointer;\r
+ x:integer;\r
+ ox:array[0..1] of integer;\r
+\r
+procedure andex(x,y:integer; n,num:byte);\r
+begin;\r
+ putimage(x,y,adx[num,n,0]^,andput);\r
+ putimage(x,y,adx[num,n,1]^,xorput);\r
+end;\r
+\r
+procedure loadadx(num:byte; x:string);\r
+var n:byte;\r
+begin;\r
+ assign(f,x);\r
+ reset(f,1); seek(f,59);\r
+ blockread(f,n,1); { No. of images... }\r
+ for gd:=1 to n do\r
+  for gm:=0 to 1 do\r
+  begin;\r
+   blockread(f,s,2); { size of next image... }\r
+   getmem(adx[num,gd,gm],s);\r
+   blockread(f,adx[num,gd,gm]^,s); { next image }\r
+  end;\r
+ close(f);\r
+end;\r
+\r
+begin;\r
+ loadadx(0,'d:sprite0.avd');\r
+ loadadx(1,'d:sprite0.avd');\r
+ gd:=3; gm:=0; initgraph(gd,gm,'');\r
+ for gd:=0 to 1 do\r
+ begin;\r
+  setactivepage(gd); setfillstyle(6,1); bar(0,0,640,200);\r
+  getmem(back[gd],s);\r
+ end;\r
+ x:=0; anim:=1; cp:=0; t:=2; setactivepage(0);\r
+ repeat\r
+  setactivepage(cp); setvisualpage(1-cp);\r
+  for gm:=0 to 1 do\r
+  begin;\r
+   if t>0 then dec(t) else\r
+    putimage(ox[cp],77,back[cp]^,copyput);\r
+   getimage(x,77,x+31,77+35,back[cp]^);\r
+   andex(x,177,anim+6,gm);\r
+   ox[gm,cp]:=x; inc(x,5);\r
+  end;\r
+  inc(anim); if anim=7 then anim:=1;cp:=1-cp;\r
+ until false;\r
+end.\1a
\ No newline at end of file
diff --git a/avalot/arch.pas b/avalot/arch.pas
new file mode 100644 (file)
index 0000000..f5aa55c
--- /dev/null
@@ -0,0 +1,125 @@
+{\r
+  ÛßÜ ÛßÜ ÜßßÜ  ßÛß Ûßß  Üß ßÛß      ÜßÛßÜ  ßÛß ÛÜ  Û ÜÛßß  ßÛß ÛßÜ Ûßß Û\r
+  Ûß  ÛÛ  Û  Û Ü Û  Ûßß ßÜ   Û      Û  Û  Û  Û  Û ÛÜÛ  ßßßÜ  Û  ÛÛ  Ûßß Û\r
+  ß   ß ß  ßß   ßß  ßßß   ß  ß      ß  ß  ß ßßß ß  ßß  ßßß   ß  ß ß ßßß ßßß\r
+\r
+                 ENID             Edna's manager. }\r
+\r
+unit Arch; { Loads/ saves files. }\r
+\r
+interface\r
+\r
+uses Gyro;\r
+\r
+procedure save(name:string);\r
+\r
+implementation\r
+\r
+uses Dos,Scrolls;\r
+\r
+type\r
+  ednahead = record { Edna header }\r
+            { This header starts at byte offset 177 in the .ASG file. }\r
+            ID:array[1..9] of char; { signature }\r
+            revision:word; { EDNA revision, here 2 (1=dna256) }\r
+            game:string[50]; { Long name, eg Lord Avalot D'Argent }\r
+            shortname:string[15]; { Short name, eg Avalot }\r
+            number:word; { Game's code number, here 2 }\r
+            ver:word; { Version number as integer (eg 1.00 = 100) }\r
+            verstr:string[5]; { Vernum as string (eg 1.00 = "1.00" }\r
+            filename:string[12]; { Filename, eg AVALOT.EXE }\r
+            os:byte; { Saving OS (here 1=DOS. See below for others.} }\r
+\r
+            { Info on this particular game }\r
+\r
+            fn:string[8]; { Filename (not extension ('cos that's .ASG)) }\r
+            d,m:byte; { D, M, Y are the Day, Month & Year this game was... }\r
+            y:word;  { ...saved on. }\r
+            desc:string[40]; { Description of game (same as in Avaricius!) }\r
+            len:word; { Length of DNA (it's not going to be above 65535!) }\r
+\r
+            { Quick reference & miscellaneous }\r
+\r
+            saves:word; { no. of times this game has been saved }\r
+            cash:integer; { contents of your wallet in numerical form }\r
+            money:string[20]; { ditto in string form (eg 5/-, or 1 denarius)}\r
+            points:word; { your score }\r
+\r
+            { DNA values follow, then footer (which is ignored) }\r
+           end;\r
+  { Possible values of edhead.os:\r
+     1 = DOS        4 = Mac\r
+     2 = Windows    5 = Amiga\r
+     3 = OS/2       6 = ST }\r
+const\r
+ crlf = #13+#10;\r
+\r
+ ednafirst : array[1..177] of char =\r
+  'This is an EDNA-based file, saved by a Thorsoft game. Good luck!'+crlf+\r
+  ^Z+ { 67 bytes... }\r
+  crlf+crlf+ { 71 bytes... }\r
+  '12345678901234567890123456789012345678901234567890'+\r
+  '12345678901234567890123456789012345678901234567890'+\r
+  '123456';\r
+\r
+ months = 'JanFebMarAprMayJunJulAugSepOctNovDec';\r
+ ednaID = 'TT'+#177+#48+#01+#117+#177+#153+#177;\r
+\r
+ ttage = 18;\r
+ ttwashere = 'Thomas was here ';\r
+\r
+procedure save(name:string);\r
+var\r
+ f:file;\r
+ eh:edhead;\r
+ groi:word;\r
+ groi2:string;\r
+begin;\r
+ fillchar(eh,sizeof(eh),#177); { Fill up the edhead }\r
+\r
+ inc(dna.saves); { It's been saved one more time... }\r
+\r
+ with eh do\r
+ begin;\r
+\r
+  { Info about this program }\r
+\r
+  id:=ednaid;  { Edna's signature }\r
+  revision:=2; { Second revision of .ASG format }\r
+  game:='Lord Avalot d''Argent'; { Title of game }\r
+  shortname:='Avalot';\r
+  number:=2; { Second Avvy game }\r
+  ver:=100; { Version 1.00 }\r
+  verstr:='1.00'; { ditto }\r
+  filename:='AVALOT.EXE'; { program's filename }\r
+  os:=1; { Saved under DOS }\r
+\r
+  { Info on this particular game }\r
+\r
+  fsplit(name,groi2,fn,groi2); { fn = filename of this game }\r
+  getdate(d,m,y,groi); { Day, month & year when the game was saved }\r
+  desc:=RoomName; { Description of game (same as in Avaricius!) }\r
+  len:=sizeof(dna); { Length of DNA (it's not going to be above 65535!) }\r
+\r
+  { Quick reference & miscellaneous }\r
+\r
+  saves:=dna.saves; { no. of times this game has been saved }\r
+  cash:=dna.pence; { contents of your wallet in numerical form }\r
+  money:=lsd; { ditto in string form (eg 5/-, or 1 denarius)}\r
+  points:=dna.score; { your score }\r
+ end;\r
+\r
+ assign(f,name);\r
+ rewrite(f,1);\r
+\r
+ blockwrite(f,ednafirst,177);\r
+ blockwrite(f,eh,sizeof(eh));\r
+ blockwrite(f,dna,sizeof(dna));\r
+\r
+ for groi:=1 to ttage do\r
+  blockwrite(f,ttwashere,sizeof(ttwashere));\r
+\r
+ close(f);\r
+end;\r
+\r
+end.
\ No newline at end of file
diff --git a/avalot/ask2.raw b/avalot/ask2.raw
new file mode 100644 (file)
index 0000000..3c38cdc
--- /dev/null
@@ -0,0 +1,4 @@
+(Spludwick's talk-file)\r
+PHUBARIUM,BLETCHIDE,POTION\r
+\r
+\r
diff --git a/avalot/ask5.raw b/avalot/ask5.raw
new file mode 100644 (file)
index 0000000..e3b1296
--- /dev/null
@@ -0,0 +1,2 @@
+(Geida's talk-file)\r
+ROBIN,HOOD
\ No newline at end of file
diff --git a/avalot/avadocs.ico b/avalot/avadocs.ico
new file mode 100644 (file)
index 0000000..66585d1
Binary files /dev/null and b/avalot/avadocs.ico differ
diff --git a/avalot/avagame.avd b/avalot/avagame.avd
new file mode 100644 (file)
index 0000000..0033d7c
Binary files /dev/null and b/avalot/avagame.avd differ
diff --git a/avalot/avalot!.pas b/avalot/avalot!.pas
new file mode 100644 (file)
index 0000000..6572d9b
--- /dev/null
@@ -0,0 +1,31 @@
+                                                   ÜÛÛÛßßßßßÛÛÛÛÜ\r
+                                                  ÛÛß         ÛÛÛÜ\r
+                                                 ÜÛ            ßÛÛÛÜ\r
+                                                ÜÛß              ßÛÛÛÜ\r
+                                        Ü      ÛÛ\r
+                                       ÛÛ      ÛÛ\r
+ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÜßßÛ ÛÛÛÜßÛÛÛÛÛÛÛÛÛÛÛÛßßßßßÜÜÜÜÜÛ\r
+ßßßßßßßßßßßßßßßßßßÛßßßßßßßßßÛßßßßßßßßß ßÛÛÛÜÜ ßÛÛÛ ßßßßßßÜÜÜÜÜÜÛÛÛÛßßßßß\r
+ ÜÛÜ          ÜÛÛÛÛÛÛÜÛÛ   ÛÛ           ßßßßÛÛÛÛÛÛÛÛÛÛÛÛÛßßßßß     ÜÛÛÜ       ÜÜÜÛÜÜÛÜÜ\r
+ ÛÛÛ          ÛÛßÛÛÛÛÛÛÛÛ  ÛÛÜ                ÛÛÛ                 ÛÛÛÛÛÜ    ÛÛÛÛÛÛÛÛÛÛÛ\r
+ ßÛÛÛÜÜÛÛÛÛ   ÛÛÛÛÛÛÛÛÛÛÛ  ÛÛÛÜÜÛÛÛÜ           ÛÛ                 ÛÛß ÛÛ    ÛÛÛßßÛÛßÛÛÛ\r
+  ßÛÛÛÛÛßÛÛÛ  ÛÛÛÛ ÛÛÛÛÛß   ÛÛÛÛßÛÛÛ           ÛÛÛ               ÛÛÛ  ÛÛÜ   ÛÛÛ  ÛÛ  ÛÛ\r
+   ÛÛÛÛ  ÛÛÛ   ßÛÛ   ÛÛ     ÛÛÛÛ  ÛÛ   ÜÜ       ÛÛÜ              ÛÛÛ  ÛÛÛ   ÛÛß  ÛÛ  ÛÛ\r
+  ÛÛßÛÛ  ÛÛÛ   ÜÛÛ   ÛÛ    ÜÛÛÛÛ  ÛÛß ÛÛ        ßÛÛ              ÛÛÛ  ÛÛÛ   ÛÛ   ÛÛ  ÛÛ\r
+  ÛßÜÛ   ÛÛÛÛ  ÛÛÜ   ÛÛ    ÛÛÛÛÛ  ÛÛÛ ÛÛÜ        ÛÛÜ             ÛÛÛ  ÛÛÛ   ÛÛ   ÛÛ  ÛÛ\r
+ ÛÛÜÛ    ÛÛÛÛ  ÛÛß   ÛÛ    ÛÛÛ    ÛÛÛ ßÛÛÛÛÛÜÜÜÜÜÛÛÛÜÜÛÛÛÛÛÛÛÛß  ÛÛÛ  ÛÛÛ   ÛÛ   ÛÛ  ÛÛ\r
+ ÛÛÛÛ   ÜÛÛÛß  ÛÛ    ÛÛ    ÛÛÛÜÜÜÜÛÛß    ßßßßßßßßßÛÛßßßßß       ÛÛÛÛÜ ÛÛÛ  ÜÛÛ   ÛÛ  ÛÛÜÜ\r
+ ÛÛÛÛÛÛÛÛÛÛÛ   ÛÛ    ÛÛ    ÛÛÛÛÛÛÛÛÛÛ             ÛÛ            ÛÛÛÛÛ ÛÛÛ ÛÛÛÛ   ÛÛ  ÛÛÛÛÛ\r
+  ÛÛÛ   ÛÛÛÛ   ÛÛ    ÛÛ    ÛÛÛÜ ßÛÛÛ              ÛÛÛ           ÛÛÛÛÛ ÛÛÛ ÛÛÛß   ÛÛ   ÛÛÛÛ\r
+  ÛÛÛÛ   ÛÛÛ   ÛÛ    ÛÛ     ÛÛß  ÛÛÛÜ             ÛÛ            ÛÛÛÛ  ÛÛÛ ßÛÛ    ÛÛ   ßÛÛ\r
+   ÛÛÛ   ÛÛÛ   ÛÛ    ÛÛ     ÛÛÛ  ßÛÛÛ             ÛÛ             ÛÛÛ  ÛÛÛ        ÛÛ\r
+   ÛÛÛ   ÛÛÛ   ÛÛÛ   ÛÛ     ÛÛÛ   ÛÛ              ÛÛ             ÛÛÛ  ÛÛÛ        ÛÛ\r
+   ÛÛÛ   ÛÛÛ   ÛÛÛ   ÛÛÛÛ    ÛÛ   ÛÛ          ÜÜÜÜÛÛÜÜ           ÛÛÛ  ÛÛÛ      Ü ÛÛ Ü\r
+Ü  ÛÛÛ Ü ÛÛÛ   ÛÛÛÜ ÜÛÛÛÛÛÛ  ÛÛÜÜ ÛÛ      ÜÜÛÛÛßßßÛßÛÛÛÛÛÜÜ      ÛÛÛ  ÛÛÛ     ÛÛ ÛÛ ÛÛ\r
+ÛÜ ÛÛÛÛÛ ÛÛÛ   ßÛÛÛÜÛÛÛÛÛÛÛ ÜÛÛÛÛ ÛÛÜ   ÜÛßßß    ÛÛ   ßßßÛÛÛÜ    ÛÛÛ  ÛÛÛ     ÛÛÜÛÛÜÛÛ\r
+ÛÛ ÛÛÛÛÛ ÛÛÛÛÛÜ ÛÛÛÛÛÛÛÛÛÛÛÜÛÛßÛÛÛÛÛÛÛ ÜÛß      ÜÛ        ßÛÛÛÜ   ÛÛÛÛÛß       ÛÛÛÛÛÛÛÛ\r
+ÛÛÛÛß  ß ÛÛÛÛÛß  ÛÛÛß ÛÛß ÛÛÛß ßÛÛßßÛÛ Ûß      ÜÛ           ßÛÛÛÜ  ßÛÛß         ßÛÛÛÛß\r
+ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛÛÛÜÜÜÜÜÜÜÛÜÜÜÜÜÜÜÜÜ ÛÛ ÜÜÜÜÜ ÛÛ ÜÜÜÜÜÜÜÜÜÜÜÜßÛÛÛ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ\r
+ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛ ÛÛÛßÜÛÛßÜÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ\r
+ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜßÛÜßÜÛÛßÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ\r
+                                          ßßßß
\ No newline at end of file
diff --git a/avalot/avalot.ans b/avalot/avalot.ans
new file mode 100644 (file)
index 0000000..9cfb3fa
--- /dev/null
@@ -0,0 +1,19 @@
+\e[0m\e[2J\e[7C\e[31mÜÜ Ü  ÜÜ  ÜÜÜ\e[37m\e[14CBack in good old A.D. \e[1m1176\e[0m...\r
+  \e[31mÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ\r
+ÜÛÛÛÛÛÛÛ\e[35;41;1mÜ\e[0;35;41mÜ\e[1mÜ \e[0;35;41mÜÜÜÜÜÜÜ\e[34mÜÜ\e[35mÜÜ\e[6C\e[34;40;1m  ÜÛßÛÜ   Lord\e[12CßÛÛ\e[14CÜÛ\r
\e[0;30;41mÜ      \e[35;1mß\e[45mÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛ\e[40mÜ    \e[34m ÛÛ   ÛÛÜÜÜ  ÜÜÜ  ÜÜÜÜ\e[5CÛÛ\e[5CÜÜÜÜÜ  ÜÜÛÛÜÜ\r
+    \e[0;30;41mÜÜÜÜ\e[35;1mÜÛÛÛÛÛÛÛÛÛÛÛÜÜ\e[0;31mß\e[6C\e[34;1m ÛÛÜÜÜÛÛ ÛÛ   ÛÛ  ÜÜÜÛÛ    ÛÛ    ÛÛ   ÛÛ   ÛÛ\r
+   \e[0;31mÜÜÜ\e[37;41;1mßßÛÛ\e[47mÜßÜ \e[0;45mÜ\e[30;1mÜ\e[0;45mÜ\e[30;1mÜ\e[40mÜÜ\e[9C\e[34m ÛÛ   ÛÛ  ßÛÜÛß  ÛÛ  ÛÛ    ÛÛ    ÛÛ   ÛÛ   ÛÛ ÜÜ\r
+  \e[0;30;41mÜÜ       \e[37;1mßß\e[0;31;47mÜ\e[37;41;1mß\e[0;31;47mÜ\e[30;41;1mß\e[0;31;47mÜ\e[30;41;1mßßß\e[8C\e[34;40m ßß   ßß    ß\e[5Cßßßßßß  ßßßß    ßßßßß\e[5Cßßß\r
+    \e[31mÜ\e[41mÜÜÛÛÛÜ  ÜÜÜ  \e[0;30;41mÜ\e[31;1mÜÜ \e[44C\e[34;40md'Argent\r
+    \e[31;41mÛÛÛÛÛ\e[40mÜÜßßÛÛÛÜ ßÛÛÛ\r
+    ÛÛÛß\e[33;43mß\e[40mß\e[31;43mß\e[40mÜ ßßÛÛÛÜÜ \e[35mÛÛ\e[45mßß\r
+\e[5C\e[0;33mÛ\e[43;1mÜ\e[0;30;43mÜßßßÛ\e[33;1mß\e[0;33mÛ\e[1mÜ\e[0;33mÜ\e[31;1mßßÛÛ \e[35mßßßß\e[11C\e[33mHe's back...\r
+    \e[31mÛÛÛ\e[43mÜ\e[0;33mÜß\e[31;1mÜÛÛÛÛÛÛÜ ß\r
+   ßß\e[44mßßßß\e[0;34mÛÛÛÛ\e[44;1mÜ Ü Ü \e[40mÜ\e[0;34mÜÜ\e[24C\e[33;1mAnd this time,\r
+\e[5C\e[34mÛ\e[44mÜÛ ÜÛ ß\e[0;30;44mÜÜ\e[34;1mÛÛÛÛÜßÜ\e[0;34mÜ\e[28C\e[33;1mhe's wearing tights...\r
+\e[6C\e[34mÛÛ\e[44mß\e[0;34mÛ\e[44;1mÜß\e[0;34mÛÛ \e[1mÛÛÛÛ\e[44mÜß\e[0;34mÛ\e[30;44mÜ\r
+\e[5C\e[34;1mÛÛÛÛßÜ  \e[0;31mÜ\e[34;41;1mß\e[31;44mÜ   \e[34mÜß\e[0;34mÛ\e[12C\e[31mA Thorsoft of Letchworth game. * Requires EGA\r
+\e[5CÛÛ\e[41;1mß\e[44mÜÜ\e[34mÜ  \e[0;30;41mÜÜ\e[31;1mÜßÛ\e[44mÜÜÜ\e[40mÜ\e[14C\e[0;31mand HD. * By Mike, Mark and Thomas Thurman.\r
+\e[5CÛÛ\e[41;1mßÜßßÛÛÛ\e[40mÜÜÜÜÜÜßßßßßßßß\e[10C\e[0;31mSfx archive- \e[34;1mDownload \e[33mAVLT10.EXE\e[34m now!\r
+\e[0m
\ No newline at end of file
diff --git a/avalot/avalot.doc b/avalot/avalot.doc
new file mode 100644 (file)
index 0000000..05c5ac2
--- /dev/null
@@ -0,0 +1,1165 @@
+                       First there was Avaricius...\r
+\r
+              Then, over a thousand years later, there came\r
+\r
+                                  Lord\r
+\r
+             oO"Oo  "OO  "OO   oO"Oo  "OO"      oO"Oo O"OO"O\r
+            OO   OO  OO   OO  OO   OO  OO      OO   OO  OO\r
+            OOoooOO  OO   OO  OOoooOO  OO      OO   OO  OO\r
+            OO   OO   OO OO   OO   OO  OO    o "Oo oO"  OO\r
+            ""   ""    """    ""   "" """"""""   """   """"\r
+                                d'Argent\r
+\r
+                 (A Mediaeval Graphical Adventure Game)\r
+\r
+            Copyright (c) 1995, Mike, Mark and Thomas Thurman.\r
+\r
+\r
+                      Version 1.3 - December 1995\r
+\r
+\r
+                         \r
+ ****************************************************************************\r
+ * NB: Read the legal stuff at the end soon. Quick synopsis: Not to be      *\r
+ * hacked up or sold without our written consent. To be freely distributed. *\r
+ * Don't blame us for anything this program does. *NO WARRANTY!*            *\r
+ ****************************************************************************\r
+\r
+\r
+\r
+                               Background\r
+                               """"""""""\r
+\r
+Jupiter had had a hard day. Being head of the Mount Olympus Associate Group\r
+PLC was no picnic. In the morning, he had overheard the Naiads talking of\r
+going on strike again. Jupiter sighed- another drought. Then Pluto had come\r
+up to his office again to ask him if he would consider selling out, and when\r
+Jupiter refused, had gone off shouting that he would get Phoebus Apollo to\r
+print the story. Finally, Pan had told him that he had invented a sort of\r
+flying machine, and asked whether he could start an airline company on Mount\r
+Olympus. "You could call it the Jupiter-Pan-Olympian company." he had said.\r
+Jupiter said that he didn't see anything wrong with materialising in a puff\r
+of smoke, whereupon Pan went off in a huff. He had left a note: "Will not set\r
+up company on Olympus; have gone to America instead. Your name will not be\r
+included on the headed notepaper."\r
+\r
+Jupiter sighed again. At least he was off-duty now. The job wasn't that bad\r
+and it did have its perks. Omnipotence had had to go years ago, but you still\r
+got the executive flat in Docklands and the sports car. He'd taken to driving\r
+it around London recently. Being immortal certainly had its benefits.\r
+\r
+Another benefit of the job, he reflected, is the technology. That was the\r
+best thing for years. It was only in a few days' time that he had gone down\r
+to the end of the twentieth century and bought himself a laptop (his\r
+time-travelling wasn't what it used to be.) He had been rather annoyed that\r
+the installation program wasn't in Greek, but you couldn't have everything.\r
+\r
+The dryads, who were, of course, greatly in favour of the paperless office,\r
+had typed in all the records from the old ledger filing system for him only a\r
+day or two before. He decided to play around with it.\r
+\r
+     > Enter number of record:\r
+\r
+said the screen helpfully. Jupiter frowned at the screen; it was all English\r
+to him. At least he could remember how the numerals worked. He chose a number\r
+at random:\r
+\r
+     > CLXXVII\r
+\r
+he typed. Nothing happened, so he waited for a few minutes and then\r
+remembered he hadn't pressed Enter.\r
+\r
+     > Non-numeric characters in response, please try again\r
+\r
+announced the screen. Jupiter had never been much good at English and this\r
+was beyond him, but after a few minutes he realised that he was supposed to\r
+use the Arabic number system. He picked another random number and typed it\r
+in.\r
+\r
+     > 17417\r
+\r
+This time, he remembered to press Enter. The screen said:\r
+\r
+     > Report no. 17417: D. Avaricius Sextus\r
+\r
+     > Killed: while fighting as gladiator.\r
+     > (Had, in fact, killed 17 lions previously,\r
+     > in self-defence.)\r
+\r
+Jupiter stared at the screen as the text slowly scrolled up it. Of course! It\r
+was all coming back to him now. He called on the intercom for Neptune. There\r
+was a splashing sound, water flew everywhere, and Neptune appeared. The\r
+computer, having been hit by several stray drops, fizzed and exploded,\r
+obviously without hurting anyone.\r
+\r
+"Do you remember this chap?" asked Jupiter. "Quite tall? Red hair? Lived in\r
+Pompeii? Name of Avaricius?"\r
+\r
+"Hmm... it was a long time ago..." said Neptune. "Hang on a sec, yes, I do\r
+remember him. I set him up with that pretty little mermaid... what was her\r
+name, now..."\r
+\r
+"Never mind that," said Jupiter, "I've just remembered something. Do you know\r
+who warned him about the disaster?"\r
+\r
+"I heard on the grapevine it was a soothsayer named Quicphingus." said\r
+Neptune.\r
+\r
+"On the grapevine?"\r
+\r
+"Yeah, Bacchus told me."\r
+\r
+"Oh, right. Look, Quicphingus never existed! It was me! In disguise!"\r
+\r
+A slow smile began to spread itself across the sea-god's features. "You? You\r
+crafty old god!" he chuckled. "You dressed up as a soothsayer just to save\r
+him from the volcano?"\r
+\r
+"Oh, you know, I just felt like helping someone..." said Jupiter. "Well,\r
+actually, no, I'd promised to find that mermaid a husband. Vowed to on the\r
+Styx. Silly of me."\r
+\r
+"It's amazing." said Neptune. "I never realised it was you."\r
+\r
+"Did this Avvy chap have any children by this mermaid, then?" asked Jupiter.\r
+"I forgot to find out."\r
+\r
+"Oh, yes, lots. They spread all over the earth. D'you know something?"\r
+\r
+"Yes, everything. What in particular?" asked Jupiter.\r
+\r
+"Genetics. A lot of his descendants turned out exactly like him. I mean,\r
+totally. Even talked like him. Amazing."\r
+\r
+"That sounds interesting." mused the king of the gods. "Could I see one of\r
+them?"\r
+\r
+"Welllll...." said Neptune, "there's one... no, he wouldn't do, the game'd be\r
+banned, there's another... yes! There's one in 1189. Look."\r
+\r
+A huge puddle had spread across Jupiter's desk from the dripping hair of the\r
+ocean god. Neptune pointed at this and a shaky image formed, which grew\r
+steadily clearer. It seemed to be a picture of a bedroom in a mediaeval\r
+castle.\r
+\r
+Both the gods craned forwards and peered closer into the screen...\r
+\r
+\r
+                           Getting started\r
+                           """""""""""""""\r
+\r
+Assuming you've already installed Avvy (if you haven't, use the INSTALL\r
+program or just run AVLT100.EXE), you can start to play. To do this,\r
+you must type:\r
+\r
+         AVALOT\r
+\r
+at the Dos prompt (something like C:\AVALOT> or C>.) The game will then load\r
+and you're ready to have fun. A sort of blue whirly thing will appear; if\r
+you don't want to sit and read all the credits, press any key. The whirly\r
+thing will then vanish, to be replaced by a menu. Soon, you'll see what you\r
+can do from this menu; for now, just press Enter. The game proper will then\r
+load and you'll see Avalot fast asleep in bed.\r
+\r
+\r
+The first thing you must do is to wake him up! Just type WAKE UP on the\r
+keyboard and press "Return" or "Enter" (usually marked with an arrow with a\r
+quarter turn in it.) Avvy will then wake. Typing GET UP will get him dressed\r
+and on his feet, and you'll be ready to progress to the next section of the\r
+manual!\r
+\r
+(NB: Since you need to do this whenever you start the game, there's a\r
+short-cut: press f5 twice to get him on his feet.)\r
+\r
+\r
+                          Moving Avvy around\r
+                          """"""""""""""""""\r
+\r
+OK, so you've woken Avvy up and he's ready to explore the world. But... how\r
+do you move him around? Well, there are four ways:\r
+\r
+          1) For real traditionalists. This method involves using the\r
+              arrow keys on the right-hand side of your keyboard. Press\r
+              any arrow to make him walk in that direction (eg, left\r
+              arrow makes him walk left.)\r
+\r
+              There can be up to two sets of arrow keys on your keyboard.\r
+              There's a set with numbers on (like 7 Home, 4 <--, 1 End,\r
+              etc.). This is called the Numeric Keypad. If you have\r
+              a snazzy new-style keyboard, there will also be a cluster of\r
+              (probably grey) keys which only have arrows on. Some people\r
+              prefer using these, but I've never lost the habit of using\r
+              the numeric keypad for control (hey, I started out on an\r
+              XT- and Avaricius was written on it.) But use whichever\r
+              arrows you prefer, I don't mind. Right. If you choose\r
+              to use the numeric keypad, bear in mind that Num Lock must\r
+              be *off*, otherwise you'll just get a string of numbers\r
+              on the command line.\r
+\r
+              Another point in favour of the numeric keypad: The keys\r
+              in between the arrow keys (Home, PgUp, PgDn, and End) make\r
+              Avvy walk diagonally (so Home = up + left, etc.) It's\r
+              faster to walk using these (sometimes). One other point:\r
+              DON'T hold arrow keys down. It's POINTLESS! Press once to\r
+              start him walking, and he's off.\r
+\r
+              OK, you're asking, so I've made him walk, how do I stop him?\r
+              Well, apart from running into a wall or similar, the usual\r
+              way of stopping Avvy walking from the keyboard is to press\r
+              the arrow pointing the way you're going. So to stop him\r
+              walking up, for example, hit Up. I know it sounds weird,\r
+              but it's simple in practice. Trust me. The other way of\r
+              stopping Avvy only works on an enhanced keyboard (the Bios\r
+              isn't really up to it on the older ones.) Just hit the 5\r
+              in the middle of the keypad and he'll stop straight away.\r
+\r
+              That was the ONLY practical method of control in Avaricius.\r
+              However, time and computer hardware wait for no man, let\r
+              alone Avvy, so we now support three other methods...\r
+\r
+          2) Using the joystick. All you hardened games players out there,\r
+              stop drinking cement and listen. You'll have to configure\r
+              the joystick before you use it, using the Setup program\r
+              (see below.) This is firstly because it's annoying to have\r
+              to set it up every time you play (like in some other games-\r
+              mentioning no names) and secondly because the Bios is\r
+              frequently untrustworthy on the question of joysticks.\r
+              So it's much more reliable for you, the user, to set it up\r
+              than for me, the programmer, to check using the Bios. If\r
+              you *don't* set it up, Avvy will ignore your joystick,\r
+              so don't forget to. Whenever you run Avvy, just press ctrl-J\r
+              to enable the joystick, and the cursor keys will be ignored.\r
+              Press ctrl-K to switch them back. One button will then stand\r
+              for "open door", and the other for "look". You'll still have\r
+              to use the keyboard for most things, though. Happy waggling!\r
+\r
+          3) Using the mouse and the toolbar. (I know Avaricius DID support\r
+              the mouse, but did *you* use it? The mouse control was\r
+              unworkable- it was sort of bolted on after I'd finished the\r
+              keyboard routines. Not So With Avalot.) There's a colourful\r
+              thingy second from the left on the toolbar (to the right of\r
+              the space saying "Avalot".) This is called a compass. Click\r
+              on the arrows to make Avvy walk around, and the octagonal\r
+              "STOP" sign in the middle to make him... um... STOP.\r
+\r
+          4) Less fiddly and more FUN! Click on the picture area of the\r
+              screen. If you click to the left of Avvy, he'll walk left.\r
+              If you click to the right, he'll walk right. If you... well,\r
+              do I have to tell you about all eight points of the compass?\r
+              You get the idea. If you click on our hero himself,\r
+              he'll stop walking.\r
+\r
+\r
+\r
+                        A Shorter Avvy Vocabulary\r
+                        """""""""""""""""""""""""\r
+\r
+OK, I'm not going to tell you ALL the words that Avvy recognises. It would\r
+give the game away. (Yes, I know you're supposed to give shareware games\r
+away. Never mind.) But here are a few verbs to start you off:\r
+\r
+  LOOK       gives you a description of the room you're in. VERY useful.\r
+             In fact, so useful that it has its own key. Just press f8\r
+             instead.\r
+\r
+  EXAMINE    tells you about an object you're carrying, a person who's in\r
+             the same room as you, or part of the scenery. For example,\r
+             EXAMINE GRAFFITI. Commonly abbreviated to EXAM or just X.\r
+\r
+  INVENTORY  gives you a list of everything you're carrying. Commonly\r
+             abbreviated to INV, Ctrl-I or just Tab.\r
+\r
+  OPEN       opens things. Useful for doors. You can press f7 instead.\r
+\r
+  PAUSE      pauses the game. f6 works too.\r
+\r
+  GET        takes something lying about. For example, GET LASER (just to\r
+             let you know I'm not using a real example.)\r
+             (Also called TAKE.)\r
+\r
+  EAT        ...drink and be merry.\r
+\r
+  DRINK      ...to me only with thine eyes.\r
+\r
+  LISTEN     tells you what Avvy can hear.\r
+\r
+  LOAD       loads a game in from disk. If you already know the filename,\r
+             add it after the command, eg LOAD HELEN1. (You don't need\r
+             to add ".ASG".) If you don't know the filename, just type LOAD\r
+             and you'll get into the filer. See below.\r
+             (Also known as RESTORE.)\r
+\r
+  SAVE       does the opposite of Load- saves the current state of the game.\r
+             You may add a filename after the command.\r
+\r
+  RESTART    begins the game all over again.\r
+\r
+  WEAR       puts something on. It must be a real item of clothing.\r
+\r
+  BOSS       Just in case S.W.M.B.O. turns up, this puts up the boss screen.\r
+\r
+Of course, you can use words other than verbs, plus several verbs that\r
+aren't listed here. But I'm not telling you what they are! You'll have\r
+to find out for YOURSELVES! <laugh of anticipation>\r
+\r
+\r
+\r
+                       The start of the game...\r
+                       """"""""""""""""""""""""\r
+\r
+OK, just to get you started. You're asleep in your bed; type WAKE UP and\r
+you'll be awake. Type GET UP to get out of bed (good start.) Now practise\r
+walking around your bedroom with the cursor (arrow) keys.\r
+\r
+At the bottom of the screen is a sort of black trapezium with a white top.\r
+This is a standard adventure game symbol for "door in near wall" (you\r
+wouldn't be able to see it otherwise.) If you walk into this trapezium\r
+you'll find yourself on the other side of the door.\r
+\r
+A rather revolting serf named Crapulus will walk up and greet you. If you\r
+want, you can talk to him, or you can return to the door and type OPEN DOOR\r
+to go back into your room. When you've finished talking to Crapulus, he'll\r
+go off to the pub, leaving you alone in the room. Try walking to the left,\r
+then in the next room to the door in the near wall. This leads into\r
+Spludwick's room.\r
+\r
+Talk to Spludwick. Ask him about things. He can tell you a lot about the\r
+game. While you're in his room, try looking at all the things there.\r
+For example, on the floor you'll see a message. Typing\r
+\r
+         LOOK AT MESSAGE\r
+or        READ MESSAGE\r
+or        EXAMINE MESSAGE\r
+or just   X MESSAGE\r
+\r
+(X short for eXamine) will tell you about it in more detail. If you want,\r
+you can type\r
+\r
+ ASK SPLUDWICK ABOUT MESSAGE\r
+\r
+and Spludwick will tell you about it. This is where I'm going to leave you\r
+for now. See if you can work out the rest of the game for yourself!\r
+\r
+(Who said it doesn't pay to read the documentation?)\r
+\r
+\r
+       Some important hints to help you get more information:\r
+       """"""""""""""""""""""""""""""""""""""""""""""""""""""\r
+\r
+  1) Whenever you go into a room, type LOOK (or press f8.) This will give\r
+     you a description of the room. Look around. Anything you can see,\r
+     you can ask about. Mostly, you should get an answer. For example,\r
+     in your bedroom at the start of the game, you'll see the bed, the\r
+     fireplace, and your wife, Arkata. Typing EXAMINE or X and then the\r
+     name of any of these things will give you information about it.\r
+     For example,\r
+\r
+      EXAMINE FIREPLACE\r
+      X ARKATA\r
+      LOOK AT BED\r
+\r
+     (Look At is the same as Examine, by the way.)\r
+\r
+     Examining a object you're carrying or a person will cause a\r
+     picture of it/them to appear in the toolbar.\r
+\r
+  2) Ask characters for information. Ask Dogfood about Ibythneth, for\r
+      example, and vice versa. Some characters may not be very good at\r
+      answering questions, though. Oh, yes... if you just want to chat\r
+      to somebody without any particular subject, try using the Talk\r
+      command. For example,\r
+\r
+       TALK TO DOGFOOD\r
+       ASK SPLUDWICK ABOUT DOGFOOD\r
+       SAY "SPLUDWICK" TO CRAPULUS\r
+       TALK TO AYLES ABOUT IBYTHNETH\r
+       TALK TO YOURSELF\r
+\r
+   3) There's a limit on how much you can hold. If you reach this limit,\r
+       consider how else you can get rid of things you're carrying that\r
+       have become useless, given that you're not allowed to drop them.\r
+\r
+                                Keys\r
+                                """"\r
+(The kind you find on keyboards.)\r
+\r
+Here's a list of all the keys that are valid in Avalot:\r
+\r
+          Key   What it does\r
+          ===   ============\r
+           f1   Gets you context-sensitive online help! See "Help", below.\r
+           f2   Switches the sound on and off.\r
+       ctrl-f2   Saves the game. If there's no filename, you'll be asked.\r
+           f3   Restores the last line you typed.\r
+       ctrl-f3   Invokes the filer.\r
+           f4   Restarts the game.\r
+       alt-f4   Quits the game.\r
+           f5   Gets up, lies down, sits down, etc.\r
+       ctrl-f5   Invokes the DOS shell.\r
+           f6   Pauses the game. (=PAUSE command.)\r
+           f7   Opens a nearby door. (=OPEN command.)\r
+       ctrl-f7   Redraws the screen.\r
+           f8   Puts up a description of this room. (=LOOK command.)\r
+           f9   Tells you your score and your rank. (=SCORE command.)\r
+           f10  Quits the game (again.)\r
+      shift-f10  Puts up the About box.\r
+           f11  Synonym for ctrl-f2 (save).\r
+           f12  Synonym for ctrl-f3 (load).\r
+        alt-B   Puts up the Boss screen.\r
+        alt-X   Quits the game (yet again.)\r
+       ctrl-R   Switches on Running.\r
+       ctrl-W   Switches on Walking.\r
+        alt-R   Repeat last clock chimes.\r
+          Tab   Puts up an inventory list.\r
+       ctrl-I   The same.\r
+        Enter   Performs current command, or banishes a scroll.\r
+       Arrows   Move Avvy about.\r
+     Numeric 5   Stops Avvy walking (but ONLY on an enhanced keyboard.)\r
+  PgUp, PgDn,\r
+    Home & End   Make Avvy walk diagonally.\r
+     ctrl-Home   Moves the cursor to the START of the line.\r
+      ctrl-End   Moves it to the END of the line.\r
+     ctrl-Left   Moves it one space backwards.\r
+    ctrl-Right   ...forwards.\r
+     Backspace   Its usual function.\r
+          Del   Ditto.\r
+       ctrl-J   Switches on joystick support, and disables the cursor keys.\r
+       ctrl-K   The reverse: disables joystick, enables the cursor keys.\r
+       Escape   Gets you in or out of the drop-down menus, or does the\r
+                 same banishing trick as Enter.\r
+      Plus (+)   Usually just adds a + sign, but also banishes scrolls.\r
+        Pause   Pauses the entire computer until you press a key (as usual.)\r
+Just about\r
+ anything else   gets added onto the end of the command line.\r
+\r
+\r
+                        The drop-down menus\r
+                        """""""""""""""""""\r
+\r
+       Here's a short guide to playing Avalot single-handedly: in other\r
+words, how to use the drop-down menus to speed things up.\r
+\r
+       There are six menus:\r
+\r
+   File         Game        Action      Objects      People    With\r
+     New game    Help        Do...\r
+     Load...     Boss key    Pause\r
+     Save        Untrash \   Open door       (these three vary)\r
+     Save as...    \ screen  Look\r
+     DOS shell   Score+rank  Inventory\r
+     Quit        About Avvy  Walk or run\r
+\r
+       And here's what they do:\r
+\r
+   File | New game          (short cut: f4)\r
+\r
+      This restarts the game from the beginning. If you haven't saved your\r
+      game so far, you'll lose it. You're given a yes/no box to make your\r
+      mind up.\r
+\r
+   File | Load...           (short cut: ctrl-f3, or f12)\r
+\r
+      This brings up the filer.\r
+\r
+   File | Save              (short cut: ctrl-f2, or f11)\r
+\r
+      This saves your game, provided that it has been saved before (because\r
+      otherwise it doesn't have a filename, and then this is synonymous with\r
+      File | Save As).\r
+\r
+   File | Save As...        (no short cut.)\r
+\r
+      This asks you for a name for the game and then saves it with that name.\r
+\r
+   File | DOS shell         (short cut: ctrl-f5)\r
+\r
+      You can suspend your game and run other programs using this. Please\r
+      try not to run any TSR (terminate and stay resident) programs while\r
+      using this (like SideKick, KEYB, GRAPHICS...) because you'll cause\r
+      no end of problems with the memory arangements.\r
+\r
+   File | Quit              (short cut: alt-X, alt-f4, f10, etc...)\r
+\r
+      This lets you out of the game. (I think you could have guessed that.)\r
+\r
+   Game | Help              (short cut: f1)\r
+\r
+      Brings up the help system.\r
+\r
+   Game | Boss key          (short cut: alt-B)\r
+\r
+      Brings up the SWMBO protection screen (it looks like a spreadsheet).\r
+\r
+   Game | Untrash screen    (short cut: ctrl-f7)\r
+\r
+      Makes the program redraw the whole screen. I wish more games had\r
+      this option- it's very useful when crazy TSRs draw weird patterns of\r
+      red dots on the screen, or when Windows doesn't *quite* get the full\r
+      screen back again.\r
+\r
+   Game | Score and rank    (short cut: f9)\r
+\r
+      This gives you your score, a "ranking" based on this, and the (rough)\r
+      time you've spent playing the game so far (which is saved in the file\r
+      and continues when it's re-loaded).\r
+   \r
+   Game | About Avvy        (short cut: shift-f10)\r
+\r
+      This brings up the About box, which includes version information.\r
+\r
+   Action | Do...           (short cut: f5)\r
+\r
+      Actually, this isn't called Do, unless it doesn't work. At certain\r
+      points in the game, some action is important. When you reach them,\r
+      this option will take on a different form. A good example is right\r
+      at the start where you're asleep in bed: the f5 key and this menu\r
+      option both mean "wake up". Because of this, you can control more\r
+      of the game with the mouse.\r
+\r
+   Action | Pause           (short cut: f6)\r
+\r
+      Very, very self-explanatory.\r
+\r
+   Action | Open the door   (short cut: f7)\r
+\r
+      There are two actions which people spend most of their time typing\r
+      in games such as this, and so they have been given their own menu\r
+      options, and an unshifted function key each. One of them is this one,\r
+      opening doors (which is also used to mean "enter town" on the map),\r
+      and the other is...\r
+\r
+   Action | Look around     (short cut: f8)\r
+\r
+      ...this one. It's equivalent to typing LOOK.\r
+\r
+   Action | Inventory       (short cut: Tab or ctrl-I)\r
+\r
+      The time-honoured command to check your rucksack. Actually, Avalot\r
+      doesn't have a rucksack. Nor does he carry a flickering lamp, a\r
+      bottle of water or any of the other Colossal paraphernalia; however,\r
+      to prove the intellectual geanology of this game, GET INVENTORY works\r
+      just as well.\r
+\r
+   Action | Walk slowly     (short cut: ctrl-W)\r
+ or  \r
+   Action | Run fast        (short cut: ctrl-R)\r
+\r
+      These adjust Avvy's walking for precision or speed, respectively.\r
+      Only the relevant one is displayed (the one *not* currently in force).\r
+\r
+   Objects | ...   and  People | ...\r
+\r
+      These vary depending on your inventory (for Objects) and the people\r
+      in the room at the time (for People). (Of course, there will always\r
+      be at least one of each.) Selecting one of these makes Avvy think\r
+      about whatever it was, and his thoughts are reflected in the "Thinks"\r
+      space on the toolbar. Why is this? Well, read on...\r
+\r
+   With | ...\r
+\r
+      This varies depending on what Avvy's thinking about. Whatever you can\r
+      do with it, him or her will be listed here, and you can then select it\r
+      and it will be done.\r
+\r
+      An example: Examine the bell.\r
+       Select "Objects | Bell" and then "With | Examine".\r
+\r
+      Another example: Talk to Spludwick.\r
+       Select "People | Spludwick" and then "With | Talk to him".\r
+\r
+      Notes on this:\r
+\r
+       1) To give something to somebody, select the person, then the object,\r
+           then With | Give to <person>. If you get it the wrong way round,\r
+           you can still select the object and carry on. If it's going to\r
+           work, the "Give to" option will be enabled, and won't end in\r
+           an ellipsis ("...").\r
+\r
+       2) The pictures of the people have their signatures underneath.\r
+\r
+       3) The fastest way to examine somebody (or something) is this: when\r
+           their (or its) picture is on the toolbar, just click on it and\r
+           it will be examined. Ta-raaa!\r
+\r
+\r
+\r
+                              The filer\r
+                              """""""""\r
+\r
+       If you type LOAD with no parameters, or press ctrl-f3 when you're\r
+playing the game, you will enter the filer. It should be fairly\r
+straightforward. There are four "panes": (N)ame, (D)rives, (F)iles and\r
+(S)ubdirectories. Use Tab and Shift-Tab to cycle through these, or press\r
+Alt + the first letter of the name of the pane. On the Files and\r
+Subdirectories panes, you may use Home, End and the up and down cursor keys\r
+to move through the names. You may also press, say, J to cycle through all\r
+filenames or subdirectories beginning with J.\r
+\r
+       To change the drive, move to the Drives pane and press the letter.\r
+If the drive is not ready (e.g., if you've left the door open) then it will\r
+say "no files found", because it couldn't read any.\r
+\r
+       The Name pane allows you simply to type the name of the file. \r
+The file will be loaded when you press Return. The Files pane scrolls \r
+according to the initial letter as you type. By the way, you cannot search\r
+for or load any file whose extension is not .ASG.\r
+\r
+       A minor problem with the filer at the moment is this: if you're\r
+listening to a CD and you invoke the filer, the music will stop. The reason\r
+for this is that the program checks each drive between C and Z to see if\r
+it exists (A and B are found by using Bios calls) and since CDs on PCs double\r
+as data drives, reading it as such makes it think: "Oh! I'm a data drive and\r
+not a CD player. Well, in that case, I'd better stop playing music!" If this\r
+is a problem for anybody, let me know and I'll try and fix it.\r
+\r
+\r
+                           The main menu\r
+                           """""""""""""\r
+\r
+There are six options on the main menu:\r
+\r
+       1) play the game. You can also press Return or Space to do this.\r
+\r
+       2) read the background to the story (who *are* Geida and du Lustie\r
+          anyway?)\r
+\r
+       3) see the preview. This is a picture from the next game (well,\r
+          actually, it's *like* one: the next game will be 256-colour).\r
+\r
+       4) read the documentation (as you're doing now). Avalot has a\r
+          built-in doc lister.\r
+\r
+       5) Same as 4), but jumps straight to the part about registration.\r
+\r
+       6) Exit back to DOS, if you changed your mind. ("Oh no! I really\r
+          wanted to play spacewar, but I've loaded Avvy instead! How\r
+          can I quit in a hurry?")\r
+\r
+\r
+                        Command-line options\r
+                        """"""""""""""""""""\r
+\r
+Normally, you just have to type AVALOT to run the game. However, there are\r
+also some switches and so on that you can use to make the program behave\r
+as you want it to. Add the switch after the word AVALOT. Don't forget to\r
+put a space in between them! For example,\r
+\r
+     avalot /q\r
+\r
+would start the game with no sound effects. You can specify several switches\r
+at once; for example,\r
+\r
+    avalot canary /o /p\r
+\r
+would start the game, ignoring the graphics adapter in use (/o), load in a\r
+file called CANARY.ASG, and give you a p)rinted log of your progress through\r
+the game.\r
+\r
+Notes on the switches:\r
+\r
+        i)   Instead of a slash, you can use a hyphen (if you're a Unix\r
+              freak.)\r
+\r
+        ii)  Each switch must have a space before it. Thus you must type\r
+              avalot /o /p instead of avalot/o/p.\r
+\r
+        iii) You may also use AVALOT.INI commands instead of switches, if\r
+              you prefix each one with a star. Thus:\r
+\r
+                   avalot *soundfx=false *loadfirst=fred\r
+\r
+              does the same as\r
+\r
+                   avalot /q fred\r
+\r
+              . These options override the AVALOT.INI ones, and have equal\r
+              priority to switches.\r
+\r
+Here's a list of all the valid options:\r
+\r
+        /?  This displays a list of the most important valid options,\r
+             so you don't have to read this part of the docs again\r
+             if you're in a hurry...\r
+\r
+ <filename>  This will load the game you specify. You must give a path if\r
+             it's not in the current directory, but you may leave out\r
+             the .ASG extension if you want.\r
+\r
+        /o  (Override.) This ignores your graphics adapter. Use this as a\r
+             temporary solution if Avvy tells you you don't have an EGA and\r
+             you do. (But... don't bother using this if you REALLY don't,\r
+             because it still won't work!)\r
+\r
+/l<filename> This will l)og your progress around the game to a file, so that\r
+             you can read it back later. A similar feature is found on\r
+             many text adventures, but this has a few refinements to work\r
+             with the graphical environment. If you don't specify a filename\r
+             (i.e., you just say "/l") the game assumes the default filename\r
+             of "AVVY.LOG".\r
+\r
+  /p<device> This switch p)rints your progress to a printer on LPT1:.\r
+             You can select some different kinds in Setup so that Avalot\r
+             can do italics or bold here. A kludge for simple TTY is /lPRN.\r
+             If you don't specify a device, the default is PRN. You can \r
+             also use a filename here, if you want to "print to disk."\r
+\r
+             NOTE!: You cannot have *both* /l *and* /p switched on at once!\r
+\r
+        /n  Num Lock hold. If you use /n, the computer will check every so\r
+             often whether or not you have Num Lock switched on, and if you\r
+             do it'll switch it off again. Num Lock is *not* useful AT ALL\r
+             in this game. It's good for calculators and things, though.\r
+\r
+        /q  Quiet! This switch turns off sound effects, so that you can play\r
+             Avvy all night long and not wake up your parents/girlfriend/\r
+             boyfriend/wife/husband/children/dog.\r
+\r
+        /k  Keyboard clicky noise. If you choose this, every time you press\r
+             a key, the program will bleep at you.\r
+\r
+        /z  Zoomy start. This throws you straight into the game without\r
+             the startup sequence.\r
+\r
+\r
+                    Pounds, shillings and pence!\r
+                    """"""""""""""""""""""""""""\r
+For reasons of historical accuracy, Avalot uses the pre-1971 system of Lsd\r
+(pounds, shillings and pence.) The pound sterling was divided up into twenty\r
+SHILLINGS. Each SHILLING subdivided into twelve PENCE. The more than 1000-year\r
+-old system was dropped in the early seventies as being inefficient. (It's\r
+interesting to think that this could have been to let the calculating\r
+machines of the day perform arithmetic faster. If they had only waited\r
+twenty years, the machines would have had no problem at all... bear in mind\r
+that to a digital machine, 1 pound to 100 pence is a daft system (it would\r
+be much more logical to have 256 pence in the pound), so it wouldn't really\r
+matter either way. Moral: look before you leap!)\r
+\r
+One pound is written œ1 (that probably won't print properly on your printer.)\r
+One penny is written 1d. Two pence is 2d. One shilling is written 1/-.\r
+One-and-six (1 shilling + 6 pence) is 1/6. Three-and-a-penny is 3/1, etc.\r
+\r
+  Other interesting points to note:\r
+\r
+   TUPPENCE is 2d. (Still often used nowadays to mean two new pence.)\r
+   THRUPPENCE (or THREPPENCE or THRIPPENCE, depending\r
+    where you come from) is 3d. (Occasionally still used.)\r
+   a GROAT is 4d. This is a mediaeval coin which later dropped out of use.\r
+    It comes from dividing the shilling into three parts.\r
+   a SIXPENCE is (surprise!) 6d. This and the thruppence were the more usual\r
+    later divisions of the shilling. (As in "I love sixpence, jolly jolly\r
+    sixpence...")\r
+   a GUINEA is 21 shillings. The guinea was another mediaeval coin, which,\r
+    although it passed out of use long ago, remained in use until\r
+    decimalization for calculating prices (just to confuse people).\r
+   a FLORIN is two shillings. It's one tenth of a pound, and so was\r
+    sometimes thought of as a sort of halfway decimalization idea.\r
+   a CROWN is five shillings.\r
+   HALF-A-CROWN is 2/6 (as in the rhyme "Cobbler, cobbler, mend my shoe...")\r
+\r
+\r
+\r
+                             AVALOT.INI\r
+                             """"""""""\r
+INI is short for INItialisation. As you saw above, there are several things\r
+you can tell the program to do, or not to do. For example, Num Lock can\r
+be forced off by putting /n on the command line. However, if you always\r
+want that to happen, it can get a bit boring typing it every time.\r
+\r
+The FIRST way to make it permanent is using Setup. This is explained\r
+elsewhere. But there's another way...\r
+\r
+When you tell Setup what to do, it saves the new configuration in a file\r
+called AVALOT.INI. Avaricius Setup saved its config in a file called AVVY.CFG.\r
+What's the difference? (apart from its being a different game.) Well,\r
+AVALOT.INI is a text file. You can load it into a text editor and make\r
+changes.\r
+\r
+It's the same sort of format as WIN.INI, SYSTEM.INI, SSTOOLS.INI and so on\r
+(but note that there are no [header]s.) Each line consists of the following:\r
+\r
+     foo=bar ; comment\r
+\r
+"Foo" is the name of the field you want to change. "Bar" is what you want\r
+to change it to. This can be:\r
+\r
+         * "Yes" or "No", e.g. for Num Lock being forced on or not.\r
+         * A string, e.g. "MYGAME.ASG" for the default filename.\r
+         * Nothing at all, meaning "not applicable."\r
+\r
+Any spaces before or after the "foo=bar" part will be ignored. Also, any\r
+semicolons (";") in the line will be ignored, together with anything after\r
+them. (Just the same as in assembler programs.) This is for adding comments,\r
+so you can write\r
+\r
+   LoadFirst=AARDVARK.ASG ; load in aardvark.asg first of all.\r
+\r
+instead of\r
+\r
+   LoadFirst=AARDVARK.ASG\r
+\r
+because they both mean the same. Note that you can have a semicolon at the\r
+start of a line if you want the whole line to be ignored.\r
+\r
+There are comments in the file to explain what all the fields do. Good luck!\r
+\r
+(By the way, if you make a mistake in AVALOT.INI, the game won't run because\r
+of it, and you can't find the error in order to fix it, just delete the .INI\r
+file. You can always restore it from your backup later. (You kept a backup,\r
+DIDN'T YOU??? :-) ))\r
+\r
+\r
+                ASCII silly question, get a silly ANSI!\r
+                """""""""""""""""""""""""""""""""""""""\r
+\r
+I saw that on a BBS the other week. Anyway, the point of this section is\r
+this: In the archive, there's a file called AVALOT.ANS. This is an advert\r
+for Avalot, drawn up with ANSI. Some sysops put up an advert for files on\r
+the board whenever anybody logs on. This is for them! If you want to see\r
+it yourself, just type TYPE AVALOT.ANS at the Dos prompt. You'll have to\r
+have ANSI.SYS installed, though.\r
+\r
+(Note for sysops: this file is optimised as best I can. For example, it\r
+uses Cursor Forwards rather than printing spaces whenever that's smaller.\r
+What this boils down to is that it doesn't take very long to display: just\r
+over six seconds on a 2400 baud modem, and about one and a half seconds on\r
+a 9600. Less waiting around!)\r
+\r
+                            Who's Edna?\r
+                            """""""""""\r
+\r
+DNA is a substance found in molecules of all living objects. It defines\r
+who or what the object is (the size of its nose, the shape of its leaves,\r
+etc.) When I wrote Avaricius, I called the save files DNA in the code,\r
+because they defined the state of the game exactly.\r
+\r
+With Avalot, I made several changes, including rewriting the entire\r
+prehistoric DNA system. The new system I called Extended DNA. I then\r
+suddenly realised that E-DNA spells EDNA. So that's what I called it.\r
+\r
+How does this affect you? Well, Edna is designed so that whichever Avvy\r
+game you're playing (Avaricius, Avalot, or any other one we write) it will\r
+say in the file which game it came from. If you play more than one Avvy\r
+game often, you'll probably build up a library of .ASG files. Every good\r
+library needs a librarian, so here she is: Edna Bucket!\r
+\r
+Edna Bucket is a program called EDNA.EXE. If you run Edna with the filename\r
+of an .ASG file, she'll find the game it came from, load that game, and\r
+load the file in for you. Easy as anything. If you use Windows, 4-DOS, or\r
+any other system that allows file association, associate your .ASG files\r
+with EDNA.EXE, and then they'll always be loaded into the right game.\r
+\r
+To associate .ASG files with EDNA: Load File Manager (from Program Manager,\r
+select Window | Main and then double-click on the icon of a filing cabinet).\r
+When File Mangler (oops, Manager) has loaded, click ONCE on an .ASG file\r
+somewhere, then choose File | Associate... and put the path to Edna (such\r
+as C:\AVALOT\EDNA.EXE) in the filename box.\r
+\r
+The filenames of the games are stored in a file called EDNA.DAT. It looks\r
+like this:\r
+\r
+Name of game\r
+Path to that game\r
+Name of another game\r
+Path to THAT game\r
+and so on\r
+\r
+For example:\r
+\r
+Avaricius\r
+c:\games\avvy\avvy.exe\r
+Avalot\r
+N:\PUBLIC\GAMES\AVALOT\AVALOT.EXE\r
+\r
+If an .ASG file belongs to a game that isn't listed in this file, Edna will\r
+ask you about it and then add the information. If you want to change it\r
+later, use a text editor (such as EDIT or EDLIN) to make the changes.\r
+\r
+Edna has two switches:\r
+\r
+     /i   prints some (I)nteresting (I)nformation about the game\r
+           on the screen, but does *not* load anything.\r
+\r
+     /q   stops the "Loading" message appearing.\r
+\r
+So, for example:\r
+\r
+    EDNA /i TREE\r
+\r
+    gives information about the file TREE.ASG, and\r
+\r
+    EDNA /q elephant\r
+\r
+    loads the file ELEPHANT.ASG into the relevant game.\r
+\r
+\r
+                         Warning for EGA users.\r
+                         """"""""""""""""""""""\r
+\r
+Avalot will run fine with an EGA, just as with a VGA or whatever. BUT.......\r
+we have decided that the next game (IF there is a next game... no promises\r
+yet) will run *only* on VGAs, MCGAs and above. So get an upgrade before we\r
+release it! (IF we release it, of course.)\r
+\r
+\r
+                    Support Your Local Manticore!\r
+                    """""""""""""""""""""""""""""\r
+Just testing.\r
+\r
+\r
+                     Getting help with the game\r
+                     """"""""""""""""""""""""""\r
+OK, I admit it: Avalot is much harder than Avaricius to win. If you get\r
+stuck and you need some help, you can try:\r
+\r
+        *** A GOOD IDEA ***\r
+      * Posting a message on CompuServe's GAMERS forum, library 2,\r
+        "Adventure Games". Almost certainly, many people will have\r
+        been stuck on the same problem. Maybe they even solved it!\r
+\r
+        You should make the subject header give as much information\r
+        about the problem as possible. Don't just put "Avalot... \r
+        I'm Stuck!" (or even "help"!) A better solution is something like:\r
+\r
+            Avalot: Solution to Nim?\r
+          or\r
+            Avalot: Purpose of bell\r
+          etc.\r
+\r
+      * Emailing me and asking. Don't expect the entire solution!\r
+        I'll just give you HINTS.\r
+\r
+         my CompuServe address is   100021,3440\r
+         my  Internet  address is   t.j.a.thurman@herts.ac.uk\r
+\r
+        (The Internet address should work until, oh, about 1997 at least.\r
+        If netmail bounces, use the CIS address. Be prepared for a long \r
+        wait if you send me netmail during the vacations! This is the \r
+        fastest way during termtime, though.)\r
+\r
+\r
+                    Where to get the latest version\r
+                    """""""""""""""""""""""""""""""\r
+\r
+I will try to upload the latest versions of Avvy to the following places\r
+at least. Copies will certainly make their ways to hundreds of other\r
+download sites.\r
+\r
+  1) Support BBS.  Paradise City, Thorsoft support area. (0734) 786408.\r
+                     Call +44 734 786408 from outside Britain. (*)\r
+  2) CompuServe.   CIS:GAMERS. Library 2, "Adventure Games".\r
+\r
+(*) WARNING: Oftel have decided to put a 1 at the start of almost all\r
+ UK numbers, after the 0. BE CAREFUL. The old style numbers won't work\r
+ after June 1995, so be ready to change over then.\r
+\r
+ For example, Paradise City will become (01734) 786408 from Britain, and\r
+ +44 1734 786408 from outside.\r
+\r
+ This applies to all UK numbers you may know. YOU HAVE BEEN WARNED!\r
+\r
+\r
+                              Reviews\r
+                              """""""\r
+Here are some reviews of the first game, Avaricius:\r
+\r
+ "The catacombs hasn't been mapped; it hardly needs it."\r
+                               - AVVY.SOL (a solution to Avvy discovered\r
+                                            on a BBS)\r
+\r
+  (OK, just try the maze in Avalot and see whether you can do it without\r
+    a map!)\r
+\r
+  "Uniquely funny and droll British humour here."\r
+   (Four stars plus a tick! Highest rating!)\r
+                               -  Shareware Marketing, Devon\r
+\r
+   Three stars (out of five)\r
+                               -  Shareware Solutions\r
+\r
+\r
+                          To sysops, vendors, et al\r
+                          """""""""""""""""""""""""\r
+Everyone: please distribute in the original archive, with the filename\r
+AVLT120.EXE for this sfx archive. If you cannot distribute self-extracting\r
+archives, re-archive it as AVLT120.LZH, .ZIP, .ARJ, etc. The filenames AVLT12\r
+and AVALOT are acceptable shortenings if the system does not allow more than\r
+six characters (as on CIS).\r
+\r
+Vendors: there is an installation routine. It might be available from\r
+wherever you got this; if it isn't, contact me (addresses in the Getting\r
+Help section above) and I'll tell you how to get hold of it.\r
+\r
+Both sysops and vendors: do us a favour and TELL us you're distributing\r
+Avalot! (Vendors, please send us the copy of your catalogue that has us in...\r
+and updates, for that matter.) If you do this, we'll send you a copy of the\r
+sequel if/ when it's finished.\r
+\r
+Also, please don't forget to add your name, etc., to the pedigree file. (BBSs\r
+and libraries are welcome to include a short plug for themselves in this file,\r
+as long as it's not more than about five or six lines long!)\r
+\r
+If anyone can get this game reviewed in a magazine, go ahead. Even better,\r
+go ahead and then tell us about it, we'd love to know. Even better still,\r
+go ahead, and then send us a copy of the magazine!\r
+\r
+                                 Disclaimer\r
+                                 """"""""""\r
+The part that's always written in CAPITALS. You *have* to read this!\r
+\r
+"LORD AVALOT D'ARGENT" IS LICENSED "AS-IS." THORSOFT OF LETCHWORTH\r
+("THORSOFT") MAKES NO WARRANTIES, EITHER EXPRESSED OR IMPLIED, WITH RESPECT\r
+TO THIS PROGRAM, ITS QUALITY, PERFORMANCE, MERCHANTABILITY, OR FITNESS FOR\r
+ANY PARTICULAR PURPOSE. IN PARTICULAR, IT IS NOT GUARANTEED TO PREVENT OR\r
+DETECT DAMAGE TO YOUR DATA OR PROGRAMS. IN NO EVENT SHALL THORSOFT BE LIABLE\r
+FOR ANY CLAIMS FOR LOST PROFITS OR ANY DAMAGE, INCLUDING, BUT NOT LIMITED TO,\r
+SPECIAL, INCIDENTAL, CONSEQUENTIAL OR ANY OTHER DAMAGE. SOME STATES DO NOT\r
+ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES,\r
+SO THE ABOVE LIMITATION OR EXCLUSION MAY NOT APPLY TO YOU. IN NO CASE SHALL\r
+THORSOFT'S LIABILITY EXCEED THE LICENCE FEES PAID FOR THE RIGHTS TO USE THE\r
+LICENSED SOFTWARE. THE LICENSE AGREEMENT SHALL BE CONSTRUED, INTERPRETED AND\r
+GOVERNED BY THE LAWS OF ENGLAND AND WALES.\r
+\r
+(RIGHT, NOW I THINK I'LL SWITCH CAPS LOCK OFF ANd get on with the\r
+documentation...)\r
+\r
+                        Wish Lists, Bug Reports\r
+                        """""""""""""""""""""""\r
+\r
+A wish list is a list of features that you wish a program had. A bug report\r
+is a list of "features" you wish it DIDN'T have (and so does the programmer).\r
+If you can't stand the fact that, say, Avalot doesn't run in a MULTICS Dos\r
+box if you are over 12,000 feet above sea level, or you would really like a\r
+version that has a macro facility or imports .DBF files, or something, then\r
+let me know and I'll see what I can do, or try and find an excuse. You\r
+*might* even get an acknowledgement... :)\r
+\r
+\r
+                            Coming soon...\r
+                            """"""""""""""\r
+\r
+Here's my own list of possible/probable enhancements to Avalot:\r
+\r
+          * a version which is economical with disk space. This version is\r
+             very wasteful of it. Some things are stored twice and there\r
+             is no compression. Later versions will be optimised and there\r
+             will be a transparent compression routine. (I have a trial\r
+             version of this working, and some files are down to 1/4 their\r
+             original size! (Mostly they are about 1/2 to 3/4.))\r
+\r
+          * a "talkie" version-- see below...\r
+\r
+\r
+                          Avalot - The Talkie\r
+                          """""""""""""""""""\r
+\r
+This is part of my own wish list. I'm working (vaguely) on a new part of the\r
+system which can play back sound files when scrolls and bubbles come up on\r
+the screen. For example, when Cwytalot says: "I'm not here for a quiet chat",\r
+you'll hear him saying it through the PC speaker or over your 'Blaster.\r
+Obviously, this would take up a vast amount of disk space, and so would\r
+probably come in a separate archive. But it would be rather fun for when\r
+the game was supplied on CD-ROM. Watch this space, but not all the time,\r
+'cos you'll get bored because nothing's likely to happen for a while yet...\r
+\r
+                    The first winner of this game\r
+                    """""""""""""""""""""""""""""\r
+\r
+Apart from the testers, nobody has ever won this game yet. I'll put the name\r
+of the first registrant who can tell me how to win here.\r
+\r
+\r
+                           Revision history\r
+                           """"""""""""""""\r
+\r
+ver.no.   date      notes\r
+-------   ----      -----\r
+ 1.3      Dec 1995   Changes in documentation, scrolls, etc. to record\r
+                       the reduction of registration fee to GBP 10 (USD 15)\r
+                       plus GBP 2 (USD 4) p&p (s&h). Registration fee still\r
+                       to include one free one-size Avalot t-shirt.\r
\r
+ 1.2      Apr 1995   Mended the shoot-em-up, which worked (I think) in 1.0\r
+                       but went wrong again in 1.1. The toolbar now says\r
+                       "Avalot" instead of "the Avvy toolbar". Talking to\r
+                       some characters about certain things (notably Port) \r
+                       no longer crashes the game. And finally, the infamous\r
+                       Mouse Bug which caused the mouse pointer to leave \r
+                       flashing shadows all over the screen occasionally has\r
+                       been fixed at last. (Also a few other minor changes).\r
+ 1.1      Mar 1995   Fixed the music files.\r
+                       Made all the chunk files consistent. (This could\r
+                       have caused a system crash in older versions.)\r
+                       Also you can now give hex numbers in AVALOT.INI\r
+                       by starting them with a dollar sign.\r
+ 1.0      Oct 1994   This was the first release.\r
+\r
+\r
+                        *** Registration! ***\r
+                            """""""""""""\r
+If you like it, please consider registering this game. More information\r
+is given in the file REGISTER.DOC, which you can print by typing\r
+PRINT REGISTER.DOC at the DOS prompt. Here's a quick synopsis:\r
+\r
+You can order Avalot for 10 pounds sterling or 15 U.S. dollars.\r
+\r
+P&P (S&H) is two pounds, or four U.S. dollars.\r
+\r
+You also get some free goodies to thank you for registering (at the\r
+moment, this is an Avvy T-shirt and ruler).\r
+\r
+OR you can probably pay in your local currency. See REGISTER.DOC to see\r
+which currencies we can accept, and for other details.\r
+\r
+              PRICES ARE VALID UNTIL 31st DECEMBER 1996.\r
+---------------------------------------------------------------------------\r
+\r
+There are four ways you can register this game:\r
+\r
+1) The traditional one... by sending a cheque through the post.\r
+\r
+   Here's our address:\r
+\r
+          Thorsoft of Letchworth,\r
+           71, Baldock Road,\r
+            Letchworth,\r
+             Herts. SG6 3JP.\r
+              England.\r
+\r
+   Please make cheques payable to THORSOFT.\r
+\r
+2) Using PsL's shareware registration service. PsL-- Public (software)\r
+Library-- run a registration service that accepts major credit cards.\r
+You can register over the phone on an (American) 800 number, a normal number,\r
+by fax, or by CIS email. Here's their advert:\r
+\r
+---------------------------------------------------------------------------\r
+\r
+  CREDIT CARD ORDERS ONLY -\r
+\r
+  You can order with MC, Visa, Amex, or Discover from Public (software)\r
+  Library by calling 800-2424-PsL or 713-524-6394 or by FAX to 713-524-6398\r
+  or by CIS Email to 71355,470. You can also mail credit card orders to PsL\r
+  at P.O.Box 35705, Houston, TX 77235-5705.\r
+\r
+  THE ABOVE NUMBERS ARE FOR ORDERS ONLY.\r
+\r
+  Any questions about the status of the shipment of the order, refunds,\r
+  registration options, product details, technical support, volume discounts,\r
+  dealer pricing, site licenses, etc., must be directed to Thorsoft at the\r
+  addresses or numbers above.\r
+\r
+  To ensure that you get the latest version, PsL will notify us on the day of\r
+  your order and we will ship the product directly to you.\r
+\r
+  When you order, please quote Avalot's item number:   --->  11608  <---\r
+\r
+---------------------------------------------------------------------------\r
+\r
+3) Via CompuServe. Type GO SWREG at any ! prompt, or in CompuServe Information\r
+Manager press Ctrl-G and type SWREG. Then follow the menus.\r
+\r
+\r
+                            Enjoy the game!\r
+\r
+[end of documentation]\r
diff --git a/avalot/avalot.fnt b/avalot/avalot.fnt
new file mode 100644 (file)
index 0000000..1320e9b
Binary files /dev/null and b/avalot/avalot.fnt differ
diff --git a/avalot/avalot.ico b/avalot/avalot.ico
new file mode 100644 (file)
index 0000000..cb68af0
Binary files /dev/null and b/avalot/avalot.ico differ
diff --git a/avalot/avalot.idx b/avalot/avalot.idx
new file mode 100644 (file)
index 0000000..7b8809f
Binary files /dev/null and b/avalot/avalot.idx differ
diff --git a/avalot/avalot.ini b/avalot/avalot.ini
new file mode 100644 (file)
index 0000000..e66fc5f
--- /dev/null
@@ -0,0 +1,144 @@
+; AVALOT.INI\r
+; Initialisation file for Avalot\r
+; by Thomas Thurman, 1995.\r
+;\r
+; Anything beginning with a semi-colon is a comment!\r
+; Read AVALOT.DOC for more details.\r
+\r
+; A small warning: Setup will only change values already in this file--\r
+; it will never add new lines. You should therefore keep a backup of the\r
+; original.\r
+\r
+; Numbers can be given in decimal, or in hex if you prepend a $ (for\r
+; example, $B1).\r
+\r
+;                                       General\r
+;                                       \=---=/\r
+\r
+OverrideEGAcheck=No      ; Force loading despite failure to detect an EGA?\r
+ZoomyStart=No            ; Jump straight in?\r
+Loadfirst=               ; Fill this in to load a particular .ASG by default.\r
+NumLockHold=No           ; If Yes, Numlock will always be forced off.\r
+Controller=Keyboard      ; Keyboard or Joystick\r
+\r
+;                                       Joystick\r
+;                                       \=----=/\r
+\r
+; These values are usually altered automatically by Setup.\r
+\r
+JoystickInstalled=Yes    ; Yes for joystick, No for no joy\r
+JoyTop=0\r
+JoyBottom=0\r
+JoyLeft=0\r
+JoyRight=0\r
+JoyMidX=0\r
+JoyMidY=0\r
+JoyCentringFactor=3      ; Between 3 and 9. Defines cut-off point for\r
+                         ; the centre.\r
+WhichJoy=1               ; which joystick to use? 1 or 2?\r
+\r
+;                                       Sound\r
+;                                       \=-=/\r
+\r
+Quiet=No                 ; Yes for NO sound effects\r
+SoundCard=None           ; one of None, SB, SPPro, SB16, PAS, PASPlus, PAS16,\r
+                         ; Aria, WinSound, Gravis, DacLPT, StereoDACs,\r
+                         ; StereoOn1, Speaker.\r
+BaseAddress=$220         ; See below and the documentation for\r
+IRQ=5                    ;    working values of\r
+DMA=1                    ;    these.\r
+SampleRate=22050\r
+\r
+; ** Note : If you have an SB, you may be able just to change\r
+;           "SoundCard=None" above to "SB". Otherwise, see the next paragraph.\r
+\r
+; WARNING: Incorrect values can damage your computer!\r
+;\r
+; As a guide, try:\r
+;   SC=SB      BA=$220 IRQ=5 DMA=1 SR=22050\r
+;   SC=SPEAKER BA=$2A  IRQ=0 DMA=0 SR=11025 (DMA & IRQ are ignored here)\r
+;      Warning: We do *not* officially support PC speaker-- use it at your\r
+;       own risk. It sometimes crashes.\r
+;   SC=PAS16   BA=$388 IRQ=7 DMA=6 SR=22050 (44100 for the adventurous with\r
+;                                               very fast computers.)\r
+\r
+KeyboardClick=No         ; it can go "click" whenever\r
+                         ; you press a key.\r
+\r
+;                                       Logfile\r
+;                                       \=---=/\r
+\r
+Logging=No               ; can be No, Printer or Disk\r
+Logfile=                 ; leave undefined for AVALOT.LOG,\r
+                         ; or give a filename\r
+\r
+; Here follows the...                   Printer Setup\r
+;                                       \=---------=/\r
+\r
+; Explanation of the fields:\r
+;  StartWith            - what is sent to the printer at the start of a game\r
+;  EndWith              - ...at the end of a game\r
+;  ItalicOn, ItalicOff  - self-explanatory\r
+;  EmphOn, EmphOff      - switches bold type on or off\r
+;  DivideOn, DivideOff  - This is printed before/after the divider is\r
+;                          sent. (The divider is the --- oOo --- thing.)\r
+;  DivideIndent         - Number (IN DECIMAL!) of spaces to print before\r
+;                          the divider in order to centre it.\r
+;  Quote, Unquote       - These are the ASCII codes to send to produce\r
+;                          the opening quote (66) and the closing quote (99)\r
+;                          respectively.\r
+;\r
+; The strings to be sent to the printer are specified in hex. Trademarks are\r
+; hereby acknowledged. The [printer...] and [end] signs are to encase the\r
+; blocks of printer definitions for Setup's benefit. You may add definitions\r
+; for other printers simply by adding them onto the end of this file.\r
+; The "printer=" line defines which one the game reads.\r
+\r
+printer=Epson\r
+\r
+; (by the way, the "printer" line must come *before* the relevant definition)\r
+\r
+[printer LaserJet (or any other printer supporting PCL)]\r
+\r
+;\r
+;       --- LaserJet ---\r
+;\r
+\r
+StartWith=1B451B2831324A ; Resets the printer, and switches to "MC Text" font.\r
+EndWith=1B45FF           ; Resets the printer, and does a form feed.\r
+ItalicOn=1B28733053      ; Switches italics on...\r
+ItalicOff=1B28733153     ; ...and off.\r
+EmphOn=1B28733342        ; Switches emphasised mode (bold) on...\r
+EmphOff=1B28733042       ; ...and off.\r
+DivideOn=1B28733342      ; Same as EmphOn here.\r
+DivideOff=1B28733042     ; Same as EmphOff.\r
+DivideIndent = 30        ; Something to do with centring the divider...\r
+Quote = D2               ; Ascii code to produce the "66" opening quote.\r
+Unquote = D3             ; Ascii code to produce the "99" closing quote.\r
+Copyright = A9           ; Ascii code to produce the (c) sign.\r
+\r
+[end] ; Laserjet\r
+\r
+[printer Epson]\r
+;Epson\r
+\r
+;\r
+;       --- Epson ---\r
+;\r
+\r
+StartWith=1B40           ; Reset the printer.\r
+endwith=                 ; No ending code.\r
+ItalicOn = 1B34          ; switches italics on...\r
+italic_off = 1B35        ; ...and off.\r
+emph_on = 1B45           ; Bold on...\r
+emph_off = 1B46          ; ...and off.\r
+DivideOn = E             ; shift out (SO)\r
+DivideOff = 14           ; device control 4 (DC4)\r
+DivideIndent = 15        ; we're in double width here!\r
+Quote = 22               ; normal " sign.\r
+Unquote = 22             ; the same.\r
+Copyright = 286329       ; just (c).\r
+\r
+[end] ; Epson\r
+\r
+; end of file.\r
diff --git a/avalot/avalot.pif b/avalot/avalot.pif
new file mode 100644 (file)
index 0000000..eef4a6b
Binary files /dev/null and b/avalot/avalot.pif differ
diff --git a/avalot/avalot.sez b/avalot/avalot.sez
new file mode 100644 (file)
index 0000000..0838c48
Binary files /dev/null and b/avalot/avalot.sez differ
diff --git a/avalot/avalot.txt b/avalot/avalot.txt
new file mode 100644 (file)
index 0000000..265c4c9
--- /dev/null
@@ -0,0 +1,5 @@
+  ÜÛßÛÜ   Lord            ßÛÛ              ÜÛ\r
+ ÛÛ   ÛÛÜÜÜ  ÜÜÜ  ÜÜÜÜ     ÛÛ     ÜÜÜÜÜ  ÜÜÛÛÜÜ\r
+ ÛÛÜÜÜÛÛ ÛÛ   ÛÛ  ÜÜÜÛÛ    ÛÛ    ÛÛ   ÛÛ   ÛÛ\r
+ ÛÛ   ÛÛ  ßÛÜÛß  ÛÛ  ÛÛ    ÛÛ    ÛÛ   ÛÛ   ÛÛ ÜÜ\r
+ ßß   ßß    ß     ßßßßßß  ßßßß    ßßßßß     ßßß\r
diff --git a/avalot/avalot9.map b/avalot/avalot9.map
new file mode 100644 (file)
index 0000000..4b9f012
--- /dev/null
@@ -0,0 +1,568 @@
+\r
+ Start  Stop   Length Name               Class\r
+\r
+ 00000H 002D9H 002DAH Avalot             CODE\r
+ 002E0H 012C9H 00FEAH Gyro               CODE\r
+ 012D0H 01912H 00643H Pingo              CODE\r
+ 01920H 043E0H 02AC1H Lucerna            CODE\r
+ 043F0H 08716H 04327H acci               CODE\r
+ 08720H 09074H 00955H helper             CODE\r
+ 09080H 094E8H 00469H Highs              CODE\r
+ 094F0H 0A568H 01079H Nimunit            CODE\r
+ 0A570H 0C7BBH 0224CH scrolls            CODE\r
+ 0C7C0H 0F851H 03092H trip5              CODE\r
+ 0F860H 1175DH 01EFEH dropdown           CODE\r
+ 11760H 12A51H 012F2H Enid               CODE\r
+ 12A60H 133AAH 0094BH Basher             CODE\r
+ 133B0H 134BEH 0010FH enhanced           CODE\r
+ 134C0H 16625H 03166H fileunit           CODE\r
+ 16630H 16630H 00000H tommys             CODE\r
+ 16630H 174FEH 00ECFH Timeout            CODE\r
+ 17500H 1763CH 0013DH Sequence           CODE\r
+ 17640H 17D7CH 0073DH Visa               CODE\r
+ 17D80H 18AC5H 00D46H Celer              CODE\r
+ 18AD0H 191ABH 006DCH incline            CODE\r
+ 191B0H 199F1H 00842H Logger             CODE\r
+ 19A00H 19D81H 00382H Closing            CODE\r
+ 19D90H 19F06H 00177H Sticks             CODE\r
+ 19F10H 1A161H 00252H Joystick           CODE\r
+ 1A170H 1A426H 002B7H Dos                CODE\r
+ 1A430H 1AA4EH 0061FH Crt                CODE\r
+ 1AA50H 1E193H 03744H Graph              CODE\r
+ 1E1A0H 2004DH 01EAEH System             CODE\r
+ 20050H 2E599H 0E54AH DATA               DATA\r
+ 2E5A0H 3259FH 04000H STACK              STACK\r
+ 325A0H 325A0H 00000H HEAP               HEAP\r
+\r
+  Address         Publics by Value\r
+\r
+ 0000:0032       setup\r
+ 0000:01EF       @\r
+ 002E:0000       newpointer\r
+ 002E:0084       wait\r
+ 002E:0097       on\r
+ 002E:00EA       on_Virtual\r
+ 002E:010E       off\r
+ 002E:0145       off_Virtual\r
+ 002E:01A2       xycheck\r
+ 002E:01D3       hopto\r
+ 002E:0200       check\r
+ 002E:0264     &