> DefRoom 1.23  25-May-94 V1.00  02-Aug-97 V1.20 ( v1.22 2+ v1.23 make more like Spectrum version <: FW&86: Obj% &301,Buf% &100,ctrl% 31,data% 127,Sprite% 7,Icon% 31:X%=ctrl%:Y%=X%256 P$OSGBPB=&FFD1:in%=0:out%=0:*FX4,1 Z: d& VDU 23;9,7;0;0;0; 23;4,38;0;0;0; n( VDU 23;10,&60;0;0;0;23;7,31;0;0;0; x 23,136,255,0,0,0,0,0,0,0 , 23,137,128,128,128,128,128,128,128,128 23,138,16,0,16,0,16,0,16,0 , 23,139,255,128,128,128,128,128,128,128 : rm%=-1:blk%=0 =Room0%=alloc(&4000):Room1%=alloc(&4000):rom0%=4:rom1%=5 / Room0%=&8000:rom0%=4:rom1%=5:Room1%=&8000 3 Room1%=FNalloc(&4000):IFRoom1%=0:Room1%=&8000 PROCasm  err:end: C:7"Jet Set Willy Room Editor"'7"(C)1989-2004 J.G.Harston"' d5"L: Load file S: Save file"'5"R: Edit room G: Sprite editor"''8"X: Exit to Menu Program"' 5"Press a key: ";  A$=:A$>"_":A$=(A$-32) ""LSCDRGKX*",A$):A$<>"*":A$ "#A$="*":"*"A$:A$:A$="":":"; ,A$="L":Load:0 6A$="S":Save:0 @A$="R":Edit:0 J"A$="G":Chain("DefSprite"):0 TA$="X":Chain("Hello"):0 ^0: h: r#ݤerr:0,22);::CloseAll:=-1 |: CloseAll in%:A%=in%:in%=0:#A% out%:A%=out%:out%=0:#A%  : end:*FX4 : :    3Load:"Rooms file to load: "f$:f$<>"":LoadR 213:"Objects file to load: "f$:f$<>"":LoadO 12,26:Disp: : "LoadR:"Load rooms to : "st% &>"Link room exits? "lk$:lk$,1)="y" lk$,1)="Y":lk$="Y" 0"PutR:in%=(f$):in%=0:ErrO: :"?X%=in%:A%=4:r%=st%::13;r%; D6X%!1=Buf%:X%!5=256: OSGBPB:copy(Buf%,r(r%),256) Nlk$="Y":LinkRooms X&r%=r%+1:#in%:#in%:in%=0:GetR: b: l*LinkRooms:!data%=Buf%!233:lk%=0 3 vddata%?lk%<>r%:copy(r(data%?lk%),Buf%,256):Buf%?(233+(lk%1))=r%:copy(Buf%,r(data%?lk%),256) : : $LoadO:in%=(f$):in%=0:ErrO: ,?X%=in%:A%=4:X%!1=Obj%:X%!5=513: OSGBPB 4#in%:in%=0:copy(Obj%,&A3FF+&10000*rom1%,513): : : 3Save:"Rooms file to save: "f$:f$<>"":SaveR 213:"Objects file to save: "f$:f$<>"":SaveO  : 9SaveR:"Save room start: "st%:"Save room end: "en% d(st%<64 en%>63) (st%>191 en%<192):0,23);"Must be continuous in 0-63 or 192-255";:A%=: $PutR:out%=(f$):out%=0:ErrO:  )?X%=out%:A%=2: r%=st% en%:13;r%; :copy(r(r%),Buf%,256):X%!1=Buf%:X%!5=256: OSGBPB:r%  9#out%:out%=0:GetR:SetAd(f$,((st%&C0)&300)*256): *: 4&SaveO:out%=(f$):out%=0:ErrO: >©(&A3FF+&10000*rom1%,Obj%,513) H;?X%=out%:A%=2:X%!1=Obj%:X%!5=513: OSGBPB:#out%:out%=0 RSetAd(f$,&3A3FF): \: f p z  %A%=016:32,A%);""::40,"") 4x%=0:y%=0:Blk: err:end: A%=(200):clr1 menu:end: : ݤalloc(L%)=0 B DEFFNalloc(L%):DIMA%-1:IFHIMEM-A%-512>L%:DIMA%L%:=A% ELSE =0 : 4ݤmenu:y%>16:x%=8:y%>21:x%=21:y%=23:y%=0:x%=0 .x%,y%);:A$=:y%<17:A$=13:x%=0:A$=138 A$>135 A$<140:Move:=0 By%<16:"1234",A$):33,blk%*2+1)" "9" ";:blk%=A$-1:Blk:=0 "y%<16:" 0"+135,A$):Put:=0 y%=16:Name:=0 y%>16 y%<22:Exit:=0 y%=22:Border:=0 $A$>"_":A$=(A$-32) ."EDOQHLSR*",A$)=0:=0 8% IF A$="M" Copy to another room? B& IF A$="W" Swap with another room L IF A$="C" PROCConvs V IF A$="G" PROCGuardian `A$="E":EdChar:=0 jA$="O":AddObj:=0 tA$="D":DelObj:=0 ~A$="R":Room:=0 Win:A$="Q":= A$="H"::Help:A%= A$="*":Oscli:=0 A$="L":Load:=0 A$="S":Save 12,26:Info:=0 : *Blk:33,blk%*2+1)">"9"<"x%,y%);: : /Put:Ad%=Buf%+x%4+y%*8:By%=3*4^(3-(x%3)) C?Ad%=(?Ad% By%)(blk%*By%3):128+blk%:x%=(x%+1)31:x%=0:13  :  8Move:y%>17 y%<22:6,y%)d(Buf%?(y%-18+233),3); mv:xt%=-1:  mv:A$=137:x%=(x%+1)31: (A$=136:x%=(x%-1)31: 2A$=138:y%=y%+1-(y%=16): <A$=139:y%=(y%-1)(y%>0): F P: ZName:A%=A$:rm%<0: dKA%>31 A%<128:Buf%?(x%+128)=A%:A%-12*(A%=127):x%=(x%+1)31:x%=0:13 n x: WRoom:6,22)3;0,22)"Room= ";:8,8,8:""A$:A$="":6,21);d(rm%,3);x%,y%);: PutR:rm%=A$:GetR 8copy(&A3FF+&10000*rom1%,Obj%,513):Disp:x%=0:y%=0: : Disp:rm%<0: A%=07:23,128+A%:B%=07 (Buf%?(161+A%*9+B%-1*(A%=7)):::30 ;A%=0127:B%=Buf%?A%:C%=03:128+(B%64):B%=(B%*4)&FF :(A%7)=7: :PrN(Buf%+128,):A%=01 @slope(A%,Buf%?(214+4*A%),Buf%!(215+4*A%),Buf%?(217+4*A%)): >A%=240:Buf%?A%<>255:Sprite(Buf%?A%,Buf%?(A%+1)):A%=A%+2 .Buf%?A%=255 A%>255:Objects:Info:Chars !19,0,c(Buf%?160 8),0,0,0: ݤc(A%)=(A%2+4*(A%1))7 "ݤd(A%,N%)=" "+A%,N%) ">ݤo0(A%,N%)=½(48+A%64)+(48+(A%&38)8)+(48+(A%7)),N%) ,Bݤfile(A%,A$):$data%=A$:?X%=data%:X%?1=data%256:=(&FFDD)&FF 6: @*slope(Type%,Dir%,Ad%,Num%):Num%<1: J"sx%=Ad%31:sy%=(Ad%&1E0)32: TDsx%,sy%);(133-A%);:sx%=sx%+2*(Dir%(1-Type%))-1:sy%=sy%-Type% ^2Num%=Num%-1:Num%<1 sx%>31 sx%<0 sy%<0: h: r.PrN(A%,F%):C%=031:B%=A%?C%:B%>32:F%= |1F%:B%>31 B%<128:B%-12*(B%=127) F%:32 <1 >39:C%=32 :>6:(40-);  : 8ݤr(R%):R%=R%255:R%<64:=Room0%+256*R%+rom0%*&10000 ,R%<128:=Room1%+256*(R%-64)+rom1%*&10000  =&7F00 : GetR:rm%<0: copy(r(rm%),Buf%,256): PutR:rm%<0: copy(Buf%,r(rm%),256): : copy(Src%,Dst%,Len%) >!&70=Src%:!&72=Dst%:!&74=Len%:?&76=Src%&10000+Dst%&10000  mc%: &: 0asm:mc%50:a%=01 :AP%=mc%:[OPT a%*2:\ &70/1=>src, &72/3=>dst, &74/5=len, &76=rom D"LDA &F4:PHA:LDA &76:JSR SetRom N LDY #0:LDA &75:BEQ ZeroPages X .loop b(LDA (&70),Y:STA (&72),Y:INY:BNE loop l$INC &71:INC &73:DEC &75:BNE loop v.ZeroPages LDA &74:BEQ ZeroBytes .ZeroPageLp LDA (&70),Y:STA (&72),Y:INY DEC &74:BNE ZeroPageLp .ZeroBytes PLA  .SetRom STA &F4:STA &FE30:RTS ]: : (Objects:ObjN%=0: A%=?Obj%+1 256 `((Obj%?A%)63)=rm%:(Obj%?(A%+256))31,Obj%?(A%+256)32-8*(Obj%?A%>127))"";:ObjN%=ObjN%+1 : :  BSprite(Num%,Psn%):copy(&A000+8*Num%+rom1%*&10000,Sprite%,8) ,Sprite%?2=Psn%:Num%=?Sprite%7:Num%=0:  &Num%=3:z%=010:16,z%)138;:: *Num%=4:: Arrows 4@ic%=(((Sprite%?1 Sprite%?0) Sprite%?2)&E0)+256*Sprite%?5 >"Sprite%?2 31,Sprite%?316); H$copy(ic%,Icon%+&10000*rom1%,32) R6:33,C%*2);"BkGnd:Wall: Floor:Nasty:Slope:Conv.:******Objct:",C%*6+1,6);34,C%*2+1);(128+C%);:C%<6:9;9;o0(Buf%?(160+C%*9),3); : : EExit:A$=13:xt%>-1:Buf%?(y%-18+233)=xt%:xt%=-1:PrExit(y%-18) A$=13:y%=y%+1: A$<"0" A$>"9": 8xt%=(A$+10*(xt%(xt%>-1)))255:6,y%);d(xt%,3);: : 0Border:A$=13:xt%>-1:Buf%?222=xt%:xt%=-1 A$=13:y%=0:x%=0: A$<"0" A$>"9": $9xt%=(A$+10*(xt%(xt%>-1)))255:19,y%);d(xt%,3);: .: 8!AddObj:?Obj%=0 rm%>127: BRA%=?Obj%:Obj%?A%=rm%+16*(y%8):Obj%?(A%+256)=x%+32*y%:?Obj%=A%-1:ObjN%=ObjN%+1 L8copy(Obj%,&A3FF+&10000*rom1%,513):"";8;:InfoB: V: `-DelObj:?Obj%=255 rm%>127 ObjN%=0: j Num%=?Obj%: A%=Num%+1 256 t((Obj%?A%)63)=rm%:((Obj%?A%)128)=(y%8)*16:Obj%?(A%+256)=((x%+32*y%)255):Obj%?A%=Obj%?(?Obj%+1):Obj%?(A%+256)=Obj%?(?Obj%+257):?Obj%=?Obj%+1:ObjN%=ObjN%-1:32,8 ~1:copy(Obj%,&A3FF+&10000*rom1%,513):InfoB: : *Help:"JSW Room editor instructions" 8'"1,2,3,4 Select room blocks"'"R : Select new room" '"H : Help C : Conveyors/Slopes" "S : Save L : Load"  : clr:0,23);79;:30: clr1:0,23);39;:30: !Win:28,0,24,39,18,31,0,5: : BSetAd(A$,B%):X%!2=B%:A%=file(2,A$):X%!6=B%:A%=file(3,A$): %ErrO:"Can't open file";:A%=: : Oscli: A$:Win::*FX4 ;"*"A$:A$:":";:A$=:13+"LlSs*",A$):A$="*":127 (CA$<>"*"::A$="L" A$="l":Load: A$="S" A$="s":Save: 212,26:"FX4,1":Info: <: FEdChar:rm%=-1: P30,23);"Edit char: "c$:clr:c$<"1" c$>"7": Z728,0,16,31,0,12:C%=c$:xo%=Buf%+152+C%*9-10*(C%=7) d1yc%=0 7:1,1+yc%);:A%=xo%?yc%: xc%=0 7 n*A%=A%*2:(A%256):135:32:128 139 x%:""d(xo%?yc%,4)::" "8,"") -xc%=0:yc%=0:C%<7:'" Attr="o0(xo%?-1,3) p1+xc%,1+yc%);:A$=:A$>135 A$<140:xc%=(xc%-(A$=137)+(A$=136))7:yc%=(yc%-(A$=138)+(A$=139))7:0 " 012A"+13,A$):A$="A"A$="a":C%<7:6,11);3;8;8;8;:""f$:f$<>"":f$="00"+f$,3):xo%?-1=64*f$,1)+8*f$,2,1)+f$,1) &A$="A":C%<7:6,11)o0(xo%?-1,3) 1A$=" ":A$=(49+((xo%?yc% (2^(7-xc%)))<>0)) 2A$="0":xo%?yc%=xo%?yc% (2^(7-xc%)):139,8 9A$="1":xo%?yc%=xo%?yc% (2^(7-xc%)):135:32,8:128 710,1+yc%);d(xo%?yc%,4):A$=13:PutR:26:Disp: