logo Sign In

Star Wars Laserdisc Preservations. See 1st Post for Updates. — Page 5

Author
Time
 (Edited)

I'm curious, althorr1138, what method did you use to IVTC?  I'm in the process of manually ITVCing the US SWE LaserDisc for a basic backup, but I've only had to deal with the cadence errors at reel changes.  Being from the same source, I thought I'd be running into some of these others spotted by Darth Mallwalker.

Author
Time
 (Edited)

Darth Mallwalker said:

Well I'm sorry to be 'that guy' again

 Yeah I'd rather have known before I release it again.  Thanks for the help! I was about ready to fix everything and start encoding but I guess it can wait a few more days lol. 

 

I was using selectevery and manually throwing out the frames but moth3r showed me this:

dw=avisource().assumetff().doubleweave()
a = dw.Pulldown(0, 2).Subtitle("0, 2")
b = dw.Pulldown(1, 3).Subtitle("1, 3")
c = dw.Pulldown(2, 4).Subtitle("2, 4")
d = dw.Pulldown(0 ,3).Subtitle("0 ,3")
e = dw.Pulldown(1, 4).Subtitle("1, 4")
show=ShowFiveVersions(a, b, c, d, e)

return(show)

I found it to be quicker and easier to spot which pulldown to use with the showfiveversions filter.  I imagine the same thing could be implemented with the selectevery method also.  Are there any benefits or drawbacks to using either method?

EDIT: I'm really hoping you guys don't find so much wrong with ESB or ROTJ lol.

Luke threw twice…maybe.

Author
Time

selectEvery() is better if the source is YV12. Yours probably isn't.

I will have a few more ESB frames to check. Haven't seen ROTJ
so if you want help with that one, show your script!

Mattman, don't be alarmed if your SWE don't have all the same cadence changes.
Not long ago poita shared the first reel of his SWE cap which had only two cadence changes. (JSC had four changes within the first reel.)

However, in practice you must take into account the “fuckwit factor”. Just talk to Darth Mallwalker…
-Moth3r

Author
Time

Darth Mallwalker said:

selectEvery() is better if the source is YV12.

I don't understand why this is the case, because Pulldown() is implemented using SelectEvery() internally.  Is it just that it is easier to spot problematic frames with SelectEvery()?

Author
Time
 (Edited)

EDIT: I haven't even started ROTJ yet btw.

I used several avs files for star wars because it was so many changes and lines but I used one for ESB so here it is:

#setmemorymax(2000)
#setmtmode(5,0)
side1raw=AVISource("E:\STAR WARS\Laserdisc\JSC\ESB\Theater750HD\side1.avi")
s1p1=side1raw.assumetff().doubleweave().pulldown(0,2).trim(704,0).trim(0,15585)
s1p22=side1raw.separatefields().trim(40722,0).weave().assumetff().doubleweave().pulldown(2,4).trim(0,15145)
s1p21=side1raw.separatefields().trim(40722,0).weave().assumetff().doubleweave().pulldown(2,4).trim(15146,15146).separatefields().trim(0,-1).nnedi2(dh=true).assumefps("ntsc_film")
s1p2=s1p22 ++ s1p21
s1p3=side1raw.separatefields().trim(78590,0).weave().assumetff().doubleweave().pulldown(2,4).trim(0,1439)
s1=s1p1 ++ s1p2 ++ s1p3
side2raw=AVISource("E:\STAR WARS\Laserdisc\JSC\ESB\Theater750HD\side2.avi")
s2p11=side2raw.separatefields().trim(804,0).weave().assumetff().doubleweave().pulldown(1,4).trim(0,14322)
s2p12=side2raw.separatefields().trim(804,0).weave().assumetff().doubleweave().pulldown(1,4).trim(14323,14323).separatefields().trim(0,-1).nnedi2(dh=true).assumefps("ntsc_film")
s2p1= s2p11 ++ s2p12
s2p2=side2raw.separatefields().trim(36614,0).weave().assumetff().doubleweave().pulldown(0,3).trim(0,13038)
s2p3=side2raw.separatefields().trim(69212,0).weave().assumetff().doubleweave().pulldown(2,4).trim(0,13195)
s2=s2p1 ++ s2p2 ++ s2p3
side3raw=AVISource("E:\STAR WARS\Laserdisc\JSC\ESB\Theater750HD\side3.avi")
s3p1=side3raw.separatefields().trim(824,0).weave().assumetff().doubleweave().pulldown(0,2).trim(0,2277)
s3p21=side3raw.separatefields().trim(6518,0).weave().assumetff().doubleweave().pulldown(0,2).trim(0,31049)
s3p22=side3raw.separatefields().trim(6518,0).weave().assumetff().doubleweave().pulldown(0,2).trim(31050,31050).separatefields().trim(0,-1).nnedi2(dh=true).assumefps("ntsc_film")
s3p2=s3p21 ++ s3p22
s3=s3p1 ++ s3p2
side4raw=AVISource("E:\STAR WARS\Laserdisc\JSC\ESB\Theater750HD\side4.avi")
s4p11=side4raw.separatefields().trim(726,0).weave().assumetff().doubleweave().pulldown(1,4).trim(0,2)
s4p12=side4raw.separatefields().trim(726,0).weave().assumetff().doubleweave().pulldown(1,4).trim(3,3).separatefields().trim(0,-1).nnedi2(dh=true).assumefps("ntsc_film")
s4p13=side4raw.separatefields().trim(738,0).weave().assumetff().doubleweave().pulldown(0,2).trim(0,15552)
s4p1=s4p11 ++ s4p12 ++ s4p13
s4p21=side4raw.separatefields().trim(39620,0).weave().assumetff().doubleweave().pulldown(0,2).trim(0,13001)
s4p22=side4raw.separatefields().trim(39620,0).weave().assumetff().doubleweave().pulldown(0,2).trim(13002,13002).separatefields().trim(0,-1).nnedi2(dh=true).assumefps("ntsc_film")
s4p2=s4p21 ++ s4p22
s4p3=side4raw.separatefields().trim(72126,0).weave().assumetff().doubleweave().pulldown(0,2).trim(0,8296)
s4=s4p1 ++ s4p2 ++ s4p3
side5raw=AVISource("E:\STAR WARS\Laserdisc\JSC\ESB\Theater750HD\side5.avi")
s5p11=side5raw.separatefields().trim(696,0).weave().assumetff().doubleweave().pulldown(1,3).trim(0,2)
s5p12=side5raw.separatefields().trim(708,0).weave().assumetff().doubleweave().pulldown(0,2).trim(0,7160)
s5p1=s5p11 ++ s5p12
s5p21=side5raw.separatefields().trim(18610,0).weave().assumetff().doubleweave().pulldown(0,2).trim(0,15034)
s5p22=side5raw.separatefields().trim(18610,0).weave().assumetff().doubleweave().pulldown(0,2).trim(15035,15035).separatefields().trim(0,-1).nnedi2(dh=true).assumefps("ntsc_film")
s5p2=s5p21 ++ s5p22
s5p3=side5raw.separatefields().trim(56198,0).weave().assumetff().doubleweave().pulldown(0,3).trim(0,14350)
s5=s5p1 ++ s5p2 ++ s5p3

dw=s5p3.assumetff().doubleweave()
a = dw.Pulldown(0, 2).Subtitle("0, 2")
b = dw.Pulldown(1, 3).Subtitle("1, 3")
c = dw.Pulldown(2, 4).Subtitle("2, 4")
d = dw.Pulldown(0 ,3).Subtitle("0 ,3")
e = dw.Pulldown(1, 4).Subtitle("1, 4")
show=ShowFiveVersions(a, b, c, d, e)
finalvid=s1 ++ s2 ++ s3 ++ s4 ++ s5

return(finalvid)

Luke threw twice…maybe.

Author
Time
 (Edited)

Chewtobacca said:


I don't understand why this is the case, because Pulldown() is implemented using SelectEvery() internally.
Pulldown(a,b) is implemented internally as SelectEvery(5,a,b)

