home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amoszine 8
/
Amoszine 8 (Disk 2 of 3).adf
/
F2-Editor.lha
/
Editor.AMOS
/
Editor.amosSourceCode
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
AMOS Source Code
|
1992-10-23
|
40.9 KB
|
1,663 lines
Rem Fortress II Map Editor
Rem By Lee Bamber
'
Rem Started: 19-07-94
'
Set Buffer 150
Bob Update Off : Autoback OFF
'
TT=40
Dim TWN$(TT)
Dim TWN(TT,50) : Rem Town Details
'
Rem THIS IMPORTANT!! must do!
PERSON=1
For T=1 To TT
TWN$(T)="UNKNOWN"
TWN(T,0)=1 : Rem number of people
TWN(T,1)=PERSON
TWN(T,2)=PERSON+1
TWN(T,3)=PERSON+2
TWN(T,4)=PERSON+3
TWN(T,5)=PERSON+4
PERSON=PERSON+5
Next T
'
Dim CARM$(50),CARM(50,80)
'
YOURCOLOUR=1
NEUTRAL=0
'
Dim FACES(205,8) : Rem Details for each person on World
AA=0 : Restore FACEORDER
For F=1 To PERSON
Read A : AA=AA+1
If AA=5 : AA=0 : Restore FACEORDER : End If
FACES(F,0)=A
FACES(F,1)=1+Rnd(3) : FACES(F,2)=1+Rnd(3)
FACES(F,3)=1+Rnd(3) : FACES(F,4)=1+Rnd(3)
FACES(F,5)=Rnd(4) : FACES(F,6)=Rnd(4)
FACES(F,7)=Rnd(4) : FACES(F,8)=Rnd(4)
Next F
Goto _FACEORDEREND
FACEORDER:
Data 1,0,2,3,4
_FACEORDEREND:
'
Rem for townfont
Dim TX(26)
Global TX(),A,TX,TY,T$
'
Dim FINDER(100,5) : Rem Used to store all path ranges from each location
Rem 0=index of plot (index is for finder array, not plt array)
Rem 1=path nmber
Rem 2,3 = range from,to of all other finder elements from this one
Rem 4,5 = range from,to (second set)
'
Dim FPLT(100) : Rem COnverstion table from PLT to FINDER INDEX NUMBERS
'
MAPW=10 : MAPL=10 : HOS=7
Dim MAP(MAPW*11,MAPL*HOS) : Rem Map of terrain
Dim SEC(MAPW*11,MAPL*HOS) : Rem Map of trees & second terrains
Dim OBJ(MAPW*11,MAPL*HOS) : Rem Map of buildings
'
Dim PATH(100,11)
PATHMAX=0
'
Dim BLK(80,2)
Rem Block Vectors
BLK(1,0)=16 : BLK(1,1)=10
Rem priority trees(frontal heights)
BLK(38,2)=1 : BLK(40,2)=1 : BLK(41,2)=1
BLK(42,2)=1 : BLK(43,2)=1 : BLK(45,2)=1
'
Rem OFFSETS For Plot ENTRY/EXIT
Dim PLTOFF(11,1)
PLTOFF(1,0)=19 : PLTOFF(1,1)=28
PLTOFF(2,0)=19 : PLTOFF(2,1)=28
PLTOFF(3,0)=19 : PLTOFF(3,1)=28
PLTOFF(4,0)=19 : PLTOFF(4,1)=28
PLTOFF(5,0)=19 : PLTOFF(5,1)=28
PLTOFF(6,0)=19 : PLTOFF(6,1)=28
PLTOFF(7,0)=44 : PLTOFF(7,1)=15
PLTOFF(8,0)=44 : PLTOFF(8,1)=15
PLTOFF(9,0)=44 : PLTOFF(9,1)=15
PLTOFF(10,0)=44 : PLTOFF(10,1)=15
PLTOFF(11,0)=44 : PLTOFF(11,1)=15
'
Rem Plots for all 'goto' areas
Dim PLT(50,3)
Rem ,0=
Rem ,1=
Rem ,2=
Rem ,3=town index value
'
Dim PROMPT$(2)
PROMPT$(1)="Draw"
PROMPT$(2)="Path"
'
Gosub _GRAB_GENERAL_MAPSTUFF
'
Screen Open 2,320,10,2,Lowres : Flash Off : Curs Off
Screen Open 1,320,256,32,Lowres : Flash Off : Curs Off : Screen Hide 1
Screen Open 0,320,256,32,Lowres : Flash Off : Curs Off : Screen Hide 0
'
Rem Box Pointer
Cls 0 : Ink 8 : Box 0,0 To 33,33 : Get Bob 10,0,0 To 34,34
'
Rem Path Pointer
Cls 0 : Ink 8 : Polyline 0,0 To 5,0 To 0,5 To 0,0 : Get Bob 11,0,0 To 6,6
'
Rem Plot pointer
Cls 0 : Ink 8 : Polyline 0,0 To 10,5 To 5,10 To 0,0 : Get Bob 12,0,0 To 11,11
'
Screen 0 : Load Iff "mapbitsv7.iff",0
Bob 1,1,1,1
'
Screen 1
Get Palette 0
Cls 2
Gosub _INITIAL_MAP
Double Buffer
Screen Display 1,,53,,
'
Screen 2
Colour 0,0 : Colour 1,$FFF : Cls 1
Ink 0,1 : Text 0,8,("Fortress II Map Editor")
Screen To Front 2 : Screen Display 2,,44,,
'
SX=0 : SY=0
SCR=0 : S1Y=8
STATE=1 : GRON=0
HIGH=1
'
Rem Clear index-finder
FINDERMAX=1
Rem clear finder list
SUBMAX=0
'
Rem Max values for Town array, also used to add new entries
WHERETOWNMAX=0
Rem same, but for FORT (LIMITED Entry requirements)
WHEREFORTMAX=0
'
Screen Display 0,,45+S1Y,,
Screen To Front 0
Limit Mouse 133,60 To 127+304,45+250
Change Mouse 2
'
Gosub _HELP_PAGE
'
FLN$="-1" : Gosub _LOAD_WORLD
'
Screen Show 1
Do
'
Screen 2 : Text 280,8,PROMPT$(STATE)
'
Screen SCR
'
K$=Lower$(Inkey$) : SC=Scancode : Clear Key
If SCR=0 and SC=95 : Gosub _HELP_PAGE : End If
MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
MF=Mouse Key
If MF=0 : FMF=0 : End If
If K$="_" : Gosub _CHECKVARS : End If
'
If SCR=1
Rem What On?
X=SX+(MX/32) : Y=SY+(MY/32)
If OBJ(X,Y)=0
If SEC(X,Y)=0
If MAP(X,Y)=0
GRON=0
Else
GRON=MAP(X,Y)
End If
Else
GRON=SEC(X,Y)
End If
Else
GRON=OBJ(X,Y)
End If
If GRON>=100 : GRONREV=2 : GRON=GRON-100 : Else GRONREV=1 : End If
End If
'
Bob Clear
'
Gosub _MENU
'
If K$=" "
X=MX/32 : Y=MY/32
For SST=0 To 1
Bob Clear
Gosub _SANDWITCH
Bob Draw
Screen Swap : Wait Vbl
Next SST
Bob Clear
End If
'
Screen To Front 2
'
If SCR=0 : Wait Vbl : End If
If GRAB=0
If STATE=2 and SCR=1
Bob 1+SCR,-1+((Int(MX/32))*32),-1+((Int((MY-S1Y)/32))*32),10
If GRONREV=1
Bob 3+SCR,((Int(MX/32))*32)+BLK(GRON,0),((Int((MY-S1Y)/32))*32)+BLK(GRON,1),11
Else
Bob 3+SCR,((Int(MX/32))*32)+(31-BLK(GRON,0)),((Int((MY-S1Y)/32))*32)+BLK(GRON,1),Hrev(11)
End If
Else
Bob 1+SCR,-1+((Int(MX/32))*32),-1+((Int((MY-S1Y)/32))*32),10
Bob Off 3+SCR
End If
Else
If GRABREV=0
Bob 1+SCR,((Int(MX/32))*32),((Int((MY-S1Y)/32))*32),2
Else
Bob 1+SCR,((Int(MX/32))*32)+32,((Int((MY-S1Y)/32))*32),Hrev(2)
End If
Bob Off 3+SCR
End If
'
Bob Draw
Screen Swap : Wait Vbl
'
Loop
'
_MENU:
'
Rem General keys
If MF=0
'
Gosub _PLACE_KEYS
Gosub _FINDER_KEYS
'
If K$="p" : If STATE=1 : STATE=2 : Gosub _UPDATE_PLTOFFS : Else STATE=1 : Gosub _INITIAL_MAP : End If : End If
If STATE=2 and SCR=1 and GRONREV=1
If K$="," and BLK(GRON,0)>0 : BLK(GRON,0)=BLK(GRON,0)-1 : End If
If K$="." and BLK(GRON,0)<31 : BLK(GRON,0)=BLK(GRON,0)+1 : End If
If K$="a" and BLK(GRON,1)>0 : BLK(GRON,1)=BLK(GRON,1)-1 : End If
If K$="z" and BLK(GRON,1)<32 : BLK(GRON,1)=BLK(GRON,1)+1 : End If
End If
If K$=":"
Rem change PATHMAX Value
Clear Key
Input "PATHMAX VALUE>";PATHMAX : Bell
Clear Key
End If
If K$=";" and PATHMAX>0
Rem change PATHMAX Value
PATHMAX=PATHMAX-1 : Wait 45 : Bell
Clear Key
End If
If K$="f" or K$="a"
Change Mouse 3
If K$="f"
OLDPLTMAX=PLTMAX
Else
OLDPLTMAX=0
PLTMAX=0
End If
For Y=0 To(MAPL*HOS)
For X=0 To(MAPW*10)
A=OBJ(X,Y) : If Y>0 : A2=OBJ(X,Y-1) : End If
If A=51 or A=53 or A=54 or A=57 or A=59 or A=60 or A=62 or A=66 or A=73 or A=79
SRCHOK=0
If OLDPLTMAX>0
For SRCH=0 To OLDPLTMAX
If PLT(SRCH,1)=X and PLT(SRCH,2)=Y
SRCHOK=1
End If
Next SRCH
End If
If SRCHOK=0
If A=51 : PLT(PLTMAX,0)=1 : End If
If A=53 : PLT(PLTMAX,0)=2 : End If
If A=54 : PLT(PLTMAX,0)=3 : End If
If A=57 : PLT(PLTMAX,0)=4 : End If
If A=59 : PLT(PLTMAX,0)=5 : End If
If A=60 : PLT(PLTMAX,0)=6 : End If
If A=62 and A2=61 : PLT(PLTMAX,0)=7 : End If
If A=62 and A2=64 : PLT(PLTMAX,0)=8 : End If
If A=66 : PLT(PLTMAX,0)=9 : End If
If A=73 : PLT(PLTMAX,0)=10 : End If
If A=79 : PLT(PLTMAX,0)=11 : End If
PLT(PLTMAX,1)=X
PLT(PLTMAX,2)=Y
PLTMAX=PLTMAX+1
End If
End If
Next X
Next Y
PLTMAX=PLTMAX-1
Gosub _INITIAL_MAP
Change Mouse 2
End If
If K$="s" : Gosub _SAVE_WORLD : End If
If K$="l" : Gosub _LOAD_WORLD : End If
If K$="j" and SCR=0 : K$="" : SCR=1 : S1YY=S1Y : S1Y=0 : Screen To Front 1 : Screen 1 : End If
If K$="j" and SCR=1 : SCR=0 : S1Y=S1YY : Screen To Front 0 : Screen 0 : End If
If K$="x"
If GRABREV=0 : GRABREV=1 : Else GRABREV=0 : End If
End If
If SC=89 and HIGH=1
SC=0 : HIGH=0 : Screen Hide 2
S1Y=0
Screen Display 0,,45+S1Y,,
Screen Display 1,,45,,
End If
If SC=89 and HIGH=0
HIGH=1 : Screen Show 2
Screen Display 1,,53,,
End If
End If
'
If((MF=2 and FMF=0) or(K$="b")) and GRAB>0
If MF=2 : MF=0 : FMF=1 : End If
GRAB=0 : GRABREV=0
End If
'
Rem All keys for BITS Screen
If SCR=0
If SC=77 and S1Y>0 and HIGH=1
S1Y=S1Y-8
Screen Display 0,,45+S1Y,,
End If
If SC=76 and S1Y<8 and HIGH=1
S1Y=S1Y+8
Screen Display 0,,45+S1Y,,
End If
'
If MF=1 and GRAB=0
GRAB=(1+(Int(MX/32))+(Int((MY-S1Y)/32))*10)
GRABREV=0
Get Bob 2,((Int(MX/32))*32),((Int((MY-S1Y)/32))*32) To((Int(MX/32))*32)+32,((Int((MY-S1Y)/32))*32)+32
End If
'
End If
'
Rem All keys for MAP Screen
If SCR=1
'
If SC=76 or SC=77 or SC=78 or SC=79
S=0
If SC=76 and SY>0 : SY=SY-1 : S=1 : End If
If SC=77 and SY<(MAPL*HOS)-HOS : SY=SY+1 : S=2 : End If
If SC=79 and SX>0 : SX=SX-1 : S=4 : End If
If SC=78 and SX<(MAPW*10)-10 : SX=SX+1 : S=8 : End If
Bob Off
For SST=0 To 1
Bob Clear
If S=1 : Rem up
Screen Copy 1,0,0,320,256-32 To 1,0,32
Y=0
For X=0 To 9 : Gosub _SANDWITCH : Next X
End If
If S=2 : Rem down
Screen Copy 1,0,32,320,256 To 1,0,0
Y=HOS
For X=0 To 9 : Gosub _SANDWITCH : Next X
End If
If S=4 : Rem left
Screen Copy 1,0,0,320-32,256 To 1,32,0
X=0
For Y=0 To HOS : Gosub _SANDWITCH : Next Y
End If
If S=8 : Rem right
Screen Copy 1,32,0,320,256 To 1,0,0
X=9
For Y=0 To HOS : Gosub _SANDWITCH : Next Y
End If
Bob Draw
Screen Swap : Wait Vbl
Next SST
Bob Clear
Gosub _UPDATE_PLTOFFS
End If
'
If STATE=1 : Gosub _IMAGE_CLICKS : End If
If STATE=2 : Gosub _PATH_CLICKS : End If
If K$="*"
For P=0 To PATHMAX
For TT=0 To 10
PATH(P,TT)=0
Next TT
Next P
PATHMAX=0
End If
'
'
End If
'
Return
'
_FINDER_KEYS:
'
If K$="("
Rem Clear index-finder
FINDERMAX=1 : SUBMAX=0
End If
If K$="^"
Rem Print all index-finder locations
For F=0 To FINDERMAX-1
Ink 8,0,0 : Text((PLT(FPLT(F),1)-SX)*32)+12,((PLT(FPLT(F),2)-SY)*32)+24,Str$(F)
Next F
End If
If K$="%"
Rem Compile index-finder list
'
Screen Open 6,320,256,2,Lowres
Screen 6
Colour 0,$2 : Colour 1,$CCF
Pen 1 : Paper 0
Cls 0
Locate 1,1 : Centre "Finder List"
'
FB=0 : FAUTO=1
Locate 0,2 : Print " TOWN DEST RANGE TOWARDS DEST ";
Locate 0,3 : Print "SUB INDX TOWN R1FROM R1TO R2FROM R2TO";
Locate 0,4 : Print "----------------------------------------";
Goto _FLIST
'
_FMAIN:
'
Locate 0,25
Input ">";SUB; : Rem which one
If SUB>0 and SUB<=SUBMAX
Rem change existing one
INDX=FINDER(SUB,0)
PATH=FINDER(SUB,1)
R1F=FINDER(SUB,2)
R1T=FINDER(SUB,3)
R2F=FINDER(SUB,4)
R2T=FINDER(SUB,5)
Locate 5,25 : If INDX<>0 : Put Key Str$(INDX) : End If : Input "";INDX;
Locate 11,25 : If PATH<>0 : Put Key Str$(PATH) : End If : Input "";PATH;
Locate 17,25 : If R1F<>0 : Put Key Str$(R1F) : End If : Input "";R1F;
Locate 23,25 : If R1T<>0 : Put Key Str$(R1T) : End If : Input "";R1T;
Locate 28,25 : If R2F<>0 : Put Key Str$(R2F) : End If : Input "";R2F;
Locate 34,25 : If R2T<>0 : Put Key Str$(R2T) : End If : Input "";R2T;
Locate 0,26 : Input "Are you sure? (Y/N)>";R$; : Cline
If(R$="y") or(R$="Y")
FINDER(SUB,0)=INDX
FINDER(SUB,1)=PATH
FINDER(SUB,2)=R1F
FINDER(SUB,3)=R1T
FINDER(SUB,4)=R2F
FINDER(SUB,5)=R2T
End If
Locate 0,25 : Print ""; : Cline
Else
Rem new
Locate 5,25 : Input "";INDX;
Locate 11,25 : Input "";PATH;
Locate 17,25 : Input "";R1F;
Locate 23,25 : Input "";R1T;
Locate 28,25 : Input "";R2F;
Locate 34,25 : Input "";R2T;
Locate 0,26 : Input "Are you sure? (Y/N/QUIT/SHOW/CLB)>";R$; : Cline
If Upper$(R$)="QUIT" : Goto _FEND : End If
If(R$="y") or(R$="Y")
SUB=SUBMAX
FINDER(SUB,0)=INDX
FINDER(SUB,1)=PATH
FINDER(SUB,2)=R1F
FINDER(SUB,3)=R1T
FINDER(SUB,4)=R2F
FINDER(SUB,5)=R2T
SUBMAX=SUBMAX+1
End If
Locate 0,25 : Print ""; : Cline
End If
If Upper$(R$)="SHOW"
Locate 0,26 : Input "Set page position FB(-1 to auto)?";FB; : Cline
If FB=-1
FAUTO=1
Else
FAUTO=0
End If
End If
Goto _FLIST
Clear Key
'
Goto _FMAIN
'
_FLIST:
'
FR=10 : If SUBMAX<10 : FR=SUBMAX : End If
If FAUTO=1
FB=0 : If SUBMAX>=10 : FB=SUBMAX-10 : End If
End If
For F=0 To FR-1
Locate 0,5+F : Print Space$(40);
If FB+F<SUBMAX
Locate 1,5+F : Print FB+F
Locate 5,5+F : Print "";FINDER(FB+F,0);
Locate 11,5+F : Print "";FINDER(FB+F,1);
Locate 17,5+F : Print "";FINDER(FB+F,2);
Locate 23,5+F : Print "";FINDER(FB+F,3);
Locate 28,5+F : Print "";FINDER(FB+F,4);
Locate 34,5+F : Print "";FINDER(FB+F,5);
End If
Next F
'
Goto _FMAIN
_FEND:
'
Screen Close 6
'
End If
If K$="`"
Clear Key
Rem Enter an index-finder plot converstion
X=SX+(MX/32) : Y=SY+(MY/32)
A=OBJ(X,Y) : If Y>0 : A2=OBJ(X,Y-1) : End If
If A=51 or A=53 or A=54 or A=57 or A=59 or A=60 or A=62 or A=66 or A=73 or A=79
Rem A positional entity (can walk to it)
PP=-1
For P=0 To PLTMAX
If PLT(P,1)=X and PLT(P,2)=Y
PP=P
End If
Next P
If PP<>-1
Rem Found PLT at plot now selecting
Rem Put the real PLT index into a table refering to finder index!
FPLT(FINDERMAX)=PP
FINDERMAX=FINDERMAX+1
End If
End If
End If
'
Return
'
_PLACE_KEYS:
'
If K$="$"
Rem enter place data, so what is place/
X=SX+(MX/32) : Y=SY+(MY/32)
A=OBJ(X,Y) : If Y>0 : A2=OBJ(X,Y-1) : End If
If A=51 or A=53 or A=54 or A=57 or A=59 or A=60 or A=62 or A=66 or A=73 or A=79
Rem A positional entity (can walk to it)
PP=-1
For P=0 To PLTMAX
If PLT(P,1)=X and PLT(P,2)=Y
PP=P
End If
Next P
If PP<>-1
Rem Found PLT place, so now we get to split between
Rem TOWN, FORT(complete and ruined) or RAW land
If A=51 or A=53 or A=54
Rem town
WHERE=PLT(PP,3)
If WHERE=0
Rem new entry, so take from main stack and use.
WHERETOWNMAX=WHERETOWNMAX+1
WHERE=WHERETOWNMAX
PLT(PP,3)=WHERE
End If
Gosub _TOWNEDIT
Else
If A=987
Rem absolutely does nothing
Rem nout!
Else
If A=57 or A=59 or A=62 or A=66 or A=73 or A=79
Rem fort
Rem Only selected and filled during ingame castle selection!
WHERE=PLT(PP,3)
If WHERE=0
Rem new entry, so take from main stack and use.
WHEREFORTMAX=WHEREFORTMAX+1
WHERE=WHEREFORTMAX
PLT(PP,3)=WHERE
End If
Gosub _FORTEDIT
End If : End If : End If
End If
End If
End If
'
Return
'
_TOWNEDIT:
'
Screen Open 7,320,256,32,Lowres : Curs Off : Screen Hide 7
Gosub _GRAB_TOWNBITS
Screen Open 6,320,256,32,Lowres
Flash Off : Curs Off
Get Palette 0
Pen 8 : Paper 0 : Cls 0
Ink 8,0,0
'
Change Mouse 2
Do
'
Screen 6 : Cls 0
Locate 0,0 : Centre "Town Editor"
Locate 0,1 : Print "Town ID=";WHERE
Locate 20,1 : Print "Town Colour=";TWN(WHERE,15)
Locate 0,2 : Print "Town Name=";TWN$(WHERE)
Locate 0,3 : Print "Town Services Total=";TWN(WHERE,0)
'
For T=0 To 4
Ink 0 : Bar(320/5.0)*T,40 To(320/5.0)*T+(320/5.0)-1,100
Ink 8 : Box(320/5.0)*T,40 To(320/5.0)*T+(320/5.0)-1,70
Ink 8 : Box(320/5.0)*T,70 To(320/5.0)*T+(320/5.0)-1,100
Next T
Locate 0,4 : Print ">:MAYOR:BLCKSMITH:MILITARY:BUILDER:SPY:<"
'
Locate 0,13 : Print "Catapult Price>";TWN(WHERE,6)
Locate 0,14 : Print "Town Income>";TWN(WHERE,7)
Locate 0,15 : Print "Town Tax>";TWN(WHERE,8)
Locate 0,16 : Print "Builders Price>";TWN(WHERE,9)
Locate 0,17 : Print "SpyIndex Number>";TWN(WHERE,10)
Locate 0,18 : Print "Malitia QTY>";TWN(WHERE,29)
Locate 0,19 : Print "Malitia Weapon>";TWN(WHERE,30)
Locate 0,21 : Print "Trainer TYPE>";TWN(WHERE,31);
Print " PRICE>";TWN(WHERE,35)
Locate 0,22 : Print "Trainer TYPE>";TWN(WHERE,32);
Print " PRICE>";TWN(WHERE,36)
Locate 0,23 : Print "Trainer TYPE>";TWN(WHERE,33);
Print " PRICE>";TWN(WHERE,37)
Locate 0,24 : Print "Trainer TYPE>";TWN(WHERE,34);
Print " PRICE>";TWN(WHERE,38)
Locate 0,28 : Centre "! E X I T !"
'
Gosub _UPDATETOWNFACES
'
While Mouse Key=0
MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
Wend
'
Gosub _EDITTOWNBITS
'
While Mouse Key<>0 : Wend
If MY>180 : Exit : End If
'
Loop
'
Screen Close 6
Screen Close 7
'
Return
'
_EDITTOWNBITS:
'
If MY>=23 and MY<31
Locate 0,30 : Input "Number of Services>";TWN(WHERE,0); : Cline
End If
If MY>=15 and MY<23 and MX<160
Locate 0,30 : Input "Name of Town>";TWN$(WHERE); : Cline
End If
If MY>=15 and MY<23 and MX>160
Locate 0,30 : Input "Empire Colour(0=neutral)>";TWN(WHERE,15); : Cline
End If
'
If MY>=31 and MY<=100
TT=-1
For T=0 To 4
If MX>=(320/5.0)*T and MX<=(320/5.0)+((320/5.0)*T)
TT=1+T
End If
Next T
If TT<>-1
Rem selected 1,2,3,4,5
F=TWN(WHERE,TT)
If MY>70
FACES(F,0)=FACES(F,0)+1
If FACES(F,0)=5 : FACES(F,0)=0 : End If
Else
FACES(F,1)=1+Rnd(3) : FACES(F,2)=1+Rnd(3)
FACES(F,3)=1+Rnd(3) : FACES(F,4)=1+Rnd(3)
FACES(F,5)=Rnd(4) : FACES(F,6)=Rnd(4)
FACES(F,7)=Rnd(4) : FACES(F,8)=Rnd(4)
End If
End If
End If
If MY>=101 and MY<160
Locate 0,13 : Input "Catapult Price>";TWN(WHERE,6)
Locate 0,14 : Input "Town Income>";TWN(WHERE,7)
Locate 0,15 : Input "Town Tax>";TWN(WHERE,8)
Locate 0,16 : Input "Builders Price>";TWN(WHERE,9)
Locate 0,17 : Input "SpyIndex Number>";TWN(WHERE,10)
Locate 0,18 : Input "Malitia QTY>";TWN(WHERE,29)
Locate 0,19 : Input "Malitia Weapon>";TWN(WHERE,30)
End If
If MY>=165 and MY<175
Locate 0,21 : Input "Trainer TYPE>";TWN(WHERE,31);
Input " PRICE>";TWN(WHERE,35)
Locate 0,22 : Input "Trainer TYPE>";TWN(WHERE,32);
Input " PRICE>";TWN(WHERE,36)
Locate 0,23 : Input "Trainer TYPE>";TWN(WHERE,33);
Input " PRICE>";TWN(WHERE,37)
Locate 0,24 : Input "Trainer TYPE>";TWN(WHERE,34);
Input " PRICE>";TWN(WHERE,38)
End If
'
Return
'
_UPDATETOWNFACES:
'
Screen 7 : Cls 0
For FACE=1 To TWN(WHERE,0)
'
FACEB=TWN(WHERE,FACE)
'
Rem Create One ChapBox
Put Block 140,0,0 : Put Block 141,0,15
Put Block 141,0,15+(8*1) : Put Block 141,0,15+(8*2)
Put Block 141,0,15+(8*3) : Put Block 141,0,15+(8*4)
Put Block 142,0,15+(8*5)
'
Rem Create Person
Put Block 132+FACES(FACEB,0),8,29
Put Block 99+FACES(FACEB,1),8,11
Put Block 103+FACES(FACEB,2),8+10,11+6
Put Block 107+FACES(FACEB,3),8+15,11+14
Put Block 111+FACES(FACEB,4),8+11,11+19
If FACES(FACEB,5)>0 : Put Block 115+FACES(FACEB,5),8+11,11+20 : End If
If FACES(FACEB,6)>0 : Put Block 119+FACES(FACEB,6),8+5,11+18 : End If
If FACES(FACEB,7)>0 : Put Block 123+FACES(FACEB,7),8+0,11+0 : End If
If FACES(FACEB,8)>0 : Put Block 127+FACES(FACEB,8),8+7,11+12 : End If
'
Screen Copy 7,0,10,46,55 To 6,10+((FACE-1)*(320/5.0)),50
'
Next FACE
Screen 6
'
Return
'
_FORTEDIT:
'
Screen Open 6,320,256,32,Lowres
Flash Off : Curs Off
Get Palette 0
Pen 8 : Paper 0 : Cls 0
Ink 8,0,0
'
Change Mouse 2
Do
'
Screen 6 : Cls 0
Locate 0,0 : Centre "Fort Editor"
Locate 0,1 : Print "Fort ID=";WHERE
Locate 20,1 : Print "Fort Colour=";CARM(WHERE,51)
Locate 0,2 : Print "Fort Name=";CARM$(WHERE)
Locate 0,4 : Print "Max Number of Divisions=";CARM(WHERE,0)
If CARM(WHERE,0)>0
For T=0 To CARM(WHERE,0)-1
Locate 0,6+T : Print "Type=";CARM(WHERE,1+T)
Locate 20,6+T : Print "Qty=";CARM(WHERE,11+T)
Next T
End If
Locate 0,13 : Print "Number of Archers=";CARM(WHERE,41)
Locate 0,14 : Print "OIL Flag? ";CARM(WHERE,42)
Locate 0,15 : Print "ROCKS Flag? ";CARM(WHERE,43)
Locate 0,16 : Print "BARACADE Flag? ";CARM(WHERE,44)
Locate 0,18 : Print "Type of Castle(1-5)>";CARM(WHERE,72)
'
Locate 0,28 : Centre "! E X I T !"
'
While Mouse Key=0
MX=X Screen(X Mouse) : MY=Y Screen(Y Mouse)
Wend
'
Gosub _EDITFORTBITS
'
While Mouse Key<>0 : Wend
If MY>180 : Exit : End If
'
Loop
'
Screen Close 6
'
Return
'
_EDITFORTBITS:
'
If MY>=15 and MY<23 and MX<160
Locate 0,30 : Input "Name of Fort>";CARM$(WHERE); : Cline
End If
If MY>=15 and MY<23 and MX>160
Locate 0,30 : Input "Empire Colour(0=neutral)>";CARM(WHERE,51); : Cline
End If
If MY>=(4*8) and MY<(4*8)+8
Locate 0,4 : Input "New Max Number>";CARM(WHERE,0); : Cline
End If
If MY>=(6*8) and MY<(6*8)+8
Locate 0,6 : Input "A >";CARM(WHERE,1); : Cline
Locate 0,6 : Input "V >";CARM(WHERE,11); : Cline
End If
If MY>=(7*8) and MY<(7*8)+8
Locate 0,7 : Input "B >";CARM(WHERE,2); : Cline
Locate 0,7 : Input "V >";CARM(WHERE,12); : Cline
End If
If MY>=(8*8) and MY<(8*8)+8
Locate 0,8 : Input "C >";CARM(WHERE,3); : Cline
Locate 0,8 : Input "V >";CARM(WHERE,13); : Cline
End If
If MY>=(9*8) and MY<(9*8)+8
Locate 0,9 : Input "D >";CARM(WHERE,4); : Cline
Locate 0,9 : Input "V >";CARM(WHERE,14); : Cline
End If
If MY>=(10*8) and MY<(10*8)+8
Locate 0,10 : Input "E >";CARM(WHERE,5); : Cline
Locate 0,10 : Input "V >";CARM(WHERE,15); : Cline
End If
If MY>=(11*8) and MY<(11*8)+8
Locate 0,11 : Input "F >";CARM(WHERE,6); : Cline
Locate 0,11 : Input "V >";CARM(WHERE,16); : Cline
End If
If MY>=(13*8) and MY<(13*8)+8
Locate 0,13 : Input "Number of Archers>";CARM(WHERE,41); : Cline
End If
If MY>=(14*8) and MY<(14*8)+8
Locate 0,14 : Input "OIL>";CARM(WHERE,42); : Cline
End If
If MY>=(15*8) and MY<(15*8)+8
Locate 0,15 : Input "ROCKS>";CARM(WHERE,43); : Cline
End If
If MY>=(16*8) and MY<(16*8)+8
Locate 0,16 : Input "BARACADE>";CARM(WHERE,44); : Cline
End If
If MY>=(18*8) and MY<(18*8)+8
Locate 0,18 : Input "Type (1-first fort/5-best)>";CARM(WHERE,72); : Cline
End If
'
Return
'
'
'
'
_PATH_CLICKS:
'
If MF=0
'
If K$="c" or K$="d"
Change Mouse 3
A=GRON : Gosub _AA_FROM_A
If AA>0
X=SX+Int(MX/32) : Y=SY+Int(MY/32)
For P=0 To PLTMAX
If PLT(P,0)=AA and PLT(P,1)=X and PLT(P,2)=Y
Rem found plot
If PATHMAX>0
PP=PATHMAX-1
While PP>=0
If PATH(PP,0)=P
Rem found last path entered
PATHMAX=PATHMAX-1
For PPP=PP To PATHMAX-1
For TT=0 To 10
PATH(PPP,TT)=PATH(PPP+1,TT)
Next TT
Next PPP
PP=0
End If
PP=PP-1
Wend
End If
End If
Next P
End If
If K$="c" : Gosub _INITIAL_MAP : End If
Change Mouse 2
End If
'
End If
'
If MF=1 and FMF=0
FMF=1
'
Ink 8
If PATH=0
For P=0 To PLTMAX
If MX>=((PLT(P,1)-SX)*32)+PLTOFF(PLT(P,0),0) and MX<=((PLT(P,1)-SX)*32)+PLTOFF(PLT(P,0),0)+10
If MY>=((PLT(P,2)-SY)*32)+PLTOFF(PLT(P,0),1) and MY<=((PLT(P,2)-SY)*32)+PLTOFF(PLT(P,0),1)+10
PATH=1 : PATHBIT=0
PATH(PATHMAX,0)=P : PO=P
Gr Locate((PLT(P,1)-SX)*32)+PLTOFF(PLT(P,0),0),((PLT(P,2)-SY)*32)+PLTOFF(PLT(P,0),1)
End If
End If
Next P
Else
If PATH=1
PP=-1
For P=0 To PLTMAX
If MX>=((PLT(P,1)-SX)*32) and MX<=((PLT(P,1)-SX)*32)+32
If MY>=((PLT(P,2)-SY)*32) and MY<=((PLT(P,2)-SY)*32)+32
PP=P
End If
End If
Next P
If PP=-1
If PATHBIT<6
PATH(PATHMAX,2+PATHBIT)=SX+(MX/32)
PATH(PATHMAX,3+PATHBIT)=SY+(MY/32)
PATHBIT=PATHBIT+2
If GRONREV=1
Draw To(Int(MX/32)*32)+BLK(GRON,0),(Int(MY/32)*32)+BLK(GRON,1)
Else
Draw To(Int(MX/32)*32)+31-BLK(GRON,0),(Int(MY/32)*32)+BLK(GRON,1)
End If
End If
Else
PATH=0 : Ink 1 : Rem 255 end colour
PATH(PATHMAX,2+PATHBIT)=255
PATH(PATHMAX,1)=PP
Draw To((PLT(PP,1)-SX)*32)+PLTOFF(PLT(PP,0),0),((PLT(PP,2)-SY)*32)+PLTOFF(PLT(PP,0),1)
'
Rem Maybe this path has been done before?(if so, copy into old one)
TTT=0
For T=0 To PATHMAX
If T<PATHMAX and((PATH(T,0)=PO and PATH(T,1)=PP) or(PATH(T,1)=PO and PATH(T,0)=PP))
For TT=0 To 10
PATH(T,TT)=PATH(PATHMAX,TT) : TTT=1
Next TT
End If
Next T
'
If TTT=0 : PATHMAX=PATHMAX+1 : End If
'
End If
End If : End If
'
End If
'
If MF=2 and FMF=0
PATH=0 : Gosub _INITIAL_MAP
End If
'
Return
'
_AA_FROM_A:
'
AA=0
If A=51 : AA=1 : End If
If A=53 : AA=2 : End If
If A=54 : AA=3 : End If
If A=57 : AA=4 : End If
If A=59 : AA=5 : End If
If A=60 : AA=6 : End If
If A=62 : AA=7 : End If
If A=66 : AA=8 : End If
If A=73 : AA=9 : End If
If A=79 : AA=10 : End If
'
Return
'
_IMAGE_CLICKS:
'
If((K$="u") or(MF=1 and GRAB>0) or(MF=2 and GRAB=0)) and FMF=0
FMF=1
'
X=((Int(MX/32))) : Y=((Int((MY-S1Y)/32)))
'
If MF=1 and GRAB>0
A=GRAB+(GRABREV*100)
'
If A>=100
If A>=101 and A<131 : UX=X : UY=Y : UE=1 : UA=MAP(SX+UX,SY+UY) : MAP(SX+X,SY+Y)=A : End If
If A>=131 and A<151 : UX=X : UY=Y : UE=2 : UA=SEC(SX+UX,SY+UY) : SEC(SX+X,SY+Y)=A : End If
If A>=151 and A<181 : UX=X : UY=Y : UE=3 : UA=OBJ(SX+UX,SY+UY) : OBJ(SX+X,SY+Y)=A : End If
Else
If A>=0 and A<31 : UX=X : UY=Y : UE=1 : UA=MAP(SX+UX,SY+UY) : MAP(SX+X,SY+Y)=A : End If
If A>=31 and A<51 : UX=X : UY=Y : UE=2 : UA=SEC(SX+UX,SY+UY) : SEC(SX+X,SY+Y)=A : End If
If A>=51 and A<81 : UX=X : UY=Y : UE=3 : UA=OBJ(SX+UX,SY+UY) : OBJ(SX+X,SY+Y)=A : End If
End If
'
End If
If MF=2 and GRAB=0
'
If OBJ(SX+X,SY+Y)>0
If OBJ(SX+X,SY+Y)>100
GRAB=OBJ(SX+X,SY+Y)-100 : GRABREV=1
Else
GRAB=OBJ(SX+X,SY+Y) : GRABREV=0
End If
UX=X : UY=Y : UE=3 : UA=OBJ(SX+UX,SY+UY)
OBJ(SX+X,SY+Y)=0
Else
If SEC(SX+X,SY+Y)>0
If SEC(SX+X,SY+Y)>100
GRAB=SEC(SX+X,SY+Y)-100 : GRABREV=1
Else
GRAB=SEC(SX+X,SY+Y) : GRABREV=0
End If
UX=X : UY=Y : UE=2 : UA=SEC(SX+UX,SY+UY)
SEC(SX+X,SY+Y)=0
Else
If MAP(SX+X,SY+Y)>0
If MAP(SX+X,SY+Y)>100
GRAB=MAP(SX+X,SY+Y)-100 : GRABREV=1
Else
GRAB=MAP(SX+X,SY+Y) : GRABREV=0
End If
UX=X : UY=Y : UE=1 : UA=MAP(SX+UX,SY+UY)
MAP(SX+X,SY+Y)=0
End If : End If : End If
'
XX=X : YY=Y : Rem Tile copy uses same X and Y, soz!
If GRAB>0 : Gosub _COPY_TILE : End If
X=XX : Y=YY
'
End If
'
If K$="u" and UE>0
If UE=1 : MAP(SX+UX,SY+UY)=UA : End If
If UE=2 : SEC(SX+UX,SY+UY)=UA : End If
If UE=3 : OBJ(SX+UX,SY+UY)=UA : End If
UE=0 : X=UX : Y=UY
End If
'
For SST=0 To 1
Bob Clear
Gosub _SANDWITCH
Bob Draw
Screen Swap : Wait Vbl
Next SST
Bob Clear
'
End If
'
If(MF=1 and GRAB=0)
'
X=((Int(MX/32))) : Y=((Int((MY-S1Y)/32)))
'
GRAB=0
If OBJ(SX+X,SY+Y)>0
If OBJ(SX+X,SY+Y)>100
GRAB=OBJ(SX+X,SY+Y)-100 : GRABREV=1
Else
GRAB=OBJ(SX+X,SY+Y) : GRABREV=0
End If
Else
If SEC(SX+X,SY+Y)>0
If SEC(SX+X,SY+Y)>100
GRAB=SEC(SX+X,SY+Y)-100 : GRABREV=1
Else
GRAB=SEC(SX+X,SY+Y) : GRABREV=0
End If
Else
If MAP(SX+X,SY+Y)>0
If MAP(SX+X,SY+Y)>100
GRAB=MAP(SX+X,SY+Y)-100 : GRABREV=1
Else
GRAB=MAP(SX+X,SY+Y) : GRABREV=0
End If
End If : End If : End If
'
If GRAB>0
Gosub _COPY_TILE
End If
'
End If
'
Return
'
_COPY_TILE:
'
Screen 0
Y=Int((GRAB-1)/10) : X=(GRAB-(Y*10))
Get Bob 2,(X*32)-32,(Y*32) To(X*32),(Y*32)+32
Screen 1
'
FMF=1
'
Return
'
'
'
'
_INITIAL_MAP:
'
Bob Off
'
Screen 1
For SST=0 To 1
'
Bob Clear
For X=0 To 10
For Y=0 To HOS-1
Gosub _SANDWITCH
Next Y
Next X
Bob Draw
Screen Swap : Wait Vbl
'
Next SST
Bob Clear
'
Gosub _UPDATE_PLTOFFS
'
Return
'
_UPDATE_PLTOFFS:
'
If STATE=2
Bob Off
For MP=0 To PLTMAX
'
If PLT(MP,2)>=SY and PLT(MP,2)<=SY+HOS-1
If PLT(MP,1)>=SX and PLT(MP,1)<=SX+9
Paste Bob((PLT(MP,1)-SX)*32)+PLTOFF(PLT(MP,0),0),((PLT(MP,2)-SY)*32)+PLTOFF(PLT(MP,0),1),12
Gosub _DRAW_ALL_PATHS
End If
End If
'
Next MP
End If
'
Return
'
_DRAW_ALL_PATHS:
'
If PATHMAX>0
'
For PT=0 To(PATHMAX-1)
'
P=PATH(PT,0)
PP=PATH(PT,1)
'
Ink 8
Gr Locate((PLT(P,1)-SX)*32)+PLTOFF(PLT(P,0),0),((PLT(P,2)-SY)*32)+PLTOFF(PLT(P,0),1)
GRON=0 : T=0
While T<>999
Rem What On?
X=PATH(PT,2+T) : If X>110 : X=110 : End If
Y=PATH(PT,3+T) : If Y>70 : Y=70 : End If
If OBJ(X,Y)=0
If SEC(X,Y)=0
If MAP(X,Y)=0
GRON=0
Else
GRON=MAP(X,Y)
End If
Else
GRON=SEC(X,Y)
End If
Else
GRON=OBJ(X,Y)
End If
If GRON>=100 : GRONREV=2 : GRON=GRON-100 : Else GRONREV=1 : End If
If GRONREV=1
Draw To(Int(PATH(PT,2+T)-SX)*32)+BLK(GRON,0),(Int(PATH(PT,3+T)-SY)*32)+BLK(GRON,1)
Else
Draw To(Int(PATH(PT,2+T)-SX)*32)+31-BLK(GRON,0),(Int(PATH(PT,3+T)-SY)*32)+BLK(GRON,1)
End If
Ink 9
Rem Error Trap so smooth running!
If T<8
If PATH(PT,2+T+2)=255
T=999
Else
T=T+2
End If
Else
T=999
End If
Wend
Draw To((PLT(PP,1)-SX)*32)+PLTOFF(PLT(PP,0),0),((PLT(PP,2)-SY)*32)+PLTOFF(PLT(PP,0),1)
'
Next PT
'
End If
'
Return
'
_SANDWITCH:
'
PB[200+MAP(SX+X,SY+Y),(X*32),(Y*32)]
P=SEC(SX+X,SY+Y) : If P>=100 : P=P-100 : End If
If SEC(SX+X,SY+Y)<>0 and BLK(P,2)=0 : PB[200+SEC(SX+X,SY+Y),(X*32),(Y*32)] : End If
If OBJ(SX+X,SY+Y)<>0 : PB[200+OBJ(SX+X,SY+Y),(X*32),(Y*32)] : End If
If SEC(SX+X,SY+Y)<>0 and BLK(P,2)=1 : PB[200+SEC(SX+X,SY+Y),(X*32),(Y*32)] : End If
'
Return
'
'
_SAVE_WORLD:
'
Change Mouse 3
'
Rem Save using memory block method
'
Rem REMEMBER TO INCREASE SPACE RESERVED WHEN ALTERING SQUASHED DATA!
SIZE=((MAPW*10)*((MAPL*7)+1))*3 : Rem map space
SIZE=SIZE+2 : Rem sizeofarea space
SIZE=SIZE+((PLTMAX+1)*4) : Rem plot space
SIZE=SIZE+(PATHMAX*11) : Rem path space
'
Erase 10
Reserve As Work 10,SIZE
'
Rem Reset Pointer
P=0
'
Rem Size of Map
Poke Start(10)+P,MAPW : P=P+1
Poke Start(10)+P,MAPL : P=P+1
'
Rem Map Data
For Y=0 To(MAPL*7)
For X=0 To((MAPW*10)-1)
Poke Start(10)+P,MAP(X,Y) : P=P+1
Poke Start(10)+P,SEC(X,Y) : P=P+1
Poke Start(10)+P,OBJ(X,Y) : P=P+1
Next X
Next Y
'
Rem Plot Data
Poke Start(10)+P,PLTMAX : P=P+1
For T=0 To PLTMAX
For TT=0 To 3
Poke Start(10)+P,PLT(T,TT) : P=P+1
Next TT
Next T
'
Rem Path Data
Poke Start(10)+P,PATHMAX : P=P+1
For T=0 To(PATHMAX-1)
For TT=0 To 10
Poke Start(10)+P,PATH(T,TT) : P=P+1
Next TT
Next T
'
Rem Squash Data
NEWSIZE= Extension_5_00CE(Start(10),Length(10),0,1024,0)
Bank Shrink 10 To NEWSIZE
'
Rem Save Bank and Base Info File
FLN$=Fsel$("","World-?","Enter World Number")
'
Bsave FLN$,Start(10) To Start(10)+Length(10)
Open Out 1,FLN$+".Info"
Print #1,WORLDNAME$
Print #1,WORLDDESC$
Print #1,SIZE
Print #1,NEWSIZE
Close 1
'
Open Out 1,FLN$+".Vectors"
For T=0 To 80
For TT=0 To 2
Print #1,BLK(T,TT)
Next TT
Next T
Close 1
'
Open Out 1,FLN$+".Finder"
Print #1,FINDERMAX
For T=0 To FINDERMAX
Print #1,FPLT(T)
Next T
Print #1,SUBMAX
For T=0 To SUBMAX
For TT=0 To 5
Print #1,FINDER(T,TT)
Next TT
Next T
Close 1
'
Open Out 1,FLN$+".Town"
Print #1,WHERETOWNMAX
If WHERETOWNMAX>0
For T=1 To WHERETOWNMAX
Print #1,TWN$(T)
For TT=0 To 50
Print #1,TWN(T,TT)
Next TT
Next T
End If
Close 1
'
Open Out 1,FLN$+".Faces"
Print #1,PERSON
For T=1 To PERSON
For TT=0 To 8
Print #1,FACES(T,TT)
Next TT
Next T
Close 1
'
Open Out 1,FLN$+".Fort"
Print #1,WHEREFORTMAX
If WHEREFORTMAX>0
For T=1 To WHEREFORTMAX
Print #1,CARM$(T)
For TT=0 To 80
Print #1,CARM(T,TT)
Next TT
Next T
End If
Close 1
'
Change Mouse 2
'
Return
'
_LOAD_WORLD:
'
Change Mouse 3
'
Rem Load using memory block method
'
If FLN$="-1"
FLN$="World-Jarah"
Else
FLN$=Fsel$("World-**","","Select World to Load")
End If
'
Open In 1,FLN$+".Info"
Input #1,WORLDNAME$
Input #1,WORLDDESC$
Input #1,SIZE
Input #1,NEWSIZE
Close 1
'
Erase 10
Reserve As Work 10,SIZE
'
Bload FLN$,Start(10)
'
T= Extension_5_00E4(Start(10),NEWSIZE)
'
Rem Reset Pointer
P=0
'
Rem Size of Map
MAPW=Peek(Start(10)+P) : P=P+1
MAPL=Peek(Start(10)+P) : P=P+1
'
Rem Map Data
For Y=0 To(MAPL*7)
For X=0 To((MAPW*10)-1)
MAP(X,Y)=Peek(Start(10)+P) : P=P+1
SEC(X,Y)=Peek(Start(10)+P) : P=P+1
OBJ(X,Y)=Peek(Start(10)+P) : P=P+1
Next X
Next Y
'
Rem Plot Data
PLTMAX=Peek(Start(10)+P) : P=P+1
For T=0 To PLTMAX
For TT=0 To 3
PLT(T,TT)=Peek(Start(10)+P) : P=P+1
Next TT
Next T
'
Rem Path Data
PATHMAX=Peek(Start(10)+P) : P=P+1
For T=0 To(PATHMAX-1)
For TT=0 To 10
PATH(T,TT)=Peek(Start(10)+P) : P=P+1
Next TT
Next T
'
Open In 1,FLN$+".Vectors"
For T=0 To 80
For TT=0 To 2
Input #1,BLK(T,TT)
Next TT
Next T
Close 1
'
Open In 1,FLN$+".Finder"
Input #1,FINDERMAX
For T=0 To FINDERMAX
Input #1,FPLT(T)
Next T
Input #1,SUBMAX
For T=0 To SUBMAX
For TT=0 To 5
Input #1,FINDER(T,TT)
Next TT
Next T
Close 1
'
Open In 1,FLN$+".Town"
Input #1,WHERETOWNMAX
If WHERETOWNMAX>0
For T=1 To WHERETOWNMAX
Input #1,TWN$(T)
For TT=0 To 50
Input #1,TWN(T,TT)
Next TT
Next T
End If
Close 1
'
Rem SEE flag used to omit certain loads while I change data!
If SEE=SEE
Open In 1,FLN$+".Faces"
Input #1,PERSON
For T=1 To PERSON
For TT=0 To 8
Input #1,FACES(T,TT)
Next TT
Next T
Close 1
End If
'
Open In 1,FLN$+".Fort"
Input #1,WHEREFORTMAX
If WHEREFORTMAX>0
For T=1 To WHEREFORTMAX
Input #1,CARM$(T)
For TT=0 To 80
Input #1,CARM(T,TT)
Next TT
Next T
End If
Close 1
'
Gosub _INITIAL_MAP
'
Change Mouse 2
'
Return
'
'
'
'
'
'
'
'
_GRAB_GENERAL_MAPSTUFF:
'
Screen Open 5,320,200,32,Lowres : Screen Hide 5 : Cls 2
Rem map bits (200=empty)
Get Block 200,0,0,32,32
'
Load Iff "mapbitsv7.iff",5 : Screen Hide 5
Screen 5
'
Rem 0 land stuff - 3 tree stuff - 5 town - 6 castle stuff
For Y=0 To 2
For X=0 To 9
Get Block 201+X+(Y*10),0+(X*32),0+(Y*32),32,32
Next X
Next Y
For Y=3 To 7
For X=0 To 9
Get Block 201+X+(Y*10),0+(X*32),0+(Y*32),32,32,1
Next X
Next Y
'
Screen Close 5
'
Return
'
'
_GRAB_TOWNBITS:
'
Rem GSTORE tells whether already grabbed into memory!
'
If GSTORE<>1
'
GSTORE=1
Load Iff "facebitsv2.iff",7 : Screen Hide 7
'
Rem 100+ (max.99)
Rem 100-103 heads
For X=0 To 3
Get Block 100+X,1+(X*32),1,31,31,1
Next X
Rem 104-107 eyes
For X=0 To 3
Get Block 104+X,1+(X*18),33,17,11,1
Next X
Rem 108-111 nose
For X=0 To 3
Get Block 108+X,1+(X*8),45,7,7,1
Next X
Rem 112-115 mouth
For X=0 To 3
Get Block 112+X,1+(X*14),53,13,10,1
Next X
Rem 116-119 tash
For X=0 To 3
Get Block 116+X,1+(X*15),64,14,6,1
Next X
Rem 120-123 beard
For X=0 To 3
Get Block 120+X,1+(X*22),71,21,14,1
Next X
Rem 124-127 hair
For X=0 To 3
Get Block 124+X,1+(X*32),86,31,15,1
Next X
Rem 128-131 scars
For X=0 To 3
Get Block 128+X,1+(X*20),102,19,12,1
Next X
'
Rem 132-139 Occupation bodies
For X=0 To 4 : Rem( max. of 7 )
Get Block 132+X,1+(X*32),115,31,31,1
Next X
'
Rem 140 Panel Bits
Get Block 140,1,147,46,15,1
Get Block 141,1,164,46,8,1
Get Block 142,1,174,46,10,1
'
Rem plaque bits
Get Block 143,1,185,24,18,1
Get Block 144,27,185,18,18,1
'
Rem Who prompts
Get Block 145,49,147,53,9
Get Block 146,104,147,86,9
Get Block 147,49,157,49,9
Get Block 148,100,157,43,9
Get Block 149,49,167,53,9
Get Block 150,104,167,56,9
Get Block 151,49,177,69,9
'
Rem Sub-Section Window Pieces
Get Block 152,211,26,19,15,1
Get Block 153,232,26,10,14,1
Get Block 154,211,43,19,9,1
Get Block 155,211,53,19,9,1
Get Block 156,232,53,10,9,1
'
Rem Sub-Section Images
Get Block 157,129,1,29,21,1
Get Block 158,160,1,14,15,1
Get Block 159,176,1,9,17,1
Get Block 160,187,1,16,16,1
Get Block 161,205,1,16,17,1
Get Block 162,222,1,11,19,1
'
Rem Sub-Section Titles
For Y=0 To 4
Get Block 163+Y,129,24+(Y*11),77,10,1
Next Y
Rem Spy Imagebox
Get Block 168,4,210,91,24,1
'
Rem Take Fonts for Town Plaque (and any other things)
T=1 : A=0 : B=0
Restore FONTTOWN1
Read A
While A<>-1
Get Block 170+B,T,204,A,5,1 : TX(B)=A+1
T=T+A+1 : B=B+1
Read A
Wend
'
End If
'
Return
'
FONTTOWN1:
Data 4,4,4,4,3,3,4,4,3,2,4,3,5,4,4,4,4,4,4,3,4,6,5,4,3,4,3,-1
'
'
_HELP_PAGE:
_HELPREDO:
SS=180
Screen Open 5,320,SS+16,32,Lowres : Screen Hide 5
Ink 1 : Bar 0,0 To 200,SS
Ink 8 : Bar 2,2 To 198,SS-2
Ink 1,8
A$="FORTRESS 2 WORLD MAKER" : Text 100-((Len(A$)*8)/2),10,A$
A$="~~~~~~~~~~~~~~~~~~~~~~" : Text 100-((Len(A$)*8)/2),18,A$
A$="[U] = Undo " : Text 100-((Len(A$)*8)/2),30,A$
A$="[B] = New Image " : Text 100-((Len(A$)*8)/2),40,A$
A$="[X] = Flip on X-Axis " : Text 100-((Len(A$)*8)/2),50,A$
A$="[J] = Switch Screens " : Text 100-((Len(A$)*8)/2),60,A$
A$="[L] = Load World " : Text 100-((Len(A$)*8)/2),70,A$
A$="[S] = Save World " : Text 100-((Len(A$)*8)/2),80,A$
'
If HELPMENUTYPE=0
A$="F1 = Path Keys " : Text 100-((Len(A$)*8)/2),110,A$
A$="F2 = Finder Keys" : Text 100-((Len(A$)*8)/2),120,A$
A$="F3 = Place Describer" : Text 100-((Len(A$)*8)/2),130,A$
End If
If HELPMENUTYPE=1
A$="[P] = Edit PathVector" : Text 100-((Len(A$)*8)/2),100,A$
A$="[F] = Find All Plots " : Text 100-((Len(A$)*8)/2),110,A$
A$="[C] = Clear Path(s) " : Text 100-((Len(A$)*8)/2),120,A$
A$="[A] = Redo all Plots " : Text 100-((Len(A$)*8)/2),130,A$
A$="[D] = Delete One Path" : Text 100-((Len(A$)*8)/2),140,A$
A$="[*] = ERASE ALL PATHS" : Text 100-((Len(A$)*8)/2),150,A$
A$="[:] = Enter PATHMax" : Text 100-((Len(A$)*8)/2),160,A$
End If
If HELPMENUTYPE=2
A$="[`] = Mark next Place" : Text 100-((Len(A$)*8)/2),100,A$
A$="[(] = Clear all marks" : Text 100-((Len(A$)*8)/2),110,A$
A$="[^] = Print mark nums" : Text 100-((Len(A$)*8)/2),120,A$
A$="[%] = Enter Find-List" : Text 100-((Len(A$)*8)/2),130,A$
End If
If HELPMENUTYPE=3
A$="[$] = Enter PlaceData" : Text 100-((Len(A$)*8)/2),100,A$
End If
'
Get Bob 100,0,0 To 201,SS+1
Screen Close 5
'
Rem Init Bit
Screen To Front 2
Screen 0
Bob Clear
Bob 1,60,(256/2)-(SS/2),100
Bob Draw
Screen Swap : Wait Vbl
Screen Show 0
'
QQ=0
While QQ=0 and Mouse Key=0
K$=Inkey$ : SC=Scancode
If SC>=80 and SC<=87
QQ=SC-79 : Rem covers F1 to F8
End If
Wend
If QQ>0
HELPMENUTYPE=QQ
Goto _HELPREDO
End If
'
While Mouse Key>0 : Wend
Bob Clear
Bob Off
Get Bob 100,1,1 To 2,2
Bob Draw
Screen Swap : Wait Vbl
Return
'
_CHECKVARS:
Screen Open 5,320,256,2,Lowres
Screen 5
Cls 0
For T=0 To PATHMAX-1
For TT=0 To 10
Print PATH(T,TT);
Next TT
Print
Next T
Wait Key
Screen Close 5
Return
'
'
Rem procedures
'
Procedure PB[PBDEF,PBX,PBY]
'
If PBDEF<300
Put Block PBDEF,PBX,PBY
Else
Hrev Block PBDEF-100
Put Block PBDEF-100,PBX,PBY
Hrev Block PBDEF-100
End If
'
End Proc