Perhaps I should have said:
SelectEvery(10, is better than SelectEvery(5, if the source is YV12.

Using Pulldown() every "3" frame is handled the same way:
you either keep the first two-out-of-three fields and discard the third,
or toss the first field and keep the last two-of-three.

Using SelectEvery(10, is more flexible. It allows you to
keep first two fields from 1st, 3rd, 5th, 7th, 9th... "3" frame and
keep last two fields from 2nd, 4th, 6th, 8th... "3" frame.

With 4:2:0 source you want to keep whichever two fields were encoded together.
Not always the first two or always last two, but alternating.

However, in practice you must take into account the “fuckwit factor”. Just talk to Darth Mallwalker…
-Moth3r

Author
Time

You learn something new every day...or night. It's nice you're helping out with this Mallwalker!

We want you to be aware that we have no plans—now or in the future—to restore the earlier versions. 

Sincerely, Lynne Hale publicity@lucasfilm.com

Author
Time
 (Edited)

SelectEvery(10,a,b,c,d) is also slightly faster because it only reconstructs 1 frame instead of 2 for every 5. But there is the downside that only one of the five "patterns" works for each source cadence (as the AviSynth documentation notes, with the Pulldown method there will be two that work out of the five versions shown).

So the script above that was written to only check where Pulldown breaks would take twice as long to write with SelectEvery(10,a,b,c,d).

Anyway, for that method I've been using an .avsi function instead of adding the big block of lines to every script. I had written my own manual+semi-manual IVTC plugin that seemed to run a little faster still but I introduced a bug at some point that made it crash on exit all the time and abandoned it.

Author
Time

I like the idea of using a function.  It would save a lot of typing.  I like typing so it never really bothered me that much but if it makes things easier to understand then it's worth it I think.

Luke threw twice…maybe.

Author
Time

althor1138 said:


side1raw=AVISource("E:\STAR WARS\Laserdisc\JSC\ESB\Theater750HD\side1.avi")
s1p1=side1raw.assumetff().doubleweave().pulldown(0,2).trim(704,0).trim(0,15585)
s1p22=side1raw.separatefields().trim(40722,0).weave().assumetff().doubleweave().pulldown(2,4).trim(0,15145)
s1p21=side1raw.separatefields().trim(40722,0).weave().assumetff().doubleweave().pulldown(2,4).trim(15146,15146).separatefields().trim(0,-1).nnedi2(dh=true).assumefps("ntsc_film")
s1p2=s1p22 ++ s1p21
s1p3=side1raw.separatefields().trim(78590,0).weave().assumetff().doubleweave().pulldown(2,4).trim(0,1439)
s1=s1p1 ++ s1p2 ++ s1p3

side1raw=AVISource("E:\STAR WARS\Laserdisc\JSC\ESB\Theater750HD\side1.avi").assumeTFF
s1p1=side1raw.assumetff().doubleweave().pulldown(0,2).trim(704,0).trim(0,15584)
s1p21=side1raw.separatefields().trim(40722,-1).nnedi2(dh=true).assumefps("ntsc_film")
s1p22=side1raw.separatefields().trim(40723,78589).doubleweave().pulldown(0,3)#trim(0,15146)
s1p2=s1p21 ++ s1p22
s1p31=side1raw.separatefields().trim(78590,-1).nnedi2(dh=true).assumefps("ntsc_film")
s1p32=side1raw.separatefields().trim(78591,0).doubleweave().pulldown(1,3).trim(0,1439)
s1=s1p1 ++ s1p2 ++ s1p31 ++ s1p32

Fixed the following GOUT frames:
15592 - was combed, see Post_98 above
30739 - was nnedi()ed, but two fields are present
30745 - was missing, but it's nnedi()able

Please check this field:
side1raw.separatefields().trim(82191,-1)
Does it contain Han or blackness?

If Han, then add this line:
s1p33=side1raw.separatefields.trim(82191,-1).nnedi2(dh=true).assumefps("ntsc_film")
to restore GOUT 32186


Moving on to side2, please check the following fields:
side2raw.separatefields().trim(804,-1)
side2raw.separatefields().trim(102203,-1)
Do they contain picture or blackness?

However, in practice you must take into account the “fuckwit factor”. Just talk to Darth Mallwalker…
-Moth3r

Author
Time
 (Edited)

althor1138 said:

Here is a little clip.  It is interleaved with 1 clip being the raw capture and the other being the adjusted clip I plan on using for the 720p version.  I've just adjusted the levels and tried to not crush or blow out any information.  I have applied a halo reducer which I think I'm going to use.  I wouldn't say it fixes the right-edge halo problem but I think it makes it better. 

Hey, what's up with the "strobo-effect" or is it only a problem on my end? And how do I get to check the 720p version??

We want you to be aware that we have no plans—now or in the future—to restore the earlier versions. 

Sincerely, Lynne Hale publicity@lucasfilm.com

Author
Time

It alternates between the raw capture and the settings I planned on using.  You should probably not watch this temporally but step through it.  I just wanted to see what people thought of the settings.  I haven't done the 720 yet.  I think in a couple days I'm going to go through and double check everything that has been pointed out as wrong and fix it.  Then I'll encode the raw 480p and then I'll add the tweaks and upsize to 720p.

Luke threw twice…maybe.

Author
Time

Darth Mallwalker said:

Perhaps I should have said:
SelectEvery(10, is better than SelectEvery(5, if the source is YV12.

With 4:2:0 source you want to keep whichever two fields were encoded together.
Not always the first two or always last two, but alternating.

 

I believe I understand now.  Thanks for the explanation.

Author
Time
 (Edited)

althor1138 said:

It alternates between the raw capture and the settings I planned on using. 

Yeah, stupid me... it took a while before it hit me. Sorry, I'm really slow today. :)

althor1138 said:

You should probably not watch this temporally but step through it. I just wanted to see what people thought of the settings. I haven't done the 720 yet.

If you want an epileptic seizure, I can recommend it. Anyway, the sample looks great, the reduced haloing is nice. What filter are you using for the dehaloing?

We want you to be aware that we have no plans—now or in the future—to restore the earlier versions. 

Sincerely, Lynne Hale publicity@lucasfilm.com

Author
Time

I used several successive calls to generalconvolution to create an edge mask on the right side of bright areas next to dark areas and then shifted the mask over to match the right-edge halo of my laserdisc player.  Then I used overlay with the mask and mode="multiply" to get rid of the halo. This isn't on every disc though so I guess it's combination of the laserdisc and the player which creates this sometimes.  On ESB and TPM it's not very prominent like on SW for example.

 

source=avisource()

conv1=conv.converttorgb32().GeneralConvolution(0, "
   1  0 -1
   2  0 -2
   1  0 -1 ", 8)

conv2=conv1.GeneralConvolution(0, "
  0 0 0 0 0
  0 0 0 0 0
  1 0 0 0 0
  0 0 0 0 0
  0 0 0 0 0 ")

conv3=conv2.GeneralConvolution(0, "
  0 0 0 0 0
  0 0 0 0 0
  0 1 0 0 0
  0 0 0 0 0
  0 0 0 0 0 ")

overlaymask=overlay(source,conv3,mode="multiply",mask=conv3.converttorgb32().mask(conv3.converttorgb32()))

return(overlaymask)

Luke threw twice…maybe.

Author
Time

Darth Mallwalker said:

 


Fixed the following GOUT frames:
15592 - was combed, see Post_98 above
30739 - was nnedi()ed, but two fields are present
30745 - was missing, but it's nnedi()able

Please check this field:
side1raw.separatefields().trim(82191,-1)
Does it contain Han or blackness?

If Han, then add this line:
s1p33=side1raw.separatefields.trim(82191,-1).nnedi2(dh=true).assumefps("ntsc_film")
to restore GOUT 32186


Moving on to side2, please check the following fields:
side2raw.separatefields().trim(804,-1)
side2raw.separatefields().trim(102203,-1)
Do they contain picture or blackness?

 

Thanks for this.  I've checked the Han or black frame and it contained Han. ESB was very easy to IVTC compared to SW but I can see it needs some fine grooming as well.  What a total mess this set is.

Luke threw twice…maybe.

Author
Time

althor1138 said:

I used several successive calls to generalconvolution to create an edge mask on the right side of bright areas next to dark areas and then shifted the mask over to match the right-edge halo of my laserdisc player.  Then I used overlay with the mask and mode="multiply" to get rid of the halo. This isn't on every disc though so I guess it's combination of the laserdisc and the player which creates this sometimes.  On ESB and TPM it's not very prominent like on SW for example.

Nice, thanks for that. I think most of the edge-enhancement artifacts we see is present in these transfers to begin with already, I don't know how much more work you're willing to spend on the 720p but you could easily improve the look of it if you wanted by just correcting the chroma shift in it, think it's most visible in the first few reels... good examples are the red wall lights on the blockade runner, the red light of Artoo in the canyon and the binary sunset, but I recall the shift isn't off by the same amount from scene to scene or is that constant so it may be a little tedious work.

http://www.geocities.com/siwalters_uk/chromashift.html

an example I did on arnie.d's cap to demonstrate the ugly bleed/shift in it, not perfect but definitely an improvement. Just a suggestion... hope you leave the 480p unfiltered.

We want you to be aware that we have no plans—now or in the future—to restore the earlier versions. 

Sincerely, Lynne Hale publicity@lucasfilm.com

Author
Time

I could continue to tweeze this, but must be past the point of diminishing returns
so instead I'll just turn it loose:

Mallwalker said:


s1p11= side1raw.assumetff.separatefields.trim(1760,1761).weave.assumefps("ntsc_film")
s1p12= side1raw.assumetff.separatefields.trim(1762,40721).doubleweave.pulldown(0,3)#(0,2)
s1p1 = s1p11 ++ s1p12 ##_______________________________________________________________________# 2+2:3...2:3
s1p21= side1raw.assumetff.separatefields.trim(40722,-1).nnedi2(dh=true).assumefps("ntsc_film")
s1p22= side1raw.assumetff.separatefields.trim(40723,78587).doubleweave.pulldown(1,3)#(0,3)
s1p23= side1raw.assumetff.separatefields.trim(78588,78589).weave.assumefps("ntsc_film")
s1p2 = s1p21 ++ s1p22 ++ s1p23 #_______________________________________________________________# 1+3:2...3:2+2
s1p31= side1raw.assumetff.separatefields.trim(78590,-1).nnedi2(dh=true).assumefps("ntsc_film")
s1p32= side1raw.assumetff.separatefields.trim(78591,82190).doubleweave.pulldown(1,3)#(0,3)
s1p33= side1raw.assumetff.separatefields.trim(82191,-1).nnedi2(dh=true).assumefps("ntsc_film")
s1p3 = s1p31 ++ s1p32 ++ s1p33 #_______________________________________________________________# 1+3:2...3:2+1
s1 = s1p1 ++ s1p2 ++ s1p3

s2p11= side2raw.assumetff.separatefields.trim(804,-1).nnedi2(dh=true).assumefps("ntsc_film")
s2p12= side2raw.assumetff.separatefields.trim(805,36611).doubleweave.pulldown(0,3)#(0,2)
s2p13= side2raw.assumetff.separatefields.trim(36612,36613).weave.assumefps("ntsc_film")
s2p1 = s2p11 ++ s2p12 ++ s2p13 #_______________________________________________________________# 1+2:3...3:2+2
s2p2 = side2raw.assumetff.separatefields.trim(36614,69211).doubleweave.pulldown(0,3)#(1,3)
s2p2 = s2p2 ##________________________________________________________________________________# 3:2...2:3
s2p31= side2raw.assumetff.separatefields.trim(69212,-1).nnedi2(dh=true).assumefps("ntsc_film")
s2p32= side2raw.assumetff.separatefields.trim(69213,102202).doubleweave.pulldown(1,3)#(0,3)
s2p33= side2raw.assumetff.separatefields.trim(102203,-1).nnedi2(dh=true).assumefps("ntsc_film")
s2p3 = s2p31 ++ s2p32 ++ s2p33 #_______________________________________________________________# 1+3:2...3:2+1
s2 = s2p1 ++ s2p2 ++ s2p3

s3p11= side3raw.assumetff.separatefields.trim(824,825).weave.assumefps("ntsc_film")
s3p12= side3raw.assumetff.separatefields.trim(826,6517).doubleweave.pulldown(0,3)#(0,2)
s3p1 = s3p11 ++ s3p12 ##_______________________________________________________________________# 2+2:3...3:2
s3p2 = side3raw.assumetff.separatefields.trim(6518,46069).doubleweave.pulldown(0,2)#(0,3)
s3p2 = s3p2 ##________________________________________________________________________________# 2:3...3:2
s3p31= side3raw.assumetff.separatefields.trim(46070,84142).doubleweave.pulldown(0,3)#(1,3)
s3p32= side3raw.assumetff.separatefields.trim(84143,-1).nnedi2(dh=true).assumefps("ntsc_film")
s3p3 = s3p31 ++ s3p32 ##_______________________________________________________________________# 3:2...2:3+1
s3 = s3p1 ++ s3p2 ++ s3p3

s4p11= side4raw.assumetff.separatefields.trim(726,727).weave.assumefps("ntsc_film")
s4p12= side4raw.assumetff.separatefields.trim(728,39619).doubleweave.pulldown(0,2)#(0,3)
s4p1 = s4p11 ++ s4p12 ##_______________________________________________________________________# 2+2:3...3:2
s4p21= side4raw.assumetff.separatefields.trim(39620,39621).weave.assumefps("ntsc_film")
s4p22= side4raw.assumetff.separatefields.trim(39622,72123).doubleweave.pulldown(0,3)#(0,2)
s4p23= side4raw.assumetff.separatefields.trim(72124,72125).weave.assumefps("ntsc_film")
s4p2 = s4p21 ++ s4p22 ++ s4p23 #_______________________________________________________________# 2+2:3...3:2+2
s4p31= side4raw.assumetff.separatefields.trim(72126,72127).weave.assumefps("ntsc_film")
s4p32= side4raw.assumetff.separatefields.trim(72128,92867).doubleweave.pulldown(0,3)#(0,2)
s4p3 = s4p31 ++ s4p32 ##_______________________________________________________________________# 2+2:3...2:3
s4 = s4p1 ++ s4p2 ++ s4p3

s5p11= side5raw.assumetff.separatefields.trim(696,-1).nnedi2(dh=true).assumefps("ntsc_film")
s5p12= side5raw.assumetff.separatefields.trim(697,18609).doubleweave.pulldown(1,3)#(0,3)
s5p1 = s5p11 ++ s5p12 ##_______________________________________________________________________# 1+3:2...2:3
s5p21= side5raw.assumetff.separatefields.trim(18610,18611).weave.assumefps("ntsc_film")
s5p22= side5raw.assumetff.separatefields.trim(18612,56196).doubleweave.pulldown(0,3)#(0,2)
s5p23= side5raw.assumetff.separatefields.trim(56197,-1).nnedi2(dh=true).assumefps("ntsc_film")
s5p2 = s5p21 ++ s5p22 ++ s5p23 #_______________________________________________________________# 2+2:3...2:3+1
s5p3 = side5raw.assumetff.separatefields.trim(56198,0).doubleweave.pulldown(0,3).trim(0,14350) # pulldown(1,3)
s5 = s5p1 ++ s5p2 ++ s5p3 #________________________________________________________________# 3:2...

In the comments I've attempted to show the orphan frames at the head/tail of each clip.

The 1's get nnedi()ed. The orphan 2's (those which should have been 3 but one field is missing) they get weave()ed.

Each time pulldown(a,b) is called, I've also provided the other working (a,b) parameter in the comments.
Because sometimes you have a specific reason to choose the last two fields, or the first two, from each 3-field-frame.

The following GOUT frames are added, which were missing from your first ESB release:
30745 (I already mentioned this one)
32186
32192
59577
72774
106159
143038, 143042

These GOUT frames were nnedi()ed in you first MKV, but should've been weave()ed if two fields are present in the source:
30739 (already mentioned)
46516
134728

However, in practice you must take into account the “fuckwit factor”. Just talk to Darth Mallwalker…
-Moth3r

Author
Time
 (Edited)

Any updates, althor1138?  It's been a little over a month since I've seen any news on this project.

Author
Time

I've been capturing all of the other Star Wars laserdiscs that I own.  That is complete now.  I think what I am going to do is put the raw files on usenet.  I so far have captured:

JSC trilogy

DC trilogy

SE trilogy

The Phantom Menace

 

Luke threw twice…maybe.

Author
Time

althor1138 said:

I've been capturing all of the other Star Wars laserdiscs that I own.  That is complete now.  I think what I am going to do is put the raw files on usenet.  I so far have captured:

JSC trilogy

DC trilogy

SE trilogy

The Phantom Menace

Wow, cool! Thanks!

A picture is worth a thousand words. Post 102 is worth more.

I’m late to the party, but I think this is the best song. Enjoy!

—Teams Jetrell Fo 1, Jetrell Fo 2, and Jetrell Fo 3

Author
Time

I'm currently posting SW to the newsgroup.  The first post should be finished in a couple of hours.  This is my first time posting so please bear with me.  The first post will have some incomplete files because I messed up the upload a couple of times but I've re-uploaded them so everything should be there. 

Luke threw twice…maybe.

Author
Time

Got Sides 1+2 okay after a little repair. Thanks. :)

Author
Time

It looks like I need to buy a new hard drive. :D  Thanks, althor.

Author
Time

Thanks for the feedback!  If there is interest I'll be uploading the rest of the trilogy and probably the 97SE trilogy as well.  I see no reason to post the DC.

Luke threw twice…maybe.